diff --git a/.github/downloads.jpg b/.github/downloads.jpg deleted file mode 100644 index ca14a664..00000000 Binary files a/.github/downloads.jpg and /dev/null differ diff --git a/.github/home.jpg b/.github/home.jpg deleted file mode 100644 index 72370d3c..00000000 Binary files a/.github/home.jpg and /dev/null differ diff --git a/.github/locales.py b/.github/locales.py index 1c79c093..7d6d6b90 100644 --- a/.github/locales.py +++ b/.github/locales.py @@ -1,6 +1,7 @@ import re import glob import requests +import lxml.etree as ET # builtin library doesn't preserve comments SETTINGS_PATH = "app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt" @@ -45,4 +46,18 @@ open(SETTINGS_PATH, "w+",encoding='utf-8').write( "\n" + END_MARKER + after_src -) \ No newline at end of file +) + +# Go through each values.xml file and fix escaped \@string +for file in glob.glob(f"{XML_NAME}*/strings.xml"): + try: + tree = ET.parse(file) + for child in tree.getroot(): + if child.text.startswith("\\@string/"): + print(f"[{file}] fixing {child.attrib['name']}") + child.text = child.text.replace("\\@string/", "@string/") + with open(file, 'wb') as fp: + fp.write(b'\n') + tree.write(fp, encoding="utf-8", method="xml", pretty_print=True, xml_declaration=False) + except ET.ParseError as ex: + print(f"[{file}] {ex}") diff --git a/.github/player.jpg b/.github/player.jpg deleted file mode 100644 index f6959cf3..00000000 Binary files a/.github/player.jpg and /dev/null differ diff --git a/.github/results.jpg b/.github/results.jpg deleted file mode 100644 index 4dbc9b8d..00000000 Binary files a/.github/results.jpg and /dev/null differ diff --git a/.github/search.jpg b/.github/search.jpg deleted file mode 100644 index 784bec89..00000000 Binary files a/.github/search.jpg and /dev/null differ diff --git a/.github/workflows/update_locales.yml b/.github/workflows/update_locales.yml index 93cdca44..628e9bc9 100644 --- a/.github/workflows/update_locales.yml +++ b/.github/workflows/update_locales.yml @@ -1,4 +1,4 @@ -name: Update locale lists +name: Fix locale issues on: workflow_dispatch: @@ -9,7 +9,7 @@ on: - master concurrency: - group: "locale-list" + group: "locale" cancel-in-progress: true jobs: @@ -26,6 +26,9 @@ jobs: - uses: actions/checkout@v2 with: token: ${{ steps.generate_token.outputs.token }} + - name: Install dependencies + run: | + pip3 install lxml - name: Edit files run: | python3 .github/locales.py @@ -35,5 +38,5 @@ jobs: git config --local user.name "recloudstream[bot]" git add . # "echo" returns true so the build succeeds, even if no changed files - git commit -m 'update list of locales' || echo + git commit -m 'chore(locales): fix locale issues' || echo git push diff --git a/README.md b/README.md index 3430d626..e3d033ba 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,7 @@ + Download and stream movies, tv-shows and anime + Chromecast -### Screenshots: - - - - ### Supported languages: Translation status - \ No newline at end of file + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9cbccbe5..ebde6187 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,8 +47,8 @@ android { minSdk = 21 targetSdk = 33 - versionCode = 57 - versionName = "4.0.0" + versionCode = 59 + versionName = "4.0.1" resValue("string", "app_version", "${defaultConfig.versionName}${versionNameSuffix ?: ""}") @@ -159,6 +159,8 @@ dependencies { implementation("com.google.android.exoplayer:extension-cast:2.18.2") implementation("com.google.android.exoplayer:extension-mediasession:2.18.2") implementation("com.google.android.exoplayer:extension-okhttp:2.18.2") + // Use the Jellyfin ffmpeg extension for easy ffmpeg audio decoding in exoplayer. Thank you Jellyfin <3 +// implementation("org.jellyfin.exoplayer:exoplayer-ffmpeg-extension:2.18.2+1") //implementation("com.google.android.exoplayer:extension-leanback:2.14.0") @@ -214,8 +216,8 @@ dependencies { // slow af yt //implementation("com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT") - // newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L190 - implementation("com.github.TeamNewPipe:NewPipeExtractor:9ffdd0948b2ecd82655f5ff2a3e127b2b7695d5b") + // newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L204 + implementation("com.github.TeamNewPipe:NewPipeExtractor:master-SNAPSHOT") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6") // Library/extensions searching with Levenshtein distance diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 871c4f69..563c82f8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -98,6 +98,16 @@ + + + + + + + + + + diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index a7449255..d054f504 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -5,6 +5,8 @@ import android.content.Context import android.content.Intent import android.content.res.ColorStateList import android.content.res.Configuration +import android.net.Uri +import android.os.Build import android.os.Bundle import android.util.AttributeSet import android.util.Log @@ -34,7 +36,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.navigationrail.NavigationRailView import com.google.android.material.snackbar.Snackbar import com.jaredrummler.android.colorpicker.ColorPickerDialogListener -import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.APIHolder.allProviders import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings @@ -57,6 +58,7 @@ import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.OAuth2Apis import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.accountManagers import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appString +import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringPlayer import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringResumeWatching import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringSearch @@ -65,6 +67,9 @@ import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO import com.lagradost.cloudstream3.ui.home.HomeViewModel +import com.lagradost.cloudstream3.ui.player.BasicLink +import com.lagradost.cloudstream3.ui.player.GeneratorPlayer +import com.lagradost.cloudstream3.ui.player.LinkGenerator import com.lagradost.cloudstream3.ui.result.ResultViewModel2 import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST import com.lagradost.cloudstream3.ui.result.setImage @@ -170,7 +175,12 @@ open class ResultResume( val VLC = object : ResultResume( VLC_PACKAGE, - "org.videolan.vlc.player.result", + // Android 13 intent restrictions fucks up specifically launching the VLC player + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + "org.videolan.vlc.player.result" + } else { + Intent.ACTION_VIEW + }, "extra_position", "extra_duration", ) { @@ -269,6 +279,8 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { isWebview: Boolean ): Boolean = with(activity) { + // TODO MUCH BETTER HANDLING + // Invalid URIs can crash fun safeURI(uri: String) = normalSafeApiCall { URI(uri) } @@ -324,6 +336,20 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // It might be better to use the QuickSearch. nav_view?.selectedItemId = R.id.navigation_search nav_rail_view?.selectedItemId = R.id.navigation_search + } else if (safeURI(str)?.scheme == appStringPlayer) { + val uri = Uri.parse(str) + val name = uri.getQueryParameter("name") + val url = URLDecoder.decode(uri.authority, "UTF-8") + + navigate( + R.id.global_to_navigation_player, + GeneratorPlayer.newInstance( + LinkGenerator( + listOf(BasicLink(url, name)), + extract = true, + ) + ) + ) } else if (safeURI(str)?.scheme == appStringResumeWatching) { val id = str.substringAfter("$appStringResumeWatching://").toIntOrNull() @@ -733,15 +759,16 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { } else { this.setKey(getString(R.string.jsdelivr_proxy_key), true) val parentView: View = findViewById(android.R.id.content) - Snackbar.make(parentView, R.string.jsdelivr_enabled, Snackbar.LENGTH_LONG).let { snackbar -> - snackbar.setAction(R.string.revert) { - setKey(getString(R.string.jsdelivr_proxy_key), false) + Snackbar.make(parentView, R.string.jsdelivr_enabled, Snackbar.LENGTH_LONG) + .let { snackbar -> + snackbar.setAction(R.string.revert) { + setKey(getString(R.string.jsdelivr_proxy_key), false) + } + snackbar.setBackgroundTint(colorFromAttribute(R.attr.primaryGrayBackground)) + snackbar.setTextColor(colorFromAttribute(R.attr.textColor)) + snackbar.setActionTextColor(colorFromAttribute(R.attr.colorPrimary)) + snackbar.show() } - snackbar.setBackgroundTint(colorFromAttribute(R.attr.primaryGrayBackground)) - snackbar.setTextColor(colorFromAttribute(R.attr.textColor)) - snackbar.setActionTextColor(colorFromAttribute(R.attr.colorPrimary)) - snackbar.show() - } } } @@ -1123,7 +1150,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { suspend fun checkGithubConnectivity(): Boolean { return try { - app.get("https://raw.githubusercontent.com/recloudstream/.github/master/connectivitycheck", timeout = 5).text.trim() == "ok" + app.get( + "https://raw.githubusercontent.com/recloudstream/.github/master/connectivitycheck", + timeout = 5 + ).text.trim() == "ok" } catch (t: Throwable) { false } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt new file mode 100644 index 00000000..1c548e74 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Chillx.kt @@ -0,0 +1,135 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.* +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import javax.crypto.Cipher +import javax.crypto.SecretKeyFactory +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.PBEKeySpec +import javax.crypto.spec.SecretKeySpec + +class Bestx : Chillx() { + override val name = "Bestx" + override val mainUrl = "https://bestx.stream" +} + +class Watchx : Chillx() { + override val name = "Watchx" + override val mainUrl = "https://watchx.top" +} +open class Chillx : ExtractorApi() { + override val name = "Chillx" + override val mainUrl = "https://chillx.top" + override val requiresReferer = true + + companion object { + private const val KEY = "4VqE3#N7zt&HEP^a" + } + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val master = Regex("MasterJS\\s*=\\s*'([^']+)").find( + app.get( + url, + referer = referer + ).text + )?.groupValues?.get(1) + val encData = AppUtils.tryParseJson(base64Decode(master ?: return)) + val decrypt = cryptoAESHandler(encData ?: return, KEY, false) + + val source = Regex("""sources:\s*\[\{"file":"([^"]+)""").find(decrypt)?.groupValues?.get(1) + val tracks = Regex("""tracks:\s*\[(.+)]""").find(decrypt)?.groupValues?.get(1) + + // required + val headers = mapOf( + "Accept" to "*/*", + "Connection" to "keep-alive", + "Sec-Fetch-Dest" to "empty", + "Sec-Fetch-Mode" to "cors", + "Sec-Fetch-Site" to "cross-site", + "Origin" to mainUrl, + ) + + callback.invoke( + ExtractorLink( + name, + name, + source ?: return, + "$mainUrl/", + Qualities.P1080.value, + headers = headers, + isM3u8 = true + ) + ) + + AppUtils.tryParseJson>("[$tracks]") + ?.filter { it.kind == "captions" }?.map { track -> + subtitleCallback.invoke( + SubtitleFile( + track.label ?: "", + track.file ?: return@map null + ) + ) + } + } + + private fun cryptoAESHandler( + data: AESData, + pass: String, + encrypt: Boolean = true + ): String { + val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512") + val spec = PBEKeySpec( + pass.toCharArray(), + data.salt?.hexToByteArray(), + data.iterations?.toIntOrNull() ?: 1, + 256 + ) + val key = factory.generateSecret(spec) + val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") + return if (!encrypt) { + cipher.init( + Cipher.DECRYPT_MODE, + SecretKeySpec(key.encoded, "AES"), + IvParameterSpec(data.iv?.hexToByteArray()) + ) + String(cipher.doFinal(base64DecodeArray(data.ciphertext.toString()))) + } else { + cipher.init( + Cipher.ENCRYPT_MODE, + SecretKeySpec(key.encoded, "AES"), + IvParameterSpec(data.iv?.hexToByteArray()) + ) + base64Encode(cipher.doFinal(data.ciphertext?.toByteArray())) + } + } + + private fun String.hexToByteArray(): ByteArray { + check(length % 2 == 0) { "Must have an even length" } + return chunked(2) + .map { it.toInt(16).toByte() } + + .toByteArray() + } + + data class AESData( + @JsonProperty("ciphertext") val ciphertext: String? = null, + @JsonProperty("iv") val iv: String? = null, + @JsonProperty("salt") val salt: String? = null, + @JsonProperty("iterations") val iterations: String? = null, + ) + + data class Tracks( + @JsonProperty("file") val file: String? = null, + @JsonProperty("label") val label: String? = null, + @JsonProperty("kind") val kind: String? = null, + ) +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt index 84fd0552..4c1791a8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Filesim.kt @@ -5,6 +5,25 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8 +class Moviesm4u : Filesim() { + override val mainUrl = "https://moviesm4u.com" + override val name = "Moviesm4u" +} + +class FileMoonIn : Filesim() { + override val mainUrl = "https://filemoon.in" + override val name = "FileMoon" +} + +class StreamhideCom : Filesim() { + override var name: String = "Streamhide" + override var mainUrl: String = "https://streamhide.com" +} + +class Movhide : Filesim() { + override var name: String = "Movhide" + override var mainUrl: String = "https://movhide.pro" +} class Ztreamhub : Filesim() { override val mainUrl: String = "https://ztreamhub.com" //Here 'cause works @@ -35,7 +54,7 @@ open class Filesim : ExtractorApi() { response.select("script[type=text/javascript]").map { script -> if (script.data().contains(Regex("eval\\(function\\(p,a,c,k,e,[rd]"))) { val unpackedscript = getAndUnpack(script.data()) - val m3u8Regex = Regex("file.\\\"(.*?m3u8.*?)\\\"") + val m3u8Regex = Regex("file.\"(.*?m3u8.*?)\"") val m3u8 = m3u8Regex.find(unpackedscript)?.destructured?.component1() ?: "" if (m3u8.isNotEmpty()) { generateM3u8( diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt new file mode 100644 index 00000000..2ec185e0 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Gofile.kt @@ -0,0 +1,59 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities + +open class Gofile : ExtractorApi() { + override val name = "Gofile" + override val mainUrl = "https://gofile.io" + override val requiresReferer = false + private val mainApi = "https://api.gofile.io" + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("/(?:\\?c=|d/)([\\da-zA-Z]+)").find(url)?.groupValues?.get(1) + val token = app.get("$mainApi/createAccount").parsedSafe()?.data?.get("token") + app.get("$mainApi/getContent?contentId=$id&token=$token&websiteToken=12345") + .parsedSafe()?.data?.contents?.forEach { + callback.invoke( + ExtractorLink( + this.name, + this.name, + it.value["link"] ?: return, + "", + getQuality(it.value["name"]), + headers = mapOf( + "Cookie" to "accountToken=$token" + ) + ) + ) + } + + } + + private fun getQuality(str: String?): Int { + return Regex("(\\d{3,4})[pP]").find(str ?: "")?.groupValues?.getOrNull(1)?.toIntOrNull() + ?: Qualities.Unknown.value + } + + data class Account( + @JsonProperty("data") val data: HashMap? = null, + ) + + data class Data( + @JsonProperty("contents") val contents: HashMap>? = null, + ) + + data class Source( + @JsonProperty("data") val data: Data? = null, + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt new file mode 100644 index 00000000..b6887259 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Krakenfiles.kt @@ -0,0 +1,37 @@ +package com.lagradost.cloudstream3.extractors + +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities +import com.lagradost.cloudstream3.utils.httpsify + +open class Krakenfiles : ExtractorApi() { + override val name = "Krakenfiles" + override val mainUrl = "https://krakenfiles.com" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("/(?:view|embed-video)/([\\da-zA-Z]+)").find(url)?.groupValues?.get(1) + val doc = app.get("$mainUrl/embed-video/$id").document + val link = doc.selectFirst("source")?.attr("src") + + callback.invoke( + ExtractorLink( + this.name, + this.name, + httpsify(link ?: return), + "", + Qualities.Unknown.value + ) + ) + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt index b7477242..3d2a81b7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/StreamSB.kt @@ -6,6 +6,26 @@ import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +import kotlin.random.Random + +class Vidgomunimesb : StreamSB() { + override var mainUrl = "https://vidgomunimesb.xyz" +} + +class Sbasian : StreamSB() { + override var mainUrl = "https://sbasian.pro" + override var name = "Sbasian" +} + +class Sbnet : StreamSB() { + override var name = "Sbnet" + override var mainUrl = "https://sbnet.one" +} + +class Keephealth : StreamSB() { + override var name = "Keephealth" + override var mainUrl = "https://keephealth.info" +} class Sbspeed : StreamSB() { override var name = "Sbspeed" @@ -81,24 +101,66 @@ class StreamSB11 : StreamSB() { override var mainUrl = "https://sbbrisk.com" } -// This is a modified version of https://github.com/jmir1/aniyomi-extensions/blob/master/src/en/genoanime/src/eu/kanade/tachiyomi/animeextension/en/genoanime/extractors/StreamSBExtractor.kt -// The following code is under the Apache License 2.0 https://github.com/jmir1/aniyomi-extensions/blob/master/LICENSE +class Sblongvu : StreamSB() { + override var mainUrl = "https://sblongvu.com" +} + open class StreamSB : ExtractorApi() { override var name = "StreamSB" override var mainUrl = "https://watchsb.com" override val requiresReferer = false + private val alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" - private val hexArray = "0123456789ABCDEF".toCharArray() + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val regexID = + Regex("(embed-[a-zA-Z\\d]{0,8}[a-zA-Z\\d_-]+|/e/[a-zA-Z\\d]{0,8}[a-zA-Z\\d_-]+)") + val id = regexID.findAll(url).map { + it.value.replace(Regex("(embed-|/e/)"), "") + }.first() + val master = "$mainUrl/375664356a494546326c4b797c7c6e756577776778623171737/${encodeId(id)}" + val headers = mapOf( + "watchsb" to "sbstream", + ) + val mapped = app.get( + master.lowercase(), + headers = headers, + referer = url, + ).parsedSafe
() + M3u8Helper.generateM3u8( + name, + mapped?.streamData?.file ?: return, + url, + headers = headers + ).forEach(callback) - private fun bytesToHex(bytes: ByteArray): String { - val hexChars = CharArray(bytes.size * 2) - for (j in bytes.indices) { - val v = bytes[j].toInt() and 0xFF - - hexChars[j * 2] = hexArray[v ushr 4] - hexChars[j * 2 + 1] = hexArray[v and 0x0F] + mapped.streamData.subs?.map {sub -> + subtitleCallback.invoke( + SubtitleFile( + sub.label.toString(), + sub.file ?: return@map null, + ) + ) + } + } + + private fun encodeId(id: String): String { + val code = "${createHashTable()}||$id||${createHashTable()}||streamsb" + return code.toCharArray().joinToString("") { char -> + char.code.toString(16) + } + } + + private fun createHashTable(): String { + return buildString { + repeat(12) { + append(alphabet[Random.nextInt(alphabet.length)]) + } } - return String(hexChars) } data class Subs ( @@ -122,42 +184,4 @@ open class StreamSB : ExtractorApi() { @JsonProperty("status_code") val statusCode: Int, ) - override suspend fun getUrl( - url: String, - referer: String?, - subtitleCallback: (SubtitleFile) -> Unit, - callback: (ExtractorLink) -> Unit - ) { - val regexID = - Regex("(embed-[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+|/e/[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+)") - val id = regexID.findAll(url).map { - it.value.replace(Regex("(embed-|/e/)"), "") - }.first() -// val master = "$mainUrl/sources48/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362" - val master = "$mainUrl/sources51/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/" - val headers = mapOf( - "watchsb" to "sbstream", - ) - val mapped = app.get( - master.lowercase(), - headers = headers, - referer = url, - ).parsedSafe
() - // val urlmain = mapped.streamData.file.substringBefore("/hls/") - M3u8Helper.generateM3u8( - name, - mapped?.streamData?.file ?: return, - url, - headers = headers - ).forEach(callback) - - mapped.streamData.subs?.map {sub -> - subtitleCallback.invoke( - SubtitleFile( - sub.label.toString(), - sub.file ?: return@map null, - ) - ) - } - } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt new file mode 100644 index 00000000..37a7edb5 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Uservideo.kt @@ -0,0 +1,51 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.Qualities + +open class Uservideo : ExtractorApi() { + override val name: String = "Uservideo" + override val mainUrl: String = "https://uservideo.xyz" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val script = app.get(url).document.selectFirst("script:containsData(hosts =)")?.data() + val host = script?.substringAfter("hosts = [\"")?.substringBefore("\"];") + val servers = script?.substringAfter("servers = \"")?.substringBefore("\";") + + val sources = app.get("$host/s/$servers").text.substringAfter("\"sources\":[").substringBefore("],").let { + AppUtils.tryParseJson>("[$it]") + } + val quality = Regex("(\\d{3,4})[Pp]").find(url)?.groupValues?.getOrNull(1)?.toIntOrNull() + + sources?.map { source -> + callback.invoke( + ExtractorLink( + name, + name, + source.src ?: return@map null, + url, + quality ?: Qualities.Unknown.value, + ) + ) + } + + } + + data class Sources( + @JsonProperty("src") val src: String? = null, + @JsonProperty("type") val type: String? = null, + @JsonProperty("label") val label: String? = null, + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt new file mode 100644 index 00000000..c8b2ae07 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Vicloud.kt @@ -0,0 +1,51 @@ +package com.lagradost.cloudstream3.extractors + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.utils.ExtractorApi +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.getQualityFromName + +open class Vicloud : ExtractorApi() { + override val name: String = "Vicloud" + override val mainUrl: String = "https://vicloud.sbs" + override val requiresReferer = false + + override suspend fun getUrl( + url: String, + referer: String?, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ) { + val id = Regex("\"apiQuery\":\"(.*?)\"").find(app.get(url).text)?.groupValues?.getOrNull(1) + app.get( + "$mainUrl/api/?$id=&_=${System.currentTimeMillis()}", + headers = mapOf( + "X-Requested-With" to "XMLHttpRequest" + ), + referer = url + ).parsedSafe()?.sources?.map { source -> + callback.invoke( + ExtractorLink( + name, + name, + source.file ?: return@map null, + url, + getQualityFromName(source.label), + ) + ) + } + + } + + private data class Sources( + @JsonProperty("file") val file: String? = null, + @JsonProperty("label") val label: String? = null, + ) + + private data class Responses( + @JsonProperty("sources") val sources: List? = arrayListOf(), + ) + +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt index 12a76a9b..2c6998de 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/Voe.kt @@ -6,6 +6,10 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.M3u8Helper +class Tubeless : Voe() { + override var mainUrl = "https://tubelessceliolymph.com" +} + open class Voe : ExtractorApi() { override val name = "Voe" override val mainUrl = "https://voe.sx" @@ -18,8 +22,8 @@ open class Voe : ExtractorApi() { callback: (ExtractorLink) -> Unit ) { val res = app.get(url, referer = referer).document - val link = res.select("script").find { it.data().contains("const sources") }?.data() - ?.substringAfter("\"hls\": \"")?.substringBefore("\",") + val script = res.select("script").find { it.data().contains("sources =") }?.data() + val link = Regex("[\"']hls[\"']:\\s*[\"'](.*)[\"']").find(script ?: return)?.groupValues?.get(1) M3u8Helper.generateM3u8( name, diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt deleted file mode 100644 index ad3f0150..00000000 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/VoeExtractor.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.lagradost.cloudstream3.extractors - -import com.fasterxml.jackson.annotation.JsonProperty -import com.lagradost.cloudstream3.app -import com.lagradost.cloudstream3.utils.AppUtils.parseJson -import com.lagradost.cloudstream3.utils.ExtractorApi -import com.lagradost.cloudstream3.utils.ExtractorLink -import com.lagradost.cloudstream3.utils.getQualityFromName - -open class VoeExtractor : ExtractorApi() { - override val name: String = "Voe" - override val mainUrl: String = "https://voe.sx" - override val requiresReferer = false - - private data class ResponseLinks( - @JsonProperty("hls") val hls: String?, - @JsonProperty("mp4") val mp4: String?, - @JsonProperty("video_height") val label: Int? - //val type: String // Mp4 - ) - - override suspend fun getUrl(url: String, referer: String?): List { - val html = app.get(url).text - if (html.isNotBlank()) { - val src = html.substringAfter("const sources =").substringBefore(";") - // Remove last comma, it is not proper json otherwise - .replace("0,", "0") - // Make json use the proper quotes - .replace("'", "\"") - - //Log.i(this.name, "Result => (src) ${src}") - parseJson(src)?.let { voeLink -> - //Log.i(this.name, "Result => (voeLink) ${voeLink}") - - // Always defaults to the hls link, but returns the mp4 if null - val linkUrl = voeLink.hls ?: voeLink.mp4 - val linkLabel = voeLink.label?.toString() ?: "" - if (!linkUrl.isNullOrEmpty()) { - return listOf( - ExtractorLink( - name = this.name, - source = this.name, - url = linkUrl, - quality = getQualityFromName(linkLabel), - referer = url, - isM3u8 = voeLink.hls != null - ) - ) - } - } - } - return emptyList() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt index 15ff0436..ccb2fde7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/XStreamCdn.kt @@ -8,6 +8,16 @@ import com.lagradost.cloudstream3.utils.ExtractorApi import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.getQualityFromName +class StreamM4u : XStreamCdn() { + override val name: String = "StreamM4u" + override val mainUrl: String = "https://streamm4u.club" +} + +class Fembed9hd : XStreamCdn() { + override var mainUrl = "https://fembed9hd.com" + override var name = "Fembed9hd" +} + class Cdnplayer: XStreamCdn() { override val name: String = "Cdnplayer" override val mainUrl: String = "https://cdnplayer.online" diff --git a/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt new file mode 100644 index 00000000..1766af6c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/extractors/helper/GogoHelper.kt @@ -0,0 +1,158 @@ +package com.lagradost.cloudstream3.extractors.helper + +import com.fasterxml.jackson.annotation.JsonProperty +import com.lagradost.cloudstream3.app +import com.lagradost.cloudstream3.base64Decode +import com.lagradost.cloudstream3.base64DecodeArray +import com.lagradost.cloudstream3.base64Encode +import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.mvvm.safeApiCall +import com.lagradost.cloudstream3.utils.AppUtils +import com.lagradost.cloudstream3.utils.ExtractorLink +import com.lagradost.cloudstream3.utils.M3u8Helper +import com.lagradost.cloudstream3.utils.getQualityFromName +import org.jsoup.nodes.Document +import java.net.URI +import javax.crypto.Cipher +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.SecretKeySpec + +object GogoHelper { + + /** + * @param id base64Decode(show_id) + IV + * @return the encryption key + * */ + private fun getKey(id: String): String? { + return normalSafeApiCall { + id.map { + it.code.toString(16) + }.joinToString("").substring(0, 32) + } + } + + // https://github.com/saikou-app/saikou/blob/45d0a99b8a72665a29a1eadfb38c506b842a29d7/app/src/main/java/ani/saikou/parsers/anime/extractors/GogoCDN.kt#L97 + // No Licence on the function + private fun cryptoHandler( + string: String, + iv: String, + secretKeyString: String, + encrypt: Boolean = true + ): String { + //println("IV: $iv, Key: $secretKeyString, encrypt: $encrypt, Message: $string") + val ivParameterSpec = IvParameterSpec(iv.toByteArray()) + val secretKey = SecretKeySpec(secretKeyString.toByteArray(), "AES") + val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") + return if (!encrypt) { + cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec) + String(cipher.doFinal(base64DecodeArray(string))) + } else { + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec) + base64Encode(cipher.doFinal(string.toByteArray())) + } + } + + /** + * @param iframeUrl something like https://gogoplay4.com/streaming.php?id=XXXXXX + * @param mainApiName used for ExtractorLink names and source + * @param iv secret iv from site, required non-null if isUsingAdaptiveKeys is off + * @param secretKey secret key for decryption from site, required non-null if isUsingAdaptiveKeys is off + * @param secretDecryptKey secret key to decrypt the response json, required non-null if isUsingAdaptiveKeys is off + * @param isUsingAdaptiveKeys generates keys from IV and ID, see getKey() + * @param isUsingAdaptiveData generate encrypt-ajax data based on $("script[data-name='episode']")[0].dataset.value + * */ + suspend fun extractVidstream( + iframeUrl: String, + mainApiName: String, + callback: (ExtractorLink) -> Unit, + iv: String?, + secretKey: String?, + secretDecryptKey: String?, + // This could be removed, but i prefer it verbose + isUsingAdaptiveKeys: Boolean, + isUsingAdaptiveData: Boolean, + // If you don't want to re-fetch the document + iframeDocument: Document? = null + ) = safeApiCall { + if ((iv == null || secretKey == null || secretDecryptKey == null) && !isUsingAdaptiveKeys) + return@safeApiCall + + val id = Regex("id=([^&]+)").find(iframeUrl)!!.value.removePrefix("id=") + + var document: Document? = iframeDocument + val foundIv = + iv ?: (document ?: app.get(iframeUrl).document.also { document = it }) + .select("""div.wrapper[class*=container]""") + .attr("class").split("-").lastOrNull() ?: return@safeApiCall + val foundKey = secretKey ?: getKey(base64Decode(id) + foundIv) ?: return@safeApiCall + val foundDecryptKey = secretDecryptKey ?: foundKey + + val uri = URI(iframeUrl) + val mainUrl = "https://" + uri.host + + val encryptedId = cryptoHandler(id, foundIv, foundKey) + val encryptRequestData = if (isUsingAdaptiveData) { + // Only fetch the document if necessary + val realDocument = document ?: app.get(iframeUrl).document + val dataEncrypted = + realDocument.select("script[data-name='episode']").attr("data-value") + val headers = cryptoHandler(dataEncrypted, foundIv, foundKey, false) + "id=$encryptedId&alias=$id&" + headers.substringAfter("&") + } else { + "id=$encryptedId&alias=$id" + } + + val jsonResponse = + app.get( + "$mainUrl/encrypt-ajax.php?$encryptRequestData", + headers = mapOf("X-Requested-With" to "XMLHttpRequest") + ) + val dataencrypted = + jsonResponse.text.substringAfter("{\"data\":\"").substringBefore("\"}") + val datadecrypted = cryptoHandler(dataencrypted, foundIv, foundDecryptKey, false) + val sources = AppUtils.parseJson(datadecrypted) + + suspend fun invokeGogoSource( + source: GogoSource, + sourceCallback: (ExtractorLink) -> Unit + ) { + if (source.file.contains(".m3u8")) { + M3u8Helper.generateM3u8( + mainApiName, + source.file, + mainUrl, + headers = mapOf("Origin" to "https://plyr.link") + ).forEach(sourceCallback) + } else { + sourceCallback.invoke( + ExtractorLink( + mainApiName, + mainApiName, + source.file, + mainUrl, + getQualityFromName(source.label), + ) + ) + } + } + + sources.source?.forEach { + invokeGogoSource(it, callback) + } + sources.sourceBk?.forEach { + invokeGogoSource(it, callback) + } + } + + data class GogoSources( + @JsonProperty("source") val source: List?, + @JsonProperty("sourceBk") val sourceBk: List?, + ) + + data class GogoSource( + @JsonProperty("file") val file: String, + @JsonProperty("label") val label: String?, + @JsonProperty("type") val type: String?, + @JsonProperty("default") val default: String? = null + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt index 742bf308..b80a590e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -95,15 +95,11 @@ object RepositoryManager { } } else if (fixedUrl.matches("^[a-zA-Z0-9!_-]+$".toRegex())) { suspendSafeApiCall { - app.get("https://l.cloudstream.cf/${fixedUrl}", allowRedirects = false).let { - it.headers["Location"]?.let { url -> - return@suspendSafeApiCall if (!url.startsWith("https://cutt.ly/branded-domains")) url - else null - } - app.get("https://cutt.ly/${fixedUrl}", allowRedirects = false).let { it2 -> - it2.headers["Location"]?.let { url -> - return@suspendSafeApiCall if (url.startsWith("https://cutt.ly/404")) url else null - } + app.get("https://cutt.ly/${fixedUrl}", allowRedirects = false).let { it2 -> + it2.headers["Location"]?.let { url -> + if (url.startsWith("https://cutt.ly/404")) return@suspendSafeApiCall null + if (url.removeSuffix("/") == "https://cutt.ly") return@suspendSafeApiCall null + return@suspendSafeApiCall url } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt index f17086c1..8ce6bae2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/syncproviders/AccountManager.kt @@ -45,6 +45,7 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI { const val appString = "cloudstreamapp" const val appStringRepo = "cloudstreamrepo" + const val appStringPlayer = "cloudstreamplayer" // Instantly start the search given a query const val appStringSearch = "cloudstreamsearch" diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index f0340845..e80a8fa5 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -24,7 +24,6 @@ import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick import com.lagradost.cloudstream3.ui.player.GeneratorPlayer import com.lagradost.cloudstream3.ui.player.LinkGenerator -import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.utils.AppUtils.loadResult import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE @@ -40,6 +39,7 @@ import kotlinx.android.synthetic.main.stream_input.* import android.text.format.Formatter.formatShortFileSize import androidx.core.widget.doOnTextChanged import com.lagradost.cloudstream3.mvvm.normalSafeApiCall +import com.lagradost.cloudstream3.ui.player.BasicLink import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings import java.net.URI @@ -225,7 +225,7 @@ class DownloadFragment : Fragment() { R.id.global_to_navigation_player, GeneratorPlayer.newInstance( LinkGenerator( - listOf(url), + listOf(BasicLink(url)), extract = true, referer = referer, isM3u8 = dialog.hls_switch?.isChecked diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt index e6999c9e..58c6dbe0 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapter.kt @@ -185,7 +185,7 @@ open class ParentItemAdapter( ) : RecyclerView.ViewHolder(itemView) { val title: TextView = itemView.home_child_more_info - val recyclerView: RecyclerView = itemView.home_child_recyclerview + private val recyclerView: RecyclerView = itemView.home_child_recyclerview fun update(expand: HomeViewModel.ExpandableHomepageList) { val info = expand.list diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt index 21047db3..52f0b760 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt @@ -184,7 +184,7 @@ abstract class AbstractPlayerFragment( isInPIPMode = isInPictureInPictureMode if (isInPictureInPictureMode) { // Hide the full-screen UI (controls, etc.) while in picture-in-picture mode. - player_holder?.alpha = 0f + piphide?.isVisible = false pipReceiver = object : BroadcastReceiver() { override fun onReceive( context: Context, @@ -212,7 +212,7 @@ abstract class AbstractPlayerFragment( updateIsPlaying(Pair(isPlayingValue, isPlayingValue)) } else { // Restore the full-screen UI. - player_holder?.alpha = 1f + piphide?.isVisible = true exitedPipMode() pipReceiver?.let { activity?.unregisterReceiver(it) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt index 782e3fa4..9ec18b9c 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt @@ -9,8 +9,11 @@ import android.widget.FrameLayout import androidx.preference.PreferenceManager import com.google.android.exoplayer2.* import com.google.android.exoplayer2.C.* +import com.google.android.exoplayer2.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON +import com.google.android.exoplayer2.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER import com.google.android.exoplayer2.database.StandaloneDatabaseProvider import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource +import com.google.android.exoplayer2.mediacodec.MediaCodecSelector import com.google.android.exoplayer2.source.* import com.google.android.exoplayer2.text.TextRenderer import com.google.android.exoplayer2.trackselection.DefaultTrackSelector @@ -538,7 +541,8 @@ class CS3IPlayer : IPlayer { } // Do no include empty referer, if the provider wants those they can use the header map. - val refererMap = if (link.referer.isBlank()) emptyMap() else mapOf("referer" to link.referer) + val refererMap = + if (link.referer.isBlank()) emptyMap() else mapOf("referer" to link.referer) val headers = mapOf( "accept" to "*/*", "sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"", @@ -669,23 +673,27 @@ class CS3IPlayer : IPlayer { val exoPlayerBuilder = ExoPlayer.Builder(context) .setRenderersFactory { eventHandler, videoRendererEventListener, audioRendererEventListener, textRendererOutput, metadataRendererOutput -> - DefaultRenderersFactory(context).createRenderers( - eventHandler, - videoRendererEventListener, - audioRendererEventListener, - textRendererOutput, - metadataRendererOutput - ).map { - if (it is TextRenderer) { - currentTextRenderer = CustomTextRenderer( - subtitleOffset, - textRendererOutput, - eventHandler.looper, - CustomSubtitleDecoderFactory() - ) - currentTextRenderer!! - } else it - }.toTypedArray() + DefaultRenderersFactory(context).apply { +// setEnableDecoderFallback(true) + // Enable Ffmpeg extension +// setExtensionRendererMode(EXTENSION_RENDERER_MODE_ON) + }.createRenderers( + eventHandler, + videoRendererEventListener, + audioRendererEventListener, + textRendererOutput, + metadataRendererOutput + ).map { + if (it is TextRenderer) { + currentTextRenderer = CustomTextRenderer( + subtitleOffset, + textRendererOutput, + eventHandler.looper, + CustomSubtitleDecoderFactory() + ) + currentTextRenderer!! + } else it + }.toTypedArray() } .setTrackSelector( trackSelector ?: getTrackSelector( @@ -704,6 +712,10 @@ class CS3IPlayer : IPlayer { if (cacheSize > Int.MAX_VALUE) Int.MAX_VALUE else cacheSize.toInt() } ) + .setBackBuffer( + 30000, + true + ) .setBufferDurationsMs( DefaultLoadControl.DEFAULT_MIN_BUFFER_MS, if (videoBufferMs <= 0) { @@ -977,12 +989,19 @@ class CS3IPlayer : IPlayer { // If the Network fails then ignore the exception if the duration is set. // This is to switch mirrors automatically if the stream has not been fetched, but // allow playing the buffer without internet as then the duration is fetched. - if (error.errorCode == PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED - && exoPlayer?.duration != TIME_UNSET - ) { - exoPlayer?.prepare() - } else { - playerError?.invoke(error) + when { + error.errorCode == PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED + && exoPlayer?.duration != TIME_UNSET -> { + exoPlayer?.prepare() + } + error.errorCode == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW -> { + // Re-initialize player at the current live window default position. + exoPlayer?.seekToDefaultPosition() + exoPlayer?.prepare() + } + else -> { + playerError?.invoke(error) + } } super.onPlayerError(error) @@ -1196,10 +1215,10 @@ class CS3IPlayer : IPlayer { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory) } - val mime = if (link.isM3u8) { - MimeTypes.APPLICATION_M3U8 - } else { - MimeTypes.VIDEO_MP4 + val mime = when { + link.isM3u8 -> MimeTypes.APPLICATION_M3U8 + link.isDash -> MimeTypes.APPLICATION_MPD + else -> MimeTypes.VIDEO_MP4 } val mediaItems = if (link is ExtractorLinkPlayList) { @@ -1249,4 +1268,4 @@ class CS3IPlayer : IPlayer { loadOfflinePlayer(context, it) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt index 690d3706..974a5d26 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt @@ -4,13 +4,16 @@ import android.content.Context import android.util.Log import androidx.preference.PreferenceManager import com.google.android.exoplayer2.Format -import com.google.android.exoplayer2.text.SubtitleDecoder -import com.google.android.exoplayer2.text.SubtitleDecoderFactory -import com.google.android.exoplayer2.text.SubtitleInputBuffer -import com.google.android.exoplayer2.text.SubtitleOutputBuffer +import com.google.android.exoplayer2.text.* +import com.google.android.exoplayer2.text.cea.Cea608Decoder +import com.google.android.exoplayer2.text.cea.Cea708Decoder +import com.google.android.exoplayer2.text.dvb.DvbDecoder +import com.google.android.exoplayer2.text.pgs.PgsDecoder import com.google.android.exoplayer2.text.ssa.SsaDecoder import com.google.android.exoplayer2.text.subrip.SubripDecoder import com.google.android.exoplayer2.text.ttml.TtmlDecoder +import com.google.android.exoplayer2.text.tx3g.Tx3gDecoder +import com.google.android.exoplayer2.text.webvtt.Mp4WebvttDecoder import com.google.android.exoplayer2.text.webvtt.WebvttDecoder import com.google.android.exoplayer2.util.MimeTypes import com.lagradost.cloudstream3.R @@ -19,7 +22,11 @@ import org.mozilla.universalchardet.UniversalDetector import java.nio.ByteBuffer import java.nio.charset.Charset -class CustomDecoder : SubtitleDecoder { +/** + * @param fallbackFormat used to create a decoder based on mimetype if the subtitle string is not + * enough to identify the subtitle format. + **/ +class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder { companion object { fun updateForcedEncoding(context: Context) { val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) @@ -139,7 +146,7 @@ class CustomDecoder : SubtitleDecoder { val inputString = getStr(inputBuffer) if (realDecoder == null && !inputString.isNullOrBlank()) { var str: String = inputString - // this way we read the subtitle file and decide what decoder to use instead of relying on mimetype + // this way we read the subtitle file and decide what decoder to use instead of relying fully on mimetype Log.i(TAG, "Got data from queueInputBuffer") //https://github.com/LagradOst/CloudStream-2/blob/ddd774ee66810137ff7bd65dae70bcf3ba2d2489/CloudStreamForms/CloudStreamForms/Script/MainChrome.cs#L388 realDecoder = when { @@ -148,8 +155,31 @@ class CustomDecoder : SubtitleDecoder { (str.startsWith( "[Script Info]", ignoreCase = true - ) || str.startsWith("Title:", ignoreCase = true)) -> SsaDecoder() + ) || str.startsWith("Title:", ignoreCase = true)) -> SsaDecoder(fallbackFormat?.initializationData) str.startsWith("1", ignoreCase = true) -> SubripDecoder() + fallbackFormat != null -> { + when (val mimeType = fallbackFormat.sampleMimeType) { + MimeTypes.TEXT_VTT -> WebvttDecoder() + MimeTypes.TEXT_SSA -> SsaDecoder(fallbackFormat.initializationData) + MimeTypes.APPLICATION_MP4VTT -> Mp4WebvttDecoder() + MimeTypes.APPLICATION_TTML -> TtmlDecoder() + MimeTypes.APPLICATION_SUBRIP -> SubripDecoder() + MimeTypes.APPLICATION_TX3G -> Tx3gDecoder(fallbackFormat.initializationData) + MimeTypes.APPLICATION_CEA608, MimeTypes.APPLICATION_MP4CEA608 -> Cea608Decoder( + mimeType, + fallbackFormat.accessibilityChannel, + Cea608Decoder.MIN_DATA_CHANNEL_TIMEOUT_MS + ) + MimeTypes.APPLICATION_CEA708 -> Cea708Decoder( + fallbackFormat.accessibilityChannel, + fallbackFormat.initializationData + ) + MimeTypes.APPLICATION_DVBSUBS -> DvbDecoder(fallbackFormat.initializationData) + MimeTypes.APPLICATION_PGS -> PgsDecoder() + MimeTypes.TEXT_EXOPLAYER_CUES -> ExoplayerCuesDecoder() + else -> null + } + } else -> null } Log.i( @@ -246,28 +276,6 @@ class CustomSubtitleDecoderFactory : SubtitleDecoderFactory { } override fun createDecoder(format: Format): SubtitleDecoder { - return CustomDecoder() - //return when (val mimeType = format.sampleMimeType) { - // MimeTypes.TEXT_VTT -> WebvttDecoder() - // MimeTypes.TEXT_SSA -> SsaDecoder(format.initializationData) - // MimeTypes.APPLICATION_MP4VTT -> Mp4WebvttDecoder() - // MimeTypes.APPLICATION_TTML -> TtmlDecoder() - // MimeTypes.APPLICATION_SUBRIP -> SubripDecoder() - // MimeTypes.APPLICATION_TX3G -> Tx3gDecoder(format.initializationData) - // MimeTypes.APPLICATION_CEA608, MimeTypes.APPLICATION_MP4CEA608 -> return Cea608Decoder( - // mimeType, - // format.accessibilityChannel, - // Cea608Decoder.MIN_DATA_CHANNEL_TIMEOUT_MS - // ) - // MimeTypes.APPLICATION_CEA708 -> Cea708Decoder( - // format.accessibilityChannel, - // format.initializationData - // ) - // MimeTypes.APPLICATION_DVBSUBS -> DvbDecoder(format.initializationData) - // MimeTypes.APPLICATION_PGS -> PgsDecoder() - // MimeTypes.TEXT_EXOPLAYER_CUES -> ExoplayerCuesDecoder() - // // Default WebVttDecoder - // else -> WebvttDecoder() - //} + return CustomDecoder(format) } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt index dc1bbba3..6f40e145 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/DownloadedPlayerActivity.kt @@ -42,7 +42,7 @@ class DownloadedPlayerActivity : AppCompatActivity() { R.id.global_to_navigation_player, GeneratorPlayer.newInstance( LinkGenerator( listOf( - url + BasicLink(url) ) ) ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt index 1f242481..0b560857 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/LinkGenerator.kt @@ -5,8 +5,15 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall import com.lagradost.cloudstream3.utils.* import java.net.URI +/** + * Used to open the player more easily with the LinkGenerator + **/ +data class BasicLink( + val url: String, + val name: String? = null, +) class LinkGenerator( - private val links: List, + private val links: List, private val extract: Boolean = true, private val referer: String? = null, private val isM3u8: Boolean? = null @@ -47,7 +54,7 @@ class LinkGenerator( offset: Int ): Boolean { links.amap { link -> - if (!extract || !loadExtractor(link, referer, { + if (!extract || !loadExtractor(link.url, referer, { subtitleCallback(PlayerSubtitleHelper.getSubtitleData(it)) }) { callback(it to null) @@ -57,11 +64,11 @@ class LinkGenerator( callback( ExtractorLink( "", - link, - unshortenLinkSafe(link), // unshorten because it might be a raw link + link.name ?: link.url, + unshortenLinkSafe(link.url), // unshorten because it might be a raw link referer ?: "", Qualities.Unknown.value, isM3u8 ?: normalSafeApiCall { - URI(link).path?.substringAfterLast(".")?.contains("m3u") + URI(link.url).path?.substringAfterLast(".")?.contains("m3u") } ?: false ) to null ) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt index 59a46264..affbcbb4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/LinearListLayout.kt @@ -7,13 +7,13 @@ import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.mvvm.logError fun RecyclerView?.setLinearListLayout(isHorizontal: Boolean = true) { - if(this == null) return + if (this == null) return this.layoutManager = this.context?.let { LinearListLayout(it).apply { if (isHorizontal) setHorizontal() else setVertical() } } ?: this.layoutManager } -class LinearListLayout(context: Context?) : +open class LinearListLayout(context: Context?) : LinearLayoutManager(context) { fun setHorizontal() { @@ -24,7 +24,8 @@ class LinearListLayout(context: Context?) : orientation = VERTICAL } - private fun getCorrectParent(focused: View): View? { + private fun getCorrectParent(focused: View?): View? { + if (focused == null) return null var current: View? = focused val last: ArrayList = arrayListOf(focused) while (current != null && current !is RecyclerView) { @@ -54,10 +55,17 @@ class LinearListLayout(context: Context?) : linearSmoothScroller.targetPosition = position startSmoothScroll(linearSmoothScroller) }*/ - override fun onInterceptFocusSearch(focused: View, direction: Int): View? { val dir = if (orientation == HORIZONTAL) { - if (direction == View.FOCUS_DOWN || direction == View.FOCUS_UP) return null + if (direction == View.FOCUS_DOWN || direction == View.FOCUS_UP) { + // This scrolls the recyclerview before doing focus search, which + // allows the focus search to work better. + + // Without this the recyclerview focus location on the screen + // would change when scrolling between recyclerviews. + (focused.parent as? RecyclerView)?.focusSearch(direction) + return null + } if (direction == View.FOCUS_RIGHT) 1 else -1 } else { if (direction == View.FOCUS_RIGHT || direction == View.FOCUS_LEFT) return null diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index bdef14b5..5a3e28b4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -22,6 +22,7 @@ import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager +import androidx.recyclerview.widget.RecyclerView import com.discord.panels.OverlappingPanelsLayout import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipDrawable @@ -531,6 +532,25 @@ open class ResultFragment : ResultTrailerPlayer() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + result_cast_items?.layoutManager = object : LinearListLayout(view.context) { + override fun onRequestChildFocus( + parent: RecyclerView, + state: RecyclerView.State, + child: View, + focused: View? + ): Boolean { + // Make the cast always focus the first visible item when focused + // from somewhere else. Otherwise it jumps to the last item. + return if (parent.focusedChild == null) { + scrollToPosition(this.findFirstCompletelyVisibleItemPosition()) + true + } else { + super.onRequestChildFocus(parent, state, child, focused) + } + } + }.apply { + this.orientation = RecyclerView.HORIZONTAL + } result_cast_items?.adapter = ActorAdaptor() updateUIListener = ::updateUI diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 2983b41d..46a8c9f6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui.result import android.app.Activity import android.content.* import android.net.Uri +import android.os.Build import android.os.Bundle import android.util.Log import android.widget.Toast @@ -1125,7 +1126,12 @@ class ResultViewModel2 : ViewModel() { 1L } - component = VLC_COMPONENT + // Component no longer safe to use in A13 for VLC + // https://code.videolan.org/videolan/vlc-android/-/issues/2776 + // This will likely need to be updated once VLC fixes their documentation. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + component = VLC_COMPONENT + } putExtra("from_start", !resume) putExtra("position", position) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt index f9627e46..1ef3cb55 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsAccount.kt @@ -157,6 +157,28 @@ class SettingsAccount : PreferenceFragmentCompat() { ) dialog.dismissSafe() } + + val displayedItems = listOf( + dialog.login_username_input, + dialog.login_email_input, + dialog.login_server_input, + dialog.login_password_input + ).filter { it.isVisible } + + displayedItems.foldRight(displayedItems.firstOrNull()) { item, previous -> + item?.id?.let { previous?.nextFocusDownId = it } + previous?.id?.let { item?.nextFocusUpId = it } + item + } + + displayedItems.firstOrNull()?.let { + dialog.create_account?.nextFocusDownId = it.id + it.nextFocusUpId = dialog.create_account.id + } + dialog.apply_btt?.id?.let { + displayedItems.lastOrNull()?.nextFocusDownId = it + } + dialog.text1?.text = api.name if (api.storesPasswordInPlainText) { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt index 078419e2..ee262eec 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt @@ -57,6 +57,7 @@ fun getCurrentLocale(context: Context): String { val appLanguages = arrayListOf( /* begin language list */ Triple("", "العربية", "ar"), + Triple("", "ars", "ars"), Triple("", "български", "bg"), Triple("", "বাংলা", "bn"), Triple("\uD83C\uDDE7\uD83C\uDDF7", "português brasileiro", "bp"), @@ -76,11 +77,15 @@ val appLanguages = arrayListOf( Triple("\uD83C\uDDEE\uD83C\uDDF1", "עברית", "iw"), Triple("", "日本語 (にほんご)", "ja"), Triple("", "ಕನ್ನಡ", "kn"), + Triple("", "한국어", "ko"), + Triple("", "latviešu valoda", "lv"), Triple("", "македонски", "mk"), Triple("", "മലയാളം", "ml"), + Triple("", "bahasa Melayu", "ms"), Triple("", "Nederlands", "nl"), Triple("", "norsk nynorsk", "nn"), Triple("", "norsk bokmål", "no"), + Triple("", "ଓଡ଼ିଆ", "or"), Triple("", "polski", "pl"), Triple("\uD83C\uDDF5\uD83C\uDDF9", "português", "pt"), Triple("\uD83E\uDD8D", "mmmm... monke", "qt"), @@ -96,7 +101,7 @@ val appLanguages = arrayListOf( Triple("", "اردو", "ur"), Triple("", "Tiếng Việt", "vi"), Triple("", "中文", "zh"), - Triple("\uD83C\uDDF9\uD83C\uDDFC", "文言", "zh-rTW"), + Triple("\uD83C\uDDF9\uD83C\uDDFC", "正體中文(臺灣)", "zh-rTW"), /* end language list */ ).sortedBy { it.second.lowercase() } //ye, we go alphabetical, so ppl don't put their lang on top diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 7e60910d..045ed92d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.ui.settings.extensions -import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.DialogInterface diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt index 9ca540e2..f6373dce 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/ExtractorApi.kt @@ -52,7 +52,7 @@ data class ExtractorLinkPlayList( ) -open class ExtractorLink( +open class ExtractorLink constructor( open val source: String, open val name: String, override val url: String, @@ -62,7 +62,24 @@ open class ExtractorLink( override val headers: Map = mapOf(), /** Used for getExtractorVerifierJob() */ open val extractorData: String? = null, + open val isDash: Boolean = false, ) : VideoDownloadManager.IDownloadableMinimum { + /** + * Old constructor without isDash, allows for backwards compatibility with extensions. + * Should be removed after all extensions have updated their cloudstream.jar + **/ + constructor( + source: String, + name: String, + url: String, + referer: String, + quality: Int, + isM3u8: Boolean = false, + headers: Map = mapOf(), + /** Used for getExtractorVerifierJob() */ + extractorData: String? = null + ) : this(source, name, url, referer, quality, isM3u8, headers, extractorData, false) + override fun toString(): String { return "ExtractorLink(name=$name, url=$url, referer=$referer, isM3u8=$isM3u8)" } @@ -227,6 +244,7 @@ val extractorApis: MutableList = arrayListOf( XStreamCdn(), StreamSB(), + Vidgomunimesb(), StreamSB1(), StreamSB2(), StreamSB3(), @@ -266,7 +284,6 @@ val extractorApis: MutableList = arrayListOf( Uqload2(), Evoload(), Evoload1(), - VoeExtractor(), UpstreamExtractor(), Tomatomatela(), @@ -333,6 +350,24 @@ val extractorApis: MutableList = arrayListOf( DesuOdvip(), DesuDrive(), + Chillx(), + Watchx(), + Bestx(), + Keephealth(), + Sbnet(), + Sbasian(), + Sblongvu(), + Fembed9hd(), + StreamM4u(), + Krakenfiles(), + Gofile(), + Vicloud(), + Uservideo(), + + Movhide(), + StreamhideCom(), + FileMoonIn(), + Moviesm4u(), Filesim(), FileMoon(), FileMoonSx(), @@ -348,6 +383,7 @@ val extractorApis: MutableList = arrayListOf( Vidmoly(), Vidmolyme(), Voe(), + Tubeless(), Moviehab(), MoviehabNet(), Jeniusplay(), diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 2902b76b..c18ff48f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -1388,7 +1388,7 @@ object VideoDownloadManager { } } - if (link.isM3u8 || URI(link.url).path.endsWith(".m3u8")) { + if (link.isM3u8 || URL(link.url).path.endsWith(".m3u8")) { val startIndex = if (tryResume) { context.getKey( KEY_DOWNLOAD_INFO, @@ -1474,6 +1474,8 @@ object VideoDownloadManager { if (connectionResult != null && connectionResult > 0) { // SUCCESS removeKey(KEY_RESUME_PACKAGES, id.toString()) break + } else if (index == item.links.lastIndex) { + downloadStatusEvent.invoke(Pair(id, DownloadType.IsFailed)) } } } catch (e: Exception) { diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index a29dc192..5eacdbe2 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -199,17 +199,13 @@ android:id="@+id/result_back" android:layout_width="30dp" android:layout_height="30dp" - android:layout_gravity="center_vertical" android:layout_marginEnd="10dp" - android:background="?android:attr/selectableItemBackgroundBorderless" android:clickable="true" android:contentDescription="@string/go_back" - android:focusable="true" android:gravity="center_vertical" - android:nextFocusDown="@id/result_description" android:src="@drawable/ic_baseline_arrow_back_24" app:tint="?attr/white" /> @@ -385,8 +381,8 @@ @@ -423,11 +419,11 @@ @@ -568,6 +564,7 @@ android:layout_weight="1" android:minWidth="250dp" android:nextFocusLeft="@id/result_movie_progress_downloaded_holder" + android:nextFocusRight="@id/result_bookmark_button" android:nextFocusDown="@id/result_resume_series_button_play" android:text="@string/type_none" android:visibility="visible" /> diff --git a/app/src/main/res/layout/homepage_parent_tv.xml b/app/src/main/res/layout/homepage_parent_tv.xml index d0c88c39..9dcf0bae 100644 --- a/app/src/main/res/layout/homepage_parent_tv.xml +++ b/app/src/main/res/layout/homepage_parent_tv.xml @@ -2,33 +2,30 @@ + android:layout_height="wrap_content" + android:orientation="vertical"> \ No newline at end of file diff --git a/app/src/main/res/layout/player_custom_layout.xml b/app/src/main/res/layout/player_custom_layout.xml index 683a1077..54f92d1f 100644 --- a/app/src/main/res/layout/player_custom_layout.xml +++ b/app/src/main/res/layout/player_custom_layout.xml @@ -8,17 +8,6 @@ android:screenOrientation="landscape" tools:orientation="vertical"> - - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:background="@color/black_overlay" /> - + - - - - - - - - - - - - - - - - - - - - - - - - - - + android:gravity="center" + android:shadowColor="@android:color/black" + android:shadowRadius="10.0" + android:textColor="@android:color/white" + android:textSize="30sp" + tools:text="+100" /> + - - android:nextFocusRight="@id/exo_ffwd" - - android:nextFocusUp="@id/player_go_back" - android:nextFocusDown="@id/player_lock" - - android:src="@drawable/netflix_pause" - app:tint="@color/white" - tools:ignore="ContentDescription" /> - + + android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --> + + + + + + diff --git a/app/src/main/res/layout/player_custom_layout_tv.xml b/app/src/main/res/layout/player_custom_layout_tv.xml index 405b606f..62b359b6 100644 --- a/app/src/main/res/layout/player_custom_layout_tv.xml +++ b/app/src/main/res/layout/player_custom_layout_tv.xml @@ -9,8 +9,9 @@ android:tag="television" tools:orientation="vertical"> + @@ -19,359 +20,365 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/player_gradient_tv" /> - - + + + + - - - + + + + + + + + + + + - ---> - - - - - - - - - - - - - + + android:layout_gravity="center" - + android:clickable="false" + android:focusable="false" + android:focusableInTouchMode="false" - - - - - - - - - - - - - - - - - - - - - - - - - + android:indeterminate="true" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" /> + android:layout_gravity="bottom" + android:layout_marginBottom="20dp" + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="4dp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent"> - - - - + + + + + + + - - - + android:layout_height="0dp" + android:tintMode="src_in" + app:tint="?attr/colorPrimaryDark" + tools:ignore="ContentDescription" /> + - + android:layout_marginStart="64dp" + android:layout_marginEnd="64dp" + android:layout_marginBottom="10dp" + android:gravity="center_vertical" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> - + + android:src="@drawable/netflix_pause" + app:tint="@color/player_button_tv" + tools:ignore="ContentDescription" /> - + + - android:visibility="gone" - app:icon="@drawable/ic_outline_subtitles_24" - tools:visibility="visible" /> + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index cfd761e3..c1f07d6c 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -119,16 +119,16 @@ وضع إيغنغرافي يضيف خيار السرعة في المُشغل السحب لتقديم - إسحب إلى اليسار أو اليمين للتحكم في الوقت في مُشغل الفيديو + اسحب من جانب إلى آخر للتحكم في موضعك في مقطع فيديو السحب لتغيير الإعدادات - إسحب على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت + مرر لأعلى أو لأسفل على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت تشغيل الحلقة التالية تلقائيًا تبدأ الحلقة التالية عندما تنتهي الحالية النقر مرتان للتقديم للأمام أو للخلف الضغط مرتان لإيقاف مؤقت - التحكم في مدى تقديم المُشغل + التحكم في مدى تقديم المُشغل(ثوان) إضغط مرتين على الجانب الأيمن أو الأيسر للتقديم للأمام أو للخلف - إضغط في الوسط لإيقاف مؤقت + اضغط مرتين في المنتصف للتوقف استخدم سطوع النظام استخدم سطوع النظام في مُشغل التطبيق بدلاً من التراكب الداكن تحديث تقدم المشاهدة @@ -155,7 +155,7 @@ تحديث الإضافات تلقائيًا تنزيل الإضافات تلقائيًا التحديث التلقائي - البحث تلقائيًا عن التحديثات الجديدة عند البداية + ابحث تلقائيا عن التحديثات الجديدة بعد بدء التطبيق. التحديث إلى الاصدارات التجريبية (بيتا) البحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط غيت هاب @@ -218,8 +218,8 @@ فيلم مسلسل كرتون - أنمي - اوفا + أنيمي + أوفا تورنت وثائقي دراما آسيوية @@ -342,7 +342,7 @@ الكل الحد الاقصي الحد الأدنى - \@string/none + @string/none الخطوط المحيطة النمط المنخفض ظل @@ -366,7 +366,7 @@ تحميل من الانترنت الملف الذي تم تنزيله رئيسي - مساعد + ممثل مساعد الخلفية مصدر عشوائي @@ -525,12 +525,12 @@ اختر المكتبة المتصفح محدث (من الأحدث إلى الأقدم) - يبدو أن هذه القائمة فارغة ، حاول التبديل إلى قائمة أخرى + هذه القائمة فارغة ، حاول التبديل إلى قائمة أخرى. التقييم (من الأعلى إلى الأدنى) التقييم (من الأدنى إلى الأعلى) الترتيب الأبجدي (من ي إلى أ) - يبدو أن مكتبتك فارغة :( -\nتسجيل الدخول إلى حساب مكتبة أو إضافة عروض إلى مكتبتك المحلية + مكتبتك فارغة :( +\nقم بتسجيل الدخول على حساب مكتبة أو أضف عروضا إلى مكتبتك المحلية. محدث (من القديم إلى الجديد) فرز حسب افرز @@ -557,8 +557,8 @@ مشترك في %s تجاوز مزود خدمة الإنترنت استرجاع - فشل الوصول إلى GitHub ، وتمكين وكيل jsdelivr. + تعذر الوصول إلى جيثب. تشغيل وكيل jsDelivr … تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام. وكيل raw.githubusercontent.com جودة المشاهدة المفضلة (بيانات الجوال) - \ No newline at end of file + diff --git a/app/src/main/res/values-ars/strings.xml b/app/src/main/res/values-ars/strings.xml new file mode 100644 index 00000000..42eba3cc --- /dev/null +++ b/app/src/main/res/values-ars/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index f1f512a1..0543a94e 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -1,5 +1,5 @@ - + %s еп. %d Актьори: %s @@ -105,7 +105,7 @@ Продължете да гледате Премахване Повече информация - \@string/home_play + @string/home_play Може да е необходим VPN, за да работи правилно този доставчик Този доставчик е торент, препоръчва се VPN Метаданните не се предоставят от сайта, зареждането на видео ще бъде неуспешно, ако не съществува на сайта. @@ -223,8 +223,8 @@ Филм Серия Анимационен филм - \@string/anime - \@string/ova + @string/anime + @string/ova Торент Документален филм Азиатска драма @@ -497,4 +497,4 @@ Приложението ще се актуализира при изход от него Започна Актуализация Премахване от гледани - \ No newline at end of file + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 7e0448d6..12752938 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -143,9 +143,9 @@ হালনাগাদ ও ব্যাকআপ অ্যাপ এর হালনাগাদ দেখান খুঁজতে সোয়াইপ করুন - \@string/result_poster_img_des - \@string/home_play + @string/result_poster_img_des + @string/home_play আগাতে ডবল ট্যাপ করুন আইজেনগ্রাভি মোড আপডেট শুরু হয়েছে - \ No newline at end of file + diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml index 2c2e1303..38424e56 100644 --- a/app/src/main/res/values-bp/strings.xml +++ b/app/src/main/res/values-bp/strings.xml @@ -1,5 +1,5 @@ - + %s Ep %d @@ -10,7 +10,7 @@ %dm Poster - \@string/result_poster_img_des + @string/result_poster_img_des Episode Poster Main Poster Next Random @@ -108,7 +108,7 @@ Continue Assistindo Remover Mais Info - \@string/home_play + @string/home_play Uma VPN pode ser necessária para esse fornecedor funcionar corretamente Esse fornecedor é um torrent, uma VPN é recomendada Metadados não são oferecidas pelo site, o carregamento do video pode falhar se ele não existir no site. @@ -222,8 +222,8 @@ Filme Série Desenho Animado - \@string/anime - \@string/ova + @string/anime + @string/ova Torrent Documentário Drama Asiático @@ -428,4 +428,4 @@ Começa o próximo episódio quando o atual termina Ativar NSFW em fornecedores compatíveis Fornecedores - \ No newline at end of file + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index e99e1010..16ceff2d 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,5 +1,5 @@ - + %s Ep %d @@ -103,7 +103,7 @@ Pokračovat ve sledování Odebrat Další informace - \@string/home_play + @string/home_play Aby tento poskytovatel fungoval správně, budete možná potřebovat VPN Tento poskytovatel je torrent, je doporučená VPN Web neposkytnul žádná metadata, načítání videa selže, pokud na webu neexistuje. @@ -122,16 +122,16 @@ Rychlostní režim Přidá do přehrávače možnost rychlosti Přejet pro posun - Přejeďte prstem vlevo nebo vpravo pro ovládání času v přehrávači + Přejeďte prstem ze strany na stranu pro ovládání své pozice ve videu Přejet pro změnu nastavení - Přejeďte prstem na levé nebo pravé straně pro změnu jasu nebo hlasitosti + Přejeďte prstem nahoru nebo dolů na levé nebo pravé straně pro změnu jasu nebo hlasitosti Dvojité klepnutí pro posun Dvojité klepnutí pro pozastavení - Množství času k posunu + Množství času k posunu (sekundy) Klepněte dvakrát vpravo nebo vlevo pro posun vpřed nebo vzad - Klepněte doprostřed pro pozastavení + Klepněte dvakrát doprostřed pro pozastavení Použít systémový jas - V přehrávači použít systémov překrytí + V přehrávači použít systémový jas namísto tmavého překrytí Aktualizovat postup sledování Automaticky synchronizovat postup sledování současné epizody Obnovit data ze zálohy @@ -151,7 +151,7 @@ Nebude odesílat žádná data Zobrazit výplňové epizody u anime Zobrazit aktualizace aplikace - Při spuštění automaticky zkontrolovat nové aktualizace + Při spuštění aplikace automaticky zkontrolovat nové aktualizace. Aktualizovat na předběžná vydání Kontrolovat aktualizace předběžných vydání, místo normálních plných vydání GitHub @@ -211,8 +211,8 @@ Film Seriál Animovaný - \@string/anime - \@string/ova + Anime + OVA Torrent Dokument Asijské drama @@ -472,15 +472,15 @@ Nepodařilo se nainstalovat novou verzi aplikace Původní Aplikace bude po ukončení aktualizována - Vypadá to, že vaše knihovna je prázdná :( -\nPřihlaste se k účtu v knihovně nebo přidejte pořady do místní knihovny + Vaše knihovna je prázdná :( +\nPřihlaste se k účtu v knihovně nebo přidejte pořady do místní knihovny. Vybrat knihovnu Hodnocení (od nejvyššího) Hodnocení (od nejnižšího) Abecedně (od Z do A) Seřadit podle Řazení - Vypadá to, že tento seznam je prázdný, zkuste přepnout na jiný + Tento seznam je prázdný. Zkuste přepnout na jiný. Nalezen soubor bezpečného režimu! \nDo odebrání souboru nebudeme načítat žádná rozšíření. Aktualizováno (od nejnovějšího) @@ -548,9 +548,9 @@ Byla vydána epizoda %d! Odebíráno Proxy raw.githubusercontent.com - Nepodařilo se připojit ke GitHubu, povolování proxy jsdelivr. + Nelze se připojit k serveru GitHub. Zapínání proxy jsDelivr… Upřednostněná kvalita sledování (mobilní data) Vrátit zpět - Obchází blokování GitHubu pomocí jsdelivr, může způsobit zpoždění aktualizací o několik dní. + Obchází blokování GitHubu pomocí jsDelivr. Může způsobit zpoždění aktualizací o několik dní. Obcházení ISP - \ No newline at end of file + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c5e74a60..e0a9594c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -41,7 +41,7 @@ Suche %s… Keine Daten vorhanden Mehr Optionen - Nächste Epsisode + Nächste Episode Genres Teilen In Browser öffnen @@ -115,7 +115,7 @@ Weiterschauen Entfernen Mehr Infos - \@string/home_play + @string/home_play Damit dieser Anbieter korrekt funktioniert, ist möglicherweise ein VPN erforderlich Dieser Anbieter bietet Torrents an, ein VPN wird dringend empfohlen Metadaten werden nicht von der Website bereitgestellt, das Laden des Videos schlägt fehl, wenn sie auf der Website nicht vorhanden sind. @@ -136,14 +136,14 @@ Wischen zum vor- und zurückspulen Nach links oder rechts wischen, um die Zeit im Videoplayer zu steuern Wischen, um Einstellungen zu ändern - Links oder rechts wischen, um die Helligkeit oder Lautstärke zu ändern + Links oder rechts nach oben oder unten wischen, um die Helligkeit oder Lautstärke zu ändern Nächste Episode automatisch abspielen Nächste Episode wird gestartet, sobald die aktuelle Episode endet Doppeltippen zum vor- und zurückspulen Doppeltippen zum Pausieren - Zeit für vor- und zurückspulen im Player + Zeit für vor- und zurückspulen im Player (Sekunden) Zweimal auf die rechte oder linke Seite tippen, um vor- oder zurückzuspulen - In die Mitte tippen, um zu pausieren + Doppelt in die Mitte tippen, um zu pausieren Systemhelligkeit verwenden Systemhelligkeit anstelle eines dunklen Overlay im Player verwenden Episodenfortschritt aktualisieren @@ -166,7 +166,7 @@ Ausgewählte Videoqualität bei Suchergebnissen ausblenden Automatische Plugin-Updates App-Updates anzeigen - Automatisches Suchen nach neuen Updates beim Start + Automatisches Suchen nach neuen Updates nach dem Start. Auf Vorabversionen updaten Suche nach Vorabversionen statt nur nach Vollversionen Github @@ -246,7 +246,7 @@ In Browser wiedergeben Link kopieren Auto-Download - Download-Mirror + Alternativer Download Links neu laden Untertitel herunterladen Qualitätsanzeige @@ -286,7 +286,7 @@ Haftungsausschluss Allgemein Zufalls-Button - Zufallsbutton auf der Startseite anzeigen + Zeige Zufallsgenerator Schaltfläche auf der Startseite Anbieter-Sprachen App-Layout Bevorzugte Medien @@ -501,9 +501,9 @@ Alphabetisch (Z bis A) Bibliothek auswählen Öffnen mit - Sieht aus, als wäre deine Bibliothek leer :( -\nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu - Diese Liste scheint leer zu sein. Versuche, zu einer anderen Liste zu wechseln. + Deine Bibliothek ist leer :( +\nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu. + Diese Liste ist leer. Versuche zu einer anderen Liste zu wechseln. Datei für abgesicherten Modus gefunden! \nBeim Start werden keine Erweiterungen geladen, bis die Datei entfernt wird. Player ausgeblendet - Betrag zum vor- und zurückspulen @@ -519,14 +519,14 @@ Start Neustarten Bevorzugte Videoqualität (mobile Daten) - Umgehung der GitHub Sperre mit jsdelivr, kann zu einigen Tagen Verzögerung bei Updates führen. + Umgehung der GitHub Sperre mit jsdelivr. Kann zu einigen Tagen Verzögerung bei Updates führen. %s abonniert %s deabonniert Episode %d erschienen! raw.githubusercontent.com Proxy - GitHub kann nicht erreicht werden, der jsdelivr-Proxy wird aktiviert. - Aktualisierung abonnierter Sendungen + GitHub konnte nicht erreicht werden. Der jsDelivr-Proxy wird aktiviert … + Abonnierte Serien werden aktualisiert Rückgängig Abonniert ISP-Umgehungen - \ No newline at end of file + diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 5e9dafd8..5e02924f 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1,5 +1,5 @@ - + CloudStream Αρχική Αναζήτηση @@ -387,7 +387,7 @@ Κλείσιμο Εκκαθάριση Γλώσσα υποτίτλων - \@string/home_play + @string/home_play Δεν έχουν παρασχεθεί μεταδεδομένα από τον ιστότοπο, η φόρτωση του βίντεο θα αποτύχει αν δεν υπάρχει στον ιστότοπο. Διπλό πάτημα για παύση Μέγεθος αναζήτησης στο πρόγραμμα αναπαραγωγής @@ -452,7 +452,7 @@ Ανάμεικτοι τίτλοι τέλους -30 Κριτική - \@string/ova + @string/ova Ενημερώσεις εφαρμογής Αντίγραφο ασφαλείας Extensions @@ -464,7 +464,7 @@ Προεπιλεγμένα %s %s Μέγεθος γραμματοσειράς - \@string/anime + @string/anime Σύνδεσμοι Εμφάνιση Χαρακτηριστικά @@ -508,4 +508,4 @@ \nΣυνδέσου σε έναν λογαριασμό που έχει βιβλιοθήκη, ή πρόσθεσε σειρές στην τοπική βιβλιοθήκη σου Βρέθηκε αρχείο Ασφαλούς Λειτουργίας! \nΔεν πρόκειται να φορτωθούν extensions κατά το ξεκίνημα μέχρι να διαγραφεί το αρχείο. - \ No newline at end of file + diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 09e6941d..49f025d0 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -78,4 +78,4 @@ Rapido (%.2fx) Serĉi… Elŝuti - \ No newline at end of file + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 18647ef8..d248044d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -51,10 +51,10 @@ Elevado Use esto si los subtítulos se muestran %d ms muy pronto Use esto si los subtítulos se muestran %d ms tarde - Desliza el dedo hacia la izquierda o hacia la derecha para controlar el tiempo en el reproductor de video + Desliza el dedo de lado a lado para controlar la posición en un video Filtrar por idioma de medios preferido Eliminar Closed Captions (CC) de los subtítulos - Cantidad de tiempo de búsqueda en el reproductor (en segundos) + Cantidad de búsquedas del reproductor (segundos) Use el brillo del sistema en el reproductor de la app en lugar de una superposición oscura Resolución del reproductor de video MPV @@ -194,7 +194,7 @@ Continuar Viendo Remover Más info - \@string/home_play + @string/home_play Una VPN puede ser necesaria para que este proveedor funcione correctamente Este proveedor es un torrent, se recomienda una VPN El sitio no proporciona los metadatos, la carga del video fallará si no existe en el sitio. @@ -205,16 +205,16 @@ Modo Eigengravy Deslice para avanzar/retroceder Deslice para cambiar la configuración - Deslice el dedo hacia la izquierda o hacia la derecha para cambiar el brillo o el volumen + Deslice hacia arriba o hacia abajo en el lado izquierdo o derecho para cambiar el brillo o el volumen Toca dos veces para buscar Tocar dos veces para pausar Toque dos veces en el lado derecho o izquierdo para buscar hacia adelante o hacia atrás - Toque en el medio para pausar + Toque dos veces en el medio para hacer una pausa Usar brillo del sistema Restaurar datos desde el backup Hacer copia de los datos (backup) Archivo de backup cargado - Buscar automáticamente nuevas actualizaciones al inicio + Busque automáticamente nuevas actualizaciones después de iniciar la aplicación. Rehacer el proceso de configuración inicial Mostrar episodio de relleno para Anime Reproducir Episodio @@ -306,7 +306,7 @@ Aspecto Características Botón de Al azar - Muestra un botón de reproducción \"al azar\" en la página de inicio + Mostrar el botón aleatorio en la página de inicio cuenta Cerrar sesión Cambiar cuenta @@ -363,8 +363,8 @@ Película Serie Dibujo animado - \@string/anime - \@string/ova + Anime + OVA Torrent Documental Drama asiático @@ -498,19 +498,19 @@ Alfabéticamente (A a Z) Navegador Biblioteca - Parece que esta lista está vacía, intenta cambiar a otra + Esta lista está vacía. Intenta cambiar a otra. Alfabéticamente (Z a A) Seleccionar biblioteca Abrir con - Parece que tu biblioteca está vacía :( -\nInicia sesión en una cuenta de biblioteca o añade series desde tu biblioteca local + Tu biblioteca está vacía :( +\nRegístrate con una cuenta en la biblioteca o agrega los títulos a tu biblioteca local. ¡Se encontró un archivo en modo seguro! \nNo cargar ninguna extensión al inicio hasta que se elimine el archivo. - Jugadora mostrada - buscar cantidad - Jugadora oculta - buscar cantidad + Reproductor visible - buscar cantidad + Reproductor oculto - buscar cantidad Android TV - La cantidad de búsqueda utilizada cuando la jugadora es visible - La cantidad de búsqueda utilizada cuando el jugador está oculto + Tiempo de búsqueda usado (en segundos) cuando el reproductor está visible + Tiempo de búsqueda usado (en segundos) cuando el reproductor está oculto Parar Falló Registro @@ -524,9 +524,9 @@ Actualizando los programas suscritos ¡Episodio %d publicado! Proxy raw.githubusercontent.com - No se ha podido acceder a GitHub, activando el proxy jsdelivr. - Evita el bloqueo de GitHub usando jsdelivr, puede causar que las actualizaciones se retrasen unos días. + No se ha podido acceder a GitHub. Activando el proxy jsDelivr… + Omite el bloqueo de GitHub mediante jsDelivr. Lo que puede provocar que las actualizaciones se retrasen unos días. Revertir ISP Bypasses Calidad de visualización preferida (Datos móviles) - \ No newline at end of file + diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 81853674..2e4b89b3 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -33,4 +33,16 @@ %dساعت %dدقیقه %dدقیقه پوستر اصلی - \ No newline at end of file + تورنت + آزاد + مستند ها + انیمیشن ویدیویی اصلی + حداکثر + فیلم‌ها + سریال های تلویزیونی + درام های آسیایی + انیمه + کارتونها + استفاده شده + برنامه + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 18255b3b..36c1cf1f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,5 +1,5 @@ - + CloudStream Accueil Rechercher @@ -130,7 +130,7 @@ Nouvelle mise à jour trouvée ! \n%s -> %s Épisode spécial - Qualité de visionnage préférée + Qualité de visionnage préférée (WiFi) Taille de la mémoire cache Étendre Non-responsabilité @@ -240,7 +240,7 @@ Continuer à regarder Retirer Plus d\'informations - \@string/home_play + @string/home_play Un VPN peut être nécessaire pour que ce fournisseur fonctionne correctement Ce fournisseur est un torrent, un VPN est recommandé Les métadonnées ne sont pas fournies par le site, le chargement de la vidéo échouera si elles n\'existent pas sur le site. @@ -259,16 +259,16 @@ Mode Eigengravy Ajout d\'une option de vitesse dans le lecteur Balayez pour chercher - Balayez vers la gauche ou la droite pour contrôler le temps dans le lecteur vidéo + Swipez d\'un côté à l\'autre pour contrôler votre position dans une vidéo Balayez pour modifier les paramètres Glissez sur le côté gauche ou droit pour modifier la luminosité ou le volume Lecture automatique du prochain épisode Démarrer l\'épisode suivant lorsque l\'épisode en cours se termine Double tape pour chercher Double tape pour mettre en pause - Player seek amount + Montant recherché par le joueur (Seconde) Tapez deux fois sur le côté droit ou gauche pour aller en avant ou en arrière - Tapez au milieu pour mettre en pause + Tapez deux fois au milieu pour mettre en pause Utiliser la luminosité du système Utiliser la luminosité du système dans le lecteur d\'applications au lieu du sombre Mise à jour de la progression de la veille @@ -385,8 +385,8 @@ 4K Web -30 - \@string/anime - \@string/ova + @string/anime + OAV NSFW %s %s Filtrez par langue préférée @@ -496,9 +496,9 @@ Note (basse à haute) Note (haut à bas) Alphabétique (A à Z) - On dirait que votre bibliothèque est vide :( -\nConnectez-vous à un compte ou ajoutez des séries à votre bibliothèque locale - Il semble que cette liste soit vide, essayez d\'en choisir une autre + Votre bibliothèque est vide :( +\nConnectez-vous sur un compte de bibliothèque ou ajoutez des spectacles à votre bibliothèque locale. + Cette liste est vide. Essayez d\'en changer. Android TV Trié par Alphabétique (Z à A) @@ -508,4 +508,26 @@ Mis à jour (ancien vers nouveau) Fichier du mode sans échec trouvé ! \nAucune extension ne sera chargée au démarrage avant que le fichier ne soit enlevé. - \ No newline at end of file + Arrêter + Revenir à + Enregistrer + Qualité de visionnage préférée (données mobiles) + Abonné à %s + Démarrer + Test des fournisseurs + Réussi + Désabonné de %s + Redémarrer + Abonné + raw.githubusercontent.com Proxy + Contournements de FAI + L\'épisode %d est sorti ! + Échouer + Le montant de la recherche utilisé lorsque le joueur est caché + Updating subscribed shows + Contourne le blocage de GitHub en utilisant jsDelivr. Les mises à jour peuvent être retardées de quelques jours. + La quantité de recherche utilisée lorsque le joueur est visible + Joueur représenté - Montant de la recherche + Joueur caché - Montant de la recherche + Impossible d\'accéder à GitHub. Activation du proxy jsDelivr… + diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index f33a2336..1401b3d8 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -1,5 +1,5 @@ - + रफ्तार (%.2fx) नया अपडेट आया है! @@ -146,4 +146,13 @@ %dh %dm %dm विज्ञापन - \ No newline at end of file + अगला रैंडम + वापस जाओ + पोस्टर + पृष्ठभूमि का पूर्वावलोकन करें + प्रदाता बदलें + Cast: %s + मुख्य पोस्टर + एपिसोड का पोस्टर + %s Ep %d + diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index b623ec5d..754b7a3a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,5 +1,5 @@ - + %d %s | %s %s • %s @@ -119,7 +119,7 @@ Nastavite s gledanjem Makni Više informacija - \@string/home_play + @string/home_play Za ispravan rad ovog pružatelja usluga može biti potreban VPN Ovaj pružatelj usluga je torrent, preporučuje se VPN Stranica ne daje metapodatke, učitavanje videozapisa neće uspjeti ako ne postoji na stranici. @@ -138,16 +138,16 @@ Eigengravy način Dodaje opciju brzine u playeru Prijeđi prstom za traženje - Prijeđi prstom ulijevo ili udesno za kontrolu vremena u videoplayeru + Prijeđite prstom ulijevo ili udesno kako biste kontrolirali player Klizni za promjenu postavki - Prijeđi prstom ulijevo ili udesno za promjenu svjetline ili glasnoće + Kliznite prstom ulijevo ili udesno za promjenu svjetline ili glasnoće Automatski započni sljedeću epizodu Započne sljedeću epizodu kad trenutna završi Dodirni dvaput za traženje Dodirni dvaput za pauziranje - Iznos preskakanja u playeru + Iznos preskakanja u playeru (Sekunde) Dvaput dodirni desnu ili lijevu stranu ekrana za pomicanje naprijed ili natrag - Dodirni u sredinu zaslona za pauziranje + Dodirnite dvaput u sredinu zaslona za pauziranje Koristi svijetlinu u sustavu Koristi svjetlinu sustava u playeru aplikacija umjesto tamnog preklopa Ažuriraj napredak gledanja @@ -173,7 +173,7 @@ Sakrij odabranu kvalitetu videozapisa u rezultatima pretraživanja Automatsko ažuriranje dodataka Prikaži ažuriranja aplikacije - Automatski traži nova ažuriranja pri pokretanju aplikacije + Automatski traži nova ažuriranja nakon pokretanja aplikacije. Ažuriranje na predizdanja Tražite ažuriranja prije izdanja umjesto samo potpunih izdanja Github @@ -238,8 +238,8 @@ Film Serija Crtić - \@string/anime - \@string/ova + Anime + OVA Torrent Dokumentarac Azijska drama @@ -299,7 +299,7 @@ Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Općenito Random gumb - Prikaži random gumb na početnoj stranici + Prikaži gumb za slučajni odabir reprodukcija na početnoj stranici Jezici pružatelja usluga Izgled aplikacije Preferirani mediji @@ -526,9 +526,9 @@ Abecedno (Ž do A) Odaberite biblioteku Otvori sa - Čini se da vam je biblioteka prazna :( -\nPrijavite se na račun biblioteke ili dodajte serije u svoju lokalnu biblioteku - Čini se da je ova lista prazna, pokušajte se prebaciti na drugu + Vaša je biblioteka prazna :( +\nPrijavite se na račun biblioteke ili dodajte emisije u svoju lokalnu biblioteku. + Ova je lista prazna. Pokušajte se prebaciti na jednu drugu listu. Pronađena datoteka sigurnog načina rada! \nNe učitavaju se ekstenzije pri pokretanju dok se datoteka ne ukloni. Prikazan player- iznos preskakanja @@ -543,7 +543,7 @@ Neuspješno Stop Test pružatelja usluga - Ažuriram pretplaćene serije + Ažuriranje pretplaćenih emisija Epizoda %d izbačena! Pretplaćeno Pretplaćen na %s @@ -551,6 +551,7 @@ Vraćanje ISP zaobilaznice raw.githubusercontent.com Proxy - Neuspješno dohvaćanje GitHuba, omogućavanje jsdelivr proxyja. - Zaobilazi blokiranje GitHuba pomoću jsdelivr, može uzrokovati odgode ažuriranja za nekoliko dana. - \ No newline at end of file + Neuspješno dohvaćanje GitHuba. Uključuje se jsdelivr proxy … + Zaobilazi blokiranje GitHuba koristeći jsdelivr. Može odgoditi ažuriranja za nekoliko dana. + Preferirana kvaliteta gledanja (podatkovna mobilna mreža) + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5b42fd6a..46407f76 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -57,7 +57,7 @@ Megnyitás böngészőben Betöltés kihagyása Poster - \@string/result_poster_img_des + Poszter Nézés Befejezve Később megnézés @@ -101,17 +101,17 @@ Körvonal szín Háttér szín Ablak szín - Edge típus + Él típusa Betűtípus Keresés típusok szerint Keresés szolgáltatók szerint - %d Banán a fejlesztőknek + %d Banán adva a fejlesztőknek Nyelvek letöltése Tartsa lenyomva az alapértelmezett érték visszaállításához Betűtípusok importálása %s Eltávolítás Több információ - \@string/home_play + @string/home_play VPN szükséges lehet ehhez a szolgáltató megfelelő működéséhez Ez a szolgáltató torrent, VPN ajánlott Leírás @@ -172,11 +172,11 @@ OVA Egyebek Sorozat - \@string/anime + @string/anime Forráshiba NSFW Rajzfilm - \@string/ova + @string/ova Élőadás NSFW Videó @@ -269,10 +269,231 @@ Forrás Bevezető intro átugrása Ne mutasd újra - Az %d epizód ekkor jelenik meg: + A(z) %d epizód ekkor jelenik meg: Szüneteltetve Elvetve Minőségi jelzés Szinkroncímke Alcímke - \ No newline at end of file + Műveletek + Random gomb + DNS HTTPS-en keresztül + Böngésző + Android TV + kézmozdulatok + frissítés kihagyása + Alkalmazásfrissítések + Szolgáltatók + Funkciók + Előnyben részesített videóminőség (mobilinternet) + Videolejátszó cím max karakterek + Nem sikerült elérni a GitHubot, a jsdelivr proxy engedélyezése. + Bővítmények + Általános + Felirat kódolása + Elsődleges szín + Alkalmazástéma + Szolgáltató teszt + Sikertelen + Problémákat okoz, ha túl magasra van állítva az alacsony tárhellyel rendelkező eszközökön, például az Android TV-n. + Korhatáros tartalmak engedélyezése a támogatott szolgáltatóknál + Elrendezés + raw.githubusercontent.com Proxy + A lejátszó funkciói + Előnyben részesített videóminőség (WiFi-n) + Hasznos az internetszolgáltató blokkjainak megkerüléséhez + Elrendezés + Sikerült + NGINX szerver URL-címe + Szinkronizált/feliratozott animék megjelenítése + Alapértelmezettek + Megjelenít egy gombot a Kezdőlapon, amely egy véletlenszerű filmet vagy TV sorozatot választ a Kezdőlapról + Letöltési útvonal + Gyorsítótár + Szolgáltatók nyelvei + Napló + Könyvtár + internetszolgáltató-kikerülések + Videó buffer méret + Videó buffer hossza + Videolejátszó felbontása + Videó gyorsítótár a lemezen + Biztonsági mentés + Feliratok + Előnyben részesített média + Hivatkozások + Videó és kép gyorsítótár törlése + A jsdelivr használatával a GitHub blokkolása megkerülhető. Néhány nappal késleltetheti a frissítéseket. + Összeomlást okoz, ha túl magasra van állítva a kevés memóriával rendelkező eszközökön, például az Android TV-n. + Betöltés az internetről + Videósávok + Alkalmazás újraindításkor + Az összes bővítményt kikapcsoltuk egy összeomlás miatt, hogy segítsünk megtalálni a problémát okozót. + Szerzők + Támogatott + Alkalmazásfrissítés letöltése… + Frissítve (újabbtól a régebbihez) + Úgy tűnik, a könyvtárad üres :( +\nJelentkezz be egy könyvtár fiókba, vagy adj hozzá műsorokat a helyi könyvtárodhoz + Úgy tűnik, ez a lista üres, próbálj meg egy másikra váltani + Max + 4K + SDR + Fiók létrehozása + pelda.com + Feliratok szinkronizálása + Alkalmazásfrissítés telepítése… + Túl sok szöveg. Nem lehet a vágólapra menteni. + bővítmény + Nincs felirat késleltetés + Leírás + Frissítés + /\?\? + Árnyék + Filmelőzetes + Mit szeretnél látni + Minden %s már letöltött + Először telepítse a bővítményt + Webböngésző + Kinézet + Alkalmazás elrendezés + Szinkronizálás + Nem sikerült bejelentkezni a következőként: %s + Min + 1000 ms + Ajánlott + + Érvénytelen adatok + Link a streamhez + Nem sikerült betölteni: %s + Elkezdődött a(z) %d %s letöltése… + Töltse le az összes bővítményt ebből a tárolóból\? + Biztonságos mód bekapcsolva + Méret + MPV + Alkalmazás nem található + PackageInstaller + Rendezés e szerint: + Feliratkozott a következőre: %s + MenőWeboldalam + DVD + %d plugin frissítve + Értékelés: %s + Előzmények törlése + Nem + Feliratkozva + Használd ezt, ha a feliratok %d ms-sel korábban jelennek meg. + Lejátszó + Felbontás és cím + Előnyben részesített videolejátszó + Értékelés (alacsonyabbtól a magasabbig) + Felirat késleltetése + Blu-ray + Érvénytelen azonosító + Videók megtekintése ezeken a nyelveken + Előző + %d%s letöltve + Batch letöltés + bővítmények + Legacy + Értékelés (magasabbtól az alacsonyig) + Feliratkozott műsorok frissítése + Megjelent a(z) %d epizód! + SD + Nyelvkód (hu) + /%d + Emelt + HD + HLS lejátszási lista + VLC + Nem sikerült telepíteni az alkalmazás új verzióját + %s hitelesítve + Körvonal + Betöltés fájlból + HDR + Az alkalmazás megjelenésének módosítása, hogy az megfeleljen az eszközödnek + Összeomlás jelentése + Nyilvános lista + Állapot + Összefoglaló + %d / 10 + Megnyitás a következővel + Minden felirat nagybetűs + Intro + Leiratkozott a következőről: %s + Bloat eltávolítása a feliratokról + Szűrés előnyben részesített médianyelv szerint + Biztos vagy benne, hogy ki akarsz lépni\? + Rendezés + Visszaállít + Érvénytelen URL + Zárt feliratok eltávolítása a feliratokból + 18+ + Ez az összes tároló bővítményt is törli + A CloudStream alapértelmezés szerint nem telepített webhelyeket. A webhelyeket a tárolókból kell telepítenie. +\n +\nA Sky UK Limited agyatlan DMCA letiltása miatt 🤮 nem tudjuk az alkalmazásban linkelni az adattár oldalát. +\n +\nCsatlakozz a Discordunkhoz vagy keress online. + Verzió + Megjelölés megtekintettként + Eltávolítás a megnézettek közül + Web + Következő + UHD + Felbontás + Újraindítás + Stop + Nincs letöltve: %d + Hiba + Webhely eltávolítása + hello@vilag.com + Töltse le a használni kívánt webhelyek listáját + Közösségi tárolók megtekintése + %s (Letiltva) + Hangsávok + Összeomlási információk megtekintése + Belső lejátszó + Minden nyelv + %s hozzáadva + Bővítmény törölve + Nyelv + Fiók + Extrák + Tároló törlése + %d letiltva + Igen + Az alkalmazás kilépéskor frissül + Betűrendben (A-tól a Z-ig) + Frissítve (régebbitől az újabbig) + jelszó123 + AzÉnMenőFelhasználónevem + 127.0.0.1 + Fiókváltás + Fiók hozzáadása + Árvíztűrő tükörfúrógép + Letöltött fájl + Támogató + Háttér + Forrás + Lepj meg + Hamarosan… + Kész + Bővítmények + Tároló hozzáadása + Tároló neve + Tárhely URL címe + Bővítmény betöltve + Bővítmény letöltve + Közreműködők + Betűrendben (Z-től az A-ig) + Könyvtár kiválasztása + Biztonságos módú fájl található! +\nNem tölt be semmilyen kiterjesztést indításkor, amíg a fájl el nem lesz távolítva. + Normál + %s betöltve + Beállítás kihagyása + HQ + %d letöltve + Start + diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 84179352..a8c6a197 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,5 +1,5 @@ - + %s Ep %d Pemeran: %s @@ -101,7 +101,7 @@ Lanjutkan Menonton Hapus Info lebih lanjut - \@string/home_play + @string/home_play Sebuah VPN mungkin diperlukan agar provider ini bisa bekerja dengan benar Provider ini adalah sebuah torrent, VPN direkomendasikan Metadata tidak disediakan oleh situs, loading video akan gagal jika tidak ada di situs. @@ -120,14 +120,14 @@ Mode Eigengravy Menambahkan opsi kecepatan di pemutar Geser untuk mengubah waktu - Geser ke kiri atau kanan untuk mengontrol waktu di pemutar video + Geser dari sisi ke sisi untuk mengontrol posisi dalam video Geser untuk mengubah pengaturan - Geser ke sisi kiri atau kanan untuk mengubah pencerahan atau volume + Geser ke atas atau ke bawah di sisi kiri atau kanan untuk mengubah kecerahan atau volume Tekan dua kali untuk mengubah waktu Tekan dua kali untuk menjeda - Jumlah pengubah waktu pemutar + Jumlah pengubah waktu pemutar (Detik) Tekan dua kali di sisi kanan atau kiri untuk mengubah waktu ke depan atau ke belakang - Tekan di tengah untuk menjeda + Tekan dua kali di tengah untuk menjeda Gunakan pencerahan sistem Gunakan pencerahan sistem di pemutar aplikasi dari pada hamparan gelap Update progres tontonan @@ -149,7 +149,7 @@ Tidak mengirim data Tampilkan episode filler untuk anime Tampilkan update aplikasi - Secara otomatis mencari update terbaru saat aplikasi dibuka + Secara otomatis mencari update terbaru setelah aplikasi dibuka. Update ke prarilis Hanya mencari update prarilis daripada rilis penuh Github @@ -209,8 +209,8 @@ Movie Seri Kartun - \@string/anime - \@string/ova + Anime + OVA Torrent Film Dokumenter Drama Asia @@ -243,7 +243,7 @@ Jangan tunjukkan lagi Skip Update ini Update - Kualitas tontonan yang lebih diinginkan + Kualitas tontonan yang lebih diinginkan (WIFI) Karakter maksimal judul pemutar video Resolusi pemutar video Ukuran buffer video @@ -515,7 +515,7 @@ Browser Pilih pustaka Yahh daftar pustaka kamu kosong :( -\nMasuk ke akun pustaka atau tambah perlihatkan ke lokal pustaka kamu +\nMasuk ke akun pustaka atau tambah perlihatkan ke lokal pustaka kamu. Pustaka Urutkan berdasar Urutkan @@ -526,7 +526,7 @@ Abjad (A ke Z) Abjad (Z ke A) Buka dengan - Yahh daftar ini kosong, coba ganti ke yang lain + Yahh daftar ini kosong. Coba ganti ke yang lain. Mode aman file ditemukan! \nTidak memuat ekstensi pada startup sampai berkas dihapus. Sembunyikan Pemutaran - Geser @@ -547,8 +547,9 @@ Berhenti berlangganan di %s Episode %d telah rilis! raw.githubusercontent.com Proksi - Gagal mencapai GitHub, mengaktifkan proksi jsdelivr. - Bypass pemblokiran Github menggunakan JSDeliVR, dapat menyebabkan pembaruan tertunda beberapa hari. + Tidak dapat menjangkau GitHub. Mengaktifkan proksi jsDelivr… + Melewati pemblokiran GitHub menggunakan jsDelivr. Dapat menyebabkan pembaruan tertunda beberapa hari. Bypass ISP Pulihkan - \ No newline at end of file + Nonton dengan kualitas yang di inginkan (Data Seluler) + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d6bdc204..6dca2e3a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,5 +1,5 @@ - + %s Ep %d Cast: %s @@ -108,7 +108,7 @@ Continua a guardare Rimuovi Più info - \@string/home_play + @string/home_play Potrebbe essere necessaria una VPN per far funzionare correttamente questo provider Questo provider è un torrent, si raccomanda una VPN I metadati non sono forniti dal sito, il caricamento del video fallirà se non esiste sul sito. @@ -127,16 +127,16 @@ Modalità Eigengravy Aggiungi opzione velocità nel player Scorri per mandare avanti/indietro - Scorri a sinistra o a destra per controllare il tempo del video + Scorri da un lato all\'altro per controllare la tua posizione in un video Scorri per cambiare le impostazioni - Passa il dito sul lato sinistro o destro per cambiare la luminosità o il volume + Scorri il dito sul lato sinistro o destro per cambiare la luminosità o il volume Riproduci automaticamente l\'episodio successivo Avvia l\'episodio successivo al termine di quello in corso Doppio tocco per andare avanti/indietro Doppio tocco per mettere in pausa Tocca due volte il lato destro o sinistro dello schermo per mandare avanti o indietro il video - Tocca due volte il centro dello schermo per mettere in pausa il video - Player seek + Tocca due volte al centro per mettere in pausa + Intervallo di ricerca lettore (secondi) Utilizzare la luminosità del sistema Utilizzare la luminosità del sistema al posto di una sovrapposizione scura @@ -162,7 +162,7 @@ Nascondi la qualità video selezionata dai risultati di ricerca Aggiorna automaticamente i plugin Mostra gli aggiornamenti dell\'app - Cerca automaticamente nuovi aggiornamenti all\'avvio + Cerca automaticamente nuovi aggiornamenti dopo aver avviato l\'app. Aggiorna alle prerelease Cerca per aggiornamenti alle prerelease invice di cercare solo le release complete GitHub @@ -265,7 +265,7 @@ Non mostrare di nuovo Salta questo aggiornamento Aggiorna - Risoluzione preferita + Qualità di visualizzazione preferita (WiFi) Limita i caratteri del titolo nel player Risoluzione video player Dimensione cache video @@ -519,13 +519,13 @@ Aggiornato (Da vecchio a nuovo) Alfabetico (A - Z) Alfabetico (Z - A) - Sembra che la tua libreria sia vuota :( -\nAccedi a un account di libreria o aggiungi degli show alla tua libreria locale + La tua libreria è vuota :( +\nAccedi a un account di libreria o aggiungi degli show alla tua libreria locale. Seleziona libreria Apri con Libreria Ordina - Sembra che questa lista sia vuota, prova a passare a un\'altra + Questo elenco è vuoto. Prova a passare a un altro. File \"safe mode\" trovato! \nAll\'avvio non sarà caricata alcuna estensione finchè il file non verrà rimosso. Quantità di ricerca usata quando il player è nascosto @@ -544,10 +544,11 @@ Disiscritto da %s Iscritto Iscritto a %s - Impossibile contattare GitHub, abilitazione proxy jsdelivr avviata. - Bypassa il blocco di GitHub utilizzando jsdelivr, potrebbe causare un ritardo di alcuni giorni. + Impossibile raggiungere GitHub. Attivazione proxy jsDelivr… + Aggira il blocco di GitHub usando jsDelivr. Potrebbe causare un ritardo degli aggiornamenti di alcuni giorni. Baypass ISP Ripristina Aggiornando shows a cui sei iscritto L\'episodio %d è stato rilasciato! - \ No newline at end of file + Qualità di visualizzazione preferita (Dati mobili) + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 11cf77ce..50e96c7c 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -116,7 +116,7 @@ כתוביות כרומקאסט ממשיך ניגון בנגן מינימלי מעל ישומים אחרים כתוביות - \@string/home_play + @string/home_play היסטוריה מורשת לא @@ -164,8 +164,8 @@ משומש סדרת טלוויזיה סדרות/סרטים מצוירים - \@string/אנימה - \@string/אנימציית וידאו מקורית + @string/anime + @string/ova דרמה אסייתית כרומקאסט את הפרק כרומקאסט את המראה @@ -506,4 +506,4 @@ אלפביתי (ת\' עד א\') פתח עם נראה שהרשימה הזו ריקה, נסו לעבור לרשימה אחרת - \ No newline at end of file + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a3d1d434..5fcc14da 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -182,4 +182,23 @@ アップデートを確認 作品名 アプリのアップデートをインストール中… - \ No newline at end of file + リポジトリURL + 字幕ディレイ + 登録済み + ストリームへのリンク + 字幕遅延なし + リポジトリ削除 + このリポジトリからすべてのプラグインをダウンロードしますか? + 視聴状態を設定 + 字幕を同期 + リポジトリを追加 + リポジトリ名 + CloudStreamはデフォルトでサイトがインストールされていません。リポジトリからサイトをインストールする必要があります。 +\n +\nSky UK Limitedによる無脳なDMCAテイクダウンのため🤮、アプリ内でリポジトリサイトをリンクすることができません。 +\n +\n私たちのDiscordに参加するか、オンラインで検索してください。 + バックグラウンドをプレビュー + ライブストリームの再生 + プロバイダーの変更 + diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 242653be..399aafb1 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -125,4 +125,11 @@ ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭವಾಗಿದೆ ಡೌನ್‌ಲೋಡ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ ಮುಂದಿನ ರಾಂಡಮ್ - \ No newline at end of file + ಮುಂದಕ್ಕೆ ಹೋಗಲು ಸ್ವೈಪ್ ಮಾಡಿ + ವೀಡಿಯೊದಲ್ಲಿ ನಿಮ್ಮ ಸ್ಥಾನವನ್ನು ನಿಯಂತ್ರಿಸಲು ಅಕ್ಕಪಕ್ಕಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ + ಮುಂದಿನ ಸಂಚಿಕೆಯನ್ನು ಆಟೋ ಪ್ಲೇ ಮಾಡಿ + ಮುಂದೂಡಲು ಅಥವಾ ಇಂದೂಡಲು ಎರಡು ಬಾರಿ ಟ್ಯಾಪ್ ಮಾಡಿ + Brightness ಅಥವಾ volume ಬದಲಾಯಿಸಲು ಎಡ ಅಥವಾ ಬಲಭಾಗದಲ್ಲಿ ಮೇಲಕ್ಕೆ ಅಥವಾ ಕೆಳಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ + ಈಗಿನ ಎಪಿಸೋಡ್ ಮುಗಿದಾಗ ಮುಂದಿನ ಎಪಿಸೋಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ + ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸ್ವೈಪ್ ಮಾಡಿ + diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100644 index 00000000..74c05d07 --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,532 @@ + + + 출연: %s + 에피소드 %d이(가) 공개됩니다 + 포스터 + 에피소드 포스터 + 메인 포스터 + 다음 랜덤 + 뒤로가기 + 소스 변경 + 미리보기 배경 + 속도 (%.2fx) + 평점: %.1f + 새로운 업데이트! +\n%s -> %s + %d분 + CloudStream + CloudStream에서 재생 + + 다운로드 + 설정 + 검색… + 검색 %s… + 데이터 없음 + 기타 옵션 + 다음 에피소드 + 장르 + 공유 + 브라우저에서 열기 + 브라우저 + 로딩 건너뛰기 + 로딩중… + 시청 + 보류 + 시청 완료 + 포기 + 시청 예정 + 없음 + 다시보기 + 영화 재생 + 예고편 재생 + 토렌트 재생 + 소스 + 자막 + 연결 재시도… + 뒤로가기 + 에피소드 재생 + 다운로드 + 파일 재생 + 계속 다운로드 + 다운로드 일시정지 + 자동 오류 보고 비활성화 + 상세 정보 + 닫기 + 재생 + 정보 + 시청 상태 설정 + 저장 + 재생 속도 + 글자 색깔 + 외곽선 색깔 + 배경 색깔 + 창 색깔 + 가장자리 타입 + 자막 높이 + 폰트 + 폰트 크기 + 다운로드됨 + 다운로드중 + 다운로드 일시정지 + 다운로드 시작 + 다운로드 실패 + 다운로드 취소 + 다운로드 완료 + 업데이트 시작 + 링크 로딩 오류 + 내부 저장공간 + 자동 선택 언어 + 다운로드 언어 + 자막 언어 + 길게 눌러 기본값으로 재설정 + 다음에서 폰트 가져오기 %s + 계속 시청 + 제거 + -30 + %s 에피소드 %d + 포스터 + %d일 %d시간 %d분 + %d시간 %d분 + %d분 + 검색 + 파일 삭제 + 제거 + 업데이트 및 백업 + 백업 + 더빙 + 자막 + 취소 + 북마크 필터 + 북마크 + 제거 + 적용 + 복사 + 닫기 + 자막 설정 + 소스로 검색 + 로그 + 이 소스가 제대로 작동하려면 VPN이 필요할 수 있습니다 + 이 소스는 토렌트이므로 VPN을 사용하는 것이 좋습니다 + 메타데이터는 사이트별로 제공하지 않으며, 메타데이터가 사이트에 없으면 동영상 로딩이 실패합니다. + 설명 + 플레이어 자막 설정 + Chromecast 자막 + Chromecast 자막 설정 + 배속 모드 + 플레이어에 속도 옵션을 추가합니다 + 스와이프하여 탐색 + 좌우로 스와이프하여 동영상 위치 제어하기 + 스와이프하여 설정 변경 + 왼쪽 또는 오른쪽으로 밀어서 밝기 또는 볼륨을 변경합니다 + 다음 에피소드 자동 재생 + 현재 에피소드가 끝나면 다음 에피소드를 시작합니다 + 두 번 탭하여 탐색 + 두 번 탭하여 일시정지 + 플레이어 탐색 시간 (초) + 가운데를 두 번 탭하여 일시중지 + 시스템 밝기 사용 + 어두운 오버레이 대신 앱 플레이어의 시스템 밝기를 사용합니다 + 시청 진행 상황 업데이트 + 현재 에피소드 진행 상황을 자동으로 동기화합니다 + 백업에서 데이터 복원 + 데이터 백업 + 파일에서 데이터를 복원하지 못했습니다 %s + 저장된 데이터 + 저장소 권한이 없습니다. 다시 시도해 주세요. + 백업 중 오류 %s + 검색 + 라이브러리 + 계정 + 소스별로 구분된 검색 결과를 제공합니다 + 예고편 보기 + Kitsu에서 포스터 보기 + 검색 결과에서 선택한 동영상 품질 숨기기 + 플러그인 자동 다운로드 + 플러그인 자동 업데이트 + 추가된 저장소에서 아직 설치되지 않은 모든 플러그인을 자동으로 설치합니다. + 앱 업데이트 표시 + 앱을 시작한 후 새 업데이트를 자동으로 검색합니다. + 미리보기로 업데이트 + 정식 릴리즈 대신 미리보기 업데이트만 검색합니다 + 일부 휴대폰은 새 패키지 설치 프로그램을 지원하지 않습니다. 업데이트가 설치되지 않으면 레거시 옵션을 사용해 보세요. + 같은 개발자가 만든 라이트 노벨 앱 + 같은 개발자가 만든 애니메이션 앱 + Discord에 참여하기 + 개발자에게 바나나 주기 + 바나나 줌 + 앱 언어 + 링크를 찾을 수 없음 + 클립보드에 링크 복사됨 + 에피소드 재생 + 기본값으로 재설정 + 죄송합니다, 애플리케이션이 충돌했습니다. 버그 보고서가 익명으로 개발자에게 전송됩니다 + 에피소드 + %d-%d + 진행중 + 시청 완료 + 상태 + + 평점 + +30 + %s가 영구 삭제됩니다 +\n정말 삭제하시겠습니까\? + %d분 +\n남음 + 사이트 + 시간 + 개요 + 대기중 + 자막 없음 + 기본 + 남음 + 사용됨 + + 영화 + TV 시리즈 + 카툰 + 애니 + 토렌트 + Chromecast 미러링 + 앱에서 재생 + %s에서 재생 + 브라우저에서 재생 + 링크 복사 + 자동 다운로드 + 다운로드 미러 + 링크 새로고침 + 자막 다운로드 + 화질 탭 + 더빙 탭 + 자막 탭 + 제목 + 업데이트 확인 + 잠금 + 크기 조정 + 소스 + 오프닝 건너뛰기 + 이 업데이트 건너뛰기 + 선호하는 화질 (WiFi) + 선호하는 화질 (모바일 데이터) + 동영상 플레이어 해상도 + 동영상 버퍼 크기 + 동영상 및 이미지 캐시 지우기 + DNS over HTTPS + GitHub에 연결할 수 없습니다. jsDelivr 프록시를 켜는 중… + jsDelivr을 사용하여 GitHub 차단을 우회합니다. 업데이트가 며칠 지연될 수 있습니다. + 복제 사이트 + 사이트 삭제 + 다른 URL을 사용하여 기존 사이트의 복제본을 추가합니다 + 다운로드 경로 + 캐시 + Android TV + 제스처 + 자막 + 레이아웃 + 기본 + 일반 + 플레이어 기능 + 기능 + 소스 언어 + 앱 레이아웃 + 선호하는 미디어 + 지원되는 공급업체에서 19금 사용 설정 + 자막 인코딩 + 소스 + 소스 테스트 + 레이아웃 + 자동 + TV 레이아웃 + 휴대폰 레이아웃 + 에뮬레이터 레이아웃 + 기본 색상 + 앱 테마 + 포스터 제목 위치 + 이메일 + IP + 로그인 + 계정 전환 + 계정 추가 + 계정 생성 + 트래커 추가 + 추가 %s + 동기화 + %d / 10 + /\?\? + /%d + %s 인증됨 + 다음에 로그인할 수 없음 %s + 없음 + 보통 + 전부 + 최대 + 최소 + 윤곽선 + 그림자 + 자막 동기화 + 1000 ms + 자막 딜레이 + 자막이 %d ms 너무 일찍 표시되는 경우, 이 옵션을 사용하세요 + 주연 + 조연 + 출연 + 소스 + 랜덤 + 포스터 이미지 + 제목 + Cam + Cam + Blu-ray + WP + DVD + 4K + SD + 해상도 및 제목 + 해상도 + 잘못된 ID + 잘못된 데이터 + 잘못된 URL + 오류 + 자막에서 선택 캡션 제거 + 선호하는 미디어 언어로 필터링 + 예고편 + 다음 + 이전 + 설정 건너뛰기 + 기기에 맞게 앱 모양 변경하기 + 확장 기능 + 버전 + 18+ + 다운로드 시작 %d %s… + 다운로드 %d %s + 모든 %s가 이미 다운로드되었습니다 + 일괄 다운로드 + 플러그인 + 플러그인 + 이렇게 하면 모든 저장소의 플러그인도 삭제됩니다 + 저장소 삭제 + 사용하려는 사이트 목록 다운로드 + 다운로드됨: %d + CloudStream에는 기본적으로 설치된 사이트가 없습니다. 저장소에서 사이트를 설치해야 합니다. +\n +\nSky UK Limited의 무분별한 DMCA 조치로 인해 🤮 앱에서 저장소 사이트를 연결할 수 없습니다. +\n +\nDiscord에 가입하거나 온라인에서 검색하세요. + 커뮤니티 저장소 보기 + 공개 목록 + 모든 자막 대문자화 + 이 저장소에서 모든 플러그인을 다운로드하시겠습니까\? + %s (사용불가) + 저장소 추가 + 저장소 이름 + 저장소 URL + 플러그인이 로드됨 + 플러그인 다운로드 + 플러그인 삭제됨 + 로드할 수 없음 %s + 오디오 트랙 + 동영상 트랙 + 재시작 시 적용 + 안전 모드 켜기 + 충돌로 인해 문제를 일으키는 확장 프로그램을 찾는 데 도움이 되도록 모든 확장 프로그램이 사용 중지되었습니다. + 충돌 정보 보기 + 언어 + 에피소드 %d 공개! + Picture-in-picture + 플레이어 크기 조정 버튼 + 다른 앱 위에 있는 미니어처 플레이어에서 재생을 계속합니다 + 충돌에 관한 데이터만 전송 + 검은색 테두리 제거 + 오른쪽 또는 왼쪽을 두 번 탭하여 앞뒤로 탐색하기 + 자막 + 로드된 백업 파일 + 정보 + 고급 검색 + 데이터를 보내지 않음 + 설정 프로세스 다시 실행 + APK 인스톨러 + Github + 소스 오류 + 이 소스는 크롬캐스트를 지원하지 않습니다 + 시즌 없음 + 시즌 + 아시아 드라마 + 시즌 + 삭제 + %s %d%s + 파일 삭제 + 일시정지 + 에피소드 + 에피소드 + %d %s + 에피소드를 찾을 수 없음 + 시작 + 실패 + 평점 + 평점: %s + 평점 (높음에서 낮음으로) + 평점 (낮음에서 높음으로) + 19금 + 다큐멘터리 + 라이브 방송 + 19금 + 기타 + OVA + 아시아 드라마 + 라이브 방송 + 동영상 + 포스터의 UI 요소 전환 + 영화 + 카툰 + 토렌트 + 다큐멘터리 + 렌더러 오류 + 시리즈 + 애니 + OVA + 원격 오류 + 다운로드 오류, 저장 권한 확인 + Chromecast 에피소드 + 예기치 않은 플레이어 오류 + 다시 표시하지 않음 + 업데이트를 찾을 수 없음 + 업데이트 + raw.githubusercontent.com 프록시 + 동영상 버퍼 길이 + 저장소에 동영상 캐시 + Android TV와 같이 메모리가 부족한 디바이스에서 너무 높게 설정하면 충돌이 발생할 수 있습니다. + 화면 크기에 맞춤 + Android TV와 같이 저장 공간이 부족한 기기에서 너무 높게 설정하면 문제가 발생할 수 있습니다. + NGINX 서버 URL + 확대 + 링크 + ISP 차단을 우회하는 데 유용합니다 + 화면 맞춤 + 더빙/자막 애니메이션 표시 + 거부 + ISP 우회 + 앱 업데이트 + 확장 기능 + 로그아웃 + 사이트 URL + 비밀번호 + 계정 + 사용자 이름 + 언어 코드 (ko) + 사이트 이름 + %s %s + 자막이 %d ms 너무 늦게 표시되는 경우, 사용하세요 + 자막 지연 없음 + 다운로드한 파일 + 파일에서 불러오기 + 추천 + 인터넷에서 불러오기 + 로드됨 %s + 공개 예정… + Cam + HD + TS + 플레이어 + HDR + TC + 충돌 보고 + 완료 + 다운로드되지 않음: %d + HQ + UHD + 이 언어로 된 동영상 보기 + SDR + Web + 비활성화됨: %d + 사이즈 + 제작자 + 무엇을 보고 싶으신가요 + 상태 + %d 플러그인 업데이트 + 재시작 + 정지 + 소개 + 유형 + 먼저 확장 프로그램을 설치하세요 + 웹 브라우저 + 앱을 찾을 수 없음 + 모든 언어 + 건너뛰기 %s + 오프닝 + 엔딩 + 혼합 엔딩 + 혼합 오프닝 + 크레딧 + 소개 + 기록 삭제 + 기록 + 오프닝/엔딩 시 건너뛰기 팝업 표시 + 텍스트가 너무 많습니다. 클립보드에 저장할 수 없습니다. + 시청에서 삭제 + 정말 종료하시겠습니까\? + + 아니요 + 앱 업데이트 다운로드 중… + 앱 업데이트 설치 중… + 새 버전의 앱을 설치할 수 없습니다 + 레거시 + 패키지 인스톨러 + 앱 종료시 업데이트됩니다 + 정렬 기준 + 정렬 + 업데이트됨 (새로움에서 오래된 순) + 업데이트 (오래됨에서 새로운 순) + 알파벳순 (A에서 Z) + 알파벳순 (Z에서 A) + 다음으로 열기 + 라이브러리가 비어 있습니다 :( +\n라이브러리 계정으로 로그인하거나 로컬 라이브러리에 프로그램을 추가하세요. + 안전 모드 파일을 찾았습니다! +\n파일이 제거될 때까지 시작 시 확장 프로그램을 로드하지 않습니다. + HLS 재생목록 + 내부 플레이어 + MPV + 선호하는 동영상 플레이어 + VLC + 라이브러리 선택 + 웹 동영상 캐스트 + 이 목록이 비어 있습니다. 다른 목록으로 전환해 보세요. + 필러 + 라이브 스트리밍 재생 + 스트림 + 유형을 사용하여 검색 + 개발자에게 %d 바나나 줌 + 바나나를 주지 않음 + 상세 정보 + @string/home_play + 플롯을 찾을 수 없음 + 설명을 찾을 수 없음 + Logcat 🐈 표시 + 애니메이션용 필러 에피소드 표시 + 통과 + 계속 + 동영상 플레이어 제목 최대 글자 수 + 표시된 플레이어 - 빨리 감기 및 되감기 초 + 플레이어가 보일 때 사용되는 탐색량 + 플레이어 숨김 - 빨리 감기 및 되감기 초 + 플레이어가 숨겨져 있을 때 사용되는 탐색량 + 동작 + 외형 + 랜덤 버튼 + 홈페이지에 랜덤 버튼 표시 + 포스터 아래에 제목을 이동 + 내려감 + 올라감 + 다람쥐 헌 쳇바퀴에 타고파 + 자막에서 부풀림 제거 + 엑스트라 + 스트림 링크 + 트랙 + 레퍼러 + 요약 + 시청함으로 표시 + 되돌리기 + 구독한 프로그램 업데이트 + 구독중 + 구독 %s + 구독 취소 %s + diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml new file mode 100644 index 00000000..ddd39942 --- /dev/null +++ b/app/src/main/res/values-lv/strings.xml @@ -0,0 +1,532 @@ + + + Plakāts + %s Ep %d + Cast: %s + Plakāts + Epizodes plakāts + Galvenais plakāts + Nākamais random + Iet atpakaļ + Nomainīt dvēju + Apskatīt background + Ātrums (%.2fx) + Lidzīgi: %.1f + Jauns atjauninājums atrasts! +\n%s -> %s + %d galvenais + Claudstream + Atskaņo ar cloudstream + Mājas + Meklēt + Meklēt %s… + Nav datu + Vairāk opcijas + Nākamā epizode + Internets + Izlaist ladešanos + Lādējas… + Skaties + Aizturēts + Pabeigts + Atmests + Plāno skatīties + Neviena + Atkārtoti skatities + Palaist Filmu + Palaist Trelleri + Palaist Livestreamu + Skatities Torrentu + Devēji + Subtitri + Atkārtot pieslēgumu… + Iet atpakaļ + Palaist epizodi + Ieladēt + Lādēšana pauzēta + Lādēšana sakās + Ielādēt neizdevās + Ielādēšana atcelta + Pabeidza ieladēt + Atjauninājums sakās + Skaties + Kļūda padejot linkus + Iekšējā atmiņa + Dub + Dzēst failu + Palaist failu + Atsākt ielādi + Pauzēt ielādi + Atslēgt automātisko kļūdu ziņošanu + Vairāk informācijas + Slēpt + Atskaņot + Informācija + Filtra bookmarks + Bookmarks + Noņemt + Ieliec skatīšanās statusu + Izmantot + Atcelt + Kopēt + Saglabāt + Atskaņošanas ātrums + Subtitru iestādijumi + Apkārt krāsa + Backgrounds krāsa + Līga krāsa + Stūra tips + Fonts + Fonta lielums + Meklēt izmantojot devējus + Meklēt izmantojot tipus + %d Banāni iedoti veidotājiem + Episode %d būs izlaista + Filtrs + Ieladētas + Meklēt… + Settingi + Žanrs + Dalities + Atvērt internetā + Ieladēts + Lādējas + Aizvērt + Sub + Nav banāni iedoti + Subtitru augstums + Iztīrīt + Teksta krāsa + Automātiski-iestādīt valodu + %dh %dm + %dm + %dd %dh %dm + Ielādēt valodas + Subtitru valoda + Tūri lai restartētu uz sākumu + Importēt fontus ieliekot iekšā %s + Turpini skatīties + Noņemt + Vairāk informācijas + @string/home_play + VPNs varētu būt vajadzīgs lai šis devējs strādātu pareizi + Šis devējs ir Torrents vpn ir rekomendēts + Dati nav doti no saites, video lādēšanas neizdosies ja neiksestē saitē. + Apraksts + Nav apraksts atrasts + Apraksts nav atrasts + Radīt Logcat 🐈 + Log + Bilde bildē + Turpina spēlēt mazā lodziņā virs aplikācijām + Players izmēra poga + Noņemt melnās malas + Subtitri + Players subtitru iestādijumi + Chromecast subtitri + Chromecast subtitru iestāfijumi + Eigengravy Mode + Pievieno atskaņošanas ātrumu playerim + Novelc lai paradītu + Novelc no māla lidz malai lai pozicionētu video + Novēlu lai mainītu iestādījums + Novēlu uz augšu vai apakšu pa labi un pa kreisi lai nomainītu gaišumu un skaņu + Automātiski nākamo epizodi + Sākt nākamo epizodi kad šis bridzas + Divreiz uzpied lai paslēptu + Divreiz uzpied lai pauzētu + Players meklēšanas daudzums (sekundes) + Uzpied divreiz pa labi vai kreisi lai palaistu atpakaļ vai uz priekšu + Uzpied divreiz vidū lai pauzētu + Lietot sistēmas gaišums + Lietot sistēmas gaišumu aplikācijas playerī nevis tumšunu + Atjaunināt skatīšanos progresu + Automātiski sync savu pašreizējo epizodes progresu + Atgūt datus no backupa + Saglabāt datus + Ieladētie atgūtie faili + Neizdevās restaurēt datus no faila %s + Dati saglabāti + Krātuves atļaujas nav. Lūdzu mēģiniet vēlreiz. + Kļūda meiģinot saglabāt %s + Meklēt + Library + Konts + Atjaunināt un saglabāt + Informācija + Advancēta meklēšana + Dod tev meklēšanas rezultātus citus no devēja + Tikai sūtīt datus no kļudām + Nesutīt datus + Radīt fillera epizodi priekš animē + Radīt feel + Radīt plakātu no kitsu + Slēpt izvēlētos video kvalitāti meklēšanas rezultātus + Automātiski papildinājumu atjauninājumi + Automātiski ielādēt papildinājumus + Automātiski instalēt visus neinstalētos papildinājumus no glabātavas. + Radīt aplikācijas atjauninājumus + Automātiski meklēt jaunus atjauninājumus kad palaiž aplikāciju. + Atsākt uzstādīšanas procesu + Atjaunināt uz priekšizlaišanu + Dažu telefoni nepieņem jauno aplikāciju instaletāju. Meiģiniet veco opciju ja nevar stjaunināt. + Noveles aplikācija no šiem izstrādātājiem + Anime aplikāciju no tiem pašiem izstradatājiem + Ienāc discordā + Iedot banānu izstrādātājiem + Iedotie banāni + Aplikācijas valoda + Šim devējam nav Chromecast pieņemšana + Nav linku strastu + Links kopēts cliobordā + Restartēt uz parasto value + Sezona + %s %d%s + Nav sezonas + Epizode + Epizodes + %d-%d + %d %s + S + E + Epizodes netika atrastas + Dzēsti faili + Dzēst + Pauzēt + Sākt + Neizdevās + Nokārtojāt + Atsākt + -30 + +30 + Šis pilnibā dzesīs %s +\nEsat parliecināts\? + %dm +\natlikušas + Pabeigts + Statuss + gads + Reitings + Ilgums + Saite + Synopsis + Gaida + Lietotie + Aplikācija + Filmas + Seriāli + Animācija + Anime + Torrenti + Dokumentārija + OVA + Āzijas Drāma + Livestreami + NSFW + Citi + Filmas + Sērijas + Animācija + Anime + OVA + Torrenti + Documentarijas + Āzijas drāma + Livestreami + NSFW + Video + Devēja kļūda + Remote kļūda + Negaidīta atskaņotāja kļūda + Ielādēšanas kļūda, pārbaudi atmiņas atļauju + Chromecast epizode + Chromecast morror + Palaist aplikācijā + Atskaņot uekšā %s + Atskaņot internetā + Kopēt linku + Automātiski ielādēt + Ielādēt spoguli + Pārlādēt saites + Ielādēt subtitrus + Kvalitāte + Dub lable + Subtirti + Nosaukums + Render kļūda + Pārbaudīt atjauninājumus + Slēgt + Mainīt lielumu + Devējs + Izlaist OP + Nerādīt atkal + Izlaist šo atjauninājumu + Atjauninājums + Izvēlētā skatīšanās kvalitāte (WiFi) + Video players nosaukuma maksimālie burti + Video atskaņotāja kvalitāte + Video buffer izmērs + Video buffering garums + Video atkritne diskā + Atskaņotājs rāda - seek smount + Meklēšanas summa, kas tiek izmantota, kad spēlētājs ir redzams + Atskaņotājs paslēpts — meklēšanas summa + Izraisa avārijas, ja ierīcēs ar mazu atmiņu ir iestatīta pārāk augsta vērtība, piemēram, Android TV. + Izdevīgs lai izlaistu ISO aizturi + raw.githubusercontent.com Proxy + Apiet GitHub bloķēšanu, izmantojot jsdelivr. Tādēļ atjauninājumi var aizkavēties par dažām dienām. + Klonēt saiti + Noņemt saiti + Pievienojiet esošas vietnes klonu ar citu URL + Ielādēšanas ceļš + NGINX servera URL + Radīt Dubbed/Subbed Anime + Ietilpt ekranā + Atruna + ISP Izlaists + Links + Aplikācijas atjauninājumus + Dublējums + Papildinājumi + Akcijas + Atkritne + Android TV + Žesti + Atskaņošanas funkcijas + Subtitri + Iskats + Parasts + Izskats + Funkcijas + Ģenerāls + Randomā poga + Rādīt izlases pogu mājaslapā + Devēja valodas + Aplikācijas izskats + Izvēlētā media + Iespējojiet NSFW atbalstītajiem pakalpojumu sniedzējiem + Subtitru kodējums + Devēji + Devēju tests + Izskats + Automātiski + Televizora izskats + Telefona izskats + Emulators izskats + Plakāta virsraksta lokācija + Parole123 + MansStilīgaisNosaukums + Sveiki@pasaule.com + 127.0.0.1 + ManaForšāSaite + Piemērs.com + Valodas kods (lv) + Konts + Iziet + Ieiet + Mainīt kontu + Pievienot kontu + Veidot kontu + Pievienot izsekošanu + Pievienot %s + Sync + Lidzīgi + %d / 10 + /\?\? + /%d + %s autentificēts + Nevarēja ieiet %s + Nekas + Normāls + Viss + Maksimālais + Minimālais + Apkartlinija + Depresija + Ēna + Paugstināts + Sync subs + 1000 ms + Subtitru pslēninājums + Izmantojiet šo, ja subtitri tiek rādīti %d ms pārāk agri + Nav subtitru kavēšanās + Ātrā brūnā lapsa lec pāri slinkajam sunim + Ielādeja %s + Lādēt no faila + Aplikācijas theme + Ielādēt no interneta + Ieladētie faili + Galvenais + Atbalsta + Aizmugure + Devējs + Randoms + Camera + Kamera + HQ + HD + TS + TC + Blu-ray + WP + DVD + 4K + SD + UHD + HDR + Plakāta bilde + Atskaņotājs + Rezolūcija un tituls + Nederīgs ID + Nederīgi dati + Nederīgs URL + Kļūda + Noņemiet slēgtos parakstus no subtitriem + Noņemiet uzpūšanos no subtitriem + Filtrējiet pēc vēlamās multivides valodas + Ekstras + Treileris + Links uz tstresmu + Referents + Nākamais + Skatieties videoklipus šajās valodās + Iepriekšējais + Izlaist uzstādīšanu + Mainiet lietotnes izskatu, lai tā atbilstu savai ierīcei + Avārijas ziņošana + Ko tu vēlies redzēt + Pabeigts + Papildinājumi + Pievienot repozitoriju + Repository URL + Plugin ieladēti + Plugins dzēsts + Nevarēja ielādēt %s + 18+ + Sākta %d %s lejupielāde… + Lejuplādēts %d %s + Pakešu lejupielāde + Plugins + Plugins + Tādējādi tiks izdzēsti arī visi repozitorija pluginus + Dzēst repozitoriju + Lejupielādēt: %d + Atspējots: %d + Nav lejupielādēts: %d + Atjaunināti %d spraudņi + Skatīt kopienas krātuves + Publisks saraksts + Visi subtitri ar lielajiem burtiem + Vai lejupielādēt visus spraudņus no šīs krātuves\? + %s (atspējots) + Tracks + Audio dziesmas + Video tracks + Likt uz restartēšanu + Restartēt + Pārtraukt + Drošais režīms ieslēgts + Visi paplašinājumi tika izslēgti avārijas dēļ, lai palīdzētu jums atrast to, kas rada problēmas. + Skatīt avārijas informāciju + Rating: %s + Apraksts + Versija + Status + Izmērs + Autors + Atbalstīts + Valodas + HLS atskaņošanas saraksts + Vēlamais video atskaņotājs + Iekšējais atskaņotājs + MPV + Web video apraide + Aplikācijs nav atrasta + Visas valodas + Beigas + Kopsavilkums + Jauktas beigas + Jauktais sākums + Kredīts + Notīrīt vēsturi + Vēsture + Rādīt izlaižamos uznirstošos logus atvēršanai/beigšanai + Pārāk daudz teksta. Nevar saglabāt starpliktuvē. + + + Notiek lietotnes atjauninājuma lejupielāde… + Notiek lietotnes atjauninājuma instalēšana… + Nevarēja instalēt jauno lietotnes versiju + Mantojums + Insteletājs + Lietotne tiks atjaunināta pēc iziešanas + Kārtot pēc + Kārtot + Vērtējums (no augsta līdz zemam) + Atjaunināts (no jauna uz veco) + Atjaunināts (no vecā uz jauno) + Alfabētiskā secībā (A līdz Z) + Alfabētiskā secībā (Z līdz A) + Atlasiet Bibliotēka + Atvērt ar + Šķiet, ka jūsu bibliotēka ir tukša :( +\nPiesakieties bibliotēkas kontā vai pievienojiet pārraides savai vietējai bibliotēkai. + Atgriest + Anulēts %s abonements + %d sērija izlaista! + Meklēt pirmsizlaišanas atjauninājumus nevis tikai pilnos atjauninājumus + Apk insteletājs + Github + Nav subtitru + Atskaņot epizodi + Piedodiet, bet aplikācijā bija kļūda. Anonīms kļūdas ziņojums tika aizsūtīts izstrādātājiem + Iet + Bezmaksas + Ieslēgt elementus uz plakātiem + Parastais + Nav atjauninājumi atrasti + Izdzēst video un bildes atkritne + Izvēlētā skatīšanās kvalitāte (Mobilie Dati) + Rada problēmas, ja ierīcēs ar maz vietas krātuvē ir iestatīts pārāk augsts, piemēram, Android TV. + Meklēšanas summa, kas tiek izmantota, kad spēlētājs ir paslēpts + DNS virs HTTPS + Tuvināt + Neizdevās sasniegt GitHub. Pieslēdzas starpniekserverim caur jsDelivr… + Iztiept + Galvenā krāsa + %s %s + Likt nosaukumu zem plakāta + Izmantojiet šo, ja subtitri tiek rādīti %d ms pārāk vēlu + Rekomendācijas + Drīzumā… + Kamera + Virsraksts + Web + SDR + Rezulūcija + CloudStream pēc noklusējuma nav instalēta neviena vietne. Vietnes jāinstalē no krātuvēm. +\n +\nSky UK Limited bezsmadzeņu DMCA noņemšanas dēļ mēs nevaram saistīt ar repozitorija vietni lietotnē. +\n +\nPievienojieties mūsu Discord vai meklējiet tiešsaistē. + Viss %s jau ir lejupielādēts + Repozitorija nosaukums + Plugin ielādēti + Lejupielādējiet to vietņu sarakstu, kuras vēlaties izmantot + Vispirms instalējiet paplašinājumu + Atvēršana + VLC + Interneta mekletājs + Sākums + Izlaist %s + Noņemt no skatītajiem + Atzīmēt kā skatītu + Vai tiešām vēlaties iziet\? + Šķiet, ka šis saraksts ir tukšs, mēģiniet pārslēgties uz citu. + Atrasts drošā režīma fails! +\n Paplašinājumi netiek ielādēti startēšanas laikā, kamēr fails nav noņemts. + Vērtējums (no zema līdz augstam) + Abonēto šovu atjaunināšana + Abonēts + Abonēts %s + diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 7251d0d7..66a6b9ba 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -1,5 +1,5 @@ - + Брзина (%.2fx) Оценето: %.1f @@ -94,9 +94,9 @@ Режим на Eigengravy Додава можност за брзина на снимка во плеерот Повлечете за да барате - Повлечете лево или десно за да го контролирате времето во видеоплеерот + Повлечете од страна на страна за да ја контролирате вашата позиција во видеото Повлечете за да ги промените поставките - Повлечете на левата или десната страна за да ја промените осветленоста или јачината на звукот + Лизгајте нагоре или надолу на левата или десната страна за да ја промените осветленоста или јачината на звукот Допрете двапати за да барате Допрете двапати на десната или левата страна за да барате напред или назад Користете ја осветленоста на системот @@ -109,7 +109,7 @@ Не испраќа податоци Прикажи епизода за полнење за аниме Прикажи ажурирања на апликации - Автоматски пребарувајте нови ажурирања на вклучување на апликацијата + Автоматски пребарувајте нови ажурирања откако ќе ја стартувате апликацијата. Ажурирање на пред официјални верзии Пребарајте пред официјални верзии наместо ажурирања на само официјални верзии Github @@ -178,7 +178,7 @@ Прескокни ОП Не прикажувај повторно Ажурирај - Префериран квалитет на гледање + Префериран квалитет на гледање (WiFi) DNS преку HTTPS Корисно за заобиколување на блоковите на интернет провајдерите Патека на превземање @@ -187,7 +187,7 @@ Истегни Зумирај Disclaimer - Генерално + Општи поставки Јазици на провајдерите Распоред на апликацијата Претпочитани медиуми @@ -198,8 +198,8 @@ Тема на апликацијата %s %s Корисничко име - Одјавување - Логирај Се + Одјави се + Најавете се Промени корисничка сметка Додади корисничка сметка @@ -213,4 +213,323 @@ Сенка Подигнат Историја - \ No newline at end of file + Голема буква на сите преводи + Автоматски инсталирајте ги сите сè уште неинсталирани приклучоци од додадените складишта. + %d-%d + %d %s + Пренос во живо + NSFW + Други + Отстранете ја страницата + password123 + Јазичен код (мк) + Одложување на титловите + Вчитан %s + Извор + Случајно + Грешка + Прикажи складишта на заедницата + Прескокнете го ова ажурирање + Групно преземање + Позадина + Документарни филмови + Следно + URL на серверот NGINX + Стоп + Подознака + Изглед на емулатор + Видео + Исчисти + Положен + MyCoolSite + Неважечки податоци + Поддршка + Функции на плеерот + Серија + Сите %s веќе се преземени + Дејства + Јазик на преводот + Опис + Апликацијата ќе се ажурира по излегувањето + Отпишана е од %s + прокси raw.githubusercontent.com + TC + Претплатен на %s + Преводи + Да се преземат сите приклучоци од ова складиште\? + Недостасуваат дозволи за складирање. Обидете се повторно. + Зачувај + Вчитај од датотека + Ажурирања на апликацијата + Прелистувач + Вчитана резервна датотека + Гестови + Двоен допир за да паузирате + Прескокни %s + Најдена е датотека во безбеден режим! +\nНе се вчитуваат екстензии при стартување додека датотеката не се отстрани. + Врати + Подреди + Внатрешен плеер + Резолуција + Кредити + Пребарај %s… + Приклучокот е избришан + Статус + Автори + Започни + Изглед + Без доцнење на титловите + Ажурирање претплатени емисии + Синхронизирај + Вчитај од Интернет + %s (оневозможено) + SD + Затвори + Наскоро… + Верзија + Ознака за квалитет + приклучок + %d / 10 + Гледајте видеа на овие јазици + Прво инсталирајте ја наставката + Ажурирајте го напредокот на часовникот + Библиотека + Износот на барањето што се користи кога плеерот е скриен + Преземи преводи + Јавна листа + MPV + Инсталатор на пакети + ОВА + Ажурирања и резервни копии + Вашата библиотека е празна :( +\nНајавете се на корисничка сметка или додадете серии. + Не се пронајдени епизоди + Брзата кафеава лисица го прескокнува мрзливото куче + Слика на постер + Должина на видео баферот + Избриши складиште + Клонирајте ја страницата + Ставете го насловот под постерот + Прикажи информации за падот на апликацијата + Јазик + Торент + Скриен плеер - Износ за пребарување + Автоматски синхронизирајте го напредокот на вашата тековна епизода + Бајпас на интернет провајдерот + Препорачано + Наслов + Префериран квалитет на гледање (мобилни податоци) + Тест на провајдер + Изберете библиотека + Видео песни + Азиски драми + Приклучокот е вчитан + Remove bloat from subtitles + Не е преземено: %d + Remove closed captions from subtitles + Аудио песни + Вклучете ги елементите на корисничкиот интерфејс на постерот + Оневозможено: %d + Легаси + Автоматска репродукција на следната епизода + Исчистете го кешот на видео и слики + Карактеристики + Азиска драма + Додатоци + Се прикажува копче на почетната страница што може да избере случаен филм или ТВ серија од почетната страница + Поддржано + Сметки + Вовед + Креирај сметка + Отстрани од гледаното + Допрете двапати во средината за да паузирате + Резервна копија + ОВА + Пренос во живо + Web + Ажурирани %d приклучоци + Мешано отворање + Екстензии + Овозможете NSFW на поддржани провајдери + Не успеа да стигне до GitHub. Вклучувам jsDelivr прокси… + Филтрирајте по претпочитан медиумски јазик + @string/home_play + Филм + Додаден %s + приклучоци + Подреди по + Оваа листа е празна, обидете се да се префрлите на друга. + Аниме + Износот на барањето што се користи кога плеерот е видлив + Dub + Автоматско преземање приклучоци + Главна + Кеш меморија + Трејлер + Не можев да се најавам на %s + Премногу текст. Не може да се зачува во таблата со исечоци. + Неважечки ID + Преземено %d %s + Користете го ова ако преводите се прикажани %d ms премногу рано + Неважечка URL адреса + Безбедниот режим е вклучен + Blu-ray + Зачувани податоци + Предизвикува падови ако е превисоко поставено на уреди со слаба меморија, како што е Android TV. + Се инсталира ажурирање на апликацијата… + URL на складиштето + Не може да се инсталира новата верзија на апликацијата + Прикажи постери од Kitsu + Дали сте сигурни дека сакате да излезете\? + Предизвикува проблеми ако е превисоко поставено на уреди со мал простор за складирање, како што е Android TV. + Користејќи jsDelivr, блокирањето на GitHub може да се заобиколи. Може да ги одложи ажурирањата за неколку дена. + Да + Азбучно (Ш до А) + WP + Додајте клон на постоечка локација, со различна URL адреса + Преземена датотека + Износ на бараниот плеер (секунди) + Прикажи Logcat 🐈 + Преземено: %d + Резолуција и наслов + Ажурирањето започна + Преводи на Chromecast + Користете го ова ако преводите се прикажуваат %d ms премногу доцна + Случајно копче + Инсталатор на APK + Екстензии + UHD + Референт + Се отвора + 127.0.0.1 + Ова исто така ќе се избрише сите приклучоци за складиште + Направете резервна копија од податоците + Етикета за Dub + Прикажан плеер - Барај износ + Андроид ТВ + Не успеа да ги врати податоците од датотеката %s + Не успеа + Документарец + Стрим + %d мин + Играј со CloudStream + Пушти трејлер + Поставки за преводи на Chromecast + Наслов + Копирај + Плеер + Претплатени + 1000 ms + NSFW + /%d + /\?\? + hello@world.com + +30 + VLC + Рестартирај + Цртан филм + Почна да презема %d %s… + Автоматски ажурирања на приклучоци + -30 + %dm +\nпреостанува + Видео кеш на дискот + Поврзување до пренос + Готово + Додај складиште + 18+ + ХЛС плејлиста + Префериран видео плеер + Прикажи трејлери + Енкодирање на превод + Изглед + Додајте тракинг + Оценет + Камера + Камера + SDR + Веб-прелистувач + Апликацијата не е пронајдена + MyCoolUsername + Отвори со + %s %d%s + Повторете го процесот на поставување + Линкови + Повторување + Sub + Log + Започнете ја следната епизода кога ќе заврши тековната + Грешка при правење резервна копија на %s + Сокриј го избраниот квалитет на видеото во резултатите од пребарувањето + Некои телефони не го поддржуваат новиот инсталатор на пакети. Испробајте ја наследната опција ако ажурирањата не се инсталираат. + Резолуција на видео плеер + Големина на видео баферот + Распоред + Стандардно + Провајдери + Локација на насловот на постерот + HQ + HD + TS + 4K + Претходно + Прескокнете го поставувањето + Променете го изгледот на апликацијата за да одговара на вашиот уред + Известување за пад + Што сакате да видите + Име на складиштето + Приклучокот е преземен + Не може да се вчита %s + Преземете ја листата на сајтови што сакате да ги користите + CloudStream нема стандардно инсталирани локации. Треба да ги инсталирате сајтовите од складиштата. +\n +\nПоради отстранување на DMCA без мозок од страна на Sky UK Limited 🤮 не можеме да ја поврземе локацијата на складиштето во апликацијата. +\n +\nПридружете се на нашиот Discord или барајте онлајн. + Песни + Сите екстензии беа исклучени поради пад за да ви помогнат да ја пронајдете онаа што предизвикува проблеми. + Оцена: %s + Големина + Веб-видео Cast + Сите јазици + Исчисти историја + Обележи како гледано + Прикажи скокачки прозорци за отворање/завршување + Не + Се презема ажурирање на апликацијата… + Оцена (висока до ниска) + Оцена (ниска до висока) + Ажурирано (ново на старо) + Ажурирано (старо во ново) + Азбучно (А до Ш) + Епизодата %d е објавена! + Камера + DVD + Завршува + Измешан крај + HDR + example.com + Синхронизирај преводи + Примени при рестартирање + Наслов на видео плеер максимални знаци + Увезете фонтови ставајќи ги во %s + Врати ги податоците од резервна копија + Поставете статус на пратење + Пушти Livestream + %s е автентициран + %s Епизода %d + %dч %dм + %dм + Следен рандом + Постер + Постер + %dд %dч %dм + Главен постер + Епизодата %d ќе биде објавена на + Постер за епизода + Прегледај позадина + Смени провајдер + Оди назад + Актери: %s + diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index b6ad3a80..3d6240f9 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -1,5 +1,5 @@ - + വേഗം (%.2fx) റേറ്റിംഗ്: %.1f @@ -169,4 +169,35 @@ ഔചിത്യ വീഡിയോ ക്വാളിറ്റി ചരിത്രം കണ്ടതാണെന്ന് അടയാളപ്പെടുത്തുക - \ No newline at end of file + %dd% + yg5t4r%dujyhtg + qeWERT + %fghj%gf + rtf:% + അക്കൗണ്ട് ഉണ്ടാക്കുക + പുറത്ത്പോകുന്നതോടുകൂടി ആപ് അപ്ഡേറ്റ് ആവുന്നതാണ് + ലൈബ്രറി തിരഞ്ഞെടുക്കുക + ഇത് ഉപയോഗിച്ച് തുറക്കുക + ട്രെയിലർ പ്ലേ ചെയ്യുക + ലൈവ് സ്ട്രീം പ്ലേ ചെയ്യുക + ഫില്ലർ + %d min + ക്ലൗഡ് സ്ട്രീം ഉപയോഗിച്ച് കളിക്കുക + അടുത്ത ക്രമരഹിതമായ + എപ്പിസോഡ് പോസ്റ്റർ + അപ്ഡേറ്റ് ആരംഭിച്ചു + പ്രധാന പോസ്റ്റർ + പോസ്റ്റർ + ലോഡിംഗ് ഒഴിവാക്കുക + തിരയുക %s… + %dm + മടങ്ങിപ്പോവുക + പശ്ചാത്തല പ്രിവ്യൂ + പോസ്റ്റർ + ദാതാവിനെ മാറ്റുക + ലോഡിംഗ്… + ബ്രൗസർ + ഒന്നുമില്ല + വീണ്ടും കാണുക + സ്ട്രീം + diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml new file mode 100644 index 00000000..42eba3cc --- /dev/null +++ b/app/src/main/res/values-ms/strings.xml @@ -0,0 +1,2 @@ + + diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c2561914..f56b0bfb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,5 +1,5 @@ - + %s Ep %d Cast: %s @@ -9,7 +9,7 @@ %dm Poster - \@string/result_poster_img_des + Poster Aflevering Poster Hoofdposter Volgende willekeurig @@ -109,7 +109,7 @@ Doorgaan met kijken Verwijder Meer Info - \@string/home_play + @string/home_play Een VPN kan nodig zijn om deze provider correct te laten werken Deze provider is een torrent, een VPN wordt aanbevolen Metadata wordt niet geleverd door de site, het laden van video\'s zal mislukken als deze niet op de site bestaat. @@ -128,14 +128,14 @@ Eigengravy Modus Voegt een snelheidsoptie toe in de speler Swipe to seek - Veeg naar links of rechts om de tijd in de videoplayer te regelen + Veeg naar links of rechts om de tijd in de videospeler te regelen Veeg om instellingen te wijzigen - Veeg naar links of rechts om de helderheid of het volume te wijzigen + Veeg omhoog of omlaag aan de linker- of rechterkant om de helderheid of het volume te wijzigen Dubbeltik om te zien Dubbeltik om te pauzeren - Speler zoeken bedrag + Videospeler aantal zoeken Tik twee keer aan de rechter- of linkerkant om vooruit of achteruit te zoeken - Tik in het midden om te pauzeren + Tik twee keer in het midden om te pauzeren Systeemhelderheid gebruiken Gebruik systeemhelderheid in de app-speler in plaats van een donkere overlay Kijkvoortgang bijwerken @@ -159,7 +159,7 @@ Toon trailers Toon posters van Kitsu App-updates tonen - Automatisch zoeken naar nieuwe updates bij het opstarten + Automatisch zoeken naar nieuwe updates na het starten van de app. Update naar pre-releases Zoeken naar pre-release updates in plaats van alleen volledige releases Github @@ -222,8 +222,8 @@ Film Serie Tekenfilm - \@string/anime - \@string/ova + Anime + OVA Torrent Documentaire Aziatisch drama @@ -257,22 +257,22 @@ Niet meer weergeven Deze update overslaan Update - Gewenste kijkwaliteit + Voorkeurskwaliteit voor kijken (WiFi) Maximaal aantal tekens voor titel van videospeler Videospeler Resolutie Grootte videobuffer Lengte videobuffer Video cache op schijf Wis video en beeld cache - Zal willekeurige crashes veroorzaken als deze te hoog is ingesteld. Verander niet als je weinig RAM hebt, zoals een Android TV of een oude telefoon - Kan problemen veroorzaken op systemen met weinig opslagruimte, zoals Android TV-apparaten als u deze te hoog instelt + Veroorzaakt storingen indien te hoog ingesteld op toestellen met weinig geheugen, zoals Android TV. + Veroorzaakt problemen indien te hoog ingesteld op toestellen met weinig opslagruimte, zoals Android TV. DNS over HTTPS Handig om ISP-blokkades te omzeilen Kloon site Site verwijderen Voeg een kloon toe van een bestaande site, met een andere URL Downloadpad - Nginx server url + NGINX server URL Weergave Dubbed/Subbed Anime Pas aan het scherm Uitgerekt @@ -312,8 +312,8 @@ --> %s %s account - Logout - Login + Log uit + Log in Wissel account Account toevoegen Maak account @@ -324,8 +324,8 @@ %d / 10 /\?\? /%d - Geauthenticeerd %s - Mislukt om te verifiëren aan %s + %s geverifieerd + Kon niet inloggen op %s Geen normaal @@ -337,10 +337,10 @@ Schaduw Verhoogd Sync subs - 1000ms + 1000 ms Subtitle vertraging - Gebruik dit als de ondertitels %dms te vroeg worden getoond - Gebruik dit als ondertitels %dms te laat worden getoond + Gebruik dit als de ondertitels %d ms te vroeg worden getoond + Gebruik dit als de ondertitels %d ms te laat worden getoond Geen ondertitelvertragin Plakat - \@string/result_poster_img_des + @string/result_poster_img_des Episode Plakat Main Plakat Neste tilfeldig @@ -412,7 +412,7 @@ Slå av/på grensesnittselementer på plakat Hopp over denne oppdateringen Forårsaker tilfeldige krasj hvis satt for høyt. Ikke endre dette hvis du ikke har lite minne. - \@string/home_play + @string/home_play Sikkerhetskopier data Data lagret Kunne ikke logge inn på %s @@ -422,11 +422,11 @@ Sensurerbart Vev Lenke til strøm - \@string/anime + @string/anime Skjul valgt videokvalitet i søkeresultater Lastet inn sikkerhetkopifil Oppdateringer og sikkerhetskopi - \@string/ova + @string/ova Avslutt\? Sensurerbart Alle %s er allerede nedlastet @@ -492,4 +492,45 @@ Oppdatering startet Programtillegg nedlastet Programmet vil oppgraderes når du avslutter det - \ No newline at end of file + Blafringsmengde med synlig avspiller + Start på ny + raw.githubusercontent.com-mellomtjener + Sorter etter + Åpne med … + Vurdering (høy til lav) + Start + Alfabetisk (A-Å) + Kunne ikke nå GitHub. Skrur på jsDelivr-mellomtjener … + Tilbyder-test + Bibliotek + Nettleser + Logg + Oppdatert (ny til gammel) + Skjult avspiller — blafringsmengde + Abonnert + Vist avspiller — blafringsmengde + Oppdatert (gammel til ny) + Vellykket + Episode %d sluppet. + Foretrukket visningskvalitet (mobildata) + Stopp + Fjern fra sette + Abonnement på %s opphevet + Android TV + Angre + Oppdatert abonnementer + Mislykket + Alfabetisk (Å-A) + Vurdering (lav til høy) + Abonnerer på %s + Blafringsmengde med skjult avspiller + Velg bibliotek + Omgår blokkering av GitHub ved bruk av jsDelivr. Kan utsette oppdateringer et par dager. + ISP-omgåelser + Denne listen er tom. Prøv å bytte til en annen. + Sorter + Fant fil for trygt modus. +\nLaster ikke inn noen utvidelser ved oppstart til filen er fjernet. + Biblioteket ditt er tomt :( +\nLogg inn på en bibliotekkonto eller legg til programmer i ditt lokale bibliotek. + diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml new file mode 100644 index 00000000..eaa76652 --- /dev/null +++ b/app/src/main/res/values-or/strings.xml @@ -0,0 +1,149 @@ + + + ଅଧିକ ଵିକଳ୍ପ + ଦେଖୁଛନ୍ତି + %dଦି %dଘ %dମି + %dଘ %dମି + %dମି + ପୁନଃଦେଖୁଛନ୍ତି + ଲୁଚାଅ + ଚଲାଅ + ସୂଚନା + ଗୃହ + ସନ୍ଧାନ + ଧରଣ + ସ୍ଥଗିତ + ସାରିଛନ୍ତି + ସେଟିଂ + %d ମିନିଟ୍ + ଵେଗ (%.2fଗୁଣ) + ତ୍ୟାଗିଛନ୍ତି + ଦେଖିବା ପାଇଁ ଇଚ୍ଛୁକ + କିଛି ନାହିଁ + ଅଧିକ ସୂଚନା + ପାତ୍ର: %s + ପୋଷ୍ଟର୍ + ପୋଷ୍ଟର୍ + ଅଧ୍ୟାୟ ଚଲାଅ + କୌଣସି ଅଧ୍ୟାୟ ମିଳିଲା ନାହିଁ + ଟି ଅଧ୍ୟାୟ + ଟିଏ ଅଧ୍ୟାୟ + %s‌ରେ ଚଲାଅ + ବ୍ରାଉଜର୍‌ରେ ଚଲାଅ + ଉପଶୀର୍ଷକ ଡାଉନଲୋଡ୍ କରିବା + /%d + /\?\? + ଅଧ୍ୟାୟ %d ମୁକ୍ତିଲାଭ କଲା! + ସ୍ୱତଃ ଡାଉନଲୋଡ୍ + ଲିଙ୍କ୍‌ଗୁଡ଼ିକୁ ପୁନଃଲୋଡ୍ କରିବା + ଲିଙ୍କ୍ କପି କରିନେବା + ଆପ୍‌ରେ ଚଲାଅ + Chromecast ଅଧ୍ୟାୟ + + ଅଧ୍ୟାୟର ପୋଷ୍ଟର୍ + ମୁଖ୍ୟ ପୋଷ୍ଟର୍ + ଡିଫଲ୍ଟ + ଭାଷା + ନାହିଁ + ଵର୍ଣ୍ଣନା + ହଁ + ଲାଇବ୍ରେରୀ + ଇତିଵୃତ୍ତି + ଲେଖକ + %s ବାଦ୍ ଦିଅ + ଉପଶୀର୍ଷକ ଭାଷା + %s (ଅକ୍ଷମ) + ସ୍ଥିତି + ଆକାର + ସମର୍ଥିତ + HLS ଚାଳନାତାଲିକା + ଅନ୍ତଃ-ଚାଳକ + ଆଦ୍ୟ + ପ୍ରାନ୍ତ + ଆପ୍ ମିଳିଲା ନାହିଁ + ସବୁ ଭାଷା + VLC + MPV + ମିଶ୍ରିତ ପ୍ରାନ୍ତ + ମିଶ୍ରିତ ଆଦ୍ୟ + ଶ୍ରେୟ + ଉପକ୍ରମ + ଏହି ଭାଷାଗୁଡ଼ିକରେ ଵିଡ଼ିଓ ଦେଖନ୍ତୁ + ସଂସ୍କରଣ + ଆପ୍ ଭାଷା + ଅଧ୍ୟାୟ ଚଲାଅ + + ଚଳିତ + ଲିଙ୍କ୍ କ୍ଲିପ୍‌ବୋର୍ଡରେ କପି କରିନିଆଗଲା + ଚଳଚ୍ଚିତ୍ର + ସିଧାପ୍ରସାରଣ + ଉତ୍ସ + କୌଣସି ଅଦ୍ୟତନ ମିଳିଲା ନାହିଁ + ସାଧାରଣ + ପୁନଃ ଦେଖାଅନି + ସ୍ୱତଃ + ତ୍ରୁଟି + ବ୍ୟାକଅପ୍‌ରୁ ତଥ୍ୟ ପୁନରୁଦ୍ଧାର କରିବା + ଷ୍ଟୋରେଜ୍ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ। ଦୟାକରି ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ। + ଅଦ୍ୟତନ ଏଵଂ ବ୍ୟାକଅପ୍ + ବ୍ୟାକଅପ୍ + ଆଣ୍ଡ୍ରଏଡ୍ ଟିଵି + ଅଙ୍ଗଭଙ୍ଗୀ + ନୂଆ ଅଦ୍ୟତନ ମିଳିଲା! +\n%s -> %s + ଅଵଧି + ଆପ୍ + ବ୍ୟାକଅପ୍ ଫାଇଲ୍ ଧାରଣ ହେଲା + ତଥ୍ୟ ଗଚ୍ଛିତ ହୋଇଛି + %s ବ୍ୟାକଅପ୍ ନେବାରେ ତ୍ରୁଟି ଘଟିଲା + ଋତୁ + କୌଣସି ଋତୁ ନାହିଁ + ଫାଇଲ୍ ଵିଲୋପ କରିବେ + ପାରିତ ହେଲା + -୩୦ + ସ୍ଥିତି + ଵ୍ୟଵହୃତ + ଟିଵି ଧାରାଵାହିକ + ଏସୀୟ ନାଟକ + ଅନ୍ୟାନ୍ୟ + ଵିଡ଼ିଓ + ଉତ୍ସ ତ୍ରୁଟି + ଅପ୍ରତ୍ୟାଶିତ ଚାଳକ ତ୍ରୁଟି + ଆଖ୍ୟା + ଅଦ୍ୟତନ ପାଇଁ ଯାଞ୍ଚ କରିବା + ତାଲା + ଆକାର ଠିକ୍ କରିବା + ଏହି ଅଦ୍ୟତନଟିକୁ ବାଦ୍ ଦିଅ + କୃତ୍ୟ + ଉପଶୀର୍ଷକ + ଵୈଶିଷ୍ଟ୍ୟସବୁ + ଵେଶ + ଡିଫଲ୍ଟଗୁଡ଼ା + ପ୍ରାଥମିକ ରଙ୍ଗ + %s ଯୋଡ଼ାଗଲା + ଆଖ୍ୟା + ହେଲା + ଆପ୍ ଅଦ୍ୟତନ ଡାଉନଲୋଡ୍ ଚାଲିଛି… + ଆପ୍ ଅଦ୍ୟତନ ଅଧିସ୍ଥାପନ ଚାଲିଛି… + ଆପ୍‌ର ନୂଆ ସଂସ୍କରଣ ଅଧିସ୍ଥାପନ କରିହେଲା ନାହିଁ + ଵିଫଳ ହେଲା + ଚାଳକ + ତଥ୍ୟର ବ୍ୟାକଅପ୍ ନେବା + ଵିଲୋପ କର + ଵୃତ୍ତଚିତ୍ର + ଅନିମେ + ଧାରାଵାହିକ + ଚଳଚ୍ଚିତ୍ର + ଵୃତ୍ତଚିତ୍ର + ଏସୀୟ ନାଟକ + ସିଧାପ୍ରସାରଣ + ଗୁଣଵତ୍ତା ଲେବଲ୍ + ଅଦ୍ୟତନ କରିବା + ଚାଳକ ଵୈଶିଷ୍ଟ୍ୟସବୁ + ଆପ୍ ଥିମ୍ + ଭାଷା ସ୍ୱତଃ-ଚୟନ + ଅନିମେ + ଉପଶୀର୍ଷକ + +୩୦ + ଵର୍ଷ + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index bbaaec57..2961cb47 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,5 +1,5 @@ - + Prędkość (%.2fx) Ocena: %.1f Znaleziono nową aktualizację! @@ -117,16 +117,16 @@ Tryb Eigengravy Ustawienia prędkości Przesuń aby przewinąć - Przesuń w lewo lub prawo aby kontrolować czas + Przesuwaj w lewo lub prawo, aby kontrolować czas filmu Przesuń aby zmienić ustawienia - Przesuń góra-dół z lewej lub prawej aby zmienić jasność i głośność + Przesuwaj góra-dół z lewej lub prawej strony ekranu aby zmienić jasność czy głośność Autoodtwarzanie następnego odcinka Rozpocznij następny odcinek po skończeniu bieżącego - Czas przewinięcia przy podwójnym kliknięciu + Czas przewinięcia przy podwójnym kliknięciu (w sekundach) Podwójne kliknięcie aby przewinąć Kliknij 2 razy z prawej lub lewej strony aby przewinąć Kliknij dwukrotnie aby wstrzymać - Kliknij na środku, aby zatrzymać wideo + Kliknij dwukrotnie na środku, aby zatrzymać wideo Użyj jasności systemowej Użyj jasności systemowej w odtwarzaczu aplikacji zamiast ciemnej nakładki Aktualizuj postęp oglądania @@ -153,7 +153,7 @@ Automatyczne aktualizacje rozszerzeń Automatyczne pobieranie rozszerzeń Pokazuj aktualizacje - Automatycznie wyszukuj aktualizacje przy starcie + Automatycznie wyszukuj aktualizacje przy starcie. Aktualizuj do wersji beta Wyszukuj wersji beta, zamiast oficjalnych wydań Github @@ -254,7 +254,7 @@ Nie pokazuj ponownie Pomiń tę aktualizację Aktualizacja - Domyślna jakość + Domyślna jakość (WiFi) Maksymalna ilość znaków w tytule odtwarzacza Rozdzielczość odtwarzacza wideo Rozmiar bufora wideo @@ -455,7 +455,7 @@ Instalator APK Niektóre telefony nie obsługują nowego instalatora pakietów. Wypróbuj tryb legacy, jeśli aktualizacje nie zostaną zainstalowane. password123 - \@string/ova + @string/ova MojaFajnaWitryna MyCoolUsername 127.0.0.1 @@ -463,9 +463,9 @@ przyklad.pl /\?\? Instalator pakietów - \@string/home_play + @string/home_play hello@world.com - \@string/anime + @string/anime Opening Ending Mixed opening @@ -504,9 +504,9 @@ Alfabetycznie (od Z do A) Wybierz bibliotekę Biblioteka - Wygląda na to, że twoja biblioteka jest pusta :( -\nZaloguj się na swoje konto lub dodaj programy do swojej lokalnej biblioteki - Wygląda na to, że ta lista jest pusta, spróbuj przełączyć się na inną + Twoja biblioteka jest pusta :( +\nZaloguj się na swoje konto lub dodaj programy do swojej lokalnej biblioteki. + Ta lista jest pusta. Spróbuj przełączyć się na inną. Znaleziono plik trybu bezpiecznego. \nRozszerzenia nie zostaną wczytane, dopóki plik nie zostanie usunięty. Używana ilość przewijania, gdy widoczny jest odtwarzacz @@ -529,6 +529,7 @@ Zasubskrybowano %s Anulowano subskrypcję %s Został wydany odcinek %d! - Obchodzi blokadę GitHuba za pomocą jsdelivr, może spowodować opóźnienie aktualizacji o kilka dni. - Nie udało się połączyć z GitHub, włączono serwer pośredniczący jsdelivr. - \ No newline at end of file + Obchodzi blokadę GitHuba za pomocą jsDelivr. może spowodować opóźnienie aktualizacji o kilka dni. + Nie udało się połączyć z GitHub, włączono serwer pośredniczący jsDelivr… + Domyślna jakość (dane mobilne) + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 3754de8b..705285eb 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -3,63 +3,63 @@ %s Ep %d %dh %dm %dm - Episódio %d será lançado em + O episódio %d será lançado em Poster - Capa do Episódio + Pôster do episódio Poster - Capa Principal + Pôster Principal Próximo Aleatório Voltar - Trocar Provedor - %d dia(s), %d hora(s) e %d mese(s) + Alterar Provedor + %dd %dh %dm Fonte Resolução Extras - Preview Background + Visualizar plano de fundo Velocidade (%.2fx) Classificado: %.1f Nova atualização encontrada! \n%s -> %s - Enchimento + Preenchimento CloudStream - Reproduzir com CloudStream + Assistir com o CloudStream Início - Pesquisa - Transferências - Opções + Pesquisar + Downloads + Configurações Procurar… - Procurar em %s… - Sem Dados - Mais Opções + Pesquisar %s… + Sem dados + Mais opções Próximo episódio - Géneros - Partilhar - Abrir no Navegador - Saltar Carga + Gêneros + Compartilhar + Abrir no navegador + Pular carregamento Carregando… Assistindo - Em Espera + Em espera Concluído - Abandonado - Planeio Assistir - Nenhuma - Assistindo de Novo - Reproduzir Filme - Reproduzir Livestream + Desistido + Pretendo assistir + Nenhum + Reassistindo + Reproduzir filme + Reproduzir transmissão ao vivo Transmitir Torrent Fontes Legendas - Voltar a tentar ligação… - Voltar Atrás - Reproduzir Episódio - Transferir - Transferido - A Transferir - Transferência em Pausa - Transferência Iniciada - Transferência Falhou - Transferência Cancelada - Transferência Completa + Tentar conexão novamente… + Voltar + Reproduzir episódio + Download + Baixado + Baixando + Download Pausado + Download Iniciado + Falha no Download + Download cancelado + Download concluído Stream Erro a Carregar Links Armazenamento Interno @@ -123,16 +123,16 @@ Modo Eigengravy Acrescenta uma opção de velocidade no player Deslize para andar - Deslize para a esq. ou dir. para controlar o tempo no player + Deslize para os lados para controlar a posição em um vídeo Deslize para mudar as configurações - Deslize do lado esq. ou dir. para ajustar brilho ou volume + Deslize para cima ou para baixo, no lado esquerdo ou direito, para ajustar brilho ou volume Reproduzir automaticamente próximo episódio Começa o próximo episódio quando o atual termina Toque duplo para avançar Toque duplo para pôr em pausa - Segundos avançados no player + Tempo de busca no player (Segundos) Toque duplo no lado esq. ou dir. para andar para trás ou para a frente - Toque no meio para pôr em pausa + Toque duas vezes no meio para pausar Usar brilho da sistema Usar brilho do sistema no player em vez de uma sobreposição escura Atualizar progresso @@ -142,7 +142,7 @@ Arquivo de backup carregado Falha ao restaurar dados do ficheiro %s Dados guardados com sucesso - Permissões de armazenamento em falta, por favor tente de novo + Permissão de armazenamento não encontrada, por favor tente novamente. Erro no backup de %s Procurar Contas @@ -158,7 +158,7 @@ Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa Atualizações de plugin automáticas Mostrar atualizações da app - Procurar novas atualizações automaticamente ao iniciar + Procurar automaticamente por novas atualizações depois de iniciar o app. Atualizar para pré-lançamentos Procura atualizações de pré-lançamento em vez de só lançamentos oficiais Github @@ -250,15 +250,15 @@ Não mostrar de novo Saltar esta Atualização Atualizar - Qualidade Preferida - Máximo de caracteres do título de vídeos + Qualidade Preferida (WiFi) + Máximo de caracteres do título no player de video Resolução do player de vídeo Tamanho do buffer do vídeo Comprimento do buffer do vídeo Cache do vídeo em disco Limpar cache de vídeo e imagem - Causará travamentos aleatórios se definido muito alto. Não mude se tiver pouca memória RAM, como um Android TV ou um telefone antigo - Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV + Causará travamentos em dispositivos com pouca memória se definido muito alto , como uma Android TV. + Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como uma Android TV. DNS sobre HTTPS Útil para contornar bloqueios do fornecedor de internet Clonar site @@ -273,7 +273,7 @@ Aviso Legal Geral Botão Aleatório - Mostra o botão Aleatório na página inicial + Mostrar botão aleatório na página inicial Idioma dos fornecedores Layout da App Mídia preferida @@ -363,7 +363,7 @@ Plugin Carregado Plugin Apagado Falha ao carregar %s - Iniciada a transferência %d %s + Download iniciado %d %s… Transferido %d %s com sucesso Tudo %s já transferido Transferência em batch @@ -375,18 +375,22 @@ Transferido: %d Desativado: %d Não transferido: %d - Adicionar um repositório para instalar extensões de sites + O CloudStream não possui sites instalados por padrão. Você precisa instalar os sites a partir de repositórios. +\n +\nDevido a uma restrição sem sentido de direitos autorais (DMCA) pela Sky UK Limited 🤮 não podemos vincular o site do repositório no aplicativo. +\n +\nJunte-se ao nosso Discord ou pesquise online. Ver repositórios da comunidade Lista pública Todas as legendas em maiúsculas Transferir todos os plugins deste repositório\? %s (Desativado) Instalador APK - %d minuto(s) - Reproduzir trailer + %d min + Assistir Trailer Marcar como visto/não visto Reproduzir - Instalar automaticamente todas as extensões dos repositórios cadastrados. + Instalar automaticamente todos os plugins ainda não instalados dos repositórios adicionados. Baixar extensões automaticamente Refazer o processo de configuração -30 @@ -394,9 +398,9 @@ +30 %s %d%s Elenco: %s - Atualização em andamento + Atualização iniciada Log - Alguns aparelhos não possuem suporte para o novo instalador de pacotes. Use a opção legado caso não esteja conseguindo atualizar. + Alguns aparelhos não suportam o novo instalador de pacotes. Use a opção legado caso não esteja conseguindo atualizar. %d-%d %d %s Iniciar @@ -408,4 +412,121 @@ Ova Anime Player visível - Procurar valor - \ No newline at end of file + Instalando atualização do app… + Você tem certeza que deseja sair\? + Versão + Encerramento + Limpar histórico + Abertura + Não + Ordenar por + Sim + Baixando atualização do app… + Episódio %d lançado! + Créditos + Descrição + Tamanho + Parar + Modo seguro ligado + Histórico + Ordenar + Player interno + Autores + Suportado + Idioma + Instalar a extensão primeiro + Playlist HLS + Player de vídeo preferido + Estado + Gestos + Faixas + WP + Cam + Abertura + Selecionar Biblioteca + Ignora o bloqueio do GitHub usando jsDelivr. Pode fazer com que as actualizações sejam atrasadas por alguns dias. + VLC + Todas as linguagens + Atualizado (Novo para Antigo) + Inscrito + HDR + Reiniciar + Navegador Web + Atualizado (Antigo para Novo) + Web Video Cast + DVD + Instalador de pacotes + MPV + Remover dos assistidos + Não foi possível instalar a nova versão do aplicativo + Inscrição cancelada em %s + Final misto + Avaliações (Decrescente) + Aplicar ao reiniciar + Referente + Player oculto - Quantidade de Busca + raw.githubusercontent.com Proxy + Blu-ray + Aparência + 1000 ms + SDR + 18+ + Abrir com + Teste de provedor + UHD + Ver informações sobre falha + Aplicativo não encontrado + Reverter + Link para transmitir + Plugins baixados + %d plugins atualizados + Pular %s + Abertura mista + Alfabético (Z a A) + Esta lista está vazia. Tente trocar para outra. + Inscrito em %s + 4K + Faixas de vídeo + O aplicativo será atualizado ao sair + Atualizando shows inscritos + Alfabético (A a Z) + Avaliações (Crescente) + A sua biblioteca está vazia :( +\nEntre numa conta da biblioteca ou adicione espectáculos à sua biblioteca local. + Arquivo de modo de segurança encontrado! +\nNenhuma extensão será carregada na inicialização do app até que o arquivo seja removido. + Contorno do provedor de serviço de internet (ISP) + Links + Recursos do Player + Recursos + Atualizações de aplicativos + Qualidade Preferida (Dados Móveis) + Quantidade de busca (em segundos) usada quando o player de video está visível + Quantidade de busca (em segundos) usada quando o player de video está oculto + Não foi possível chegar ao GitHub. Ativando o proxy jsDelivr… + Cache + Android TV + Legendas + %s %s + TS + Cam + Cam + HQ + HD + TC + Web + Nota: %s + Legado + Todas as extensões foram desativadas devido a uma falha para ajudá-lo a encontrar a que está causando o problema. + Recapitular + Mostrar pop-ups para pular abertura/encerramento + Muito texto. Não é possível salvar na área de transferência. + Marcar como assistido + Backup + Extensões + Ações + Layout + Configurações padrão + SD + Faixas de áudio + diff --git a/app/src/main/res/values-qt/strings.xml b/app/src/main/res/values-qt/strings.xml index c1119bfc..f763d795 100644 --- a/app/src/main/res/values-qt/strings.xml +++ b/app/src/main/res/values-qt/strings.xml @@ -219,4 +219,33 @@ uuuuhhhoouuooog ooaaahhhh uuu ugggg ooo guggg ooh - \ No newline at end of file + auuuooohaaaaagh + uuuuuuuh aaaoo o + ooooooouuuua aa aaagh agh + AAAAUUUOH + aoughoooaaaa + oooouuuh + ahaough aaouuuuh-h + auughooo + ooooooa aauoh + aaaaagh oouoo aaaaaaa + aaaaaagh uuohuoh + aaaaaauo agghhhhhhaoouu + uuuuuuuuh + ouaaahh + ooough aaoough aooou %s aaaa + ouooooouuuu oooooo + aaaaaaaaaaahhhgh-aooohoooo + aau aooooghaao + aagh aaaaaaaaaaaa oooh, aaough, ooga oguuu aaaaaaaaaaa ooooooohghh a-a-aaauo + %dmmmmmm.. +\naaaaooughugh + aooohuohaaaa ooooagh + oooooogh-aaaaaogh + guuuaaaahhhhhhhaaa + woooaaahh ahahaaaauu 🦍 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOOGGAGHAGHAAA + aoaaaaaoooghhh + oooooh uuaagh + @string/home_play + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 42d9b7c8..294abcfd 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,5 +1,5 @@ - + %s Ep %d Distribuție: %s @@ -106,7 +106,7 @@ Continuați să urmăriți Eliminați Mai multe informații - \@string/home_play + @string/home_play Există probabilitatea necesitații unui VPN pentru ca acest furnizor să funcționeze corespunzător Acest furnizor este un torrent, se recomandă un VPN Metadatele nu sunt furnizate de către site, există posibilitatea ca încărcarea videoclipului să eșueze. @@ -125,14 +125,14 @@ Modul Eigengravy Adăugați opțiunea de viteză în player Derulați spre înainte/înapoi - Derulați spre stânga sau spre dreapta pentru a controla timpul de difuzare a videoclipului + Glisați dintr-o parte în alta pentru a vă controla poziția într-un videoclip Derulați pentru a modifica setările Glisați spre stânga sau spre dreapta pentru a schimba luminozitatea sau volumul Atingeți de două ori pentru a merge înainte/înapoi Atingeți de două ori pentru a pune pauză Atingeți de două ori partea stângă sau dreaptă a ecranului pentru a derula rapid înainte sau înapoi videoclipul - Atingeți de două ori centrul ecranului pentru a întrerupe înregistrarea video - Atingeți dublu pentru a căuta + Atingeți de două ori în mijloc pentru a pune pauză + Cantitatea de căutare al player-ului (secunde) Utilizați luminozitatea sistemului Utilizați luminozitatea sistemului în playerul aplicației în loc de o suprapunere întunecată @@ -156,7 +156,7 @@ Arată trailerul Arată afișele de la Kitsu Afișați actualizările aplicației - Căutați automat noi actualizări la pornire + Căutați automat noi actualizări după pornirea aplicației. Actualizați la prerelease Căutați actualizări ale versiunilor preliminare în loc să căutați doar versiunile complete GitHub @@ -250,22 +250,22 @@ Nu se mai arată din nou Treci peste această actualizare Actualizare - Rezoluția preferată + Calitatea preferată (WiFi) Limitarea caracterelor de titlu în player Rezoluția playerului video Dimensiunea cache-ului video Lungimea buffer-ului video Dimensiunea cache-ului video pe disc Ștergeți memoria cache de imagine și video - Dacă este setat la un nivel prea ridicat, poate cauza probleme pe sistemele cu prea puțină memorie RAM. Cum ar fi dispozitivele Android TV sau telefoanele mai vechi - Dacă este setat la un nivel prea ridicat, poate cauza probleme pe sistemele cu spațiu de stocare intern redus. Ca și dispozitivele Android TV + Provoacă blocaje dacă este setată la un nivel prea ridicat pe dispozitive cu memorie redusă, cum ar fi Android TV. + Cauzează probleme dacă este setat la un nivel prea ridicat pe dispozitive cu spațiu de stocare redus, cum ar fi Android TV. DNS peste HTTPS Folositor pentru evitarea blocajelor ISP Adaugați site-ul Eliminați site-ul Adăugați o copie a unui site existent, cu o adresă URL diferită Locul descărcării - Adresa URL a serverului Nginx + Adresa URL a serverului NGNIX Afișarea anime-urilor dublate/subtitrate Adaptare la ecran Întindere @@ -285,7 +285,7 @@ Dispunere telefonică Dispunerea emulatorului Culoare primară - Tema + Tema aplicației Locația titlului posterului Locația titlului de pe poster @@ -311,7 +311,7 @@ /\?\? /%d %s autentificat - Imposibil de autentificat la %s + Nu s-a putut autentifica la %s Nu există Normal @@ -323,10 +323,10 @@ Umbră Relief Sincronizare subtitrări - 1000ms + 1000 ms Delay subtitrare - Se utilizează dacă subtitrările sunt afișate %dms prea devremeo - Se utilizează dacă subtitrările sunt afișate %dms prea târziu + Utilizează acesta dacă subtitrările sunt afișate %d ms prea devreme + Utilizează acesta dacă subtitrările sunt afișate %d ms prea târziu Fără întârziere la subtitrare Trailer Istoric - Marcare ca vizionat + Marcați ca vizionat Redă automat următorul episod CloudStream Vizionează trailerul @@ -388,4 +388,164 @@ Log Browser Joacă cu CloudStream - \ No newline at end of file + Actualizare plugin automată + Descarcă plugin-uri automat + Altele + Trecut + Start + %d %s + NSFW + %d-%d + Player Afișat - Căutați Suma + Player Ascuns - Căutați Suma + Livestream-uri + NSFW + Eșuat + Cantitatea de căutare utilizată atunci când playerul este vizibil + Livestream + Cantitatea de căutare utilizată atunci când playerul este ascuns + Calitatea preferată (Date Mobile) + Video + Instalator APK + Instalează automat toate plugin-urile neinstalate din depozite adăugate. + %s %d%s + Unele telefoane nu acceptă noul program de instalare a pachetului. Încercați opțiunea veche dacă nu se instalează actualizările. + Refaceți procesul de configurare + Treci peste partea de configurare + Descărcare pe loturi + 18+ + Evaluare: %s + Treci peste %s + Aplicația nu a fost găsită + Încheiere mixat + Ștergeți istoricul + Introducere + Da + Ce vrei să vezi + Recapitulare + Alfabetic (A la Z) + Încheiere + Dezabonat de la %s + Nu s-a descărcat: %d + Vezi depozite din comunitate + PackageInstaller (Instalare a pachetelor) + Stare + Nu se poate încărca %s + Piste audio + Referent + Deschidere + Extensii + Layout + Prea mult text. Nu s-a putut salva în clipboard. + Linkuri + Funcții + Autori + Raportarea accidentelor + Adaugă depozit + Se pare că biblioteca ta este goală :( +\nConectează-te la un cont de bibliotecă sau adaugă emisiuni în biblioteca ta locală + Eliminați subtitrările închise din subtitrări + Descărcați lista de site-uri pe care doriți să le utilizați + Evaluare (Ridicat la Scăzut) + Extensii + Ștergeți depozitul + Dimensiune + Cache + Funcțiile player-ului + Plugin încărcat + Vezi informații despre accident + Deschideți cu + Eliminați bloat din subtitrări + Actualizat %d plugin-uri + Evaluare (Scăzut la Ridicat) + Terminat + Versiune + Backup + Suplimente + Actualizat (Nou la Vechi) + Schimbați aspectul aplicației pentru a se potrivi dispozitivului dvs + Nume de depozit + %s (Dezactivat) + Nu + Abonat la %s + Aplicația va fi actualizată la ieșire + Web Video Cast + Ocoliri ISP + Anterior + Sortează + Selectați Biblioteca + Filtrați în funcție de limba media preferată + Episodul %d lansat! + Android TV + VLC + Urmăriți videoclipuri în aceste limbi + Reveniți + Acțiuni + Alfabetic (Z la A) + URL invalid + Toate extensiile au fost dezactivate din cauza unei defecțiuni pentru a vă ajuta să o găsiți pe cea care cauzează probleme. + Se descarcă actualizarea aplicației… + Browser web + CloudStream nu are niciun site instalat în mod implicit. Trebuie să instalați site-urile din depozite. +\n +\nDin cauza unui DMCA takedown fără creier de către Sky UK Limited 🤮 nu putem lega site-ul de depozit în aplicație. +\n +\nAlăturați-vă Discordului nostru sau căutați online. + A început să descarce %d %s… + Mod sigur pornit + Fișier Mod Sigur găsit! +\nNu încarcă nicio extensie la pornire până când fișierul nu este eliminat. + Scoateți de la urmărit + Actualizat (Vechi la Nou) + Aplică la repornire + Descriere + Plugin Descărcat + Sunteți sigur că vreți să ieșiți\? + Se pare că această listă este goală, încercați să treceți la o alta + Sortați după + Player intern + Prestabile + URL-ul depozitului + Oprește + Aspecturi + Plugin Șters + Gesturi + Nu s-a putut instala noua versiune a aplicației + Piste + Repornește + Activează NSFW la furnizori suportate + Nu s-a putut ajunge la GitHub. Se activează proxy-ul jsDelivr… + Proxy raw.githubusercontent.com + Depășește blocarea GitHub folosind jsdelivr, poate cauza întârzieri de câteva zile la actualizări. + Următorul + Toate %s deja descărcate + S-a descărcat: %d + Dezactivat: %d + Toate subtitrările cu majuscule + Descărcați toate plugin-urile din acest depozit\? + Se actualizează emisiunile abonate + Abonat + Lista publică + MPV + Moştenit + Test de furnizor + Furnizori + Link către stream + Acest lucru va șterge, de asemenea, toate plugin-urile din depozit + Se instalează actualizarea aplicației… + S-a descărcat %d %s + Suportat + Playlist HLS + Piste video + Arată Afișați pop-up-uri de săritură pentru deschidere/încheiere + Toate limbile + Deschidere mixat + Credite + Limbă + plugin + plugin-uri + Instalați mai întâi extensia + Player video preferat + Actualizări al aplicației + Subtitrări + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 2812667a..bcd3fc0f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -142,10 +142,10 @@ Добавляет опцию скорости в проигрывателе Проведите пальцем для поиска Проведите пальцем для изменения настроек - Проведите пальцем по левой или правой стороне для изменения яркости или громкости + Проведите вверх или вниз по левой или правой стороне, чтобы изменить яркость или громкость Автопроиграть следующего серия Поток торрент - Проведите пальцем влево или вправо, чтобы управлять временем в видеоплеере + Проведите пальцем из стороны в сторону, чтобы управлять свое место в видеоролике Начните следующий серию, когда закончится текущий Загружена резервная копия Не удалось восстановить данные из %s @@ -159,7 +159,7 @@ Автоматическое обновление плагинов Автоматическая загрузка плагинов Показать обновления приложения - Автоматически проверять обновления при старте + Автоматически проверять обновления при старте приложения. Обновится до пре-релиза APK установщик Github @@ -227,7 +227,7 @@ Использовано Двойное нажатие для паузы Коснитесь дважды правой или левой стороны для поиска вперед или назад - Нажмите в центре для паузы + Нажмите дважды в центре, чтобы сделать паузу Использовать системную яркость Автоматически синхронизировать текущий прогресс эпизода Ошибка резервного копирования %s @@ -318,7 +318,7 @@ Титры Отметить как просмотренное Разрешение видеоплеера - Желаемое качество видео + Предпочтительное качество видео (WiFi) Максимум символов Длинна буфера Кеш видео на диске @@ -363,7 +363,7 @@ Расширения URL репозитория Плагин загружен - \@string/home_play + @string/home_play Перемотка двойным нажатием /\?\? /%d @@ -408,8 +408,8 @@ Съешь ещё этих мягких французских булок, да выпей же чаю Рекомендуется Загружено %s - \@нить/аниме - \@нить/ova + Аниме + OVA Этикетка Dub Сайт Функции @@ -439,8 +439,8 @@ Алфавитный (Я до А) Выбрать библиотеку Открыть с - Похоже, ваша библиотека пуста :( -\nВойдите в аккаунт с библиотекой или добавьте сериалы в локальную библиотеку + Ваша библиотека пуста :( +\nВойдите в аккаунт с библиотекой или добавьте сериалы в локальную библиотеку. Сортировка Открытый список Рейтинг (высокий - низкий) @@ -487,7 +487,7 @@ Файл безопасного режима найден! \nНе загружаются никакие расширения при запуске, пока файл не будет удален. Приложение будет обновлено после выхода - Похоже, этот список пуст, попробуйте переключиться на другой + Этот список пуст, попробуйте переключиться на другой. Все субтитры заглавными Показывать всплывающие окна для пропуска вступления/заключения Фильтровать по предпочитаемому языку медиа @@ -501,7 +501,7 @@ Перезагрузить ссылки Предпочтительные медиа Опущенные - Объем перемотки плеера + Объем перемотки плеера (секундах) Объем перемотка, используемый, когда плеер виден Плеер показан - Перемотки объем Плеер спрятан - Перемотки объем @@ -518,4 +518,15 @@ Неудачный Прекратить Перезапустить - \ No newline at end of file + Вернуться + Подписался на %s + Предпочтительное качество видео (Мобильный интернет) + raw.githubusercontent.com Прокси-сервер + Не удалось подключиться к GitHub. Включаем проксирование через jsdelivr… + Эпизод %d выпущен! + Обходы провайдера + Обновление подписки на фильмы и сериалы + Обход ограничения доступа к GitHub с помощью jsDelivr может задержать обновления на несколько дней. + Подписные + Отказались от подписки на %s + diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 66d8ada9..e0cc27d0 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -99,9 +99,261 @@ Tento poskytovateľ je torrent, odporúča sa VPN Importovať písma ich umiestnením do %s Viac informácií - \@string/home_play + @string/home_play Pokračovať v sledovaní Na správne fungovanie tohto poskytovateľa môže byť potrebná VPN Stránka neposkytla žiadne metadáta, načítanie videa zlyhá, ak na stránke neexistuje. Popis - \ No newline at end of file + Pokračuje v prehrávaní v miniatúrnom prehrávači nad ostatnými aplikáciami + Zopakujte pripojenie… + Upustené + Obraz v obraze + Streamovať torrent + Náhľad pozadia + Tlačidlo na zmenu veľkosti prehrávača + Sledujem + Popis sa nenašiel + Ďalší náhodný + Stream + Podržané + Zobraziť Logcat 🐈 + Protokol + Prehliadač + Zhrnutie sa nenašlo + Dvojitým ťuknutím pozastaviť + Aktualizácie a zálohovanie + Informácie + Rozšírené vyhľadávanie + Zobraziť plagáty z Kitsu + Automatická aktualizácia doplnkov + Skryť vybranú kvalitu videa vo výsledkoch vyhľadávania + Zobraziť výplňovú epizódu pre anime + APK inštalátor + Niektoré telefóny nepodporujú nový inštalátor balíčkov. Ak sa aktualizácie nenainštalujú, skúste použiť staršiu možnosť. + Nenáročná aplikácia pre romány od rovnakých vývojárov + Jazyk aplikácie + Nenašli sa žiadne odkazy + Darujte benén vývojárom + Benén darovaný + Tento poskytovateľ nepodporuje Chromecast + Súbor zálohy načítaný + Automaticky synchronizovať priebeh sledovania súčasnej epizódy + Ťuknite dvakrát vpravo alebo vľavo pre pretočenie vpred alebo vzad + Potiahnutím zmeniť nastavenia + Posunutím nahor alebo nadol na ľavej alebo pravej strane zmeníte jas alebo hlasitosť + Dĺžka pretočenia (sekundy) + Zopakovať proces nastavenia + Titulky + Dáta uložené + Anime aplikácia od rovnakých vývojárov + Zálohovať dáta + Odkaz skopírovaný do schránky + Použiť systémový jas + Obnoviť dáta zo zálohy + Dvojitým ťuknutím pretočiť + Pridá možnosť rýchlosti do prehrávača + Automaticky sťahovať doplnky + Pripojte sa na Discord + Neodosiela žiadne dáta + Odstrániť čierne okraje + Automaticky vyhľadať nové aktualizácie po spustení aplikácie. + Prehrať epizódu + Chýbajú povolenia k úložisku. Skúste to prosím znova. + Nastavenia titulkov prehrávača + Spustiť ďalšiu epizódu po skončení aktuálnej + Chromecast titulky + Eigengravy režim + Potiahnutím pretočiť + Automaticky prehrať ďalšiu epizódu + Aktualizovať priebeh sledovania + Ťuknite dvakrát do stredu pre pozastavenie + V prehrávači použiť systémový jas namiesto tmavého prekrytia + Zobraziť upútavky + Automaticky nainštalovať všetky ešte nenainštalované doplnky z pridaných repozitárov. + Odosiela dáta len pri pádoch + Knižnica + GitHub + Hľadať + Účty + Nastavenia Chromecast titulkov + Potiahnutím zo strany na stranu môžete ovládať svoju pozíciu vo videu + Nepodarilo sa obnoviť dáta zo súboru %s + Chyba pri zálohovaní %s + Poskytne vám výsledky vyhľadávania rozdelené podľa poskytovateľa + Zobraziť aktualizácie aplikácie + Aktualizácia na predbežné vydania + Vyhľadať aktualizácie predbežných vydaní namiesto plných vydaní + Ospravedlňujeme sa, aplikácia spadla. Vývojárom bude odoslané anonymné hlásenie o páde + Obnoviť predvolenú hodnotu + Sezóna + Synopsa + vo fronte + Žiadne titulky + Anime + Kreslené + Skopírovať odkaz + Automaticky stiahnuť + Zrkadlo sťahovania + Zamknúť + Nenašla sa žiadna aktualizácia + Skontrolovať aktualizáciu + Zmeniť veľkosť + DNS cez HTTPS + Odstrániť stránku + Pridá klon existujúcej stránky s inou URL adresou + Cesta sťahovania + Android TV + Gestá + Funkcie prehrávača + Všeobecné + Náhodné tlačidlo + Prihlásiť sa + Prepnúť účet + Pridať účet + Rozloženie aplikácie + ahoj@svet.sk + Úspešné + MojeSuperMeno + Seriály + Seriál + E + Roztiahnuť + Záloha + Zdroj + Voľné + Veľkosť vyrovnávacej pamäte videa + Aktualizácie aplikácie + Umiestnenie názvu plagátu + Živý prenos + heslo123 + S + Pokračovať + NSFW + Akcie + Pozastaviť + Zobraziť anime dabované/s titulkami + Titulky + Synchronizovať + Prehrať v aplikácii + %d-%d + Spôsobuje zlyhania, ak je nastavená príliš vysoko na zariadeniach s nízkou pamäťou, ako je Android TV. + raw.githubusercontent.com Proxy + Trvanie + Aplikácia + /%d + Pridané %s + Dokument + Chromecast zrkadlo + Predvolené + Ostatné + Chyba pri sťahovaní, skontrolujte povolenia k úložisku + Primárna farba + Vytvoriť účet + %d / 10 + Priblížiť + Torrenty + Rozlíšenie prehrávača + Umiestniť názov pod plagát + Preferovaná kvalita sledovania (WiFi) + Rozšírenia + Hodnotené + -30 + Chyba vykresľovania + Neočakávaná chyba prehrávača + Téma aplikácie + Dokumenty + Preferované médiá + URL servera NGINX + %d %s + Predvolené + Pridať sledovanie + Žiadna sezóna + Epizóda + Znova načítať odkazy + Jazyky poskytovateľa + Spustiť + Živé prenosy + Stiahnuť titulky + Povoliť NSFW u podporovaných poskytovateľov + Obchádzanie ISP + Prepnúť UI prvky na plagáte + Rozloženie + Neúspešné + Stav + Preskočiť OP + Vyrovnávacia pamäť videa na disku + Hodnotenie + Torrent + OVA + Preskočiť túto aktualizáciu + /\?\? + Film + 127.0.0.1 + účet + Rok + Prispôsobiť obrazovke + Zmazať + Využité + Štítok kvality + Prehrávač skrytý - dĺžka pretočenia + Vzhľad + %s %d%s + Obchádza blokovanie GitHubu pomocou jsDelivr. Môže spôsobiť oneskorenie aktualizácií o niekoľko dní. + Zobraziť náhodné tlačidlo na domovskej stránke + Odhlásiť sa + Aktualizovať + Stránka + Dĺžka vyrovnávacej pamäte videa + Zmazať súbor + Prehrať v %s + Funkcie + Nezobrazovať znova + Vzdialená chyba + Užitočné na obchádzanie blokácií ISP + Odkazy + Klonovať stránku + OVA + Filmy + príklad.sk + Vyrovnávacia pamäť + Nepodarilo sa pripojiť na GitHub. Zapína sa proxy jsDelivr… + Nenašli sa žiadne epizódy + +30 + Ázijské drámy + Anime + Chyba zdroja + Prehrať v prehliadači + Štítok dabingu + Štítok titulkov + Názov + Vymazať vyrovnávaciu pamäť videí a obrázkov + Prehrávač zobrazený - dĺžka pretáčania + Dĺžka pretočenia, keď je prehrávač viditeľný + Dĺžka pretočenia, keď je prehrávač skrytý + Kódovanie titulkov + Test poskytovateľa + Rozloženie + Automaticky + Mobilné rozloženie + Poskytovatelia + TV rozloženie + Kód jazyka (sk) + MôjSuperWeb + %s %s + Vylúčenie zodpovednosti + NSFW + Týmto sa natrvalo vymaže %s +\nSte si istý\? + %dm +\nzostáva + Prebieha + Dokončené + Rozloženie emulátora + Epizódy + Video + Ázijská dráma + Chromecastovať epizódu + Preferovaná kvalita sledovania (mobilné dáta) + Maximálny počet znakov v názve prehrávača + Spôsobuje problémy, ak je nastavená príliš vysoko v zariadeniach s malým ukladacím priestorom, ako je napríklad Android TV. + diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index b944b6b3..db82d9fa 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -487,4 +487,4 @@ Bilowga Bilow isku qasan Qoraalka dhamaadka - \ No newline at end of file + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 32336b66..168e23fa 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,5 +1,5 @@ - + Betygsatt: %.1f Hastighet (%.2fx) Ny uppdatering hittad! @@ -33,7 +33,7 @@ Undertexter Försök ansluta igen… Gå tillbaka - \@string/result_poster_img_des + @string/result_poster_img_des Spela Avsnitt Ladda ner Intern lagring @@ -44,7 +44,7 @@ Inaktivera automatisk felrapportering Mer information Hide - \@string/result_poster_img_des + @string/result_poster_img_des Spela upp Info Nästa @@ -235,7 +235,7 @@ Episod %d kommer släppas om %d min Visa trailers - \@string/home_play + @string/home_play OVA %d-%d %d %s @@ -244,7 +244,7 @@ %dm \nåterstår NSFW - \@string/ova + @string/ova Torrent NSFW +30 @@ -273,7 +273,7 @@ Asiatiska draman Andra Tecknade serier - \@string/anime + @string/anime Dokumentär Asiatisk drama Video @@ -368,4 +368,4 @@ Titta på videor på dessa språk Föregående Spår - \ No newline at end of file + diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index b2334c5f..affb04bf 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -107,4 +107,4 @@ இடைநிறுத்துவதற்கு இருமுறை தட்டவும் Chromecast வசன அமைப்புகள் இருண்ட மேலடுக்குக்குப் பதிலாக ஆப் பிளேயரில் சிஸ்டம் பிரகாசத்தைப் பயன்படுத்தவும் - \ No newline at end of file + diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index 9e5b29d4..95d38478 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -1,11 +1,11 @@ - + %s Ep %d Poster - \@string/result_poster_img_des + @string/result_poster_img_des Episode Poster Main Poster Next Random @@ -263,4 +263,4 @@ Magdagdag ng Account Kasaysayan I-tanda bilang napanood na - \ No newline at end of file + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 807716d8..170c3679 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,5 +1,5 @@ - + %d %s | %s %s • %s @@ -23,9 +23,9 @@ Bölüm Posteri Ana Poster Sonraki Rastgele - \@string/play_episode + @string/play_episode Geri git - \@string/home_change_provider_img_des + @string/home_change_provider_img_des Change Provider Preview Background @@ -46,7 +46,7 @@ Veri yok Daha fazla seçenek Sonraki bölüm - \@string/synopsis + @string/synopsis Türler Paylaş Tarayıcıda aç @@ -117,47 +117,47 @@ Hiç muz verilmedi Otomatik seçilecek dil İndirilecek diller - Alt yazı dili - Varsayılana döndürmek için basılı tut + Altyazı dili + Sıfırlamak için basılı tut Fontları içe aktarmak için %s konumuna yerleştirin İzlemeye devam et Kaldır Daha fazla bilgi - \@string/home_play + @string/home_play Bu sağlayıcının düzgün çalışması için bir VPN gerekebilir - Bu sağlayıcı bir torrent. VPN önerilir + Bu sağlayıcı torrent kullanıyor, bir VPN önerilir Metadata site tarafından sağlanmamış, veri site\'de bulunmuyorsa video yüklenmesi başarısız olacak. Açıklama Konu bulunamadı Açıklama bulunamadı - Logcat\'i göster 🐈 - Resim-içinde-resim - Diğer uygulamaların üzerinde minyatür bir oynatıcıda oynatmaya devam eder + Logcat\'i görüntüle 🐈 + Görüntü içinde görüntü + İçerik diğer uygulamaların üzerinde küçük bir pencerede oynatılmaya devam eder Oynatıcı yeniden boyutlandırma butonu - Siyah sınırları kaldır - Alt yazı + Siyah sınır çizgilerini kaldır + Alt yazılar Oynatıcı alt yazı ayarları - Chromecast alt yazı + Chromecast alt yazıları Chromecast alt yazı ayarları - Eigengravy modu - Oynatıcıya bir hız seçeneği ekle - Gözlemek için kaydır - Zamanı ayarlamak için sağa veya sola kaydır + Eigengrau modu + Oynatıcıya hız seçeneği ekler + Atlamak için kaydır + Zamanı ayarlamak için yanlardan kaydır Ayarları değiştirmek için kaydır - Sol ve sağ taraftan kaydırarak parlaklık ve sesi ayarla + Sol ve sağ taraftan yukarı kaydırarak ekran parlaklığı ve sesi ayarla Sonraki bölümü otomatik oynat Mevcut bölüm bittiğinde sonraki bölüme başla - Gözlemek için çift tıkla - Durdurmak için çift tıkla - Oynatıcı gözleme miktarı - İleri ve geri atlamak için sağa ve sola çift tıkla - Durdurmak için ortaya tıkla + Çift dokunarak atla + İki kez dokunarak duraklat + Atlanacak süre (Saniye) + İleri ve geri atlamak için sağa ve sola iki kez dokun + Durdurmak için ekranın ortasına çift dokun Sistem parlaklığını kullan - Oynatıcıda karanlık kaplama yerine sistem parlaklığını kullan + Oynatıcıyı karartmak yerine sistem parlaklığını kullan İzleme ilerlemesini güncelle Mevcut bölüm ilerlemesini otomatik güncelle - Yedekten geri yükle - Verileri yedekleyin + Verileri yedekten geri yükle + Verileri yedekle Yedek dosyası yüklendi Geri yükleme başarısız oldu: %s Başarıyla yedeklendi @@ -165,21 +165,21 @@ %s yedeklenirken hata Ara Hesaplar - Güncellemeler ve yedek + Güncellemeler ve yedekleme Bilgi Gelişmiş arama - Sağlayıcılara göre ayrılmış arama sonuçlarını ver + Arama sonuçlarını sağlayıcıya göre ayırır Yalnızca çökmelerle ilgili verileri gönderir - Hiç veri göndermez - Anime için filler bölümleri gösterir + Veri göndermez + Anime için filler bölümleri göster Fragmanları göster Kitsu\'dan posterleri göster - Seçilen video kalitelerini arama sonuçlarında gizle + Seçilen video kalitelerini arama sonuçlarında gösterme Otomatik eklenti güncellemeleri Uygulama güncellemelerini göster - Başlangıçta yeni güncellemeleri otomatik olarak ara - Ön sürümlere güncelle - Sadece tam sürümler yerine ön sürüm güncellemelerini de ara + Uygulama başlatıldıktan sonra güncellemeleri otomatik olarak kontrol et. + Deneysel sürümlere güncelle + Yalnızca tam sürümler yerine deneysel güncellemeleri de ara GitHub Aynı geliştiriciler tarafından LightNovel uygulaması Aynı geliştiriciler tarafından anime uygulaması @@ -191,8 +191,8 @@ Bağlantı bulunamadı Bağlantı panoya kopyalandı Bölümü oynat - Varsayılana sıfırla - Üzgünüz, uygulama çöktü. Geliştiricilere isimsiz bir hata raporu gönderilecek + Varsayılan değere sıfırla + Üzgünüz, uygulama çöktü. Geliştiricilere anonim bir hata raporu gönderilecek Sezon %s %d%s Sezon yok @@ -205,13 +205,13 @@ Bölüm bulunamadı Dosyayı sil Sil - \@string/sort_cancel + @string/sort_cancel Durdur Sürdür -30 +30 - %s dosyası tamamen silinecek -\nEmins misiniz\? + %s tamamen silinecek +\nEmin misiniz\? %dm \nkaldı Devam ediyor @@ -236,21 +236,21 @@ Torrentler Belgeseller OVA - Asya dramaları + Asya dizileri Canlı yayınlar - NSFW + +18 Diğerleri Film Dizi Çizgi film - \@string/anime - \@string/ova + @string/anime + @string/ova Torrent Belgesel - Asya draması + Asya dizisi Canlı yayın - NSFW + +18 Video Kaynak hatası Sunucu hatası @@ -259,10 +259,10 @@ İndirme hatası, depolama izinlerini kontrol edin Bölümü Chromecast ile yayınla Bağlantıyı Chromecast ile yayınla - Uygulamada oynat - %s\'deda oynat + Burada oynat + %s üzerinden oynat Tarayıcıda oynat - Linki kopyala + Bağlantıyı kopyala Otomatik indir Şu kaynaktan indir Bağlantıları yenile @@ -281,22 +281,22 @@ Kilitle Yeniden boyutlandır Kaynak - OP\'yi geç + Jeneriği geç Bir daha gösterme Bu güncellemeyi atla Güncelle - Tercih edilen izleme kalitesi - Oynatıcıdaki maksimum başlık karakter sayısı - Oynatıcının üst tarafındaki öğeler + Tercih edilen görüntü kalitesi (WiFi) + Video oynatıcı başlığı karakter üst sınırı + Oynatıcının çözünürlüğü Video arabelleği boyutu Video arabelleği uzunluğu - Diskteki video önbelleği + Hafızadaki video önbelleği Video ve resim önbelleğini temizle - Android TV gibi düşük belleğe sahip cihazlarda çok yükseğe ayarlanırsa çökmelere neden olur. - Çok yükseğe ayarlanırsa, Android TV cihazları gibi düşük depolama alanına sahip sistemlerde sorunlara neden olabilir. - HTTPS üzerinden DNS - ISP bloklarını atlatmak için kullanışlıdır - Klon site + Çok yükseğe ayarlanırsa düşük belleğe sahip cihazlarda çökmelere neden olur (örn. Android TV). + Çok yükseğe ayarlanırsa düşük depolama alanına sahip sistemlerde sorunlara neden olur (örn. Android TV). + HTTPS üzerinden DNS (DoH) + İnternet Servis Sağlayıcısı (İSS) kısıtlamalarını aşmak için kullanışlıdır + Siteyi kopyala Siteyi kaldır Farklı bir URL ile mevcut bir sitenin klonunu ekleyin İndirme konumu @@ -305,16 +305,16 @@ Ekrana sığdır Uzat Yakınlaştır - Disclaimer + Yasal Uyarı legal_notice_key Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them. In case of copyright infringement, please directly contact the responsible parties or the streaming websites. The app is purely for educational and personal use. CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down. CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface. It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use CloudStream 3 at your own risk. Genel - Rastgele butonu - Ana sayfada rastgele butonunu göster + Rastgele İçerik + Ana sayfada rastgele bir film veya dizi seçen bir tuş göster Sağlayıcı dilleri Uygulama düzeni Tercih edilen medya - Desteklenen sağlayıcılarda NSFW\'yi etkinleştir + Desteklenen sağlayıcılarda +18 içeriği etkinleştir Alt yazı kodlaması Sağlayıcılar Düzen @@ -336,7 +336,7 @@ hello@world.com 127.0.0.1 MyCoolSite - example.com + ornek.com Dil kodu (tr) Hiçbiri Normal Hepsi Maksimum Minimum - \@string/none + @string/none Dış hat Çökmüş Gölge @@ -376,7 +376,7 @@ Alt yazı senkronu 1000 ms Alt yazı gecikmesi - Alt yazılar %d ms erken gözüküyorsa bunu kullanın + Alt yazılar %d ms erken görüntüleniyorsa bunu kullanın Alt yazılar %d ms geç gözüküyorsa bunu kullanın Alt yazı gecikmesi yok Pijamalı hasta yağız şoföre çabucak güvendi Önerilen - %s yüklendi + %s eklendi Dosyadan yükle İnternetten yükle İndirilen dosya @@ -422,10 +422,10 @@ Geçersiz veri Geçersiz URL Hata - Alt yazılardan seçmeli alt yazıyı kaldır + Alt yazılardan seçmeli alt yazıyı (CC) kaldır Alt yazılardaki şişkinliği kaldır Tercih edilen medya diline göre filtrele - Ekstralar + Ek içerikler Fragman Yayına bağlan Yönlendiren @@ -433,7 +433,7 @@ Videoları bu dillerde izle Geri Kurulumu atla - Cihazınıza uygun görünümü seçin + Cihazınıza uygun uygulama görünümünü seçin Çökme raporları Ne izlemek istiyorsunuz Bitti @@ -445,7 +445,7 @@ Eklenti silindi %s yüklenemedi +18 - %d %s … indirilmeye başlandı + %d %s indirilmeye başlandı… %d %s indirildi %s\'nin tamamı zaten indirildi Toplu indir @@ -477,7 +477,7 @@ Çökme bilgisini göster Puan: %s Açıklama - Versiyon + Sürüm Durum Boyut Geliştiriciler @@ -499,14 +499,14 @@ Fragmanı oynat Eklenen depolardan henüz yüklenmemiş tüm eklentileri otomatik olarak yükleyin. Güncelleme başladı - Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemele yüklenmezse eski seçeneği deneyin. + Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemeler yüklenmezse eski seçeneği deneyin. Eklentileri otomatik olarak indir APK indirici - Linkler + Bağlantılar Uygulama güncellemeleri Yedek Oynatıcı özellikleri - Altyazılar + Alt yazılar Düzen Varsayılanlar Eklentiler @@ -531,22 +531,22 @@ İzlenenlerden kaldır Karışık son Karışık başlangıç - Kredi + Katkıda Bulunanlar Giriş Eklenti İndirildi - Aksiyonlar - Açma/bitiş için atlama açılır pencerelerini göster + Eylemler + Açılış/bitiş için atlama açılır pencerelerini göster Çok fazla metin. Panoya kaydedilemiyor. Kütüphane Tarayıcı Görünüşe göre kütüphaneniz boş :( -\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize gösteri ekleyin +\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize içerik ekleyin Güvenli mod dosyası bulundu! \nDosya kaldırılana kadar başlangıçta herhangi bir uzantı yüklenmiyor. Sırala Sırala - Güncel (Yeniden Eskiye) - Güncel (Eskiden Yeniye) + Güncellenme (Yeniden Eskiye) + Güncellenme (Eskiden Yeniye) Alfabetik (A\'dan Z’ye) Alfabetik (Z - A) Kütüphane Seçin @@ -554,4 +554,27 @@ Görünüşe göre bu liste boş, başka bir listeye geçmeyi deneyin Derecelendirme (Yüksekten Düşüğe) Derecelendirme (Düşükten Yükseğe) - \ No newline at end of file + Yeniden başlat + Oynatıcı gizlenmişken atlanacak süre + İSS Kısıtlamaları + GitHub\'a ulaşılamadı, jsdelivr vekil sunucusu etkinleştiriliyor. + Başlat + Başarılı oldu + raw.githubusercontent.com vekil sunucusu (proxy) + Tercih edilen görüntü kalitesi (Mobil veri) + Oynatıcı görünürken atlanacak süre + Oynatıcı gizli durumdayken atlanacak süre miktarı + jsdelivr kullanarak GitHub kısıtlamasını kaldırır, güncellemelerin birkaç gün gecikmesine neden olabilir. + Android TV + Yeni bölüm %d yayınlandı! + Sağlayıcıyı kontrol et + Başarısız oldu + Durdur + Geri al + Abone olunan gösteriler güncelleniyor + Abone olunan + %s kanalına abone olundu + %s kanalı aboneliğinden çıkıldı + Günlük + Oynatıcı görünür durumdayken atlanacak süre miktarı + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index a676b583..82527c95 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1,13 +1,13 @@ Постер - Постер епізоду + Постер до епізоду Завантаження скасовано Змінити постачальника Назад Рейтинг: %.1f Актори: %s - Епізод %d буде випущено через + Епізод %d вийде через Poster %s Еп. %d %dд %dгод %dхв @@ -15,16 +15,16 @@ %dхв Головний постер Наступний випадковий - Перегляд фону + Попередній перегляд фону Швидкість (%.2fx) - Нове оновлення знайдено! + Знайдено нове оновлення! \n%s -> %s Пошук Завантаження %d хв - Параметри + Налаштування Пошук… - Пошук %s… + Пошук на %s… Дані відсутні Більше опцій Наступний епізод @@ -37,7 +37,7 @@ Покинуто Переглянути фільм Переглянути трейлер - Переглянути торрент + Трансляція через торрент Повторити підключення… Назад Переглянути епізод @@ -87,13 +87,13 @@ Налаштування субтитрів Chromecast Режим Eigengravy Проведіть пальцем, щоб змінити налаштування - Проведіть пальцем ліворуч або праворуч, щоб змінити яскравість або гучність + Проведіть пальцем вгору або вниз ліворуч або праворуч, щоб змінити яскравість або гучність Відтворення наступного епізоду після закінчення поточного Головна CloudStream Філер Програти в CloudStream - Потік + Трансляція Переглядаю Поділитися Відкладено @@ -121,10 +121,10 @@ Колір тексту Колір контуру Автовідтворення наступного епізоду - Проведіть пальцем ліворуч або праворуч, щоб керувати часом у відеоплеєрі + Проведіть пальцем з боку в бік, щоб керувати своїм положенням у відео %d Бананів для розробників Кнопка зміни розміру плеєра - \@string/home_play + @string/home_play Для коректної роботи цього постачальника може знадобитися VPN Метадані не надаються сайтом, завантаження відео не відбудеться, якщо їх немає на сайті. Картинка в картинці @@ -133,8 +133,8 @@ Проведіть пальцем, щоб перемотати Двічі торкніться, щоб перемотати Двічі торкніться для паузи - Крок перемотки - Натисніть посередині, щоб поставити на паузу + Крок перемотки (Секунди) + Натисніть двічі посередині, щоб призупинити Використовувати яскравість системи Оновити прогрес перегляду Відновлення даних з резервної копії @@ -230,7 +230,7 @@ Показати постери від Kitsu Автоматичне оновлення плагінів Автоматично встановлювати всі ще не встановлені плагіни з доданих репозиторіїв. - Автоматичний пошук нових оновлень при запуску + Автоматично шукати нові оновлення після запуску застосунку. Оновлення до бета-версій Посилання скопійовано в буфер обміну Деякі телефони не підтримують новий інсталятор пакетів. Спробуйте стару версію, якщо оновлення не встановлюються. @@ -255,7 +255,7 @@ Документальні фільми NSFW Фільм - \@string/ova + OVA Торрент Мітка якості NSFW @@ -427,9 +427,9 @@ Вимкнено: %d Не завантажено: %d Оновлено %d плагіни - За замовчуванням в CloudStream не встановлені сайти. Вам потрібно встановити сайти з репозиторіїв. + CloudStream не має жодного сайту, встановленого за замовчуванням. Вам потрібно встановити сайти з репозиторіїв. \n -\nЧерез безмозкий DMCA від Sky UK Limited 🤮 ми не можемо прив\'язати сайт репозиторію в застосунку. +\nЧерез безглузду заявку DMCA від Sky UK Limited 🤮 ми не можемо надати посилання на репозиторій в застосунку. \n \nПриєднуйтесь до нашого Discord або шукайте в інтернеті. Переглянути репозиторії спільноти @@ -453,22 +453,22 @@ MPV Відтворення веб-відео Веб-браузер - Кінець + Ендінґ Коротке повторення Пропустити %s - Змішаний кінець + Змішаний ендінґ Подяки - Опенінг + Опенінґ Вступ Очистити історію Історія - Показувати спливаючі вікна для опенінгу/кінця + Показувати спливаючі вікна для опенінґу/кінця Забагато тексту. Не вдалося зберегти в буфер обміну. Позначити як переглянуте Ви впевнені що хочете вийти\? Так Ні - Установлення оновлення програми… + Встановлення оновлення програми… Не вдалося встановити нову версію програми Старий Інсталятор пакетів @@ -485,9 +485,9 @@ Увімкнено безпечний режим Автори Завантаження оновлення програми… - Усі розширення вимкнено через збій, щоб допомогти вам знайти те, що спричиняє проблеми. + Усі розширення були вимкнені через збій, щоб допомогти вам знайти те, що стало причиною проблеми. Програму не знайдено - Змішаний опенінг + Змішаний опенінґ Видалити з переглянутого За оновленням (від старого до нового) За оновленням (від нового до старого) @@ -497,13 +497,13 @@ Сортувати за За алфавітом (від А до Я) За рейтингом (від низького до високого) - Схоже, ваша бібліотека порожня :( -\nУвійдіть в обліковий запис бібліотеки або додайте серіали до вашої локальної бібліотеки + Ваша бібліотека порожня :( +\nУвійдіть в обліковий запис бібліотеки або додайте фільми до вашої локальної бібліотеки. За алфавітом (від Я до А) Виберіть бібліотеку Відкрити з Браузер - Схоже, цей список порожній, спробуйте перейти до іншого + Цей список порожній. Спробуйте перейти до іншого. Файл безпечного режиму знайдено! \nРозширеня не завантажуються під час запуску, доки файл не буде видалено. Android TV @@ -524,10 +524,9 @@ Відписатися від %s Епізод %d випущено! Повернути - raw.githubusercontent.com -\nProxy - Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr. + raw.githubusercontent.com Proxy + Не вдалося отримати доступ до GitHub. Увімкнення проксі-сервера jsDelivr… Обходи ISP - Обходити блокування GitHub з використанням jsdlitr, може викликати затримку оновлень на кілька днів. + Обхід блокування GitHub за допомогою jsDelivr. Можлива затримка оновлень на кілька днів. Бажана якість перегляду (Мобільні дані) - \ No newline at end of file + diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index f733addc..df2e9a8b 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -230,7 +230,7 @@ سلسلہ کارٹون انیمی - \@string/اووا + اووا ٹورینٹ دستاویزی فلم ایشیائی ڈرامے @@ -356,4 +356,4 @@ %d / 10 اٹھایا اگر سب ٹائٹلز %d ms بہت جلد دکھائے جائیں تو اسے استعمال کریں - \ No newline at end of file + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index db647b5d..f896e5c1 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,5 +1,5 @@ - + %s Tập %d @@ -10,7 +10,7 @@ %dm Poster - \@string/result_poster_img_des + Ảnh bìa Episode Poster Main Poster Next Random @@ -110,7 +110,7 @@ Tiếp tục xem Loại bỏ Thông tin thêm - \@string/home_play + @string/home_play Bạn có thể sẽ cần sử dụng VPN để xem phim này Phim này được chiếu dưới dạng Torrent. Hãy sử dụng VPN để xem Thông tin phim @@ -128,16 +128,16 @@ Chỉnh tốc độ phim Có thể điều chỉnh tốc độ phát phim Vuốt để tua nhanh - Bạn có thể vuốt trái hoặc phải để tua nhanh khi xem phim + Vuốt sang trái hoặc phải để tua video Vuốt để chỉnh độ sáng và âm lượng - Vuốt từ dưới lên trên ở bên trái hoặc phải đều điều chỉnh độ sáng và âm lượng + Vuốt lên hoặc vuốt xuống ở hai bên để điều chỉnh độ sáng và âm lượng Tự động phát tập tiếp theo Phát tập tiếp theo sau khi hết tập hiện tại Nhấn 2 lần để tua Nhấn 2 lần để tạm dừng - Thời lượng tua + Thời lượng tua (Giây) Nhấn 2 lần vào bên trái hoặc bên phải màn hình để tua trước hoặc sau - Nhấn vào giữa để tạm dừng + Nhấn vào giữa hai lần để tạm dừng Sử dụng độ sáng hệ thống Sử dụng độ sáng hệ thống trong trình phát ứng dụng Cập nhật tiến trình xem @@ -163,7 +163,7 @@ Ẩn chất lượng video khi tìm kiếm Tự động cập nhật plugin Hiển thị thông báo cập nhật App - Tự động tìm kiếm và thông báo khi có bản cập nhật mới + Tự động tìm kiếm bản cập nhật mới sau khi khởi động app. Cập nhật phiên bản Beta Tìm kiếm các phiên bản Beta thay vì đợi bản cập nhật chính thức Github @@ -229,7 +229,7 @@ Phim Bộ Hoạt Hình Anime - \@string/ova + OVA Torrent Phim Tài Liệu Truyền Hình Châu Á @@ -260,18 +260,18 @@ Kiểm tra cập nhật Khóa Thu Phóng - Tuỳ chọn - Tua nhanh + Nguồn + Bỏ qua OP Không hiện lại - Bỏ qua + Bỏ qua bản cập nhật này Cập nhật - Tự động chọn chất lượng phim + Chất lượng xem ưu tiên (WiFi) Kí tự tối đa trên tiêu đề - Định dạng trình phát - Dung lượng video cache + Độ phân giải trình phát video + Kích thước bộ nhớ đệm video Thời lượng bộ nhớ đệm - Dung lượng video cache - Xoá hình ảnh và video + Lưu bộ nhớ đệm video trên ổ cứng + Xoá bộ nhớ đệm hình ảnh và video Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng ram thấp như Android TV. Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng lưu trữ thấp như Android TV. DNS over HTTPS @@ -507,7 +507,7 @@ Tải lên (Mới đến Cũ) Tải lên (Cũ đến Mới) Thư viện của bạn đang trống :( -\nHãy đăng nhập vào thư viện hoặc thêm phim vào thư viện cục bộ +\nĐăng nhập vào tài khoản thư viện hoặc thêm phim vào thư viện cục bộ Mở với Siêu dữ liệu không có sẵn, video sẽ không được tải nếu nó không tồn tại trên trang web. PackageInstaller @@ -516,7 +516,32 @@ Xếp hạng (Thấp đến Cao) Chữ cái (Z đến A) Sắp xếp - Có vẻ như danh sách này trống, hãy thử chuyển sang danh sách khác + Danh sách này trống, hãy thử chuyển sang danh sách khác. Chữ cái (A đến Z) Chọn Thư viện - \ No newline at end of file + Nhật ký + Chất lượng xem ưu tiên (Dữ liệu di động) + Thất bại + Thành công + Bắt đầu + Kiểm tra nguồn phim + raw.githubusercontent.com Proxy + Không thể kết nối được tới GitHub. Đang bật jsDelivr proxy… + Android TV + Khởi động lại + Đã đăng kí %s + Tập %d đã ra mắt! + Đã đăng kí + Dừng + Bỏ qua ISP + Đã bỏ đăng ký %s + Tìm thấy tệp Safe mode! +\nKhông tải bất cứ tiện ích nào khi khởi dộng cho đến khi tệp bị xoá + Trở lại + Đang cập nhật các phim đã đăng kí + Bỏ qua chặn GitHub bằng cách dùng jsDelivr. Có thể gây ra việc cập nhật bị chậm vài ngày + Lượng tua thêm được sử dụng khi trình phát ẩn + Lượng tua thêm + Lượng tua thêm được sử dụng khi trình phát hiện lên + Lượng tua thêm + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8a10208a..1fd01d8a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,5 +1,5 @@ - + %d %s | %s %s • %s @@ -23,9 +23,9 @@ 劇集封面 主封面 隨機下一個 - \@string/play_episode + @string/play_episode 返回 - \@string/home_change_provider_img_des + @string/home_change_provider_img_des 更改片源 預覽背景 @@ -46,7 +46,7 @@ 無資料 更多選項 下一集 - \@string/synopsis + @string/synopsis 類型 分享 在瀏覽器中打開 @@ -123,7 +123,7 @@ 繼續觀看 移除 更多資訊 - \@string/home_play + @string/home_play 此片源可能需要 VPN 才能正常使用 此片源是種子,建議使用 VPN 站點不提供元數據,如果站點上不存在元數據,影片載入將失敗。 @@ -142,14 +142,14 @@ 播放速度 在播放器中添加播放速度選項 活動控制進度 - 左右滑動控制播放進度 + 從一側滑動到另一側以控制影片中的位置 滑動更改設定 上下滑動更改亮度或音量 自動播放下一集 播放完畢後播放下一集 輕按兩下以控制進度 輕按兩下以暫停 - 輕按兩下以控制進度時間 + 輕按兩下以控制進度時間(秒) 在右側或左側輕按兩次以向前或向後快轉 輕按兩下中間以暫停 使用系統亮度 @@ -177,7 +177,7 @@ 在搜尋結果中隱藏選中的影片畫質 自動更新外掛程式 顯示應用更新 - 啟動時自動搜尋更新 + 啟動應用程式後自動搜尋更新。 更新至預覽版 搜尋預覽版更新而不是僅搜尋正式版 Github @@ -205,7 +205,7 @@ 未找到劇集 刪除文件 刪除 - \@string/sort_cancel + @string/sort_cancel 暫停 繼續 -30 @@ -244,8 +244,8 @@ 電影 電視劇 卡通 - \@string/anime - \@string/ova + 動畫 + OVA 種子 紀錄片 亞洲劇 @@ -285,7 +285,7 @@ 不再顯示 跳過此更新 更新 - 偏好播放畫質 + 偏好播放畫質 (WiFi) 影片播放器標題最大字數 影片播放器標題 影片緩衝大小 @@ -368,7 +368,7 @@ 全部 最大 最小 - \@string/none + @string/none 輪廓 凹陷 陰影 @@ -534,4 +534,47 @@ 外觀 功能 瀏覽器 - \ No newline at end of file + 第 %d 集已發行! + 媒體庫 + 開始 + 播放器顯示 - 快轉快退秒數 + 開啟方式 + 應用程式將在關閉時更新 + 評分(從低到高) + 更新開始 + 外掛程式已下載 + 從觀看中刪除 + 排序方式 + 排序 + 評分(從高到低) + 播放器可見時使用的快轉快退秒數 + 播放器隱藏 - 快轉快退秒數 + 更新(從新到舊) + 更新(從舊到新) + 按字母順序(A 到 Z) + 按字母順序(Z 到 A) + 選擇媒體庫 + 找到安全模式檔案! +\n在刪除檔案之前不在啟動時載入任何擴充功能。 + 日誌 + 失敗 + 通過 + 播放器隱藏時使用的快轉快退秒數 + Android TV + 片源測試 + 重新啟動 + 停止 + 訂閱 + 已訂閱 %s + 已取消訂閱 %s + 偏好播放畫質 (行動數據) + raw.githubusercontent.com Proxy + 繞過 ISP + 還原 + 無法訪問 GitHub。 正在開啟 jsDelivr proxy… + 使用 jsDelivr 繞過 GitHub 的阻擋。 可能導致更新延遲幾天。 + 您的媒體庫是空的:( +\n登入媒體庫帳戶或將節目添加到您本機的媒體庫。 + 此列表是空的。 嘗試切換到另一個。 + 正在更新訂閱節目 + diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 626cc0fe..dbd96827 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1,5 +1,5 @@ - + %d %s | %s %s • %s @@ -23,9 +23,9 @@ 剧集封面 主封面 随机下一个 - \@string/play_episode + @string/play_episode 返回 - \@string/home_change_provider_img_des + @string/home_change_provider_img_des 更改片源 预览背景 @@ -46,7 +46,7 @@ 无数据 更多选项 下一集 - \@string/synopsis + @string/synopsis 类型 分享 在浏览器中打开 @@ -123,7 +123,7 @@ 继续观看 移除 更多信息 - \@string/home_play + @string/home_play 此片源可能需要 VPN 才能正常使用 此片源为种子文件,建议使用 VPN 站点不提供元数据,如果站点上不存在元数据,视频加载将失败。 @@ -142,14 +142,14 @@ 倍速模式 在播放器中添加播放速度选项 滑动控制进度 - 左右滑动控制播放进度 + 左右滑动以控制视频中的位置 滑动更改设置 上下滑动修改亮度或音量 自动播放下一集 播放完毕后播放下一集 双击控制进度 双击暂停 - 双击控制进度时间 + 双击控制进度时间 (秒) 在左右侧双击快进或快退 双击中间暂停 使用系统亮度 @@ -178,7 +178,7 @@ 自动更新插件 自动下载插件 显示应用更新 - 启动时自动搜索更新 + 启动应用后自动搜索更新。 更新至预览版 搜索预览版更新替代仅搜索完整版本 Github @@ -206,7 +206,7 @@ 未找到剧集 删除文件 删除 - \@string/sort_cancel + @string/sort_cancel 暂停 继续 -30 @@ -245,8 +245,8 @@ 电影 电视剧 卡通 - \@string/anime - \@string/ova + 动漫 + OVA 种子 纪录片 亚洲剧 @@ -286,7 +286,7 @@ 不再显示 跳过此更新 更新 - 首选播放画质 + 首选播放画质(WiFi) 视频播放器标题最多字符 视频播放器标题 视频缓冲大小 @@ -369,7 +369,7 @@ 全部 最大 最小 - \@string/none + @string/none 轮廓 凹陷 阴影 @@ -551,9 +551,9 @@ 字母排序(从 Z 到 A) 选择库 打开方式 - 看来您的库是空的 :( -\n登录库账户或添加节目到您的本地库 - 看来此列表是空的,请尝试切换到另一个 + 您的库是空的 :( +\n登录库账户或添加节目到您的本地库。 + 此列表是空的,请尝试切换到另一个。 播放器显示 - 快进快退秒数 播放器可见时使用的快进快退秒数 播放器隐藏 - 快进快退秒数 @@ -572,8 +572,9 @@ 成功 日志 raw.githubusercontent.com 代理 - 连接 Github 失败,正在启用 jsdelivr 代理。 - 使用 jsdelivr 绕过对 Github 的封锁,可能导致更新延迟几天。 + 无法访问 GitHub。正在开启 jsDelivr 代理… + 使用 jsDelivr 绕过 GitHub 的封锁。可能会延迟几天的更新。 ISP 绕过 还原 - \ No newline at end of file + 首选播放画质(移动数据) + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 25400934..fbaecd2e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -210,17 +210,17 @@ Eigengravy Mode Adds a speed option in the player Swipe to seek - Swipe left or right to control time in the videoplayer + Swipe from side to side to control your position in a video Swipe to change settings - Swipe on the left or right side to change brightness or volume + Slide up or down on the left or right side to change brightness or volume Autoplay next episode Start the next episode when the current one ends Double tap to seek Double tap to pause - Player seek amount + Player seek amount (Seconds) Tap twice on the right or left side to seek forwards or backwards - Tap in the middle to pause + Tap twice in the middle to pause Use system brightness Use system brightness in the app player instead of a dark overlay @@ -251,7 +251,7 @@ Automatically download plugins Automatically install all not yet installed plugins from added repositories. Show app updates - Automatically search for new updates on start + Automatically search for new updates after starting the app. Redo setup process Update to prereleases Search for prerelease updates instead of full releases only @@ -324,8 +324,8 @@ Movie Series Cartoon - @string/anime - @string/ova + Anime + OVA Torrent Documentary Asian Drama @@ -382,8 +382,8 @@ DNS over HTTPS Useful for bypassing ISP blocks raw.githubusercontent.com Proxy - Failed to reach GitHub, enabling jsdelivr proxy. - Bypasses blocking of GitHub using jsdelivr, may cause updates to be delayed by few days. + Could not reach GitHub. Turning on jsDelivr proxy… + Bypasses blocking of GitHub using jsDelivr. May cause updates to be delayed by few days. Clone site Remove site Add a clone of an existing site, with a different URL @@ -648,8 +648,9 @@ Alphabetical (Z to A) Select Library Open with - Looks like your library is empty :(\nLogin to a library account or add shows to your local library - Looks like this list is empty, try switching to another one + Your library is empty :( +\nLog in on a library account or add shows to your local library. + This list is empty. Try switching to another one. Safe mode file found!\nNot loading any extensions on startup until file is removed. Revert Updating subscribed shows diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 78c62c69..b9648162 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -40,7 +40,6 @@ ?attr/textColor ?attr/grayTextColor - ?attr/grayTextColor ?attr/grayTextColor ?attr/textColor