Merge pull request #641 from movie-web/dev

movie-web v4.2.0
This commit is contained in:
mrjvs 2023-12-29 23:05:00 +01:00 committed by GitHub
commit 9eede393ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
84 changed files with 2472 additions and 953 deletions

View File

@ -27,7 +27,7 @@ We do not want this project to be yet another bulky streaming site, instead it a
On top of that, hosting should be as cheap and simple as possible. Just a static website with a proxy, with an optional backend if you want cross-device syncing. On top of that, hosting should be as cheap and simple as possible. Just a static website with a proxy, with an optional backend if you want cross-device syncing.
Content is fetched from third parties and scraping is done fully done on the client. This means that the hoster has no files or media on their server. All files are streamed directly from the third parties. Content is fetched from third parties and scraping is fully done on the client. This means that the hoster has no files or media on their server. All files are streamed directly from the third parties.
## ⚠️ Limitations ## ⚠️ Limitations

View File

@ -15,6 +15,109 @@
<meta name="msapplication-TileColor" content="#120f1d" /> <meta name="msapplication-TileColor" content="#120f1d" />
<meta name="theme-color" content="#120f1d" /> <meta name="theme-color" content="#120f1d" />
<link rel="apple-touch-startup-image"
media="screen and (device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
href="/splash_screens/iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
href="/splash_screens/iPhone_15_Pro__iPhone_15__iPhone_14_Pro_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
href="/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
href="/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
href="/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
href="/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/iPhone_11__iPhone_XR_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
href="/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/12.9__iPad_Pro_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 820px) and (device-height: 1180px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/10.9__iPad_Air_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/10.5__iPad_Air_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/10.2__iPad_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
href="/splash_screens/8.3__iPad_Mini_landscape.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
href="/splash_screens/iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
href="/splash_screens/iPhone_15_Pro__iPhone_15__iPhone_14_Pro_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
href="/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
href="/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
href="/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
href="/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/iPhone_11__iPhone_XR_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
href="/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/12.9__iPad_Pro_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 820px) and (device-height: 1180px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/10.9__iPad_Air_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/10.5__iPad_Air_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/10.2__iPad_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png">
<link rel="apple-touch-startup-image"
media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
href="/splash_screens/8.3__iPad_Mini_portrait.png">
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;600;700&display=swap" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;600;700&display=swap" rel="stylesheet" />
@ -58,4 +161,4 @@
<script type="module" src="/src/index.tsx"></script> <script type="module" src="/src/index.tsx"></script>
</body> </body>
</html> </html>

View File

@ -1,6 +1,6 @@
{ {
"name": "movie-web", "name": "movie-web",
"version": "4.1.3", "version": "4.2.0",
"private": true, "private": true,
"homepage": "https://movie-web.app", "homepage": "https://movie-web.app",
"scripts": { "scripts": {
@ -28,7 +28,7 @@
"dependencies": { "dependencies": {
"@formkit/auto-animate": "^0.8.1", "@formkit/auto-animate": "^0.8.1",
"@headlessui/react": "^1.7.17", "@headlessui/react": "^1.7.17",
"@movie-web/providers": "^1.1.5", "@movie-web/providers": "^2.0.1",
"@noble/hashes": "^1.3.3", "@noble/hashes": "^1.3.3",
"@react-spring/web": "^9.7.3", "@react-spring/web": "^9.7.3",
"@scure/bip39": "^1.2.2", "@scure/bip39": "^1.2.2",

View File

@ -18,8 +18,8 @@ dependencies:
specifier: ^1.7.17 specifier: ^1.7.17
version: 1.7.17(react-dom@18.2.0)(react@18.2.0) version: 1.7.17(react-dom@18.2.0)(react@18.2.0)
'@movie-web/providers': '@movie-web/providers':
specifier: ^1.1.5 specifier: ^2.0.1
version: 1.1.5 version: 2.0.1
'@noble/hashes': '@noble/hashes':
specifier: ^1.3.3 specifier: ^1.3.3
version: 1.3.3 version: 1.3.3
@ -1912,14 +1912,14 @@ packages:
'@jridgewell/resolve-uri': 3.1.1 '@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/sourcemap-codec': 1.4.15
/@movie-web/providers@1.1.5: /@movie-web/providers@2.0.1:
resolution: {integrity: sha512-JnqU6nVsEZ83UVcsizqzcr/vtwvHHlZt9vYwGiJEAyaUgaXJPZz3C90qzaRZ8CVWydUTRAmjRP3daRFtC1nKHw==} resolution: {integrity: sha512-PB1OxSsm4zwD6fuWBCmuqwMpt1UnlKssVZ8jGl6gHioS9/qFXR9Rsd8SnWISQWxF6lVRUp0DBXHfCrXGY/jwhA==}
dependencies: dependencies:
cheerio: 1.0.0-rc.12 cheerio: 1.0.0-rc.12
crypto-js: 4.2.0 crypto-js: 4.2.0
form-data: 4.0.0 form-data: 4.0.0
iso-639-1: 3.1.0 iso-639-1: 3.1.0
nanoid: 3.3.6 nanoid: 3.3.7
node-fetch: 2.7.0 node-fetch: 2.7.0
unpacker: 1.0.1 unpacker: 1.0.1
transitivePeerDependencies: transitivePeerDependencies:
@ -5234,17 +5234,10 @@ packages:
stylis: 4.3.0 stylis: 4.3.0
dev: false dev: false
/nanoid@3.3.6:
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: false
/nanoid@3.3.7: /nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true hasBin: true
dev: true
/nanoid@5.0.4: /nanoid@5.0.4:
resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==} resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==}

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -6,6 +6,7 @@ import es from "@/assets/locales/es.json";
import et from "@/assets/locales/et.json"; import et from "@/assets/locales/et.json";
import fr from "@/assets/locales/fr.json"; import fr from "@/assets/locales/fr.json";
import he from "@/assets/locales/he.json"; import he from "@/assets/locales/he.json";
import hi from "@/assets/locales/hi.json";
import it from "@/assets/locales/it.json"; import it from "@/assets/locales/it.json";
import lv from "@/assets/locales/lv.json"; import lv from "@/assets/locales/lv.json";
import minion from "@/assets/locales/minion.json"; import minion from "@/assets/locales/minion.json";
@ -13,10 +14,12 @@ import ne from "@/assets/locales/ne.json";
import nl from "@/assets/locales/nl.json"; import nl from "@/assets/locales/nl.json";
import pirate from "@/assets/locales/pirate.json"; import pirate from "@/assets/locales/pirate.json";
import pl from "@/assets/locales/pl.json"; import pl from "@/assets/locales/pl.json";
import ptbr from "@/assets/locales/pt-BR.json";
import sv from "@/assets/locales/sv.json"; import sv from "@/assets/locales/sv.json";
import th from "@/assets/locales/th.json"; import th from "@/assets/locales/th.json";
import tok from "@/assets/locales/tok.json"; import tok from "@/assets/locales/tok.json";
import tr from "@/assets/locales/tr.json"; import tr from "@/assets/locales/tr.json";
import uk from "@/assets/locales/uk.json";
import vi from "@/assets/locales/vi.json"; import vi from "@/assets/locales/vi.json";
import zh from "@/assets/locales/zh.json"; import zh from "@/assets/locales/zh.json";
@ -42,6 +45,9 @@ export const locales = {
es, es,
et, et,
tok, tok,
hi,
pt: ptbr,
uk,
}; };
export type Locales = keyof typeof locales; export type Locales = keyof typeof locales;

View File

@ -173,20 +173,8 @@
"enabled": "جارٍ العرض على الجهاز..." "enabled": "جارٍ العرض على الجهاز..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "اختيار ترجمة من ملف",
"customizeLabel": "تخصيص",
"offChoice": "إيقاف",
"settings": {
"delay": "تأخير الترجمة",
"fixCapitals": "تصحيح التهجئة"
},
"title": "مقاطع الترجمة",
"unknownLanguage": "غير معروف"
},
"downloads": { "downloads": {
"disclaimer": "يتم أخذ التنزيلات مباشرةً من قبل مقدم الخدمة. movie-web لاسيطرة له على كيفية توفير تلك التنزيلات.", "disclaimer": "يتم أخذ التنزيلات مباشرةً من قبل مقدم الخدمة. movie-web لاسيطرة له على كيفية توفير تلك التنزيلات.",
"downloadCaption": "تنزيل مقاطع الترجمة الحالية",
"downloadVideo": "تنزيل الفيديو", "downloadVideo": "تنزيل الفيديو",
"onAndroid": { "onAndroid": {
"1": "للتنزيل على أندرويد، أنقر زر التنزيل وفي الصفحة الموالية <bold>إضغط باستمرار</bold> على الفيديو، وبعدها اختر <bold>حفظ</bold>.", "1": "للتنزيل على أندرويد، أنقر زر التنزيل وفي الصفحة الموالية <bold>إضغط باستمرار</bold> على الفيديو، وبعدها اختر <bold>حفظ</bold>.",
@ -224,9 +212,7 @@
"title": "جودة" "title": "جودة"
}, },
"settings": { "settings": {
"captionItem": "إعدادات الترجمة",
"downloadItem": "تنزيل", "downloadItem": "تنزيل",
"enableCaptions": "تفعيل مقاطع الترجمة",
"experienceSection": "تجربة المشاهدة", "experienceSection": "تجربة المشاهدة",
"playbackItem": "إعدادات التشغيل", "playbackItem": "إعدادات التشغيل",
"qualityItem": "جودة", "qualityItem": "جودة",
@ -370,13 +356,6 @@
}, },
"title": "المظهر" "title": "المظهر"
}, },
"captions": {
"backgroundLabel": "تعتيم الخلفية",
"colorLabel": "لون",
"previewQuote": "يجب ألا أخاف. الخوف هو قاتل العقل.",
"textSizeLabel": "حجم النص",
"title": "مقاطع الترجمة"
},
"connections": { "connections": {
"server": { "server": {
"description": "إذا كنت ترغب في الاتصال بخادم خلفي مخصص لتخزين بياناتك، قم بتفعيل هذا ووفر الرابط.", "description": "إذا كنت ترغب في الاتصال بخادم خلفي مخصص لتخزين بياناتك، قم بتفعيل هذا ووفر الرابط.",

View File

@ -174,21 +174,11 @@
"enabled": "Odesílání do zařízení..." "enabled": "Odesílání do zařízení..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Nahrát titulky ze souboru",
"customizeLabel": "Přizpůsobit",
"offChoice": "Vypnuto",
"settings": {
"delay": "Posunutí titulků",
"fixCapitals": "Opravit velká písmena"
},
"title": "Titulky",
"unknownLanguage": "Neznámo"
},
"downloads": { "downloads": {
"disclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.", "disclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.",
"downloadCaption": "Stáhnout titulky", "downloadPlaylist": "Stáhnout playlist",
"downloadVideo": "Stáhnout video", "downloadVideo": "Stáhnout video",
"hlsDisclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány. Vezměte prosím na vědomí, že stahujete HLS playlist, který je určen pro uživatele obeznámené s pokročilým streamováním médií.",
"onAndroid": { "onAndroid": {
"1": "Na Androidu klikněte na tlačítko stahování, poté na nové stránce <bold>klepněte a podržte</bold> na videu a poté vyberte <bold>uložit</bold>.", "1": "Na Androidu klikněte na tlačítko stahování, poté na nové stránce <bold>klepněte a podržte</bold> na videu a poté vyberte <bold>uložit</bold>.",
"shortTitle": "Stahování / Android", "shortTitle": "Stahování / Android",
@ -225,9 +215,7 @@
"title": "Kvalita" "title": "Kvalita"
}, },
"settings": { "settings": {
"captionItem": "Nastavení titulků",
"downloadItem": "Stáhnout", "downloadItem": "Stáhnout",
"enableCaptions": "Povolit titulky",
"experienceSection": "Zážitek sledování", "experienceSection": "Zážitek sledování",
"playbackItem": "Nastavení přehrávání", "playbackItem": "Nastavení přehrávání",
"qualityItem": "Kvalita", "qualityItem": "Kvalita",
@ -249,6 +237,17 @@
}, },
"title": "Zdroje", "title": "Zdroje",
"unknownOption": "Neznámý" "unknownOption": "Neznámý"
},
"subtitles": {
"customizeLabel": "Přizpůsobit",
"offChoice": "Vypnuto",
"settings": {
"backlink": "Vlastní titulky",
"delay": "Posunutí titulků",
"fixCapitals": "Opravit velká písmena"
},
"title": "Titulky",
"unknownLanguage": "Neznámé"
} }
}, },
"metadata": { "metadata": {
@ -371,13 +370,6 @@
}, },
"title": "Vzhled" "title": "Vzhled"
}, },
"captions": {
"backgroundLabel": "Neprůhlednost pozadí",
"colorLabel": "Barva",
"previewQuote": "Nesmím se bát. Strach je zabiják mysli.",
"textSizeLabel": "Velikost písma",
"title": "Titulky"
},
"connections": { "connections": {
"server": { "server": {
"description": "Pokud se chcete připojit k vlastnímu backendu pr ukládání dat, povolte toto a zadejte URL adresu.", "description": "Pokud se chcete připojit k vlastnímu backendu pr ukládání dat, povolte toto a zadejte URL adresu.",
@ -415,6 +407,11 @@
"userId": "Uživatelské ID" "userId": "Uživatelské ID"
} }
}, },
"subtitles": {
"previewQuote": "Nesmím se bát. Strach je zabiják mysli.",
"textSizeLabel": "Velikost textu",
"title": "Titulky"
},
"unsaved": "Máte neuložené změny" "unsaved": "Máte neuložené změny"
} }
} }

View File

@ -3,15 +3,15 @@
"description": "movie-web ist eine Web-App, welche das Internet nach Streams durchsucht. Das Team versucht einen minimalistischen Ansatz umzusetzen.", "description": "movie-web ist eine Web-App, welche das Internet nach Streams durchsucht. Das Team versucht einen minimalistischen Ansatz umzusetzen.",
"faqTitle": "Häufig gestellte Fragen", "faqTitle": "Häufig gestellte Fragen",
"q1": { "q1": {
"body": "movie-web hostet keinen eigenen Inhalt. Wenn du auf etwas zum Anschauen klickst, wird das Internet danach durchsucht (Auf dem Ladebildschirm und im Tab \"Videoquellen\" kannst du einstellen, welche Quellen verwendet werden sollen). movie-web lädt keine Videos hoch, alles Videos stammen aus der Suche.", "body": "movie-web hostet keinen eigenen Inhalt. Wenn du auf etwas zum Anschauen klickst, wird das Internet danach durchsucht (Auf dem Ladebildschirm und im Tab \"Videoquellen\" kannst du einstellen, welche Quellen verwendet werden sollen). movie-web lädt keine Videos hoch, alleVideos stammen aus der Suche.",
"title": "Woher kommen die Videos?" "title": "Woher stammen die Videos?"
}, },
"q2": { "q2": {
"body": "Das Anfragen von Serien oder Filmen ist nicht möglich. movie-web verwaltet keine Inhalte. Alle Videos stammen vom Quellen aus dem Internet.", "body": "Das Anfragen von Serien oder Filmen ist nicht möglich. movie-web verwaltet keine Inhalte. Alle Videos stammen vom Quellen aus dem Internet.",
"title": "Wo kann ich eine Serie oder einen Film anfragen?" "title": "Wo kann ich eine Serie oder einen Film anfragen?"
}, },
"q3": { "q3": {
"body": "Unsere Suchergebnisse werden von The Movie Database (TMDB) bereitgestellt und angezeigt, egal ob unsere Videoquellen über dieses Video verfügen.", "body": "Unsere Suchergebnisse werden von The Movie Database (TMDB) bereitgestellt und, egal ob unsere Videoquellen über dieses Video verfügen, angezeigt.",
"title": "Die Suche zeigt eine Serie oder einen Film an, warum kann ich den dann nicht abspielen?" "title": "Die Suche zeigt eine Serie oder einen Film an, warum kann ich den dann nicht abspielen?"
}, },
"title": "Über movie-web" "title": "Über movie-web"
@ -25,7 +25,7 @@
"deviceNameLabel": "Gerätename", "deviceNameLabel": "Gerätename",
"deviceNamePlaceholder": "Handy", "deviceNamePlaceholder": "Handy",
"generate": { "generate": {
"description": "Deine Passphrase dient als dein Nutzername und Passwort. Speiche sie sicher ab, damit du dich in deinem Konto anmelden kannst", "description": "Deine Passphrase dient als dein Nutzername und Passwort. Speichere sie sicher ab, damit du dich in deinem Konto anmelden kannst",
"next": "Ich habe meine Passphrase gespeichert", "next": "Ich habe meine Passphrase gespeichert",
"passphraseFrameLabel": "Passphrase", "passphraseFrameLabel": "Passphrase",
"title": "Deine Passphrase" "title": "Deine Passphrase"
@ -44,8 +44,8 @@
"information": { "information": {
"color1": "Profilfarbe 1", "color1": "Profilfarbe 1",
"color2": "Profilfarbe 2", "color2": "Profilfarbe 2",
"header": "Gebe einen Namen für dein Gerät ein und wähle ein Nutzersymbol", "header": "Gebe einen Namen für dein Gerät ein und wähle ein Symbol",
"icon": "Nutzersymbol", "icon": "Symbol",
"next": "Weiter", "next": "Weiter",
"title": "Kontoinformationen" "title": "Kontoinformationen"
} }
@ -55,13 +55,13 @@
"text": "Hast du es korrekt konfiguriert?", "text": "Hast du es korrekt konfiguriert?",
"title": "Server nicht erreichbar" "title": "Server nicht erreichbar"
}, },
"host": "Du verbindest dich mit <0>{{hostname}}</0> - stelle sicher das du dem Server vertraust bevor du ein Konto erstellst", "host": "Du verbindest dich mit <0>{{hostname}}</0> - stelle sicher das du dem Server vertraust, bevor du ein Konto erstellst",
"no": "Zurück", "no": "Zurück",
"title": "Vertraust du diesem Server?", "title": "Vertraust du diesem Server?",
"yes": "Ich vertraue diesem Server" "yes": "Ich vertraue diesem Server"
}, },
"verify": { "verify": {
"description": "Bitte gebe deine Passphrase vom früheren Schritt an, um zu bestätigen, dass du sie gespeichert hast und um dein Konto zu erstellen", "description": "Bitte gebe deine Passphrase ein, um zu bestätigen, dass du sie gespeichert hast und um dein Konto zu erstellen",
"invalidData": "Daten sind ungültig", "invalidData": "Daten sind ungültig",
"noMatch": "Passphrasen stimmen nicht überein", "noMatch": "Passphrasen stimmen nicht überein",
"passphraseLabel": "Deine 12-Wort Passphrase", "passphraseLabel": "Deine 12-Wort Passphrase",
@ -111,25 +111,25 @@
"stopEditing": "Bearbeiten beenden" "stopEditing": "Bearbeiten beenden"
}, },
"search": { "search": {
"allResults": "Das ist alles, was wir haben!", "allResults": "Das ist alles!",
"failed": "Das Medium wurde nicht gefunden, bitte versuchen Sie es erneut!", "failed": "Das Medium wurde nicht gefunden, bitte versuchen Sie es erneut!",
"loading": "Wird geladen...", "loading": "Wird geladen...",
"noResults": "Wir haben nichts gefunden!", "noResults": "Wir haben nichts gefunden!",
"placeholder": "Was willst du gucken?", "placeholder": "Was möchtest du schauen?",
"sectionTitle": "Suchergebnisse" "sectionTitle": "Suchergebnisse"
}, },
"titles": { "titles": {
"day": { "day": {
"default": "Was würdest du diesen Nachmittag gerne schauen?" "default": "Was würdest du diesem Nachmittag gerne schauen?"
}, },
"morning": { "morning": {
"default": "Was würdest du diesen Morgen gerne schauen?", "default": "Was würdest du diesen Morgen gerne schauen?",
"extra": [ "extra": [
"Ich hab gehört Before Sunrise soll gut sein" "Before Sunrise soll gut sein"
] ]
}, },
"night": { "night": {
"default": "Was würdest du diesen Abend gerne schauen?", "default": "Was möchtest du diesen Abend gerne schauen?",
"extra": [ "extra": [
"Müde? Ich hab gehört The Exorcist soll gut sein." "Müde? Ich hab gehört The Exorcist soll gut sein."
] ]
@ -159,7 +159,7 @@
"notFound": { "notFound": {
"badge": "Nicht gefunden", "badge": "Nicht gefunden",
"goHome": "Zurück zur Startseite", "goHome": "Zurück zur Startseite",
"message": "Wir haben überall gesucht: Unter den Eimern, im Schrank, hinter der Proxy, aber am Ende konnten wir die gesuchte Seite nicht finden.", "message": "Wir haben überall gesucht: Unter den Eimern, im Schrank, hinter dem Proxy. Wir konnten die gesuchte Seite nicht finden.",
"title": "Diese Seite wurde nicht gefunden" "title": "Diese Seite wurde nicht gefunden"
}, },
"overlays": { "overlays": {
@ -168,27 +168,17 @@
"player": { "player": {
"back": { "back": {
"default": "Zurück zur Startseite", "default": "Zurück zur Startseite",
"short": "Rückmeldung" "short": "Zurück"
}, },
"casting": { "casting": {
"enabled": "Casting zum Gerät..." "enabled": "Casting zum Gerät..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Untertitel hochladen",
"customizeLabel": "Bearbeiten",
"offChoice": "Aus",
"settings": {
"delay": "Untertitelverzögerung",
"fixCapitals": "Großschreibung korrigieren"
},
"title": "Untertitel",
"unknownLanguage": "Unbekannt"
},
"downloads": { "downloads": {
"disclaimer": "Videos werden direkt vom Provider heruntergeladen. movie-web hat nicht steuern, wie die Downloads bereitgestellt werden.", "disclaimer": "Videos werden direkt vom Provider heruntergeladen. movie-web hat keinen Einfluss darauf, wie Downloads bereitgestellt werden.",
"downloadCaption": "Ausgewählte Untertitel herunterladen", "downloadPlaylist": "Playlist herunterladen",
"downloadVideo": "Video herunterladen", "downloadVideo": "Video herunterladen",
"hlsDisclaimer": "movie-web hat keinen Einfluss darauf, wie Downloads bereitgestellt werden. Downloads werden direkt vom Anbieter bezogen. Bitte beachte, dass du eine HLS-Wiedergabeliste herunterlädst, diese ist für Nutzer gedacht, die mit fortgeschrittenem Multimedia-Streaming vertraut sind.",
"onAndroid": { "onAndroid": {
"1": "Um auf Android Herunterzuladen, tippe auf den Download-Button, <bold>tippe und halte</bold> auf der neuen Seite auf das Video und wähle <bold>Speichern</bold> aus.", "1": "Um auf Android Herunterzuladen, tippe auf den Download-Button, <bold>tippe und halte</bold> auf der neuen Seite auf das Video und wähle <bold>Speichern</bold> aus.",
"shortTitle": "Download / Android", "shortTitle": "Download / Android",
@ -225,9 +215,7 @@
"title": "Qualität" "title": "Qualität"
}, },
"settings": { "settings": {
"captionItem": "Untertiteleinstellungen",
"downloadItem": "Download", "downloadItem": "Download",
"enableCaptions": "Untertitel aktivieren",
"experienceSection": "Anzeigeerlebnis", "experienceSection": "Anzeigeerlebnis",
"playbackItem": "Wiedergabeeinstellungen", "playbackItem": "Wiedergabeeinstellungen",
"qualityItem": "Qualität", "qualityItem": "Qualität",
@ -249,6 +237,17 @@
}, },
"title": "Quellen", "title": "Quellen",
"unknownOption": "Unbekannt" "unknownOption": "Unbekannt"
},
"subtitles": {
"customizeLabel": "Anpassen",
"offChoice": "Aus",
"settings": {
"backlink": "Eigene Untertitel",
"delay": "Untertitelverzögerung",
"fixCapitals": "Großschreibung korrigieren"
},
"title": "Untertitel",
"unknownLanguage": "Unbekannt"
} }
}, },
"metadata": { "metadata": {
@ -261,8 +260,8 @@
"notFound": { "notFound": {
"badge": "Nicht gefunden", "badge": "Nicht gefunden",
"homeButton": "Zurück zur Startseite", "homeButton": "Zurück zur Startseite",
"text": "Wir konnten das angeforderte Medium nicht finden.", "text": "Wir konnten das angeforderte Video nicht finden.",
"title": "Das Medium konnte nicht gefunden werden." "title": "Das Video konnte nicht gefunden werden."
} }
}, },
"nextEpisode": { "nextEpisode": {
@ -273,13 +272,13 @@
"badge": "Wiedergabefehler", "badge": "Wiedergabefehler",
"errors": { "errors": {
"errorAborted": "Das Laden des Videos wurde vom Nutzer abgebrochen.", "errorAborted": "Das Laden des Videos wurde vom Nutzer abgebrochen.",
"errorDecode": "Trotz vorheriger Feststellung der Nutzbarkeit trat ein Fehler beim Versuch auf, die Mediumdatei zu decodieren, was zu einem Fehler führte.", "errorDecode": "Beim Versuch, das Video zu dekodieren, ist ein Fehler aufgetreten, obwohl sie zuvor als brauchbar eingestuft worden war.",
"errorGenericMedia": "Unbekannter Videofehler ist aufgetreten.", "errorGenericMedia": "Unbekannter Videofehler ist aufgetreten.",
"errorNetwork": "Es ist ein Netzwerkfehler aufgetreten, der das erfolgreiche Abrufen des Mediums verhinderte, obwohl es zuvor verfügbar war.", "errorNetwork": "Es ist ein Netzwerkfehler aufgetreten, der verhindert hat, dass das Video erfolgreich abgerufen werden konnten, obwohl es verfügbar waren.",
"errorNotSupported": "Das Medium- oder Mediumanbieterobjekt wird nicht unterstützt." "errorNotSupported": "Das Video- oder Videoanbieter wird nicht unterstützt."
}, },
"homeButton": "Zurück zur Startseite", "homeButton": "Zurück zur Startseite",
"text": "Ein Fehler ist während der Wiedergabe aufgetreten. Versuche es erneut.", "text": "Während der Wiedergabe ist ein Fehler aufgetreten. Versuche es erneut.",
"title": "Hoppla, etwas ist schiefgegangen!" "title": "Hoppla, etwas ist schiefgegangen!"
}, },
"scraping": { "scraping": {
@ -292,7 +291,7 @@
"badge": "Nicht gefunden", "badge": "Nicht gefunden",
"detailsButton": "Details anzeigen", "detailsButton": "Details anzeigen",
"homeButton": "Zurück zur Startseite", "homeButton": "Zurück zur Startseite",
"text": "Wir haben alle Anbieter durchsucht, konnten aber nicht das Video finden nach dem du suchst! Wir stellen keine eigenen Videos bereit und haben keine Kontrolle darüber, was verfügbar ist. Bitte klicke \"Details anzeigen\" für mehr Details.", "text": "Wir haben alle Anbieter durchsucht, konnten aber nicht das Video finden nach dem du suchst! Wir stellen keine eigenen Videos bereit und haben keine Kontrolle darüber, was verfügbar ist. Bitte klicke auf \"Details anzeigen\" für mehr Details.",
"title": "Wir konnten das nicht finden" "title": "Wir konnten das nicht finden"
} }
}, },
@ -351,7 +350,7 @@
"firstColor": "Profilfarbe 1", "firstColor": "Profilfarbe 1",
"secondColor": "Profilfarbe 2", "secondColor": "Profilfarbe 2",
"title": "Profilbild bearbeiten", "title": "Profilbild bearbeiten",
"userIcon": "Nutzersymbol" "userIcon": "Symbol"
}, },
"register": { "register": {
"cta": "Los geht's", "cta": "Los geht's",
@ -371,20 +370,13 @@
}, },
"title": "Aussehen" "title": "Aussehen"
}, },
"captions": {
"backgroundLabel": "Hintergrund-Deckkraft",
"colorLabel": "Farbe",
"previewQuote": "Das Gras wächst nicht schneller, wenn man daran zieht.",
"textSizeLabel": "Schriftgröße",
"title": "Untertitel"
},
"connections": { "connections": {
"server": { "server": {
"description": "Falls du dich mit einem anderen Server verbinden willst, um deine Daten zu speichern. Aktiviere dies und gebe die URL an.", "description": "Falls du dich mit einem anderen Server verbinden willst, um deine Daten zu speichern. Aktiviere dies und gebe die URL an.",
"label": "Eigener Server", "label": "Eigener Server",
"urlLabel": "Eigene Server-URL" "urlLabel": "Eigene Server-URL"
}, },
"title": "Verbindungen", "title": "Verbindung",
"workers": { "workers": {
"addButton": "Neuen Worker hinzufügen", "addButton": "Neuen Worker hinzufügen",
"description": "Damit die App funktioniert werden alle Anfrage durch einen Proxy geleitet. Aktiviere dies, falls du deinen eigenen Worker verwenden willst.", "description": "Damit die App funktioniert werden alle Anfrage durch einen Proxy geleitet. Aktiviere dies, falls du deinen eigenen Worker verwenden willst.",
@ -415,6 +407,11 @@
"userId": "Nutzer-ID" "userId": "Nutzer-ID"
} }
}, },
"subtitles": {
"previewQuote": "Das Gras wächst nicht schneller, wenn man daran zieht.",
"textSizeLabel": "Schriftgröße",
"title": "Untertitel"
},
"unsaved": "Du hast ungespeicherte Änderungen" "unsaved": "Du hast ungespeicherte Änderungen"
} }
} }

