Compare commits

..

192 Commits

Author SHA1 Message Date
gh-movie-web
48b955f58d Merge 2e1008abf3 into f3dd80f42b 2024-04-22 20:45:18 +00:00
Mehdi
2e1008abf3 Translated using Weblate (Persian)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-04-22 20:45:11 +00:00
maximehrd
65cc20b25d Translated using Weblate (Dutch)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/nl/
Author: maximehrd <maxlol78000@gmail.com>
2024-04-22 20:45:11 +00:00
maximehrd
88e5fd8368 Translated using Weblate (French)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fr/
Author: maximehrd <maxlol78000@gmail.com>
2024-04-22 20:45:11 +00:00
Queen
62e9dbd376 Translated using Weblate (Slovenian)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/sl/
Author: Queen <anastasiapevac@gmail.com>
2024-04-22 20:45:11 +00:00
Queen
beb3ec53b2 Translated using Weblate (German)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/de/
Author: Queen <anastasiapevac@gmail.com>
2024-04-22 20:45:11 +00:00
FMEEE
9d4fce9920 Translated using Weblate (German)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/de/
Author: FMEEE <anketobi@ya.ru>
2024-04-22 20:45:11 +00:00
Cuong Pham
edb7748cbe Translated using Weblate (Vietnamese)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/vi/
Author: Cuong Pham <cuong.phm@proton.me>
2024-04-22 20:45:11 +00:00
Cuong Pham
4095420b59 Translated using Weblate (Vietnamese)
Currently translated at 98.8% (336 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/vi/
Author: Cuong Pham <cuong.phm@proton.me>
2024-04-22 20:45:11 +00:00
Cuong Pham
16254b6b93 Translated using Weblate (Vietnamese)
Currently translated at 43.5% (148 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/vi/
Author: Cuong Pham <cuong.phm@proton.me>
2024-04-22 20:45:11 +00:00
Thais Palmer
d8b574aad8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/pt_BR/
Author: Thais Palmer <eu@thaispalmer.com.br>
2024-04-22 20:45:11 +00:00
Raymond Nee
6e21fb908d Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/zh_Hans/
Author: Raymond Nee <monstorix@outlook.com>
2024-04-22 20:45:11 +00:00
Jamie Poznanski
5a6fc32722 Translated using Weblate (Italian)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/it/
Author: Jamie Poznanski <enby_jamie@users.noreply.weblate.movie-web.app>
2024-04-22 20:45:11 +00:00
superlincoln
d6d298b439 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/zh_Hant/
Author: superlincoln <littlelittlelincoln@gmail.com>
2024-04-22 20:45:11 +00:00
Alex
d16e2f16e2 Translated using Weblate (Russian)
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ru/
Author: Alex <aslanych99@mail.ru>
2024-04-22 20:45:11 +00:00
superlincoln
0dacf53afa Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (340 of 340 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/zh_Hans/
Author: superlincoln <littlelittlelincoln@gmail.com>
2024-04-22 20:45:11 +00:00
Jorrin
f3dd80f42b Merge pull request #1150 from movie-web/fix/#962
decrease amount of margin of edit button on small screens
2024-04-22 22:45:07 +02:00
William Oldham
cfc74dfa78 Merge branch 'dev' into fix/#962 2024-04-22 21:15:23 +01:00
William Oldham
1a3144a872 Merge pull request #1153 from movie-web/feature/#754
Improve how to change seasons
2024-04-22 21:14:09 +01:00
Jorrin
ae81832037 improve how to change seasons 2024-04-22 20:26:54 +02:00
Jorrin
3da8955607 decrease amount of margin on small screens 2024-04-22 19:12:18 +02:00
William Oldham
9bd5f30f40 Merge pull request #1140 from movie-web/fix/#1118
fix tmdb 404 request
2024-04-20 10:37:58 +01:00
Jorrin
0a15bb2023 consistent returns 2024-04-20 11:36:38 +02:00
Jorrin
cfa3cfd072 check for undefined 2024-04-19 19:28:49 +02:00
Jorrin
5fbe5d1ff5 fix tmdb 404 request 2024-04-19 19:26:29 +02:00
William Oldham
4712d8fc5d Merge pull request #1122 from movie-web/fix/tmdb
Use vanilla AbortController for compatability
2024-04-15 20:13:55 +01:00
William Oldham
a9d80ddf24 Use vanilla AbortController for compat 2024-04-15 20:10:44 +01:00
Jorrin
3c4d84db5c Merge pull request #1117 from movie-web/dev
Version 4.7.0
2024-04-14 23:04:46 +02:00
William Oldham
dad968ee0f Bump version 2024-04-14 21:52:12 +01:00
William Oldham
8eeb200558 Bump provider to 2.3.0 2024-04-14 21:52:12 +01:00
Jorrin
0b3eb67a52 Merge branch 'master' into dev 2024-04-14 22:50:36 +02:00
William Oldham
0c543b6516 Merge pull request #1094 from gh-movie-web/weblate-movie-web-website
Translations update from movie-web weblate
2024-04-14 21:44:51 +01:00
Erwann Lagouche
612c98c246 Translated using Weblate (French)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fr/
Author: Erwann Lagouche <popGthyrd@gmail.com>
2024-04-14 20:44:14 +00:00
Mehdi
8da9db2c83 Translated using Weblate (Persian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-04-14 20:44:14 +00:00
Mehdi
2a827bd0a4 Translated using Weblate (Persian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-04-14 20:44:14 +00:00
William Oldham
ff95d1f713 Merge pull request #1072 from qtchaos/feat/autoplay
feat: add autoplay preference
2024-04-14 21:44:11 +01:00
William Oldham
ad83797451 Merge branch 'dev' into feat/autoplay 2024-04-14 21:30:44 +01:00
William Oldham
926018310e Fix TMDB code 2024-04-14 21:29:45 +01:00
William Oldham
44694c6c5a Merge pull request #1108 from meghrathod/dev
Added alternate tmdb endpoint to fallback when main url is blocked
2024-04-14 21:21:09 +01:00
William Oldham
527b473835 Merge pull request #1098 from dro-1/fix/next-episode
Fixed next episode button not loading new season
2024-04-14 21:18:56 +01:00
William Oldham
85337018b1 Merge branch 'dev' into fix/next-episode 2024-04-14 21:17:41 +01:00
Seun Taiwo
90c4365422 Fixed next episode button not showing next season 2024-04-14 20:20:48 +01:00
Megh Rathod
995c855ac2 added useFallback to decide which TMDB url to use
Signed-off-by: Megh Rathod <me@meghrathod.dev>
2024-04-14 16:19:51 +05:30
Megh Rathod
0e3f82df30 Return values instead of promise
Co-authored-by: William Oldham <github@binaryoverload.co.uk>
2024-04-14 15:14:14 +05:30
Megh Rathod
76d906c95a fix: use AbortSignal.timeout instead of setTimeout
Signed-off-by: Megh Rathod <me@meghrathod.dev>
2024-04-12 23:29:42 +05:30
Jorrin
391554538a Merge branch 'dev' into feat/autoplay 2024-04-12 19:06:40 +02:00
Megh Rathod
1ec51699d1 fix: add alternate tmdb endpoint to fix errors when main url is blocked
Signed-off-by: Megh Rathod <me@meghrathod.dev>
2024-04-12 11:33:18 +05:30
qtchaos
ed451763ed chore: clean up classNames 2024-04-12 00:04:19 +03:00
qtchaos
e46ca23516 chore: clean up code and remove intervals 2024-04-12 00:01:57 +03:00
Megh Rathod
8a9def00de fix: tmdb fetch failure due ISP blocks in India
Signed-off-by: Megh Rathod <me@meghrathod.dev>
2024-04-11 23:34:40 +05:30
William Oldham
cf8018c9e9 Merge pull request #1102 from vijaysingh2219/dev
Implement functionality to open URL in new tab on middle click
2024-04-10 23:34:31 +01:00
Vijay
374fd57dbc Replaced button with react-router-dom's Link component for better navigation. 2024-04-11 03:48:56 +05:30
Vijay
5275c56725 Implement functionality to open URL in new tab on middle click
Added handleClick function to check for middle mouse button (event.button === 1), opening the URL in a new tab using window.open.
Improves user experience by offering an alternative method to open URLs without leaving the current page.
2024-04-11 00:39:55 +05:30
qtchaos
9044b4407f chore: remove whitespace 2024-04-10 20:37:36 +03:00
qtchaos
92afd66166 chore: update pnpm-lock.yaml 2024-04-10 20:27:08 +03:00
qtchaos
c8fa561c7f fix: remove unnecessary lodash functions and use setInterval instead 2024-04-10 20:25:45 +03:00
chaos
e78d7a36f5 Merge branch 'dev' into feat/autoplay 2024-04-10 19:24:26 +03:00
Jorrin
b6c894a87a Merge pull request #1099 from movie-web/feature/default-audio-language
Select default audio language based on setting
2024-04-10 18:20:15 +02:00
Jorrin
4bdb366139 Merge branch 'dev' into feature/default-audio-language 2024-04-10 18:18:52 +02:00
Jorrin
2f92bc4ee6 Merge pull request #1101 from vijaysingh2219/dev
Fix keyboard event handling in KeyboardEvents component
2024-04-10 18:18:39 +02:00
Vijay
2722a7db96 Fix keyboard event handling in KeyboardEvents component
- Changed the condition from 'k' to 'keyL' for 'j', 'l', 'm', 'f', 'c', 'r' keys to handle uppercase keys properly.
- Fixed the condition for toggling play/pause to work with both ' ' and 'k' keys.

This commit addresses issues with keyboard event handling and ensures proper functionality with both uppercase and lowercase keys.
2024-04-10 21:24:29 +05:30
Jorrin
9d4be2cb55 Select default audio language based on setting 2024-04-08 16:32:33 +02:00
Jorrin
fed9a0c2dd Merge pull request #1089 from movie-web/dev
Version 4.6.6
2024-04-05 20:26:21 +02:00
Jorrin
892292088d Merge branch 'master' into dev 2024-04-05 20:13:55 +02:00
Jorrin
bd9db1dc80 Update pnpm-lock.yaml 2024-04-05 20:12:39 +02:00
Jorrin
c0edae8a36 bump versions 2024-04-05 20:10:41 +02:00
Jorrin
cab9609132 Merge pull request #1080 from gh-movie-web/weblate-movie-web-website
Translations update from movie-web weblate
2024-04-05 20:10:03 +02:00
Matic Boncina
d014bcee55 Translated using Weblate (Slovenian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/sl/
Author: Matic Boncina <476328473@express.ninja>
2024-04-05 18:07:59 +00:00
Aayush Shah
53de238bd3 Translated using Weblate (Hindi)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/hi/
Author: Aayush Shah <shahaayush999@gmail.com>
2024-04-05 18:07:59 +00:00
Aayush Shah
ae4adddee6 Translated using Weblate (Nepali)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ne/
Author: Aayush Shah <shahaayush999@gmail.com>
2024-04-05 18:07:59 +00:00
Mehdi
38d32b294e Translated using Weblate (Persian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-04-05 18:07:59 +00:00
superlincoln
0077a5ace7 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/zh_Hant/
Author: superlincoln <littlelittlelincoln@gmail.com>
2024-04-05 18:07:59 +00:00
superlincoln
377f6740b5 Translated using Weblate (Korean)
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ko/
Author: superlincoln <littlelittlelincoln@gmail.com>
2024-04-05 18:07:59 +00:00
superlincoln
b8fec30d29 Translated using Weblate (Dutch)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/nl/
Author: superlincoln <littlelittlelincoln@gmail.com>
2024-04-05 18:07:59 +00:00
superlincoln
01687da4df Translated using Weblate (German)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/de/
Author: superlincoln <littlelittlelincoln@gmail.com>
2024-04-05 18:07:59 +00:00
Raymond Nee
f046728434 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/zh_Hans/
Author: Raymond Nee <monstorix@outlook.com>
2024-04-05 18:07:59 +00:00
Jorrin
17d7f292b5 Merge pull request #1088 from movie-web/fix/vidsrcto-and-ridomovies
Fixes for VidSrcTo & Ridomovies
2024-04-05 20:07:54 +02:00
Jorrin
855e594c09 Fix switching from hls source to hls source 2024-04-05 19:16:46 +02:00
Jorrin
af2e6b793d Merge pull request #1081 from movie-web/dependabot/npm_and_yarn/vite-5.0.13
Bump vite from 5.0.12 to 5.0.13
2024-04-03 20:42:48 +02:00
dependabot[bot]
f0df8c3efb Bump vite from 5.0.12 to 5.0.13
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.12 to 5.0.13.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.0.13/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.13/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-03 17:55:25 +00:00
William Oldham
83af8891f7 Merge pull request #1074 from movie-web/dev
Version 4.6.5: Fixing showbox once again
2024-03-31 23:37:45 +01:00
Jorrin
eab7b09292 Merge branch 'master' into dev 2024-04-01 00:34:56 +02:00
Jorrin
84bddd2e4d bump versions 2024-04-01 00:31:40 +02:00
qtchaos
34168a7037 feat: add autoplay configurability with VITE_ALLOW_AUTOPLAY and custom proxy 2024-04-01 00:43:00 +03:00
Jorrin
a392f943f8 Merge pull request #1071 from movie-web/dev
Version 4.6.4: Fixing showbox once again
2024-03-31 21:07:10 +02:00
Jorrin
05a714d50f bump versions 2024-03-31 21:00:42 +02:00
Jorrin
7a2f417cdd Merge pull request #1060 from gh-movie-web/weblate-movie-web-website
Translations update from movie-web weblate
2024-03-31 20:58:16 +02:00
qtchaos
20cec61eac feat: add autoplay preference for extension users 2024-03-31 21:55:06 +03:00
Mehdi
5355791486 Translated using Weblate (Persian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-03-31 18:40:23 +00:00
Dave
caf5faeb49 Translated using Weblate (Indonesian)
Currently translated at 83.3% (280 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/id/
Author: Dave <dave.turmawan@outlook.com>
2024-03-31 18:40:23 +00:00
Thais Palmer
232fb7e895 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/pt_BR/
Author: Thais Palmer <eu@thaispalmer.com.br>
2024-03-31 18:40:23 +00:00
Dave
f20fe984d3 Translated using Weblate (Indonesian)
Currently translated at 77.6% (261 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/id/
Author: Dave <dave.turmawan@outlook.com>
2024-03-31 18:40:23 +00:00
Dave
35c6d25268 Translated using Weblate (Indonesian)
Currently translated at 76.1% (256 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/id/
Author: Dave <dave.turmawan@outlook.com>
2024-03-31 18:40:23 +00:00
Alex
0ae96309c7 Translated using Weblate (Russian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ru/
Author: Alex <aslanych99@mail.ru>
2024-03-31 18:40:23 +00:00
William Oldham
1e0b86badf Merge pull request #1070 from movie-web/fix/hls-audio-not-proxied
Route HLS audio tracks through extension
2024-03-31 19:40:18 +01:00
Jorrin
6a905bf517 Also route hls audio tracks through extension 2024-03-31 20:20:10 +02:00
William Oldham
a5694fa430 Merge pull request #1068 from lonelil/dev
add sync fork workflow
2024-03-31 16:53:49 +01:00
lonelil
d006ed9a49 add sync fork workflow 2024-03-31 23:05:50 +08:00
Jorrin
b06eedb041 Merge pull request #1048 from movie-web/dev
4.6.3: Audio Tracks, Drag and Drop subtitles, various fixes
2024-03-29 18:54:55 +01:00
Jorrin
2b2a4a2698 Merge pull request #1023 from gh-movie-web/weblate-movie-web-website
Translations update from movie-web weblate
2024-03-29 18:38:00 +01:00
Alex
4ee32a9dd9 Translated using Weblate (Russian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ru/
Author: Alex <aslanych99@mail.ru>
2024-03-29 17:32:20 +00:00
Jamie Poznanski
737a0b034d Translated using Weblate (Italian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/it/
Author: Jamie Poznanski <enby_jamie@users.noreply.weblate.movie-web.app>
2024-03-29 17:32:20 +00:00
LeBron James
5150e6c7ff Translated using Weblate (Turkish)
Currently translated at 99.1% (333 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/tr/
Author: LeBron James <ollie.the0000@gmail.com>
2024-03-29 17:32:20 +00:00
LeBron James
469e118681 Translated using Weblate (Turkish)
Currently translated at 98.8% (332 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/tr/
Author: LeBron James <ollie.the0000@gmail.com>
2024-03-29 17:32:20 +00:00
chaos
70eb8f381c Translated using Weblate (Estonian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/et/
Author: chaos <chaos@users.noreply.weblate.movie-web.app>
2024-03-29 17:32:20 +00:00
LeBron James
43c912dd33 Translated using Weblate (Turkish)
Currently translated at 98.8% (332 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/tr/
Author: LeBron James <ollie.the0000@gmail.com>
2024-03-29 17:32:20 +00:00
chaos
0cf04f803d Translated using Weblate (Estonian)
Currently translated at 99.4% (334 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/et/
Author: chaos <chaos@users.noreply.weblate.movie-web.app>
2024-03-29 17:32:20 +00:00
Mehdi
8a17c3d38e Translated using Weblate (Persian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-03-29 17:32:20 +00:00
Mehdi
483cfe4e7f Translated using Weblate (Persian)
Currently translated at 100.0% (336 of 336 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-03-29 17:32:20 +00:00
Jamie Poznanski
080a80245a Translated using Weblate (Italian)
Currently translated at 100.0% (335 of 335 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/it/
Author: Jamie Poznanski <enby_jamie@users.noreply.weblate.movie-web.app>
2024-03-29 17:32:20 +00:00
blikje
33b77c475b Translated using Weblate (Dutch)
Currently translated at 100.0% (335 of 335 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/nl/
Author: blikje <Blikje7up@gmail.com>
2024-03-29 17:32:20 +00:00
thehairy
e063ad5e02 Translated using Weblate (German)
Currently translated at 100.0% (335 of 335 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/de/
Author: thehairy <soeren.stabenow@outlook.com>
2024-03-29 17:32:20 +00:00
n1ck
9dc5d484be Translated using Weblate (Galician)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/gl/
Author: n1ck <n1ck.lim@proton.me>
2024-03-29 17:32:20 +00:00
Mehdi
e203c1418a Translated using Weblate (Persian)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-03-29 17:32:20 +00:00
Alex
b816142ac5 Translated using Weblate (Russian)
Currently translated at 99.6% (329 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ru/
Author: Alex <aslanych99@mail.ru>
2024-03-29 17:32:20 +00:00
Thais Palmer
367750898a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/pt_BR/
Author: Thais Palmer <eu@thaispalmer.com.br>
2024-03-29 17:32:20 +00:00
n1ck
4f880b2a79 Translated using Weblate (Spanish)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/es/
Author: n1ck <n1ck.lim@proton.me>
2024-03-29 17:32:20 +00:00
Jakub Herda
f3104d2927 Translated using Weblate (Polish)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/pl/
Author: Jakub Herda <kuba033009@gmail.com>
2024-03-29 17:32:20 +00:00
blikje
559279e733 Translated using Weblate (Dutch)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/nl/
Author: blikje <Blikje7up@gmail.com>
2024-03-29 17:32:20 +00:00
Origaming
7a84b0377f Translated using Weblate (French)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fr/
Author: Origaming <mabarleycorne@gmail.com>
2024-03-29 17:32:20 +00:00
5Litt
ea86c0c347 Translated using Weblate (Czech)
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/cs/
Author: 5Litt <5Litt@users.noreply.weblate.movie-web.app>
2024-03-29 17:32:20 +00:00
Jakub Herda
d2d6b46627 Translated using Weblate (Polish)
Currently translated at 99.3% (328 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/pl/
Author: Jakub Herda <kuba033009@gmail.com>
2024-03-29 17:32:20 +00:00
Jamie Poznanski
f259b8aac3 Translated using Weblate (Italian)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/it/
Author: Jamie Poznanski <enby_jamie@users.noreply.weblate.movie-web.app>
2024-03-29 17:32:20 +00:00
teaishealthy
6d884f5d34 Translated using Weblate (German)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/de/
Author: teaishealthy <teaishealthy@protonmail.com>
2024-03-29 17:32:20 +00:00
thehairy
fe46806ce5 Translated using Weblate (German)
Currently translated at 100.0% (330 of 330 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/de/
Author: thehairy <soeren.stabenow@outlook.com>
2024-03-29 17:32:20 +00:00
n1ck
f4c9321926 Translated using Weblate (Galician)
Currently translated at 100.0% (329 of 329 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/gl/
Author: n1ck <n1ck.lim@proton.me>
2024-03-29 17:32:20 +00:00
Alex
2761f1ebfd Translated using Weblate (Russian)
Currently translated at 100.0% (329 of 329 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ru/
Author: Alex <aslanych99@mail.ru>
2024-03-29 17:32:20 +00:00
Thais Palmer
72e6c1cf2c Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (329 of 329 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/pt_BR/
Author: Thais Palmer <eu@thaispalmer.com.br>
2024-03-29 17:32:20 +00:00
n1ck
bf26e171d6 Translated using Weblate (Spanish)
Currently translated at 100.0% (329 of 329 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/es/
Author: n1ck <n1ck.lim@proton.me>
2024-03-29 17:32:20 +00:00
Jamie Poznanski
b73a24d357 Translated using Weblate (Italian)
Currently translated at 100.0% (329 of 329 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/it/
Author: Jamie Poznanski <enby_jamie@users.noreply.weblate.movie-web.app>
2024-03-29 17:32:20 +00:00
Mehdi
4afd7dea13 Translated using Weblate (Persian)
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/fa/
Author: Mehdi <pyrexrj@gmail.com>
2024-03-29 17:32:20 +00:00
aryiu
dbcf060d4c Translated using Weblate (Valencian)
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ca@valencia/
Author: aryiu <aryiu@users.noreply.weblate.476328473.xyz>
2024-03-29 17:32:20 +00:00
aryiu
6681a4471b Translated using Weblate (Catalan)
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ca/
Author: aryiu <aryiu@users.noreply.weblate.476328473.xyz>
2024-03-29 17:32:20 +00:00
superlincoln953
274f9dc888 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/zh_Hant/
Author: superlincoln953 <littlelittlelincoln@gmail.com>
2024-03-29 17:32:20 +00:00
LeBron James
1d97dca90c Translated using Weblate (Turkish)
Currently translated at 98.4% (323 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/tr/
Author: LeBron James <ollie.the0000@gmail.com>
2024-03-29 17:32:20 +00:00
dimii27
7ed49b2e8f Translated using Weblate (Romanian)
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ro/
Author: dimii27 <dimitrieietcu@gmail.com>
2024-03-29 17:32:20 +00:00
Daanii Kusnanta
3bf85c27bd Translated using Weblate (Indonesian)
Currently translated at 76.8% (252 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/id/
Author: Daanii Kusnanta <danynabilgk@gmail.com>
2024-03-29 17:32:20 +00:00
Thais Palmer
12fd425ca6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/pt_BR/
Author: Thais Palmer <eu@thaispalmer.com.br>
2024-03-29 17:32:20 +00:00
dimii27
a8263ec27e Translated using Weblate (Spanish)
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/es/
Author: dimii27 <dimitrieietcu@gmail.com>
2024-03-29 17:32:19 +00:00
dimii27
759f9d5437 Translated using Weblate (Romanian)
Currently translated at 89.0% (292 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/ro/
Author: dimii27 <dimitrieietcu@gmail.com>
2024-03-29 17:32:19 +00:00
superlincoln953
83cf6855d5 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (328 of 328 strings)

Translation: movie-web/website
Translate-URL: https://weblate.476328473.xyz/projects/movie-web/website/zh_Hant/
Author: superlincoln953 <littlelittlelincoln@gmail.com>
2024-03-29 17:32:19 +00:00
Jorrin
de907cb313 bump version and providers 2024-03-29 18:32:15 +01:00
Jorrin
c00bff5c7c Merge pull request #1055 from lmmelo16/dev
Fix #241: Last episode completed does not save
2024-03-29 18:14:00 +01:00
lmmelo16
9aebffd9c9 Merge branch 'dev' into dev 2024-03-29 15:34:26 +00:00
William Oldham
e55afd52f3 Merge pull request #1050 from movie-web/fix/unreleased
Add logic for same year not released and fix language string
2024-03-28 14:17:55 +00:00
William Oldham
20202d2216 Add logic for same year not released and fix language string 2024-03-28 13:39:18 +00:00
William Oldham
5b7e0129d9 Merge pull request #1044 from Honkertonken/filter-unreleased
Filter unreleased shows/movies.
2024-03-28 11:48:02 +00:00
Honkertonken
bfee71f446 Update MediaCard.tsx 2024-03-28 16:47:18 +05:30
William Oldham
6efce6bdf6 Merge branch 'dev' into filter-unreleased 2024-03-28 09:22:36 +00:00
Captain Jack Sparrow
d82de1f7c8 Better scrape error text for extension (#1042)
* Add better scrape error messages for the extension

* Remove config.js silly me

* Polish and resolve issues

* Update src/pages/parts/player/ScrapeErrorPart.tsx

Co-authored-by: William Oldham <github@binaryoverload.co.uk>

* Update src/pages/parts/player/ScrapeErrorPart.tsx

Co-authored-by: William Oldham <github@binaryoverload.co.uk>

* Update src/pages/parts/player/ScrapeErrorPart.tsx

Co-authored-by: William Oldham <github@binaryoverload.co.uk>

* Update src/pages/parts/player/ScrapeErrorPart.tsx

Co-authored-by: William Oldham <github@binaryoverload.co.uk>

* Update src/pages/parts/player/ScrapeErrorPart.tsx

Co-authored-by: William Oldham <github@binaryoverload.co.uk>

* Update src/pages/parts/player/ScrapeErrorPart.tsx

Co-authored-by: William Oldham <github@binaryoverload.co.uk>

* Fix duplicate button value

* Resolve issues

* Ok now i fixed it all

* Apply suggestions from code review

* I am dum

---------

Co-authored-by: Cooper Ransom <cooperransom08@outlook.com>
Co-authored-by: William Oldham <github@binaryoverload.co.uk>
2024-03-28 09:17:17 +00:00
Honkertonken
9888798c28 Update MediaCard.tsx 2024-03-28 13:36:56 +05:30
Honkertonken
4386772404 Update MediaCard.tsx 2024-03-28 13:27:05 +05:30
Honkertonken
225c50f1b6 Merge branch 'filter-unreleased' of https://github.com/Honkertonken/movie-web into filter-unreleased 2024-03-27 23:21:07 +05:30
Honkertonken
e859ceed44 Revert "Update tmdb.ts"
This reverts commit c4f68615cd.
2024-03-27 23:19:35 +05:30
Honkertonken
e431626bfa Update MediaCard.tsx 2024-03-27 23:19:12 +05:30
Honkertonken
c4f68615cd Update tmdb.ts 2024-03-27 18:20:57 +05:30
William Oldham
27e73a8ad4 Merge pull request #1025 from zisra/dev
Drop subtitles
2024-03-26 18:32:43 +00:00
William Oldham
0581d01cbf Merge branch 'dev' into dev 2024-03-26 17:13:54 +00:00
William Oldham
cc81eb3072 Merge pull request #1041 from qtchaos/fix/leaky-test
fix: stop failed test from leaking worker url
2024-03-26 17:11:38 +00:00
qtchaos
42d107dd9d fix: stop failed test from leaking worker url 2024-03-26 18:45:24 +02:00
zisra
a0b0753d45 Merge branch 'movie-web:dev' into dev 2024-03-26 10:58:52 -05:00
4e93865aed Merge branch 'dev' of https://github.com/zisra/movie-web into dev 2024-03-26 10:58:23 -05:00
e54077045d Change icon 2024-03-26 00:29:47 -05:00
William Oldham
94c4e71756 Merge pull request #1038 from movie-web/feature/audiotracks
Support for HLS audio tracks
2024-03-25 23:10:37 +00:00
zisra
8d0549d2e7 Merge branch 'movie-web:dev' into dev 2024-03-25 13:12:12 -05:00
Joao Melo
f4dd6f95a4 Fix #241: Last episode completed does not save
After ending episode or clicking on next episode, store state wasn't updating. Changed NextEpisodeButton and which series episodes are displayed
2024-03-25 17:59:11 +00:00
Jorrin
e19ac55847 add pretty language to menu selection 2024-03-24 23:55:58 +01:00
Jorrin
dbb1c19796 add flags to audio options 2024-03-24 23:54:09 +01:00
Jorrin
ef6b0ad1dc Merge branch 'feature/audiotracks' of https://github.com/movie-web/movie-web into feature/audiotracks 2024-03-24 01:52:17 +01:00
Jorrin
c2e587bf90 unused import 2024-03-24 01:52:16 +01:00
Jorrin
abf10c645d Merge branch 'dev' into feature/audiotracks 2024-03-24 01:26:31 +01:00
Jorrin
6ba53ec29a only show audio when its available 2024-03-24 01:04:11 +01:00
William Oldham
21fd5304a1 Merge pull request #1011 from qtchaos/fix/scroll-volume
Add `touch-action: none` to resolve touchpad scrolling issues on volume slider.
2024-03-22 15:48:33 +00:00
William Oldham
b74d05afce Merge branch 'dev' into fix/scroll-volume 2024-03-22 15:47:12 +00:00
qtchaos
39bcf8c270 fix: add overflow-y-hidden for mac users 2024-03-22 17:42:18 +02:00
zisra
557aa79860 Merge branch 'movie-web:dev' into dev 2024-03-21 08:54:43 -05:00
b2ec99c4d1 Make bg darker 2024-03-18 22:08:58 -05:00
a172322a54 Animate show/hide 2024-03-18 15:50:56 -05:00
a26097ffd4 Bold and change size 2024-03-18 13:47:05 -05:00
c9d2d7134b Fix issues 2024-03-18 13:41:10 -05:00
William Oldham
2bee8c200e Merge pull request #1029 from bruhwhyamisobad/dev
Optimize images
2024-03-18 07:42:52 +00:00
ImgBotApp
7cd8ce31b9 [ImgBot] Optimize images
*Total -- 2,824.17kb -> 953.27kb (66.25%)

/public/splash_screens/12.9__iPad_Pro_portrait.png -- 133.80kb -> 40.24kb (69.93%)
/public/splash_screens/10.2__iPad_portrait.png -- 88.15kb -> 26.52kb (69.92%)
/public/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png -- 77.69kb -> 23.42kb (69.86%)
/public/splash_screens/10.2__iPad_landscape.png -- 85.87kb -> 25.91kb (69.83%)
/public/splash_screens/10.5__iPad_Air_landscape.png -- 90.37kb -> 27.29kb (69.81%)
/public/splash_screens/12.9__iPad_Pro_landscape.png -- 131.64kb -> 39.77kb (69.79%)
/public/splash_screens/10.5__iPad_Air_portrait.png -- 91.58kb -> 27.90kb (69.54%)
/public/splash_screens/10.9__iPad_Air_landscape.png -- 95.20kb -> 29.07kb (69.47%)
/public/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png -- 77.88kb -> 23.93kb (69.27%)
/public/splash_screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png -- 96.80kb -> 29.93kb (69.08%)
/public/splash_screens/10.9__iPad_Air_portrait.png -- 96.37kb -> 29.88kb (69%)
/public/splash_screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png -- 99.15kb -> 30.75kb (68.98%)
/public/splash_screens/8.3__iPad_Mini_portrait.png -- 87.99kb -> 27.49kb (68.76%)
/public/splash_screens/8.3__iPad_Mini_landscape.png -- 84.98kb -> 26.59kb (68.71%)
/public/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png -- 74.10kb -> 23.85kb (67.81%)
/public/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png -- 71.94kb -> 23.16kb (67.8%)
/public/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png -- 24.07kb -> 7.95kb (66.97%)
/public/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png -- 29.55kb -> 9.81kb (66.8%)
/public/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png -- 22.69kb -> 7.60kb (66.52%)
/public/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png -- 31.09kb -> 10.50kb (66.24%)
/public/splash_screens/iPhone_15_Pro__iPhone_15__iPhone_14_Pro_portrait.png -- 85.57kb -> 29.09kb (66.01%)
/public/splash_screens/iPhone_11__iPhone_XR_landscape.png -- 44.18kb -> 15.05kb (65.94%)
/public/splash_screens/iPhone_15_Pro__iPhone_15__iPhone_14_Pro_landscape.png -- 82.18kb -> 28.09kb (65.81%)
/public/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png -- 89.90kb -> 30.81kb (65.72%)
/public/splash_screens/iPhone_11__iPhone_XR_portrait.png -- 46.41kb -> 15.91kb (65.71%)
/public/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png -- 78.11kb -> 27.00kb (65.43%)
/public/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png -- 98.33kb -> 34.12kb (65.3%)
/public/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png -- 84.68kb -> 29.39kb (65.29%)
/public/splash_screens/iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_portrait.png -- 98.37kb -> 34.17kb (65.26%)
/public/splash_screens/iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_landscape.png -- 95.72kb -> 33.34kb (65.17%)
/public/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png -- 95.81kb -> 33.39kb (65.15%)
/public/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png -- 74.48kb -> 25.96kb (65.15%)
/public/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png -- 81.39kb -> 28.46kb (65.03%)
/public/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png -- 91.55kb -> 32.12kb (64.92%)
/public/splash_screens/icon.png -- 29.21kb -> 18.22kb (37.62%)
/public/flags/tokiPona.svg -- 2.64kb -> 1.73kb (34.48%)
/public/apple-touch-icon.png -- 6.15kb -> 4.53kb (26.25%)
/public/android-chrome-192x192.png -- 6.81kb -> 5.07kb (25.57%)
/public/android-chrome-512x512.png -- 24.72kb -> 18.85kb (23.73%)
/public/safari-pinned-tab.svg -- 0.82kb -> 0.63kb (23.33%)
/public/lightbar-images/snowflake.svg -- 4.46kb -> 4.16kb (6.74%)
/public/mstile-150x150.png -- 3.10kb -> 2.98kb (3.75%)
/.github/logo-dark.svg -- 3.31kb -> 3.29kb (0.59%)
/.github/logo-light.svg -- 3.31kb -> 3.29kb (0.59%)
/public/flags/skull.svg -- 2.06kb -> 2.06kb (0.05%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2024-03-17 21:04:06 -07:00
Jorrin
c08dea89d1 add audio track selector 2024-03-18 00:06:27 +01:00
57d3f69efa Drop subtitles 2024-03-16 14:55:29 -05:00
William Oldham
2a0e46a97d Fix #1016 - Capitalisation of zh-Hant broke traditional Chinese 2024-03-16 12:54:59 +00:00
William Oldham
227defd713 Merge pull request #1017 from qtchaos/fix/setPositionState
Add check for setPositionState to avoid TypeError
2024-03-16 08:36:09 +00:00
William Oldham
f1a8ff4bf8 Merge pull request #1021 from Honkertonken/fix-vercel
Fix mixed-routing-properties error
2024-03-16 08:35:22 +00:00
Honkertonken
162da3b22b Update vercel.json 2024-03-16 13:12:34 +05:30
William Oldham
35113ed522 Merge pull request #1019 from movie-web/feature/vercel-headers
Add vercel.json headers
2024-03-15 22:38:28 +00:00
William Oldham
94a003bce6 Add vercel.json headers 2024-03-15 22:25:34 +00:00
qtchaos
e0fec7ffa3 fix: add check for setPositionState to avoid TypeError 2024-03-15 17:30:37 +02:00
qtchaos
bde2231a90 fix: set touch-action to none 2024-03-13 23:20:17 +02:00
112 changed files with 3658 additions and 592 deletions

12
.github/logo-dark.svg vendored
View File

@@ -1,11 +1 @@
<svg width="2147" height="1121" viewBox="0 0 2147 1121" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1663.06 591.678H1719.49C1745.2 591.678 1763.85 595.357 1775.42 602.716C1787.08 609.992 1792.91 621.609 1792.91 637.566C1792.91 648.398 1790.35 657.286 1785.22 664.231C1780.18 671.177 1773.44 675.352 1765.01 676.758V677.998C1776.5 680.561 1784.77 685.357 1789.81 692.385C1794.94 699.413 1797.5 708.756 1797.5 720.414C1797.5 736.951 1791.51 749.849 1779.52 759.109C1767.61 768.37 1751.4 773 1730.9 773H1663.06V591.678ZM1701.51 663.487H1723.83C1734.25 663.487 1741.77 661.875 1746.4 658.65C1751.12 655.426 1753.47 650.093 1753.47 642.651C1753.47 635.706 1750.91 630.745 1745.78 627.769C1740.74 624.709 1732.72 623.18 1721.72 623.18H1701.51V663.487ZM1701.51 693.997V741.25H1726.56C1737.14 741.25 1744.96 739.224 1750 735.173C1755.04 731.121 1757.56 724.92 1757.56 716.569C1757.56 701.521 1746.82 693.997 1725.32 693.997H1701.51Z" fill="white"/>
<path d="M1625.11 773H1520.68V591.678H1625.11V623.18H1559.13V662.991H1620.52V694.493H1559.13V741.25H1625.11V773Z" fill="white"/>
<path d="M1451.72 773H1407.94L1383.39 677.75C1382.48 674.36 1380.91 667.373 1378.67 656.79C1376.52 646.124 1375.28 638.972 1374.95 635.334C1374.46 639.799 1373.22 646.992 1371.23 656.914C1369.25 666.753 1367.72 673.781 1366.64 677.998L1342.21 773H1298.55L1252.29 591.678H1290.12L1313.31 690.648C1317.36 708.921 1320.3 724.755 1322.12 738.149C1322.61 733.437 1323.73 726.16 1325.47 716.321C1327.29 706.399 1328.98 698.71 1330.55 693.253L1356.97 591.678H1393.31L1419.72 693.253C1420.88 697.8 1422.33 704.746 1424.07 714.089C1425.8 723.432 1427.12 731.452 1428.03 738.149C1428.86 731.7 1430.18 723.68 1432 714.089C1433.82 704.415 1435.48 696.602 1436.96 690.648L1460.03 591.678H1497.86L1451.72 773Z" fill="white"/>
<path d="M1178 720.414V689.408H1244.6V720.414H1178Z" fill="white"/>
<path d="M1155.31 773H1050.88V591.678H1155.31V623.18H1089.33V662.991H1150.72V694.493H1089.33V741.25H1155.31V773Z" fill="white"/>
<path d="M966.791 773V591.678H1005.24V773H966.791Z" fill="white"/>
<path d="M905.027 591.678H943.847L882.207 773H840.287L778.771 591.678H817.591L851.697 699.578C853.599 705.945 855.542 713.386 857.526 721.902C859.593 730.336 860.875 736.206 861.371 739.514C862.281 731.907 865.381 718.595 870.673 699.578L905.027 591.678Z" fill="white"/>
<path d="M764.012 682.091C764.012 712.104 756.57 735.173 741.688 751.296C726.805 767.419 705.473 775.48 677.691 775.48C649.91 775.48 628.578 767.419 613.695 751.296C598.812 735.173 591.371 712.022 591.371 681.843C591.371 651.664 598.812 628.637 613.695 612.762C628.661 596.804 650.076 588.825 677.939 588.825C705.803 588.825 727.094 596.845 741.812 612.886C756.612 628.926 764.012 651.994 764.012 682.091ZM631.679 682.091C631.679 702.348 635.523 717.603 643.213 727.855C650.902 738.108 662.395 743.234 677.691 743.234C708.367 743.234 723.704 722.853 723.704 682.091C723.704 641.246 708.449 620.823 677.939 620.823C662.643 620.823 651.109 625.991 643.337 636.326C635.565 646.579 631.679 661.834 631.679 682.091Z" fill="white"/>
<path d="M436.591 773L392.935 630.745H391.818C393.389 659.684 394.175 678.99 394.175 688.664V773H359.82V591.678H412.158L455.07 730.336H455.814L501.331 591.678H553.669V773H517.826V687.176C517.826 683.124 517.868 678.453 517.95 673.161C518.116 667.869 518.694 653.813 519.687 630.993H518.57L471.813 773H436.591Z" fill="white"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="2147" height="1121" fill="none" viewBox="0 0 2147 1121"><path fill="#fff" d="M1663.06 591.678H1719.49C1745.2 591.678 1763.85 595.357 1775.42 602.716C1787.08 609.992 1792.91 621.609 1792.91 637.566C1792.91 648.398 1790.35 657.286 1785.22 664.231C1780.18 671.177 1773.44 675.352 1765.01 676.758V677.998C1776.5 680.561 1784.77 685.357 1789.81 692.385C1794.94 699.413 1797.5 708.756 1797.5 720.414C1797.5 736.951 1791.51 749.849 1779.52 759.109C1767.61 768.37 1751.4 773 1730.9 773H1663.06V591.678ZM1701.51 663.487H1723.83C1734.25 663.487 1741.77 661.875 1746.4 658.65C1751.12 655.426 1753.47 650.093 1753.47 642.651C1753.47 635.706 1750.91 630.745 1745.78 627.769C1740.74 624.709 1732.72 623.18 1721.72 623.18H1701.51V663.487ZM1701.51 693.997V741.25H1726.56C1737.14 741.25 1744.96 739.224 1750 735.173C1755.04 731.121 1757.56 724.92 1757.56 716.569C1757.56 701.521 1746.82 693.997 1725.32 693.997H1701.51Z"/><path fill="#fff" d="M1625.11 773H1520.68V591.678H1625.11V623.18H1559.13V662.991H1620.52V694.493H1559.13V741.25H1625.11V773Z"/><path fill="#fff" d="M1451.72 773H1407.94L1383.39 677.75C1382.48 674.36 1380.91 667.373 1378.67 656.79C1376.52 646.124 1375.28 638.972 1374.95 635.334C1374.46 639.799 1373.22 646.992 1371.23 656.914C1369.25 666.753 1367.72 673.781 1366.64 677.998L1342.21 773H1298.55L1252.29 591.678H1290.12L1313.31 690.648C1317.36 708.921 1320.3 724.755 1322.12 738.149C1322.61 733.437 1323.73 726.16 1325.47 716.321C1327.29 706.399 1328.98 698.71 1330.55 693.253L1356.97 591.678H1393.31L1419.72 693.253C1420.88 697.8 1422.33 704.746 1424.07 714.089C1425.8 723.432 1427.12 731.452 1428.03 738.149C1428.86 731.7 1430.18 723.68 1432 714.089C1433.82 704.415 1435.48 696.602 1436.96 690.648L1460.03 591.678H1497.86L1451.72 773Z"/><path fill="#fff" d="M1178 720.414V689.408H1244.6V720.414H1178Z"/><path fill="#fff" d="M1155.31 773H1050.88V591.678H1155.31V623.18H1089.33V662.991H1150.72V694.493H1089.33V741.25H1155.31V773Z"/><path fill="#fff" d="M966.791 773V591.678H1005.24V773H966.791Z"/><path fill="#fff" d="M905.027 591.678H943.847L882.207 773H840.287L778.771 591.678H817.591L851.697 699.578C853.599 705.945 855.542 713.386 857.526 721.902C859.593 730.336 860.875 736.206 861.371 739.514C862.281 731.907 865.381 718.595 870.673 699.578L905.027 591.678Z"/><path fill="#fff" d="M764.012 682.091C764.012 712.104 756.57 735.173 741.688 751.296C726.805 767.419 705.473 775.48 677.691 775.48C649.91 775.48 628.578 767.419 613.695 751.296C598.812 735.173 591.371 712.022 591.371 681.843C591.371 651.664 598.812 628.637 613.695 612.762C628.661 596.804 650.076 588.825 677.939 588.825C705.803 588.825 727.094 596.845 741.812 612.886C756.612 628.926 764.012 651.994 764.012 682.091ZM631.679 682.091C631.679 702.348 635.523 717.603 643.213 727.855C650.902 738.108 662.395 743.234 677.691 743.234C708.367 743.234 723.704 722.853 723.704 682.091C723.704 641.246 708.449 620.823 677.939 620.823C662.643 620.823 651.109 625.991 643.337 636.326C635.565 646.579 631.679 661.834 631.679 682.091Z"/><path fill="#fff" d="M436.591 773L392.935 630.745H391.818C393.389 659.684 394.175 678.99 394.175 688.664V773H359.82V591.678H412.158L455.07 730.336H455.814L501.331 591.678H553.669V773H517.826V687.176C517.826 683.124 517.868 678.453 517.95 673.161C518.116 667.869 518.694 653.813 519.687 630.993H518.57L471.813 773H436.591Z"/></svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1,11 +1 @@
<svg width="2147" height="1121" viewBox="0 0 2147 1121" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1663.06 599.678H1719.49C1745.2 599.678 1763.85 603.357 1775.42 610.716C1787.08 617.992 1792.91 629.609 1792.91 645.566C1792.91 656.398 1790.35 665.286 1785.22 672.231C1780.18 679.177 1773.44 683.352 1765.01 684.758V685.998C1776.5 688.561 1784.77 693.357 1789.81 700.385C1794.94 707.413 1797.5 716.756 1797.5 728.414C1797.5 744.951 1791.51 757.849 1779.52 767.109C1767.61 776.37 1751.4 781 1730.9 781H1663.06V599.678ZM1701.51 671.487H1723.83C1734.25 671.487 1741.77 669.875 1746.4 666.65C1751.12 663.426 1753.47 658.093 1753.47 650.651C1753.47 643.706 1750.91 638.745 1745.78 635.769C1740.74 632.709 1732.72 631.18 1721.72 631.18H1701.51V671.487ZM1701.51 701.997V749.25H1726.56C1737.14 749.25 1744.96 747.224 1750 743.173C1755.04 739.121 1757.56 732.92 1757.56 724.569C1757.56 709.521 1746.82 701.997 1725.32 701.997H1701.51Z" fill="black"/>
<path d="M1625.11 781H1520.68V599.678H1625.11V631.18H1559.13V670.991H1620.52V702.493H1559.13V749.25H1625.11V781Z" fill="black"/>
<path d="M1451.72 781H1407.94L1383.39 685.75C1382.48 682.36 1380.91 675.373 1378.67 664.79C1376.52 654.124 1375.28 646.972 1374.95 643.334C1374.46 647.799 1373.22 654.992 1371.23 664.914C1369.25 674.753 1367.72 681.781 1366.64 685.998L1342.21 781H1298.55L1252.29 599.678H1290.12L1313.31 698.648C1317.36 716.921 1320.3 732.755 1322.12 746.149C1322.61 741.437 1323.73 734.16 1325.47 724.321C1327.29 714.399 1328.98 706.71 1330.55 701.253L1356.97 599.678H1393.31L1419.72 701.253C1420.88 705.8 1422.33 712.746 1424.07 722.089C1425.8 731.432 1427.12 739.452 1428.03 746.149C1428.86 739.7 1430.18 731.68 1432 722.089C1433.82 712.415 1435.48 704.602 1436.96 698.648L1460.03 599.678H1497.86L1451.72 781Z" fill="black"/>
<path d="M1178 728.414V697.408H1244.6V728.414H1178Z" fill="black"/>
<path d="M1155.31 781H1050.88V599.678H1155.31V631.18H1089.33V670.991H1150.72V702.493H1089.33V749.25H1155.31V781Z" fill="black"/>
<path d="M966.791 781V599.678H1005.24V781H966.791Z" fill="black"/>
<path d="M905.027 599.678H943.847L882.207 781H840.287L778.771 599.678H817.591L851.697 707.578C853.599 713.945 855.542 721.386 857.526 729.902C859.593 738.336 860.875 744.206 861.371 747.514C862.281 739.907 865.381 726.595 870.673 707.578L905.027 599.678Z" fill="black"/>
<path d="M764.012 690.091C764.012 720.104 756.57 743.173 741.688 759.296C726.805 775.419 705.473 783.48 677.691 783.48C649.91 783.48 628.578 775.419 613.695 759.296C598.812 743.173 591.371 720.022 591.371 689.843C591.371 659.664 598.812 636.637 613.695 620.762C628.661 604.804 650.076 596.825 677.939 596.825C705.803 596.825 727.094 604.845 741.812 620.886C756.612 636.926 764.012 659.994 764.012 690.091ZM631.679 690.091C631.679 710.348 635.523 725.603 643.213 735.855C650.902 746.108 662.395 751.234 677.691 751.234C708.367 751.234 723.704 730.853 723.704 690.091C723.704 649.246 708.449 628.823 677.939 628.823C662.643 628.823 651.109 633.991 643.337 644.326C635.565 654.579 631.679 669.834 631.679 690.091Z" fill="black"/>
<path d="M436.591 781L392.935 638.745H391.818C393.389 667.684 394.175 686.99 394.175 696.664V781H359.82V599.678H412.158L455.07 738.336H455.814L501.331 599.678H553.669V781H517.826V695.176C517.826 691.124 517.868 686.453 517.95 681.161C518.116 675.869 518.694 661.813 519.687 638.993H518.57L471.813 781H436.591Z" fill="black"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="2147" height="1121" fill="none" viewBox="0 0 2147 1121"><path fill="#000" d="M1663.06 599.678H1719.49C1745.2 599.678 1763.85 603.357 1775.42 610.716C1787.08 617.992 1792.91 629.609 1792.91 645.566C1792.91 656.398 1790.35 665.286 1785.22 672.231C1780.18 679.177 1773.44 683.352 1765.01 684.758V685.998C1776.5 688.561 1784.77 693.357 1789.81 700.385C1794.94 707.413 1797.5 716.756 1797.5 728.414C1797.5 744.951 1791.51 757.849 1779.52 767.109C1767.61 776.37 1751.4 781 1730.9 781H1663.06V599.678ZM1701.51 671.487H1723.83C1734.25 671.487 1741.77 669.875 1746.4 666.65C1751.12 663.426 1753.47 658.093 1753.47 650.651C1753.47 643.706 1750.91 638.745 1745.78 635.769C1740.74 632.709 1732.72 631.18 1721.72 631.18H1701.51V671.487ZM1701.51 701.997V749.25H1726.56C1737.14 749.25 1744.96 747.224 1750 743.173C1755.04 739.121 1757.56 732.92 1757.56 724.569C1757.56 709.521 1746.82 701.997 1725.32 701.997H1701.51Z"/><path fill="#000" d="M1625.11 781H1520.68V599.678H1625.11V631.18H1559.13V670.991H1620.52V702.493H1559.13V749.25H1625.11V781Z"/><path fill="#000" d="M1451.72 781H1407.94L1383.39 685.75C1382.48 682.36 1380.91 675.373 1378.67 664.79C1376.52 654.124 1375.28 646.972 1374.95 643.334C1374.46 647.799 1373.22 654.992 1371.23 664.914C1369.25 674.753 1367.72 681.781 1366.64 685.998L1342.21 781H1298.55L1252.29 599.678H1290.12L1313.31 698.648C1317.36 716.921 1320.3 732.755 1322.12 746.149C1322.61 741.437 1323.73 734.16 1325.47 724.321C1327.29 714.399 1328.98 706.71 1330.55 701.253L1356.97 599.678H1393.31L1419.72 701.253C1420.88 705.8 1422.33 712.746 1424.07 722.089C1425.8 731.432 1427.12 739.452 1428.03 746.149C1428.86 739.7 1430.18 731.68 1432 722.089C1433.82 712.415 1435.48 704.602 1436.96 698.648L1460.03 599.678H1497.86L1451.72 781Z"/><path fill="#000" d="M1178 728.414V697.408H1244.6V728.414H1178Z"/><path fill="#000" d="M1155.31 781H1050.88V599.678H1155.31V631.18H1089.33V670.991H1150.72V702.493H1089.33V749.25H1155.31V781Z"/><path fill="#000" d="M966.791 781V599.678H1005.24V781H966.791Z"/><path fill="#000" d="M905.027 599.678H943.847L882.207 781H840.287L778.771 599.678H817.591L851.697 707.578C853.599 713.945 855.542 721.386 857.526 729.902C859.593 738.336 860.875 744.206 861.371 747.514C862.281 739.907 865.381 726.595 870.673 707.578L905.027 599.678Z"/><path fill="#000" d="M764.012 690.091C764.012 720.104 756.57 743.173 741.688 759.296C726.805 775.419 705.473 783.48 677.691 783.48C649.91 783.48 628.578 775.419 613.695 759.296C598.812 743.173 591.371 720.022 591.371 689.843C591.371 659.664 598.812 636.637 613.695 620.762C628.661 604.804 650.076 596.825 677.939 596.825C705.803 596.825 727.094 604.845 741.812 620.886C756.612 636.926 764.012 659.994 764.012 690.091ZM631.679 690.091C631.679 710.348 635.523 725.603 643.213 735.855C650.902 746.108 662.395 751.234 677.691 751.234C708.367 751.234 723.704 730.853 723.704 690.091C723.704 649.246 708.449 628.823 677.939 628.823C662.643 628.823 651.109 633.991 643.337 644.326C635.565 654.579 631.679 669.834 631.679 690.091Z"/><path fill="#000" d="M436.591 781L392.935 638.745H391.818C393.389 667.684 394.175 686.99 394.175 696.664V781H359.82V599.678H412.158L455.07 738.336H455.814L501.331 599.678H553.669V781H517.826V695.176C517.826 691.124 517.868 686.453 517.95 681.161C518.116 675.869 518.694 661.813 519.687 638.993H518.57L471.813 781H436.591Z"/></svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

26
.github/workflows/sync.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: Sync fork
permissions:
contents: write
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
sync:
name: Sync fork
runs-on: ubuntu-latest
if: ${{ github.event.repository.fork }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Sync fork
run: gh repo sync ${{ github.repository }}
env:
GH_TOKEN: ${{ github.token }}
- uses: gautamkrishnar/keepalive-workflow@v1

View File

@@ -23,6 +23,7 @@ ARG ONBOARDING_PROXY_INSTALL_LINK
ARG DISALLOWED_IDS
ARG CDN_REPLACEMENTS
ARG TURNSTILE_KEY
ARG ALLOW_AUTOPLAY="false"
ENV VITE_PWA_ENABLED=${PWA_ENABLED}
ENV VITE_GA_ID=${GA_ID}
@@ -39,6 +40,7 @@ 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}
ENV VITE_ALLOW_AUTOPLAY=${ALLOW_AUTOPLAY}
COPY . ./
RUN pnpm run build

View File

@@ -162,4 +162,4 @@
<script type="module" src="/src/index.tsx"></script>
</body>
</html>
</html>

View File

@@ -1,6 +1,6 @@
{
"name": "movie-web",
"version": "4.6.2",
"version": "4.7.0",
"private": true,
"homepage": "https://github.com/movie-web/movie-web",
"scripts": {
@@ -29,7 +29,7 @@
"@formkit/auto-animate": "^0.8.1",
"@headlessui/react": "^1.7.17",
"@ladjs/country-language": "^1.0.3",
"@movie-web/providers": "^2.2.3",
"@movie-web/providers": "^2.3.0",
"@noble/hashes": "^1.3.3",
"@plasmohq/messaging": "^0.6.1",
"@react-spring/web": "^9.7.3",
@@ -120,7 +120,7 @@
"tailwindcss-themer": "^4.0.0",
"type-fest": "^4.8.3",
"typescript": "^5.3.3",
"vite": "^5.0.12",
"vite": "^5.0.13",
"vite-plugin-checker": "^0.6.2",
"vite-plugin-package-version": "^1.1.0",
"vite-plugin-pwa": "^0.17.4",

1859
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M27.865 16.751c0-6.242-4.411-9.988-9.927-9.988s-9.835 3.746-9.835 9.988c0 3.48-.103 6.485 3.897 7.89v2.722c0 1.034.966 1.872 2 1.872 1.035 0 2-.838 2-1.872v-1.97 1.97c0 1.034.965 1.872 2 1.872 1.036 0 2-.838 2-1.872v-1.97 1.97c0 1.034.966 1.872 2 1.872s2-.838 2-1.872v-2.722c4-1.405 3.865-4.41 3.865-7.89z"/><circle fill="#292F33" cx="13.629" cy="15.503" r="3.121"/><path fill="#292F33" d="M25.488 15.503c0 1.724 0 3.121-3.121 3.121-3.12 0-3.12-1.397-3.12-3.121s1.396-3.121 3.12-3.121c1.725 0 3.121 1.397 3.121 3.121zm-6.301 5.656c-.157-.382-.626-.662-1.189-.662-.561 0-1.031.28-1.188.662-.394.11-.685.469-.685.898 0 .517.419.936.937.936.409 0 .753-.263.88-.628.019 0 .037.004.056.004.019 0 .037-.004.057-.004.128.365.472.628.88.628.517 0 .936-.419.936-.936 0-.429-.291-.786-.684-.898z"/><path d="M11 27c0-.367.075-.713.195-1.038-.984-.447-1.831-1.082-2.503-1.97-1.107.969-2.163 1.876-3.127 2.695C4.985 26.26 4.275 26 3.5 26 1.567 26 0 27.566 0 29.5c0 1.778 1.33 3.229 3.046 3.454C3.271 34.671 4.722 36 6.5 36c1.933 0 3.5-1.566 3.5-3.5 0-.775-.26-1.485-.686-2.065.6-.706 1.246-1.46 1.931-2.25C11.088 27.821 11 27.421 11 27zm16.872-15.482c.884-.769 1.729-1.495 2.515-2.163.569.403 1.262.645 2.013.645 1.934 0 3.5-1.567 3.5-3.5 0-1.743-1.277-3.177-2.945-3.444C32.735 1.335 31.281 0 29.5 0 27.566 0 26 1.567 26 3.5c0 .775.26 1.485.687 2.065-.594.7-1.233 1.445-1.911 2.227 1.3.871 2.361 2.095 3.096 3.726zM3.5 10c.775 0 1.485-.26 2.065-.687.799.679 1.661 1.419 2.564 2.204.735-1.631 1.795-2.855 3.096-3.726-.679-.781-1.317-1.527-1.912-2.226.427-.58.687-1.29.687-2.065C10 1.567 8.433 0 6.5 0 4.722 0 3.271 1.33 3.046 3.046 1.33 3.271 0 4.722 0 6.5 0 8.433 1.567 10 3.5 10zm28.9 16c-.752 0-1.444.242-2.014.645-.952-.809-1.99-1.701-3.079-2.653-.672.889-1.519 1.523-2.503 1.971.121.324.196.67.196 1.037 0 .421-.088.821-.245 1.185.685.79 1.331 1.544 1.931 2.25-.426.58-.686 1.29-.686 2.065 0 1.934 1.566 3.5 3.5 3.5 1.781 0 3.235-1.334 3.455-3.056 1.668-.267 2.945-1.701 2.945-3.444 0-1.934-1.566-3.5-3.5-3.5z" fill="#AAB8C2"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M27.865 16.751c0-6.242-4.411-9.988-9.927-9.988s-9.835 3.746-9.835 9.988c0 3.48-.103 6.485 3.897 7.89v2.722c0 1.034.966 1.872 2 1.872 1.035 0 2-.838 2-1.872v-1.97 1.97c0 1.034.965 1.872 2 1.872 1.036 0 2-.838 2-1.872v-1.97 1.97c0 1.034.966 1.872 2 1.872s2-.838 2-1.872v-2.722c4-1.405 3.865-4.41 3.865-7.89z"/><circle cx="13.629" cy="15.503" r="3.121" fill="#292F33"/><path fill="#292F33" d="M25.488 15.503c0 1.724 0 3.121-3.121 3.121-3.12 0-3.12-1.397-3.12-3.121s1.396-3.121 3.12-3.121c1.725 0 3.121 1.397 3.121 3.121zm-6.301 5.656c-.157-.382-.626-.662-1.189-.662-.561 0-1.031.28-1.188.662-.394.11-.685.469-.685.898 0 .517.419.936.937.936.409 0 .753-.263.88-.628.019 0 .037.004.056.004.019 0 .037-.004.057-.004.128.365.472.628.88.628.517 0 .936-.419.936-.936 0-.429-.291-.786-.684-.898z"/><path fill="#AAB8C2" d="M11 27c0-.367.075-.713.195-1.038-.984-.447-1.831-1.082-2.503-1.97-1.107.969-2.163 1.876-3.127 2.695C4.985 26.26 4.275 26 3.5 26 1.567 26 0 27.566 0 29.5c0 1.778 1.33 3.229 3.046 3.454C3.271 34.671 4.722 36 6.5 36c1.933 0 3.5-1.566 3.5-3.5 0-.775-.26-1.485-.686-2.065.6-.706 1.246-1.46 1.931-2.25C11.088 27.821 11 27.421 11 27zm16.872-15.482c.884-.769 1.729-1.495 2.515-2.163.569.403 1.262.645 2.013.645 1.934 0 3.5-1.567 3.5-3.5 0-1.743-1.277-3.177-2.945-3.444C32.735 1.335 31.281 0 29.5 0 27.566 0 26 1.567 26 3.5c0 .775.26 1.485.687 2.065-.594.7-1.233 1.445-1.911 2.227 1.3.871 2.361 2.095 3.096 3.726zM3.5 10c.775 0 1.485-.26 2.065-.687.799.679 1.661 1.419 2.564 2.204.735-1.631 1.795-2.855 3.096-3.726-.679-.781-1.317-1.527-1.912-2.226.427-.58.687-1.29.687-2.065C10 1.567 8.433 0 6.5 0 4.722 0 3.271 1.33 3.046 3.046 1.33 3.271 0 4.722 0 6.5 0 8.433 1.567 10 3.5 10zm28.9 16c-.752 0-1.444.242-2.014.645-.952-.809-1.99-1.701-3.079-2.653-.672.889-1.519 1.523-2.503 1.971.121.324.196.67.196 1.037 0 .421-.088.821-.245 1.185.685.79 1.331 1.544 1.931 2.25-.426.58-.686 1.29-.686 2.065 0 1.934 1.566 3.5 3.5 3.5 1.781 0 3.235-1.334 3.455-3.056 1.668-.267 2.945-1.701 2.945-3.444 0-1.934-1.566-3.5-3.5-3.5z"/></svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,76 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="600"
height="400"
version="1.1"
id="svg838"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs842" />
<rect
style="fill:#c8e1ed;fill-opacity:1.0;stroke-width:5.66929;stroke-linecap:round;stroke-linejoin:bevel;stop-color:#000000"
id="rect4684"
width="600"
height="400"
x="0"
y="0" />
<g
transform="matrix(0.33755415,0,0,-0.33755415,188.33065,342.42618)"
fill="#000099"
stroke="none"
id="g1364">
<g
id="g1755"
transform="matrix(1.0249506,0,0,1.0249506,-8.2541353,-9.3390257)">
<path
fill="#000099"
stroke="none"
d="m 302,838 c -14,-14 -16,-126 -3,-147 5,-8 16,-11 25,-8 12,5 16,21 16,71 0,89 -10,112 -38,84 z"
id="path1352"
style="fill:#11119a;fill-opacity:1" />
<path
fill="#000099"
stroke="none"
d="m 521,775 c -27,-57 -32,-108 -10,-113 18,-3 84,122 75,144 -11,30 -44,15 -65,-31 z"
id="path1354"
style="fill:#11119a;fill-opacity:1" />
<path
fill="#000099"
stroke="none"
d="M 34,797 C 26,775 93,639 110,643 148,650 99,810 59,810 48,810 37,804 34,797 Z"
id="path1356"
style="fill:#11119a;fill-opacity:1" />
<path
fill="#000099"
stroke="none"
d="M 254,590 C 204,583 126,538 79,490 -19,390 14,144 136,67 199,27 243,17 336,23 c 125,7 212,62 275,172 53,92 32,220 -51,317 -62,71 -170,99 -306,78 z"
id="path1358"
style="fill:#11119a;fill-opacity:1" />
<path
fill="#ffff63"
stroke="none"
d="M 443,539 C 490,526 555,469 581,419 605,371 607,272 584,229 562,186 502,121 467,104 330,33 190,49 116,145 77,197 65,237 65,320 c 1,77 19,113 82,161 80,63 198,86 296,58 z"
id="path1360"
style="fill:#ffff77;fill-opacity:1" />
<path
fill="#000099"
stroke="none"
d="m 462,367 c -5,-7 -15,-28 -21,-48 -21,-67 -100,-120 -144,-98 -30,15 -65,56 -88,102 -21,40 -51,48 -57,14 -5,-26 53,-111 96,-141 89,-62 204,-7 252,119 15,40 -15,81 -38,52 z"
id="path1362"
style="fill:#11119a;fill-opacity:1" />
</g>
</g>
</svg>
<!--
len pi toki pona
COPYRIGHT:
Spencer van der Meulen (jan Pensa) ©2021
Licence: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
Based on:
- original logo design by Sonja Lang.
- Toki Pona logo vector image from https://commons.wikimedia.org/wiki/File:Toki_pona.svg by Eequor.
- colors from image on https://www.teepublic.com/user/toki-pona by Sonja Lang.
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" id="svg838" width="600" height="400" version="1.1"><rect style="fill:#c8e1ed;fill-opacity:1;stroke-width:5.66929;stroke-linecap:round;stroke-linejoin:bevel;stop-color:#000" id="rect4684" width="600" height="400" x="0" y="0"/><g id="g1364" fill="#009" stroke="none" transform="matrix(0.33755415,0,0,-0.33755415,188.33065,342.42618)"><g id="g1755" transform="matrix(1.0249506,0,0,1.0249506,-8.2541353,-9.3390257)"><path id="path1352" fill="#009" stroke="none" d="m 302,838 c -14,-14 -16,-126 -3,-147 5,-8 16,-11 25,-8 12,5 16,21 16,71 0,89 -10,112 -38,84 z" style="fill:#11119a;fill-opacity:1"/><path id="path1354" fill="#009" stroke="none" d="m 521,775 c -27,-57 -32,-108 -10,-113 18,-3 84,122 75,144 -11,30 -44,15 -65,-31 z" style="fill:#11119a;fill-opacity:1"/><path id="path1356" fill="#009" stroke="none" d="M 34,797 C 26,775 93,639 110,643 148,650 99,810 59,810 48,810 37,804 34,797 Z" style="fill:#11119a;fill-opacity:1"/><path id="path1358" fill="#009" stroke="none" d="M 254,590 C 204,583 126,538 79,490 -19,390 14,144 136,67 199,27 243,17 336,23 c 125,7 212,62 275,172 53,92 32,220 -51,317 -62,71 -170,99 -306,78 z" style="fill:#11119a;fill-opacity:1"/><path id="path1360" fill="#ffff63" stroke="none" d="M 443,539 C 490,526 555,469 581,419 605,371 607,272 584,229 562,186 502,121 467,104 330,33 190,49 116,145 77,197 65,237 65,320 c 1,77 19,113 82,161 80,63 198,86 296,58 z" style="fill:#ff7;fill-opacity:1"/><path id="path1362" fill="#009" stroke="none" d="m 462,367 c -5,-7 -15,-28 -21,-48 -21,-67 -100,-120 -144,-98 -30,15 -65,56 -88,102 -21,40 -51,48 -57,14 -5,-26 53,-111 96,-141 89,-62 204,-7 252,119 15,40 -15,81 -38,52 z" style="fill:#11119a;fill-opacity:1"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,45 +1 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#fff" height="800px" width="800px" version="1.1" id="Capa_1"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 298 298" xml:space="preserve">
<g>
<path d="M289.5,140.5h-24.606l11.031-11.03c2.93-2.929,2.93-7.678,0.001-10.606c-2.929-2.929-7.678-2.93-10.606-0.001
L243.681,140.5h-36.369l16.182-17.392c2.821-3.032,2.65-7.777-0.383-10.6c-1.243-1.156-2.775-1.802-4.345-1.961
c-0.952-0.047-21.495-0.003-21.495-0.003L221.315,86.5H251.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5h-15.186l17.69-17.69
c2.929-2.93,2.929-7.678,0-10.608c-2.93-2.928-7.844-2.928-10.774,0L225.167,61.1V45.5c0-4.143-3.357-7.5-7.5-7.5
c-4.143,0-7.5,3.357-7.5,7.5v30.601l-24.837,25.004l-0.415-22.645c-0.001-0.036,0.035-0.07,0.034-0.106
c-0.035-1.824-0.704-3.641-2.07-5.059c-2.873-2.982-7.778-3.07-10.761-0.194l-15.951,15.226V53.107l21.47-21.304
c2.929-2.93,3.012-7.678,0.083-10.607c-2.93-2.928-7.803-2.928-10.732,0l-10.821,10.696V7.5c0-4.143-3.357-7.5-7.5-7.5
c-4.143,0-7.5,3.357-7.5,7.5v24.393l-10.53-10.696c-2.93-2.928-7.594-2.928-10.524,0c-2.929,2.93-3.054,7.678-0.125,10.607
l21.179,21.304v35.421l-16.176-15.475c-3.009-2.847-7.67-2.718-10.52,0.289c-1.075,1.136-1.683,2.52-1.914,3.955
c-0.142,0.583-0.203,1.188-0.201,1.811l-0.088,21.229l-25.1-24.944V45.5c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v14.894
L55.142,43.202c-2.93-2.928-7.594-2.928-10.524,0c-2.929,2.93-2.887,7.678,0.042,10.608L62.392,71.5H46.5
c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h30.892l24.744,24.744l-23.057,0.831c-4.021,0.146-7.524,3.435-7.563,7.418
c-0.004,0.112-0.349,0.225-0.349,0.337c0,0.003,0,0.007,0,0.011c0,0.008,0.345,0.017,0.345,0.024
c0.045,1.875,0.955,3.736,2.395,5.158L89.748,140.5H55.025l-21.638-21.638c-2.93-2.928-7.678-2.928-10.607,0
c-2.929,2.93-2.929,7.678,0,10.607l11.03,11.03H8.5c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h25.02L22.78,166.239
c-2.929,2.93-2.929,7.678,0,10.607c1.465,1.464,3.385,2.196,5.304,2.196c1.919,0,3.839-0.732,5.304-2.196L54.734,155.5h35.027
l-15.253,16.394c-2.821,3.032-2.65,7.777,0.383,10.6c1.444,1.344,3.277,2.009,5.106,2.009c0.034,0,0.068-0.005,0.103-0.005
c0.022,0,0.044,0.003,0.065,0.003c0.018,0,0.037,0,0.055,0l22.005-0.125L77.101,209.5H46.5c-4.143,0-7.5,3.357-7.5,7.5
s3.357,7.5,7.5,7.5h15.601l-17.399,17.399c-2.929,2.93-2.929,7.678,0,10.607c1.465,1.464,3.385,2.196,5.304,2.196
c1.919,0,3.672-0.732,5.137-2.196l17.025-17.191V250.5c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-30.185l25.445-25.278
l0.977,24.39c0.148,4.046,3.517,7.306,7.532,7.225c1.364-0.027,2.844-0.465,4.312-1.543c1.063-0.781,15.734-15.812,15.734-15.812
v35.385l-20.971,21.137c-2.93,2.929-2.846,7.678,0.082,10.607c1.465,1.465,3.425,2.197,5.345,2.197
c1.919,0,3.693-0.732,5.157-2.196l10.387-10.532V290.5c0,4.143,3.357,7.5,7.5,7.5c4.143,0,7.5-3.357,7.5-7.5v-25.31l11.404,11.237
c1.465,1.464,3.468,2.196,5.387,2.196c1.919,0,3.881-0.732,5.345-2.196c2.929-2.93,2.783-7.678-0.146-10.607l-21.99-21.845v-35.7
c0,0,13.729,12.896,15.896,14.976c2.167,2.08,3.942,3.25,6.525,3.25c0.015,0,0.03,0,0.046,0c4.142,0,7.48-3.604,7.455-7.746
l-0.306-23.696l24.384,24.551V250.5c0,4.143,3.357,7.5,7.5,7.5c4.143,0,7.5-3.357,7.5-7.5v-15.891l18.064,17.897
c1.465,1.464,3.467,2.196,5.387,2.196c1.919,0,3.88-0.732,5.345-2.196c2.929-2.93,2.95-7.678,0.021-10.607L236.605,224.5H251.5
c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5h-29.894l-25.742-25.742l23.059-0.831c0.082-0.003,0.162-0.016,0.243-0.021
c0.03-0.002,0.06-0.005,0.09-0.008c3.977-0.319,7.037-3.709,6.892-7.736c-0.087-2.424-1.32-4.531-3.155-5.837L209.138,155.5h34.835
l21.345,21.346c1.465,1.465,3.384,2.197,5.304,2.197c1.919,0,3.839-0.732,5.303-2.196c2.93-2.929,2.93-7.678,0.001-10.606
l-10.74-10.74H289.5c4.143,0,7.5-3.357,7.5-7.5S293.643,140.5,289.5,140.5z M200.795,125.483L186.823,140.5h-19.507l15.002-15.002
L200.795,125.483z M170.21,95.784l0.356,20.002l-14.399,14.315V109.16L170.21,95.784z M127.263,95.865l13.904,13.323v20.205
l-13.925-14.008L127.263,95.865z M96.862,126.444l19.762-0.712l14.768,14.768h-20.299L96.862,126.444z M97.246,169.477
L110.25,155.5h20.851l-13.841,13.841L97.246,169.477z M127.863,201.599l-0.854-21.042l14.158-14.241v21.604L127.863,201.599z
M170.819,201.264l-14.652-13.478v-22.179l14.442,14.359L170.819,201.264z M200.991,168.564l-19.614,0.706l-13.77-13.77h20.292
L200.991,168.564z"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Capa_1" width="800" height="800" fill="#fff" version="1.1" viewBox="0 0 298 298" xml:space="preserve"><g><path d="M289.5,140.5h-24.606l11.031-11.03c2.93-2.929,2.93-7.678,0.001-10.606c-2.929-2.929-7.678-2.93-10.606-0.001 L243.681,140.5h-36.369l16.182-17.392c2.821-3.032,2.65-7.777-0.383-10.6c-1.243-1.156-2.775-1.802-4.345-1.961 c-0.952-0.047-21.495-0.003-21.495-0.003L221.315,86.5H251.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5h-15.186l17.69-17.69 c2.929-2.93,2.929-7.678,0-10.608c-2.93-2.928-7.844-2.928-10.774,0L225.167,61.1V45.5c0-4.143-3.357-7.5-7.5-7.5 c-4.143,0-7.5,3.357-7.5,7.5v30.601l-24.837,25.004l-0.415-22.645c-0.001-0.036,0.035-0.07,0.034-0.106 c-0.035-1.824-0.704-3.641-2.07-5.059c-2.873-2.982-7.778-3.07-10.761-0.194l-15.951,15.226V53.107l21.47-21.304 c2.929-2.93,3.012-7.678,0.083-10.607c-2.93-2.928-7.803-2.928-10.732,0l-10.821,10.696V7.5c0-4.143-3.357-7.5-7.5-7.5 c-4.143,0-7.5,3.357-7.5,7.5v24.393l-10.53-10.696c-2.93-2.928-7.594-2.928-10.524,0c-2.929,2.93-3.054,7.678-0.125,10.607 l21.179,21.304v35.421l-16.176-15.475c-3.009-2.847-7.67-2.718-10.52,0.289c-1.075,1.136-1.683,2.52-1.914,3.955 c-0.142,0.583-0.203,1.188-0.201,1.811l-0.088,21.229l-25.1-24.944V45.5c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v14.894 L55.142,43.202c-2.93-2.928-7.594-2.928-10.524,0c-2.929,2.93-2.887,7.678,0.042,10.608L62.392,71.5H46.5 c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h30.892l24.744,24.744l-23.057,0.831c-4.021,0.146-7.524,3.435-7.563,7.418 c-0.004,0.112-0.349,0.225-0.349,0.337c0,0.003,0,0.007,0,0.011c0,0.008,0.345,0.017,0.345,0.024 c0.045,1.875,0.955,3.736,2.395,5.158L89.748,140.5H55.025l-21.638-21.638c-2.93-2.928-7.678-2.928-10.607,0 c-2.929,2.93-2.929,7.678,0,10.607l11.03,11.03H8.5c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h25.02L22.78,166.239 c-2.929,2.93-2.929,7.678,0,10.607c1.465,1.464,3.385,2.196,5.304,2.196c1.919,0,3.839-0.732,5.304-2.196L54.734,155.5h35.027 l-15.253,16.394c-2.821,3.032-2.65,7.777,0.383,10.6c1.444,1.344,3.277,2.009,5.106,2.009c0.034,0,0.068-0.005,0.103-0.005 c0.022,0,0.044,0.003,0.065,0.003c0.018,0,0.037,0,0.055,0l22.005-0.125L77.101,209.5H46.5c-4.143,0-7.5,3.357-7.5,7.5 s3.357,7.5,7.5,7.5h15.601l-17.399,17.399c-2.929,2.93-2.929,7.678,0,10.607c1.465,1.464,3.385,2.196,5.304,2.196 c1.919,0,3.672-0.732,5.137-2.196l17.025-17.191V250.5c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-30.185l25.445-25.278 l0.977,24.39c0.148,4.046,3.517,7.306,7.532,7.225c1.364-0.027,2.844-0.465,4.312-1.543c1.063-0.781,15.734-15.812,15.734-15.812 v35.385l-20.971,21.137c-2.93,2.929-2.846,7.678,0.082,10.607c1.465,1.465,3.425,2.197,5.345,2.197 c1.919,0,3.693-0.732,5.157-2.196l10.387-10.532V290.5c0,4.143,3.357,7.5,7.5,7.5c4.143,0,7.5-3.357,7.5-7.5v-25.31l11.404,11.237 c1.465,1.464,3.468,2.196,5.387,2.196c1.919,0,3.881-0.732,5.345-2.196c2.929-2.93,2.783-7.678-0.146-10.607l-21.99-21.845v-35.7 c0,0,13.729,12.896,15.896,14.976c2.167,2.08,3.942,3.25,6.525,3.25c0.015,0,0.03,0,0.046,0c4.142,0,7.48-3.604,7.455-7.746 l-0.306-23.696l24.384,24.551V250.5c0,4.143,3.357,7.5,7.5,7.5c4.143,0,7.5-3.357,7.5-7.5v-15.891l18.064,17.897 c1.465,1.464,3.467,2.196,5.387,2.196c1.919,0,3.88-0.732,5.345-2.196c2.929-2.93,2.95-7.678,0.021-10.607L236.605,224.5H251.5 c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5h-29.894l-25.742-25.742l23.059-0.831c0.082-0.003,0.162-0.016,0.243-0.021 c0.03-0.002,0.06-0.005,0.09-0.008c3.977-0.319,7.037-3.709,6.892-7.736c-0.087-2.424-1.32-4.531-3.155-5.837L209.138,155.5h34.835 l21.345,21.346c1.465,1.465,3.384,2.197,5.304,2.197c1.919,0,3.839-0.732,5.303-2.196c2.93-2.929,2.93-7.678,0.001-10.606 l-10.74-10.74H289.5c4.143,0,7.5-3.357,7.5-7.5S293.643,140.5,289.5,140.5z M200.795,125.483L186.823,140.5h-19.507l15.002-15.002 L200.795,125.483z M170.21,95.784l0.356,20.002l-14.399,14.315V109.16L170.21,95.784z M127.263,95.865l13.904,13.323v20.205 l-13.925-14.008L127.263,95.865z M96.862,126.444l19.762-0.712l14.768,14.768h-20.299L96.862,126.444z M97.246,169.477 L110.25,155.5h20.851l-13.841,13.841L97.246,169.477z M127.863,201.599l-0.854-21.042l14.158-14.241v21.604L127.863,201.599z M170.819,201.264l-14.652-13.478v-22.179l14.442,14.359L170.819,201.264z M200.991,168.564l-19.614,0.706l-13.77-13.77h20.292 L200.991,168.564z"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,18 +1 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="528.000000pt" height="528.000000pt" viewBox="0 0 528.000000 528.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,528.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M430 5266 c-152 -33 -307 -156 -373 -297 -20 -42 -41 -105 -47 -140
-8 -45 -10 -697 -8 -2229 3 -2105 4 -2166 22 -2215 77 -200 206 -319 400 -369
53 -14 305 -16 2210 -16 2367 0 2211 -4 2346 62 136 66 261 231 289 383 8 42
11 686 11 2200 0 2355 4 2200 -62 2335 -65 135 -231 261 -378 289 -85 16
-4338 13 -4410 -3z"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="704" height="704" preserveAspectRatio="xMidYMid meet" version="1.0" viewBox="0 0 528 528"><metadata>Created by potrace 1.14, written by Peter Selinger 2001-2017</metadata><g fill="#000" stroke="none"><path d="M430 5266 c-152 -33 -307 -156 -373 -297 -20 -42 -41 -105 -47 -140 -8 -45 -10 -697 -8 -2229 3 -2105 4 -2166 22 -2215 77 -200 206 -319 400 -369 53 -14 305 -16 2210 -16 2367 0 2211 -4 2346 62 136 66 261 231 289 383 8 42 11 686 11 2200 0 2355 4 2200 -62 2335 -65 135 -231 261 -378 289 -85 16 -4338 13 -4410 -3z" transform="translate(0.000000,528.000000) scale(0.100000,-0.100000)"/></g></svg>

Before

Width:  |  Height:  |  Size: 840 B

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -82,7 +82,7 @@ export const locales = {
ko,
sl,
ta,
"zh-HANT": zhhant,
"zh-Hant": zhhant,
is,
ru,
gl,

View File

@@ -536,6 +536,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Difuminat del fons",
"backgroundLabel": "Opacitat del fons",
"colorLabel": "Color",
"previewQuote": "No he de tenir por. La por és l'assassina de la ment.",

View File

@@ -536,6 +536,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Difuminat del fons",
"backgroundLabel": "Opacitat del fons",
"colorLabel": "Color",
"previewQuote": "No he de tindre por. La por és l'assassina de la ment.",

View File

@@ -122,7 +122,7 @@
"default": "Co si přejete sledovat?",
"extra": [
"Co chcete objevit?",
null,
"Co je na vašem seznamu sledovaných filmů?",
"Jaký je váš oblíbený film?",
"Jaký je tvůj oblíbený seriál?"
]
@@ -139,7 +139,7 @@
"morning": {
"default": "Na co byste se chtěli dnes ráno dívat?",
"extra": [
"Slyšel jsem, že Před úsvitem je super."
"Slyšel jsem, že Před úsvitem je super"
]
},
"night": {
@@ -187,9 +187,10 @@
"back": "Zpět",
"explainer": "Pomocí rozšíření prohlížeče můžete získat nejlepší streamy, které nabízíme. S pouhou instalací.",
"explainerIos": "Bohužel rozšíření není podporováno na iOS. Stiskněte <bold>Zpět</bold> pro výběr jiné možnosti.",
"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",
"notDetecting": "Nainstalováno na Chromu, ale stránka to nezaznamenala? Skuste přenačíst stránku!",
"notDetectingAction": "Obnovit stránku",
"status": {
"disallowed": "Rozšíření není pro tuto stránku povoleno",
@@ -251,6 +252,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Zkopírovat link HLS playlistu",
"disclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.",
"downloadSubtitle": "Stáhnout aktuální titulky",
"downloadVideo": "Stáhnout video",
@@ -534,6 +536,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Rozostření pozadí",
"backgroundLabel": "Neprůhlednost pozadí",
"colorLabel": "Barva",
"previewQuote": "Nesmím se bát. Strach zabíjí myšlení.",

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "Film",
"show": "Serie"
}
},
"unreleased": "Unveröffentlicht"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "Qualität"
},
"settings": {
"audioItem": "Audio",
"downloadItem": "Download",
"enableSubtitles": "Untettitel aktivieren",
"experienceSection": "Anzeigeerlebnis",
@@ -320,8 +322,9 @@
"unknownOption": "Unbekannt"
},
"subtitles": {
"customChoice": "Untertitel aus Datei wählen",
"customChoice": "Untertiteldatei auswählen oder hier ablegen",
"customizeLabel": "Anpassen",
"dropSubtitleFile": "Untertiteldatei hier ablegen",
"offChoice": "Aus",
"settings": {
"backlink": "Eigene Untertitel",
@@ -363,7 +366,8 @@
},
"nextEpisode": {
"cancel": "Abbrechen",
"next": "Nächste Folge"
"next": "Nächste Folge",
"nextSeason": "Nächste Staffel"
},
"playbackError": {
"badge": "Wiedergabefehler",
@@ -379,6 +383,13 @@
"title": "Hoppla, etwas ist schiefgegangen!"
},
"scraping": {
"extensionFailure": {
"badge": "Erweiterung deaktiviert",
"enableExtension": "Erweiterung aktivieren",
"homeButton": "Zur Startseite",
"text": "Du hast die movie-webe Erweiterung installiert. Um die Erweiterung zu benutzen, musst du sie für diese Seite aktivieren.",
"title": "Bitte aktiviere die Erweiterung"
},
"items": {
"failure": "Ein Fehler ist aufgetreten",
"notFound": "Video nicht gefunden",
@@ -512,6 +523,9 @@
}
},
"preferences": {
"autoplay": "Autoplay",
"autoplayDescription": "Spielen Sie nach Erreichen des Endes automatisch die nächste Episode einer Serie ab. Kann von Benutzern mit der Browsererweiterung, einem benutzerdefinierten Proxy oder mit der Standardeinrichtung aktiviert werden, sofern der Host dies zulässt.",
"autoplayLabel": "Automatisches Abspielen",
"language": "App-Sprache",
"languageDescription": "Sprache für die ganze App.",
"thumbnail": "Miniaturansichten generieren",

View File

@@ -148,6 +148,7 @@
},
"media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"unreleased": "Unreleased",
"types": {
"movie": "Movie",
"show": "Show"
@@ -277,7 +278,8 @@
"loadingError": "Error loading season",
"loadingList": "Loading...",
"loadingTitle": "Loading...",
"unairedEpisodes": "One or more episodes in this season have been disabled because they haven't been aired yet."
"unairedEpisodes": "One or more episodes in this season have been disabled because they haven't been aired yet.",
"seasons": "Seasons"
},
"playback": {
"speedLabel": "Playback speed",
@@ -294,6 +296,7 @@
"enableSubtitles": "Enable Subtitles",
"experienceSection": "Viewing experience",
"playbackItem": "Playback settings",
"audioItem": "Audio",
"qualityItem": "Quality",
"sourceItem": "Video sources",
"subtitleItem": "Subtitle settings",
@@ -316,7 +319,7 @@
"unknownOption": "Unknown"
},
"subtitles": {
"customChoice": "Select subtitle from file",
"customChoice": "Drop or upload file",
"customizeLabel": "Customize",
"offChoice": "Off",
"settings": {
@@ -325,7 +328,8 @@
"fixCapitals": "Fix capitalization"
},
"title": "Subtitles",
"unknownLanguage": "Unknown"
"unknownLanguage": "Unknown",
"dropSubtitleFile": "Drop subtitle file here"
}
},
"metadata": {
@@ -359,7 +363,8 @@
},
"nextEpisode": {
"cancel": "Cancel",
"next": "Next episode"
"next": "Next episode",
"nextSeason": "Next season"
},
"playbackError": {
"badge": "Playback error",
@@ -386,6 +391,13 @@
"homeButton": "Go home",
"text": "We have searched through our providers and cannot find the media you are looking for! We do not host the media and have no control over what is available. Please click 'Show details' below for more details.",
"title": "We couldn't find that"
},
"extensionFailure": {
"badge": "Extension disabled",
"homeButton": "Go home",
"enableExtension": "Enable extension",
"title": "Please enable the extension",
"text": "You've installed the movie-web extension. To start using it, you need to enable the extension for this site."
}
},
"time": {
@@ -513,6 +525,9 @@
"thumbnail": "Generate thumbnails",
"thumbnailDescription": "Most of the time, videos don't have thumbnails. You can enable this setting to generate them on the fly but they can make your video slower.",
"thumbnailLabel": "Generate thumbnails",
"autoplay": "Autoplay",
"autoplayDescription": "Automatically play the next episode in a series after reaching the end. Can be enabled by users with the browser extension, a custom proxy, or with the default setup if allowed by the host.",
"autoplayLabel": "Autoplay",
"title": "Preferences"
},
"reset": "Reset",

View File

@@ -294,6 +294,7 @@
"title": "Calidad"
},
"settings": {
"audioItem": "Audio",
"downloadItem": "Descargar",
"enableSubtitles": "Habilitar subtítulos",
"experienceSection": "Experiencia de visualización",
@@ -320,8 +321,9 @@
"unknownOption": "Desconocida"
},
"subtitles": {
"customChoice": "Seleccionar subtítulo del archivo",
"customChoice": "Sube o arrastra un archivo",
"customizeLabel": "Personalizar",
"dropSubtitleFile": "Suelta el archivo de subtítulos aquí",
"offChoice": "Apagado",
"settings": {
"backlink": "Subtítulos personalizados",
@@ -536,6 +538,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Desefoque de fondo",
"backgroundLabel": "Opacidad del fondo",
"colorLabel": "Color",
"previewQuote": "No debo temer. El miedo es el asesino de la mente.",

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "Film",
"show": "Saade"
}
},
"unreleased": "Avaldamata"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "Kvaliteet"
},
"settings": {
"audioItem": "Audio",
"downloadItem": "Lae alla",
"enableSubtitles": "Luba Subtiitrid",
"experienceSection": "Vaatamise kogemus",
@@ -320,8 +322,9 @@
"unknownOption": "Teadmata"
},
"subtitles": {
"customChoice": "Vali subtiitrid failist",
"customChoice": "Kukuta või vali subtiitri fail",
"customizeLabel": "Kohanda",
"dropSubtitleFile": "Kukuta subtiitri fail siia",
"offChoice": "Välja",
"settings": {
"backlink": "Kohandatud subtiitrid",
@@ -379,6 +382,13 @@
"title": "Video mängimine ebaōnnestus!"
},
"scraping": {
"extensionFailure": {
"badge": "Brauserilaiendus väljalülitatud",
"enableExtension": "Lülita brauserilaiendus sisse",
"homeButton": "Tagasi",
"text": "Olete allalaadinud movie-web'i brauserilaiendue. Selle kasutamiseks peate vajutama brauserilaienduse peale ning andma ligipääsu praegusele saidile.",
"title": "Palun lülita brauserilaiendus sisse"
},
"items": {
"failure": "Tekkis viga",
"notFound": "Ei ole videot",

View File

@@ -73,7 +73,7 @@
}
},
"errors": {
"badge": "مشکلی رخ داده",
"badge": "مشکلی رخ داد",
"details": "جزئیات خطا",
"reloadPage": "صفحه را دوباره بارگذاری کنید",
"showError": "نمایش جزئیات خطا",
@@ -89,7 +89,7 @@
"dmca": "DMCA",
"github": "گیت هاب"
},
"tagline": "فیلم و سریال مورد علاقه‌تان را با این برنامه استریم متن باز تماشا کنید."
"tagline": "فیلم و سریال مورد علاقه‌تان را با این برنامه استریم اوپن سورس تماشا کنید."
},
"global": {
"name": "مووی-وب",
@@ -155,7 +155,8 @@
"types": {
"movie": "فیلم",
"show": "سریال"
}
},
"unreleased": "منتشر نشده"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "کیفیت"
},
"settings": {
"audioItem": "صدا",
"downloadItem": "دانلود",
"enableSubtitles": "فعال کردن زیرنویس",
"experienceSection": "تجربه مشاهده",
@@ -310,7 +312,7 @@
},
"noEmbeds": {
"text": "نتوانستیم اطلاعات را پیدا کنیم، لطفا منبع دیگری را امتحان کنید.",
"title": "اطلاعات پیدا نشد"
"title": "هیج اطلاعاتی پیدا نشد"
},
"noStream": {
"text": "فیلم یا سریال شما در این منبع وجود ندارد.",
@@ -320,8 +322,9 @@
"unknownOption": "ناشناخته"
},
"subtitles": {
"customChoice": "انتخاب زیرنویس از فایل",
"customChoice": "فایل را رها یا آپلود کنید",
"customizeLabel": "شخصی سازی",
"dropSubtitleFile": "فایل زیرنویس را اینجا بکشید",
"offChoice": "خاموش",
"settings": {
"backlink": "زیرنویس سفارشی",
@@ -363,22 +366,30 @@
},
"nextEpisode": {
"cancel": "لغو",
"next": "قسمت بعدی"
"next": "قسمت بعدی",
"nextSeason": "فصل بعد"
},
"playbackError": {
"badge": "مشکلی در پخش به وجود آمده",
"errors": {
"errorAborted": "دریافت محتوا با درخواست کاربر لغو شد.",
"errorDecode": "با وجود اینکه قبلا مشخص شده بود که قابل استفاده است، یک خطا در هنگام تلاش برای رمزگشایی رسانه رخ داد که باعث مشکل شد.",
"errorDecode": "با وجود اینکه قبلا مشخص شده بود که قابل استفاده است، یک خطا در هنگام تلاش برای رمزگشایی محتوا رخ داد که باعث مشکل شد.",
"errorGenericMedia": "خطای محتوای ناشناخته رخ داد.",
"errorNetwork": "با وجود اینکه قبلا در دسترس بود، نوعی خطای شبکه رخ داد که مانع از دریافت محتوا شد.",
"errorNotSupported": "محتوا یا ارائه دهنده رسانه پشتیبانی نمی‌شود."
"errorNotSupported": "محتوا یا ارائه دهنده محتوا پشتیبانی نمی‌شود."
},
"homeButton": "بازگشت به خانه",
"text": "مشکلی در پخش محتوا وجود داشت. لطفا دوباره تلاش کنید.",
"title": "پخش ویدئو موفقیت آمیز نبود!"
},
"scraping": {
"extensionFailure": {
"badge": "اکستنشن غیر فعال شد",
"enableExtension": "اکستنشن را فعال کنید",
"homeButton": "خانه",
"text": "شما اکستنشن مووی-وب را نصب کردید. برای شروع استفاده از ان، نیاز به فعال کردن آن دارید",
"title": "لطفا اکستنشن را فعال کنید"
},
"items": {
"failure": "مشکلی پیش آمده",
"notFound": "این ویدیو وجود ندارد",
@@ -388,7 +399,7 @@
"badge": "پیدا نشد",
"detailsButton": "نمایش جزئیات",
"homeButton": "بازگشت به خانه",
"text": "ما در ارائه دهندگان جستجو کرده ایم ولی نمی توانیم محتوایی را که به دنبال آن را هستید پیدا کنیم! ما رسانه ها را میزبانی نمی کنیم و هیچ کنترلی بر آنچه در دسترس است نداریم. لطفا برای جزئیات بیشتر روی \"نمایش جزئیات\" در زیر کلیک کنید.",
"text": "ما در ارائه دهندگان جستجو کرده ایم ولی نمی توانیم محتوایی را که به دنبال آن را هستید پیدا کنیم! ما محتواها را میزبانی نمی کنیم و هیچ کنترلی بر آنچه در دسترس است نداریم. لطفا برای جزئیات بیشتر روی \"نمایش جزئیات\" در زیر کلیک کنید.",
"title": "نتونستیم پیداش کنیم"
}
},
@@ -457,7 +468,7 @@
},
"register": {
"cta": "شروع کنید",
"text": "پیشرفت تماشای خود را بین دستگاه‌ها به اشتراک بگذارید و آنها را با یکدیگر همگام سازی کنید.",
"text": "جریان تماشای خود را بین دستگاه‌ها به اشتراک بگذارید و آنها را با یکدیگر همگام سازی کنید.",
"title": "همگام سازی"
},
"title": "حساب کاربری"
@@ -477,7 +488,7 @@
"server": {
"description": "اگر میخواید به یک بک-اند سفارشی برای ذخیره داده متصل شوید، با فعال و ارائه استفاده این لینک ادامه دهید. <0>دستورالعمل ها.</0>",
"label": "سرور سفارشی",
"urlLabel": "لینک سرور سفارشی"
"urlLabel": "لینک سرور کاستوم"
},
"setup": {
"doSetup": "راه اندازی کنید",
@@ -493,7 +504,7 @@
},
"redoSetup": "تنظیم مجدد",
"successStatus": {
"description": "همه چیز برای شروع تماشای محتوای مورد علاقه‌تان آماده است.",
"description": "همه چیز برای شروع تماشای فیلم مورد علاقه‌تان آماده است.",
"title": "همه چیز تنظیم شده است!"
},
"unsetStatus": {
@@ -506,16 +517,19 @@
"addButton": "اضافه کردن worker جدید",
"description": "برای ایجاد عملکرد برنامه، تمام ترافیک از طریق پروکسی ها هدایت می شود. اگر میخواید این کار انجام دهید حتما از worker های خودتان استفاده کنید. <0>دستورالعمل ها.</0>",
"emptyState": "هنوز هیچ worker ای وجود ندارد، یکی اضافه کنید",
"label": "استفاده از worker های پروکسی سفارشی",
"label": "از پروکسی worker کاستوم استفاده کنید",
"urlLabel": "لینک worker ها",
"urlPlaceholder": "https://"
}
},
"preferences": {
"autoplay": "پخش خودکار",
"autoplayDescription": "بعد از پایان یافتن قسمت بعدی یک سریال به صورت خودکار پخش شود. می‌تواند توسط کاربران با پسوند مرورگر، یک پروکسی سفارشی، یا با تنظیمات پیش‌فرض در صورت اجازه میزبان فعال شود.",
"autoplayLabel": "پخش خودکار",
"language": "زبان برنامه",
"languageDescription": "زبان برای کل برنامه اعمال شد.",
"thumbnail": "ایجاد تامبنیل",
"thumbnailDescription": "بیشتر اوقات، ویدیوها تامبنیل ندارند. شما می توانید این تنظیم را فعال کنید تا آنها را در لحظه تولید کنید، اما آنها می توانند ویدیوی شما را کندتر کنند.",
"thumbnailDescription": "بیشتر اوقات، ویدیوها تامبنیل ندارند. شما می توانید این تنظیم را فعال کنید تا آنها را در لحظه ببینید، اما آنها می توانند ویدیوی شما را کندتر کنند.",
"thumbnailLabel": "ایجاد تامبنیل",
"title": "اولویت ها"
},
@@ -526,8 +540,8 @@
"appVersion": "نسخه برنامه",
"backendUrl": "لینک بک-اند",
"backendVersion": "نسخه بک-اند",
"hostname": "نام میزبان",
"insecure": "نا امن",
"hostname": "نام هاست",
"insecure": "ناامن",
"notLoggedIn": "شما وارد نشده اید",
"secure": "امن",
"title": "اطلاعات برنامه",
@@ -541,7 +555,7 @@
"colorLabel": "رنگ",
"previewQuote": "نباید بترسم، ترس قاتل ذهن است.",
"textSizeLabel": "اندازه متن",
"title": "زیرنویس"
"title": "زیرنویسها"
},
"unsaved": "شما تغییرات ذخیره نشده دارید"
}

View File

@@ -7,7 +7,7 @@
"title": "D'où vient le contenu ?"
},
"q2": {
"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.",
"body": "Il est impossible de demander un film ou une série, car movie-web ne gère aucun contenu. Le contenu est récupéré en explorant d'autres sites sur Internet.",
"title": "Où puis-je demander une série ou un film ?"
},
"q3": {
@@ -25,26 +25,26 @@
"deviceNameLabel": "Nom de l'appareil",
"deviceNamePlaceholder": "Téléphone personnel",
"generate": {
"description": "Le nom d'utilisateur et le mot de passe sont obtenus à partir de votre passphrase. Vous devrez la saisir pour accéder à votre compte, alors gardez-la précieusement",
"next": "J'ai sauvegardé ma passphrase",
"passphraseFrameLabel": "Passphrase",
"title": "Votre passphrase"
"description": "Le nom d'utilisateur et le mot de passe sont obtenus à partir de votre phrase d'accès. Vous devrez la saisir pour accéder à votre compte, alors gardez-la précieusement",
"next": "J'ai sauvegardé ma phrase d'accès",
"passphraseFrameLabel": "Phrase d'accès",
"title": "Votre phrase d'accès"
},
"hasAccount": "Avez-vous déjà un compte? <0>Connectez-vous ici.</0>",
"login": {
"description": "Veuillez saisir votre passphrase pour accéder à votre compte",
"description": "Veuillez saisir votre phrase d'accès pour accéder à votre compte",
"deviceLengthError": "Veuillez saisir un nom d'appareil",
"passphraseLabel": "Passphrase de 12 mots",
"passphrasePlaceholder": "Passphrase",
"passphraseLabel": "Phrase d'accès de 12 mots",
"passphrasePlaceholder": "Phrase d'accès",
"submit": "Se connecter",
"title": "Connectez-vous à votre compte",
"validationError": "Passphrase incorrecte ou incomplète"
"validationError": "Phrase d'accès incorrecte ou incomplète"
},
"register": {
"information": {
"color1": "Première couleur de profil",
"color2": "Seconde couleur de profil",
"header": "Veuillez entrer un nom pour votre appareil, choisir une couleur et une icône utilisateur de votre choix",
"header": "Veuillez entrer un nom pour votre appareil, choisir vos couleurs et une icône utilisateur de votre choix",
"icon": "Icône d'utilisateur",
"next": "Suivant",
"title": "Informations du compte"
@@ -63,13 +63,13 @@
"yes": "Je fais confiance à ce serveur"
},
"verify": {
"description": "Veuillez saisir votre passphrase pour confirmer que vous l'avez enregistrée et pour créer votre compte",
"description": "Veuillez saisir votre phrase d'accès pour confirmer que vous l'avez enregistrée et pour créer votre compte",
"invalidData": "Les données ne sont pas valides",
"noMatch": "La passphrase ne correspond pas",
"passphraseLabel": "Votre passphrase de 12 mots",
"recaptchaFailed": "La validation ReCaptcha a échouée",
"noMatch": "La phrase d'accès ne correspond pas",
"passphraseLabel": "Votre phrase d'accès de 12 mots",
"recaptchaFailed": "La validation ReCaptcha a échoué",
"register": "Créer un compte",
"title": "Resaisissez votre passphrase"
"title": "Ressaisissez votre phrase d'accès"
}
},
"errors": {
@@ -82,7 +82,7 @@
"footer": {
"legal": {
"disclaimer": "Avertissement",
"disclaimerText": "Le site movie-web ne stocke pas de fichiers, mais propose des liens vers des services externes. Les problèmes juridiques doivent être traités avec les fournisseurs et les hébergeurs de fichiers. Les fichiers multimédias diffusés par les fournisseurs de vidéos ne sont pas couverts par movie-web."
"disclaimerText": "movie-web ne stocke pas de fichiers, mais propose des liens vers des services externes. Les problèmes juridiques doivent être traités avec les fournisseurs et les hébergeurs de fichiers. Les fichiers multimédias diffusés par les fournisseurs de vidéos ne sont pas couverts par movie-web."
},
"links": {
"discord": "Discord",
@@ -115,14 +115,14 @@
},
"search": {
"allResults": "C'est tout ce que nous avons!",
"failed": "Le média n'a pas été trouvé, veuillez réessayez!",
"failed": "Le média n'a pas été trouvé, veuillez réessayer!",
"loading": "Chargement...",
"noResults": "Nous n'avons rien trouvé!",
"placeholder": {
"default": "Que voulez-vous voir?",
"extra": [
"Que voulez-vous explorer ?",
"Que y a-t-il dans votre liste de lecture?",
"Qu'y a-t-il dans votre liste de lecture?",
"Quel est votre film préféré ?",
"Quelle est votre série préférée ?"
]
@@ -155,11 +155,12 @@
"types": {
"movie": "Film",
"show": "Série"
}
},
"unreleased": "Non publié"
},
"navigation": {
"banner": {
"offline": "Vérifiez votre connexion internet"
"offline": "Veuillez vérifier votre connexion internet"
},
"menu": {
"about": "À propos de nous",
@@ -173,24 +174,24 @@
"notFound": {
"badge": "Introuvable",
"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 pas pu trouver la page que vous cherchez.",
"title": "Impossible de trouver cette page"
},
"onboarding": {
"defaultConfirm": {
"cancel": "Annuler",
"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": "Êtes-vous sûr ?"
},
"extension": {
"back": "Revenir en arrière",
"explainer": "En utilisant l'extension de navigateur, vous pouvez obtenir les meilleurs flux que nous avons à offrir. Avec juste une simple installation.",
"explainerIos": "Malheureusement, l'extension web n'est pas prise en charge sur iOS, appuyez sur <bold> 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.",
"explainerIos": "Malheureusement, l'extension web n'est pas prise en charge sur iOS, appuyez sur <bold>Retour</bold> pour choisir une autre option.",
"extensionHelp": "Si vous avez installé l'extension, mais qu'elle n'est pas détectée, <bold>ouvrez l'extension via le menu des extensions de votre navigateur</bold> et suivez les étapes à l'écran.",
"linkChrome": "Installer l'extension Chrome",
"linkFirefox": "Installer l'extension Firefox",
"notDetecting": "L'extension est installée sur Chrome mais le site ne la détecte pas ? Essayez de rafraîchir la page !",
"notDetecting": "L'extension est installée sur Chrome, mais le site ne la détecte pas ? Essayez de rafraîchir la page !",
"notDetectingAction": "Rafraîchir la page",
"status": {
"disallowed": "L'extension n'est pas activée pour cette page",
@@ -204,12 +205,12 @@
"title": "Commençons par une extension"
},
"proxy": {
"back": "Revenir en arrière",
"back": "Retour",
"explainer": "Avec la méthode du proxy, vous pouvez obtenir des flux de bonne qualité en créant un proxy en libre-service.",
"input": {
"errorConnection": "Impossible de se connecter au proxy",
"errorInvalidUrl": "URL non valide",
"errorNotProxy": "Je m'attendais à un proxy mais j'ai obtenu un site Web",
"errorNotProxy": "Je m'attendais à un proxy, mais j'ai obtenu un site Web",
"label": "URL du proxy",
"placeholder": "https://"
},
@@ -221,17 +222,17 @@
"explainer": "Pour obtenir les meilleurs flux possibles, vous devrez choisir la méthode de streaming que vous souhaitez utiliser.",
"options": {
"default": {
"text": "Je ne veux pas de flux de bonne qualité,<0 /> <1>Utiliser le flux par défaut</1>"
"text": "Je ne veux pas de flux de bonne qualité,<0 /> <1>utiliser le flux par défaut</1>"
},
"extension": {
"action": "Installer l'extension",
"description": "Installez l'extension pour navigateur et accédez aux meilleures sources.",
"quality": "Meilleur qualité",
"quality": "Meilleure qualité",
"title": "Extension du navigateur"
},
"proxy": {
"action": "Configurez le proxy",
"description": "Configurez un proxy en seulement 5 minutes et accédez à d'excellentes sources.",
"description": "Configurez un proxy en seulement cinq minutes et accédez à d'excellentes sources.",
"quality": "Bonne qualité",
"title": "Proxy personnalisé"
}
@@ -256,14 +257,14 @@
"disclaimer": "Les téléchargements sont effectués directement par le fournisseur. movie-web n'a aucun contrôle sur la manière dont les téléchargements sont effectués.",
"downloadSubtitle": "Télécharger les sous-titres",
"downloadVideo": "Télécharger la vidéo",
"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.",
"onAndroid": {
"1": "Pour télécharger sur Android, cliquez sur le bouton de téléchargement puis, sur la nouvelle page, <bold>tapez et maintenez </bold> sur la vidéo, puis sélectionnez <bold>enregistrer</bold>.",
"1": "Pour télécharger sur Android, cliquez sur le bouton de téléchargement, puis, sur la nouvelle page, <bold>tapez et maintenez</bold> sur la vidéo, et sélectionnez <bold>enregistrer</bold>.",
"shortTitle": "Télécharger / Android",
"title": "Téléchargement sur Android"
},
"onIos": {
"1": "Pour télécharger sur iOS, cliquez sur le bouton de téléchargement puis, sur la nouvelle page, cliquez sur <bold><ios_share /></bold>, puis <bold>Enregistrer dans les fichiers <ios_files /></bold>.",
"1": "Pour télécharger sur iOS, cliquez sur le bouton de téléchargement, puis, sur la nouvelle page, cliquez sur <bold><ios_share /></bold>, et <bold>Enregistrer dans les fichiers <ios_files /></bold>.",
"shortTitle": "Télécharger / iOS",
"title": "Télécharger sur iOS"
},
@@ -281,7 +282,7 @@
"loadingError": "Erreur lors du chargement de la saison",
"loadingList": "Chargement...",
"loadingTitle": "Chargement...",
"unairedEpisodes": "Un ou plusieurs épisodes de cette saison ont été désactivés car ils n'ont pas encore été diffusés."
"unairedEpisodes": "Un ou plusieurs épisodes de cette saison ont été désactivés, car ils n'ont pas encore été diffusés."
},
"playback": {
"speedLabel": "Vitesse de lecture",
@@ -290,10 +291,11 @@
"quality": {
"automaticLabel": "Qualité automatique",
"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 changer de source</0> pour obtenir des options de qualité différentes.",
"title": "Qualité"
},
"settings": {
"audioItem": "Audio",
"downloadItem": "Télécharger",
"enableSubtitles": "Activer les sous-titres",
"experienceSection": "Expérience de visionnage",
@@ -310,7 +312,7 @@
},
"noEmbeds": {
"text": "Nous n'avons pas trouvé de liens, veuillez essayer une autre source.",
"title": "Pas d'embeds trouvés"
"title": "Pas d'intégrations (embeds) trouvées"
},
"noStream": {
"text": "Cette source n'a pas de flux pour ce film ou cette série.",
@@ -320,8 +322,9 @@
"unknownOption": "Inconnu"
},
"subtitles": {
"customChoice": "Importer des sous-titres depuis un fichier",
"customChoice": "Glisser ou charger un fichier",
"customizeLabel": "Personnaliser",
"dropSubtitleFile": "Glisser le fichier des sous-titres ici",
"offChoice": "Désactivé",
"settings": {
"backlink": "Sous-titres personnalisés",
@@ -363,7 +366,8 @@
},
"nextEpisode": {
"cancel": "Annuler",
"next": "Prochain épisode"
"next": "Prochain épisode",
"nextSeason": "Prochaine saison"
},
"playbackError": {
"badge": "Erreur de lecture",
@@ -372,13 +376,20 @@
"errorDecode": "Bien qu'elle ait été jugée utilisable, une erreur s'est produite lors de la tentative de décodage de la ressource multimédia, ce qui a entraîné une erreur.",
"errorGenericMedia": "Une erreur de média inconnue est survenue.",
"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 média ou de la source du média n'est pas supporté."
},
"homeButton": "Revenir à l'accueil",
"text": "Une erreur s'est produite lors de la lecture du média. Veuillez réessayer.",
"title": "Oups, c'est coupé !"
},
"scraping": {
"extensionFailure": {
"badge": "Extension désactivée",
"enableExtension": "Activer l'extension",
"homeButton": "Revenir à l'accueil",
"text": "Vous avez installé l'extension movie-web. Pour commencer à l'utiliser, vous devez activer l'extension pour ce site.",
"title": "Veuillez activer l'extension"
},
"items": {
"failure": "Une erreur est survenue",
"notFound": "N'a pas la vidéo",
@@ -407,7 +418,7 @@
},
"screens": {
"dmca": {
"text": "Bienvenue sur la page de contact DMCA de movie-web ! Nous respectons les droits de propriété intellectuelle et souhaitons répondre rapidement à toute question relative aux droits d'auteur. Si vous pensez que votre œuvre protégée par des droits d'auteur a été utilisée de manière inappropriée sur notre plateforme, veuillez envoyer une notification DMCA détaillée à l'adresse électronique ci-dessous. Veuillez inclure une description du matériel protégé par des droits d'auteur, vos coordonnées et une déclaration de bonne foi. Nous nous engageons à résoudre ces problèmes rapidement et vous remercions de votre coopération pour que movie-web reste un lieu respectueux de la créativité et des droits d'auteur.",
"text": "Bienvenue sur la page de contact DMCA de movie-web ! Nous respectons les droits de propriété intellectuelle et souhaitons répondre rapidement à toute question relative aux droits d'auteur. Si vous pensez que votre œuvre protégée par des droits d'auteur a été utilisée de manière inappropriée sur notre plateforme, veuillez envoyer une notification DMCA détaillée à l'adresse électronique ci-dessous. Veuillez inclure une description du matériel protégé par des droits d'auteur, vos coordonnées et une déclaration de bonne foi. Nous nous engageons à résoudre ces problèmes rapidement et vous remercions pour votre coopération pour que movie-web reste un lieu respectueux de la créativité et des droits d'auteur.",
"title": "DMCA"
},
"loadingApp": "Chargement de l'application",
@@ -419,7 +430,7 @@
"textWithReset": "Echec du chargement de votre profil à partir de votre serveur personnalisé, souhaitez-vous revenir au serveur par défaut ?"
},
"migration": {
"failed": "La migration de vos données a échouée.",
"failed": "La migration de vos données a échoué.",
"inProgress": "Veuillez patienter, nous sommes en train de migrer vos données. Cela ne devrait pas prendre longtemps."
}
},
@@ -456,7 +467,7 @@
"userIcon": "Icône de l'utilisateur"
},
"register": {
"cta": "Démarrer",
"cta": "Commencer",
"text": "Partagez la progression de vos films et séries entre vos appareils et gardez-les synchronisés.",
"title": "Synchroniser au Cloud"
},
@@ -469,7 +480,7 @@
"default": "Défaut",
"gray": "Gris",
"red": "Rouge",
"teal": "Saphir"
"teal": "Bleu canard"
},
"title": "Apparence"
},
@@ -493,8 +504,8 @@
},
"redoSetup": "Refaire la configuration",
"successStatus": {
"description": "Tout est réuni pour que vous puissiez commencer à regarder vos médias préférés.",
"title": "Tout est mis en place !"
"description": "Tout prêt pour que vous puissiez commencer à regarder vos médias préférés.",
"title": "Tout est en place !"
},
"unsetStatus": {
"description": "Pour commencer le processus de configuration, veuillez cliquer sur le bouton à droite.",
@@ -512,11 +523,14 @@
}
},
"preferences": {
"language": "Language de l'application",
"autoplay": "Lecture automatique",
"autoplayDescription": "Lire automatiquement le prochain épisode d'une série après avoir atteint la fin. Peut être activé par les utilisateurs avec l'extension du navigateur, un proxy personnalisé ou avec la configuration par défaut si autorisé par l'hôte.",
"autoplayLabel": "Lecture automatique",
"language": "Langage de l'application",
"languageDescription": "Langue appliquée à lensemble de lapplication.",
"thumbnail": "Générer des miniatures",
"thumbnail": "Générer les miniatures",
"thumbnailDescription": "La plupart du temps, les vidéos n'ont pas de miniatures. Vous pouvez activer ce paramètre pour les générer à la volée, mais ils peuvent ralentir votre vidéo.",
"thumbnailLabel": "Générer des miniatures",
"thumbnailLabel": "Générer les miniatures",
"title": "Préférences"
},
"reset": "Réinitialiser",
@@ -524,7 +538,7 @@
"sidebar": {
"info": {
"appVersion": "Version de l'application",
"backendUrl": "URL de Backend",
"backendUrl": "URL du Backend",
"backendVersion": "Version du Backend",
"hostname": "Nom d'hôte",
"insecure": "Non sécurisé",
@@ -537,7 +551,7 @@
},
"subtitles": {
"backgroundBlurLabel": "Flou d'arrière-plan",
"backgroundLabel": "Opacité du fond",
"backgroundLabel": "Opacité de l'arrière-plan",
"colorLabel": "Couleur",
"previewQuote": "Plus l'obscurité est profonde, plus la lumière brille.",
"textSizeLabel": "Taille des textes",

View File

@@ -57,6 +57,8 @@
},
"host": "Estaste a conectar a <0>{{hostname}}</0> - por favor, confirma se confías antes de crear a conta",
"no": "Regresar",
"noHost": "O servidor non está configurado, polo que non podes crear unha conta",
"noHostTitle": "O servidor non está configurado!",
"title": "Confías neste servidor?",
"yes": "Si, si que confío neste servidor"
},
@@ -118,7 +120,12 @@
"noResults": "Non atopamos nada!",
"placeholder": {
"default": "Que che gustaría ver?",
"extra": []
"extra": [
"Qué queres explorar?",
"Que está na túa lista se seguimiento?",
"Cal é a túa película favorita?",
"Cal é a túa serie favorita?"
]
},
"sectionTitle": "Resultados da busca"
},
@@ -131,11 +138,15 @@
},
"morning": {
"default": "Que che gustaría ver esta mañá?",
"extra": ["Escoitei que “Antes del amanecer” é boa"]
"extra": [
"Escoitei que “Antes del amanecer” é boa"
]
},
"night": {
"default": "Que che gustaría ver esta noite?",
"extra": ["Canso? Escoitei que “El Exorcista” é boa."]
"extra": [
"Canso? Escoitei que “El Exorcista” é boa."
]
}
}
},
@@ -241,6 +252,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Copiar a ligazón da lista HLS",
"disclaimer": "As descargas proveñen do provedor. movie-web non ten control sobre as descargas e a súa procedencia.",
"downloadSubtitle": "Descargar subtítulos actuais",
"downloadVideo": "Descargar video",
@@ -282,6 +294,7 @@
"title": "Calidade"
},
"settings": {
"audioItem": "Audio",
"downloadItem": "Descargar",
"enableSubtitles": "Activar subtítulos",
"experienceSection": "Configuración de experiencia",
@@ -308,8 +321,9 @@
"unknownOption": "Descoñecido"
},
"subtitles": {
"customChoice": "Seleccionar subtítulos dende o arquivo",
"customChoice": "Sube ou arrastra o arquivo",
"customizeLabel": "Personalizar",
"dropSubtitleFile": "Solta o arquivo de subtítulos aquí",
"offChoice": "Apagar",
"settings": {
"backlink": "Subtítulos personalizados",
@@ -524,6 +538,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Desenfoque do fondo",
"backgroundLabel": "Opacidade do fondo",
"colorLabel": "Cór",
"previewQuote": "Non debo temer. O medo é o asasino da mente.",

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "मूवी",
"show": "शृंखला"
}
},
"unreleased": "रिलीज़ नहीं हुवा"
},
"navigation": {
"banner": {
@@ -172,7 +173,7 @@
},
"notFound": {
"badge": "नहीं मिला",
"goHome": "घर वापिस जा रहा हूँ",
"goHome": "घर वापिस जाइये",
"message": "हमने हर जगह देखा: डिब्बे के नीचे, कोठरी में, प्रॉक्सी के पीछे लेकिन अंततः वह पेज नहीं मिला जिसे आप ढूंढ रहे थे।",
"title": "वह पृष्ठ नहीं मिल सका"
},
@@ -294,6 +295,7 @@
"title": "गुणवत्ता"
},
"settings": {
"audioItem": "ऑडियो",
"downloadItem": "डाउनलोड",
"enableSubtitles": "उपशीर्षक सक्षम करें",
"experienceSection": "देखने का अनुभव",
@@ -320,8 +322,9 @@
"unknownOption": "अज्ञात"
},
"subtitles": {
"customChoice": "फ़ाइल से उपशीर्षक चुनें",
"customChoice": "फ़ाइल ड्रॉप या अपलोड करें",
"customizeLabel": "अनुकूलित करें",
"dropSubtitleFile": "उपशीर्षक फ़ाइल यहां छोड़ें",
"offChoice": "बंद",
"settings": {
"backlink": "कस्टम उपशीर्षक",
@@ -379,6 +382,13 @@
"title": "वीडियो चलाने में विफल!"
},
"scraping": {
"extensionFailure": {
"badge": "एक्सटेंशन बन्द हें",
"enableExtension": "एक्सटेंशन सक्षम करें",
"homeButton": "घर जाओ",
"text": "आपने मूवी-वेब एक्सटेंशन इंस्टॉल कर लिया है. इसका उपयोग शुरू करने के लिए, आपको इस साइट के लिए एक्सटेंशन सक्षम करना होगा।",
"title": "कृपया एक्सटेंशनको सक्षम करें"
},
"items": {
"failure": "त्रुटि हुई",
"notFound": "वीडियो नहीं है",
@@ -536,6 +546,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "पृष्ठभूमि धुंधला",
"backgroundLabel": "पृष्ठभूमि अस्पष्टता",
"colorLabel": "रंग",
"previewQuote": "मुझे डरना नहीं चाहिए. डर मन हत्यारा है।",

View File

@@ -4,7 +4,7 @@
"faqTitle": "Pertanyaan umum",
"q1": {
"body": "movie-web tidak menyimpan berkas media apapun. Ketika anda mengklik sesuatu untuk ditonton, aplikasi akan mencari berkas media di internet (saat media dimuat dan pada tab 'sumber media' anda dapat melihat sumber mana yang digunakan). movie-web tidak pernah mengunggah media apapun, semua media didapat melalui mekanisme pencarian di internet.",
"title": "Dari mana konten media di sini berasal?"
"title": "Dari mana konten berasal?"
},
"q2": {
"body": "Kami tidak menerima permintaan penambahan serial televisi atau film, movie-web tidak mengelola konten apapun. Semua konten ditonton melalui sumber-sumber dari internet.",
@@ -26,24 +26,24 @@
"deviceNamePlaceholder": "Perangkat personal",
"generate": {
"description": "Kombinasi kata ini berfungsi sebagai nama pengguna sekaligus kata sandi anda. Pastikan untuk menyimpannya dengan aman karena anda memerlukannya untuk masuk ke akun anda",
"next": "Saya sudah menyimpan kombinasi kata di atas",
"next": "Saya sudah menyimpan kombinasi kata",
"passphraseFrameLabel": "Kombinasi kata",
"title": "Kombinasi kata anda"
"title": "Kombinasi kata Anda"
},
"hasAccount": "Sudah memiliki akun? <0>Masuk disini.</0>",
"login": {
"description": "Mohon masukkan kombinasi kata anda untuk masuk ke akun anda",
"description": "Mohon masukkan kombinasi kata anda untuk masuk ke akun Anda",
"deviceLengthError": "Mohon masukkan nama perangkat",
"passphraseLabel": "12 kombinasi kata unik",
"passphrasePlaceholder": "Kombinasi kata",
"submit": "Masuk",
"title": "Masuk ke akun anda",
"validationError": "Kombinasi kata unik salah"
"title": "Masuk ke akun Anda",
"validationError": "Kombinasi kata salah atau tidak lengkap"
},
"register": {
"information": {
"color1": "Gradasi warna profil pertama",
"color2": "Gradasi warna profil kedua",
"color1": "Warna profil pertama",
"color2": "Warna profil kedua",
"header": "Masukkan nama perangkat anda lalu pilih warna latar belakang dan ikon pengguna yang ingin anda gunakan",
"icon": "Ikon pengguna",
"next": "Berikutnya",
@@ -52,29 +52,31 @@
},
"trust": {
"failed": {
"text": "Apakah anda mengkonfigurasi server dengan benar?",
"text": "Apakah Anda mengkonfigurasi server dengan benar?",
"title": "Gagal terhubung dengan server"
},
"host": "Anda ingin terhubung ke <0>{{hostname}}</0> - mohon konfirmasi anda mempercayai server ini sebelum anda membuat akun",
"host": "Anda ingin terhubung ke <0>{{hostname}}</0> - mohon konfirmasi Anda mempercayai server ini sebelum Anda membuat akun",
"no": "Kembali",
"title": "Apakah anda mempercayai server ini?",
"yes": "Saya percaya"
"noHost": "Server belum dikonfigurasi, maka dari itu Anda tidak dapat membuat akun",
"noHostTitle": "Server belum dikonfigurasi!",
"title": "Apakah Anda mempercayai server ini?",
"yes": "Saya percaya server ini"
},
"verify": {
"description": "Mohon masukkan kombinasi kata pribadi anda sebelumnya untuk mengonfirmasi bahwa anda telah menyimpannya untuk melanjutkan proses pembuatan akun",
"description": "Mohon masukkan kombinasi kata pribadi Anda sebelumnya untuk mengonfirmasi bahwa Anda telah menyimpannya untuk melanjutkan proses pembuatan akun",
"invalidData": "Data tidak valid",
"noMatch": "Kombinasi kata tidak cocok",
"passphraseLabel": "12 kombinasi kata pribadi anda",
"passphraseLabel": "12 kombinasi kata Anda",
"recaptchaFailed": "Validasi reCaptcha gagal",
"register": "Buat akun",
"title": "Konfirmasi kombinasi kata pribadi anda"
"title": "Konfirmasi kombinasi kata Anda"
}
},
"errors": {
"badge": "Terjadi masalah",
"details": "Detail eror",
"details": "Rincian kesalahan",
"reloadPage": "Muat ulang halaman",
"showError": "Lihat detail eror",
"showError": "Lihat rincian kesalahan",
"title": "Kami mengalami galat!"
},
"footer": {
@@ -87,7 +89,7 @@
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "Tonton serial televisi dan film favorit anda dengan aplikasi streaming open source ini."
"tagline": "Tonton serial televisi dan film favorit anda dengan aplikasi streaming sumber terbuka ini."
},
"global": {
"name": "movie-web",
@@ -95,6 +97,7 @@
"about": "Tentang",
"dmca": "DMCA",
"login": "Masuk",
"onboarding": "Penyiapan",
"pagetitle": "{{title}} - movie-web",
"register": "Daftar",
"settings": "Pengaturan"
@@ -108,7 +111,7 @@
"sectionTitle": "Lanjut menonton"
},
"mediaList": {
"stopEditing": "Berhenti mengubah"
"stopEditing": "Berhenti menyunting"
},
"search": {
"allResults": "Hanya itu yang kami punya!",
@@ -117,7 +120,12 @@
"noResults": "Kami tidak dapat menemukan apapun!",
"placeholder": {
"default": "Apa yang ingin anda tonton?",
"extra": []
"extra": [
"Apa yang ingin kamu jelajahi?",
"Ada apa di daftar tontonmu?",
"Apa film favoritmu?",
"Apa serial favoritmu?"
]
},
"sectionTitle": "Hasil pencarian"
},
@@ -125,16 +133,20 @@
"day": {
"default": "Apa yang ingin anda tonton sore ini?",
"extra": [
"Lagi pengen nonton genre Adventure? Jurassic Park mungkin cocok buat anda."
"Merasa suka bertualang? Jurassic Park mungkin pilihan cocok untuk Anda."
]
},
"morning": {
"default": "Apa yang ingin anda tonton pagi ini?",
"extra": ["Kayaknya film Before Sunrise bagus deh"]
"default": "Apa yang ingin Anda tonton pagi ini?",
"extra": [
"Saya dengar film Before Sunrise bagus"
]
},
"night": {
"default": "Apa yang ingin anda tonton malam ini?",
"extra": ["Capek? Katanya The Exocist rekomended."]
"default": "Apa yang ingin Anda tonton malam ini?",
"extra": [
"Capek? Saya dengar The Exocist bagus."
]
}
}
},
@@ -143,11 +155,12 @@
"types": {
"movie": "Film",
"show": "Serial TV"
}
},
"unreleased": "Belum dirilis"
},
"navigation": {
"banner": {
"offline": "Periksa koneksi internet anda"
"offline": "Periksa koneksi internet Anda"
},
"menu": {
"about": "Tentang kami",
@@ -161,9 +174,69 @@
"notFound": {
"badge": "Tidak ditemukan",
"goHome": "Kembali",
"message": "Kami sudah mencari dimana-mana: di bawah tempat sampah, di lemari, di belakang server proxy, tapi tetap gagal menemukan halaman yang anda cari.",
"message": "Kami sudah mencari dimana-mana: di bawah tempat sampah, di lemari, di belakang server proxy, tetapi tidak dapat menemukan halaman yang Anda cari.",
"title": "Gagal menemukan halaman"
},
"onboarding": {
"defaultConfirm": {
"cancel": "Batal",
"confirm": "Gunakan pengaturan bawaan",
"description": "Pengaturan bawaan tidak memiliki streaming terbaik dan bisa menjadi sangat lambat.",
"title": "Apa Anda yakin?"
},
"extension": {
"back": "Kembali",
"explainer": "Menggunakan ekstensi browser, Anda dapat mendapatkan streaming terbaik yang kami tawarkan. Dengan instalasi sederhana.",
"explainerIos": "Sayangnya, ekstensi browser tidak didukung di iOS, Tekan <bold>Kembali<bold> untuk memilih opsi lain.",
"extensionHelp": "Jika Anda telah menginstal ekstensi tetapi tidak terdeteksi, <bold>buka ekstensi melalui menu ekstensi browser Anda</bold> dan ikuti instruksi di layar.",
"linkChrome": "Instal ekstensi Chrome",
"linkFirefox": "Instal ekstensi Firefox",
"notDetecting": "Terinstal di Chrome tetapi situs tidak mendeteksinya? Coba muat ulang halaman!",
"notDetectingAction": "Muat ulang halaman",
"status": {
"disallowed": "Ekstensi tidak diaktifkan untuk halaman ini",
"disallowedAction": "Aktifkan ekstensi",
"failed": "Gagal meminta status",
"loading": "Menunggu Anda menginstal ekstensi",
"outdated": "Versi ekstensi terlalu tua",
"success": "Ekstensi berkerja sesuai harapan!"
},
"submit": "Lanjutkan",
"title": "Mari mulai dengan ekstensi"
},
"proxy": {
"back": "Kembali",
"explainer": "Menggunakan metode proxy, Anda dapat mendapatkan streaming berkualitas baik dengan membuat layanan proxy mandiri.",
"input": {
"errorConnection": "Tidak dapat terhubung ke proxy",
"errorInvalidUrl": "URL tidak valid",
"errorNotProxy": "Mengharapkan proxy tapi menerima situs",
"label": "URL proxy",
"placeholder": "https://"
},
"link": "Belajar cara membuat proxy",
"title": "Mari buat proxy baru"
},
"start": {
"explainer": "Untuk mendapatkan streaming terbaik, Anda perlu memilih metode streaming yang Anda ingin gunakan.",
"options": {
"default": {
"text": "Saya tidak menginginkan streaming kualitas baik, <0 /> <1>gunakan pengaturan bawaan</1>"
},
"extension": {
"action": "Instal ekstensi",
"description": "Instal ekstensi browser dan dapatkan akses ke sumber terbaik.",
"quality": "Kualitas terbaik",
"title": "Ekstensi browser"
},
"proxy": {
"action": "Atur proxy",
"description": "Atur proxy dalam hanya 5 menit dan dapatkan akses ke sumber terbaik.",
"quality": "Kualitas baik"
}
}
}
},
"overlays": {
"close": "Tutup"
},
@@ -177,12 +250,13 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Salin tautan daftar putar HLS",
"disclaimer": "Tautan unduhan diambil langsung dari penyedia pihak ketiga. Aplikasi ini tidak memiliki kendali bagaimana unduhan disediakan.",
"downloadSubtitle": "Unduh subtitle",
"downloadSubtitle": "Unduh subtitle saat ini",
"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": "Unduhan didapatkan langsung dari penyedia. movie-web tidak memiliki kendali bagaimana unduan disediakan.<br /><br />Harap diperhatikan bahwa Anda mengunduh daftar putar HLS, <bold>ini tidak direkomendasikan untuk diunduh jika Anda tidak terbiasa dengan format streaming tingkat lanjut</bold>Coba sumber berbeda untuk format berbeda.",
"onAndroid": {
"1": "Untuk mengunduh di Android, klik tombol unduh, lalu di halaman baru <bold>klik dan tahan</bold> pada video, lalu pilih <bold>save</bold>.",
"1": "Untuk mengunduh di Android, klik tombol unduh, lalu di halaman baru <bold>klik dan tahan</bold> pada video, lalu pilih <bold>simpan</bold>.",
"shortTitle": "Unduh / Android",
"title": "Unduh di Android"
},
@@ -200,11 +274,12 @@
},
"episodes": {
"button": "Episode",
"emptyState": "Tidak ada episode di season ini, check lagi nanti!",
"emptyState": "Tidak ada episode di season ini, periksa kembali nanti!",
"episodeBadge": "E{{episode}}",
"loadingError": "Eror memuat season",
"loadingError": "Gagal memuat season",
"loadingList": "Memuat...",
"loadingTitle": "Memuat..."
"loadingTitle": "Memuat...",
"unairedEpisodes": "Satu atau lebih episode dalam season ini telah dinonaktifkan karena mereka belum ditayangkan."
},
"playback": {
"speedLabel": "Kecepatan pemutar",
@@ -212,13 +287,13 @@
},
"quality": {
"automaticLabel": "Otomatis",
"hint": "Anda dapat mencoba <0>mengganti sumber media</0> untuk mendapatkan opsi kualitas yang berbeda.",
"iosNoQuality": "Karena keterbatasan dari Apple, opsi kualitas pada sumber ini tidak tersedia untuk iOS. Anda dapat mencoba <0>mengganti sumber media</0> untuk mendapatkan opsi kualitas yang berbeda.",
"hint": "Anda dapat mencoba <0>mengganti sumber</0> untuk mendapatkan opsi kualitas yang berbeda.",
"iosNoQuality": "Karena keterbatasan dari Apple, opsi kualitas pada sumber ini tidak tersedia untuk iOS. Anda dapat mencoba <0>mengganti sumber</0> untuk mendapatkan opsi kualitas yang berbeda.",
"title": "Kualitas"
},
"settings": {
"downloadItem": "Unduh",
"enableSubtitles": "Hidupkan subtitle",
"enableSubtitles": "Aktifkan subtitle",
"experienceSection": "Pengaturan tambahan",
"playbackItem": "Pengaturan pemutar",
"qualityItem": "Kualitas",
@@ -228,22 +303,22 @@
},
"sources": {
"failed": {
"text": "Terjadi galat saat mencoba mencari media, mohon pilih sumber yang lain.",
"text": "Terjadi galat saat mencoba mencari media, mohon pilih sumber lain.",
"title": "Gagal memuat data"
},
"noEmbeds": {
"text": "Kami tidak dapat menemukan tautan, mohon pilih sumber yang lain.",
"text": "Kami tidak dapat menemukan tautan, mohon pilih sumber lain.",
"title": "Tautan tidak ditemukan"
},
"noStream": {
"text": "Sumber ini tidak memiliki media untuk film atau seri yang anda cari.",
"text": "Sumber ini tidak memiliki media untuk film atau seri yang Anda cari.",
"title": "Tidak ada media"
},
"title": "Sumber",
"unknownOption": "Tidak diketahui"
},
"subtitles": {
"customChoice": "Pilih subtitle dari file",
"customChoice": "Jatuhkan atau unggah berkas",
"customizeLabel": "Sesuaikan",
"offChoice": "Matikan",
"settings": {

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "Film",
"show": "Serie"
}
},
"unreleased": "Inedito"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "Qualità"
},
"settings": {
"audioItem": "Audio",
"downloadItem": "Scarica",
"enableSubtitles": "Abilita i sottotitoli",
"experienceSection": "Esperienza di visione",
@@ -320,8 +322,9 @@
"unknownOption": "Sconosciuto"
},
"subtitles": {
"customChoice": "Selezionare i sottotitoli dal file",
"customChoice": "Trascina o carica il file",
"customizeLabel": "Personalizzare",
"dropSubtitleFile": "Trascina il file dei sottotitoli qui",
"offChoice": "Spento",
"settings": {
"backlink": "Sottotitoli personalizzati",
@@ -363,7 +366,8 @@
},
"nextEpisode": {
"cancel": "Cancella",
"next": "Prossimo episodio"
"next": "Prossimo episodio",
"nextSeason": "Prossima stagione"
},
"playbackError": {
"badge": "Errore di riproduzione",
@@ -379,6 +383,13 @@
"title": "Impossibile riprodurre il video!"
},
"scraping": {
"extensionFailure": {
"badge": "L'estensione è disabilitata",
"enableExtension": "Abilita l'estensione",
"homeButton": "Torna alla pagina iniziale",
"text": "Avete installato l'estensione movie-web. Per iniziare a usarla, è necessario abilitare l'estensione per questo sito.",
"title": "Abilita l'estensione"
},
"items": {
"failure": "Si è verificato un errore",
"notFound": "Non ha il video",
@@ -512,6 +523,9 @@
}
},
"preferences": {
"autoplay": "Autoplay",
"autoplayDescription": "Riproduzione automatica dell'episodio successivo di una serie dopo raggiungere il fine dell'episodio. Può essere abilitato dagli utenti con l'estensione del browser, con un proxy o con il setup predefinita, se è permesso dall'host.",
"autoplayLabel": "Autoplay",
"language": "Lingua di applicazione",
"languageDescription": "Lingua applicato all'intera applicazione.",
"thumbnail": "Generare miniature",

View File

@@ -122,7 +122,7 @@
"default": "무엇을 보고 싶으신가요?",
"extra": [
"무엇을 탐험하고 싶으신가요?",
null,
"관심 목록에 무엇이 있나요?",
"당신이 가장 좋아하는 영화는?",
"당신이 가장 좋아하는 시리즈는?"
]
@@ -536,6 +536,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "배경 흐림",
"backgroundLabel": "배경 투명도",
"colorLabel": "색상",
"previewQuote": "두려워해서는 안 됩니다. 두려움은 마음을 죽이는 존재입니다.",

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "चलचित्र",
"show": "कार्यक्रम"
}
},
"unreleased": "रिलीज नभएको"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "क्वालिटी"
},
"settings": {
"audioItem": "आवाज",
"downloadItem": "डाउनलोड",
"enableSubtitles": "उपशीर्षकहरू सक्षम गर्नुहोस्",
"experienceSection": "हेर्ने अनुभव",
@@ -320,8 +322,9 @@
"unknownOption": "अज्ञात"
},
"subtitles": {
"customChoice": "फाइलबाट उपशीर्षक चयन गर्नुहोस्",
"customChoice": "ड्रप वा फाइल अपलोड गर्नुहोस्",
"customizeLabel": "अनुकूलन गर्नुहोस्",
"dropSubtitleFile": "सबटाइटल फाइल यहाँ छोड्नुहोस्",
"offChoice": "बन्द",
"settings": {
"backlink": "अनुकूलन उपशीर्षकहरू",
@@ -379,6 +382,13 @@
"title": "भिडियो प्ले गर्न असफल भयो!"
},
"scraping": {
"extensionFailure": {
"badge": "एक्स्टेन्सन बन्द छ",
"enableExtension": "एक्स्टेन्सन सक्षम गर्नुहोस्",
"homeButton": "होम् जाउँ",
"text": "तपाईंले चलचित्र-वेब एक्स्टेन्सन स्थापना गर्नुभएको छ। यसलाई प्रयोग गर्न सुरु गर्न, तपाईंले यो साइटको लागिएक्स्टेन्सन सक्षम गर्न आवश्यक छ।",
"title": "कृपया एक्स्टेन्सन सक्षम गर्नुहोस्"
},
"items": {
"failure": "त्रुटि भयो",
"notFound": "भिडियो छैन",
@@ -536,6 +546,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "पृष्ठभूमि धमिलो",
"backgroundLabel": "पृष्ठभूमि अस्पष्टता",
"colorLabel": "रङ",
"previewQuote": "म डराउनु हुँदैन। डर दिमागको हत्यारा हो।",

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "Film",
"show": "Serie"
}
},
"unreleased": "Niet uitgebracht"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "Kwaliteit"
},
"settings": {
"audioItem": "Audio",
"downloadItem": "Download",
"enableSubtitles": "Ondertitels inschakelen",
"experienceSection": "Kijk-ervaring",
@@ -320,8 +322,9 @@
"unknownOption": "Onbekend"
},
"subtitles": {
"customChoice": "Selecteer ondertiteling uit bestand",
"customChoice": "Sleep of upload bestand",
"customizeLabel": "Aanpassen",
"dropSubtitleFile": "Sleep ondertitelbestand naar hier",
"offChoice": "Uit",
"settings": {
"backlink": "Aangepaste ondertiteling",
@@ -363,7 +366,8 @@
},
"nextEpisode": {
"cancel": "Annuleren",
"next": "Volgende aflevering"
"next": "Volgende aflevering",
"nextSeason": "Het volgende seizoen"
},
"playbackError": {
"badge": "Afspeelfout",
@@ -379,6 +383,13 @@
"title": "Oeps, hier ging iets mis!"
},
"scraping": {
"extensionFailure": {
"badge": "Extensie uitgeschakeld",
"enableExtension": "Extensie inschakelen",
"homeButton": "Naar hoofdpagina",
"text": "Je hebt de movie-web extensie geïnstalleerd. Om deze te gebruiken, moet je de extensie inschakelen voor deze site.",
"title": "Activeer alstublieft de extensie"
},
"items": {
"failure": "Daar ging iets mis",
"notFound": "Er is geen video gevonden",
@@ -512,6 +523,9 @@
}
},
"preferences": {
"autoplay": "Automatisch afspelen",
"autoplayDescription": "Automatisch het volgende aflevering afspelen in een serie nadat het einde is bereikt. Kan worden ingeschakeld door gebruikers met de browserextensie, een aangepaste proxy of met de standaardinstellingen als toegestaan door de host.",
"autoplayLabel": "Automatisch afspelen",
"language": "Applicatietaal",
"languageDescription": "Taal toegepast op de gehele applicatie.",
"thumbnail": "Genereer miniaturen",

View File

@@ -57,6 +57,8 @@
},
"host": "Łączysz się z <0>{{hostname}}</0> - przed utworzeniem konta potwierdź że ufasz temu serwerowi",
"no": "Wstecz",
"noHost": "Serwer nie został skonfigurowany, więc nie można utworzyć konta",
"noHostTitle": "Serwer nie skonfigurowany!",
"title": "Ufasz temu serwerowi?",
"yes": "Ufam temu serwerowi"
},
@@ -117,7 +119,13 @@
"loading": "Wczytywanie...",
"noResults": "Nie mogliśmy niczego znaleźć!",
"placeholder": {
"default": "Co chciałbyś obejrzeć?"
"default": "Co chciałbyś obejrzeć?",
"extra": [
"Co chcesz odkryć?",
"Co znajduje się na Twojej liście do obejrzenia?",
"Jaki jest twój ulubiony film?",
"Jaki jest twój ulubiony serial?"
]
},
"sectionTitle": "Wyniki wyszukiwania"
},
@@ -182,7 +190,7 @@
"extensionHelp": "Jeżeli zainstalowałeś rozszerzenie, ale nie zostało ono wykryte, <bold>otwórz rozszerzenie za pomocą menu rozszerzeń przeglądarki</bold> i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.",
"linkChrome": "Zainstaluj rozszerzenie na Chrome",
"linkFirefox": "Zainstaluj rozszerzenie na Firefox",
"notDetecting": "Zainstalowano na Chrome, ale s nie wyświetla? Spróbuj odświeżyć stronę!",
"notDetecting": "Zainstalowano w Chrome, ale strona go nie wykrywa? Spróbuj odświeżyć stronę!",
"notDetectingAction": "Odśwież stronę",
"status": {
"disallowed": "Rozszerzenie nie jest włączone dla tej strony",
@@ -244,6 +252,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Kopiuj link do listy odtwarzania HLS",
"disclaimer": "Pliki do pobrania są pobierane bezpośrednio od dostawcy. movie-web nie ma kontroli nad sposobem dostarczania plików do pobrania.",
"downloadSubtitle": "Pobierz aktualne napisy",
"downloadVideo": "Pobierz wideo",
@@ -285,6 +294,7 @@
"title": "Jakość"
},
"settings": {
"audioItem": "Dźwięk",
"downloadItem": "Pobierz",
"enableSubtitles": "Włącz napisy",
"experienceSection": "Odtwarzanie",
@@ -311,8 +321,9 @@
"unknownOption": "Nieznany"
},
"subtitles": {
"customChoice": "Wybierz napisy z pliku",
"customChoice": "Wrzuć lub prześlij plik",
"customizeLabel": "Dostosuj",
"dropSubtitleFile": "Przeciągnij i upuść plik z napisami tutaj",
"offChoice": "Wyłączone",
"settings": {
"backlink": "Własne napisy",

View File

@@ -57,6 +57,8 @@
},
"host": "Você está se conectando a <0>{{hostname}}</0> - por favor, confirme se confia nele antes de criar uma conta",
"no": "Voltar",
"noHost": "O servidor não foi configurado, portanto você não pode criar uma conta",
"noHostTitle": "Servidor não configurado!",
"title": "Você confia neste servidor?",
"yes": "Eu confio neste servidor"
},
@@ -118,7 +120,12 @@
"noResults": "Não conseguimos encontrar nada!",
"placeholder": {
"default": "O que você quer assistir?",
"extra": []
"extra": [
"O que você gostaria de explorar?",
"O que está na sua lista para assistir?",
"Qual o seu filme favorito?",
"Qual a sua série favorita?"
]
},
"sectionTitle": "Resultados da pesquisa"
},
@@ -131,11 +138,15 @@
},
"morning": {
"default": "O que você gostaria de assistir esta manhã?",
"extra": ["Ouvi dizer que Antes do Amanhecer é bom"]
"extra": [
"Ouvi dizer que Antes do Amanhecer é bom"
]
},
"night": {
"default": "O que você gostaria de assistir esta noite?",
"extra": ["Cansado? Ouvi dizer que O Exorcista é bom."]
"extra": [
"Cansado? Ouvi dizer que O Exorcista é bom."
]
}
}
},
@@ -144,7 +155,8 @@
"types": {
"movie": "Filme",
"show": "Série"
}
},
"unreleased": "Não lançado"
},
"navigation": {
"banner": {
@@ -283,6 +295,7 @@
"title": "Qualidade"
},
"settings": {
"audioItem": "Áudio",
"downloadItem": "Baixar",
"enableSubtitles": "Ativar Legendas",
"experienceSection": "Experiência de visualização",
@@ -309,8 +322,9 @@
"unknownOption": "Desconhecido"
},
"subtitles": {
"customChoice": "Selecione arquivo de legenda",
"customChoice": "Solte ou faça upload do arquivo",
"customizeLabel": "Personalizar",
"dropSubtitleFile": "Solte o arquivo da legenda aqui",
"offChoice": "Desativadas",
"settings": {
"backlink": "Legendas personalizadas",
@@ -352,7 +366,8 @@
},
"nextEpisode": {
"cancel": "Cancelar",
"next": "Próximo episódio"
"next": "Próximo episódio",
"nextSeason": "Próxima temporada"
},
"playbackError": {
"badge": "Erro de reprodução",
@@ -368,6 +383,13 @@
"title": "Falha ao reproduzir o vídeo!"
},
"scraping": {
"extensionFailure": {
"badge": "Extensão desativada",
"enableExtension": "Ativar extensão",
"homeButton": "Ir para o início",
"text": "Você instalou a extensão movie-web. Para começar a usá-la, você precisa ativar a extensão neste site.",
"title": "Por favor, ative a extensão"
},
"items": {
"failure": "Ocorreu um erro",
"notFound": "Não tem o vídeo",
@@ -501,6 +523,9 @@
}
},
"preferences": {
"autoplay": "Reprodução automática",
"autoplayDescription": "Reproduz automaticamente o próximo episódio de uma série após chegar ao fim. Pode ser ativado pelos usuários através da extensão de navegador, um proxy personalizado, ou pela configuração padrão, se permitido pelo provedor.",
"autoplayLabel": "Reprodução automática",
"language": "Idioma do aplicativo",
"languageDescription": "Idioma aplicado para todo o aplicativo.",
"thumbnail": "Gerar miniaturas",
@@ -525,6 +550,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Desfoque de fundo",
"backgroundLabel": "Opacidade do fundo",
"colorLabel": "Cor",
"previewQuote": "Eu não devo ter medo. Medo é o assassino da mente.",

View File

@@ -57,6 +57,8 @@
},
"host": "Vă conectați la <0>{{hostname}}</0> - vă rugăm să confirmați că aveți încredere înainte de a vă crea un cont",
"no": "Întoarce-te",
"noHost": "Serverul nu a fost configurat, deci nu vă puteți crea un cont",
"noHostTitle": "Serverul nu este configurat!",
"title": "Ai încredere în acest server?",
"yes": "Am încredere în acest server"
},
@@ -79,6 +81,7 @@
},
"footer": {
"legal": {
"disclaimer": "Declinare a răspunderii",
"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": {
@@ -94,6 +97,7 @@
"about": "Despre",
"dmca": "DMCA",
"login": "Log in",
"onboarding": "Configurație",
"pagetitle": "{{title}} - movie-web",
"register": "Inregistreaza-te",
"settings": "Setări"
@@ -116,7 +120,12 @@
"noResults": "Nu am putut găsi nimic!",
"placeholder": {
"default": "La ce dorești să te uiți?",
"extra": []
"extra": [
"Ce vrei să explorezi?",
"Ce e pe lista dvs. de urmărire?",
"Care e filmul tău preferat?",
"Care e serialul tău preferat?"
]
},
"sectionTitle": "Rezultate de căutare"
},
@@ -129,11 +138,15 @@
},
"morning": {
"default": "La ce dorești să te in uiți dimineață aceasta?",
"extra": ["Aud că Before Sunrise este bun"]
"extra": [
"Aud că Before Sunrise este bun"
]
},
"night": {
"default": "La ce dorești să te uiți în astă seară?",
"extra": ["Obosit? Aud că The Exorcist is good."]
"extra": [
"Obosit? Aud că The Exorcist is good."
]
}
}
},
@@ -163,6 +176,69 @@
"message": "Ne-am uitat peste tot: sub pubele, în dulap, În spatele proxy-ului dar din păcate nu am găsit pagina pe care dumneavoastră o căutați.",
"title": "N-am putut găsi pagina"
},
"onboarding": {
"defaultConfirm": {
"cancel": "Anulare",
"confirm": "Folosește configurația implicită",
"description": "Configurația implicită nu are cele mai bune fluxuri și poate fi insuportabil de înceată.",
"title": "Sunteți sigur(ă)?"
},
"extension": {
"back": "Înapoi",
"explainer": "Folosind această extensie de browser, puteți obține cele mai bune fluxuri pe care le avem de oferit. Cu doar o simplă instalare.",
"explainerIos": "Din păcate, extensia de browser nu e suportată pe iOS, Apăsați <bold>Înapoi</bold> pentru a alege altă opțiune.",
"extensionHelp": "Dacă ați instalat extensia dar nu e detectată, <bold>deschideți extensia din meniul extensiilor al browserului dvs.</bold> și urmăriți pașii de pe ecran.",
"linkChrome": "Instalare extensie pentru Chrome",
"linkFirefox": "Instalare extensie pentru Firefox",
"notDetecting": "Instalată pe Chrome dar site-ul nu o detectează? Încerați să reîmprospătați pagina!",
"notDetectingAction": "Reîncarcă pagina",
"status": {
"disallowed": "Extensia nu e activată pentru această pagină",
"disallowedAction": "Activare extensie",
"failed": "Nu s-a putut obține statusul",
"loading": "Așteptăm să vă instalați extensia",
"outdated": "Versiunea extensiei este prea veche",
"success": "Extensia funcționează conform așteptărilor!"
},
"submit": "Continuare",
"title": "Să începem cu o extensie"
},
"proxy": {
"back": "Înapoi",
"explainer": "Cu metoda proxy, puteți obține fluxuri de calitate prin a face un proxy cu autoservire.",
"input": {
"errorConnection": "Nu s-a putut conecta la proxy",
"errorInvalidUrl": "URL invalid",
"errorNotProxy": "Am așteptat un proxy dar am primit un site web",
"label": "URL-ul proxy-ului",
"placeholder": "https://"
},
"link": "Învață cum se face un proxy",
"submit": "Validare proxy",
"title": "Să facem un proxy nou"
},
"start": {
"explainer": "Pentru a obține cele mai bune fluxuri posibile, va trebui să alegeți ce metodă de streaming vreți să folosiți.",
"options": {
"default": {
"text": "Nu vreau fluxuri de calitate,<0 /> <1>folosește configurația implicită</1>"
},
"extension": {
"action": "Instalare extensie",
"description": "Instalați extensia browser și obțineți acces la cele mai bune surse.",
"quality": "Cea mai bună calitate",
"title": "Extensie browser"
},
"proxy": {
"action": "Configurare proxy",
"description": "Configurați un proxy în doar 5 minute și obținți acces la resurse grozave.",
"quality": "Calitate bună",
"title": "Proxy personalizat"
}
},
"title": "Hai să configurăm movie-web"
}
},
"overlays": {
"close": "Închide"
},
@@ -176,10 +252,11 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Copiere link către lista de redare HLS",
"disclaimer": "Descărcările sunt luate direct de la furnizor. Movie-web nu are control cum descărcările sunt furnizate.",
"downloadSubtitle": "Descărcați subtitlul curente",
"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.<br /><br />Vă rugăm să rețineți că descărcați o listă de redare HLS, <bold>nu este recomandat să o descărcați dacă nu sunteți familiari cu formate avasate de streaming</bold>. Încercați surse diferite pentru formate diferte.",
"onAndroid": {
"1": "Pentru a descărca pe android, apăsați butonul de descărcare apoi în pagina nouă,<bold>apăsați și țineți</bold> pe video, apoi selectați <bold>salvează</bold>.",
"shortTitle": "Descărcare / Android",
@@ -236,8 +313,8 @@
"title": "Nu a fost găsită nicio încorporare"
},
"noStream": {
"text": "Sursa asta nu are nicio sursă de streaming pentru filmul său spectacolul.",
"title": "Niciun stream"
"text": "Sursa aceasta nu are niciun flux pentru acest film sau serial.",
"title": "Niciun flux"
},
"title": "Surse",
"unknownOption": "Necunoscut"
@@ -398,25 +475,50 @@
},
"connections": {
"server": {
"description": "Dacă doriți să vă conectați la un backend personalizat pentru a vă stoca datele, activați acest lucru și furnizați adresa URL.",
"description": "Dacă doriți să vă conectați la un backend personalizat pentru a vă stoca datele, activați acest lucru și furnizați adresa URL. <0>Instrucțiuni.</0>",
"label": "Server personalizat",
"urlLabel": "Adresa URL personalizată a serverului"
},
"setup": {
"doSetup": "Configurează",
"errorStatus": {
"description": "Se pare că unul sau mai multe obiecte din această configurație au nevoie de atenția ta.",
"title": "Ceva are nevoie de atenția ta"
},
"itemError": "Ceva nu e bine cu această setare. Parcurge configurația din nou pentru a o corecta.",
"items": {
"default": "Configurație implicită",
"extension": "Extensie",
"proxy": "Proxy personalizat"
},
"redoSetup": "Refă configurația",
"successStatus": {
"description": "Toate sunt la locul lor ca să începeți să urmariți conținutul preferat.",
"title": "Totul este pregătit!"
},
"unsetStatus": {
"description": "Apăsați butonul din dreapta pentru a începe procesul de configurare.",
"title": "Nu ați parcurs configurația"
}
},
"title": "Conexiuni",
"workers": {
"addButton": "Adaugă un nou muncitor",
"description": "Pentru ca aplicația să funcționeze, tot traficul este direcționat prin proxy. Activați acest lucru dacă doriți să vă aduceți proprii lucrători.",
"description": "Pentru ca aplicația să funcționeze, tot traficul este direcționat prin proxy. Activați acest lucru dacă doriți să vă aduceți proprii lucrători. <0>Instrucțiuni.</0>",
"emptyState": "Niciun muncitor incă, adaugă unu",
"label": "Utilizați lucrători proxy personalizați",
"urlLabel": "Adresele URL ale lucrătorilor",
"urlPlaceholder": "https://"
}
},
"preferences": {
"language": "Limba aplicației",
"languageDescription": "Limba aplicată întregii aplicații.",
"thumbnail": "Generați pictograme",
"thumbnailDescription": "De cele mai multe ori videoclipurile nu au pictograme. Puteți activa această setare pentru a le genera din mers, dar vă pot încetini videoclipul.",
"thumbnailLabel": "Generați pictograme",
"title": "Preferințe"
},
"reset": "Resetare",
"save": "Salvează",
"sidebar": {
@@ -434,6 +536,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Blurarea fundalului",
"backgroundLabel": "Opacitatea fundalului",
"colorLabel": "Culoare",
"previewQuote": "nu trebuie să mă tem. Frica este ucigașul minții.",

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "Фильм",
"show": "Сериал"
}
},
"unreleased": "Ожидается"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "Качество"
},
"settings": {
"audioItem": "Аудио",
"downloadItem": "Скачать",
"enableSubtitles": "Включить субтитры",
"experienceSection": "Впечатления от просмотра",
@@ -320,8 +322,9 @@
"unknownOption": "Неизвестный"
},
"subtitles": {
"customChoice": "Выбрать субтитры из файла",
"customChoice": "Перетащите файл или нажмите для загрузки",
"customizeLabel": "Настроить",
"dropSubtitleFile": "Перетащите файл субтитров",
"offChoice": "Выключить",
"settings": {
"backlink": "Пользовательские субтитры",
@@ -363,7 +366,8 @@
},
"nextEpisode": {
"cancel": "Отмена",
"next": "Следующий эпизод"
"next": "Следующий эпизод",
"nextSeason": "Следующий сезон"
},
"playbackError": {
"badge": "Ошибка воспроизведения",
@@ -379,6 +383,13 @@
"title": "Не удалось воспроизвести видео!"
},
"scraping": {
"extensionFailure": {
"badge": "Расширение отключено",
"enableExtension": "Включить расширение",
"homeButton": "Вернуться на главную",
"text": "Вы установили расширение movie-web. Чтобы начать его использовать, необходимо включить расширение для этого сайта.",
"title": "Пожалуйста, включите расширение"
},
"items": {
"failure": "Возникла ошибка",
"notFound": "Такого видео нет",
@@ -512,6 +523,9 @@
}
},
"preferences": {
"autoplay": "Автовоспроизведение",
"autoplayDescription": "Автоматическое воспроизведение следующего эпизода в серии после ее окончания. Может быть включено пользователями с расширением для браузера, пользовательским прокси или с настройками по умолчанию, если это разрешено хостом.",
"autoplayLabel": "Автовоспроизведение",
"language": "Язык приложения",
"languageDescription": "Язык применяется ко всему приложению.",
"thumbnail": "Генерировать миниатюры",

View File

@@ -155,7 +155,8 @@
"types": {
"movie": "Film",
"show": "Serija"
}
},
"unreleased": "Neizdano"
},
"navigation": {
"banner": {
@@ -256,7 +257,7 @@
"disclaimer": "Prenosi se opravijo neposredno pri ponudniku vsebin. movie-web nima nadzora nad načinom zagotavljanja prenosov.",
"downloadSubtitle": "Prenesi trenutne podnapise",
"downloadVideo": "Prenesi video",
"hlsDisclaimer": "Prenosi se opravijo neposredno pri ponudniku vsebin. movie-web nima nadzora nad načinom zagotavljanja prenosov. Upoštevajte, da prenašate seznam predvajanja tipa \"HLS\" namenjen uporabnikom, ki poznajo napredno pretakanje večpredstavnostnih vsebin.",
"hlsDisclaimer": "Prenosi potekajo neposredno od ponudnika. movie-web nima nadzora nad načinom zagotavljanja prenosov.<br /><br />Upoštevajte, da prenašate seznam predvajanja HLS, <bold>prenos ni priporočljiv, če niste seznanjeni z naprednimi formati pretakanja </bold>. Preizkusite različne vire za različne formate.",
"onAndroid": {
"1": "Če želite prenesti v sistemu Android, kliknite gumb za prenos, nato na novi strani <bold>tipnite in držite</bold> videoposnetek ter izberite <bold>shrani</bold>.",
"shortTitle": "Prenesi / Android",
@@ -294,6 +295,7 @@
"title": "Kvaliteta"
},
"settings": {
"audioItem": "Zvok",
"downloadItem": "Prenesi",
"enableSubtitles": "Vklopi podnapise",
"experienceSection": "Izkušnje ogleda",
@@ -320,8 +322,9 @@
"unknownOption": "Neznano"
},
"subtitles": {
"customChoice": "Izberi podnapise iz datoteke",
"customChoice": "Povleci in naloži datoteko",
"customizeLabel": "Prilagodi",
"dropSubtitleFile": "Povleci datoteko s podnapisi tukaj",
"offChoice": "Off",
"settings": {
"backlink": "Podnapisi po meri",
@@ -363,7 +366,8 @@
},
"nextEpisode": {
"cancel": "Prekliči",
"next": "Naslednja epizoda"
"next": "Naslednja epizoda",
"nextSeason": "Naslednja sezona"
},
"playbackError": {
"badge": "Napaka v predvajanju",
@@ -379,6 +383,13 @@
"title": "Ni uspelo predvajati videoposnetka!"
},
"scraping": {
"extensionFailure": {
"badge": "Razširitev brskalnika je onemogočena",
"enableExtension": "Vklopi razširitev brskalnika",
"homeButton": "Pojdi domov",
"text": "Namestili ste razširitev movie-web. Če jo želite začeti uporabljati, morate razširitev omogočiti za to spletno mesto.",
"title": "Prosim vklopite razširitev brskalnika"
},
"items": {
"failure": "Zgodila se je napaka",
"notFound": "Nima videoposnetka",
@@ -503,16 +514,19 @@
},
"title": "Povezave",
"workers": {
"addButton": "Dodaj novega \"workerja\"",
"addButton": "Dodaj novega delovalca",
"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 delovalca, dodajte ga spodaj",
"label": "Uporaba posrednikov po meri",
"urlLabel": "Naslov Workerja (URL)",
"urlLabel": "Naslov delovalca (URL)",
"urlPlaceholder": "https://"
}
},
"preferences": {
"language": "Jezik",
"autoplay": "Samodejno predvajanje",
"autoplayDescription": "Samodejno predvaja naslednjo epizodo v seriji, ko dosežete konec. Uporabniki lahko to omogočijo z razširitvijo brskalnika, proxyjem po meri ali s privzeto nastavitvijo, če to dovoljuje gostitelj.",
"autoplayLabel": "Samodejno predvajanje",
"language": "Jezik aplikacije",
"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.",
@@ -526,7 +540,7 @@
"appVersion": "Verzija aplikacije",
"backendUrl": "Naslov zaledja",
"backendVersion": "Verzija zaledja",
"hostname": "Hostname",
"hostname": "Gostiteljsko ime",
"insecure": "\"Nevarna povezava\"",
"notLoggedIn": "Niste prijavljeni",
"secure": "Varna povezava",

View File

@@ -57,6 +57,8 @@
},
"host": "<0>{{hostname}}</0> adlı sunucuya bağlanıyorsunuz - lütfen hesap oluşturmadan önce sunucuya güvendiğinizi onaylayın",
"no": "Geri dön",
"noHost": "Sunucu henüz yapılandırılmadığı için hesap oluşturamazsınız",
"noHostTitle": "Sunucu kullanılamıyor!",
"title": "Bu sunucuya güveniyor musunuz?",
"yes": "Bu sunucuya güveniyorum"
},
@@ -118,7 +120,12 @@
"noResults": "Hiçbir şey bulamadık!",
"placeholder": {
"default": "Ne izlemek istersiniz?",
"extra": []
"extra": [
"Ne keşfetmek istiyorsunuz?",
"İzleme listenizde neler var?",
"Favori filmin ne?",
"En sevdiğiniz dizi ne?"
]
},
"sectionTitle": "Arama sonuçları"
},
@@ -131,11 +138,15 @@
},
"morning": {
"default": "Bu sabah ne izlemek istersiniz?",
"extra": ["Before Sunrise'a iyi diyorlar"]
"extra": [
"Before Sunrise'a iyi diyorlar"
]
},
"night": {
"default": "Bu akşam ne izlemek istersiniz?",
"extra": ["Yoruldun mu? The Exorcist'e iyi diyorlar."]
"extra": [
"Yoruldun mu? The Exorcist'e iyi diyorlar."
]
}
}
},
@@ -144,7 +155,8 @@
"types": {
"movie": "Film",
"show": "Dizi"
}
},
"unreleased": "Yayınlanmamış"
},
"navigation": {
"banner": {
@@ -165,6 +177,69 @@
"message": "Her yere baktık: bazanın altına, dolabın içine hatta ara sunucuya ama maalesef aradığınız sayfayı bulamadık.",
"title": "Sayfa bulunamadı"
},
"onboarding": {
"defaultConfirm": {
"cancel": "İptal Et",
"confirm": "Ön Tanımlı Ayarları Kullan",
"description": "Varsayılan ayarlar en iyi akış hizmetlerini sunmayabilir ve oldukça yavaş olabilir.",
"title": "Emin misiniz?"
},
"extension": {
"back": "Geri Dön",
"explainer": "Tarayıcı uzantısını kullanarak, size sunduğumuz en iyi akışlara erişebilirsiniz. Kurulumu ise oldukça basit.",
"explainerIos": "Ne yazık ki, tarayıcı uzantısı iOS cihazlarında desteklenmemektedir. <bold>Geri Dön</bold> düğmesine basarak başka bir seçenek seçebilirsiniz.",
"extensionHelp": "Eklenti yüklediyseniz ancak algılamıyorsa, <bold>tarayıcınızın uzantı menüsünden eklentiyi açın</bold> ve ekran adımları takip edin.",
"linkChrome": "Chrome uzantısını yükleyin",
"linkFirefox": "Firefox uzantısını yükleyin",
"notDetecting": "Chrome'a yüklendi, ancak site algılamıyor mu? Sayfayı yenileyin!",
"notDetectingAction": "Sayfayı yenile",
"status": {
"disallowed": "Bu sayfa için uzantı etkinleştirilmemiş",
"disallowedAction": "Uzantıyı etkinleştir",
"failed": "Durum bilgisi alınamadı",
"loading": "Uzantıyı yüklemenizi bekliyoruz",
"outdated": "Uzantınız çok eski",
"success": "Uzantı sorunsuz çalışıyor!"
},
"submit": "Devam Et",
"title": "Hadi bir uzantıyla başlayalım"
},
"proxy": {
"back": "Geri Dön",
"explainer": "Ara sunucu yöntemiyle, yüksek kalitede yayınlara kolayca erişin.",
"input": {
"errorConnection": "Proxy'ye bağlanılamadı",
"errorInvalidUrl": "Geçerli bir URL değil",
"errorNotProxy": "Proxy bekleniyordu, web sitesine yönlendirildi",
"label": "Proxy URL",
"placeholder": "https://"
},
"link": "Proxy oluşturmayı öğrenin",
"submit": "Proxy'yi Gönder",
"title": "Hadi yeni bir proxy oluşturalım"
},
"start": {
"explainer": "En iyi akış deneyimi için kullanmak istediğiniz akış yöntemini seçmeniz gerekiyor.",
"options": {
"default": {
"text": "Yüksek kaliteli akış istemiyorum,<0 /> <1>varsayılan ayarı kullanın</1>"
},
"extension": {
"action": "Uzantıyı Yükle",
"description": "En iyi kaynaklara erişmek için tarayıcı uzantısını yükleyin.",
"quality": "En yüksek kalite",
"title": "Tarayıcı uzantısı"
},
"proxy": {
"action": "Proxy'yi Kur",
"description": "Sadece 5 dakikada proxy kurun ve harika kaynaklara erişin.",
"quality": "İyi kalite",
"title": "Özel Proxy"
}
},
"title": "movie-web ile sizi hazır hale getirelim"
}
},
"overlays": {
"close": "Kapat"
},
@@ -178,10 +253,11 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "HLS oynatma listesi bağlantısını kopyala",
"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.",
"downloadSubtitle": "Geçerli altyazıyı 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": "İndirmeler doğrudan sağlayıcıdan alınır. movie-web, indirmelerin nasıl sağlanacağı üzerinde kontrole sahip değildir.<br /><br />Lütfen bir HLS oynatma listesi indirdiğinizi unutmayın; <bold>ileri seviye bilginiz yoksa indirmeniz önerilmez. akış biçimleri</bold>. Farklı formatlar için farklı kaynakları deneyin.",
"onAndroid": {
"1": "Android'e indirmek için önce indir butonuna basın, sonra açılan yeni sayfada video üzerine <bold>basılı tutun</bold>, ardından <bold>Videoyu indir</bold> seçeneğini seçin.",
"shortTitle": "İndir / Android",
@@ -219,6 +295,7 @@
"title": "Kalite"
},
"settings": {
"audioItem": "Ses",
"downloadItem": "İndir",
"enableSubtitles": "Altyazıları Etkinleştir",
"experienceSection": "İzleme deneyimi",
@@ -245,8 +322,9 @@
"unknownOption": "Bilinmeyen"
},
"subtitles": {
"customChoice": "Altyazı dosyası yükle",
"customChoice": "Dosya sürükleyin veya yükleyin",
"customizeLabel": "Seçenekler",
"dropSubtitleFile": "Altyazı dosyasını buraya sürükleyin",
"offChoice": "Kapat",
"settings": {
"backlink": "Kişisel altyazılar",
@@ -262,6 +340,17 @@
"text": "API üstverisi yüklenemedi, lütfen internet bağlantınızı kontrol edin.",
"title": "API üstverisi yüklenemedi"
},
"dmca": {
"badge": "Kaldırıldı",
"text": "Üzgünüz, bu içerik telif hakkı ihlali veya yayından kaldırma bildirimi nedeniyle kullanılamıyor.",
"title": "İçerik kaldırıldı"
},
"extensionPermission": {
"badge": "İzin Gerekli",
"button": "Uzantıyı kullanın",
"text": "Tarayıcı uzantısını yüklemişsiniz, ancak uzantıyı kullanmaya başlamak için izninize ihtiyacımız var.",
"title": "Uzantıyı Kişiselleştir"
},
"failed": {
"badge": "Başarısız oldu",
"homeButton": "Ana sayfaya dön",
@@ -293,6 +382,13 @@
"title": "Video oynatılamadı!"
},
"scraping": {
"extensionFailure": {
"badge": "Eklenti devre dışı",
"enableExtension": "Eklentiyi etkinleştir",
"homeButton": "Eve git",
"text": "movie-web uzantısını kurdunuz. Kullanmaya başlamak için, uzantıyı bu site için etkinleştirmeniz gerekiyor.",
"title": "Lütfen eklentiyi etkinleştirin"
},
"items": {
"failure": "Hata oluştu",
"notFound": "Video mevcut değil",
@@ -393,6 +489,28 @@
"label": "Özel sunucu",
"urlLabel": "Özel sunucu URL'si"
},
"setup": {
"doSetup": "Başlayın",
"errorStatus": {
"description": "Kurulumda dikkat etmeniz gereken bir veya daha fazla öğe var gibi görünüyor.",
"title": "Dikkatinizi gerektiren bir şey var"
},
"itemError": "Kurulum sırasında bir hata oluşmuş olabilir. Sorunu çözmek için kurulum adımlarını tekrar izleyin.",
"items": {
"default": "Varsayılan ayarlar",
"extension": "Tarayıcı uzantısı",
"proxy": "Özel Proxy"
},
"redoSetup": "Kurulumu tekrar yapın",
"successStatus": {
"description": "Sevdiğiniz şeyleri izlemek için her şey hazır. Başlayın ve keyfini çıkarın.",
"title": "Tamam!"
},
"unsetStatus": {
"description": "Kurulum sürecini başlatmak için lütfen sağdaki düğmeye tıklayın.",
"title": "Kurulumu tamamlamadınız"
}
},
"title": "Bağlantılar",
"workers": {
"addButton": "Yeni işleyici ekle",
@@ -403,6 +521,14 @@
"urlPlaceholder": "https://"
}
},
"preferences": {
"language": "Uygulama dili",
"languageDescription": "Uygulamanın tamamı için seçili dil",
"thumbnail": "Küçük resimler oluştur",
"thumbnailDescription": "Çoğu video için ön izleme görseli bulunmaz. Bu ayarı etkinleştirerek anında oluşturulmasını sağlayabilirsiniz, ancak bu videonuzu yavaşlatabilir.",
"thumbnailLabel": "Küçük resim oluştur",
"title": "Ayarlar"
},
"reset": "Sıfırla",
"save": "Kaydet",
"sidebar": {
@@ -420,6 +546,7 @@
}
},
"subtitles": {
"backgroundBlurLabel": "Arka plan bulanıklığı",
"backgroundLabel": "Arka plan opaklığı",
"colorLabel": "Renk",
"previewQuote": "Korkmamalıyım. Korku aklın katilidir.",

View File

@@ -57,6 +57,8 @@
},
"host": "Bạn đang kết nối đến máy chủ <0>{{hostname}}</0> - vui lòng chắc chắn rằng bạn tin tưởng máy chủ này trước khi tạo tài khoản",
"no": "Quay lại",
"noHost": "Máy chủ chưa được cấu hình nên bạn không thể tạo tài khoản",
"noHostTitle": "Máy chủ chưa được cấu hình!",
"title": "Bạn có tin tưởng máy chủ này không?",
"yes": "Tôi tin tưởng máy chủ này"
},
@@ -118,7 +120,12 @@
"noResults": "Chúng tôi không thể tìm thấy gì!",
"placeholder": {
"default": "Bạn muốn xem gì?",
"extra": []
"extra": [
"Bạn muốn khám phá điều gì?",
"Danh sách theo dõi của bạn có gì?",
"Phim yêu thích của bạn là gì?",
"Bộ phim yêu thích của bạn là gì?"
]
},
"sectionTitle": "Kết quả tìm kiếm"
},
@@ -148,7 +155,8 @@
"types": {
"movie": "Phim",
"show": "Chương trình truyền hình"
}
},
"unreleased": "Chưa phát hành"
},
"navigation": {
"banner": {
@@ -178,25 +186,177 @@
},
"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."
"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.",
"explainerIos": "Rất tiếc, tiện ích mở rộng trình duyệt không được hỗ trợ trên iOS, Nhấn <bold>Quay lại</bold> để chọn tùy chọn khác.",
"extensionHelp": "Nếu bạn đã cài đặt tiện ích mở rộng nhưng không được phát hiện, <bold>mở tiện ích mở rộng thông qua menu tiện ích mở rộng của trình duyệt</bold> và làm theo các bước trên màn hình.",
"linkChrome": "Cài đặt tiện ích mở rộng của Chrome",
"linkFirefox": "Cài đặt tiện ích mở rộng Firefox",
"notDetecting": "Đã cài đặt trên Chrome nhưng trang web không phát hiện ra nó? Hãy thử tải lại trang!",
"notDetectingAction": "Tải lại trang",
"status": {
"disallowed": "Tiện ích mở rộng không được bật cho trang này",
"disallowedAction": "Bật tiện ích mở rộng",
"failed": "Không thể yêu cầu trạng thái",
"loading": "Đang chờ bạn cài đặt tiện ích mở rộng",
"outdated": "Phiên bản tiện ích mở rộng quá cũ",
"success": "Tiện ích mở rộng đang hoạt động như mong đợi!"
},
"submit": "Tiếp tục",
"title": "Hãy bắt đầu với một tiện ích mở rộng"
},
"proxy": {
"back": "Quay lại",
"explainer": "Với phương pháp proxy, bạn có thể nhận được luồng chất lượng tuyệt vời bằng cách tạo proxy tự phục vụ.",
"input": {
"errorConnection": "Không thể kết nối với proxy",
"errorInvalidUrl": "Không phải là một URL hợp lệ",
"errorNotProxy": "Dự kiến có proxy nhưng lại có trang web",
"label": "Proxy URL",
"placeholder": "https://"
},
"link": "Tìm hiểu cách tạo proxy",
"submit": "Gửi proxy",
"title": "Hãy tạo một proxy mới"
},
"start": {
"explainer": "Để có được luồng tốt nhất có thể, bạn sẽ cần chọn phương thức phát trực tuyến nào bạn muốn sử dụng.",
"options": {
"default": {
"text": "Tôi không muốn luồng chất lượng tốt,<0 /> <1>hãy sử dụng thiết lập mặc định</1>"
},
"extension": {
"action": "Cài đặt tiện ích mở rộng",
"description": "Cài đặt tiện ích mở rộng trình duyệt và có quyền truy cập vào các nguồn tốt nhất.",
"quality": "Chất lượng tốt nhất",
"title": "Tiện ích mở rộng trình duyệt"
},
"proxy": {
"action": "Thiết lập proxy",
"description": "Thiết lập proxy chỉ trong 5 phút và có quyền truy cập vào các nguồn tuyệt vời.",
"quality": "Chất lượng tốt",
"title": "Proxy tùy chỉnh"
}
},
"title": "Hãy cùng cài đặt cho bạn movie-web nào"
}
},
"overlays": {
"close": "Đóng"
},
"player": {
"back": {
"default": "Quay lại trang chính",
"short": "Quay lại"
},
"casting": {
"enabled": "Đang truyền tới thiết bị..."
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Sao chép liên kết danh sách phát HLS",
"disclaimer": "Tải xuống được lấy trực tiếp từ nhà cung cấp. movie-web không có quyền kiểm soát cách cung cấp nội dung tải xuống.",
"downloadSubtitle": "Tải xuống phụ đề hiện tại",
"downloadVideo": "Tải video",
"hlsDisclaimer": "Tải xuống được lấy trực tiếp từ nhà cung cấp. movie-web không có quyền kiểm soát cách cung cấp nội dung tải xuống.<br /><br />Xin lưu ý rằng bạn đang tải xuống danh sách phát HLS, <bold>không nên tải xuống nếu bạn không quen với các định dạng phát trực tuyến nâng cao</bold>. Hãy thử các nguồn khác nhau cho các định dạng khác nhau.",
"onAndroid": {
"1": "Để tải xuống trên Android, hãy nhấp vào nút tải xuống, sau đó trên trang mới, <bold>chạm và giữ</bold> trên video rồi chọn <bold>lưu4</bold>.",
"shortTitle": "Tải xuống / Android",
"title": "Tải xuống trên Android"
},
"onIos": {
"1": "Để tải xuống trên iOS, hãy nhấp vào nút tải xuống, sau đó trên trang mới, nhấp vào <bold><ios_share /></bold>, sau đó nhấp vào <bold>Lưu vào tệp <ios_files /></bold>.",
"shortTitle": "Tải xuống / iOS",
"title": "Đang tải xuống trên iOS"
},
"onPc": {
"1": "Trên PC, nhấp vào nút tải xuống, sau đó trên trang mới, nhấp chuột phải vào video và chọn <bold>Lưu video dưới dạng</bold>",
"shortTitle": "Tải xuống / PC",
"title": "Tải xuống trên PC"
},
"title": "Tải xuống"
},
"episodes": {
"button": "Tập",
"emptyState": "Không có tập nào trong mùa này, hãy kiểm tra lại sau!",
"episodeBadge": "E{{episode}}",
"loadingError": "Lỗi tải mùa",
"loadingList": "Đang tải...",
"loadingTitle": "Đang tải..."
"loadingTitle": "Đang tải...",
"unairedEpisodes": "Một hoặc nhiều tập trong phần này đã bị vô hiệu hóa vì chúng chưa được phát sóng."
},
"playback": {
"speedLabel": "Tốc độ phát lại",
"title": "Cài đặt phát lại"
},
"quality": {
"automaticLabel": "Chất lượng tự động",
"hint": "Bạn có thể thử <0>chuyển nguồn</0> để có các tùy chọn chất lượng khác nhau.",
"iosNoQuality": "Do các giới hạn do Apple xác định, lựa chọn chất lượng không có sẵn trên iOS cho nguồn này. Bạn có thể thử <0>chuyển sang nguồn khác</0> để có các tùy chọn chất lượng khác nhau.",
"title": "Chất lượng"
},
"settings": {
"audioItem": "Âm thanh",
"downloadItem": "Tải xuống",
"enableSubtitles": "Bật phụ đề",
"experienceSection": "Trải nghiệm xem",
"playbackItem": "Cài đặt phát lại",
"qualityItem": "Chất lượng",
"sourceItem": "Nguồn video",
"subtitleItem": "Cài đặt phụ đề",
"videoSection": "Cài đặt video"
},
"sources": {
"title": "Nguồn"
"failed": {
"text": "Đã xảy ra lỗi khi cố gắng tìm bất kỳ video nào, vui lòng thử nguồn khác.",
"title": "Không scrape được"
},
"noEmbeds": {
"text": "Chúng tôi không thể tìm thấy bất kỳ nội dung nhúng nào, vui lòng thử nguồn khác.",
"title": "Không tìm thấy nội dung nhúng nào"
},
"noStream": {
"text": "Nguồn này không có luồng cho phim hoặc chương trình này.",
"title": "Không có nguồn trực tiếp"
},
"title": "Nguồn",
"unknownOption": "không xác định"
},
"subtitles": {
"customChoice": "Thả hoặc tải lên tập tin",
"customizeLabel": "Tùy chỉnh",
"dropSubtitleFile": "Thả file phụ đề vào đây",
"offChoice": "Tắt",
"settings": {
"backlink": "Phụ đề tùy chỉnh",
"delay": "Độ trễ phụ đề",
"fixCapitals": "Sửa lỗi viết hoa"
},
"title": "Phụ đề",
"unknownLanguage": "không xác định"
}
},
"metadata": {
"api": {
"text": "Không thể tải API metadata, vui lòng kiểm tra kết nối Internet của bạn.",
"title": "Không tải được API metadata"
},
"dmca": {
"badge": "Loại bỏ",
"text": "Phương tiện này không còn khả dụng do có thông báo gỡ xuống hoặc khiếu nại về bản quyền.",
"title": "Phương tiện đã bị xóa"
},
"extensionPermission": {
"badge": "Thiếu quyền",
"button": "Sử dụng tiện ích mở rộng",
"text": "Bạn có tiện ích mở rộng của trình duyệt nhưng chúng tôi cần sự cho phép của bạn để bắt đầu sử dụng tiện ích mở rộng này.",
"title": "Định cấu hình tiện ích mở rộng"
},
"failed": {
"badge": "Thất bại",
"homeButton": "Về trang chủ",
"text": "Không thể tải metadata của phương tiện từ TMDB.",
"title": "Không tải được metadata"
},
"notFound": {
"badge": "Không tìm thấy",
"homeButton": "Quay lại trang chính",
@@ -204,8 +364,199 @@
"title": "Không thể tìm thấy nội dung."
}
},
"nextEpisode": {
"cancel": "Hủy bỏ",
"next": "Tập tiếp theo",
"nextSeason": "Mùa tới"
},
"playbackError": {
"badge": "Lỗi phát lại",
"errors": {
"errorAborted": "Việc tìm nạp phương tiện đã bị hủy bỏ theo yêu cầu của người dùng.",
"errorDecode": "Mặc dù trước đó đã được xác định là có thể sử dụng được nhưng đã xảy ra lỗi khi cố gắng giải mã tài nguyên phương tiện, dẫn đến lỗi.",
"errorGenericMedia": "Đã xảy ra lỗi phương tiện không xác định.",
"errorNetwork": "Đã xảy ra một số loại lỗi mạng khiến phương tiện không thể được tìm nạp thành công, mặc dù trước đó đã có sẵn.",
"errorNotSupported": "Đối tượng phương tiện hoặc nhà cung cấp phương tiện không được hỗ trợ."
},
"homeButton": "Về trang chủ",
"text": "Đã xảy ra lỗi khi phát phương tiện. Vui lòng thử lại.",
"title": "Rất tiếc, đã hỏng!"
},
"scraping": {
"extensionFailure": {
"badge": "Đã tắt tiện ích mở rộng",
"enableExtension": "Bật tiện ích mở rộng",
"homeButton": "Về trang chủ",
"text": "Bạn đã cài đặt tiện ích mở rộng web phim.",
"title": "Vui lòng kích hoạt tiện ích mở rộng"
},
"items": {
"failure": "Xảy ra lỗi",
"notFound": "Không có video",
"pending": "Đang kiểm tra video..."
},
"notFound": {
"badge": "Không tìm thấy",
"detailsButton": "Hiển thị chi tiết",
"homeButton": "Về trang chủ",
"text": "Chúng tôi đã tìm kiếm thông qua các nhà cung cấp của chúng tôi và không thể tìm thấy phương tiện bạn đang tìm kiếm! Chúng tôi không lưu trữ phương tiện truyền thông và không kiểm soát những gì có sẵn. Vui lòng nhấp vào 'Hiển thị chi tiết' bên dưới để biết thêm chi tiết.",
"title": "Chúng tôi không thể tìm thấy cái đó"
}
},
"time": {
"regular": "{{timeWatched}} / {{duration}}",
"remaining": "{{timeLeft}} còn • Kết thúc lúc {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "Vui lòng xác minh rằng bạn là con người bằng cách hoàn thành Captcha ở bên phải. Điều này là để giữ an toàn cho web phim!",
"error": "Không thể xác minh nhân tính của bạn. Vui lòng thử lại.",
"title": "Chúng tôi cần xác minh rằng bạn là con người.",
"verifyingHumanity": "Đang xác minh nhân tính của bạn..."
}
},
"screens": {
"dmca": {
"text": "Chào mừng bạn đến với trang liên hệ DMCA của movie-web! Chúng tôi tôn trọng quyền sở hữu trí tuệ và muốn giải quyết mọi lo ngại về bản quyền một cách nhanh chóng. Nếu bạn cho rằng tác phẩm có bản quyền của mình đã bị sử dụng không đúng cách trên nền tảng của chúng tôi, vui lòng gửi thông báo DMCA chi tiết tới email bên dưới. Vui lòng bao gồm mô tả về tài liệu có bản quyền, chi tiết liên hệ của bạn và tuyên bố về niềm tin thiện chí. Chúng tôi cam kết giải quyết những vấn đề này một cách nhanh chóng và đánh giá cao sự hợp tác của bạn trong việc giữ cho web phim là một nơi tôn trọng tính sáng tạo và bản quyền.",
"title": "DMCA"
},
"loadingApp": "Đang tải ứng dụng",
"loadingUser": "Đang tải hồ sơ của bạn",
"loadingUserError": {
"logout": "Đăng xuất",
"reset": "Đặt lại máy chủ tùy chỉnh",
"text": "Không tải được hồ sơ của bạn",
"textWithReset": "Không tải được hồ sơ của bạn từ máy chủ tùy chỉnh, bạn có muốn đặt lại về máy chủ mặc định không?"
},
"migration": {
"failed": "Không thể di chuyển dữ liệu của bạn.",
"inProgress": "Vui lòng chờ, chúng tôi đang di chuyển dữ liệu của bạn. Việc này sẽ không mất nhiều thời gian."
}
},
"settings": {
"account": {
"accountDetails": {
"deviceNameLabel": "Tên thiết bị",
"deviceNamePlaceholder": "Điện thoại cá nhân",
"editProfile": "Biên tập",
"logoutButton": "Đăng xuất"
},
"actions": {
"delete": {
"button": "Xóa tài khoản",
"confirmButton": "Xóa tài khoản",
"confirmDescription": "Bạn có chắc rằng bạn muốn xóa tài khoản của bạn? Tất cả dữ liệu của bạn sẽ bị mất!",
"confirmTitle": "Bạn có chắc không?",
"text": "Hành động này là không thể đảo ngược. Tất cả dữ liệu sẽ bị xóa và không thể phục hồi được gì.",
"title": "Xóa tài khoản"
},
"title": "Hành động"
},
"devices": {
"deviceNameLabel": "Tên thiết bị",
"failed": "Không tải được phiên",
"removeDevice": "Di dời",
"title": "Thiết bị"
},
"profile": {
"finish": "Hoàn tất chỉnh sửa",
"firstColor": "Màu hồ sơ chính",
"secondColor": "Màu hồ sơ phụ",
"title": "Chỉnh sửa ảnh đại diện",
"userIcon": "Biểu tượng người dùng"
},
"register": {
"cta": "Bắt đầu",
"text": "Chia sẻ tiến trình xem của bạn giữa các thiết bị và giữ cho chúng được đồng bộ hóa.",
"title": "Đồng bộ hóa với đám mây"
},
"title": "Tài khoản"
},
"appearance": {
"activeTheme": "Áp dụng",
"themes": {
"blue": "Xanh da trời",
"default": "Mặc định",
"gray": "Xám",
"red": "Đỏ",
"teal": "Xanh mòng két"
},
"title": "Giao diện"
},
"connections": {
"server": {
"description": "Nếu bạn muốn kết nối với một chương trình phụ trợ tùy chỉnh để lưu trữ dữ liệu của mình, hãy bật tính năng này và cung cấp URL. <0>Hướng dẫn.</0>",
"label": "Máy chủ tùy chỉnh",
"urlLabel": "Máy chủ URL tùy chỉnh"
},
"setup": {
"doSetup": "Thực hiện thiết lập",
"errorStatus": {
"description": "Có vẻ như một hoặc nhiều mục trong thiết lập này cần bạn chú ý.",
"title": "Có điều gì đó cần bạn chú ý"
},
"itemError": "Hãy thực hiện lại quá trình thiết lập để khắc phục sự cố. Hãy thực hiện lại quá trình thiết lập để khắc phục sự cố.",
"items": {
"default": "Thiết lập mặc định",
"extension": "Tiện ích mở rộng",
"proxy": "Proxy tùy chỉnh"
},
"redoSetup": "Làm lại thiết lập",
"successStatus": {
"description": "Tất cả mọi thứ đã sẵn sàng để bạn bắt đầu xem phương tiện truyền thông yêu thích của mình.",
"title": "Mọi thứ đã được thiết lập!"
},
"unsetStatus": {
"description": "Vui lòng nhấp vào nút bên phải để bắt đầu quá trình thiết lập.",
"title": "Bạn chưa hoàn tất quá trình thiết lập"
}
},
"title": "Kết nối",
"workers": {
"addButton": "Thêm công nhân mới",
"description": "Để làm cho ứng dụng hoạt động, tất cả lưu lượng truy cập được chuyển qua proxy. Kích hoạt tính năng này nếu bạn muốn mang theo công nhân của mình. <0>Hướng dẫn.</0>",
"emptyState": "Chưa có công nhân, thêm một công nhân bên dưới",
"label": "Sử dụng nhân viên proxy tùy chỉnh",
"urlLabel": "URL công nhân",
"urlPlaceholder": "https://"
}
},
"preferences": {
"autoplay": "Tự chạy",
"autoplayDescription": "Tự động phát tập tiếp theo trong loạt phim sau khi xem hết. Người dùng có thể bật bằng tiện ích mở rộng trình duyệt, proxy tùy chỉnh hoặc bằng cài đặt mặc định nếu được máy chủ cho phép.",
"autoplayLabel": "Tự chạy",
"language": "Ngôn ngữ ứng dụng",
"languageDescription": "Ngôn ngữ áp dụng cho toàn bộ ứng dụng.",
"thumbnail": "Tạo hình thu nhỏ",
"thumbnailDescription": "Hầu hết các video không có hình thu nhỏ. Bạn có thể bật cài đặt này để tạo chúng nhanh chóng nhưng chúng có thể làm cho video của bạn chậm hơn.",
"thumbnailLabel": "Tạo hình thu nhỏ",
"title": "Tùy chỉnh"
},
"reset": "Cài lại",
"save": "Lưu",
"sidebar": {
"info": {
"appVersion": "Phiên bản ứng dụng",
"backendUrl": "URL phụ trợ",
"backendVersion": "Phiên bản phụ trợ",
"hostname": "Tên máy chủ",
"insecure": "không an toàn",
"notLoggedIn": "Bạn không đăng nhập",
"secure": "Chắc chắn",
"title": "Thông tin ứng dụng",
"unknownVersion": "không xác định",
"userId": "ID người dùng"
}
},
"subtitles": {
"backgroundBlurLabel": "Làm mờ nền",
"backgroundLabel": "Độ mờ nền",
"colorLabel": "Màu sắc",
"previewQuote": "Tôi không được sợ hãi. Sợ hãi thường giết chết tư duy.",
"textSizeLabel": "Cỡ chữ",
"title": "Phụ đề"
},
"unsaved": "Bạn có các thay đổi chưa lưu"
}
}

View File

@@ -1,6 +1,6 @@
{
"about": {
"description": "movie-web 是一款在互聯網上搜尋流媒體的網路應用程式。團隊致力於讓使用者以最簡約的方式消費內容。",
"description": "movie-web 是一款在互聯網上搜尋流媒體的網路應用程式。團隊致力於讓使用者以最簡約的方式觀看內容。",
"faqTitle": "常見問題",
"q1": {
"body": "movie-web 不託管任何內容。您點選觀看內容時,系統均從互聯網搜尋(在加載提示頁和“視頻源”選項卡中,您可以看到正在使用的源)。媒體從未在 movie-web 中上傳,所有內容均通過搜索機制而得。",
@@ -12,7 +12,7 @@
},
"q3": {
"body": "我們的搜尋結果由電影資料庫TMDB驅動無論視訊來源是否有對應內容都會顯示結果。",
"title": "搜尋結果中已顯示了視劇或其他節目,為何我無法播放?"
"title": "搜尋結果中已顯示了視劇或其他節目,為何我無法播放?"
},
"title": "關於 movie-web"
},
@@ -22,18 +22,18 @@
},
"auth": {
"createAccount": "還沒有帳戶? <0>建立一個</0>",
"deviceNameLabel": "設備名稱",
"deviceNameLabel": "裝置名稱",
"deviceNamePlaceholder": "我的手機",
"generate": {
"description": "您的密碼短語相當於使用者名稱與密碼。由於您需要輸入它來登入帳戶,請確保將其存放到安全位置",
"next": "我已儲存密碼短語",
"next": "我已儲存密碼短語",
"passphraseFrameLabel": "密碼短語",
"title": "您的密碼短語"
},
"hasAccount": "已經擁有帳戶? <0>點此登入。 </0>",
"login": {
"description": "請輸入密碼短語以登入您的帳戶",
"deviceLengthError": "請輸入設備名稱",
"deviceLengthError": "請輸入裝置名稱",
"passphraseLabel": "12 字密碼短語",
"passphrasePlaceholder": "密碼短語",
"submit": "登入",
@@ -57,6 +57,8 @@
},
"host": "您正在連線到 <0>{{hostname}}</0> - 在建立帳戶之前,請確保您信任它",
"no": "返回",
"noHost": "因為沒有配置伺服器,所以你不能夠創建帳戶",
"noHostTitle": "没有配置伺服器!",
"title": "您是否信任這個伺服器?",
"yes": "我信任這個伺服器"
},
@@ -71,7 +73,7 @@
}
},
"errors": {
"badge": "它已損壞",
"badge": "它壞",
"details": "錯誤詳情",
"reloadPage": "重新加載頁面",
"showError": "顯示錯誤詳情",
@@ -87,7 +89,7 @@
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "使用這個開源流媒體應用程觀看您最喜歡的節目和電影。"
"tagline": "使用這個開源流媒體應用程觀看您最喜歡的節目和電影。"
},
"global": {
"name": "movie-web",
@@ -118,22 +120,33 @@
"noResults": "我们找不到任何结果!",
"placeholder": {
"default": "您想看什麼?",
"extra": []
"extra": [
"你想探索什麼?",
"你的觀看清單有甚麼電影/電視劇?",
"你最喜愛的電影是甚麽?",
"你最喜愛的電視劇是甚麽?"
]
},
"sectionTitle": "搜索結果"
},
"titles": {
"day": {
"default": "您今天下午想看什麼?",
"extra": ["想要來場冒險嗎?《侏羅紀公園》可能是完美選擇。"]
"extra": [
"想要來場冒險嗎?《侏羅紀公園》可能是完美選擇。"
]
},
"morning": {
"default": "您今天早上想看什麼?",
"extra": ["我聽說《情留半天》不錯"]
"extra": [
"我聽說《情留半天》不錯"
]
},
"night": {
"default": "您今晚想看什麼?",
"extra": ["疲倦了嗎?我聽說《驅魔人》不錯。"]
"extra": [
"你疲倦嗎?我聽說《驅魔人》不錯。"
]
}
}
},
@@ -142,7 +155,8 @@
"types": {
"movie": "電影",
"show": "節目"
}
},
"unreleased": "尚未上映"
},
"navigation": {
"banner": {
@@ -150,7 +164,7 @@
},
"menu": {
"about": "關於我們",
"donation": "捐",
"donation": "捐",
"logout": "登出",
"register": "同步到雲端",
"settings": "設定",
@@ -167,32 +181,32 @@
"defaultConfirm": {
"cancel": "取消",
"confirm": "使用預設設置",
"description": "默認設置沒有最好的直播,並且可能慢得令人難以忍受。",
"description": "默認設置沒有最好的串流,並且可能慢得令人難以忍受。",
"title": "您確定嗎?"
},
"extension": {
"back": "返回",
"explainer": "使用瀏覽器擴展程式,您可以獲得我們提供的最佳直播。只需簡單的安裝。",
"explainerIos": "不幸的是iOS 不支援瀏覽器擴展程式,按 <bold>返回 </bold>選擇其他選項。",
"extensionHelp": "如果您已安裝該擴展程式,但未檢測到該擴展程式 <bold>請通過瀏覽器的擴展程式功能表打開該擴展 程式 </bold>,然後按照螢幕上的步驟操作。",
"linkChrome": "安裝 Chrome 擴展程式",
"linkFirefox": "安裝 Firefox 擴展程式",
"explainer": "使用瀏覽器擴充功能,您可以獲得我們提供的最佳直播。只需簡單的安裝。",
"explainerIos": "不幸的是iOS 不支援瀏覽器擴充功能,按 <bold>返回 </bold>選擇其他選項。",
"extensionHelp": "如果您已安裝該擴充功能,但未檢測到該擴充功能 <bold>請通過瀏覽器的擴充功能功能表打開該擴展 程式 </bold>,然後按照螢幕上的步驟操作。",
"linkChrome": "安裝 Chrome 擴充功能",
"linkFirefox": "安裝 Firefox 擴充功能",
"notDetecting": "安裝在 Chrome 上,但網站沒有檢測到它?嘗試重新載入頁面!",
"notDetectingAction": "重新加載頁面",
"status": {
"disallowed": "未為此頁面啟用擴展程式",
"disallowedAction": "啟用擴展程式",
"disallowed": "未為此頁面啟用瀏覽器擴充功能",
"disallowedAction": "啟用瀏覽器擴充功能",
"failed": "無法請求狀態",
"loading": "等待您安裝擴展程式",
"outdated": "擴展程式版本太舊",
"success": "擴展程式正在按預期工作!"
"loading": "等待您安裝瀏覽器擴充功能",
"outdated": "瀏覽器擴充功能版本太舊",
"success": "瀏覽器擴充功能正在正常運作!"
},
"submit": "繼續",
"title": "讓我們從擴展程式開始"
"title": "讓我們從瀏覽器擴充功能開始"
},
"proxy": {
"back": "返回",
"explainer": "使用代理伺服器,您可以通過製作自定代理伺服器來獲得高品質的直播。",
"explainer": "使用代理伺服器,您可以通過製作自定代理伺服器來獲得高品質的串流。",
"input": {
"errorConnection": "無法連接到代理伺服器",
"errorInvalidUrl": "URL 無效",
@@ -205,20 +219,20 @@
"title": "讓我們創建一個新的代理伺服器"
},
"start": {
"explainer": "為了獲得最好的流媒體,您需要選擇您想使用的流媒體方法。",
"explainer": "為了獲得最好的流媒體,您需要選擇您想使用的流方法。",
"options": {
"default": {
"text": "我不想要高品質的流,<0 /> <1> 使用預設設置</1>"
"text": "我不想要高品質的流,<0 /> <1> 使用預設設置</1>"
},
"extension": {
"action": "安裝擴展程式",
"description": "安裝瀏覽器擴展程式並訪問最佳資源。",
"action": "安裝瀏覽器擴充功能",
"description": "安裝瀏覽器擴充功能來使用最佳資源。",
"quality": "最好的品質",
"title": "瀏覽器擴展程式"
"title": "瀏覽器擴充功能"
},
"proxy": {
"action": "設置代理伺服器",
"description": "只需 5 分鐘即可設置代理伺服器並訪問優質源。",
"description": "只需 5 分鐘即可設置代理伺服器並訪問優質源。",
"quality": "好品質",
"title": "自訂代理伺服器"
}
@@ -235,11 +249,12 @@
"short": "後退"
},
"casting": {
"enabled": "正在投放到設備…"
"enabled": "正在投放到裝置…"
},
"menus": {
"downloads": {
"disclaimer": "下載直接從供應商處獲取。movie-web 無法控制下載的提供方式。",
"copyHlsPlaylist": "複製 HLS 播放清單鏈接",
"disclaimer": "視頻直接從供應商處獲取。movie-web 無法控制下載的提供方式。",
"downloadSubtitle": "下載當前字幕",
"downloadVideo": "下載視頻",
"hlsDisclaimer": "下載直接從供應商處獲取。movie-web 無法控制下載的提供方式。<br /><br /> 請注意,您正在下載 HLS 播放清單, <bold>如果您不熟悉高級流媒體格式,則不建議下載 </bold> 。嘗試使用不同格式的不同來源。",
@@ -261,10 +276,10 @@
"title": "下載"
},
"episodes": {
"button": "集",
"emptyState": "該季暫無集,請稍後再來!",
"button": "集",
"emptyState": "該季暫無集,請稍後再來!",
"episodeBadge": "E{{episode}}",
"loadingError": "加載集時出錯",
"loadingError": "加載集時出錯",
"loadingList": "載入中...",
"loadingTitle": "載入中...",
"unairedEpisodes": "本季中的一集或多集已因尚未播出而被禁用。"
@@ -276,10 +291,11 @@
"quality": {
"automaticLabel": "自動品質",
"hint": "您可以嘗試<0>切換源</0>以獲得不同的質量選項。",
"iosNoQuality": "由於 Apple 定義的限制,此來源的品質選擇在 iOS 上不可用。您可以嘗試<0>切換到另一個來源</0>以獲得不同的質量選項。",
"iosNoQuality": "由於 Apple 的限制,此來源的品質選擇在 iOS 上不可用。您可以嘗試<0>切換到另一個來源</0>以獲得不同的質量選項。",
"title": "品質"
},
"settings": {
"audioItem": "音頻",
"downloadItem": "下載",
"enableSubtitles": "啟用字幕",
"experienceSection": "觀看體驗",
@@ -306,8 +322,9 @@
"unknownOption": "未知"
},
"subtitles": {
"customChoice": "從檔案中選擇字幕",
"customChoice": "把字幕檔案拖入或上傳",
"customizeLabel": "自訂",
"dropSubtitleFile": "將字幕檔案拖曳到這裡",
"offChoice": "關閉",
"settings": {
"backlink": "自訂字幕",
@@ -330,9 +347,9 @@
},
"extensionPermission": {
"badge": "缺少權限",
"button": "使用擴展程式",
"text": "您已安裝瀏覽器擴展,但我們需要您的許可才能啟用它。",
"title": "配置擴展程式"
"button": "使用瀏覽器擴充功能",
"text": "您已安裝瀏覽器擴展功能,但我們需要您的許可才能啟用它。",
"title": "配置瀏覽器擴充功能"
},
"failed": {
"badge": "失敗",
@@ -349,7 +366,8 @@
},
"nextEpisode": {
"cancel": "取消",
"next": "下一集"
"next": "下一集",
"nextSeason": "下一季"
},
"playbackError": {
"badge": "播放錯誤",
@@ -365,10 +383,17 @@
"title": "無法播放視頻!"
},
"scraping": {
"extensionFailure": {
"badge": "擴充功能已被禁用",
"enableExtension": "啟用擴充功能",
"homeButton": "回到首頁",
"text": "您已安裝該擴充功能, 你要啟用擴充程式去用它。",
"title": "請啟用擴充功能"
},
"items": {
"failure": "發生錯誤",
"notFound": "沒有視頻",
"pending": "檢查影片..."
"pending": "尋找影片..."
},
"notFound": {
"badge": "未找到",
@@ -386,9 +411,9 @@
},
"turnstile": {
"description": "請通過右側的驗證碼來確認您是人類。這是為了保護 movie-web 的安全!",
"error": "無法驗證您的人類身份。請再試一次。",
"error": "無法驗證您是一個人類。請再試一次。",
"title": "我們需要驗證您是否為人類。",
"verifyingHumanity": "正在驗證您的人類身份..."
"verifyingHumanity": "正在驗證您是不是一個人類..."
}
},
"screens": {
@@ -430,7 +455,7 @@
},
"devices": {
"deviceNameLabel": "設備名稱",
"failed": "無法載入階段",
"failed": "無法載入",
"removeDevice": "刪除",
"title": "設備"
},
@@ -498,12 +523,15 @@
}
},
"preferences": {
"autoplay": "自動播放",
"autoplayDescription": "當你看完一集後,下一集會自動播放。使用瀏覽器擴充功能或代理伺服器的用戶可以使用這功能。",
"autoplayLabel": "自動播放",
"language": "應用程式語言",
"languageDescription": "語言已應用於整個應用程式。",
"thumbnail": "生成縮圖",
"thumbnailDescription": "大多數時候,視頻沒有縮圖。您可以啟用此設置以即時生成它們,但它們會使您的視頻變慢。",
"thumbnailLabel": "生成縮圖",
"title": "偏好"
"title": "偏好設定"
},
"reset": "重置",
"save": "保存",
@@ -516,12 +544,13 @@
"insecure": "不安全",
"notLoggedIn": "您尚未登錄",
"secure": "安全",
"title": "應用資訊",
"title": "應用程式的資訊",
"unknownVersion": "未知",
"userId": "使用者ID"
}
},
"subtitles": {
"backgroundBlurLabel": "背景模糊",
"backgroundLabel": "背景不透明度",
"colorLabel": "顏色",
"previewQuote": "我絕不能害怕。 恐懼會扼殺思維能力。",

View File

@@ -1,6 +1,6 @@
{
"about": {
"description": "movie-web 是一款在互联网上搜寻流媒体的网络应用程序。团队致力于让用户采取最简的方式消费内容。",
"description": "movie-web 是一款在互联网上搜寻流媒体的网络应用程序。团队致力于让用户采取最简的方式观览内容。",
"faqTitle": "常见问题",
"q1": {
"body": "movie-web 不托管任何内容。您点选观看内容时,系统均从互联网搜寻(在加载提示页和“视频源”选项卡中,您可以看到正在使用的源)。媒体从未在 movie-web 中上传,所有内容均通过搜索机制而得。",
@@ -155,7 +155,8 @@
"types": {
"movie": "电影",
"show": "电视节目"
}
},
"unreleased": "未发布"
},
"navigation": {
"banner": {
@@ -294,6 +295,7 @@
"title": "质量"
},
"settings": {
"audioItem": "音频",
"downloadItem": "下载",
"enableSubtitles": "启用字幕",
"experienceSection": "观看体验",
@@ -320,8 +322,9 @@
"unknownOption": "未知"
},
"subtitles": {
"customChoice": "从文件选取字幕",
"customChoice": "拖入或上传文件",
"customizeLabel": "自定义",
"dropSubtitleFile": "将字幕拖入这里",
"offChoice": "关闭",
"settings": {
"backlink": "自定义字幕",
@@ -363,7 +366,8 @@
},
"nextEpisode": {
"cancel": "取消",
"next": "下一集"
"next": "下一集",
"nextSeason": "下一季"
},
"playbackError": {
"badge": "播放错误",
@@ -379,6 +383,13 @@
"title": "视频播放失败!"
},
"scraping": {
"extensionFailure": {
"badge": "扩展程序已禁用",
"enableExtension": "启用扩展程序",
"homeButton": "返回首页",
"text": "您已经安装 movie-web 扩展程序。要开始使用,您需要为此站点启用扩展。",
"title": "请启用扩展程序"
},
"items": {
"failure": "发生了错误",
"notFound": "没有视频",
@@ -512,6 +523,9 @@
}
},
"preferences": {
"autoplay": "自动播放",
"autoplayDescription": "每集播放结束后自动启播下一集。使用浏览器扩展程序或自定义后端代理服务的用户可以手动启用此功能。若使用默认设置,则应在服务器允许的情况下启用。",
"autoplayLabel": "自动播放",
"language": "应用程序语言",
"languageDescription": "作用于整个应用程序的语言。",
"thumbnail": "生成缩略图",

View File

@@ -9,6 +9,7 @@ import { ExtensionMakeRequestResponse } from "@/backend/extension/plasmo";
export const RULE_IDS = {
PREPARE_STREAM: 1,
SET_DOMAINS_HLS: 2,
SET_DOMAINS_HLS_AUDIO: 3,
};
// for some reason, about 500 ms is needed after

View File

@@ -43,7 +43,7 @@ export function formatTMDBMetaResult(
title: movie.title,
object_type: mediaTypeToTMDB(type),
poster: getMediaPoster(movie.poster_path) ?? undefined,
original_release_year: new Date(movie.release_date).getFullYear(),
original_release_date: new Date(movie.release_date),
};
}
if (type === MWMediaType.SERIES) {
@@ -58,7 +58,7 @@ export function formatTMDBMetaResult(
title: v.name,
})),
poster: getMediaPoster(show.poster_path) ?? undefined,
original_release_year: new Date(show.first_air_date).getFullYear(),
original_release_date: new Date(show.first_air_date),
};
}

View File

@@ -66,7 +66,7 @@ export function formatTMDBMeta(
return {
title: media.title,
id: media.id.toString(),
year: media.original_release_year?.toString(),
year: media.original_release_date?.getFullYear()?.toString(),
poster: media.poster,
type,
seasons: seasons as any,
@@ -94,7 +94,8 @@ export function formatTMDBMetaToMediaItem(media: TMDBMediaResult): MediaItem {
return {
title: media.title,
id: media.id.toString(),
year: media.original_release_year ?? 0,
year: media.original_release_date?.getFullYear() ?? 0,
release_date: media.original_release_date,
poster: media.poster,
type,
};
@@ -142,26 +143,43 @@ export function decodeTMDBId(
};
}
const baseURL = "https://api.themoviedb.org/3";
const tmdbBaseUrl1 = "https://api.themoviedb.org/3";
const tmdbBaseUrl2 = "https://api.tmdb.org/3";
const apiKey = conf().TMDB_READ_API_KEY;
const headers = {
const tmdbHeaders = {
accept: "application/json",
Authorization: `Bearer ${apiKey}`,
};
function abortOnTimeout(timeout: number): AbortSignal {
const controller = new AbortController();
setTimeout(() => controller.abort(), timeout);
return controller.signal;
}
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), {
headers,
baseURL,
params: {
...params,
},
});
return res;
try {
return await mwFetch<T>(encodeURI(url), {
headers: tmdbHeaders,
baseURL: tmdbBaseUrl1,
params: {
...params,
},
signal: abortOnTimeout(5000),
});
} catch (err) {
return mwFetch<T>(encodeURI(url), {
headers: tmdbHeaders,
baseURL: tmdbBaseUrl2,
params: {
...params,
},
signal: abortOnTimeout(30000),
});
}
}
export async function multiSearch(
@@ -260,7 +278,7 @@ export function formatTMDBSearchResult(
title: show.name,
poster: getMediaPoster(show.poster_path),
id: show.id,
original_release_year: new Date(show.first_air_date).getFullYear(),
original_release_date: new Date(show.first_air_date),
object_type: mediatype,
};
}
@@ -271,7 +289,7 @@ export function formatTMDBSearchResult(
title: movie.title,
poster: getMediaPoster(movie.poster_path),
id: movie.id,
original_release_year: new Date(movie.release_date).getFullYear(),
original_release_date: new Date(movie.release_date),
object_type: mediatype,
};
}

View File

@@ -20,7 +20,7 @@ export type TMDBMediaResult = {
title: string;
poster?: string;
id: number;
original_release_year?: number;
original_release_date?: Date;
object_type: TMDBContentTypes;
seasons?: TMDBSeasonShort[];
};

View File

@@ -0,0 +1,51 @@
import { useEffect, useState } from "react";
import type { DragEvent, ReactNode } from "react";
interface FileDropHandlerProps {
children: ReactNode;
className: string;
onDrop: (event: DragEvent<HTMLDivElement>) => void;
onDraggingChange: (isDragging: boolean) => void;
}
export function FileDropHandler(props: FileDropHandlerProps) {
const [dragging, setDragging] = useState(false);
const handleDragEnter = (event: DragEvent<HTMLDivElement>) => {
event.preventDefault();
setDragging(true);
};
const handleDragLeave = (event: DragEvent<HTMLDivElement>) => {
if (!event.currentTarget.contains(event.relatedTarget as Node)) {
setDragging(false);
}
};
const handleDragOver = (event: DragEvent<HTMLDivElement>) => {
event.preventDefault();
};
const handleDrop = (event: DragEvent<HTMLDivElement>) => {
event.preventDefault();
setDragging(false);
props.onDrop(event);
};
useEffect(() => {
props.onDraggingChange(dragging);
}, [dragging, props]);
return (
<div
onDragEnter={handleDragEnter}
onDragLeave={handleDragLeave}
onDragOver={handleDragOver}
onDrop={handleDrop}
className={props.className}
>
{props.children}
</div>
);
}

View File

@@ -64,6 +64,7 @@ export enum Icons {
DONATION = "donation",
CIRCLE_QUESTION = "circle_question",
BRUSH = "brush",
UPLOAD = "upload",
}
export interface IconProps {
@@ -134,6 +135,7 @@ const iconList: Record<Icons, string> = {
donation: `<svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 576 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path opacity="1" fill="currentColor" d="M163.9 136.9c-29.4-29.8-29.4-78.2 0-108s77-29.8 106.4 0l17.7 18 17.7-18c29.4-29.8 77-29.8 106.4 0s29.4 78.2 0 108L310.5 240.1c-6.2 6.3-14.3 9.4-22.5 9.4s-16.3-3.1-22.5-9.4L163.9 136.9zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384l0 0-.9 0c.3 0 .6 0 .9 0z"/></svg>`,
circle_question: `<svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path opacity="1" fill="currentColor" d="M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm169.8-90.7c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/></svg>`,
brush: `<svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path d="M162.4 6c-1.5-3.6-5-6-8.9-6h-19c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6H48C21.5 0 0 21.5 0 48V224v22.4V256H9.6 374.4 384v-9.6V224 48c0-26.5-21.5-48-48-48H230.5c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288v32c0 35.3 28.7 64 64 64h64v64c0 35.3 28.7 64 64 64s64-28.7 64-64V384h64c35.3 0 64-28.7 64-64V288H0zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z" fill="currentColor"/></svg>`,
upload: `<svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 384 512"><!--! Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path opacity="1" fill="currentColor" d="M320 480H64c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32H192V144c0 26.5 21.5 48 48 48H352V448c0 17.7-14.3 32-32 32zM240 160c-8.8 0-16-7.2-16-16V32.5c2.8 .7 5.4 2.1 7.4 4.2L347.3 152.6c2.1 2.1 3.5 4.6 4.2 7.4H240zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V163.9c0-12.7-5.1-24.9-14.1-33.9L254.1 14.1c-9-9-21.2-14.1-33.9-14.1H64zM208 278.6l52.7 52.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-80-80c-6.2-6.2-16.4-6.2-22.6 0l-80 80c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L176 278.6V400c0 8.8 7.2 16 16 16s16-7.2 16-16V278.6z"/></svg>`,
};
function ChromeCastButton() {

View File

@@ -25,7 +25,7 @@ export function EditButton(props: EditButtonProps) {
>
<span ref={parent}>
{props.editing ? (
<span className="mx-4 whitespace-nowrap">
<span className="mx-2 sm:mx-4 whitespace-nowrap">
{t("home.mediaList.stopEditing")}
</span>
) : (

View File

@@ -1,4 +1,5 @@
import classNames from "classnames";
import { useCallback } from "react";
import { useTranslation } from "react-i18next";
import { Link } from "react-router-dom";
@@ -24,6 +25,20 @@ export interface MediaCardProps {
onClose?: () => void;
}
function checkReleased(media: MediaItem): boolean {
const isReleasedYear = Boolean(
media.year && media.year <= new Date().getFullYear(),
);
const isReleasedDate = Boolean(
media.release_date && media.release_date <= new Date(),
);
// If the media has a release date, use that, otherwise use the year
const isReleased = media.release_date ? isReleasedDate : isReleasedYear;
return isReleased;
}
function MediaCardContent({
media,
linkable,
@@ -35,10 +50,19 @@ function MediaCardContent({
const { t } = useTranslation();
const percentageString = `${Math.round(percentage ?? 0).toFixed(0)}%`;
const canLink = linkable && !closable;
const isReleased = useCallback(() => checkReleased(media), [media]);
const canLink = linkable && !closable && isReleased();
const dotListContent = [t(`media.types.${media.type}`)];
if (media.year) dotListContent.push(media.year.toFixed());
if (media.year) {
dotListContent.push(media.year.toFixed());
}
if (!isReleased()) {
dotListContent.push(t("media.unreleased"));
}
return (
<Flare.Base
@@ -58,14 +82,14 @@ function MediaCardContent({
/>
<Flare.Child
className={`pointer-events-auto relative mb-2 p-3 transition-transform duration-100 ${
canLink ? "group-hover:scale-95" : ""
canLink ? "group-hover:scale-95" : "opacity-60"
}`}
>
<div
className={classNames(
"relative mb-4 pb-[150%] w-full overflow-hidden rounded-xl bg-mediaCard-hoverBackground bg-cover bg-center transition-[border-radius] duration-100",
{
"group-hover:rounded-lg": !closable,
"group-hover:rounded-lg": canLink,
},
)}
style={{
@@ -142,7 +166,12 @@ function MediaCardContent({
export function MediaCard(props: MediaCardProps) {
const content = <MediaCardContent {...props} />;
const canLink = props.linkable && !props.closable;
const isReleased = useCallback(
() => checkReleased(props.media),
[props.media],
);
const canLink = props.linkable && !props.closable && isReleased();
let link = canLink
? `/media/${encodeURIComponent(mediaItemToId(props.media))}`
@@ -157,7 +186,7 @@ export function MediaCard(props: MediaCardProps) {
}
}
if (!props.linkable) return <span>{content}</span>;
if (!canLink) return <span>{content}</span>;
return (
<Link
to={link}

View File

@@ -212,9 +212,16 @@ function EpisodesView({
return (
<Menu.CardWithScrollable>
<Menu.BackLink onClick={goBack}>
{loadingState?.value?.season.title ||
t("player.menus.episodes.loadingTitle")}
<Menu.BackLink
onClick={goBack}
rightSide={
<span>
{loadingState?.value?.season.title ||
t("player.menus.episodes.loadingTitle")}
</span>
}
>
{t("player.menus.episodes.seasons")}
</Menu.BackLink>
{content}
</Menu.CardWithScrollable>

View File

@@ -1,12 +1,20 @@
import classNames from "classnames";
import { useCallback } from "react";
import { useCallback, useEffect, useRef } from "react";
import { useTranslation } from "react-i18next";
import { useAsync } from "react-use";
import { getMetaFromId } from "@/backend/metadata/getmeta";
import { MWMediaType, MWSeasonMeta } from "@/backend/metadata/types/mw";
import { Icon, Icons } from "@/components/Icon";
import { usePlayerMeta } from "@/components/player/hooks/usePlayerMeta";
import { Transition } from "@/components/utils/Transition";
import { PlayerMeta } from "@/stores/player/slices/source";
import { usePlayerStore } from "@/stores/player/store";
import { usePreferencesStore } from "@/stores/preferences";
import { useProgressStore } from "@/stores/progress";
import { isAutoplayAllowed } from "@/utils/autoplay";
import { hasAired } from "../utils/aired";
function shouldShowNextEpisodeButton(
time: number,
@@ -38,6 +46,50 @@ function Button(props: {
);
}
function useSeasons(
mediaId: string | undefined,
isLastEpisode: boolean = false,
) {
const state = useAsync(async () => {
if (isLastEpisode) {
if (!mediaId) return null;
const data = await getMetaFromId(MWMediaType.SERIES, mediaId);
if (data?.meta.type !== MWMediaType.SERIES) return null;
return data.meta.seasons;
}
}, [mediaId, isLastEpisode]);
return state;
}
function useNextSeasonEpisode(
nextSeason: MWSeasonMeta | undefined,
mediaId: string | undefined,
) {
const state = useAsync(async () => {
if (nextSeason) {
if (!mediaId) return null;
const data = await getMetaFromId(
MWMediaType.SERIES,
mediaId,
nextSeason?.id,
);
if (data?.meta.type !== MWMediaType.SERIES) return null;
const nextSeasonEpisodes = data?.meta?.seasonData?.episodes
.filter((episode) => hasAired(episode.air_date))
.map((episode) => ({
number: episode.number,
title: episode.title,
tmdbId: episode.id,
}));
if (nextSeasonEpisodes.length > 0) return nextSeasonEpisodes[0];
}
}, [mediaId, nextSeason?.id]);
return state;
}
export function NextEpisodeButton(props: {
controlsShowing: boolean;
onChange?: (meta: PlayerMeta) => void;
@@ -55,8 +107,24 @@ export function NextEpisodeButton(props: {
const setShouldStartFromBeginning = usePlayerStore(
(s) => s.setShouldStartFromBeginning,
);
const updateItem = useProgressStore((s) => s.updateItem);
const enableAutoplay = usePreferencesStore((s) => s.enableAutoplay);
const isLastEpisode =
!meta?.episode?.number || !meta?.episodes?.at(-1)?.number
? false
: meta.episode.number === meta.episodes.at(-1)!.number;
const seasons = useSeasons(meta?.tmdbId, isLastEpisode);
const nextSeason = seasons.value?.find(
(season) => season.number === (meta?.season?.number ?? 0) + 1,
);
const nextSeasonEpisode = useNextSeasonEpisode(nextSeason, meta?.tmdbId);
let show = false;
const hasAutoplayed = useRef(false);
if (showingState === "always") show = true;
else if (showingState === "hover" && props.controlsShowing) show = true;
if (isHidden || status !== "playing" || duration === 0) show = false;
@@ -68,18 +136,53 @@ export function NextEpisodeButton(props: {
? bottom
: "bottom-[calc(3rem+env(safe-area-inset-bottom))]";
const nextEp = meta?.episodes?.find(
(v) => v.number === (meta?.episode?.number ?? 0) + 1,
);
const nextEp = isLastEpisode
? nextSeasonEpisode.value
: meta?.episodes?.find(
(v) => v.number === (meta?.episode?.number ?? 0) + 1,
);
const loadNextEpisode = useCallback(() => {
if (!meta || !nextEp) return;
const metaCopy = { ...meta };
metaCopy.episode = nextEp;
metaCopy.season =
isLastEpisode && nextSeason
? {
...nextSeason,
tmdbId: nextSeason.id,
}
: metaCopy.season;
setShouldStartFromBeginning(true);
setDirectMeta(metaCopy);
props.onChange?.(metaCopy);
}, [setDirectMeta, nextEp, meta, props, setShouldStartFromBeginning]);
const defaultProgress = { duration: 0, watched: 0 };
updateItem({
meta: metaCopy,
progress: defaultProgress,
});
}, [
setDirectMeta,
nextEp,
meta,
props,
setShouldStartFromBeginning,
updateItem,
isLastEpisode,
nextSeason,
]);
useEffect(() => {
if (!enableAutoplay || metaType !== "show") return;
const onePercent = duration / 100;
const isEnding = time >= duration - onePercent && duration !== 0;
if (duration === 0) hasAutoplayed.current = false;
if (isEnding && isAutoplayAllowed() && !hasAutoplayed.current) {
hasAutoplayed.current = true;
loadNextEpisode();
}
}, [duration, enableAutoplay, loadNextEpisode, metaType, time]);
if (!meta?.episode || !nextEp) return null;
if (metaType !== "show") return null;
@@ -107,7 +210,9 @@ export function NextEpisodeButton(props: {
className="bg-buttons-primary hover:bg-buttons-primaryHover text-buttons-primaryText flex justify-center items-center"
>
<Icon className="text-xl mr-1" icon={Icons.SKIP_EPISODE} />
{t("player.nextEpisode.next")}
{isLastEpisode && nextEp
? t("player.nextEpisode.nextSeason")
: t("player.nextEpisode.next")}
</Button>
</div>
</Transition>

View File

@@ -14,6 +14,7 @@ import { Menu } from "@/components/player/internals/ContextMenu";
import { useOverlayRouter } from "@/hooks/useOverlayRouter";
import { usePlayerStore } from "@/stores/player/store";
import { AudioView } from "./settings/AudioView";
import { CaptionSettingsView } from "./settings/CaptionSettingsView";
import { CaptionsView } from "./settings/CaptionsView";
import { DownloadRoutes } from "./settings/Downloads";
@@ -46,6 +47,11 @@ function SettingsOverlay({ id }: { id: string }) {
<QualityView id={id} />
</Menu.Card>
</OverlayPage>
<OverlayPage id={id} path="/audio" width={343} height={431}>
<Menu.Card>
<AudioView id={id} />
</Menu.Card>
</OverlayPage>
<OverlayPage id={id} path="/captions" width={343} height={431}>
<Menu.CardWithScrollable>
<CaptionsView id={id} />

View File

@@ -41,8 +41,13 @@ export function Volume(props: Props) {
const handleMouseEnter = useCallback(async () => {
if (await canChangeVolume()) setHovering(true);
document.body.classList.add("overflow-y-hidden");
}, [setHovering]);
const handleMouseLeave = () => {
document.body.classList.remove("overflow-y-hidden");
};
let percentage = makePercentage(volume * 100);
if (dragging) percentage = makePercentage(dragPercentage);
const percentageString = makePercentageString(percentage);
@@ -61,9 +66,10 @@ export function Volume(props: Props) {
<div
className={props.className}
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
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 touch-none">
<div className="px-4 text-2xl text-white" onClick={handleClick}>
<Icon icon={percentage > 0 ? Icons.VOLUME : Icons.VOLUME_X} />
</div>

View File

@@ -0,0 +1,65 @@
import { useCallback } from "react";
import { useTranslation } from "react-i18next";
import { FlagIcon } from "@/components/FlagIcon";
import { Menu } from "@/components/player/internals/ContextMenu";
import { useOverlayRouter } from "@/hooks/useOverlayRouter";
import { AudioTrack } from "@/stores/player/slices/source";
import { usePlayerStore } from "@/stores/player/store";
import { getPrettyLanguageNameFromLocale } from "@/utils/language";
import { SelectableLink } from "../../internals/ContextMenu/Links";
export function AudioOption(props: {
langCode?: string;
children: React.ReactNode;
selected?: boolean;
onClick?: () => void;
}) {
return (
<SelectableLink selected={props.selected} onClick={props.onClick}>
<span className="flex items-center">
<span data-code={props.langCode} className="mr-3 inline-flex">
<FlagIcon langCode={props.langCode} />
</span>
<span>{props.children}</span>
</span>
</SelectableLink>
);
}
export function AudioView({ id }: { id: string }) {
const { t } = useTranslation();
const unknownChoice = t("player.menus.subtitles.unknownLanguage");
const router = useOverlayRouter(id);
const audioTracks = usePlayerStore((s) => s.audioTracks);
const currentAudioTrack = usePlayerStore((s) => s.currentAudioTrack);
const changeAudioTrack = usePlayerStore((s) => s.display?.changeAudioTrack);
const change = useCallback(
(track: AudioTrack) => {
changeAudioTrack?.(track);
router.close();
},
[router, changeAudioTrack],
);
return (
<>
<Menu.BackLink onClick={() => router.navigate("/")}>Audio</Menu.BackLink>
<Menu.Section className="flex flex-col pb-4">
{audioTracks.map((v) => (
<AudioOption
key={v.id}
selected={v.id === currentAudioTrack?.id}
langCode={v.language}
onClick={audioTracks.includes(v) ? () => change(v) : undefined}
>
{getPrettyLanguageNameFromLocale(v.language) ?? unknownChoice}
</AudioOption>
))}
</Menu.Section>
</>
);
}

View File

@@ -1,11 +1,14 @@
import classNames from "classnames";
import Fuse from "fuse.js";
import { useMemo, useRef, useState } from "react";
import { type DragEvent, useMemo, useRef, useState } from "react";
import { useTranslation } from "react-i18next";
import { useAsyncFn } from "react-use";
import { convert } from "subsrt-ts";
import { subtitleTypeList } from "@/backend/helpers/subs";
import { FileDropHandler } from "@/components/DropFile";
import { FlagIcon } from "@/components/FlagIcon";
import { Icon, Icons } from "@/components/Icon";
import { useCaptions } from "@/components/player/hooks/useCaptions";
import { Menu } from "@/components/player/internals/ContextMenu";
import { Input } from "@/components/player/internals/ContextMenu/Input";
@@ -123,6 +126,34 @@ export function CaptionsView({ id }: { id: string }) {
const { selectCaptionById, disable } = useCaptions();
const captionList = usePlayerStore((s) => s.captionList);
const getHlsCaptionList = usePlayerStore((s) => s.display?.getCaptionList);
const [dragging, setDragging] = useState(false);
const setCaption = usePlayerStore((s) => s.setCaption);
function onDrop(event: DragEvent<HTMLDivElement>) {
const files = event.dataTransfer.files;
const firstFile = files[0];
if (!files || !firstFile) return;
const fileExtension = `.${firstFile.name.split(".").pop()}`;
if (!fileExtension || !subtitleTypeList.includes(fileExtension)) {
return;
}
const reader = new FileReader();
reader.addEventListener("load", (e) => {
if (!e.target || typeof e.target.result !== "string") return;
const converted = convert(e.target.result, "srt");
setCaption({
language: "custom",
srtData: converted,
id: "custom-caption",
});
});
reader.readAsText(firstFile);
}
const captions = useMemo(
() =>
@@ -164,6 +195,20 @@ export function CaptionsView({ id }: { id: string }) {
return (
<>
<div>
<div
className={classNames(
"absolute inset-0 flex items-center justify-center text-white z-10 pointer-events-none transition-opacity duration-300",
dragging ? "opacity-100" : "opacity-0",
)}
>
<div className="flex flex-col items-center">
<Icon className="text-5xl mb-4" icon={Icons.UPLOAD} />
<span className="text-xl weight font-medium">
{t("player.menus.subtitles.dropSubtitleFile")}
</span>
</div>
</div>
<Menu.BackLink
onClick={() => router.navigate("/")}
rightSide={
@@ -178,17 +223,28 @@ export function CaptionsView({ id }: { id: string }) {
>
{t("player.menus.subtitles.title")}
</Menu.BackLink>
</div>
<FileDropHandler
className={`transition duration-300 ${dragging ? "opacity-20" : ""}`}
onDraggingChange={(isDragging) => {
setDragging(isDragging);
}}
onDrop={(event) => onDrop(event)}
>
<div className="mt-3">
<Input value={searchQuery} onInput={setSearchQuery} />
</div>
</div>
<Menu.ScrollToActiveSection className="!pt-1 mt-2 pb-3">
<CaptionOption onClick={() => disable()} selected={!selectedCaptionId}>
{t("player.menus.subtitles.offChoice")}
</CaptionOption>
<CustomCaptionOption />
{content}
</Menu.ScrollToActiveSection>
<Menu.ScrollToActiveSection className="!pt-1 mt-2 pb-3">
<CaptionOption
onClick={() => disable()}
selected={!selectedCaptionId}
>
{t("player.menus.subtitles.offChoice")}
</CaptionOption>
<CustomCaptionOption />
{content}
</Menu.ScrollToActiveSection>
</FileDropHandler>
</>
);
}

View File

@@ -16,6 +16,7 @@ export function SettingsMenu({ id }: { id: string }) {
const { t } = useTranslation();
const router = useOverlayRouter(id);
const currentQuality = usePlayerStore((s) => s.currentQuality);
const currentAudioTrack = usePlayerStore((s) => s.currentAudioTrack);
const selectedCaptionLanguage = usePlayerStore(
(s) => s.caption.selected?.language,
);
@@ -35,6 +36,11 @@ export function SettingsMenu({ id }: { id: string }) {
t("player.menus.subtitles.unknownLanguage")
: undefined;
const selectedAudioLanguagePretty = currentAudioTrack
? getPrettyLanguageNameFromLocale(currentAudioTrack.language) ??
t("player.menus.subtitles.unknownLanguage")
: undefined;
const source = usePlayerStore((s) => s.source);
const downloadable = source?.type === "file" || source?.type === "hls";
@@ -51,6 +57,15 @@ export function SettingsMenu({ id }: { id: string }) {
>
{t("player.menus.settings.qualityItem")}
</Menu.ChevronLink>
{currentAudioTrack && (
<Menu.ChevronLink
onClick={() => router.navigate("/audio")}
rightText={selectedAudioLanguagePretty ?? undefined}
>
{t("player.menus.settings.audioItem")}
</Menu.ChevronLink>
)}
<Menu.ChevronLink
onClick={() => router.navigate("/source")}
rightText={sourceName}

View File

@@ -1,23 +1,21 @@
import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
import { Link } from "react-router-dom";
import { Icon, Icons } from "@/components/Icon";
export function BackLink(props: { url: string }) {
const { t } = useTranslation();
const navigate = useNavigate();
return (
<div className="flex items-center">
<button
type="button"
onClick={() => navigate(props.url)}
<Link
to={props.url}
className="py-1 -my-1 px-2 -mx-2 tabbable rounded-lg flex items-center cursor-pointer text-type-secondary hover:text-white transition-colors duration-200 font-medium"
>
<Icon className="mr-2" icon={Icons.ARROW_LEFT} />
<span className="md:hidden">{t("player.back.short")}</span>
<span className="hidden md:block">{t("player.back.default")}</span>
</button>
</Link>
</div>
);
}

View File

@@ -12,6 +12,7 @@ import {
} from "@/components/player/display/displayInterface";
import { handleBuffered } from "@/components/player/utils/handleBuffered";
import { getMediaErrorDetails } from "@/components/player/utils/mediaErrorDetails";
import { useLanguageStore } from "@/stores/language";
import {
LoadableSource,
SourceQuality,
@@ -81,6 +82,31 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
emit("qualities", convertedLevels);
}
function reportAudioTracks() {
if (!hls) return;
const currentLanguage = useLanguageStore.getState().language;
const audioTracks = hls.audioTracks;
const languageTrack = audioTracks.find((v) => v.lang === currentLanguage);
if (languageTrack) {
hls.audioTrack = audioTracks.indexOf(languageTrack);
}
const currentTrack = audioTracks?.[hls.audioTrack ?? 0];
if (!currentTrack) return;
emit("changedaudiotrack", {
id: currentTrack.id.toString(),
label: currentTrack.name,
language: currentTrack.lang ?? "unknown",
});
emit(
"audiotracks",
hls.audioTracks.map((v) => ({
id: v.id.toString(),
label: v.name,
language: v.lang ?? "unknown",
})),
);
}
function setupQualityForHls() {
if (videoElement && canPlayHlsNatively(videoElement)) {
return; // nothing to change
@@ -111,6 +137,7 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
}
function setupSource(vid: HTMLVideoElement, src: LoadableSource) {
hls = null;
if (src.type === "hls") {
if (canPlayHlsNatively(vid)) {
vid.src = processCdnLink(src.url);
@@ -155,6 +182,7 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
if (!hls) return;
reportLevels();
setupQualityForHls();
reportAudioTracks();
if (isExtensionActiveCached()) {
hls.on(Hls.Events.LEVEL_LOADED, async (_, data) => {
@@ -172,6 +200,21 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
},
});
});
hls.on(Hls.Events.AUDIO_TRACK_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_AUDIO,
targetDomains: chunkUrls,
requestHeaders: {
...src.preferredHeaders,
...src.headers,
},
});
});
}
});
hls.on(Hls.Events.LEVEL_SWITCHED, () => {
@@ -464,5 +507,18 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
hls?.setSubtitleOption({ lang });
return promise;
},
changeAudioTrack(track) {
if (!hls) return;
const audioTrack = hls?.audioTracks.find(
(t) => t.id.toString() === track.id,
);
if (!audioTrack) return;
hls.audioTrack = hls.audioTracks.indexOf(audioTrack);
emit("changedaudiotrack", {
id: audioTrack.id.toString(),
label: audioTrack.name,
language: audioTrack.lang ?? "unknown",
});
},
};
}

View File

@@ -283,5 +283,8 @@ export function makeChromecastDisplayInterface(
async setSubtitlePreference() {
return Promise.resolve();
},
changeAudioTrack() {
// cant change audio tracks
},
};
}

View File

@@ -1,7 +1,7 @@
import { MediaPlaylist } from "hls.js";
import { MWMediaType } from "@/backend/metadata/types/mw";
import { CaptionListItem } from "@/stores/player/slices/source";
import { AudioTrack, CaptionListItem } from "@/stores/player/slices/source";
import { LoadableSource, SourceQuality } from "@/stores/player/utils/qualities";
import { Listener } from "@/utils/events";
@@ -25,6 +25,8 @@ export type DisplayInterfaceEvents = {
loading: boolean;
qualities: SourceQuality[];
changedquality: SourceQuality | null;
audiotracks: AudioTrack[];
changedaudiotrack: AudioTrack | null;
needstrack: boolean;
canairplay: boolean;
playbackrate: number;
@@ -60,6 +62,7 @@ export interface DisplayInterface extends Listener<DisplayInterfaceEvents> {
automaticQuality: boolean,
preferredQuality: SourceQuality | null,
): void;
changeAudioTrack(audioTrack: AudioTrack): void;
processVideoElement(video: HTMLVideoElement): void;
processContainerElement(container: HTMLElement): void;
toggleFullscreen(): void;

View File

@@ -71,9 +71,10 @@ export function KeyboardEvents() {
return;
const k = evt.key;
const keyL = evt.key.toLowerCase();
// Volume
if (["ArrowUp", "ArrowDown", "m"].includes(k)) {
if (["ArrowUp", "ArrowDown", "m", "M"].includes(k)) {
dataRef.current.setShowVolume(true);
if (volumeDebounce.current) clearTimeout(volumeDebounce.current);
@@ -89,7 +90,7 @@ export function KeyboardEvents() {
dataRef.current.setVolume(
(dataRef.current.mediaPlaying?.volume || 0) - 0.15,
);
if (k === "m") dataRef.current.toggleMute();
if (keyL === "m") dataRef.current.toggleMute();
// Video playback speed
if (k === ">" || k === "<") {
@@ -106,9 +107,9 @@ export function KeyboardEvents() {
dataRef.current.display?.setTime(dataRef.current.time + 5);
if (k === "ArrowLeft")
dataRef.current.display?.setTime(dataRef.current.time - 5);
if (k === "j")
if (keyL === "j")
dataRef.current.display?.setTime(dataRef.current.time - 10);
if (k === "l")
if (keyL === "l")
dataRef.current.display?.setTime(dataRef.current.time + 10);
if (k === "." && dataRef.current.mediaPlaying?.isPaused)
dataRef.current.display?.setTime(dataRef.current.time + 1);
@@ -116,18 +117,18 @@ export function KeyboardEvents() {
dataRef.current.display?.setTime(dataRef.current.time - 1);
// Utils
if (k === "f") dataRef.current.display?.toggleFullscreen();
if (k === " ")
if (keyL === "f") dataRef.current.display?.toggleFullscreen();
if (k === " " || keyL === "k")
dataRef.current.display?.[
dataRef.current.mediaPlaying.isPaused ? "play" : "pause"
]();
if (k === "Escape") dataRef.current.router.close();
// captions
if (k === "c") dataRef.current.toggleLastUsed().catch(() => {}); // ignore errors
if (keyL === "c") dataRef.current.toggleLastUsed().catch(() => {}); // ignore errors
// Do a barrell roll!
if (k === "r") {
if (keyL === "r") {
if (dataRef.current.isRolling || evt.ctrlKey || evt.metaKey) return;
dataRef.current.setIsRolling(true);

View File

@@ -32,6 +32,9 @@ export function MediaSession() {
const updatePositionState = useCallback(
(position: number) => {
// If the browser doesn't support setPositionState, return
if (typeof navigator.mediaSession.setPositionState !== "function") return;
// If the updated position needs to be buffered, queue an update
if (position > data.progress.buffered) {
shouldUpdatePositionState.current = true;

View File

@@ -51,6 +51,7 @@ export function useSettingsState(
}
| undefined,
enableThumbnails: boolean,
enableAutoplay: boolean,
) {
const [proxyUrlsState, setProxyUrls, resetProxyUrls, proxyUrlsChanged] =
useDerived(proxyUrls);
@@ -84,6 +85,12 @@ export function useSettingsState(
resetEnableThumbnails,
enableThumbnailsChanged,
] = useDerived(enableThumbnails);
const [
enableAutoplayState,
setEnableAutoplayState,
resetEnableAutoplay,
enableAutoplayChanged,
] = useDerived(enableAutoplay);
function reset() {
resetTheme();
@@ -95,6 +102,7 @@ export function useSettingsState(
resetDeviceName();
resetProfile();
resetEnableThumbnails();
resetEnableAutoplay();
}
const changed =
@@ -105,7 +113,8 @@ export function useSettingsState(
backendUrlChanged ||
proxyUrlsChanged ||
profileChanged ||
enableThumbnailsChanged;
enableThumbnailsChanged ||
enableAutoplayChanged;
return {
reset,
@@ -150,5 +159,10 @@ export function useSettingsState(
set: setEnableThumbnailsState,
changed: enableThumbnailsChanged,
},
enableAutoplay: {
state: enableAutoplayState,
set: setEnableAutoplayState,
changed: enableAutoplayChanged,
},
};
}

View File

@@ -122,6 +122,9 @@ export function SettingsPage() {
const enableThumbnails = usePreferencesStore((s) => s.enableThumbnails);
const setEnableThumbnails = usePreferencesStore((s) => s.setEnableThumbnails);
const enableAutoplay = usePreferencesStore((s) => s.enableAutoplay);
const setEnableAutoplay = usePreferencesStore((s) => s.setEnableAutoplay);
const account = useAuthStore((s) => s.account);
const updateProfile = useAuthStore((s) => s.setAccountProfile);
const updateDeviceName = useAuthStore((s) => s.updateDeviceName);
@@ -144,6 +147,7 @@ export function SettingsPage() {
backendUrlSetting,
account?.profile,
enableThumbnails,
enableAutoplay,
);
useEffect(() => {
@@ -196,6 +200,7 @@ export function SettingsPage() {
}
setEnableThumbnails(state.enableThumbnails.state);
setEnableAutoplay(state.enableAutoplay.state);
setAppLanguage(state.appLanguage.state);
setTheme(state.theme.state);
setSubStyling(state.subtitleStyling.state);
@@ -217,18 +222,19 @@ export function SettingsPage() {
setBackendUrl(url);
}
}, [
state,
account,
backendUrl,
setEnableThumbnails,
state,
setEnableAutoplay,
setAppLanguage,
setTheme,
setSubStyling,
setProxySet,
updateDeviceName,
updateProfile,
setProxySet,
setBackendUrl,
logout,
setBackendUrl,
]);
return (
<SubPageLayout>
@@ -266,6 +272,8 @@ export function SettingsPage() {
setLanguage={state.appLanguage.set}
enableThumbnails={state.enableThumbnails.state}
setEnableThumbnails={state.enableThumbnails.set}
enableAutoplay={state.enableAutoplay.state}
setEnableAutoplay={state.enableAutoplay.set}
/>
</div>
<div id="settings-appearance" className="mt-48">

View File

@@ -2,8 +2,7 @@ import { ReactNode, useCallback, useEffect, useMemo, useState } from "react";
import { Trans, useTranslation } from "react-i18next";
import { useAsyncFn, useInterval } from "react-use";
import { isAllowedExtensionVersion } from "@/backend/extension/compatibility";
import { extensionInfo, sendPage } from "@/backend/extension/messaging";
import { sendPage } from "@/backend/extension/messaging";
import { Button } from "@/components/buttons/Button";
import { Icon, Icons } from "@/components/Icon";
import { Loading } from "@/components/layout/Loading";
@@ -22,24 +21,8 @@ import {
ExtensionDetectionResult,
detectExtensionInstall,
} from "@/utils/detectFeatures";
type ExtensionStatus =
| "unknown"
| "failed"
| "disallowed"
| "noperms"
| "outdated"
| "success";
async function getExtensionState(): Promise<ExtensionStatus> {
const info = await extensionInfo();
if (!info) return "unknown"; // cant talk to extension
if (!info.success) return "failed"; // extension failed to respond
if (!info.allowed) return "disallowed"; // extension is not enabled on this page
if (!info.hasPermission) return "noperms"; // extension has no perms to do it's tasks
if (!isAllowedExtensionVersion(info.version)) return "outdated"; // extension is too old
return "success"; // no problems
}
import { getExtensionState } from "@/utils/extension";
import type { ExtensionStatus } from "@/utils/extension";
function RefreshBar() {
const { t } = useTranslation();

Some files were not shown because too many files have changed in this diff Show More