View File

@ -1,150 +1,180 @@
{ {
"about": {
"description": "movie-web is a web application that searches the internet for streams. The team aims for a mostly minimalistic approach to consuming content.",
"faqTitle": "Common questions",
"q1": {
"body": "movie-web does not host any content. When you click on something to watch, the internet is searched for the selected media (On the loading screen and in the 'video sources' tab you can see which source you're using). Media never gets uploaded by movie-web, everything is through this searching mechanism.",
"title": "Where does the content come from?"
},
"q2": {
"body": "It's not possible to request a show or movie, movie-web does not manage any content. All content is viewed through sources on the internet.",
"title": "Where can I request a show or movie?"
},
"q3": {
"body": "Our search results are powered by The Movie Database (TMDB) and display regardless of whether our sources actually have the content.",
"title": "The search results display the show or movie, why can't I play it?"
},
"title": "About movie-web"
},
"actions": {
"copied": "Copied",
"copy": "Copy"
},
"auth": { "auth": {
"createAccount": "Don't have an account yet? <0>Create an account.</0>",
"deviceNameLabel": "Device name", "deviceNameLabel": "Device name",
"deviceNamePlaceholder": "Personal phone", "deviceNamePlaceholder": "Personal phone",
"generate": {
"description": "Your passphrase acts as your username and password. Make sure to keep it safe as you will need to enter it to login to your account",
"next": "I have saved my passphrase",
"passphraseFrameLabel": "Passphrase",
"title": "Your passphrase"
},
"hasAccount": "Already have an account? <0>Login here.</0>", "hasAccount": "Already have an account? <0>Login here.</0>",
"createAccount": "Don't have an account yet? <0>Create an account.</0>", "login": {
"description": "Please enter your passphrase to login to your account",
"deviceLengthError": "Please enter a device name",
"passphraseLabel": "12-Word passphrase",
"passphrasePlaceholder": "Passphrase",
"submit": "Login",
"title": "Login to your account",
"validationError": "Incorrect or incomplete passphrase"
},
"register": { "register": {
"information": { "information": {
"title": "Account information",
"color1": "Profile color one", "color1": "Profile color one",
"color2": "Profile color two", "color2": "Profile color two",
"icon": "User icon",
"header": "Enter a name for your device and pick colours and a user icon of your choosing", "header": "Enter a name for your device and pick colours and a user icon of your choosing",
"next": "Next" "icon": "User icon",
"next": "Next",
"title": "Account information"
} }
}, },
"login": {
"title": "Login to your account",
"description": "Please enter your passphrase to login to your account",
"validationError": "Incorrect or incomplete passphrase",
"deviceLengthError": "Please enter a device name",
"submit": "Login",
"passphraseLabel": "12-Word passphrase",
"passphrasePlaceholder": "Passphrase"
},
"generate": {
"title": "Your passphrase",
"passphraseFrameLabel": "Passphrase",
"next": "I have saved my passphrase",
"description": "Your passphrase acts as your username and password. Make sure to keep it safe as you will need to enter it to login to your account"
},
"trust": { "trust": {
"title": "Do you trust this server?",
"host": "You are connecting to <0>{{hostname}}</0> - please confirm you trust it before making an account",
"failed": { "failed": {
"title": "Failed to reach server", "text": "Did you configure it correctly?",
"text": "Did you configure it correctly?" "title": "Failed to reach server"
}, },
"yes": "I trust this server", "host": "You are connecting to <0>{{hostname}}</0> - please confirm you trust it before making an account",
"no": "Go back" "no": "Go back",
"title": "Do you trust this server?",
"yes": "I trust this server"
}, },
"verify": { "verify": {
"title": "Confirm your passphrase",
"description": "Please enter your passphrase from earlier to confirm you have saved it and to create your account", "description": "Please enter your passphrase from earlier to confirm you have saved it and to create your account",
"invalidData": "Data is not valid", "invalidData": "Data is not valid",
"noMatch": "Passphrase doesn't match", "noMatch": "Passphrase doesn't match",
"recaptchaFailed": "ReCaptcha validation failed",
"passphraseLabel": "Your 12-word passphrase", "passphraseLabel": "Your 12-word passphrase",
"register": "Create account" "recaptchaFailed": "ReCaptcha validation failed",
"register": "Create account",
"title": "Confirm your passphrase"
} }
}, },
"errors": { "errors": {
"badge": "It broke",
"details": "Error details", "details": "Error details",
"reloadPage": "Reload the page", "reloadPage": "Reload the page",
"showError": "Show error details", "showError": "Show error details",
"badge": "It broke",
"title": "We encountered an error!" "title": "We encountered an error!"
}, },
"notFound": { "footer": {
"badge": "Not found", "legal": {
"title": "Couldn't find that page", "disclaimer": "Disclaimer",
"message": "We looked everywhere: under the bins, in the closet, behind the proxy but ultimately couldn't find the page you are looking for.", "disclaimerText": "movie-web does not host any files, it merely links to 3rd party services. Legal issues should be taken up with the file hosts and providers. movie-web is not responsible for any media files shown by the video providers."
"goHome": "Back to home" },
"links": {
"discord": "Discord",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "Watch your favourite shows and movies with this open source streaming app."
}, },
"global": { "global": {
"name": "movie-web", "name": "movie-web",
"pages": { "pages": {
"pagetitle": "{{title}} - movie-web",
"dmca": "DMCA",
"settings": "Settings",
"about": "About", "about": "About",
"dmca": "DMCA",
"login": "Login", "login": "Login",
"register": "Register" "pagetitle": "{{title}} - movie-web",
"register": "Register",
"settings": "Settings"
}
},
"home": {
"bookmarks": {
"sectionTitle": "Bookmarks"
},
"continueWatching": {
"sectionTitle": "Continue Watching"
},
"mediaList": {
"stopEditing": "Stop editing"
},
"search": {
"allResults": "That's all we have!",
"failed": "Failed to find media, try again!",
"loading": "Loading...",
"noResults": "We couldn't find anything!",
"placeholder": "What do you want to watch?",
"sectionTitle": "Search results"
},
"titles": {
"day": {
"default": "What would you like to watch this afternoon?"
},
"morning": {
"default": "What would you like to watch this morning?",
"extra": ["I hear Before Sunrise is good"]
},
"night": {
"default": "What would you like to watch tonight?",
"extra": ["Tired? I hear The Exorcist is good."]
}
} }
}, },
"media": { "media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": { "types": {
"movie": "Movie", "movie": "Movie",
"show": "Show" "show": "Show"
}
},
"navigation": {
"banner": {
"offline": "Check your internet connection"
}, },
"episodeDisplay": "S{{season}} E{{episode}}" "menu": {
"about": "About us",
"donation": "Donate",
"logout": "Log out",
"register": "Sync to cloud",
"settings": "Settings",
"support": "Support"
}
},
"notFound": {
"badge": "Not found",
"goHome": "Back to home",
"message": "We looked everywhere: under the bins, in the closet, behind the proxy but ultimately couldn't find the page you are looking for.",
"title": "Couldn't find that page"
},
"overlays": {
"close": "Close"
}, },
"player": { "player": {
"scraping": {
"notFound": {
"badge": "Not found",
"title": "We couldn't find that",
"text": "We have searched through our providers and cannot find the media you are looking for! We do not host the media and have no control over what is available. Please click 'Show details' below for more details.",
"homeButton": "Go home",
"detailsButton": "Show details"
},
"items": {
"pending": "Checking for videos...",
"notFound": "Doesn't have the video",
"failure": "Error occurred"
}
},
"casting": {
"enabled": "Casting to device..."
},
"playbackError": {
"badge": "Playback error",
"title": "Failed to play video!",
"text": "There was an error trying to play the media. Please try again.",
"homeButton": "Go home",
"errors": {
"errorAborted": "The fetching of the media was aborted by the user's request.",
"errorNetwork": "Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.",
"errorDecode": "Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.",
"errorNotSupported": "The media or media provider object is not supported.",
"errorGenericMedia": "Unknown media error occurred."
}
},
"metadata": {
"notFound": {
"badge": "Not found",
"title": "Couldn't find that media.",
"text": "We couldn't find the media you requested. Either it's been removed or you tampered with the URL.",
"homeButton": "Back to home"
},
"failed": {
"badge": "Failed",
"title": "Failed to load metadata",
"text": "Could not load the media's metadata from TMDB. Please check whether TMDB is down or blocked on your internet connection.",
"homeButton": "Go home"
}
},
"back": { "back": {
"default": "Back to home", "default": "Back to home",
"short": "Back" "short": "Back"
}, },
"time": { "casting": {
"regular": "{{timeWatched}} / {{duration}}", "enabled": "Casting to device..."
"shortRegular": "{{timeWatched}}",
"remaining": "{{timeLeft}} left • Finish at {{timeFinished, datetime}}",
"shortRemaining": "-{{timeLeft}}"
},
"nextEpisode": {
"next": "Next episode",
"cancel": "Cancel"
}, },
"menus": { "menus": {
"settings": { "settings": {
"videoSection": "Video settings", "videoSection": "Video settings",
"experienceSection": "Viewing experience", "experienceSection": "Viewing experience",
"enableCaptions": "Enable captions", "enableSubtitles": "Enable Subtitles",
"captionItem": "Caption settings", "subtitleItem": "Subtitle settings",
"sourceItem": "Video sources", "sourceItem": "Video sources",
"playbackItem": "Playback settings", "playbackItem": "Playback settings",
"downloadItem": "Download", "downloadItem": "Download",
@ -174,246 +204,216 @@
"text": "There was an error while trying to find any videos, please try a different source." "text": "There was an error while trying to find any videos, please try a different source."
} }
}, },
"captions": { "subtitles": {
"title": "Captions", "title": "Subtitles",
"customizeLabel": "Customize", "customizeLabel": "Customize",
"settings": { "settings": {
"fixCapitals": "Fix capitalization", "fixCapitals": "Fix capitalization",
"delay": "Caption delay" "delay": "Subtitle delay",
"backlink": "Custom subtitles"
}, },
"customChoice": "Select caption from file", "customChoice": "Select subtitle from file",
"offChoice": "Off", "offChoice": "Off",
"unknownLanguage": "Unknown" "unknownLanguage": "Unknown"
}, },
"downloads": { "downloads": {
"title": "Download",
"disclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided.", "disclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided.",
"hlsDisclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided. Please note that you are downloading an HLS playlist, this is intended for users familiar with advanced multimedia streaming.", "downloadSubtitle": "Download current subtitle",
"downloadVideo": "Download video",
"downloadPlaylist": "Download playlist", "downloadPlaylist": "Download playlist",
"downloadCaption": "Download current caption", "downloadVideo": "Download video",
"onPc": { "hlsDisclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided. Please note that you are downloading an HLS playlist, this is intended for users familiar with advanced multimedia streaming.",
"1": "On PC, click the download button then, on the new page, right click the video and select <bold>Save video as</bold>",
"title": "Downloading on PC",
"shortTitle": "Download / PC"
},
"onAndroid": { "onAndroid": {
"1": "To download on Android, click the download button then, on the new page, <bold>tap and hold</bold> on the video, then select <bold>save</bold>.", "1": "To download on Android, click the download button then, on the new page, <bold>tap and hold</bold> on the video, then select <bold>save</bold>.",
"title": "Downloading on Android", "shortTitle": "Download / Android",
"shortTitle": "Download / Android" "title": "Downloading on Android"
}, },
"onIos": { "onIos": {
"1": "To download on iOS, click the download button then, on the new page, click <bold><ios_share /></bold>, then <bold>Save to Files <ios_files /></bold>.", "1": "To download on iOS, click the download button then, on the new page, click <bold><ios_share /></bold>, then <bold>Save to Files <ios_files /></bold>.",
"title": "Downloading on iOS", "shortTitle": "Download / iOS",
"shortTitle": "Download / iOS" "title": "Downloading on iOS"
} },
"onPc": {
"1": "On PC, click the download button then, on the new page, right click the video and select <bold>Save video as</bold>",
"shortTitle": "Download / PC",
"title": "Downloading on PC"
},
"title": "Download"
}, },
"playback": { "playback": {
"title": "Playback settings", "speedLabel": "Playback speed",
"speedLabel": "Playback speed" "title": "Playback settings"
}, },
"quality": { "quality": {
"title": "Quality",
"automaticLabel": "Automatic quality", "automaticLabel": "Automatic quality",
"hint": "You can try <0>switching source</0> to get different quality options.", "hint": "You can try <0>switching source</0> to get different quality options.",
"iosNoQuality": "Due to Apple-defined limitations, quality selection is not available on iOS for this source. You can try <0>switching to another source</0> to get different quality options." "iosNoQuality": "Due to Apple-defined limitations, quality selection is not available on iOS for this source. You can try <0>switching to another source</0> to get different quality options.",
} "title": "Quality"
}
},
"home": {
"mediaList": {
"stopEditing": "Stop editing"
},
"titles": {
"morning": {
"default": "What would you like to watch this morning?",
"extra": ["I hear Before Sunrise is good"]
},
"day": {
"default": "What would you like to watch this afternoon?",
"extra": []
},
"night": {
"default": "What would you like to watch tonight?",
"extra": ["Tired? I hear The Exorcist is good."]
} }
}, },
"search": { "metadata": {
"loading": "Loading...", "failed": {
"sectionTitle": "Search results", "badge": "Failed",
"allResults": "That's all we have!", "homeButton": "Go home",
"noResults": "We couldn't find anything!", "text": "Could not load the media's metadata from TMDB. Please check whether TMDB is down or blocked on your internet connection.",
"failed": "Failed to find media, try again!", "title": "Failed to load metadata"
"placeholder": "What do you want to watch?" },
"notFound": {
"badge": "Not found",
"homeButton": "Back to home",
"text": "We couldn't find the media you requested. Either it's been removed or you tampered with the URL.",
"title": "Couldn't find that media."
}
}, },
"continueWatching": { "nextEpisode": {
"sectionTitle": "Continue Watching" "cancel": "Cancel",
"next": "Next episode"
}, },
"bookmarks": { "playbackError": {
"sectionTitle": "Bookmarks" "badge": "Playback error",
"errors": {
"errorAborted": "The fetching of the media was aborted by the user's request.",
"errorDecode": "Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.",
"errorGenericMedia": "Unknown media error occurred.",
"errorNetwork": "Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.",
"errorNotSupported": "The media or media provider object is not supported."
},
"homeButton": "Go home",
"text": "There was an error trying to play the media. Please try again.",
"title": "Failed to play video!"
},
"scraping": {
"items": {
"failure": "Error occurred",
"notFound": "Doesn't have the video",
"pending": "Checking for videos..."
},
"notFound": {
"badge": "Not found",
"detailsButton": "Show details",
"homeButton": "Go home",
"text": "We have searched through our providers and cannot find the media you are looking for! We do not host the media and have no control over what is available. Please click 'Show details' below for more details.",
"title": "We couldn't find that"
}
},
"time": {
"regular": "{{timeWatched}} / {{duration}}",
"remaining": "{{timeLeft}} left • Finish at {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
} }
}, },
"overlays": {
"close": "Close"
},
"screens": { "screens": {
"loadingUser": "Loading your profile", "dmca": {
"text": "Welcome to movie-web's DMCA contact page! We respect intellectual property rights and want to address any copyright concerns swiftly. If you believe your copyrighted work has been improperly used on our platform, please send a detailed DMCA notice to the email below. Please include a description of the copyrighted material, your contact details, and a statement of good faith belief. We're committed to resolving these matters promptly and appreciate your cooperation in keeping movie-web a place that respects creativity and copyrights.",
"title": "DMCA"
},
"loadingApp": "Loading application", "loadingApp": "Loading application",
"loadingUser": "Loading your profile",
"loadingUserError": { "loadingUserError": {
"text": "Failed to load your profile", "logout": "Logout",
"textWithReset": "Failed to load your profile from your custom server, want to reset back to the default server?",
"reset": "Reset custom server", "reset": "Reset custom server",
"logout": "Logout" "text": "Failed to load your profile",
"textWithReset": "Failed to load your profile from your custom server, want to reset back to the default server?"
}, },
"migration": { "migration": {
"failed": "Failed to migrate your data.", "failed": "Failed to migrate your data.",
"inProgress": "Please hold, we are migrating your data. This shouldn't take long." "inProgress": "Please hold, we are migrating your data. This shouldn't take long."
},
"dmca": {
"title": "DMCA",
"text": "Welcome to movie-web's DMCA contact page! We respect intellectual property rights and want to address any copyright concerns swiftly. If you believe your copyrighted work has been improperly used on our platform, please send a detailed DMCA notice to the email below. Please include a description of the copyrighted material, your contact details, and a statement of good faith belief. We're committed to resolving these matters promptly and appreciate your cooperation in keeping movie-web a place that respects creativity and copyrights."
} }
}, },
"navigation": {
"banner": {
"offline": "Check your internet connection"
},
"menu": {
"register": "Sync to cloud",
"settings": "Settings",
"about": "About us",
"donation": "Donate",
"support": "Support",
"logout": "Log out"
}
},
"actions": {
"copy": "Copy",
"copied": "Copied"
},
"settings": { "settings": {
"unsaved": "You have unsaved changes", "account": {
"accountDetails": {
"deviceNameLabel": "Device name",
"deviceNamePlaceholder": "Personal phone",
"editProfile": "Edit",
"logoutButton": "Log out"
},
"actions": {
"delete": {
"button": "Delete account",
"confirmButton": "Delete account",
"confirmDescription": "Are you sure you want to delete your account? All your data will be lost!",
"confirmTitle": "Are you sure?",
"text": "This action is irreversible. All data will be deleted and nothing can be recovered.",
"title": "Delete account"
},
"title": "Actions"
},
"devices": {
"deviceNameLabel": "Device name",
"failed": "Failed to load sessions",
"removeDevice": "Remove",
"title": "Devices"
},
"profile": {
"finish": "Finish editing",
"firstColor": "Profile color one",
"secondColor": "Profile color two",
"title": "Edit profile picture",
"userIcon": "User icon"
},
"register": {
"cta": "Get started",
"text": "Share your watch progress between devices and keep them synced.",
"title": "Sync to the cloud"
},
"title": "Account"
},
"appearance": {
"activeTheme": "Active",
"themes": {
"blue": "Blue",
"default": "Default",
"gray": "Gray",
"red": "Red",
"teal": "Teal"
},
"title": "Appearance"
},
"subtitles": {
"title": "Subtitles",
"previewQuote": "I must not fear. Fear is the mind-killer.",
"textSizeLabel": "Text size",
"backgroundLabel": "Background opacity",
"colorLabel": "Color"
},
"connections": {
"server": {
"description": "If you would like to connect to a custom backend to store your data, enable this and provide the URL.",
"label": "Custom server",
"urlLabel": "Custom server URL"
},
"title": "Connections",
"workers": {
"addButton": "Add new worker",
"description": "To make the application function, all traffic is routed through proxies. Enable this if you want to bring your own workers.",
"emptyState": "No workers yet, add one below",
"label": "Use custom proxy workers",
"urlLabel": "Worker URLs",
"urlPlaceholder": "https://"
}
},
"locale": {
"language": "Application language",
"languageDescription": "Language applied to the entire application.",
"title": "Locale"
},
"reset": "Reset", "reset": "Reset",
"save": "Save", "save": "Save",
"sidebar": { "sidebar": {
"info": { "info": {
"title": "App information",
"hostname": "Hostname",
"backendUrl": "Backend URL",
"userId": "User ID",
"notLoggedIn": "You are not logged in",
"appVersion": "App version", "appVersion": "App version",
"backendUrl": "Backend URL",
"backendVersion": "Backend version", "backendVersion": "Backend version",
"unknownVersion": "Unknown", "hostname": "Hostname",
"insecure": "Insecure",
"notLoggedIn": "You are not logged in",
"secure": "Secure", "secure": "Secure",
"insecure": "Insecure" "title": "App information",
"unknownVersion": "Unknown",
"userId": "User ID"
} }
}, },
"appearance": { "unsaved": "You have unsaved changes"
"title": "Appearance",
"activeTheme": "Active",
"themes": {
"default": "Default",
"blue": "Blue",
"teal": "Teal",
"red": "Red",
"gray": "Gray"
}
},
"account": {
"title": "Account",
"register": {
"title": "Sync to the cloud",
"text": "Share your watch progress between devices and keep them synced.",
"cta": "Get started"
},
"profile": {
"title": "Edit profile picture",
"firstColor": "Profile color one",
"secondColor": "Profile color two",
"userIcon": "User icon",
"finish": "Finish editing"
},
"devices": {
"title": "Devices",
"failed": "Failed to load sessions",
"deviceNameLabel": "Device name",
"removeDevice": "Remove"
},
"accountDetails": {
"editProfile": "Edit",
"deviceNameLabel": "Device name",
"deviceNamePlaceholder": "Personal phone",
"logoutButton": "Log out"
},
"actions": {
"title": "Actions",
"delete": {
"title": "Delete account",
"text": "This action is irreversible. All data will be deleted and nothing can be recovered.",
"button": "Delete account",
"confirmTitle": "Are you sure?",
"confirmDescription": "Are you sure you want to delete your account? All your data will be lost!",
"confirmButton": "Delete account"
}
}
},
"locale": {
"title": "Locale",
"language": "Application language",
"languageDescription": "Language applied to the entire application."
},
"captions": {
"title": "Captions",
"previewQuote": "I must not fear. Fear is the mind-killer.",
"backgroundLabel": "Background opacity",
"textSizeLabel": "Text size",
"colorLabel": "Color"
},
"connections": {
"title": "Connections",
"workers": {
"label": "Use custom proxy workers",
"description": "To make the application function, all traffic is routed through proxies. Enable this if you want to bring your own workers.",
"urlLabel": "Worker URLs",
"emptyState": "No workers yet, add one below",
"urlPlaceholder": "https://",
"addButton": "Add new worker"
},
"server": {
"label": "Custom server",
"description": "If you would like to connect to a custom backend to store your data, enable this and provide the URL.",
"urlLabel": "Custom server URL"
}
}
},
"about": {
"title": "About movie-web",
"description": "movie-web is a web application that searches the internet for streams. The team aims for a mostly minimalistic approach to consuming content.",
"faqTitle": "Common questions",
"q1": {
"title": "Where does the content come from?",
"body": "movie-web does not host any content. When you click on something to watch, the internet is searched for the selected media (On the loading screen and in the 'video sources' tab you can see which source you're using). Media never gets uploaded by movie-web, everything is through this searching mechanism."
},
"q2": {
"title": "Where can I request a show or movie?",
"body": "It's not possible to request a show or movie, movie-web does not manage any content. All content is viewed through sources on the internet."
},
"q3": {
"title": "The search results display the show or movie, why can't I play it?",
"body": "Our search results are powered by The Movie Database (TMDB) and display regardless of whether our sources actually have the content."
}
},
"footer": {
"tagline": "Watch your favourite shows and movies with this open source streaming app.",
"links": {
"github": "GitHub",
"dmca": "DMCA",
"discord": "Discord"
},
"legal": {
"disclaimer": "Disclaimer",
"disclaimerText": "movie-web does not host any files, it merely links to 3rd party services. Legal issues should be taken up with the file hosts and providers. movie-web is not responsible for any media files shown by the video providers."
}
} }
} }

View File

@ -174,20 +174,8 @@
"enabled": "Transmitiendo a dispositivo..." "enabled": "Transmitiendo a dispositivo..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Seleccionar subtítulo desde un archivo",
"customizeLabel": "Personalizar",
"offChoice": "Apagado",
"settings": {
"delay": "Retraso de subtítulos",
"fixCapitals": "Corregir mayúsculas"
},
"title": "Subtítulos",
"unknownLanguage": "Desconocido"
},
"downloads": { "downloads": {
"disclaimer": "Las descargas se realizan directamente desde el proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas.", "disclaimer": "Las descargas se realizan directamente desde el proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas.",
"downloadCaption": "Descargar subtítulo actual",
"downloadVideo": "Descargar vídeo", "downloadVideo": "Descargar vídeo",
"onAndroid": { "onAndroid": {
"1": "Para descargar en Android, haz clic en el botón de descarga y luego, en la nueva página, <bold>mantén presionado</bold> el vídeo y selecciona <bold>guardar</bold>.", "1": "Para descargar en Android, haz clic en el botón de descarga y luego, en la nueva página, <bold>mantén presionado</bold> el vídeo y selecciona <bold>guardar</bold>.",
@ -225,9 +213,7 @@
"title": "Calidad" "title": "Calidad"
}, },
"settings": { "settings": {
"captionItem": "Configuración de subtítulos",
"downloadItem": "Descargar", "downloadItem": "Descargar",
"enableCaptions": "Habilitar subtítulos",
"experienceSection": "Experiencia de visualización", "experienceSection": "Experiencia de visualización",
"playbackItem": "Configuración de reproducción", "playbackItem": "Configuración de reproducción",
"qualityItem": "Calidad", "qualityItem": "Calidad",
@ -371,13 +357,6 @@
}, },
"title": "Apariencia" "title": "Apariencia"
}, },
"captions": {
"backgroundLabel": "Opacidad del fondo",
"colorLabel": "Color",
"previewQuote": "No debo temer. El miedo es el asesino de la mente.",
"textSizeLabel": "Tamaño del texto",
"title": "Subtítulos"
},
"connections": { "connections": {
"server": { "server": {
"description": "Si deseas conectarte a un backend personalizado para almacenar tus datos, habilita esto y proporciona la URL.", "description": "Si deseas conectarte a un backend personalizado para almacenar tus datos, habilita esto y proporciona la URL.",

View File

@ -1,32 +1,44 @@
{ {
"about": { "about": {
"description": "movie-web on veebirakendus, mis otsib internetti voogude jaoks. Meeskonna eesmärk on enamasti minimalistlik lähenemine sisu tarbimisele.", "description": "movie-web on veebirakendus, mis otsib internetti voogude jaoks. Meeskonna eesmärk on enamasti minimalistlik lähenemine sisu tarbimisele.",
"faqTitle": "Tihti küsitud küsimused",
"q1": { "q1": {
"body": "movie-web ei hoiusta enda sisu. Kui klõpsate, et midagi vaadata, otsitakse valitud meediat internetist (laadimisekraanil ja vahekaardil \"videoallikad\" näete, millist allikat te kasutate). Meediat ei lae movie-web kunagi üles, kõik toimub selle otsingumehhanismi kaudu." "body": "movie-web ei hoiusta enda sisu. Kui klõpsate, et midagi vaadata, otsitakse valitud meediat internetist (laadimisekraanil ja vahekaardil \"videoallikad\" näete, millist allikat te kasutate). Meediat ei lae movie-web kunagi üles, kõik toimub selle otsingumehhanismi kaudu.",
"title": "Kust tuleb meie sisu?"
}, },
"q2": { "q2": {
"body": "Saadet või filmi ei ole võimalik taotelda, movie-web ei halda mingit sisu. Kogu sisu vaadatakse interneti allikate kaudu." "body": "Saadet või filmi ei ole võimalik taotelda, movie-web ei halda mingit sisu. Kogu sisu vaadatakse interneti allikate kaudu.",
} "title": "Kust ma saan kindlat saadet või filmi paluda?"
},
"q3": {
"body": "Meie otsingutulemusi toetab The Movie Database (TMDB) ja need kuvatakse sõltumata sellest, kas meie allikates on sisu tegelikult olemas.",
"title": "Otsingutulemustes kuvatakse saade või film. Miks ma ei saa seda esitada?"
},
"title": "movie-web'i kohta"
},
"actions": {
"copied": "Kopeeritud",
"copy": "Kopeeri"
}, },
"auth": { "auth": {
"createAccount": "Ei ole kontot veel?<0>Loo konto.</0>", "createAccount": "Ei ole kontot veel?<0>Loo konto.</0>",
"deviceNameLabel": "Seadme nimi", "deviceNameLabel": "Seadme nimi",
"deviceNamePlaceholder": "Isiklik telefon", "deviceNamePlaceholder": "Isiklik telefon",
"generate": { "generate": {
"description": "Teie parool toimib teie kasutajanime ja paroolina. Veenduge, et see oleks ohutus kohas, kuna peate kasutama seda, et logida oma kontosse sisse", "description": "Teie paroolifraas toimib teie kasutajanime ja paroolina. Veenduge, et see oleks ohutus kohas, kuna peate kasutama seda, et logida oma kontosse sisse",
"next": "Olen salvestanud oma parooli", "next": "Olen salvestanud oma paroolifraasi",
"passphraseFrameLabel": "Parool", "passphraseFrameLabel": "Paroolifraas",
"title": "Sinu parool" "title": "Sinu paroolifraas"
}, },
"hasAccount": "On juba konto? <0>Logi sisse siin.</0>", "hasAccount": "On juba konto? <0>Logi sisse.</0>",
"login": { "login": {
"description": "Palun sisestage parool, et logida kontosse sisse", "description": "Palun sisestage paroolifraas, et logida kontosse sisse",
"deviceLengthError": "Palun sisesta seadme nimi", "deviceLengthError": "Palun sisesta seadme nimi",
"passphraseLabel": "12-Sõnaline parool", "passphraseLabel": "12-Sõnaline paroolifraas",
"passphrasePlaceholder": "Parool", "passphrasePlaceholder": "Paroolifraas",
"submit": "Logi sisse", "submit": "Logi sisse",
"title": "Logi sisse oma kontosse", "title": "Logi sisse oma kontosse",
"validationError": "Vale vōi mittetäielik parool" "validationError": "Vale vōi mittetäielik paroolifraas"
}, },
"register": { "register": {
"information": { "information": {
@ -49,13 +61,13 @@
"yes": "Usaldan seda serverit" "yes": "Usaldan seda serverit"
}, },
"verify": { "verify": {
"description": "Palun sisestage oma salasõna, et kinnitada, et olete selle salvestanud ja luua oma konto", "description": "Palun sisestage oma paroolifraas, et kinnitada, et olete selle salvestanud ja luua oma konto",
"invalidData": "Andmed ei kehti", "invalidData": "Andmed ei kehti",
"noMatch": "Parool ei klapi", "noMatch": "Paroolifraas ei klapi",
"passphraseLabel": "Sinu 12-sõnaline parool", "passphraseLabel": "Sinu 12-sõnaline paroolifraas",
"recaptchaFailed": "ReCaptcha valideerimine ebaõnnestua", "recaptchaFailed": "ReCaptcha valideerimine ebaõnnestua",
"register": "Loo konto", "register": "Loo konto",
"title": "Kinnita oma parool" "title": "Kinnita oma paroolifraas"
} }
}, },
"errors": { "errors": {
@ -67,8 +79,15 @@
}, },
"footer": { "footer": {
"legal": { "legal": {
"disclaimer": "Lahtiütlemine",
"disclaimerText": "movie-web ei hoiusta ühtegi faili, vaid ainult lingib kolmandate osapoolte teenustele. Juriidilised küsimused tuleks lahendada failihostide ja teenusepakkujatega. movie-web ei vastuta videopakkujate poolt näidatud meediafailide eest." "disclaimerText": "movie-web ei hoiusta ühtegi faili, vaid ainult lingib kolmandate osapoolte teenustele. Juriidilised küsimused tuleks lahendada failihostide ja teenusepakkujatega. movie-web ei vastuta videopakkujate poolt näidatud meediafailide eest."
} },
"links": {
"discord": "Discord",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "Vaadake selle avatud lähtekoodiga voogesituse rakendusega oma lemmiksaateid ja -filme."
}, },
"global": { "global": {
"name": "movie-web", "name": "movie-web",
@ -124,6 +143,19 @@
"show": "Saade" "show": "Saade"
} }
}, },
"navigation": {
"banner": {
"offline": "Kontrollige oma Interneti-ühendust"
},
"menu": {
"about": "Meie kohta",
"donation": "Anneta",
"logout": "Logi välja",
"register": "Sünkrooni pilvega",
"settings": "Sätted",
"support": "Abi"
}
},
"notFound": { "notFound": {
"badge": "Ei leitud", "badge": "Ei leitud",
"goHome": "Tagasi koju", "goHome": "Tagasi koju",
@ -138,29 +170,22 @@
"default": "Tagasi koju", "default": "Tagasi koju",
"short": "Tagasi" "short": "Tagasi"
}, },
"casting": {
"enabled": "Seadmesse ülekandmine..."
},
"menus": { "menus": {
"captions": {
"customChoice": "Vali subtiitrid failist",
"customizeLabel": "Kohanda",
"offChoice": "Välja",
"settings": {
"delay": "Subtiitri viivitus",
"fixCapitals": "Paranda kapitaliseerimine"
},
"title": "Subtiitrid",
"unknownLanguage": "Teadmata"
},
"downloads": { "downloads": {
"disclaimer": "Allalaadimine toimub otse teenusepakkujalt. movie-web ei saa kontrollida, kuidas allalaadimine toimub.", "disclaimer": "Allalaadimine toimub otse teenusepakkujalt. movie-web ei saa kontrollida, kuidas allalaadimine toimub.",
"downloadCaption": "Lae alla praegused subtiitrid", "downloadPlaylist": "Laadige esitusloend alla",
"downloadVideo": "Lae alla video", "downloadVideo": "Lae alla video",
"hlsDisclaimer": "Allalaadimised võetakse otse teenusepakkujalt. movie-web ei kontrolli, kuidas allalaadimisi pakutakse. Pange tähele, et laadite alla HLS-i esitusloendit, see on mõeldud kasutajatele, kes on tuttavad multimeediumi voogesitusega.",
"onAndroid": { "onAndroid": {
"1": "Et allalaadida Androidi telefonil, vajuta allalaadimise nupule, siis uuel leheküljel <bold>vajuta ja hoia</bold> video peal, siis vali <bold>salvesta</bold>.", "1": "Et allalaadida Androidi telefonil, vajuta allalaadimise nupule, siis uuel leheküljel <bold>vajuta ja hoia</bold> video peal, siis vali <bold>salvesta</bold>.",
"shortTitle": "Allalaadimine / Android", "shortTitle": "Allalaadimine / Android",
"title": "Androidil allalaadimine" "title": "Androidil allalaadimine"
}, },
"onIos": { "onIos": {
"1": "Et allalaadida iOS telefonil, vajuta allalaadimise nupule, siis uuel leheküljel vajuta <bold><ios_share /></bold>, siis <bold>Salvesta failidesse <ios_files /></bold>", "1": "Et allalaadida iOS telefonil, vajuta allalaadimise nupule, siis uuel leheküljel vajuta <bold><ios_share /></bold>, siis <bold>Salvesta failidesse <ios_files /></bold>.",
"shortTitle": "Allalaadimine / iOS", "shortTitle": "Allalaadimine / iOS",
"title": "iOSil allalaadimine" "title": "iOSil allalaadimine"
}, },
@ -190,9 +215,7 @@
"title": "Kvaliteet" "title": "Kvaliteet"
}, },
"settings": { "settings": {
"captionItem": "Subtiitrite sätted",
"downloadItem": "Lae alla", "downloadItem": "Lae alla",
"enableCaptions": "Luba subtiitrid",
"experienceSection": "Vaatamise kogemus", "experienceSection": "Vaatamise kogemus",
"playbackItem": "Taasesituse sätted", "playbackItem": "Taasesituse sätted",
"qualityItem": "Kvaliteet", "qualityItem": "Kvaliteet",
@ -214,6 +237,17 @@
}, },
"title": "Allikad", "title": "Allikad",
"unknownOption": "Teadmata" "unknownOption": "Teadmata"
},
"subtitles": {
"customizeLabel": "Kohanda",
"offChoice": "Välja",
"settings": {
"backlink": "Kohandatud Subtiitrid",
"delay": "Subtiitrite viivitus",
"fixCapitals": "Parandage suurtähtede kasutamine"
},
"title": "Subtiitrid",
"unknownLanguage": "Tundmatu"
} }
}, },
"metadata": { "metadata": {
@ -270,12 +304,114 @@
}, },
"screens": { "screens": {
"dmca": { "dmca": {
"text": "Tere tulemast movie-webi DMCA kontaktilehele! Me austame intellektuaalomandi õigusi ja soovime kiiresti lahendada kõik autoriõigusega seotud probleemid. Kui usute, et teie autoriõigusega kaitstud tööd on meie platvormil vääralt kasutatud, saatke palun üksikasjalik DMCA-teade alljärgnevale e-posti aadressile. Palun lisage autoriõigusega kaitstud materjali kirjeldus, oma kontaktandmed ja avaldus heauskse veendumuse kohta. Oleme pühendunud nende küsimuste kiirele lahendamisele ja hindame teie koostööd, et movie-web oleks koht, kus austatakse loovust ja autoriõigusi." "text": "Tere tulemast movie-webi DMCA kontaktilehele! Me austame intellektuaalomandi õigusi ja soovime kiiresti lahendada kõik autoriõigusega seotud probleemid. Kui usute, et teie autoriõigusega kaitstud tööd on meie platvormil vääralt kasutatud, saatke palun üksikasjalik DMCA-teade alljärgnevale e-posti aadressile. Palun lisage autoriõigusega kaitstud materjali kirjeldus, oma kontaktandmed ja avaldus heauskse veendumuse kohta. Oleme pühendunud nende küsimuste kiirele lahendamisele ja hindame teie koostööd, et movie-web oleks koht, kus austatakse loovust ja autoriõigusi.",
"title": "DMCA"
}, },
"loadingApp": "Rakenduse laadimine", "loadingApp": "Rakenduse laadimine",
"loadingUser": "Teie profiili laadimine", "loadingUser": "Teie profiili laadimine",
"loadingUserError": { "loadingUserError": {
"text": "Profiili laadimine ebaōnnestus" "logout": "Logi välja",
"reset": "Lähtestage kohandatud server",
"text": "Profiili laadimine ebaōnnestus",
"textWithReset": "Profiili laadimine kohandatud serverist ebaõnnestus. Kas soovite lähtestada vaikeserverile?"
},
"migration": {
"failed": "Teie andmete üleviimine ebaõnnestus.",
"inProgress": "Palun oodake, me viime teie andmeid üle. See ei tohiks kaua aega võtta."
} }
},
"settings": {
"account": {
"accountDetails": {
"deviceNameLabel": "Seadme nimi",
"deviceNamePlaceholder": "Isiklik telefon",
"editProfile": "Muuda",
"logoutButton": "Logi välja"
},
"actions": {
"delete": {
"button": "Kustuta konto",
"confirmButton": "Kustuta konto",
"confirmDescription": "Kas olete kindel, et soovite oma konto kustutada? Kõik teie andmed lähevad kaotsi!",
"confirmTitle": "Oled sa kindel?",
"text": "See toiming on pöördumatu. Kõik andmed kustutatakse ja midagi ei saa taastada.",
"title": "Kustuta konto"
},
"title": "Tegevused"
},
"devices": {
"deviceNameLabel": "Seadme nimi",
"failed": "Seansside laadimine ebaõnnestus",
"removeDevice": "Eemalda",
"title": "Seadmed"
},
"profile": {
"finish": "Lõpeta redigeerimine",
"firstColor": "Profiili värv üks",
"secondColor": "Profiili värv kaks",
"title": "Redigeeri profiilipilti",
"userIcon": "Kasutaja ikoon"
},
"register": {
"cta": "Alustama",
"text": "Jagage oma vaatamise edenemist seadmete vahel ja hoidke neid sünkroonituna.",
"title": "Sünkrooni pilvega"
},
"title": "Konto"
},
"appearance": {
"activeTheme": "Aktiivne",
"themes": {
"blue": "Sinine",
"default": "Vaikimisi",
"gray": "Hall",
"red": "Punane",
"teal": "Tumesinine"
},
"title": "Välimus"
},
"connections": {
"server": {
"description": "Kui soovite kohandatud backend'i kasutada oma andmete hoidmiseks, siis lubage see ja varustage URL.",
"label": "Kohandatud server",
"urlLabel": "Kohandatud serveri URL"
},
"title": "Ühendused",
"workers": {
"addButton": "Lisa uus töötaja",
"description": "Rakenduse toimimiseks suunatakse kogu liiklus puhverserverite kaudu. Lubage see, kui soovite oma puhverserverit kasutada.",
"emptyState": "Töötajaid pole veel, lisage üks",
"label": "Kasutage kohandatud puhverserveri töötajaid",
"urlLabel": "Töötajate URL-id",
"urlPlaceholder": "https://"
}
},
"locale": {
"language": "Rakenduse keel",
"languageDescription": "Keel on rakendatud kogu rakendusele.",
"title": "Lokaal"
},
"reset": "Lähtesta",
"save": "Salvesta",
"sidebar": {
"info": {
"appVersion": "Rakenduse versioon",
"backendUrl": "Backend'i URL",
"backendVersion": "Backend'i versioon",
"hostname": "Hostinimi",
"insecure": "Ebakindel",
"notLoggedIn": "Sa pole sisse loginud",
"secure": "Turvaline",
"title": "Rakenduse teave",
"unknownVersion": "Teadmatu",
"userId": "Kasutaja ID"
}
},
"subtitles": {
"previewQuote": "Ma ei tohi karta. Hirm on meelemõrvar.",
"textSizeLabel": "Teksti suurus",
"title": "Subtiitrid"
},
"unsaved": "Teil on salvestamata muudatusi"
} }
} }

View File

@ -174,20 +174,8 @@
"enabled": "Casting à l'appareil..." "enabled": "Casting à l'appareil..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Télécharger des sous-titres",
"customizeLabel": "Personnaliser",
"offChoice": "Désactivé",
"settings": {
"delay": "Délai des sous-titres",
"fixCapitals": "Correction de la majuscule"
},
"title": "Sous-titres",
"unknownLanguage": "Inconnu"
},
"downloads": { "downloads": {
"disclaimer": "Les téléchargements sont effectués directement par le fournisseur. movie-web n'a aucun contrôle sur la manière dont les téléchargements sont effectués.", "disclaimer": "Les téléchargements sont effectués directement par le fournisseur. movie-web n'a aucun contrôle sur la manière dont les téléchargements sont effectués.",
"downloadCaption": "Télécharger les sous-titres actuels",
"downloadVideo": "Télécharger la vidéo", "downloadVideo": "Télécharger la vidéo",
"onAndroid": { "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, puis sélectionnez <bold>enregistrer</bold>.",
@ -225,9 +213,7 @@
"title": "Qualité" "title": "Qualité"
}, },
"settings": { "settings": {
"captionItem": "Paramètres des sous-titres",
"downloadItem": "Télécharger", "downloadItem": "Télécharger",
"enableCaptions": "Activer les sous-titres",
"experienceSection": "Expérience de visionnage", "experienceSection": "Expérience de visionnage",
"playbackItem": "Paramètres de lecture", "playbackItem": "Paramètres de lecture",
"qualityItem": "Qualité", "qualityItem": "Qualité",
@ -371,13 +357,6 @@
}, },
"title": "Apparence" "title": "Apparence"
}, },
"captions": {
"backgroundLabel": "Opacité de l'arrière-plan",
"colorLabel": "Couleur",
"previewQuote": "Je ne dois pas avoir peur. La peur est un tueur d'esprit.",
"textSizeLabel": "Taille du texte",
"title": "Sous-titres"
},
"connections": { "connections": {
"server": { "server": {
"description": "Si vous souhaitez vous connecter à un backend personnalisé pour stocker vos données, activez cette option et indiquez l'URL.", "description": "Si vous souhaitez vous connecter à un backend personnalisé pour stocker vos données, activez cette option et indiquez l'URL.",

View File

@ -174,21 +174,11 @@
"enabled": "משדר למכשיר..." "enabled": "משדר למכשיר..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "בחר כתוביות מהקובץ",
"customizeLabel": "התאם אישית",
"offChoice": "כבוי",
"settings": {
"delay": "עיכוב בכיתוב",
"fixCapitals": "תקן שימוש באותיות גדולות"
},
"title": "כתוביות",
"unknownLanguage": "לא ידוע"
},
"downloads": { "downloads": {
"disclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות.", "disclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות.",
"downloadCaption": "הורד את הכתוביות הנוכחיות", "downloadPlaylist": "הורד פלייליסט",
"downloadVideo": "הורד וידאו", "downloadVideo": "הורד וידאו",
"hlsDisclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות. שימו לב שאתם מורידים רשימת השמעה של HLS, זה מיועד למשתמשים שמכירים הזרמת מולטימדיה מתקדמת.",
"onAndroid": { "onAndroid": {
"1": "כדי להוריד באנדרואיד, לחץ על כפתור ההורדה ולאחר מכן, בדף החדש, <bold>הקש והחזק</bold> על הסרטון, ולאחר מכן בחר <bold>שמור</bold>.", "1": "כדי להוריד באנדרואיד, לחץ על כפתור ההורדה ולאחר מכן, בדף החדש, <bold>הקש והחזק</bold> על הסרטון, ולאחר מכן בחר <bold>שמור</bold>.",
"shortTitle": "הורדה / אנדרויד", "shortTitle": "הורדה / אנדרויד",
@ -225,9 +215,7 @@
"title": "איכות" "title": "איכות"
}, },
"settings": { "settings": {
"captionItem": "הגדרות כתוביות",
"downloadItem": "הורד", "downloadItem": "הורד",
"enableCaptions": "אפשר כתוביות",
"experienceSection": "חווית צפייה", "experienceSection": "חווית צפייה",
"playbackItem": "הגדרות ניגון", "playbackItem": "הגדרות ניגון",
"qualityItem": "איכות", "qualityItem": "איכות",
@ -249,6 +237,17 @@
}, },
"title": "מקורות", "title": "מקורות",
"unknownOption": "לא ידוע" "unknownOption": "לא ידוע"
},
"subtitles": {
"customizeLabel": "התאם",
"offChoice": "כבוי",
"settings": {
"backlink": "כתוביות מותאמות אישית",
"delay": "עיכוב בכיתוב",
"fixCapitals": "תקן שימוש באותיות גדולות"
},
"title": "כתוביות",
"unknownLanguage": "לא ידוע"
} }
}, },
"metadata": { "metadata": {
@ -371,13 +370,6 @@
}, },
"title": "מראה" "title": "מראה"
}, },
"captions": {
"backgroundLabel": "אטימות רקע",
"colorLabel": "צבע",
"previewQuote": "אסור לי לפחד. הפחד הוא קוטל הנפש.",
"textSizeLabel": "גודל הטקסט",
"title": "כתוביות"
},
"connections": { "connections": {
"server": { "server": {
"description": "אם תרצה להתחבר ל-backend מותאם אישית כדי לאחסן את הנתונים שלך, הפעל זאת וספק את כתובת האתר.", "description": "אם תרצה להתחבר ל-backend מותאם אישית כדי לאחסן את הנתונים שלך, הפעל זאת וספק את כתובת האתר.",
@ -415,6 +407,11 @@
"userId": "זהות המשתמש" "userId": "זהות המשתמש"
} }
}, },
"subtitles": {
"previewQuote": "אסור לי לפחד. הפחד הוא קוטל הנפש.",
"textSizeLabel": "גודל הטקסט",
"title": "כתוביות"
},
"unsaved": "יש לך שינויים שלא נשמרו" "unsaved": "יש לך שינויים שלא נשמרו"
} }
} }

423
src/assets/locales/hi.json Normal file
View File

@ -0,0 +1,423 @@
{
"about": {
"description": "मूवी-वेब एक वेब एप्लिकेशन है जो इंटरनेट पर स्ट्रीम्स की खोज करता है। टीम का लक्ष्य सामग्री के उपभोग के लिए अधिकतर न्यूनतम दृष्टिकोण अपनाना है।",
"faqTitle": "सामान्य प्रश्न",
"q1": {
"body": "मूवी-वेब किसी भी कंटेंट को होस्ट नहीं करता है। जब आप देखने के लिए किसी चीज़ पर क्लिक करते हैं, तो इंटरनेट पर चयनित मीडिया की खोज की जाती है (लोडिंग स्क्रीन पर और 'वीडियो स्रोत' टैब में आप देख सकते हैं कि आप किस स्रोत का उपयोग कर रहे हैं)। मीडिया कभी भी मूवी-वेब द्वारा अपलोड नहीं किया जाता है, सब कुछ इस खोज तंत्र के माध्यम से होता है।",
"title": "फिल्म कहां से आती है?"
},
"q2": {
"body": "किसी शो या मूवी का अनुरोध करना संभव नहीं है, मूवी-वेब किसी भी फिलम का प्रबंधन नहीं करता है। सभी फिल्में इंटरनेट पर स्रोतों के माध्यम से देखी जाती है।",
"title": "मैं किसी शो या मूवी का अनुरोध कहां कर सकता हूं?"
},
"q3": {
"body": "हमारे खोज परिणाम मूवी डेटाबेस (टीएमडीबी) द्वारा संचालित होते हैं और इस पर ध्यान दिए बिना प्रदर्शित होते हैं कि हमारे स्रोतों में वास्तव में सामग्री है या नहीं।",
"title": "खोज परिणाम शो या मूवी प्रदर्शित करते हैं, मैं फिलम क्यों नहीं चला पा रहा ?"
},
"title": "मूवी-वेब के बारे में"
},
"actions": {
"copied": "कॉपी किया गया हुआ है",
"copy": "कॉपी"
},
"auth": {
"createAccount": "अब तक कोई खाता नहीं है? <0>खाता बनाएं।</0>",
"deviceNameLabel": "डिवाइस का नाम",
"deviceNamePlaceholder": "निजी फ़ोन",
"generate": {
"description": "आपका पासफ़्रेज़ आपके नाम और पासवर्ड के रूप में कार्य करता है। इसे सुरक्षित रखना सुनिश्चित करें क्योंकि आपको अपने खाते में लॉगिन करने के लिए इसे दर्ज करना होगा",
"next": "मैंने अपना पासफ़्रेज़ सहेज कर लिया है",
"passphraseFrameLabel": "पासफ़्रेज़",
"title": "तुम्हारा पासफ़्रेज़"
},
"hasAccount": "पहले से एक खाता मौजूद है? <0>यहां लॉगिन करें।</0>",
"login": {
"description": "कृपया अपने खाते में लॉगिन करने के लिए अपना पासफ़्रेज़ दर्ज करें",
"deviceLengthError": "कृपया डिवाइस का नाम दर्ज करें",
"passphraseLabel": "12-शब्द का पासफ़्रेज़",
"passphrasePlaceholder": "पासफ़्रेज़",
"submit": "लॉग इन",
"title": "अपने अकाउंट में लॉग इन करें",
"validationError": "ग़लत या अपूर्ण पासफ़्रेज़"
},
"register": {
"information": {
"color1": "प्रोफ़ाइल का पहला रंग",
"color2": "प्रोफ़ाइल का दूसरा रंग",
"header": "अपने डिवाइस के लिए एक नाम दर्ज करें और अपने पसंद का रंग और एक आइकन चुनें",
"icon": "आइकन",
"next": "अगला",
"title": "खाता संबंधी जानकारी"
}
},
"trust": {
"failed": {
"text": "क्या आपने इसे सही ढंग से कॉन्फ़िगर किया?",
"title": "सर्वर तक पहुंचने में विफल"
},
"host": "आप <0>{{hostname}}</0> से कनेक्ट हो रहे हैं - खाता बनाने से पहले कृपया पुष्टि करें कि आप इस पर भरोसा करते हैं",
"no": "पीछे जाये",
"title": "क्या आपको इस सर्वर पर भरोसा है?",
"yes": "मुझे इस सर्वर पर भरोसा है"
},
"verify": {
"description": "यह पुष्टि करने के लिए कि आपने इसे सहेज लिया है और अपना खाता बनाने के लिए कृपया अपना पहले का पासफ़्रेज़ दर्ज करें",
"invalidData": "डेटा मान्य नहीं है",
"noMatch": "पासफ़्रेज़ मेल नहीं खाता",
"passphraseLabel": "आपका 12-शब्दों वाला पासफ़्रेज़",
"recaptchaFailed": "कैप्चा सत्यापन विफल रहा",
"register": "खाता बनाएं",
"title": "अपने पासफ़्रेज़ की पुष्टि करें"
}
},
"errors": {
"badge": "कुछ टूट गया है शायद",
"details": "गलतियों की जानकारी",
"reloadPage": "पृष्ठ को पुन: लोड करें",
"showError": "गलतियों का विवरण दिखाएँ",
"title": "हमें एक गलति का सामना करना पड़ा!"
},
"footer": {
"legal": {
"disclaimer": "अस्वीकरण",
"disclaimerText": "मूवी-वेब किसी फ़ाइल को होस्ट नहीं करता है, यह केवल तृतीय पक्ष सेवाओं से लिंक करता है। कानूनी मुद्दों को फ़ाइल होस्ट और प्रदाताओं के साथ उठाया जाना चाहिए। मूवी-वेब वीडियो प्रदाताओं द्वारा दिखाई गई किसी भी मीडिया फ़ाइल के लिए ज़िम्मेदार नहीं है।"
},
"links": {
"discord": "डीसकॉर्ड",
"dmca": "DMCA",
"github": "गिटहब"
},
"tagline": "अपने पसंदीदा शो और फिल्में देखें, इस ओपन सोर्स स्ट्रीमिंग ऐप के साथ।"
},
"global": {
"name": "मूवी-वेब",
"pages": {
"about": "साइट के बारे में",
"dmca": "DMCA",
"login": "लॉग इन",
"pagetitle": "{{title}} - मूवी-वेब",
"register": "नया खाता बनायें",
"settings": "छेड़ छाड़ करे"
}
},
"home": {
"bookmarks": {
"sectionTitle": "बुकमार्क"
},
"continueWatching": {
"sectionTitle": "देखना जारी रखें"
},
"mediaList": {
"stopEditing": "एडिट करना बंद करे"
},
"search": {
"allResults": "बस यही है!",
"failed": "मीडिया ढूंढने में विफल, पुनः प्रयास करें!",
"loading": "लोडा हो रहा है..।",
"noResults": "हमें कुछ नहीं मिला!",
"placeholder": "क्या देखना चाहते हो भाई?",
"sectionTitle": "खोज के परिणाम"
},
"titles": {
"day": {
"default": "आप आज शाम क्या देखना चाहेंगे?"
},
"morning": {
"default": "आप आज सुबह को क्या देखना चाहेंगे?",
"extra": [
"मैंने सुना है सूर्योदय से पहले ठीक है"
]
},
"night": {
"default": "आप आज रात को क्या देखना चाहेंगे?",
"extra": [
"थके हुए हो? मैंने सुना एक्सोरसिस्ट अच्छी मूवी है।"
]
}
}
},
"media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": {
"movie": "मूवी",
"show": "शृंखला"
}
},
"navigation": {
"banner": {
"offline": "अपना इंटरनेट संपर्क जांचे"
},
"menu": {
"about": "हमारे बारे में",
"donation": "दान करें",
"logout": "लॉग आउट",
"register": "क्लाउड से सिंक करें",
"settings": "चेड चाड करे",
"support": "सहायता"
}
},
"notFound": {
"badge": "नहीं मिला",
"goHome": "घर वापिस जा रहा हूँ",
"message": "हमने हर जगह देखा: डिब्बे के नीचे, कोठरी में, प्रॉक्सी के पीछे लेकिन अंततः वह पेज नहीं मिला जिसे आप ढूंढ रहे थे।",
"title": "वह पृष्ठ नहीं मिल सका"
},
"overlays": {
"close": "बंद करना"
},
"player": {
"back": {
"default": "घर वापिस",
"short": "वापिस"
},
"casting": {
"enabled": "डिवाइस पर कास्ट किया जा रहा है..।"
},
"menus": {
"downloads": {
"disclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं।",
"downloadPlaylist": "प्लेलिस्ट डाउनलोड करें",
"downloadSubtitle": "वर्तमान उपशीर्षक डाउनलोड करें",
"downloadVideo": "वीडियो डाउनलोड करें",
"hlsDisclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं। कृपया ध्यान दें कि आप एक एचएलएस प्लेलिस्ट डाउनलोड कर रहे हैं, यह उन्नत मल्टीमीडिया स्ट्रीमिंग से परिचित उपयोगकर्ताओं के लिए है।",
"onAndroid": {
"1": "एंड्रॉइड पर डाउनलोड करने के लिए, डाउनलोड बटन पर क्लिक करें, फिर नए पेज पर, वीडियो पर <bold>टैप करके रखें</bold>, फिर <bold>save</bold> चुनें।",
"shortTitle": "डाउनलोड / एंड्रॉइड",
"title": "एंड्रॉइड पर डाउनलोड हो रहा है"
},
"onIos": {
"1": "iOS पर डाउनलोड करने के लिए, डाउनलोड बटन पर क्लिक करें, फिर नए पेज पर <bold><ios_share /></bold> पर क्लिक करें, फिर <bold>फ़ाइलों में सहेजें <ios_files /></bold> पर क्लिक करें।",
"shortTitle": "डाउनलोड / आईओएस",
"title": "आईओएस पर डाउनलोड हो रहा है"
},
"onPc": {
"1": "पीसी पर, डाउनलोड बटन पर क्लिक करें, फिर नए पेज पर, वीडियो पर राइट क्लिक करें और <bold>वीडियो को इस रूप में सेव करें</bold> चुनें",
"shortTitle": "डाउनलोड / पीसी",
"title": "पीसी पर डाउनलोड हो रहा है"
},
"title": "डाउनलोड"
},
"episodes": {
"button": "एपिसोड",
"emptyState": "इस सीज़न में कोई एपिसोड नहीं है, बाद में दोबारा जाँचें!",
"episodeBadge": "E{{episode}}",
"loadingError": "सीज़न लोड करने में त्रुटि",
"loadingList": "लोड..।",
"loadingTitle": "लोडा हो रहा है..।"
},
"playback": {
"speedLabel": "प्लेबैक गति",
"title": "प्लेबैक सेटिंग्स"
},
"quality": {
"automaticLabel": "स्वचालित गुणवत्ता",
"hint": "आप विभिन्न गुणवत्ता विकल्प प्राप्त करने के लिए <0>स्रोत स्विचिंग</0> का प्रयास कर सकते हैं।",
"iosNoQuality": "Apple द्वारा परिभाषित सीमाओं के कारण, इस स्रोत के लिए iOS पर गुणवत्ता चयन उपलब्ध नहीं है। आप विभिन्न गुणवत्ता विकल्प प्राप्त करने के लिए <0>किसी अन्य स्रोत पर स्विच करने</0> का प्रयास कर सकते हैं।",
"title": "गुणवत्ता"
},
"settings": {
"downloadItem": "डाउनलोड",
"enableSubtitles": "उपशीर्षक सक्षम करें",
"experienceSection": "देखने का अनुभव",
"playbackItem": "प्लेबैक सेटिंग्स",
"qualityItem": "चित्र की गुणवत्ता",
"sourceItem": "वीडियो स्रोत",
"subtitleItem": "उपशीर्षक सेटिंग्स",
"videoSection": "वीडियो सेटिंग्स"
},
"sources": {
"failed": {
"text": "किसी भी वीडियो को खोजने का प्रयास करते समय एक त्रुटि हुई, कृपया किसी भिन्न स्रोत का प्रयास करें।",
"title": "स्क्रैप करने में विफल"
},
"noEmbeds": {
"text": "हम कोई एम्बेड नहीं ढूंढ पाए, कृपया कोई भिन्न स्रोत आज़माएँ।",
"title": "कोई एंबेड नहीं मिला"
},
"noStream": {
"text": "इस स्रोत के पास इस फिल्म या शो के लिए कोई स्ट्रीम नहीं है।",
"title": "कोई धारा नहीं"
},
"title": "सूत्रों का कहना है",
"unknownOption": "अज्ञात"
},
"subtitles": {
"customChoice": "फ़ाइल से उपशीर्षक चुनें",
"customizeLabel": "अनुकूलित करें",
"offChoice": "बंद",
"settings": {
"backlink": "कस्टम उपशीर्षक",
"delay": "उपशीर्षक विलंब",
"fixCapitals": "पूंजीकरण ठीक करें"
},
"title": "उपशीर्षक",
"unknownLanguage": "अज्ञात"
}
},
"metadata": {
"failed": {
"badge": "असफल",
"homeButton": "घर जाओ",
"text": "टीएमडीबी से मीडिया का मेटाडेटा लोड नहीं किया जा सका। कृपया जांचें कि क्या आपके इंटरनेट कनेक्शन पर टीएमडीबी बंद है या अवरुद्ध है।",
"title": "मेटाडेटा लोड करने में विफल"
},
"notFound": {
"badge": "नहीं मिला",
"homeButton": "घर वापिस",
"text": "हमें आपके द्वारा अनुरोधित मीडिया नहीं मिल सका। या तो इसे हटा दिया गया है या आपने यूआरएल के साथ छेड़छाड़ की है।",
"title": "वह मीडिया नहीं मिल सका।"
}
},
"nextEpisode": {
"cancel": "रद्द करना",
"next": "अगले प्रकरण"
},
"playbackError": {
"badge": "प्लेबैक त्रुटि",
"errors": {
"errorAborted": "उपयोगकर्ता के अनुरोध पर मीडिया को लाना रोक दिया गया था।",
"errorDecode": "पहले प्रयोग योग्य होने के लिए निर्धारित होने के बावजूद, मीडिया संसाधन को डीकोड करने का प्रयास करते समय एक त्रुटि उत्पन्न हुई, जिसके परिणामस्वरूप त्रुटि हुई।",
"errorGenericMedia": "अज्ञात मीडिया त्रुटि उत्पन्न हुई।",
"errorNetwork": "किसी प्रकार की नेटवर्क त्रुटि उत्पन्न हुई जिसके कारण मीडिया पहले से उपलब्ध होने के बावजूद सफलतापूर्वक प्राप्त नहीं हो सका।",
"errorNotSupported": "मीडिया या मीडिया प्रदाता ऑब्जेक्ट समर्थित नहीं है।"
},
"homeButton": "घर जाओ",
"text": "मीडिया चलाने का प्रयास करते समय एक त्रुटि हुई. कृपया पुन: प्रयास करें।",
"title": "वीडियो चलाने में विफल!"
},
"scraping": {
"items": {
"failure": "त्रुटि हुई",
"notFound": "वीडियो नहीं है",
"pending": "वीडियो की जांच की जा रही है..।"
},
"notFound": {
"badge": "नहीं मिला",
"detailsButton": "प्रदर्शन का विवरण",
"homeButton": "घर जाओ",
"text": "हमने अपने प्रदाताओं के माध्यम से खोज की है और आपको वह मीडिया नहीं मिल सका जिसकी आप तलाश कर रहे हैं! हम मीडिया की मेजबानी नहीं करते हैं और जो उपलब्ध है उस पर हमारा कोई नियंत्रण नहीं है। अधिक जानकारी के लिए कृपया नीचे 'विवरण दिखाएं' पर क्लिक करें।",
"title": "हमें वह नहीं मिला"
}
},
"time": {
"regular": "{{timeWatched}} / {{duration}}",
"remaining": "{{timeLeft}} समय बचा है • ख़तम होगा {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
}
},
"screens": {
"dmca": {
"text": "मूवी-वेब के DMCA संपर्क पृष्ठ में आपका स्वागत है! हम बौद्धिक संपदा अधिकारों का सम्मान करते हैं और किसी भी कॉपीराइट संबंधी चिंताओं का शीघ्र समाधान करना चाहते हैं। यदि आपको लगता है कि आपके कॉपीराइट किए गए कार्य का हमारे प्लेटफ़ॉर्म पर अनुचित तरीके से उपयोग किया गया है, तो कृपया नीचे दिए गए ईमेल पर एक विस्तृत DMCA नोटिस भेजें। कृपया कॉपीराइट सामग्री का विवरण, अपना संपर्क विवरण और सद्भावना विश्वास का एक बयान शामिल करें। हम इन मामलों को तुरंत हल करने के लिए प्रतिबद्ध हैं और मूवी-वेब को रचनात्मकता और कॉपीराइट का सम्मान करने वाला स्थान बनाए रखने में आपके सहयोग की सराहना करते हैं।",
"title": "DMCA"
},
"loadingApp": "एप्लिकेशन लोड हो रहा है",
"loadingUser": "आपकी प्रोफ़ाइल लोड हो रही है",
"loadingUserError": {
"logout": "लॉग आउट",
"reset": "कस्टम सर्वर रीसेट करें",
"text": "आपकी प्रोफ़ाइल लोड करने में विफल",
"textWithReset": "आपके कस्टम सर्वर से आपकी प्रोफ़ाइल लोड करने में विफल, डिफ़ॉल्ट सर्वर पर वापस रीसेट करना चाहते हैं?"
},
"migration": {
"failed": "आपका डेटा स्थानांतरित करने में विफल।",
"inProgress": "कृपया रुकें, हम आपका डेटा स्थानांतरित कर रहे हैं। इसमें ज्यादा समय नहीं लगना चाहिए।"
}
},
"settings": {
"account": {
"accountDetails": {
"deviceNameLabel": "डिवाइस का नाम",
"deviceNamePlaceholder": "निजी फ़ोन",
"editProfile": "संपादन करना",
"logoutButton": "लॉग आउट"
},
"actions": {
"delete": {
"button": "खाता हटा दो",
"confirmButton": "खाता हटा दो",
"confirmDescription": "क्या आप इस खाते को हटाने के लिए सुनिश्चित हैं? आपका सारा डेटा खो जाएगा!",
"confirmTitle": "क्या आपको यकीन है?",
"text": "यह क्रिया अपरिवर्तनीय है. सारा डेटा हटा दिया जाएगा और कुछ भी पुनर्प्राप्त नहीं किया जा सकेगा।",
"title": "खाता हटा दो"
},
"title": "कार्रवाई"
},
"devices": {
"deviceNameLabel": "डिवाइस का नाम",
"failed": "सत्र लोड करने में विफल",
"removeDevice": "निकालना",
"title": "उपकरण"
},
"profile": {
"finish": "संपादन समाप्त करें",
"firstColor": "प्रोफ़ाइल का रंग एक",
"secondColor": "प्रोफ़ाइल रंग दो",
"title": "प्रोफाइल तस्वीर को संपादित करें",
"userIcon": "आइकन"
},
"register": {
"cta": "शुरू हो जाओ",
"text": "अपनी प्रगति को उपकरणों के बीच साझा करें और उन्हें समन्वयित रखें।",
"title": "क्लाउड से सिंक करें"
},
"title": "खाता"
},
"appearance": {
"activeTheme": "सक्रिय",
"themes": {
"blue": "नीला",
"default": "गलती करना",
"gray": "स्लेटी",
"red": "लाल",
"teal": "टील"
},
"title": "उपस्थिति"
},
"connections": {
"server": {
"description": "यदि आप अपना डेटा संग्रहीत करने के लिए कस्टम बैकएंड से कनेक्ट करना चाहते हैं, तो इसे सक्षम करें और URL प्रदान करें।",
"label": "कस्टम सर्वर",
"urlLabel": "कस्टम सर्वर यूआरएल"
},
"title": "सम्बन्ध",
"workers": {
"addButton": "नया कार्यकर्ता जोड़ें",
"description": "एप्लिकेशन को कार्यशील बनाने के लिए, सभी ट्रैफ़िक को प्रॉक्सी के माध्यम से रूट किया जाता है। यदि आप अपने स्वयं के श्रमिकों को लाना चाहते हैं तो इसे सक्षम करें।",
"emptyState": "अभी तक कोई कर्मचारी नहीं, नीचे एक जोड़ें",
"label": "कस्टम प्रॉक्सी कार्यकर्ताओं का उपयोग करें",
"urlLabel": "कार्यकर्ता यूआरएल",
"urlPlaceholder": "https://"
}
},
"locale": {
"language": "अनुप्रयोग भाषा",
"languageDescription": "भाषा संपूर्ण अनुप्रयोग पर लागू होती है।",
"title": "स्थानीय"
},
"reset": "रीसेट",
"save": "सेव",
"sidebar": {
"info": {
"appVersion": "एप्लिकेशन वेरीज़न",
"backendUrl": "बैकएंड यूआरएल",
"backendVersion": "बैकएंड संस्करण",
"hostname": "होस्ट का नाम",
"insecure": "असुरक्षित",
"notLoggedIn": "आपने लॉग - इन नहीं किया",
"secure": "सुरक्षित",
"title": "ऐप की जानकारी",
"unknownVersion": "अज्ञात",
"userId": "उपयोगकर्ता पहचान"
}
},
"subtitles": {
"backgroundLabel": "पृष्ठभूमि अस्पष्टता",
"colorLabel": "रंग",
"previewQuote": "मुझे डरना नहीं चाहिए. डर मन हत्यारा है।",
"textSizeLabel": "टेक्स्ट का साइज़",
"title": "उपशीर्षक"
},
"unsaved": "आपके पास सहेजे नहीं गए परिवर्तन हैं"
}
}

View File

@ -1,71 +1,66 @@
{ {
"global": { "global": {
"name": "movie-web" "name": "movie-web"
},
"home": {
"bookmarks": {
"sectionTitle": "Segnalibri"
}, },
"home": { "continueWatching": {
"search": { "sectionTitle": "Continua a guardare"
"allResults": "Ecco tutto ciò che abbiamo!",
"sectionTitle": "Risultati della ricerca",
"noResults": "Non abbiamo trovato nulla!",
"failed": "Impossibile trovare i media, riprova!",
"loading": "Caricamento...",
"placeholder": "Cosa vuoi guardare?"
},
"bookmarks": {
"sectionTitle": "Segnalibri"
},
"continueWatching": {
"sectionTitle": "Continua a guardare"
}
}, },
"media": { "search": {
"types": { "allResults": "Ecco tutto ciò che abbiamo!",
"movie": "Film", "failed": "Impossibile trovare i media, riprova!",
"show": "Serie" "loading": "Caricamento...",
}, "noResults": "Non abbiamo trovato nulla!",
"episodeDisplay": "S{{season}} E{{episode}}" "placeholder": "Cosa vuoi guardare?",
}, "sectionTitle": "Risultati della ricerca"
"player": {
"playbackError": {
"title": "Ops, qualcosa si è rotto!"
},
"metadata": {
"notFound": {
"badge": "Non trovato",
"homeButton": "Torna alla home",
"title": "Impossibile trovare quel media.",
"text": "Non siamo riusciti a trovare il media richiesto. È stato rimosso o hai manomesso l'URL."
}
},
"menus": {
"captions": {
"customChoice": "Carica sottotitolo",
"customizeLabel": "Personalizza",
"title": "Sottotitoli"
},
"sources": {
"title": "Fonti"
},
"episodes": {
"button": "Episodi",
"loadingTitle": "Caricamento...",
"loadingList": "Caricamento..."
}
},
"back": {
"default": "Torna alla home",
"short": "Indietro"
}
},
"notFound": {
"badge": "Non trovato",
"goHome": "Torna alla home",
"title": "Impossibile trovare quella pagina",
"message": "Abbiamo cercato ovunque: sotto i bidoni, nell'armadio, dietro il proxy, ma alla fine non siamo riusciti a trovare la pagina che stai cercando."
},
"navigation": {
"banner": {
"offline": "Controlla la tua connessione internet"
}
} }
},
"media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": {
"movie": "Film",
"show": "Serie"
}
},
"navigation": {
"banner": {
"offline": "Controlla la tua connessione internet"
}
},
"notFound": {
"badge": "Non trovato",
"goHome": "Torna alla home",
"message": "Abbiamo cercato ovunque: sotto i bidoni, nell'armadio, dietro il proxy, ma alla fine non siamo riusciti a trovare la pagina che stai cercando.",
"title": "Impossibile trovare quella pagina"
},
"player": {
"back": {
"default": "Torna alla home",
"short": "Indietro"
},
"menus": {
"episodes": {
"button": "Episodi",
"loadingList": "Caricamento...",
"loadingTitle": "Caricamento..."
},
"sources": {
"title": "Fonti"
}
},
"metadata": {
"notFound": {
"badge": "Non trovato",
"homeButton": "Torna alla home",
"text": "Non siamo riusciti a trovare il media richiesto. È stato rimosso o hai manomesso l'URL.",
"title": "Impossibile trovare quel media."
}
},
"playbackError": {
"title": "Ops, qualcosa si è rotto!"
}
}
} }

View File

@ -0,0 +1,10 @@
{
"about": {
"description": "movie-web គឺ​ជា​កម្មវិធី​បណ្ដាញវែបសាយ​ដែល​ស្វែងរក​អ៊ីនធឺណិត​សម្រាប់​ការ​ផ្សាយ។ ក្រុមនេះមានគោលបំណងសម្រាប់វិធីសាស្រ្តតិចតួចបំផុតក្នុងការប្រើប្រាស់មាតិកា។",
"faqTitle": "សំណួរទូទៅ",
"q1": {
"body": "movie-web មិនផ្ទុកមាតិកាណាមួយទេ។ នៅពេលអ្នកចុចលើអ្វីមួយដើម្បីមើល អ៊ីនធឺណិតត្រូវបានស្វែងរកសម្រាប់មេឌៀដែលបានជ្រើសរើស (នៅលើអេក្រង់ផ្ទុក និងក្នុងផ្ទាំង 'ប្រភពវីដេអូ' អ្នកអាចឃើញប្រភពណាមួយដែលអ្នកកំពុងប្រើ)។ ប្រព័ន្ធផ្សព្វផ្សាយមិនដែលត្រូវបានបង្ហោះដោយគេហទំព័រភាពយន្តនោះទេ អ្វីគ្រប់យ៉ាងគឺតាមរយៈយន្តការស្វែងរកនេះ។",
"title": "តើមាតិកាបានមកពីណា?"
}
}
}

View File

@ -173,20 +173,8 @@
"enabled": "Atskaņo uz ierīci..." "enabled": "Atskaņo uz ierīci..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Atlasiet failā parakstu",
"customizeLabel": "Paraksti",
"offChoice": "Izslēgts",
"settings": {
"delay": "Parakstu aizkave",
"fixCapitals": "Labojiet lielo burtu lietojumu"
},
"title": "Paraksti",
"unknownLanguage": "Nezināms"
},
"downloads": { "downloads": {
"disclaimer": "Lejupielādes tiek ņemtas tieši no pakalpojumu sniedzēja. Movie-web nevar kontrolēt, kā tiek nodrošinātas lejupielādes.", "disclaimer": "Lejupielādes tiek ņemtas tieši no pakalpojumu sniedzēja. Movie-web nevar kontrolēt, kā tiek nodrošinātas lejupielādes.",
"downloadCaption": "Lejupielādēt pašreizējo parakstu",
"downloadVideo": "Lejupielādēt video", "downloadVideo": "Lejupielādēt video",
"onAndroid": { "onAndroid": {
"1": "Lai lejupielādētu operētājsistēmā Android, noklikšķiniet uz lejupielādes pogas, pēc tam jaunajā lapā <bold>pieskarieties videoklipam un turiet to</bold>, pēc tam atlasiet <bold>saglabāt</bold>.", "1": "Lai lejupielādētu operētājsistēmā Android, noklikšķiniet uz lejupielādes pogas, pēc tam jaunajā lapā <bold>pieskarieties videoklipam un turiet to</bold>, pēc tam atlasiet <bold>saglabāt</bold>.",
@ -224,9 +212,7 @@
"title": "Kvalitāte" "title": "Kvalitāte"
}, },
"settings": { "settings": {
"captionItem": "Parakstu iestatījumi",
"downloadItem": "Lejupladēt", "downloadItem": "Lejupladēt",
"enableCaptions": "Iespējot parakstus",
"experienceSection": "Skatīšanās pieredze", "experienceSection": "Skatīšanās pieredze",
"playbackItem": "Atskaņošana iestādijumi", "playbackItem": "Atskaņošana iestādijumi",
"qualityItem": "Kvalitāte", "qualityItem": "Kvalitāte",
@ -370,13 +356,6 @@
}, },
"title": "Izskats" "title": "Izskats"
}, },
"captions": {
"backgroundLabel": "Fona necaurredzamība",
"colorLabel": "Krāsa",
"previewQuote": "Es nedrīkstu baidīties. Bailes ir prāta slepkava.",
"textSizeLabel": "Teksta lielums",
"title": "Paraksti"
},
"connections": { "connections": {
"server": { "server": {
"description": "Ja vēlaties izveidot savienojumu ar pielāgotu aizmugursistēmu, lai saglabātu savus datus, iespējojiet to un norādiet URL.", "description": "Ja vēlaties izveidot savienojumu ar pielāgotu aizmugursistēmu, lai saglabātu savus datus, iespējojiet to un norādiet URL.",

View File

@ -173,20 +173,8 @@
"enabled": "Casting to banana..." "enabled": "Casting to banana..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Banana",
"customizeLabel": "Banana",
"offChoice": "Banana",
"settings": {
"delay": "Banana",
"fixCapitals": "Banana"
},
"title": "Banana",
"unknownLanguage": "Banana"
},
"downloads": { "downloads": {
"disclaimer": "Downloads are taken directly from the banana. banana-web does not have banana over how the banana are banana.", "disclaimer": "Downloads are taken directly from the banana. banana-web does not have banana over how the banana are banana.",
"downloadCaption": "Banana",
"downloadVideo": "Banana", "downloadVideo": "Banana",
"onAndroid": { "onAndroid": {
"1": "To banana on Banana, click the banana banana then, on the new banana, <bold>tap and hold</bold> on the banana, then select <bold>banana</bold>.", "1": "To banana on Banana, click the banana banana then, on the new banana, <bold>tap and hold</bold> on the banana, then select <bold>banana</bold>.",
@ -224,9 +212,7 @@
"title": "Banana" "title": "Banana"
}, },
"settings": { "settings": {
"captionItem": "Banana settings",
"downloadItem": "Banana", "downloadItem": "Banana",
"enableCaptions": "Enable banana",
"experienceSection": "Banana Viewing experience", "experienceSection": "Banana Viewing experience",
"playbackItem": "Banana settings", "playbackItem": "Banana settings",
"qualityItem": "Banana", "qualityItem": "Banana",
@ -333,18 +319,18 @@
"text": "Whaaat? This banana is irreversible. All bananas will be banana and nothing can be banana.", "text": "Whaaat? This banana is irreversible. All bananas will be banana and nothing can be banana.",
"title": "Banana" "title": "Banana"
}, },
"title": "Banana" "title": "Bananas"
}, },
"devices": { "devices": {
"deviceNameLabel": "Banana name", "deviceNameLabel": "Banana name",
"failed": "Failed to load bananas", "failed": "Failed to load bananas :'(",
"removeDevice": "Banana", "removeDevice": "Banana",
"title": "Banana" "title": "Bananas"
}, },
"profile": { "profile": {
"finish": "Banana banana", "finish": "Finish banana",
"firstColor": "Minion color one", "firstColor": "Minion color banana",
"secondColor": "Minion color two", "secondColor": "Minion color banana",
"title": "Edit banana banana", "title": "Edit banana banana",
"userIcon": "Minion icon" "userIcon": "Minion icon"
}, },
@ -366,27 +352,20 @@
}, },
"title": "Banana" "title": "Banana"
}, },
"captions": {
"backgroundLabel": "Banana opacity",
"colorLabel": "Banana",
"previewQuote": "I must not banana. Banana is the banana-killer.",
"textSizeLabel": "Banana size",
"title": "Banana"
},
"connections": { "connections": {
"server": { "server": {
"description": "Banana you would like to banana to a banana banana to store your banana, banana this and banana the URL.", "description": "Banana you would like to banana to a banana banana to store your banana, banana this and banana the URL.",
"label": "Banana banana", "label": "Banana banana",
"urlLabel": "Banana banana URL" "urlLabel": "Banana banana URL"
}, },
"title": "Banana", "title": "Bananas",
"workers": { "workers": {
"addButton": "Banana banana banana", "addButton": "Add new banana",
"description": "Banana make the banana function, all banana is banana through bananas. Banana this if you banana to banana your own bananas.", "description": "Banana make the banana function, all banana is banana through bananas. Banana this if you banana to banana your own bananas.",
"emptyState": "No bananas yet, banana one banana", "emptyState": "No bananas yet, banana one banana",
"label": "Banana custom banana", "label": "Banana custom banana workers",
"urlLabel": "Banana URLs", "urlLabel": "Banana URLs",
"urlPlaceholder": "https://" "urlPlaceholder": "banana://"
} }
}, },
"locale": { "locale": {
@ -410,6 +389,11 @@
"userId": "Minion ID" "userId": "Minion ID"
} }
}, },
"subtitles": {
"previewQuote": "I must not banana. Banana is the minion-killer.",
"textSizeLabel": "Banana size",
"title": "Bananas"
},
"unsaved": "Whaaat? You have unsaved bananas" "unsaved": "Whaaat? You have unsaved bananas"
} }
} }

View File

@ -174,21 +174,11 @@
"enabled": "उपकरणमा कास्ट गर्दै..." "enabled": "उपकरणमा कास्ट गर्दै..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "फाइलबाट क्याप्शन चयन गर्नुहोस्",
"customizeLabel": "रुचिको अनुसार बनाउनु",
"offChoice": "बन्द",
"settings": {
"delay": "क्याप्सन ढिलाइ",
"fixCapitals": "पूंजीकरण ठीक गर्नुहोस्"
},
"title": "क्याप्शन",
"unknownLanguage": "अज्ञात"
},
"downloads": { "downloads": {
"disclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। movie-web ले डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण गर्दैन।", "disclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। movie-web ले डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण गर्दैन।",
"downloadCaption": "डाउनलोड चलिरहेको क्याप्शन", "downloadPlaylist": "डाउनलोड प्लेलिस्ट",
"downloadVideo": "डाउनलोड भिडियो", "downloadVideo": "डाउनलोड भिडियो",
"hlsDisclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। movie-webले डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण गर्दैन। कृपया ध्यान दिनुहोस् कि तपाइँ HLS प्लेलिस्ट डाउनलोड गर्दै हुनुहुन्छ, यो उन्नत मल्टिमिडिया स्ट्रिमिङसँग परिचित प्रयोगकर्ताहरूको लागि हो।",
"onAndroid": { "onAndroid": {
"1": "एन्ड्रोइड मा, डाउनलोड बटन क्लिक गर्नुहोस् त्यसपछि, नयाँ पृष्ठमा, भिडियोमा <bold>ट्याप गर्नुहोस् र होल्ड गर्नुहोस्</bold>, त्यसपछि <bold>बचत</bold> चयन गर्नुहोस्।", "1": "एन्ड्रोइड मा, डाउनलोड बटन क्लिक गर्नुहोस् त्यसपछि, नयाँ पृष्ठमा, भिडियोमा <bold>ट्याप गर्नुहोस् र होल्ड गर्नुहोस्</bold>, त्यसपछि <bold>बचत</bold> चयन गर्नुहोस्।",
"shortTitle": "डाउनलोड / एन्ड्रोइड", "shortTitle": "डाउनलोड / एन्ड्रोइड",
@ -225,9 +215,7 @@
"title": "क्वालिटी" "title": "क्वालिटी"
}, },
"settings": { "settings": {
"captionItem": "क्याप्शन सेत्तिन्ग्स",
"downloadItem": "डाउनलोड", "downloadItem": "डाउनलोड",
"enableCaptions": "क्याप्सन इनेबल गर्नुहोस्",
"experienceSection": "हेर्ने अनुभव", "experienceSection": "हेर्ने अनुभव",
"playbackItem": "प्लेब्याक सेटिङ", "playbackItem": "प्लेब्याक सेटिङ",
"qualityItem": "क्वालिटी", "qualityItem": "क्वालिटी",
@ -249,6 +237,17 @@
}, },
"title": "स्रोतहरू", "title": "स्रोतहरू",
"unknownOption": "अज्ञात" "unknownOption": "अज्ञात"
},
"subtitles": {
"customizeLabel": "अनुकूलन गर्नुहोस्",
"offChoice": "बन्द",
"settings": {
"backlink": "अनुकूलन उपशीर्षकहरू",
"delay": "क्याप्शन ढिलाइ",
"fixCapitals": "पूंजीकरण ठीक गर्नुहोस्"
},
"title": "क्याप्शन",
"unknownLanguage": "अज्ञात"
} }
}, },
"metadata": { "metadata": {
@ -371,13 +370,6 @@
}, },
"title": "रूप-रंग" "title": "रूप-रंग"
}, },
"captions": {
"backgroundLabel": "पृष्ठभूमि अस्पष्टता",
"colorLabel": "रङ",
"previewQuote": "म डराउनु हुँदैन। डर मनको हत्यारा हो।",
"textSizeLabel": "शब्दको आकार",
"title": "क्याप्शन"
},
"connections": { "connections": {
"server": { "server": {
"description": "यदि तपाईं आफ्नो डेटा भण्डारण गर्न अनुकूलन ब्याकइन्डमा जडान गर्न चाहनुहुन्छ भने, यसलाई सक्षम गर्नुहोस् र URL प्रदान गर्नुहोस्।", "description": "यदि तपाईं आफ्नो डेटा भण्डारण गर्न अनुकूलन ब्याकइन्डमा जडान गर्न चाहनुहुन्छ भने, यसलाई सक्षम गर्नुहोस् र URL प्रदान गर्नुहोस्।",
@ -415,6 +407,11 @@
"userId": "प्रयोगकर्ता ID" "userId": "प्रयोगकर्ता ID"
} }
}, },
"subtitles": {
"previewQuote": "म डराउनु हुँदैन। डर दिमागको हत्यारा हो।",
"textSizeLabel": "टेक्स्ट साइज",
"title": "क्याप्शन"
},
"unsaved": "तपाईंसँग सुरक्षित नगरिएका परिवर्तनहरू छन्" "unsaved": "तपाईंसँग सुरक्षित नगरिएका परिवर्तनहरू छन्"
} }
} }

View File

@ -107,20 +107,8 @@
"enabled": "Aan het casten..." "enabled": "Aan het casten..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Ondertiteling uploaden",
"customizeLabel": "Instellingen",
"offChoice": "Geen ondertiteling",
"settings": {
"delay": "Tijdverschil ondertiteling",
"fixCapitals": "Hoofdletters corrigeren"
},
"title": "Ondertiteling",
"unknownLanguage": "Onbekend"
},
"downloads": { "downloads": {
"disclaimer": "Downloads worden direct bij de bron opgehaald. movie-web heeft geen controle over het bestand dat je ontvangt.", "disclaimer": "Downloads worden direct bij de bron opgehaald. movie-web heeft geen controle over het bestand dat je ontvangt.",
"downloadCaption": "Ondertiteling downloaden",
"downloadVideo": "Download filmpje", "downloadVideo": "Download filmpje",
"title": "Download" "title": "Download"
}, },
@ -133,9 +121,7 @@
"loadingTitle": "Aan het zoeken..." "loadingTitle": "Aan het zoeken..."
}, },
"settings": { "settings": {
"captionItem": "Instellingen ondertiteling",
"downloadItem": "Download", "downloadItem": "Download",
"enableCaptions": "Ondertiteling aanzetten",
"experienceSection": "Kijk-ervaring", "experienceSection": "Kijk-ervaring",
"playbackItem": "Afspeel instellingen", "playbackItem": "Afspeel instellingen",
"qualityItem": "Kwaliteit", "qualityItem": "Kwaliteit",

View File

@ -129,20 +129,8 @@
"short": "Back" "short": "Back"
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Upload sea shanties",
"customizeLabel": "Customize",
"offChoice": "Off",
"settings": {
"delay": "Shanty delay",
"fixCapitals": "Fix capitalization"
},
"title": "Sea Shanties",
"unknownLanguage": "Unknown"
},
"downloads": { "downloads": {
"disclaimer": "Downloads be taken directly from the provider. movie-web does not have control over how the downloads be provided.", "disclaimer": "Downloads be taken directly from the provider. movie-web does not have control over how the downloads be provided.",
"downloadCaption": "Download sea shanty",
"downloadVideo": "Download film", "downloadVideo": "Download film",
"onAndroid": { "onAndroid": {
"1": "To download on Android, <bold>tap and hold</bold> on the film, then select <bold>save</bold>.", "1": "To download on Android, <bold>tap and hold</bold> on the film, then select <bold>save</bold>.",
@ -180,9 +168,7 @@
"title": "Quality" "title": "Quality"
}, },
"settings": { "settings": {
"captionItem": "Sea Shanty settings",
"downloadItem": "Buried Treasure", "downloadItem": "Buried Treasure",
"enableCaptions": "Enable Sea Shanties",
"experienceSection": "Viewing Experience", "experienceSection": "Viewing Experience",
"playbackItem": "Playback settings", "playbackItem": "Playback settings",
"qualityItem": "Quality", "qualityItem": "Quality",
@ -320,13 +306,6 @@
}, },
"title": "Appearance" "title": "Appearance"
}, },
"captions": {
"backgroundLabel": "Background opacity",
"colorLabel": "Color",
"previewQuote": "I must not fear. Fear be the mind-killer.",
"textSizeLabel": "Text size",
"title": "Captions"
},
"connections": { "connections": {
"server": { "server": {
"description": "To make the application function, all traffic be routed through proxies. Enable this if ye want to bring yer own sailors.", "description": "To make the application function, all traffic be routed through proxies. Enable this if ye want to bring yer own sailors.",

View File

@ -1,74 +1,417 @@
{ {
"global": { "about": {
"name": "movie-web" "description": "movie-web jest aplikacją internetową, która wyszukuje w internecie strumienia. Zespół dąży do minimalistycznego podejścia do konsumpcji treści.",
"faqTitle": "Częste pytania",
"q1": {
"body": "movie-web nie udostępnia żadnych treści. Kiedy klikniesz na coś co chcesz obejrzeć, internet zostanie przeszukany pod kątem wybranych multimediów (na ekranie ładowania oraz w zakładce „źródła wideo” możesz zobaczyć, z jakiego źródła korzystasz). Media nigdy nie są przesyłane przez movie-web, wszystko odbywa się za pośrednictwem tego mechanizmu wyszukiwania.",
"title": "Skąd pochodzą treści?"
}, },
"home": { "q2": {
"search": { "body": "Nie można złożyć wniosku o programu ani filmu, movie-web nie zarządza żadną treścią. Wszystkie treści są przeglądane za pośrednictwem źródeł w Internecie.",
"allResults": "To wszystko co mamy!", "title": "Gdzie mogę złożyć wniosek o programie lub filmie?"
"sectionTitle": "Wyniki wyszukiwania",
"noResults": "Nie mogliśmy niczego znaleźć!",
"failed": "Nie udało się znaleźć mediów, Spróbuj ponownie!",
"loading": "Wczytywanie...",
"placeholder": "Co chciałbyś obejrzeć?"
},
"bookmarks": {
"sectionTitle": "Zakładki"
},
"continueWatching": {
"sectionTitle": "Kontynuuj oglądanie"
}
}, },
"media": { "q3": {
"types": { "body": "Nasze wyniki wyszukiwania pochodzą z TMDB i są wyświetlane niezależnie od tego, czy nasze źródła faktycznie posiadają daną treść.",
"movie": "Filmy", "title": "W wyniku wyszukiwania wyświetlany jest program lub film. Dlaczego nie mogę go odtworzyć?"
"show": "Seriale"
},
"episodeDisplay": "S{{season}} E{{episode}}"
}, },
"player": { "title": "O movie-web"
"playbackError": { },
"title": "Ups, popsuło się!" "actions": {
}, "copied": "Skopiowano",
"metadata": { "copy": "Kopiuj"
"notFound": { },
"badge": "Nie znaleziono", "auth": {
"homeButton": "Wróć na stronę główną", "createAccount": "Nie masz jeszcze konta? <0>Utwórz konto.</0>",
"title": "Nie można znaleźć multimediów.", "deviceNameLabel": "Nazwa urządzenia",
"text": "Nie mogliśmy znaleźć rządanych multimediów. Albo zostały usunięte, albo grzebałeś przy adresie URL." "deviceNamePlaceholder": "Telefon osobisty",
} "generate": {
}, "description": "Twoja fraza hasła działa jak nazwa użytkownika i hasło. Pamiętaj aby zachować go w bezpiecznym miejscu, ponieważ będziesz musiał go wprowadzić aby zalogować się na swoje konto",
"menus": { "next": "Zapisałem frazę hasła",
"captions": { "passphraseFrameLabel": "Fraza hasła",
"customChoice": "Załącz", "title": "Twoja fraza hasła"
"customizeLabel": "Personalizuj",
"title": "Napisy"
},
"sources": {
"title": "Źródła"
},
"episodes": {
"button": "Odcinki",
"loadingTitle": "Wczytywanie...",
"loadingList": "Wczytywanie..."
}
},
"back": {
"default": "Wróć na stronę główną",
"short": "Wróć"
}
}, },
"notFound": { "hasAccount": "Masz już konto? <0>Zaloguj się tutaj.</0>",
"badge": "Nie znaleziono", "login": {
"goHome": "Wróć na stronę główną", "description": "Proszę wpisać frazę hasła, aby zalogować się na swoje konto",
"title": "Nie można znaleźć tej strony", "deviceLengthError": "Proszę wpisać nazwę urządzenia",
"message": "Szukaliśmy wszędzie: w koszu, w szafie a nawet w piwnicy, ale nie byliśmy w stanie znaleźć strony której szukasz." "passphraseLabel": "12-wyrazowa fraza hasła",
"passphrasePlaceholder": "Fraza hasła",
"submit": "Zaloguj się",
"title": "Zaloguj się na swoje konto",
"validationError": "Nieprawidłowe lub niedokończone fraza hasła"
}, },
"navigation": { "register": {
"banner": { "information": {
"offline": "Sprawdź swoje połączenie sieciowe" "color1": "Kolor profilu jeden",
} "color2": "Kolor profilu dwa",
"header": "Wpisz nazwę swojego urządzenia i wybierz kolory oraz ikonę użytkownika",
"icon": "Ikona użytkownika",
"next": "Dalej",
"title": "Informacje o koncie"
}
}, },
"overlays": { "trust": {
"close": "Zamknąć" "failed": {
"text": "Skonfigurowałeś to poprawnie?",
"title": "Nie udało się połączyć z serwerem"
},
"host": "Łączysz się z <0>{{hostname}}</0> - przed utworzeniem konta potwierdź że ufasz temu serwerowi",
"no": "Wstecz",
"title": "Ufasz temu serwerowi?",
"yes": "Ufam temu serwerowi"
},
"verify": {
"description": "Wprowadź swoją frazę hasła, aby potwierdzić jego zapisanie i utworzyć konto",
"invalidData": "Dane są nieprawidłowe",
"noMatch": "Fraza hasła nie pasuje",
"passphraseLabel": "Twoja 12-wyrazowa fraza hasła",
"recaptchaFailed": "Weryfikacja ReCaptcha nie powiodła się",
"register": "Utwórz konto",
"title": "Potwierdź swoją frazę hasła"
} }
},
"errors": {
"badge": "Zepsuło się",
"details": "Szczegóły błędu",
"reloadPage": "Odśwież stronę",
"showError": "Pokaż szczegóły błędu",
"title": "Napotkaliśmy błąd!"
},
"footer": {
"legal": {
"disclaimer": "Zastrzeżenie",
"disclaimerText": "movie-web nie przechowuje żadnych plików, zawiera jedynie łącza do usług stron trzecich. Kwestie prawne należy konsultować z hostami plików i dostawcami. movie-web nie ponosi odpowiedzialności za jakiekolwiek pliki multimedialne prezentowane przez dostawców wideo."
},
"links": {
"discord": "Discord",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "Oglądaj swoje ulubione programy i filmy za pomocą tej aplikacji streamingowej typu open source."
},
"global": {
"name": "movie-web",
"pages": {
"about": "Informacje",
"dmca": "DMCA",
"login": "Zaloguj sie",
"pagetitle": "{{title}} - movie-web",
"register": "Zarejestruj się",
"settings": "Ustawienia"
}
},
"home": {
"bookmarks": {
"sectionTitle": "Zakładki"
},
"continueWatching": {
"sectionTitle": "Kontynuuj oglądanie"
},
"mediaList": {
"stopEditing": "Przestań edytować"
},
"search": {
"allResults": "To wszystko co mamy!",
"failed": "Nie udało się znaleźć mediów, Spróbuj ponownie!",
"loading": "Wczytywanie...",
"noResults": "Nie mogliśmy niczego znaleźć!",
"placeholder": "Co chciałbyś obejrzeć?",
"sectionTitle": "Wyniki wyszukiwania"
},
"titles": {
"day": {
"default": "Co chciałbyś obejrzeć dziś po południu?"
},
"morning": {
"default": "Co chciałbyś obejrzeć dziś rano?",
"extra": [
"Słyszałem że „Przed wschodem słońca” jest dobre"
]
},
"night": {
"default": "Co chciałbyś obejrzeć dziś wieczorem?",
"extra": [
"Zmęczony? Słyszałem że „Egzorcysta” jest dobry."
]
}
}
},
"media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": {
"movie": "Filmy",
"show": "Seriale"
}
},
"navigation": {
"banner": {
"offline": "Sprawdź swoje połączenie sieciowe"
},
"menu": {
"about": "O nas",
"donation": "Wspieraj nas",
"logout": "Wyloguj się",
"register": "Synchronizuj z chmurą",
"settings": "Ustawienia",
"support": "Wsparcie"
}
},
"notFound": {
"badge": "Nie znaleziono",
"goHome": "Wróć na stronę główną",
"message": "Szukaliśmy wszędzie: w koszu, w szafie, a nawet w piwnicy, ale nie byliśmy w stanie znaleźć strony której szukasz.",
"title": "Nie można znaleźć tej strony"
},
"overlays": {
"close": "Zamknij"
},
"player": {
"back": {
"default": "Wróć na stronę główną",
"short": "Wróć"
},
"casting": {
"enabled": "Przesyłam na urządzenie..."
},
"menus": {
"downloads": {
"disclaimer": "Pliki do pobrania są pobierane bezpośrednio od dostawcy. movie-web nie ma kontroli nad sposobem dostarczania plików do pobrania.",
"downloadPlaylist": "Pobierz playlistę",
"downloadVideo": "Pobierz wideo",
"hlsDisclaimer": "Pliki do pobrania są pobierane bezpośrednio od dostawcy. movie-web nie ma kontroli nad sposobem dostarczania plików do pobrania. Należy pamiętać, że pobierana jest playlista HLS, przeznaczona dla użytkowników zaznajomionych z zaawansowanym strumieniowaniem multimediów.",
"onAndroid": {
"1": "Aby pobrać na Androidzie, kliknij przycisk pobierania, a następnie na nowej stronie <bold>dotknij i przytrzymaj</bold> na filmie, a następnie wybierz <bold>zapisz</bold>.",
"shortTitle": "Pobierz / Android",
"title": "Pobieranie na Androidzie"
},
"onIos": {
"1": "Aby pobrać na iOS, kliknij przycisk pobierania, a następnie na nowej stronie, kliknij <bold><ios_share /></bold>, a następnie <bold>Zapisz do plików <ios_files /></bold>.",
"shortTitle": "Pobierz / iOS",
"title": "Pobieranie na iOS"
},
"onPc": {
"1": "Na komputerze, kliknij przycisk pobierania, a następnie na nowej stronie, kliknij wideo prawym przyciskiem myszy i wybierz <bold>Zapisz wideo jako</bold>",
"shortTitle": "Pobierz / Komputer",
"title": "Pobieranie na komputerze"
},
"title": "Pobierz"
},
"episodes": {
"button": "Odcinki",
"emptyState": "Nie ma odcinków w tym sezonie, sprawdź później!",
"episodeBadge": "E{{episode}}",
"loadingError": "Błąd podczas ładowania sezonu",
"loadingList": "Wczytywanie...",
"loadingTitle": "Wczytywanie..."
},
"playback": {
"speedLabel": "Szybkość odtwarzania",
"title": "Ustawienia odtwarzania"
},
"quality": {
"automaticLabel": "Jakość automatyczna",
"hint": "Możesz spróbować <0>przełączyć źródło</0> aby uzyskać różne opcje jakości.",
"iosNoQuality": "Ze względu na ograniczenia zdefiniowane przez Apple, wybór jakości nie jest dostępny w systemie iOS dla tego źródła. Możesz spróbować <0>przełączyć na inne źródło</0> aby uzyskać inne opcje jakości.",
"title": "Jakość"
},
"settings": {
"downloadItem": "Pobierz",
"experienceSection": "Odtwarzanie",
"playbackItem": "Ustawienia odtwarzania",
"qualityItem": "Jakość",
"sourceItem": "Źródła wideo",
"videoSection": "Ustawienia wideo"
},
"sources": {
"failed": {
"text": "Wystąpił błąd podczas próby znalezienia filmów. Spróbuj użyć innego źródła.",
"title": "Nie udało się zgarnąć"
},
"noEmbeds": {
"text": "Nie znaleźliśmy żadnych osadzonych plików. Spróbuj użyć innego źródła.",
"title": "Nie znaleziono osadzonych treści"
},
"noStream": {
"text": "To źródło nie ma strumieni dla tego filmu lub programu.",
"title": "Brak strumienia"
},
"title": "Źródła",
"unknownOption": "Nieznany"
},
"subtitles": {
"customizeLabel": "Dostosuj",
"offChoice": "Wyłączone",
"settings": {
"backlink": "Własne napisy",
"delay": "Opóźnienie napisów",
"fixCapitals": "Popraw kapitalizację"
},
"title": "Napisy",
"unknownLanguage": "Nieznany"
}
},
"metadata": {
"failed": {
"badge": "Nie powiodło się",
"homeButton": "Wróć na stronę główną",
"text": "Nie można załadować metadanych multimediów z TMDB. Sprawdź czy TMDB nie działa lub jest zablokowany na twoim połączeniu internetowym.",
"title": "Nie udało się załadować metadanych"
},
"notFound": {
"badge": "Nie znaleziono",
"homeButton": "Wróć na stronę główną",
"text": "Nie znaleźliśmy żądanych multimediów. Albo został usunięty, albo zmieniłeś adres URL.",
"title": "Nie można znaleźć multimediów."
}
},
"nextEpisode": {
"cancel": "Anuluj",
"next": "Następny odcinek"
},
"playbackError": {
"badge": "Błąd odtwarzania",
"errors": {
"errorAborted": "Pobieranie multimediów zostało przerwane na żądanie użytkownika.",
"errorDecode": "Pomimo wcześniejszego stwierdzenia że zasób multimedialny nadaje się do użytku, wystąpił błąd podczas próby dekodowania zasobu multimedialnego, co spowodowało błąd.",
"errorGenericMedia": "Wystąpił nieznany błąd multimediów.",
"errorNetwork": "Wystąpił jakiś błąd sieciowy, który uniemożliwił pomyślne pobranie multimediów, mimo że były one wcześniej dostępne.",
"errorNotSupported": "Obiekt multimediów lub dostawcy multimediów nie jest obsługiwany."
},
"homeButton": "Wróć na stronę główną",
"text": "Wystąpił błąd podczas próby odtworzenia multimediów. Spróbuj ponownie.",
"title": "Nie udało się odtworzyć wideo!"
},
"scraping": {
"items": {
"failure": "Wystąpił błąd",
"notFound": "Nie ma wideo",
"pending": "Sprawdzanie filmów..."
},
"notFound": {
"badge": "Nie znaleziono",
"detailsButton": "Pokaż szczegóły",
"homeButton": "Wróć na stronę główną",
"text": "Przeszukaliśmy naszych dostawców i nie możemy znaleźć poszukiwanych multimediów! Nie przechowujemy multimediów i nie mamy kontroli nad ich dostępnością. Kliknij \"Pokaż szczegóły\" poniżej, aby uzyskać więcej informacji.",
"title": "Nie mogliśmy znaleźć tego"
}
},
"time": {
"regular": "{{timeWatched}} / {{duration}}",
"remaining": "Zostało {{timeLeft}} • Skończ o {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
}
},
"screens": {
"dmca": {
"text": "Witamy na stronie kontaktowej DMCA serwisu movie-web! Szanujemy prawa własności intelektualnej i chcemy szybko rozwiązywać wszelkie problemy związane z prawami autorskimi. Jeśli uważasz że twoja praca chroniona prawem autorskim została niewłaściwie wykorzystana na naszej platformie, proszę wysłać szczegółowe powiadomienie DMCA na poniższy adres e-mail. Prosimy o dołączenie opisu materiału chronionego prawem autorskim, danych kontaktowych i oświadczenia w dobrej wierze. Zależy nam na szybkim rozwiązywaniu takich spraw i będziemy wdzięczni za współpracę w utrzymaniu movie-web jako miejsce w którym szanuje się kreatywność i prawa autorskie.",
"title": "DMCA"
},
"loadingApp": "Wczytywanie aplikacji",
"loadingUser": "Wczytywanie profilu",
"loadingUserError": {
"logout": "Wyloguj się",
"reset": "Zresetuj serwer niestandardowy",
"text": "Nie udało się wczytać profilu",
"textWithReset": "Nie udało się wczytać profilu z niestandardowego serwera, chcesz powrócić do domyślnego serwera?"
},
"migration": {
"failed": "Migracja danych nie powiodła się.",
"inProgress": "Proszę czekać, przeprowadzamy migrację danych. Nie powinno to zająć dużo czasu."
}
},
"settings": {
"account": {
"accountDetails": {
"deviceNameLabel": "Nazwa urządzenia",
"deviceNamePlaceholder": "Telefon osobisty",
"editProfile": "Edytuj",
"logoutButton": "Wyloguj się"
},
"actions": {
"delete": {
"button": "Usuń konto",
"confirmButton": "Usuń konto",
"confirmDescription": "Na pewno chcesz usunąć swoje konto? Wszystkie twoje dane zostaną stracone!",
"confirmTitle": "Jesteś pewny?",
"text": "Działanie to jest nieodwracalne. Wszystkie dane zostaną usunięte i nie będzie można ich odzyskać.",
"title": "Usuń konto"
},
"title": "Działania"
},
"devices": {
"deviceNameLabel": "Nazwa urządzenia",
"failed": "Nie udało się załadować sesji",
"removeDevice": "Usuń",
"title": "Urządzenia"
},
"profile": {
"finish": "Zakończ edycję",
"firstColor": "Kolor profilu jeden",
"secondColor": "Kolor profilu dwa",
"title": "Edytuj zdjęcie profilowe",
"userIcon": "Ikona użytkownika"
},
"register": {
"cta": "Rozpocznij",
"text": "Udostępnij postępy oglądania między urządzeniami i synchronizuj je.",
"title": "Synchronizuj z chmurą"
},
"title": "Konto"
},
"appearance": {
"activeTheme": "Aktywny",
"themes": {
"blue": "Niebieski",
"default": "Domyślny",
"gray": "Szary",
"red": "Czerwony",
"teal": "Morski"
},
"title": "Wygląd"
},
"connections": {
"server": {
"description": "Jeśli chcesz połączyć się z niestandardowym backendem w celu przechowywania danych, włącz tę opcję i podaj adres URL.",
"label": "Serwer niestandardowy",
"urlLabel": "Adres URL niestandardowego serwera"
},
"title": "Połączenia",
"workers": {
"addButton": "Dodaj nowego pracownika",
"description": "Aby aplikacja działała, cały ruch jest kierowany przez serwery proxy. Włącz tę opcję, jeśli chcesz korzystać z własnych pracowników.",
"emptyState": "Brak pracowników, dodaj jednego poniżej",
"label": "Używaj niestandardowych pracowników proxy",
"urlLabel": "Adresy URL pracowników",
"urlPlaceholder": "https://"
}
},
"locale": {
"language": "Język aplikacji",
"languageDescription": "Język zastosowany do całej aplikacji.",
"title": "Język"
},
"reset": "Reset",
"save": "Zapisz",
"sidebar": {
"info": {
"appVersion": "Wersja aplikacji",
"backendUrl": "Adres URL backendu",
"backendVersion": "Wersja backendu",
"hostname": "Nazwa hosta",
"insecure": "Niebezpieczny",
"notLoggedIn": "Nie jesteś zalogowany",
"secure": "Bezpieczne",
"title": "Informacje o aplikacji",
"unknownVersion": "Nieznany",
"userId": "Identyfikator użytkownika"
}
},
"subtitles": {
"previewQuote": "Nie wolno mi się bać. Strach zabija myślenie.",
"textSizeLabel": "Rozmiar czcionki",
"title": "Napisy"
},
"unsaved": "Masz niezapisane zmiany"
}
} }

View File

@ -0,0 +1,417 @@
{
"about": {
"description": "movie-web é uma aplicação web que busca na internet por streams. A equipe visa uma abordagem principalmente minimalista para consumir conteúdo.",
"faqTitle": "Perguntas comuns",
"q1": {
"body": "movie-web não hospeda nenhum conteúdo. Quando você clica em algo para assistir, a internet é pesquisada pela mídia selecionada (Na tela de carregamento e na aba 'fontes de vídeo' você pode ver qual fonte está usando). A mídia nunca é carregada pelo movie-web, tudo é através deste mecanismo de busca.",
"title": "De onde vem o conteúdo?"
},
"q2": {
"body": "Não é possível solicitar um filme ou série, o movie-web não gerencia nenhum conteúdo. Todo o conteúdo é visualizado através de fontes na internet.",
"title": "Onde posso solicitar um filme ou série?"
},
"q3": {
"body": "Nossos resultados de pesquisa são alimentados pelo The Movie Database (TMDB) e são exibidos independentemente de nossas fontes terem ou não o conteúdo.",
"title": "Os resultados da pesquisa mostram o filme ou série, por que não consigo reproduzi-lo?"
},
"title": "Sobre o movie-web"
},
"actions": {
"copied": "Copiado",
"copy": "Copiar"
},
"auth": {
"createAccount": "Ainda não tem uma conta? <0>Crie uma conta.</0>",
"deviceNameLabel": "Nome do dispositivo",
"deviceNamePlaceholder": "Telefone pessoal",
"generate": {
"description": "Sua frase de acesso funciona como seu nome de usuário e senha. Certifique-se de mantê-la segura, pois você precisará inseri-la para entrar na sua conta",
"next": "Eu salvei minha frase de acesso",
"passphraseFrameLabel": "Frase de acesso",
"title": "Sua frase de acesso"
},
"hasAccount": "Já tem uma conta? <0>Entre aqui.</0>",
"login": {
"description": "Por favor, insira sua frase de acesso para entrar na sua conta",
"deviceLengthError": "Por favor, insira um nome para o dispositivo",
"passphraseLabel": "Frase de acesso de 12 palavras",
"passphrasePlaceholder": "Frase de acesso",
"submit": "Entrar",
"title": "Entrar na sua conta",
"validationError": "Frase de acesso incorreta ou incompleta"
},
"register": {
"information": {
"color1": "Cor do perfil um",
"color2": "Cor do perfil dois",
"header": "Digite um nome para o seu dispositivo e escolha cores e um ícone de usuário de sua preferência",
"icon": "Ícone do usuário",
"next": "Próximo",
"title": "Informações da conta"
}
},
"trust": {
"failed": {
"text": "Você o configurou corretamente?",
"title": "Falha ao alcançar o servidor"
},
"host": "Você está se conectando a <0>{{hostname}}</0> - por favor, confirme se confia nele antes de criar uma conta",
"no": "Voltar",
"title": "Você confia neste servidor?",
"yes": "Eu confio neste servidor"
},
"verify": {
"description": "Por favor, insira sua frase de acesso anterior para confirmar que você a salvou e para criar sua conta",
"invalidData": "Dados não são válidos",
"noMatch": "Frase de acesso não corresponde",
"passphraseLabel": "Sua frase de acesso de 12 palavras",
"recaptchaFailed": "Falha na validação do ReCaptcha",
"register": "Criar conta",
"title": "Confirme sua frase de acesso"
}
},
"errors": {
"badge": "Quebrou",
"details": "Detalhes do erro",
"reloadPage": "Recarregar a página",
"showError": "Mostrar detalhes do erro",
"title": "Encontramos um erro!"
},
"footer": {
"legal": {
"disclaimer": "Aviso legal",
"disclaimerText": "movie-web não hospeda nenhum arquivo, apenas fornece links para serviços de terceiros. Questões legais devem ser tratadas com os hosts de arquivos e provedores. movie-web não é responsável por quaisquer arquivos de mídia exibidos pelos provedores de vídeo."
},
"links": {
"discord": "Discord",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "Assista seus programas e filmes favoritos com este aplicativo de streaming de código aberto."
},
"global": {
"name": "movie-web",
"pages": {
"about": "Sobre",
"dmca": "DMCA",
"login": "Entrar",
"pagetitle": "{{title}} - movie-web",
"register": "Registrar",
"settings": "Configurações"
}
},
"home": {
"bookmarks": {
"sectionTitle": "Favoritos"
},
"continueWatching": {
"sectionTitle": "Continue assistindo"
},
"mediaList": {
"stopEditing": "Parar de editar"
},
"search": {
"allResults": "Isso é tudo que temos!",
"failed": "Falha ao encontrar mídia, tente novamente!",
"loading": "Carregando...",
"noResults": "Não conseguimos encontrar nada!",
"placeholder": "O que você quer assistir?",
"sectionTitle": "Resultados da pesquisa"
},
"titles": {
"day": {
"default": "O que você gostaria de assistir esta tarde?"
},
"morning": {
"default": "O que você gostaria de assistir esta manhã?",
"extra": [
"Ouvi dizer que Antes do Amanhecer é bom"
]
},
"night": {
"default": "O que você gostaria de assistir esta noite?",
"extra": [
"Cansado? Ouvi dizer que O Exorcista é bom."
]
}
}
},
"media": {
"episodeDisplay": "T{{season}} E{{episode}}",
"types": {
"movie": "Filme",
"show": "Série"
}
},
"navigation": {
"banner": {
"offline": "Verifique sua conexão com a internet"
},
"menu": {
"about": "Sobre nós",
"donation": "Doar",
"logout": "Sair",
"register": "Sincronizar com a nuvem",
"settings": "Configurações",
"support": "Suporte"
}
},
"notFound": {
"badge": "Não encontrado",
"goHome": "Voltar para o início",
"message": "Procuramos em todos os lugares: debaixo das lixeiras, no armário, atrás do proxy, mas no final não conseguimos encontrar a página que você está procurando.",
"title": "Não conseguimos encontrar essa página"
},
"overlays": {
"close": "Fechar"
},
"player": {
"back": {
"default": "Voltar para o início",
"short": "Voltar"
},
"casting": {
"enabled": "Transmitindo para o dispositivo..."
},
"menus": {
"downloads": {
"disclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos.",
"downloadPlaylist": "Baixar playlist",
"downloadVideo": "Baixar vídeo",
"hlsDisclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos. Por favor, note que você está baixando uma playlist HLS, isso é destinado para usuários familiarizados com streaming multimídia avançado.",
"onAndroid": {
"1": "Para baixar no Android, clique no botão de download e, na nova página, <bold>toque e segure</bold> no vídeo, depois selecione <bold>salvar</bold>.",
"shortTitle": "Baixar / Android",
"title": "Baixando no Android"
},
"onIos": {
"1": "Para baixar no iOS, clique no botão de download e, na nova página, clique em <bold><ios_share /></bold>, depois em <bold>Salvar em Arquivos <ios_files /></bold>.",
"shortTitle": "Baixar / iOS",
"title": "Baixando no iOS"
},
"onPc": {
"1": "No PC, clique no botão de download e, na nova página, clique com o botão direito do mouse no vídeo e selecione <bold>Salvar vídeo como</bold>",
"shortTitle": "Baixar / PC",
"title": "Baixando no PC"
},
"title": "Baixar"
},
"episodes": {
"button": "Episódios",
"emptyState": "Não há episódios nesta temporada, volte mais tarde!",
"episodeBadge": "E{{episode}}",
"loadingError": "Erro ao carregar temporada",
"loadingList": "Carregando...",
"loadingTitle": "Carregando..."
},
"playback": {
"speedLabel": "Velocidade de reprodução",
"title": "Configurações de reprodução"
},
"quality": {
"automaticLabel": "Qualidade automática",
"hint": "Você pode tentar <0>trocar de fonte</0> para obter diferentes opções de qualidade.",
"iosNoQuality": "Devido a limitações definidas pela Apple, a seleção de qualidade não está disponível no iOS para esta fonte. Você pode tentar <0>trocar para outra fonte</0> para obter diferentes opções de qualidade.",
"title": "Qualidade"
},
"settings": {
"downloadItem": "Baixar",
"experienceSection": "Experiência de visualização",
"playbackItem": "Configurações de reprodução",
"qualityItem": "Qualidade",
"sourceItem": "Fontes de vídeo",
"videoSection": "Configurações de vídeo"
},
"sources": {
"failed": {
"text": "Houve um erro ao tentar encontrar vídeos, por favor, tente uma fonte diferente.",
"title": "Falha ao raspar"
},
"noEmbeds": {
"text": "Não conseguimos encontrar nenhum incorporado, por favor, tente uma fonte diferente.",
"title": "Nenhum incorporado encontrado"
},
"noStream": {
"text": "Esta fonte não tem transmissões para este filme ou série.",
"title": "Sem transmissão"
},
"title": "Fontes",
"unknownOption": "Desconhecido"
},
"subtitles": {
"customizeLabel": "Personalizar",
"offChoice": "Desativadas",
"settings": {
"backlink": "Legendas personalizadas",
"delay": "Atraso da legenda",
"fixCapitals": "Corrigir letras maiúsculas"
},
"title": "Legendas",
"unknownLanguage": "Desconhecido"
}
},
"metadata": {
"failed": {
"badge": "Falhou",
"homeButton": "Ir para o início",
"text": "Não foi possível carregar os metadados da mídia do TMDB. Por favor, verifique se o TMDB está fora do ar ou bloqueado na sua conexão de internet.",
"title": "Falha ao carregar metadados"
},
"notFound": {
"badge": "Não encontrado",
"homeButton": "Voltar para o início",
"text": "Não conseguimos encontrar a mídia que você solicitou. Ou ela foi removida ou você alterou o URL.",
"title": "Não conseguimos encontrar essa mídia."
}
},
"nextEpisode": {
"cancel": "Cancelar",
"next": "Próximo episódio"
},
"playbackError": {
"badge": "Erro de reprodução",
"errors": {
"errorAborted": "A busca pela mídia foi abortada a pedido do usuário.",
"errorDecode": "Apesar de ter sido previamente determinado como utilizável, ocorreu um erro ao tentar decodificar o recurso de mídia, resultando em um erro.",
"errorGenericMedia": "Ocorreu um erro desconhecido de mídia.",
"errorNetwork": "Ocorreu algum tipo de erro de rede que impediu a mídia de ser buscada com sucesso, apesar de ter sido previamente disponível.",
"errorNotSupported": "A mídia ou objeto do provedor de mídia não é suportado."
},
"homeButton": "Ir para o início",
"text": "Houve um erro ao tentar reproduzir a mídia. Por favor, tente novamente.",
"title": "Falha ao reproduzir o vídeo!"
},
"scraping": {
"items": {
"failure": "Ocorreu um erro",
"notFound": "Não tem o vídeo",
"pending": "Verificando vídeos..."
},
"notFound": {
"badge": "Não encontrado",
"detailsButton": "Mostrar detalhes",
"homeButton": "Ir para o início",
"text": "Procuramos em nossos provedores e não conseguimos encontrar a mídia que você está procurando! Não hospedamos a mídia e não temos controle sobre o que está disponível. Por favor, clique em 'Mostrar detalhes' abaixo para mais informações.",
"title": "Não conseguimos encontrar isso"
}
},
"time": {
"regular": "{{timeWatched}} / {{duration}}",
"remaining": "{{timeLeft}} restantes • Terminar às {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
}
},
"screens": {
"dmca": {
"text": "Bem-vindo à página de contato do DMCA do movie-web! Respeitamos os direitos de propriedade intelectual e queremos resolver quaisquer preocupações com direitos autorais rapidamente. Se você acredita que seu trabalho protegido por direitos autorais foi usado indevidamente em nossa plataforma, envie um aviso detalhado de DMCA para o e-mail abaixo. Inclua uma descrição do material protegido por direitos autorais, seus detalhes de contato e uma declaração de crença de boa fé. Estamos comprometidos em resolver essas questões prontamente e agradecemos sua cooperação em manter o movie-web um lugar que respeita a criatividade e os direitos autorais.",
"title": "DMCA"
},
"loadingApp": "Carregando aplicativo",
"loadingUser": "Carregando seu perfil",
"loadingUserError": {
"logout": "Sair",
"reset": "Redefinir servidor personalizado",
"text": "Falha ao carregar seu perfil",
"textWithReset": "Falha ao carregar seu perfil do seu servidor personalizado, deseja redefinir para o servidor padrão?"
},
"migration": {
"failed": "Falha ao migrar seus dados.",
"inProgress": "Por favor, aguarde, estamos migrando seus dados. Isso não deve demorar muito."
}
},
"settings": {
"account": {
"accountDetails": {
"deviceNameLabel": "Nome do dispositivo",
"deviceNamePlaceholder": "Telefone pessoal",
"editProfile": "Editar",
"logoutButton": "Sair"
},
"actions": {
"delete": {
"button": "Excluir conta",
"confirmButton": "Excluir conta",
"confirmDescription": "Você tem certeza de que deseja excluir sua conta? Todos os seus dados serão perdidos!",
"confirmTitle": "Você tem certeza?",
"text": "Esta ação é irreversível. Todos os dados serão excluídos e nada poderá ser recuperado.",
"title": "Excluir conta"
},
"title": "Ações"
},
"devices": {
"deviceNameLabel": "Nome do dispositivo",
"failed": "Falha ao carregar sessões",
"removeDevice": "Remover",
"title": "Dispositivos"
},
"profile": {
"finish": "Finalizar edição",
"firstColor": "Cor do perfil um",
"secondColor": "Cor do perfil dois",
"title": "Editar foto de perfil",
"userIcon": "Ícone do usuário"
},
"register": {
"cta": "Começar",
"text": "Compartilhe seu progresso de visualização entre dispositivos e mantenha-os sincronizados.",
"title": "Sincronizar com a nuvem"
},
"title": "Conta"
},
"appearance": {
"activeTheme": "Ativo",
"themes": {
"blue": "Azul",
"default": "Padrão",
"gray": "Cinza",
"red": "Vermelho",
"teal": "Verde-azulado"
},
"title": "Aparência"
},
"connections": {
"server": {
"description": "Se você deseja se conectar a um backend personalizado para armazenar seus dados, ative isso e forneça a URL.",
"label": "Servidor personalizado",
"urlLabel": "URL do servidor personalizado"
},
"title": "Conexões",
"workers": {
"addButton": "Adicionar novo worker",
"description": "Para fazer o aplicativo funcionar, todo o tráfego é roteado através de proxies. Ative isso se você quiser trazer seus próprios workers.",
"emptyState": "Ainda não há workers, adicione um abaixo",
"label": "Usar proxy workers personalizados",
"urlLabel": "URLs dos workers",
"urlPlaceholder": "https://"
}
},
"locale": {
"language": "Idioma do aplicativo",
"languageDescription": "Idioma aplicado a todo o aplicativo.",
"title": "Região"
},
"reset": "Redefinir",
"save": "Salvar",
"sidebar": {
"info": {
"appVersion": "Versão do aplicativo",
"backendUrl": "URL do backend",
"backendVersion": "Versão do backend",
"hostname": "Nome do host",
"insecure": "Inseguro",
"notLoggedIn": "Você não está logado",
"secure": "Seguro",
"title": "Informações do aplicativo",
"unknownVersion": "Desconhecido",
"userId": "ID do usuário"
}
},
"subtitles": {
"previewQuote": "Eu não devo ter medo. Medo é o assassino da mente.",
"textSizeLabel": "Tamanho do texto",
"title": "Legendas"
},
"unsaved": "Você tem alterações não salvas"
}
}

View File

@ -0,0 +1,5 @@
{
"about": {
"faqTitle": "Общие вопросы"
}
}

View File

@ -3,7 +3,7 @@
"description": "movie-web är en webbapplikation som söker efter strömmar på internet. Teamet strävar efter en mestadels minimalistisk ansats för att konsumera innehåll.", "description": "movie-web är en webbapplikation som söker efter strömmar på internet. Teamet strävar efter en mestadels minimalistisk ansats för att konsumera innehåll.",
"faqTitle": "Vanliga frågor", "faqTitle": "Vanliga frågor",
"q1": { "q1": {
"body": "movie-web hostar inte något innehåll. När du klickar på något att titta på, söks internet efter den valda median (På laddningsskärmen och i fliken 'video sources' kan du se vilken källa du använder). Media laddas aldrig upp av movie-web, allt går genom detta sökmechanism.", "body": "Movie-web hostar ingen innehåll. När du klickar på något att titta på, söks internet efter det valda mediet (På laddningsskärmen och i fliken 'Videokällor' kan du se vilken källa du använder). Inget medium laddas upp av movie-web, allt sker genom sökmotorn.",
"title": "Var kommer innehållet ifrån?" "title": "Var kommer innehållet ifrån?"
}, },
"q2": { "q2": {
@ -78,15 +78,15 @@
}, },
"footer": { "footer": {
"legal": { "legal": {
"disclaimer": "Ansvarsfriskrivning", "disclaimer": "Friskriver sig från ansvar",
"disclaimerText": "movie-web hostar inga filer, den länkar bara till tjänster från tredje part. Juridiska frågor bör tas upp med filvärdar och leverantörer. movie-web ansvarar inte för några mediefiler som visas av videoleverantörerna." "disclaimerText": "Movie-web hostar inga filer utan länkar endast till filer från tredje part. Eventuella juridiska frågor bör tas upp med källorna till materialet. Movie-web varken ansvarar eller styr över de mediefiler som visas."
}, },
"links": { "links": {
"discord": "Discord", "discord": "Discord",
"dmca": "DMCA", "dmca": "DMCA",
"github": "GitHub" "github": "GitHub"
}, },
"tagline": "Titta på dina favoritprogram och filmer med denna öppna källkodsströmapp." "tagline": "Titta på dina favoritprogram och filmer helt gratis."
}, },
"global": { "global": {
"name": "movie-web", "name": "movie-web",
@ -173,20 +173,8 @@
"enabled": "Castar till enheten..." "enabled": "Castar till enheten..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Välj undertext från fil",
"customizeLabel": "Anpassa",
"offChoice": "Av",
"settings": {
"delay": "Fördröjning för undertexter",
"fixCapitals": "Åtgärda versaler"
},
"title": "Undertexter",
"unknownLanguage": "Okänd"
},
"downloads": { "downloads": {
"disclaimer": "Nedladdningar görs direkt från leverantören. movie-web har ingen kontroll över hur nedladdningarna tillhandahålls.", "disclaimer": "Nedladdningar görs direkt från leverantören. movie-web har ingen kontroll över hur nedladdningarna tillhandahålls.",
"downloadCaption": "Ladda ner aktuell undertext",
"downloadVideo": "Ladda ner video", "downloadVideo": "Ladda ner video",
"onAndroid": { "onAndroid": {
"1": "För att ladda ner på Android, klicka på nedladdningsknappen och på den nya sidan <bold>trycker och håller</bold> på videon, välj sedan <bold>spara</bold>.", "1": "För att ladda ner på Android, klicka på nedladdningsknappen och på den nya sidan <bold>trycker och håller</bold> på videon, välj sedan <bold>spara</bold>.",
@ -224,9 +212,7 @@
"title": "Kvalitet" "title": "Kvalitet"
}, },
"settings": { "settings": {
"captionItem": "Undertextinställningar",
"downloadItem": "Ladda ner", "downloadItem": "Ladda ner",
"enableCaptions": "Aktivera undertexter",
"experienceSection": "Visningsupplevelse", "experienceSection": "Visningsupplevelse",
"playbackItem": "Uppspelningsinställningar", "playbackItem": "Uppspelningsinställningar",
"qualityItem": "Kvalitet", "qualityItem": "Kvalitet",
@ -370,13 +356,6 @@
}, },
"title": "Utseende" "title": "Utseende"
}, },
"captions": {
"backgroundLabel": "Bakgrundstransparens",
"colorLabel": "Färg",
"previewQuote": "Jag får inte frukta. Rädsla är tankedödaren.",
"textSizeLabel": "Textstorlek",
"title": "Textning"
},
"connections": { "connections": {
"server": { "server": {
"description": "Om du vill ansluta till en anpassad bakänd för att lagra dina data, aktivera detta och ange URL:en.", "description": "Om du vill ansluta till en anpassad bakänd för att lagra dina data, aktivera detta och ange URL:en.",

View File

@ -27,6 +27,7 @@
"generate": { "generate": {
"description": "รหัสผ่านของคุณถูกตั้งเช่นเดียวกับชื่อผู้ใช้และรหัสผ่าน โปรดตรวจสอบให้แน่ใจว่ารหัสผ่านของคุณถูกเก็บอย่างปลอดภัย คุณจำเป็นต้องใช้เพื่อเข้าสู่ระบบบัญชีของคุณ", "description": "รหัสผ่านของคุณถูกตั้งเช่นเดียวกับชื่อผู้ใช้และรหัสผ่าน โปรดตรวจสอบให้แน่ใจว่ารหัสผ่านของคุณถูกเก็บอย่างปลอดภัย คุณจำเป็นต้องใช้เพื่อเข้าสู่ระบบบัญชีของคุณ",
"next": "ฉันบันทึกรหัสผ่านของฉันแล้ว", "next": "ฉันบันทึกรหัสผ่านของฉันแล้ว",
"passphraseFrameLabel": "หรัสผ่าน",
"title": "หรัสผ่านของคุณ" "title": "หรัสผ่านของคุณ"
}, },
"hasAccount": "คุณมีบัญชีแล้วหรือไม่? <0>เข้าสู่ระบบที่นี่.</0>", "hasAccount": "คุณมีบัญชีแล้วหรือไม่? <0>เข้าสู่ระบบที่นี่.</0>",
@ -173,20 +174,8 @@
"enabled": "เชื่อมต่ออุปกรณ์.." "enabled": "เชื่อมต่ออุปกรณ์.."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "เลือกคําบรรยายจากไฟล์",
"customizeLabel": "ปรับแต่ง",
"offChoice": "ปิด",
"settings": {
"delay": "คําบรรยายล่าช้า",
"fixCapitals": "แก้ไขตัวพิมพ์ใหญ่"
},
"title": "คําบรรยาย",
"unknownLanguage": "ไม่ทราบ"
},
"downloads": { "downloads": {
"disclaimer": "การดาวน์โหลดจะถูกนํามาจากผู้ให้บริการโดยตรง movie-web ไม่สามารถควบคุมวิธีการดาวน์โหลดได้", "disclaimer": "การดาวน์โหลดจะถูกนํามาจากผู้ให้บริการโดยตรง movie-web ไม่สามารถควบคุมวิธีการดาวน์โหลดได้",
"downloadCaption": "ดาวน์โหลดคำบรรยายปัจจุบัน",
"downloadVideo": "ดาวน์โหลดวิดีโอ", "downloadVideo": "ดาวน์โหลดวิดีโอ",
"onAndroid": { "onAndroid": {
"1": "หากต้องการดาวน์โหลดบน Android ให้คลิกปุ่มดาวน์โหลด จากนั้นในหน้าใหม่ <bold>แตะ</bold> บนวิดีโอค้างไว้ จากนั้นเลือก <bold>บันทึก</bold>", "1": "หากต้องการดาวน์โหลดบน Android ให้คลิกปุ่มดาวน์โหลด จากนั้นในหน้าใหม่ <bold>แตะ</bold> บนวิดีโอค้างไว้ จากนั้นเลือก <bold>บันทึก</bold>",
@ -224,9 +213,7 @@
"title": "คุณภาพ" "title": "คุณภาพ"
}, },
"settings": { "settings": {
"captionItem": "การตั้งค่าคําบรรยาย",
"downloadItem": "ดาวน์โหลด", "downloadItem": "ดาวน์โหลด",
"enableCaptions": "เปิดใช้งานคําบรรยาย",
"experienceSection": "ประสบการณ์รับชม", "experienceSection": "ประสบการณ์รับชม",
"playbackItem": "ตั้งค่าการเล่น", "playbackItem": "ตั้งค่าการเล่น",
"qualityItem": "คุณภาพ", "qualityItem": "คุณภาพ",
@ -370,13 +357,6 @@
}, },
"title": "ธีม" "title": "ธีม"
}, },
"captions": {
"backgroundLabel": "ความทึบของพื้นหลัง",
"colorLabel": "สี",
"previewQuote": "ข้าต้องไม่กลัว ความกลัวจักพิฆาตจิตใจ",
"textSizeLabel": "ขนาดตัวหนังสือ",
"title": "คำบรรยาย"
},
"connections": { "connections": {
"server": { "server": {
"description": "หากคุณต้องการเชื่อมต่อกับ backend ที่กําหนดเองเพื่อจัดเก็บข้อมูลของคุณ ให้เปิดใช้งานสิ่งนี้และระบุ URL", "description": "หากคุณต้องการเชื่อมต่อกับ backend ที่กําหนดเองเพื่อจัดเก็บข้อมูลของคุณ ให้เปิดใช้งานสิ่งนี้และระบุ URL",

View File

@ -159,20 +159,8 @@
"enabled": "mi pana e sitelen tawa ilo ante..." "enabled": "mi pana e sitelen tawa ilo ante..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "o pana tan ilo",
"customizeLabel": "o ante",
"offChoice": "ala",
"settings": {
"delay": "ante tenpo",
"fixCapitals": "o pona e suli nimi"
},
"title": "nimi toki",
"unknownLanguage": "mi sona ala"
},
"downloads": { "downloads": {
"disclaimer": "sina kama jo e sitelen tawa ilo sina tan lipu mama. ilo Muwi-We li lawa ala e nasin jo", "disclaimer": "sina kama jo e sitelen tawa ilo sina tan lipu mama. ilo Muwi-We li lawa ala e nasin jo",
"downloadCaption": "o jo e nimi toki",
"downloadVideo": "o jo e sitelen", "downloadVideo": "o jo e sitelen",
"onAndroid": { "onAndroid": {
"1": "ilo Android la o luka e nena 'o jo'. lon lipu sin la <bold>o luka wawa</bold> e sitelen. o luka e nena 'o jo'", "1": "ilo Android la o luka e nena 'o jo'. lon lipu sin la <bold>o luka wawa</bold> e sitelen. o luka e nena 'o jo'",
@ -210,9 +198,7 @@
"title": "pona lukin" "title": "pona lukin"
}, },
"settings": { "settings": {
"captionItem": "nasin nimi",
"downloadItem": "o jo", "downloadItem": "o jo",
"enableCaptions": "nimi toki",
"experienceSection": "nasin lukin", "experienceSection": "nasin lukin",
"playbackItem": "nasin pali", "playbackItem": "nasin pali",
"qualityItem": "pona lukin", "qualityItem": "pona lukin",
@ -348,13 +334,6 @@
}, },
"title": "kule" "title": "kule"
}, },
"captions": {
"backgroundLabel": "kon",
"colorLabel": "kule",
"previewQuote": "kijetesantakalu tonsi li lanpan ala lanpan e soko?",
"textSizeLabel": "suli",
"title": "nimi toki"
},
"connections": { "connections": {
"title": "kulupu" "title": "kulupu"
}, },

View File

@ -174,20 +174,8 @@
"enabled": "Cihaza yansıtılıyor..." "enabled": "Cihaza yansıtılıyor..."
}, },
"menus": { "menus": {
"captions": {
"customChoice": "Altyazı yükle",
"customizeLabel": "Seçenekler",
"offChoice": "Kapalı",
"settings": {
"delay": "Altyazı gecikmesi",
"fixCapitals": "Büyük harf kullanımını düzelt"
},
"title": "Altyazılar",
"unknownLanguage": "Bilinmeyen"
},
"downloads": { "downloads": {
"disclaimer": "İndirme bağlantıları doğrudan sağlayıcının kendisinden alınır. movie-web'in sağlanan indirme bağlantıları üzerinde hiçbir konrolü yoktur.", "disclaimer": "İndirme bağlantıları doğrudan sağlayıcının kendisinden alınır. movie-web'in sağlanan indirme bağlantıları üzerinde hiçbir konrolü yoktur.",
"downloadCaption": "Geçerli altyazıyı indir",
"downloadVideo": "Videoyu indir", "downloadVideo": "Videoyu indir",
"onAndroid": { "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.", "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.",
@ -225,9 +213,7 @@
"title": "Kalite" "title": "Kalite"
}, },
"settings": { "settings": {
"captionItem": "Altyazı ayarları",
"downloadItem": "İndir", "downloadItem": "İndir",
"enableCaptions": "Altyazıları etkinleştir",
"experienceSection": "İzleme deneyimi", "experienceSection": "İzleme deneyimi",
"playbackItem": "Oynatma ayarları", "playbackItem": "Oynatma ayarları",
"qualityItem": "Kalite", "qualityItem": "Kalite",
@ -371,13 +357,6 @@
}, },
"title": "Görünüm" "title": "Görünüm"
}, },
"captions": {
"backgroundLabel": "Arka plan opaklığı",
"colorLabel": "Renk",
"previewQuote": "Korkmamalıyım. Korku aklın katilidir.",
"textSizeLabel": "Yazı boyutu",
"title": "Altyazılar"
},
"connections": { "connections": {
"server": { "server": {
"description": "Verilerinizi depolamak için özel bir arkayüze bağlanmak istiyorsanız, bunu etkinleştirin ve URL'yi sağlayın.", "description": "Verilerinizi depolamak için özel bir arkayüze bağlanmak istiyorsanız, bunu etkinleştirin ve URL'yi sağlayın.",

283
src/assets/locales/uk.json Normal file
View File

@ -0,0 +1,283 @@
{
"about": {
"description": "movie-web це веб-додаток, який шукає інтернет для стрімінгових відтворень. Команда прагне до мінімалістичного стилю в споживанні контенту.",
"faqTitle": "Загальні питання",
"q1": {
"body": "movie-web не зберігає жодного контенту. Коли ви натискаєте щось для перегляду, в Інтернеті виконується пошук вибраного медіа (на екрані завантаження та на вкладці «джерела відео» ви можете побачити, яке джерело ви використовуєте). Медіафайли ніколи не завантажуються за допомогою \"movie-web\", усе відбувається через цей механізм пошуку.",
"title": "Звідки береться вміст?"
},
"q2": {
"body": "Неможливо подати запит на шоу чи фільм, оскільки movie-web не керує жодним вмістом. Весь контент переглядається через джерела в Інтернеті.",
"title": "Де я можу подати запит на шоу чи фільм?"
},
"q3": {
"body": "Наші результати пошуку надходять від The Movie Database (TMDB) і відображаються незалежно від того, чи насправді є вміст у наших джерелах.",
"title": "Результати пошуку відображають шоу чи фільм, чому я не можу його відтворити?"
},
"title": "Про movie-web"
},
"actions": {
"copied": "Скопійовано",
"copy": "Копіювати"
},
"auth": {
"createAccount": "У вас ще немає облікового запису? <0>Створити обліковий запис.</0>",
"deviceNameLabel": "Ім'я пристрою",
"deviceNamePlaceholder": "Особистий телефон",
"generate": {
"description": "Ваша парольна фраза виступає як ваше ім'я користувача та пароль. Переконайтеся, що ви зберігаєте його в безпеці, оскільки вам буде потрібно вводити його для входу в свій обліковий запис",
"next": "Я зберіг(ла) свою парольну фразу",
"passphraseFrameLabel": "Парольна фраза",
"title": "Ваша парольна фраза"
},
"hasAccount": "Вже є аккаунт? <0>Увійдіть тут.</0>",
"login": {
"description": "Будь ласка, введіть свій пароль для входу до вашого облікового запису",
"deviceLengthError": "Будь ласка, введіть назву пристрою",
"passphraseLabel": "Парольна фраза з 12 слів",
"passphrasePlaceholder": "Парольна фраза",
"submit": "Логін",
"title": "Увійти до свого облікового запису",
"validationError": "Неправильна або неповна парольна фраза"
},
"register": {
"information": {
"color1": "Перший колір профілю",
"color2": "Другий колір профілю",
"header": "Введіть ім'я для вашого пристрою та виберіть кольори та іконку користувача за вашим бажанням",
"icon": "Іконка користувача",
"next": "Наступний",
"title": "Інформація про обліковий запис"
}
},
"trust": {
"failed": {
"text": "Чи ви налаштували це правильно?",
"title": "Не вдалося зв’язатися з сервером"
},
"host": "Ви під’єднуєтеся до <0>{{hostname}}</0> підтвердьте, що довіряєте йому, перш ніж створювати обліковий запис",
"no": "Повернутися назад",
"title": "Чи довіряєте ви цьому серверу?",
"yes": "Я довіряю цьому серверу"
},
"verify": {
"description": "Будь ласка, введіть свою парольну фразу, яка була раніше, щоб підтвердити її збереження та створити обліковий запис",
"invalidData": "Дані недійсні",
"noMatch": "Парольна фраза не збігається",
"passphraseLabel": "Ваша парольна фраза з 12 слів",
"recaptchaFailed": "Валідація капчі не вдалася",
"register": "Створити акаунт",
"title": "Підтвердьте свою парольну фразу"
}
},
"errors": {
"badge": "Це зламалося",
"details": "Деталі помилки",
"reloadPage": "Перезавантажити сторінку",
"showError": "Показати деталі помилки",
"title": "Ми зіткнулися з помилкою!"
},
"footer": {
"legal": {
"disclaimer": "Застереження",
"disclaimerText": "movie-web не містить жодних файлів, він лише посилається на сторонні служби. Юридичні питання слід вирішувати з хостами та провайдерами файлів. movie-web не несе відповідальності за будь-які медіафайли, показані постачальниками відео."
},
"links": {
"discord": "Діскорд",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "Дивіться свої улюблені шоу та фільми за допомогою цього відкритого стрімінгового додатка."
},
"global": {
"name": "movie-web",
"pages": {
"about": "Про",
"dmca": "DMCA",
"login": "Логін",
"pagetitle": "{{title}} - movie-web",
"register": "Зареєструватися",
"settings": "Налаштування"
}
},
"home": {
"bookmarks": {
"sectionTitle": "Закладки"
},
"continueWatching": {
"sectionTitle": "Продовжити перегляд"
},
"mediaList": {
"stopEditing": "Зупинити редагування"
},
"search": {
"allResults": "Це все, що ми маємо!",
"failed": "Не вдалося знайти медіафайли, повторіть спробу!",
"loading": "Завантаження...",
"noResults": "Ми не змогли знайти нічого!",
"placeholder": "Що ви хочете подивитися?",
"sectionTitle": "Результати пошуку"
},
"titles": {
"day": {
"default": "Що б ви хотіли подивитися сьогодні вдень?"
},
"morning": {
"default": "Що б ви хотіли подивитися сьогодні вранці?"
},
"night": {
"default": "Що б ви хотіли подивитися сьогодні ввечері?"
}
}
},
"media": {
"episodeDisplay": "С{{season}} Е{{episode}}",
"types": {
"movie": "Фільм",
"show": "Шоу"
}
},
"navigation": {
"banner": {
"offline": "Перевірте підключення до Інтернету"
},
"menu": {
"about": "Про нас",
"donation": "Пожертвуйте",
"logout": "Вийти",
"register": "Синхронізація з хмарою",
"settings": "Налаштування",
"support": "Підтримка"
}
},
"notFound": {
"badge": "Не знайдено",
"goHome": "На головну",
"message": "Ми шукали всюди: під смітниками, у шафі, за проксі-сервером, але зрештою не змогли знайти сторінку, яку ви шукали.",
"title": "Не вдалося знайти цю сторінку"
},
"overlays": {
"close": "Закрити"
},
"player": {
"back": {
"default": "На головну",
"short": "Назад"
},
"casting": {
"enabled": "Трансляція на пристрій..."
},
"menus": {
"downloads": {
"disclaimer": "Завантаження беруться безпосередньо від провайдера. У movie-web немає контролю над тим, як надаються завантаження.",
"downloadPlaylist": "Завантажити плейлист",
"downloadSubtitle": "Завантажити поточні субтитри",
"downloadVideo": "Завантажити відео",
"hlsDisclaimer": "Завантаження виконуються безпосередньо від постачальника. У movie-web немає контролю над тим, як надаються завантаження. Будь ласка, зверніть увагу, що ви завантажуєте список відтворення HLS, він призначений для користувачів, знайомих із розширеним потоковим мультимедійним вмістом.",
"onAndroid": {
"1": "Щоб завантажити на Android, натисніть кнопку завантаження, потім на новій сторінці <bold>торкніться й утримуйте</bold> відео, а потім виберіть <bold>зберегти</bold>.",
"shortTitle": "Завантажити / Android",
"title": "Завантажити на Android"
},
"onIos": {
"1": "Щоб завантажити на iOS, натисніть кнопку завантаження, далі на новій сторінці, натисніть <bold><ios_share /></bold>, а потім <bold>Зберегти у файли <ios_files /></bold>.",
"shortTitle": "Завантажити / iOS",
"title": "Завантаження на iOS"
},
"onPc": {
"1": "На комп'ютері натисніть кнопку завантаження, далі на новій вкладці клацніть правим кліком по відео та виберіть <bold>Зберегти відео як</bold>",
"shortTitle": "Завантажити / Комп'ютер",
"title": "Завантаження на комп'ютер"
},
"title": "Завантажити"
},
"episodes": {
"button": "Епізоди",
"emptyState": "У цьому сезоні немає серій, перевірте пізніше!",
"episodeBadge": "Е{{episode}}",
"loadingError": "Помилка завантаження сезону",
"loadingList": "Завантаження...",
"loadingTitle": "Завантаження..."
},
"playback": {
"speedLabel": "Швидкість відтворення",
"title": "Налаштування відтворення"
},
"quality": {
"automaticLabel": "Якість автоматична",
"hint": "Спробуйте <0>переключити джерело</0>, аби отримати інші варіанти якості.",
"iosNoQuality": "Через обмеження, встановлені Apple, вибір якості не доступний у системі iOS для цього джерела. Ви можете спробувати <0>змінити джерело</0>, щоб отримати інші варіанти якості.",
"title": "Якість"
},
"settings": {
"downloadItem": "Завантажити",
"enableSubtitles": "Увімкнути субтитри",
"experienceSection": "Враження від перегляду",
"playbackItem": "Налаштування відтворення",
"qualityItem": "Якість",
"sourceItem": "Джерела відео",
"subtitleItem": "Налаштування субтитрів",
"videoSection": "Налаштування відео"
},
"sources": {
"failed": {
"text": "Під час спроби знайти будь-яке відео сталася помилка. Спробуйте інше джерело.",
"title": "Не вдалося отримати дані"
},
"noEmbeds": {
"text": "Ми не змогли знайти жодних вставок. Будь ласка, спробуйте інше джерело.",
"title": "Не знайдено вбудованих елементів"
},
"noStream": {
"text": "Це джерело не має потоків для цього фільму чи шоу.",
"title": "Немає потоку"
},
"title": "Джерела",
"unknownOption": "Невідомий"
},
"subtitles": {
"customChoice": "Виберіть субтитри з файлу",
"customizeLabel": "Налаштувати",
"offChoice": "Вимкнено",
"settings": {
"backlink": "Власні субтитри",
"delay": "Затримка субтитрів",
"fixCapitals": "Виправити використання великих літер"
},
"title": "Субтитри",
"unknownLanguage": "Невідомий"
}
},
"metadata": {
"failed": {
"badge": "Не вдалося",
"homeButton": "Повернутися на головну",
"text": "Не вдалося завантажити метадані мультимедіа з TMDB. Перевірте, чи не відбувається збій TMDB або чи не є заблоковано у вашому інтернет-з'єднанні.",
"title": "Не вдалося завантажити метадані"
},
"notFound": {
"badge": "Не знайдено",
"homeButton": "Повернутися на головну",
"text": "Не вдалося знайти запитані мультимедіа. Вони або були вилучені, або ви змінили URL.",
"title": "Не вдалося знайти це мультимедіа."
}
},
"nextEpisode": {
"cancel": "Відмінити",
"next": "Наступний епізод"
},
"playbackError": {
"badge": "Помилка відтворення",
"errors": {
"errorAborted": "Завантаження мультимедіа було скасовано на вимогу користувача.",
"errorGenericMedia": "Виникла невідома помилка мультимедіа.",
"errorNetwork": "Виникла якась помилка мережі, яка завадила успішному завантаженню мультимедіа, незважаючи на те, що раніше вони були доступні.",
"errorNotSupported": "Медіаоб'єкт або провайдер медіа не підтримується."
},
"homeButton": "Повернутися на головну"
}
},
"settings": {
"unsaved": "У вас є незбережені зміни"
}
}

View File

@ -1,71 +1,66 @@
{ {
"global": { "global": {
"name": "movie-web" "name": "movie-web"
},
"home": {
"bookmarks": {
"sectionTitle": "Đánh dấu"
}, },
"home": { "continueWatching": {
"search": { "sectionTitle": "Tiếp tục xem"
"allResults": "Đó là tất cả chúng tôi có!",
"sectionTitle": "Kết quả tìm kiếm",
"noResults": "Chúng tôi không thể tìm thấy gì!",
"failed": "Không thể tìm thấy nội dung, hãy thử lại!",
"loading": "Đang tải...",
"placeholder": "Bạn muốn xem gì?"
},
"bookmarks": {
"sectionTitle": "Đánh dấu"
},
"continueWatching": {
"sectionTitle": "Tiếp tục xem"
}
}, },
"media": { "search": {
"types": { "allResults": "Đó là tất cả chúng tôi có!",
"movie": "Phim", "failed": "Không thể tìm thấy nội dung, hãy thử lại!",
"show": "Chương trình truyền hình" "loading": "Đang tải...",
}, "noResults": "Chúng tôi không thể tìm thấy gì!",
"episodeDisplay": "M{{season}} T{{episode}}" "placeholder": "Bạn muốn xem gì?",
}, "sectionTitle": "Kết quả tìm kiếm"
"player": {
"playbackError": {
"title": "Rất tiếc, đã hỏng!"
},
"metadata": {
"notFound": {
"badge": "Không tìm thấy",
"homeButton": "Quay lại trang chính",
"title": "Không thể tìm thấy nội dung.",
"text": "Chúng tôi không thể tìm thấy nội dung mà bạn yêu cầu. Hoặc là nó đã bị xóa, hoặc bạn đã xáo trộn URL."
}
},
"menus": {
"captions": {
"customChoice": "Tải phụ đề lên",
"customizeLabel": "Tùy chỉnh",
"title": "Phụ đề"
},
"sources": {
"title": "Nguồn"
},
"episodes": {
"button": "Tập",
"loadingTitle": "Đang tải...",
"loadingList": "Đang tải..."
}
},
"back": {
"default": "Quay lại trang chính",
"short": "Quay lại"
}
},
"notFound": {
"badge": "Không tìm thấy",
"goHome": "Quay lại trang chính",
"title": "Không thể tìm thấy trang",
"message": "Chúng tôi đã tìm kiếm khắp nơi: dưới thùng rác, trong tủ quần áo, đằng sau máy chủ proxy nhưng vẫn không thể tìm thấy trang bạn đang tìm kiếm."
},
"navigation": {
"banner": {
"offline": "Hãy kiểm tra kết nối Internet của bạn"
}
} }
},
"media": {
"episodeDisplay": "M{{season}} T{{episode}}",
"types": {
"movie": "Phim",
"show": "Chương trình truyền hình"
}
},
"navigation": {
"banner": {
"offline": "Hãy kiểm tra kết nối Internet của bạn"
}
},
"notFound": {
"badge": "Không tìm thấy",
"goHome": "Quay lại trang chính",
"message": "Chúng tôi đã tìm kiếm khắp nơi: dưới thùng rác, trong tủ quần áo, đằng sau máy chủ proxy nhưng vẫn không thể tìm thấy trang bạn đang tìm kiếm.",
"title": "Không thể tìm thấy trang"
},
"player": {
"back": {
"default": "Quay lại trang chính",
"short": "Quay lại"
},
"menus": {
"episodes": {
"button": "Tập",
"loadingList": "Đang tải...",
"loadingTitle": "Đang tải..."
},
"sources": {
"title": "Nguồn"
}
},
"metadata": {
"notFound": {
"badge": "Không tìm thấy",
"homeButton": "Quay lại trang chính",
"text": "Chúng tôi không thể tìm thấy nội dung mà bạn yêu cầu. Hoặc là nó đã bị xóa, hoặc bạn đã xáo trộn URL.",
"title": "Không thể tìm thấy nội dung."
}
},
"playbackError": {
"title": "Rất tiếc, đã hỏng!"
}
}
} }

View File

@ -174,21 +174,11 @@
"enabled": "正在投放到设备…" "enabled": "正在投放到设备…"
}, },
"menus": { "menus": {
"captions": {
"customChoice": "上传字幕",
"customizeLabel": "自定义",
"offChoice": "关闭",
"settings": {
"delay": "字幕延迟",
"fixCapitals": "修复大小写"
},
"title": "字幕",
"unknownLanguage": "未知"
},
"downloads": { "downloads": {
"disclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。", "disclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。",
"downloadCaption": "下载当前字幕", "downloadPlaylist": "下载播放列表",
"downloadVideo": "下载视频", "downloadVideo": "下载视频",
"hlsDisclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。请注意,您正在下载 HLS 播放列表,这适用于熟悉高级多媒体串流技术的用户。",
"onAndroid": { "onAndroid": {
"1": "要从 Android 下载,先点击下载按钮,之后在新的页面上, <bold>点击并按住</bold>视频,然后选择 <bold>保存</bold>。", "1": "要从 Android 下载,先点击下载按钮,之后在新的页面上, <bold>点击并按住</bold>视频,然后选择 <bold>保存</bold>。",
"shortTitle": "下载 / Android", "shortTitle": "下载 / Android",
@ -225,9 +215,7 @@
"title": "质量" "title": "质量"
}, },
"settings": { "settings": {
"captionItem": "字幕设置",
"downloadItem": "下载", "downloadItem": "下载",
"enableCaptions": "启用字幕",
"experienceSection": "观看体验", "experienceSection": "观看体验",
"playbackItem": "播放设置", "playbackItem": "播放设置",
"qualityItem": "质量", "qualityItem": "质量",
@ -249,6 +237,17 @@
}, },
"title": "视频源", "title": "视频源",
"unknownOption": "未知" "unknownOption": "未知"
},
"subtitles": {
"customizeLabel": "自定义",
"offChoice": "关闭",
"settings": {
"backlink": "自定义字幕",
"delay": "字幕延时",
"fixCapitals": "修整大小写"
},
"title": "字幕",
"unknownLanguage": "未知"
} }
}, },
"metadata": { "metadata": {
@ -371,13 +370,6 @@
}, },
"title": "外观" "title": "外观"
}, },
"captions": {
"backgroundLabel": "背景透明度",
"colorLabel": "颜色",
"previewQuote": "我一定不会害怕。 恐惧是心灵杀手。",
"textSizeLabel": "字体大小",
"title": "字幕"
},
"connections": { "connections": {
"server": { "server": {
"description": "若您想连接到自定义后端保存数据,请启用此选项并提供 URL。", "description": "若您想连接到自定义后端保存数据,请启用此选项并提供 URL。",
@ -415,6 +407,11 @@
"userId": "用户 ID" "userId": "用户 ID"
} }
}, },
"subtitles": {
"previewQuote": "我不能害怕。恐惧是心灵的杀手。",
"textSizeLabel": "字体大小",
"title": "字幕"
},
"unsaved": "您有未保存的更改" "unsaved": "您有未保存的更改"
} }
} }

View File

@ -21,6 +21,8 @@ const countryOverrides: Record<string, string> = {
zh: "cn", zh: "cn",
sl: "si", sl: "si",
sv: "se", sv: "se",
et: "ee",
ne: "np",
}; };
export function FlagIcon(props: FlagIconProps) { export function FlagIcon(props: FlagIconProps) {
@ -47,10 +49,14 @@ export function FlagIcon(props: FlagIconProps) {
</div> </div>
); );
let backgroundClass = "bg-video-context-flagBg";
if (countryCode === "np") backgroundClass = "bg-white";
return ( return (
<span <span
className={classNames( className={classNames(
"!w-8 h-6 rounded overflow-hidden bg-video-context-flagBg bg-cover bg-center block fi", "!w-8 h-6 rounded overflow-hidden bg-cover bg-center block fi",
backgroundClass,
props.countryCode ? `fi-${countryCode}` : undefined, props.countryCode ? `fi-${countryCode}` : undefined,
)} )}
/> />

View File

@ -214,7 +214,7 @@ export function CaptionSetting(props: {
); );
} }
export const colors = ["#ffffff", "#80b1fa", "#e2e535"]; export const colors = ["#ffffff", "#b0b0b0", "#80b1fa", "#e2e535"];
export function CaptionSettingsView({ id }: { id: string }) { export function CaptionSettingsView({ id }: { id: string }) {
const { t } = useTranslation(); const { t } = useTranslation();
@ -229,11 +229,11 @@ export function CaptionSettingsView({ id }: { id: string }) {
return ( return (
<> <>
<Menu.BackLink onClick={() => router.navigate("/captions")}> <Menu.BackLink onClick={() => router.navigate("/captions")}>
Custom captions {t("player.menus.subtitles.settings.backlink")}
</Menu.BackLink> </Menu.BackLink>
<Menu.Section className="space-y-6"> <Menu.Section className="space-y-6">
<CaptionSetting <CaptionSetting
label={t("player.menus.captions.settings.delay")} label={t("player.menus.subtitles.settings.delay")}
max={10} max={10}
min={-10} min={-10}
onChange={(v) => setDelay(v)} onChange={(v) => setDelay(v)}
@ -244,7 +244,7 @@ export function CaptionSettingsView({ id }: { id: string }) {
/> />
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<Menu.FieldTitle> <Menu.FieldTitle>
{t("player.menus.captions.settings.fixCapitals")} {t("player.menus.subtitles.settings.fixCapitals")}
</Menu.FieldTitle> </Menu.FieldTitle>
<div className="flex justify-center items-center"> <div className="flex justify-center items-center">
<Toggle <Toggle
@ -255,7 +255,7 @@ export function CaptionSettingsView({ id }: { id: string }) {
</div> </div>
<Menu.Divider /> <Menu.Divider />
<CaptionSetting <CaptionSetting
label={t("settings.captions.backgroundLabel")} label={t("settings.subtitles.backgroundLabel")}
max={100} max={100}
min={0} min={0}
onChange={(v) => updateStyling({ backgroundOpacity: v / 100 })} onChange={(v) => updateStyling({ backgroundOpacity: v / 100 })}
@ -263,7 +263,7 @@ export function CaptionSettingsView({ id }: { id: string }) {
textTransformer={(s) => `${s}%`} textTransformer={(s) => `${s}%`}
/> />
<CaptionSetting <CaptionSetting
label={t("settings.captions.textSizeLabel")} label={t("settings.subtitles.textSizeLabel")}
max={200} max={200}
min={1} min={1}
textTransformer={(s) => `${s}%`} textTransformer={(s) => `${s}%`}
@ -271,7 +271,9 @@ export function CaptionSettingsView({ id }: { id: string }) {
value={styling.size * 100} value={styling.size * 100}
/> />
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<Menu.FieldTitle>{t("settings.captions.colorLabel")}</Menu.FieldTitle> <Menu.FieldTitle>
{t("settings.subtitles.colorLabel")}
</Menu.FieldTitle>
<div className="flex justify-center items-center"> <div className="flex justify-center items-center">
{colors.map((v) => ( {colors.map((v) => (
<ColorOption <ColorOption

View File

@ -57,7 +57,7 @@ function CustomCaptionOption() {
selected={lang === "custom"} selected={lang === "custom"}
onClick={() => fileInput.current?.click()} onClick={() => fileInput.current?.click()}
> >
{t("player.menus.captions.customChoice")} {t("player.menus.subtitles.customChoice")}
<input <input
className="hidden" className="hidden"
ref={fileInput} ref={fileInput}
@ -85,7 +85,7 @@ function CustomCaptionOption() {
function useSubtitleList(subs: CaptionListItem[], searchQuery: string) { function useSubtitleList(subs: CaptionListItem[], searchQuery: string) {
const { t: translate } = useTranslation(); const { t: translate } = useTranslation();
const unknownChoice = translate("player.menus.captions.unknownLanguage"); const unknownChoice = translate("player.menus.subtitles.unknownLanguage");
return useMemo(() => { return useMemo(() => {
const input = subs.map((t) => ({ const input = subs.map((t) => ({
...t, ...t,
@ -162,11 +162,11 @@ export function CaptionsView({ id }: { id: string }) {
onClick={() => router.navigate("/captions/settings")} onClick={() => router.navigate("/captions/settings")}
className="py-1 -my-1 px-3 -mx-3 rounded tabbable" className="py-1 -my-1 px-3 -mx-3 rounded tabbable"
> >
{t("player.menus.captions.customizeLabel")} {t("player.menus.subtitles.customizeLabel")}
</button> </button>
} }
> >
{t("player.menus.captions.title")} {t("player.menus.subtitles.title")}
</Menu.BackLink> </Menu.BackLink>
<div className="mt-3"> <div className="mt-3">
<Input value={searchQuery} onInput={setSearchQuery} /> <Input value={searchQuery} onInput={setSearchQuery} />
@ -174,7 +174,7 @@ export function CaptionsView({ id }: { id: string }) {
</div> </div>
<Menu.ScrollToActiveSection className="!pt-1 mt-2 pb-3"> <Menu.ScrollToActiveSection className="!pt-1 mt-2 pb-3">
<CaptionOption onClick={() => disable()} selected={!lang}> <CaptionOption onClick={() => disable()} selected={!lang}>
{t("player.menus.captions.offChoice")} {t("player.menus.subtitles.offChoice")}
</CaptionOption> </CaptionOption>
<CustomCaptionOption /> <CustomCaptionOption />
{content} {content}

View File

@ -78,7 +78,7 @@ export function DownloadView({ id }: { id: string }) {
theme="secondary" theme="secondary"
download="subtitles.srt" download="subtitles.srt"
> >
{t("player.menus.downloads.downloadCaption")} {t("player.menus.downloads.downloadSubtitle")}
</Button> </Button>
</> </>
) : ( ) : (
@ -113,7 +113,7 @@ export function DownloadView({ id }: { id: string }) {
theme="secondary" theme="secondary"
download="subtitles.srt" download="subtitles.srt"
> >
{t("player.menus.downloads.downloadCaption")} {t("player.menus.downloads.downloadSubtitle")}
</Button> </Button>
</> </>
)} )}

View File

@ -22,6 +22,7 @@ const alwaysVisibleQualities: Record<SourceQuality, boolean> = {
"480": true, "480": true,
"720": true, "720": true,
"1080": true, "1080": true,
"4k": false,
}; };
function useIsIosHls() { function useIsIosHls() {

View File

@ -32,7 +32,7 @@ export function SettingsMenu({ id }: { id: string }) {
const selectedLanguagePretty = selectedCaptionLanguage const selectedLanguagePretty = selectedCaptionLanguage
? getLanguageFromIETF(selectedCaptionLanguage) ?? ? getLanguageFromIETF(selectedCaptionLanguage) ??
t("player.menus.captions.unknownLanguage") t("player.menus.subtitles.unknownLanguage")
: undefined; : undefined;
const source = usePlayerStore((s) => s.source); const source = usePlayerStore((s) => s.source);
@ -81,13 +81,13 @@ export function SettingsMenu({ id }: { id: string }) {
/> />
} }
> >
{t("player.menus.settings.enableCaptions")} {t("player.menus.settings.enableSubtitles")}
</Menu.Link> </Menu.Link>
<Menu.ChevronLink <Menu.ChevronLink
onClick={() => router.navigate("/captions")} onClick={() => router.navigate("/captions")}
rightText={selectedLanguagePretty ?? undefined} rightText={selectedLanguagePretty ?? undefined}
> >
{t("player.menus.settings.captionItem")} {t("player.menus.settings.subtitleItem")}
</Menu.ChevronLink> </Menu.ChevronLink>
<Menu.ChevronLink onClick={() => router.navigate("/playback")}> <Menu.ChevronLink onClick={() => router.navigate("/playback")}>
{t("player.menus.settings.playbackItem")} {t("player.menus.settings.playbackItem")}

View File

@ -73,8 +73,8 @@ export function useEmbedScraping(
setSourceId(sourceId); setSourceId(sourceId);
setCaption(null); setCaption(null);
setSource( setSource(
convertRunoutputToSource({ stream: result.stream }), convertRunoutputToSource({ stream: result.stream[0] }),
convertProviderCaption(result.stream.captions), convertProviderCaption(result.stream[0].captions),
progress, progress,
); );
router.close(); router.close();
@ -132,8 +132,8 @@ export function useSourceScraping(sourceId: string | null, routerId: string) {
if (result.stream) { if (result.stream) {
setCaption(null); setCaption(null);
setSource( setSource(
convertRunoutputToSource({ stream: result.stream }), convertRunoutputToSource({ stream: result.stream[0] }),
convertProviderCaption(result.stream.captions), convertProviderCaption(result.stream[0].captions),
progress, progress,
); );
setSourceId(sourceId); setSourceId(sourceId);
@ -187,8 +187,8 @@ export function useSourceScraping(sourceId: string | null, routerId: string) {
setSourceId(sourceId); setSourceId(sourceId);
setCaption(null); setCaption(null);
setSource( setSource(
convertRunoutputToSource({ stream: embedResult.stream }), convertRunoutputToSource({ stream: embedResult.stream[0] }),
convertProviderCaption(embedResult.stream.captions), convertProviderCaption(embedResult.stream[0].captions),
progress, progress,
); );
router.close(); router.close();

View File

@ -9,6 +9,8 @@ import { useEmpheralVolumeStore } from "@/stores/volume";
export function KeyboardEvents() { export function KeyboardEvents() {
const router = useOverlayRouter(""); const router = useOverlayRouter("");
const display = usePlayerStore((s) => s.display); const display = usePlayerStore((s) => s.display);
const mediaProgress = usePlayerStore((s) => s.progress);
const { isSeeking } = usePlayerStore((s) => s.interface);
const mediaPlaying = usePlayerStore((s) => s.mediaPlaying); const mediaPlaying = usePlayerStore((s) => s.mediaPlaying);
const time = usePlayerStore((s) => s.progress.time); const time = usePlayerStore((s) => s.progress.time);
const { setVolume, toggleMute } = useVolume(); const { setVolume, toggleMute } = useVolume();
@ -27,6 +29,8 @@ export function KeyboardEvents() {
toggleLastUsed, toggleLastUsed,
display, display,
mediaPlaying, mediaPlaying,
mediaProgress,
isSeeking,
isRolling, isRolling,
time, time,
router, router,
@ -40,6 +44,8 @@ export function KeyboardEvents() {
toggleLastUsed, toggleLastUsed,
display, display,
mediaPlaying, mediaPlaying,
mediaProgress,
isSeeking,
isRolling, isRolling,
time, time,
router, router,
@ -52,6 +58,8 @@ export function KeyboardEvents() {
toggleLastUsed, toggleLastUsed,
display, display,
mediaPlaying, mediaPlaying,
mediaProgress,
isSeeking,
isRolling, isRolling,
time, time,
router, router,
@ -83,11 +91,29 @@ export function KeyboardEvents() {
); );
if (k === "m") dataRef.current.toggleMute(); if (k === "m") dataRef.current.toggleMute();
// Video playback speed
if (k === ">" || k === "<") {
const options = [0.25, 0.5, 1, 1.5, 2];
let idx = options.indexOf(dataRef.current.mediaPlaying?.playbackRate);
if (idx === -1) idx = options.indexOf(1);
const nextIdx = idx + (k === ">" ? 1 : -1);
const next = options[nextIdx];
if (next) dataRef.current.display?.setPlaybackRate(next);
}
// Video progress // Video progress
if (k === "ArrowRight") if (k === "ArrowRight")
dataRef.current.display?.setTime(dataRef.current.time + 5); dataRef.current.display?.setTime(dataRef.current.time + 5);
if (k === "ArrowLeft") if (k === "ArrowLeft")
dataRef.current.display?.setTime(dataRef.current.time - 5); dataRef.current.display?.setTime(dataRef.current.time - 5);
if (k === "j")
dataRef.current.display?.setTime(dataRef.current.time - 10);
if (k === "l")
dataRef.current.display?.setTime(dataRef.current.time + 10);
if (k === "." && dataRef.current.mediaPlaying?.isPaused)
dataRef.current.display?.setTime(dataRef.current.time + 1);
if (k === "," && dataRef.current.mediaPlaying?.isPaused)
dataRef.current.display?.setTime(dataRef.current.time - 1);
// Utils // Utils
if (k === "f") dataRef.current.display?.toggleFullscreen(); if (k === "f") dataRef.current.display?.toggleFullscreen();

View File

@ -1,4 +1,4 @@
import { RunOutput } from "@movie-web/providers"; import { Stream } from "@movie-web/providers";
import { import {
SourceFileStream, SourceFileStream,
@ -7,6 +7,7 @@ import {
} from "@/stores/player/utils/qualities"; } from "@/stores/player/utils/qualities";
const allowedQualitiesMap: Record<SourceQuality, SourceQuality> = { const allowedQualitiesMap: Record<SourceQuality, SourceQuality> = {
"4k": "4k",
"1080": "1080", "1080": "1080",
"480": "480", "480": "480",
"360": "360", "360": "360",
@ -21,7 +22,7 @@ function isAllowedQuality(inp: string): inp is SourceQuality {
} }
export function convertRunoutputToSource(out: { export function convertRunoutputToSource(out: {
stream: RunOutput["stream"]; stream: Stream;
}): SourceSliceSource { }): SourceSliceSource {
if (out.stream.type === "hls") { if (out.stream.type === "hls") {
return { return {

View File

@ -23,7 +23,7 @@ export interface ScrapingSegment {
embedId?: string; embedId?: string;
status: "failure" | "pending" | "notfound" | "success" | "waiting"; status: "failure" | "pending" | "notfound" | "success" | "waiting";
reason?: string; reason?: string;
error?: unknown; error?: any;
percentage: number; percentage: number;
} }
@ -60,8 +60,10 @@ function useBaseScrape() {
}, []); }, []);
const startEvent = useCallback((id: ScraperEvent<"start">) => { const startEvent = useCallback((id: ScraperEvent<"start">) => {
const lastIdTmp = lastId.current;
setSources((s) => { setSources((s) => {
if (s[id]) s[id].status = "pending"; if (s[id]) s[id].status = "pending";
if (lastIdTmp && s[lastIdTmp]) s[lastIdTmp].status = "success";
return { ...s }; return { ...s };
}); });
setCurrentSource(id); setCurrentSource(id);

View File

@ -14,7 +14,6 @@ import {
import { Loading } from "@/components/layout/Loading"; import { Loading } from "@/components/layout/Loading";
import { MwLink } from "@/components/text/Link"; import { MwLink } from "@/components/text/Link";
import { useBackendUrl } from "@/hooks/auth/useBackendUrl"; import { useBackendUrl } from "@/hooks/auth/useBackendUrl";
import { conf } from "@/setup/config";
interface TrustBackendPartProps { interface TrustBackendPartProps {
onNext?: (meta: MetaResponse) => void; onNext?: (meta: MetaResponse) => void;
@ -25,7 +24,7 @@ export function TrustBackendPart(props: TrustBackendPartProps) {
const backendUrl = useBackendUrl(); const backendUrl = useBackendUrl();
const hostname = useMemo(() => new URL(backendUrl).hostname, [backendUrl]); const hostname = useMemo(() => new URL(backendUrl).hostname, [backendUrl]);
const result = useAsync(() => { const result = useAsync(() => {
return getBackendMeta(conf().BACKEND_URL); return getBackendMeta(backendUrl);
}, [backendUrl]); }, [backendUrl]);
const { t } = useTranslation(); const { t } = useTranslation();

View File

@ -121,7 +121,7 @@ export function PlayerPart(props: PlayerPartProps) {
<div className="flex justify-center space-x-3"> <div className="flex justify-center space-x-3">
{status === playerStatus.PLAYING ? <Player.Pip /> : null} {status === playerStatus.PLAYING ? <Player.Pip /> : null}
<Player.Episodes /> <Player.Episodes />
<Player.Settings /> {status === playerStatus.PLAYING ? <Player.Settings /> : null}
</div> </div>
<div> <div>
<Player.Fullscreen /> <Player.Fullscreen />

View File

@ -35,6 +35,8 @@ export function ScrapeErrorPart(props: ScrapeErrorPartProps) {
Object.values(data.sources).forEach((v) => { Object.values(data.sources).forEach((v) => {
str += `${v.id}: ${v.status}\n`; str += `${v.id}: ${v.status}\n`;
if (v.reason) str += `${v.reason}\n`; if (v.reason) str += `${v.reason}\n`;
if (v.error?.message)
str += `${v.error.name ?? "unknown"}: ${v.error.message}\n`;
if (v.error) str += `${v.error.toString()}\n`; if (v.error) str += `${v.error.toString()}\n`;
}); });
return str; return str;

View File

@ -75,11 +75,8 @@ export function ScrapingPart(props: ScrapingProps) {
})(); })();
}, [startScraping, props, report, isMounted]); }, [startScraping, props, report, isMounted]);
const currentProvider = sourceOrder.find(
(s) => sources[s.id].status === "pending",
);
let currentProviderIndex = sourceOrder.findIndex( let currentProviderIndex = sourceOrder.findIndex(
(provider) => currentProvider?.id === provider.id, (s) => s.id === currentSource || s.children.includes(currentSource ?? ""),
); );
if (currentProviderIndex === -1) if (currentProviderIndex === -1)
currentProviderIndex = sourceOrder.length - 1; currentProviderIndex = sourceOrder.length - 1;

View File

@ -58,7 +58,7 @@ export function CaptionPreview(props: {
} }
> >
<CaptionCue <CaptionCue
text={t("settings.captions.previewQuote") ?? undefined} text={t("settings.subtitles.previewQuote") ?? undefined}
styling={props.styling} styling={props.styling}
overrideCasing={false} overrideCasing={false}
/> />
@ -79,11 +79,11 @@ export function CaptionsPart(props: {
return ( return (
<div> <div>
<Heading1 border>{t("settings.captions.title")}</Heading1> <Heading1 border>{t("settings.subtitles.title")}</Heading1>
<div className="grid md:grid-cols-[1fr,356px] gap-8"> <div className="grid md:grid-cols-[1fr,356px] gap-8">
<div className="space-y-6"> <div className="space-y-6">
<CaptionSetting <CaptionSetting
label={t("settings.captions.backgroundLabel")} label={t("settings.subtitles.backgroundLabel")}
max={100} max={100}
min={0} min={0}
onChange={(v) => onChange={(v) =>
@ -93,7 +93,7 @@ export function CaptionsPart(props: {
textTransformer={(s) => `${s}%`} textTransformer={(s) => `${s}%`}
/> />
<CaptionSetting <CaptionSetting
label={t("settings.captions.textSizeLabel")} label={t("settings.subtitles.textSizeLabel")}
max={200} max={200}
min={1} min={1}
textTransformer={(s) => `${s}%`} textTransformer={(s) => `${s}%`}
@ -104,7 +104,7 @@ export function CaptionsPart(props: {
/> />
<div className="flex justify-between items-center"> <div className="flex justify-between items-center">
<Menu.FieldTitle> <Menu.FieldTitle>
{t("settings.captions.colorLabel")} {t("settings.subtitles.colorLabel")}
</Menu.FieldTitle> </Menu.FieldTitle>
<div className="flex justify-center items-center"> <div className="flex justify-center items-center">
{colors.map((v) => ( {colors.map((v) => (

View File

@ -54,7 +54,7 @@ export function SidebarPart() {
icon: Icons.BRUSH, icon: Icons.BRUSH,
}, },
{ {
textKey: "settings.captions.title", textKey: "settings.subtitles.title",
id: "settings-captions", id: "settings-captions",
icon: Icons.CAPTIONS, icon: Icons.CAPTIONS,
}, },
@ -82,17 +82,20 @@ export function SidebarPart() {
const el = document.getElementById(link.id); const el = document.getElementById(link.id);
if (!el) return { distance: Infinity, link: link.id }; if (!el) return { distance: Infinity, link: link.id };
const rect = el.getBoundingClientRect(); const rect = el.getBoundingClientRect();
const distanceTop = Math.abs(centerTarget - rect.top); const distanceTop = Math.abs(centerTarget - rect.top);
const distanceBottom = Math.abs(centerTarget - rect.bottom); const distanceBottom = Math.abs(centerTarget - rect.bottom);
const distance = Math.min(distanceBottom, distanceTop); const distance = Math.min(distanceBottom, distanceTop);
return { distance, link: link.id }; return { distance, link: link.id };
}) })
.sort((a, b) => a.distance - b.distance); .sort((a, b) => a.distance - b.distance);
// shortest distance to the part of the screen we want is the active link // Check if user has scrolled past the bottom of the page
setActiveLink(viewList[0]?.link ?? ""); if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
setActiveLink(settingLinks[settingLinks.length - 1].id);
} else {
// shortest distance to the part of the screen we want is the active link
setActiveLink(viewList[0]?.link ?? "");
}
} }
document.addEventListener("scroll", recheck); document.addEventListener("scroll", recheck);
recheck(); recheck();

View File

@ -1,6 +1,8 @@
import { Qualities } from "@movie-web/providers";
import { QualityStore } from "@/stores/quality"; import { QualityStore } from "@/stores/quality";
export type SourceQuality = "unknown" | "360" | "480" | "720" | "1080"; export type SourceQuality = Qualities;
export type StreamType = "hls" | "mp4"; export type StreamType = "hls" | "mp4";
@ -30,6 +32,7 @@ const qualitySorting: Record<SourceQuality, number> = {
"480": 20, "480": 20,
"720": 30, "720": 30,
"1080": 40, "1080": 40,
"4k": 25, // 4k has lower priority, you need faster internet for it
}; };
const sortedQualities: SourceQuality[] = Object.entries(qualitySorting) const sortedQualities: SourceQuality[] = Object.entries(qualitySorting)
.sort((a, b) => b[1] - a[1]) .sort((a, b) => b[1] - a[1])
@ -98,7 +101,8 @@ export function selectQuality(
throw new Error("couldn't select quality"); throw new Error("couldn't select quality");
} }
const qualityMap: Record<SourceQuality, string> = { const qualityNameMap: Record<SourceQuality, string> = {
"4k": "4K",
"1080": "1080p", "1080": "1080p",
"360": "360p", "360": "360p",
"480": "480p", "480": "480p",
@ -106,8 +110,8 @@ const qualityMap: Record<SourceQuality, string> = {
unknown: "unknown", unknown: "unknown",
}; };
export const allQualities = Object.keys(qualityMap) as SourceQuality[]; export const allQualities = Object.keys(qualityNameMap) as SourceQuality[];
export function qualityToString(quality: SourceQuality): string { export function qualityToString(quality: SourceQuality): string {
return qualityMap[quality]; return qualityNameMap[quality];
} }

View File

@ -1,5 +1,5 @@
import { import {
ProviderBuilderOptions, Fetcher,
ProviderControls, ProviderControls,
makeProviders, makeProviders,
makeSimpleProxyFetcher, makeSimpleProxyFetcher,
@ -49,7 +49,7 @@ async function fetchButWithApiTokens(
} }
function makeLoadBalancedSimpleProxyFetcher() { function makeLoadBalancedSimpleProxyFetcher() {
const fetcher: ProviderBuilderOptions["fetcher"] = async (a, b) => { const fetcher: Fetcher = async (a, b) => {
const currentFetcher = makeSimpleProxyFetcher( const currentFetcher = makeSimpleProxyFetcher(
getLoadbalancedProxyUrl(), getLoadbalancedProxyUrl(),
fetchButWithApiTokens, fetchButWithApiTokens,