mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Merge branch 'master' of https://github.com/LagradOst/CloudStream-3
This commit is contained in:
commit
9360e90a96
14 changed files with 1287 additions and 478 deletions
|
@ -100,6 +100,7 @@ object APIHolder {
|
|||
OpenVidsProvider(),
|
||||
IdlixProvider(),
|
||||
MultiplexProvider(),
|
||||
VidSrcProvider(),
|
||||
|
||||
// Metadata providers
|
||||
//TmdbProvider(),
|
||||
|
|
|
@ -92,7 +92,9 @@ class GogoanimeProvider : MainAPI() {
|
|||
secretDecryptKey: String?,
|
||||
// This could be removed, but i prefer it verbose
|
||||
isUsingAdaptiveKeys: Boolean,
|
||||
isUsingAdaptiveData: Boolean
|
||||
isUsingAdaptiveData: Boolean,
|
||||
// If you don't want to re-fetch the document
|
||||
iframeDocument: Document? = null
|
||||
) = safeApiCall {
|
||||
// https://github.com/saikou-app/saikou/blob/3e756bd8e876ad7a9318b17110526880525a5cd3/app/src/main/java/ani/saikou/anime/source/extractors/GogoCDN.kt
|
||||
// No Licence on the following code
|
||||
|
@ -104,9 +106,9 @@ class GogoanimeProvider : MainAPI() {
|
|||
|
||||
val id = Regex("id=([^&]+)").find(iframeUrl)!!.value.removePrefix("id=")
|
||||
|
||||
var document: Document? = null
|
||||
var document: Document? = iframeDocument
|
||||
val foundIv =
|
||||
iv ?: app.get(iframeUrl).document.also { document = it }
|
||||
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
|
||||
|
|
|
@ -50,12 +50,12 @@ class MonoschinosProvider : MainAPI() {
|
|||
HomePageList(
|
||||
"Capítulos actualizados",
|
||||
app.get(mainUrl, timeout = 120).document.select(".col-6").map {
|
||||
val title = it.selectFirst("p.animetitles")!!.text()
|
||||
val title = it.selectFirst("p.animetitles")?.text() ?: it.selectFirst(".animetitles")?.text() ?: ""
|
||||
val poster = it.selectFirst(".animeimghv")!!.attr("data-src")
|
||||
val epRegex = Regex("episodio-(\\d+)")
|
||||
val url = it.selectFirst("a")?.attr("href")!!.replace("ver/", "anime/")
|
||||
.replace(epRegex, "sub-espanol")
|
||||
val epNum = it.selectFirst(".positioning h5")?.text()?.toIntOrNull()
|
||||
val epNum = (it.selectFirst(".positioning h5")?.text() ?: it.selectFirst("div.positioning p")?.text())?.toIntOrNull()
|
||||
newAnimeSearchResponse(title, url) {
|
||||
this.posterUrl = fixUrl(poster)
|
||||
addDubStatus(getDubStatus(title), epNum)
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
package com.lagradost.cloudstream3.movieproviders
|
||||
|
||||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.animeproviders.GogoanimeProvider.Companion.extractVidstream
|
||||
import com.lagradost.cloudstream3.extractors.XStreamCdn
|
||||
import com.lagradost.cloudstream3.extractors.helper.AsianEmbedHelper
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.loadExtractor
|
||||
|
||||
|
@ -19,25 +15,23 @@ class DramaSeeProvider : MainAPI() {
|
|||
override val supportedTypes = setOf(TvType.AsianDrama)
|
||||
|
||||
override suspend fun getMainPage(): HomePageResponse {
|
||||
val headers = mapOf("X-Requested-By" to "dramasee.net")
|
||||
val headers = mapOf("X-Requested-By" to mainUrl)
|
||||
val document = app.get(mainUrl, headers = headers).document
|
||||
val mainbody = document.getElementsByTag("body")
|
||||
|
||||
return HomePageResponse(
|
||||
mainbody?.select("section")?.map { row ->
|
||||
val main = row?.select("main") ?: return@map null
|
||||
val title = main.select("div.title > div > h2")?.text() ?: "Main"
|
||||
val inner = main.select("li.series-item") ?: return@map null
|
||||
mainbody.select("section.block_area.block_area_home")?.map { main ->
|
||||
val title = main.select("h2.cat-heading").text() ?: "Main"
|
||||
val inner = main.select("div.flw-item") ?: return@map null
|
||||
|
||||
HomePageList(
|
||||
title,
|
||||
inner.mapNotNull {
|
||||
// Get inner div from article
|
||||
val innerBody = it?.selectFirst("a")
|
||||
// Fetch details
|
||||
val link = fixUrlNull(innerBody?.attr("href")) ?: return@mapNotNull null
|
||||
val image = fixUrlNull(innerBody?.select("img")?.attr("src")) ?: ""
|
||||
val name = it?.selectFirst("a.series-name")?.text() ?: "<Untitled>"
|
||||
val image = fixUrlNull(it.select("img").attr("data-src")) ?: ""
|
||||
val name = innerBody?.attr("title") ?: "<Untitled>"
|
||||
//Log.i(this.name, "Result => (innerBody, image) ${innerBody} / ${image}")
|
||||
MovieSearchResponse(
|
||||
name,
|
||||
|
@ -55,20 +49,17 @@ class DramaSeeProvider : MainAPI() {
|
|||
|
||||
override suspend fun search(query: String): List<SearchResponse> {
|
||||
val url = "$mainUrl/search?q=$query"
|
||||
val html = app.get(url).document
|
||||
val document = html.getElementsByTag("body")
|
||||
.select("section > main > ul.series > li") ?: return listOf()
|
||||
val document = app.get(url).document
|
||||
val posters = document.select ("div.film-poster")
|
||||
|
||||
return document.mapNotNull {
|
||||
if (it == null) {
|
||||
return@mapNotNull null
|
||||
}
|
||||
val innerA = it.select("a.series-img") ?: return@mapNotNull null
|
||||
|
||||
return posters.mapNotNull {
|
||||
val innerA = it.select("a") ?: return@mapNotNull null
|
||||
val link = fixUrlNull(innerA.attr("href")) ?: return@mapNotNull null
|
||||
val title = it.select("a.series-name")?.text() ?: return@mapNotNull null
|
||||
val year = null
|
||||
val imgsrc = innerA.select("img")?.attr("src") ?: return@mapNotNull null
|
||||
val image = fixUrlNull(imgsrc)
|
||||
val title = innerA.attr("title") ?: return@mapNotNull null
|
||||
val year = Regex(""".*\((\d{4})\)""").find(title)?.groupValues?.getOrNull(1)?.toIntOrNull()
|
||||
val imgSrc = it.select("img")?.attr("data-src") ?: return@mapNotNull null
|
||||
val image = fixUrlNull(imgSrc)
|
||||
|
||||
MovieSearchResponse(
|
||||
name = title,
|
||||
|
@ -84,12 +75,12 @@ class DramaSeeProvider : MainAPI() {
|
|||
override suspend fun load(url: String): LoadResponse {
|
||||
val doc = app.get(url).document
|
||||
val body = doc.getElementsByTag("body")
|
||||
val inner = body?.select("div.series-info")
|
||||
val inner = body?.select("div.anis-content")
|
||||
|
||||
// Video details
|
||||
val poster = fixUrlNull(inner?.select("div.img > img")?.attr("src")) ?: ""
|
||||
val poster = fixUrlNull(inner?.select("img.film-poster-img")?.attr("src")) ?: ""
|
||||
//Log.i(this.name, "Result => (imgLinkCode) ${imgLinkCode}")
|
||||
val title = inner?.select("h1.series-name")?.text() ?: ""
|
||||
val title = inner?.select("h2.film-name.dynamic-name")?.text() ?: ""
|
||||
val year = if (title.length > 5) {
|
||||
title.substring(title.length - 5)
|
||||
.trim().trimEnd(')').toIntOrNull()
|
||||
|
@ -97,15 +88,14 @@ class DramaSeeProvider : MainAPI() {
|
|||
null
|
||||
}
|
||||
//Log.i(this.name, "Result => (year) ${title.substring(title.length - 5)}")
|
||||
val seriesBody = body?.select("div.series-body")
|
||||
val descript = seriesBody?.firstOrNull()?.select("div.js-content")?.text()
|
||||
val tags = seriesBody?.select("div.series-tags > a")
|
||||
val descript = body?.firstOrNull()?.select("div.film-description.m-hide")?.text()
|
||||
val tags = inner?.select("div.item.item-list > a")
|
||||
?.mapNotNull { it?.text()?.trim() ?: return@mapNotNull null }
|
||||
val recs = body?.select("ul.series > li")?.mapNotNull {
|
||||
val a = it.select("a.series-img") ?: return@mapNotNull null
|
||||
val recs = body.select("div.flw-item")?.mapNotNull {
|
||||
val a = it.select("a") ?: return@mapNotNull null
|
||||
val aUrl = fixUrlNull(a.attr("href")) ?: return@mapNotNull null
|
||||
val aImg = fixUrlNull(a.select("img")?.attr("src"))
|
||||
val aName = a.select("img")?.attr("alt") ?: return@mapNotNull null
|
||||
val aImg = fixUrlNull(it.select("img")?.attr("data-src"))
|
||||
val aName = a.attr("title") ?: return@mapNotNull null
|
||||
val aYear = aName.trim().takeLast(5).removeSuffix(")").toIntOrNull()
|
||||
MovieSearchResponse(
|
||||
url = aUrl,
|
||||
|
@ -118,40 +108,41 @@ class DramaSeeProvider : MainAPI() {
|
|||
}
|
||||
|
||||
// Episodes Links
|
||||
val episodeList = ArrayList<Episode>()
|
||||
body?.select("ul.episodes > li")?.forEach { ep ->
|
||||
val innerA = ep.select("a") ?: return@forEach
|
||||
val count = innerA.select("span.episode")?.text()?.toIntOrNull() ?: 0
|
||||
val epLink = fixUrlNull(innerA.attr("href")) ?: return@forEach
|
||||
//Log.i(this.name, "Result => (epLink) ${epLink}")
|
||||
if (epLink.isNotBlank()) {
|
||||
// Fetch video links
|
||||
val epVidLinkEl = app.get(epLink, referer = mainUrl).document
|
||||
val ajaxUrl = epVidLinkEl.select("div#js-player")?.attr("embed")
|
||||
//Log.i(this.name, "Result => (ajaxUrl) ${ajaxUrl}")
|
||||
if (!ajaxUrl.isNullOrEmpty()) {
|
||||
val innerPage = app.get(fixUrl(ajaxUrl), referer = epLink).document
|
||||
val listOfLinks = mutableListOf<String>()
|
||||
innerPage.select("div.player.active > main > div")?.forEach { em ->
|
||||
val href = fixUrlNull(em.attr("src")) ?: ""
|
||||
if (href.isNotBlank()) {
|
||||
listOfLinks.add(href)
|
||||
}
|
||||
}
|
||||
val episodeUrl = body.select("a.btn.btn-radius.btn-primary.btn-play").attr("href")
|
||||
val episodeDoc = app.get(episodeUrl).document
|
||||
|
||||
//Log.i(this.name, "Result => (listOfLinks) ${listOfLinks.toJson()}")
|
||||
episodeList.add(
|
||||
Episode(
|
||||
name = null,
|
||||
season = null,
|
||||
episode = count,
|
||||
data = listOfLinks.distinct().toJson(),
|
||||
posterUrl = poster,
|
||||
date = null
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val episodeList = episodeDoc.select("div.ss-list.ss-list-min > a").mapNotNull { ep ->
|
||||
val episodeNumber = ep.attr("data-number").toIntOrNull()
|
||||
val epLink = fixUrlNull(ep.attr("href")) ?: return@mapNotNull null
|
||||
|
||||
// if (epLink.isNotBlank()) {
|
||||
// // Fetch video links
|
||||
// val epVidLinkEl = app.get(epLink, referer = mainUrl).document
|
||||
// val ajaxUrl = epVidLinkEl.select("div#js-player")?.attr("embed")
|
||||
// //Log.i(this.name, "Result => (ajaxUrl) ${ajaxUrl}")
|
||||
// if (!ajaxUrl.isNullOrEmpty()) {
|
||||
// val innerPage = app.get(fixUrl(ajaxUrl), referer = epLink).document
|
||||
// val listOfLinks = mutableListOf<String>()
|
||||
// innerPage.select("div.player.active > main > div")?.forEach { em ->
|
||||
// val href = fixUrlNull(em.attr("src")) ?: ""
|
||||
// if (href.isNotBlank()) {
|
||||
// listOfLinks.add(href)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// //Log.i(this.name, "Result => (listOfLinks) ${listOfLinks.toJson()}")
|
||||
//
|
||||
// }
|
||||
// }
|
||||
Episode(
|
||||
name = null,
|
||||
season = null,
|
||||
episode = episodeNumber,
|
||||
data = epLink,
|
||||
posterUrl = null,
|
||||
date = null
|
||||
)
|
||||
}
|
||||
|
||||
//If there's only 1 episode, consider it a movie.
|
||||
|
@ -161,7 +152,7 @@ class DramaSeeProvider : MainAPI() {
|
|||
url = url,
|
||||
apiName = this.name,
|
||||
type = TvType.Movie,
|
||||
dataUrl = episodeList[0].data,
|
||||
dataUrl = episodeList.first().data,
|
||||
posterUrl = poster,
|
||||
year = year,
|
||||
plot = descript,
|
||||
|
@ -174,7 +165,7 @@ class DramaSeeProvider : MainAPI() {
|
|||
url = url,
|
||||
apiName = this.name,
|
||||
type = TvType.AsianDrama,
|
||||
episodes = episodeList.reversed(),
|
||||
episodes = episodeList,
|
||||
posterUrl = poster,
|
||||
year = year,
|
||||
plot = descript,
|
||||
|
@ -189,33 +180,37 @@ class DramaSeeProvider : MainAPI() {
|
|||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
): Boolean {
|
||||
var count = 0
|
||||
mapper.readValue<List<String>>(data).apmap { item ->
|
||||
if (item.isNotEmpty()) {
|
||||
count++
|
||||
val url = fixUrl(item.trim())
|
||||
//Log.i(this.name, "Result => (url) ${url}")
|
||||
when {
|
||||
url.startsWith("https://asianembed.io") || url.startsWith("https://asianload.io") -> {
|
||||
val iv = "9262859232435825"
|
||||
val secretKey = "93422192433952489752342908585752"
|
||||
extractVidstream(url, this.name, callback, iv, secretKey, secretKey,
|
||||
isUsingAdaptiveKeys = false,
|
||||
isUsingAdaptiveData = false
|
||||
)
|
||||
AsianEmbedHelper.getUrls(url, callback)
|
||||
}
|
||||
url.startsWith("https://embedsito.com") -> {
|
||||
val extractor = XStreamCdn()
|
||||
extractor.domainUrl = "embedsito.com"
|
||||
extractor.getSafeUrl(url)?.forEach(callback)
|
||||
}
|
||||
else -> {
|
||||
loadExtractor(url, mainUrl, callback)
|
||||
}
|
||||
println("DATATATAT $data")
|
||||
|
||||
val document = app.get(data).document
|
||||
val iframeUrl = document.select("iframe").attr("src")
|
||||
val iframe = app.get(iframeUrl)
|
||||
val iframeDoc = iframe.document
|
||||
|
||||
argamap({
|
||||
iframeDoc.select(".list-server-items > .linkserver")
|
||||
.forEach { element ->
|
||||
val status = element.attr("data-status") ?: return@forEach
|
||||
if (status != "1") return@forEach
|
||||
val extractorData = element.attr("data-video") ?: return@forEach
|
||||
loadExtractor(extractorData, iframe.url, callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
return count > 0
|
||||
}, {
|
||||
val iv = "9262859232435825"
|
||||
val secretKey = "93422192433952489752342908585752"
|
||||
val secretDecryptKey = "93422192433952489752342908585752"
|
||||
extractVidstream(
|
||||
iframe.url,
|
||||
this.name,
|
||||
callback,
|
||||
iv,
|
||||
secretKey,
|
||||
secretDecryptKey,
|
||||
isUsingAdaptiveKeys = false,
|
||||
isUsingAdaptiveData = true,
|
||||
iframeDocument = iframeDoc
|
||||
)
|
||||
})
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
package com.lagradost.cloudstream3.movieproviders
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import com.lagradost.cloudstream3.utils.*
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.loadExtractor
|
||||
import org.jsoup.Jsoup
|
||||
import org.jsoup.select.Elements
|
||||
|
||||
|
@ -90,7 +87,7 @@ class FilmanProvider : MainAPI() {
|
|||
val document = Jsoup.parse(response)
|
||||
val documentTitle = document.select("title").text().trim()
|
||||
|
||||
if (documentTitle.startsWith("Logowanie")){
|
||||
if (documentTitle.startsWith("Logowanie")) {
|
||||
throw RuntimeException("This page seems to be locked behind a login-wall on the website, unable to scrape it. If it is not please report it.")
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.movieproviders
|
|||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.LoadResponse.Companion.addActors
|
||||
import com.lagradost.cloudstream3.network.cookies
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.getQualityFromName
|
||||
|
@ -22,6 +23,8 @@ class TheFlixToProvider : MainAPI() {
|
|||
TvType.TvSeries,
|
||||
)
|
||||
|
||||
|
||||
|
||||
data class HomeJson(
|
||||
@JsonProperty("props") val props: HomeProps = HomeProps(),
|
||||
)
|
||||
|
@ -92,9 +95,54 @@ class TheFlixToProvider : MainAPI() {
|
|||
@JsonProperty("conversionDate") val conversionDate: String? = null,
|
||||
@JsonProperty("id") val id: Int? = null,
|
||||
@JsonProperty("available") val available: Boolean? = null,
|
||||
@JsonProperty("videos" ) val videos : ArrayList<String>? = arrayListOf(),
|
||||
)
|
||||
|
||||
|
||||
private suspend fun getCookies(): Map<String, String> {
|
||||
// val cookieResponse = app.post(
|
||||
// "https://theflix.to:5679/authorization/session/continue?contentUsageType=Viewing",
|
||||
// headers = mapOf(
|
||||
// "Host" to "theflix.to:5679",
|
||||
// "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0",
|
||||
// "Accept" to "application/json, text/plain,"
|
||||
// "Accept-Language" to "en-US,en;q=0.5",
|
||||
// "Content-Type" to "application/json;charset=utf-8",
|
||||
// "Content-Length" to "35",
|
||||
// "Origin" to "https://theflix.to",
|
||||
// "DNT" to "1",
|
||||
// "Connection" to "keep-alive",
|
||||
// "Referer" to "https://theflix.to/",
|
||||
// "Sec-Fetch-Dest" to "empty",
|
||||
// "Sec-Fetch-Mode" to "cors",
|
||||
// "Sec-Fetch-Site" to "same-site",)).okhttpResponse.headers.values("Set-Cookie")
|
||||
|
||||
val cookies = app.post(
|
||||
"$mainUrl:5679/authorization/session/continue?contentUsageType=Viewing",
|
||||
headers = mapOf(
|
||||
"Host" to "theflix.to:5679",
|
||||
"User-Agent" to USER_AGENT,
|
||||
"Accept" to "application/json, text/plain, */*",
|
||||
"Accept-Language" to "en-US,en;q=0.5",
|
||||
"Content-Type" to "application/json;charset=utf-8",
|
||||
"Content-Length" to "35",
|
||||
"Origin" to mainUrl,
|
||||
"DNT" to "1",
|
||||
"Connection" to "keep-alive",
|
||||
"Referer" to mainUrl,
|
||||
"Sec-Fetch-Dest" to "empty",
|
||||
"Sec-Fetch-Mode" to "cors",
|
||||
"Sec-Fetch-Site" to "same-site",)
|
||||
).cookies
|
||||
/* val cookieRegex = Regex("(theflix\\..*?id\\=[a-zA-Z0-9]{0,8}[a-zA-Z0-9_-]+)")
|
||||
val findcookie = cookieRegex.findAll(cookieResponse.toString()).map { it.value }.toList()
|
||||
val cookiesstring = findcookie.toString().replace(", ","; ").replace("[","").replace("]","")
|
||||
val cookiesmap = mapOf("Cookie" to cookiesstring) */
|
||||
latestCookies = cookies
|
||||
return latestCookies
|
||||
}
|
||||
|
||||
|
||||
override suspend fun getMainPage(): HomePageResponse {
|
||||
val items = ArrayList<HomePageList>()
|
||||
val doc = app.get(mainUrl).document
|
||||
|
@ -131,7 +179,7 @@ class TheFlixToProvider : MainAPI() {
|
|||
if (type?.contains("TV") == true) TvType.TvSeries else TvType.Movie
|
||||
val link =
|
||||
if (typeinfo == TvType.Movie) "$mainUrl/movie/${info.id}-${cleanTitle(title)}"
|
||||
else "$mainUrl/tv-show/${info.id}-${cleanTitle(title)}/season-1/episode-1"
|
||||
else "$mainUrl/tv-show/${info.id}-${cleanTitle(title).replace("?","")}/season-1/episode-1"
|
||||
TvSeriesSearchResponse(
|
||||
title,
|
||||
link,
|
||||
|
@ -226,67 +274,53 @@ class TheFlixToProvider : MainAPI() {
|
|||
}
|
||||
return search
|
||||
}
|
||||
|
||||
|
||||
data class LoadMain(
|
||||
@JsonProperty("props") val props: LoadProps = LoadProps(),
|
||||
@JsonProperty("page") var page: String? = null,
|
||||
//@JsonProperty("query") val query: Query? = Query(),
|
||||
@JsonProperty("buildId") val buildId: String? = null,
|
||||
@JsonProperty("runtimeConfig") val runtimeConfig: RuntimeConfig? = RuntimeConfig(),
|
||||
@JsonProperty("isFallback") val isFallback: Boolean? = null,
|
||||
@JsonProperty("customServer") val customServer: Boolean? = null,
|
||||
@JsonProperty("appGip") val appGip: Boolean? = null
|
||||
data class LoadMain (
|
||||
@JsonProperty("props" ) val props : LoadProps? = LoadProps(),
|
||||
@JsonProperty("page" ) val page : String? = null,
|
||||
@JsonProperty("buildId" ) val buildId : String? = null,
|
||||
@JsonProperty("runtimeConfig" ) val runtimeConfig : RuntimeConfig? = RuntimeConfig(),
|
||||
@JsonProperty("isFallback" ) val isFallback : Boolean? = null,
|
||||
@JsonProperty("gssp" ) val gssp : Boolean? = null,
|
||||
@JsonProperty("customServer" ) val customServer : Boolean? = null,
|
||||
@JsonProperty("appGip" ) val appGip : Boolean? = null
|
||||
)
|
||||
|
||||
data class RuntimeConfig(
|
||||
@JsonProperty("AddThisService") val AddThisService: AddThisService? = AddThisService(),
|
||||
//@JsonProperty("Application") val Application: Application? = Application(),
|
||||
//@JsonProperty("Content") val Content: Content? = Content(),
|
||||
//@JsonProperty("GtmService") val GtmService: GtmService? = GtmService(),
|
||||
//@JsonProperty("IptvChannels") val IptvChannels: IptvChannels? = IptvChannels(),
|
||||
//@JsonProperty("Notifications") val Notifications: Notifications? = Notifications(),
|
||||
//@JsonProperty("Payments") val Payments: Payments? = Payments(),
|
||||
//@JsonProperty("Redux") val Redux: Redux? = Redux(),
|
||||
//@JsonProperty("Search") val Search: Search? = Search(),
|
||||
@JsonProperty("Services") val Services: Services? = Services(),
|
||||
//@JsonProperty("Sitemap") val Sitemap: Sitemap? = Sitemap(),
|
||||
//@JsonProperty("Support") val Support: Support? = Support(),
|
||||
@JsonProperty("Videos") val Videos: Videos? = Videos()
|
||||
data class LoadProps (
|
||||
@JsonProperty("pageProps" ) val pageProps : LoadPageProps? = LoadPageProps(),
|
||||
@JsonProperty("__N_SSP" ) val _NSSP : Boolean? = null
|
||||
)
|
||||
|
||||
|
||||
data class Server(
|
||||
@JsonProperty("Url") var Url: String? = null
|
||||
)
|
||||
|
||||
data class Services(
|
||||
|
||||
@JsonProperty("Server") val Server: Server? = Server(),
|
||||
@JsonProperty("TmdbServer") val TmdbServer: Server? = Server()
|
||||
|
||||
)
|
||||
|
||||
data class AddThisService(
|
||||
@JsonProperty("PublicId") val PublicId: String? = null
|
||||
)
|
||||
|
||||
data class LoadProps(
|
||||
@JsonProperty("pageProps") val pageProps: LoadPageProps = LoadPageProps(),
|
||||
)
|
||||
|
||||
data class LoadPageProps(
|
||||
@JsonProperty("selectedTv") val selectedTv: TheFlixMetadata? = TheFlixMetadata(),
|
||||
data class LoadPageProps (
|
||||
@JsonProperty("selectedTv" ) val selectedTv : TheFlixMetadata? = TheFlixMetadata(),
|
||||
@JsonProperty("movie") val movie: TheFlixMetadata? = TheFlixMetadata(),
|
||||
@JsonProperty("videoUrl") val videoUrl: String? = null,
|
||||
@JsonProperty("recommendationsList") val recommendationsList: RecommendationsList? = RecommendationsList(),
|
||||
@JsonProperty("recommendationsList" ) val recommendationsList : RecommendationsList? = RecommendationsList(),
|
||||
@JsonProperty("basePageSegments" ) val basePageSegments : ArrayList<String>? = arrayListOf()
|
||||
)
|
||||
|
||||
data class Genres(
|
||||
@JsonProperty("name") val name: String,
|
||||
@JsonProperty("id") val id: Int? = null
|
||||
data class TheFlixMetadata (
|
||||
@JsonProperty("episodeRuntime" ) val episodeRuntime : Int? = null,
|
||||
@JsonProperty("name" ) val name : String? = null,
|
||||
@JsonProperty("numberOfSeasons" ) val numberOfSeasons : Int? = null,
|
||||
@JsonProperty("numberOfEpisodes" ) val numberOfEpisodes : Int? = null,
|
||||
@JsonProperty("originalLanguage" ) val originalLanguage : String? = null,
|
||||
@JsonProperty("popularity" ) val popularity : Double? = null,
|
||||
@JsonProperty("status" ) val status : String? = null,
|
||||
@JsonProperty("voteAverage" ) val voteAverage : Double? = null,
|
||||
@JsonProperty("voteCount" ) val voteCount : Int? = null,
|
||||
@JsonProperty("cast" ) val cast : String? = null,
|
||||
@JsonProperty("director" ) val director : String? = null,
|
||||
@JsonProperty("overview" ) val overview : String? = null,
|
||||
@JsonProperty("posterUrl" ) val posterUrl : String? = null,
|
||||
@JsonProperty("releaseDate" ) val releaseDate : String? = null,
|
||||
@JsonProperty("createdAt" ) val createdAt : String? = null,
|
||||
@JsonProperty("updatedAt" ) val updatedAt : String? = null,
|
||||
@JsonProperty("id" ) val id : Int? = null,
|
||||
@JsonProperty("available" ) val available : Boolean? = null,
|
||||
@JsonProperty("genres" ) val genres : ArrayList<Genres>? = arrayListOf(),
|
||||
@JsonProperty("seasons" ) val seasons : ArrayList<Seasons>? = arrayListOf(),
|
||||
@JsonProperty("videos" ) val videos : ArrayList<String>? = arrayListOf(),
|
||||
@JsonProperty("runtime" ) val runtime : Int? = null,
|
||||
)
|
||||
|
||||
data class Seasons(
|
||||
@JsonProperty("name") val name: String? = null,
|
||||
@JsonProperty("numberOfEpisodes") val numberOfEpisodes: Int? = null,
|
||||
|
@ -297,7 +331,7 @@ class TheFlixToProvider : MainAPI() {
|
|||
@JsonProperty("createdAt") val createdAt: String? = null,
|
||||
@JsonProperty("updatedAt") val updatedAt: String? = null,
|
||||
@JsonProperty("id") val id: Int? = null,
|
||||
@JsonProperty("episodes") val episodes: ArrayList<Episodes> = arrayListOf()
|
||||
@JsonProperty("episodes") val episodes: ArrayList<Episodes>? = arrayListOf()
|
||||
)
|
||||
|
||||
data class Episodes(
|
||||
|
@ -311,68 +345,55 @@ class TheFlixToProvider : MainAPI() {
|
|||
@JsonProperty("createdAt") val createdAt: String? = null,
|
||||
@JsonProperty("updatedAt") val updatedAt: String? = null,
|
||||
@JsonProperty("id") val id: Int? = null,
|
||||
@JsonProperty("videos") val videos: ArrayList<Videos> = arrayListOf()
|
||||
)
|
||||
|
||||
data class Videos(
|
||||
@JsonProperty("language") val language: String? = null,
|
||||
@JsonProperty("name") val name: String? = null,
|
||||
@JsonProperty("id") val id: Int? = null
|
||||
)
|
||||
|
||||
data class RecommendationsList(
|
||||
@JsonProperty("docs") val docs: ArrayList<LoadDocs> = arrayListOf(),
|
||||
@JsonProperty("total") val total: Int? = null,
|
||||
@JsonProperty("page") val page: Int? = null,
|
||||
@JsonProperty("limit") val limit: Int? = null,
|
||||
@JsonProperty("pages") val pages: Int? = null,
|
||||
@JsonProperty("type") val type: String? = null,
|
||||
)
|
||||
|
||||
data class LoadDocs(
|
||||
@JsonProperty("name") val name: String = String(),
|
||||
@JsonProperty("originalLanguage") val originalLanguage: String? = null,
|
||||
@JsonProperty("popularity") val popularity: Double? = null,
|
||||
@JsonProperty("runtime") val runtime: Int? = null,
|
||||
@JsonProperty("status") val status: String? = null,
|
||||
@JsonProperty("voteAverage") val voteAverage: Double? = null,
|
||||
@JsonProperty("voteCount") val voteCount: Int? = null,
|
||||
@JsonProperty("cast") val cast: String? = null,
|
||||
@JsonProperty("director") val director: String? = null,
|
||||
@JsonProperty("overview") val overview: String? = null,
|
||||
@JsonProperty("posterUrl") val posterUrl: String? = null,
|
||||
@JsonProperty("releaseDate") val releaseDate: String? = null,
|
||||
@JsonProperty("createdAt") val createdAt: String? = null,
|
||||
@JsonProperty("updatedAt") val updatedAt: String? = null,
|
||||
@JsonProperty("id") val id: Int? = null,
|
||||
@JsonProperty("available") val available: Boolean? = null,
|
||||
@JsonProperty("videos") val videos: ArrayList<String>? = arrayListOf()
|
||||
)
|
||||
|
||||
|
||||
data class TheFlixMetadata(
|
||||
@JsonProperty("episodeRuntime") val episodeRuntime: Int? = null,
|
||||
@JsonProperty("name") val name: String = String(),
|
||||
@JsonProperty("originalLanguage") val originalLanguage: String? = null,
|
||||
@JsonProperty("popularity") val popularity: Double? = null,
|
||||
@JsonProperty("runtime") val runtime: Int? = null,
|
||||
@JsonProperty("numberOfSeasons") val numberOfSeasons: Int? = null,
|
||||
@JsonProperty("numberOfEpisodes") val numberOfEpisodes: Int? = null,
|
||||
@JsonProperty("status") val status: String? = null,
|
||||
@JsonProperty("voteAverage") val voteAverage: Double? = null,
|
||||
@JsonProperty("voteCount") val voteCount: Int? = null,
|
||||
@JsonProperty("cast") val cast: String? = null,
|
||||
@JsonProperty("director") val director: String? = null,
|
||||
@JsonProperty("overview") val overview: String? = null,
|
||||
@JsonProperty("posterUrl") val posterUrl: String? = null,
|
||||
@JsonProperty("releaseDate") val releaseDate: String? = null,
|
||||
@JsonProperty("conversionDate") val conversionDate: String? = null,
|
||||
@JsonProperty("createdAt") val createdAt: String? = null,
|
||||
@JsonProperty("updatedAt") val updatedAt: String? = null,
|
||||
@JsonProperty("id") val id: Int? = null,
|
||||
@JsonProperty("available") val available: Boolean? = null,
|
||||
@JsonProperty("genres") val genres: ArrayList<Genres> = arrayListOf(),
|
||||
@JsonProperty("videos") val videos: ArrayList<Videos> = arrayListOf(),
|
||||
@JsonProperty("seasons") val seasons: ArrayList<Seasons> = arrayListOf()
|
||||
data class Genres (
|
||||
@JsonProperty("name" ) val name : String? = null,
|
||||
@JsonProperty("id" ) val id : Int? = null
|
||||
)
|
||||
|
||||
data class RuntimeConfig (
|
||||
@JsonProperty("AddThisService" ) val AddThisService : RuntimeConfigData? = RuntimeConfigData(),
|
||||
@JsonProperty("Application" ) val Application : RuntimeConfigData? = RuntimeConfigData(),
|
||||
@JsonProperty("GtmService" ) val GtmService : RuntimeConfigData? = RuntimeConfigData(),
|
||||
@JsonProperty("Services" ) val Services : RuntimeConfigData? = RuntimeConfigData(),
|
||||
)
|
||||
|
||||
data class RuntimeConfigData(
|
||||
@JsonProperty("PublicId" ) val PublicId : String? = null,
|
||||
@JsonProperty("ContentUsageType" ) val ContentUsageType : String? = null,
|
||||
@JsonProperty("IsDevelopmentMode" ) val IsDevelopmentMode : Boolean? = null,
|
||||
@JsonProperty("IsDevelopmentOrProductionMode" ) val IsDevelopmentOrProductionMode : Boolean? = null,
|
||||
@JsonProperty("IsProductionMode" ) val IsProductionMode : Boolean? = null,
|
||||
@JsonProperty("IsStagingMode" ) val IsStagingMode : Boolean? = null,
|
||||
@JsonProperty("IsTestMode" ) val IsTestMode : Boolean? = null,
|
||||
@JsonProperty("Mode" ) val Mode : String? = null,
|
||||
@JsonProperty("Name" ) val Name : String? = null,
|
||||
@JsonProperty("Url" ) val Url : String? = null,
|
||||
@JsonProperty("UseFilterInfoInUrl" ) val UseFilterInfoInUrl : Boolean? = null,
|
||||
@JsonProperty("TrackingId" ) val TrackingId : String? = null,
|
||||
@JsonProperty("Server" ) val Server : Server? = Server(),
|
||||
@JsonProperty("TmdbServer" ) val TmdbServer : TmdbServer? = TmdbServer(),
|
||||
)
|
||||
|
||||
data class TmdbServer (
|
||||
@JsonProperty("Url" ) val Url : String? = null
|
||||
)
|
||||
|
||||
|
||||
data class Server (
|
||||
@JsonProperty("Url" ) val Url : String? = null
|
||||
)
|
||||
|
||||
data class RecommendationsList (
|
||||
@JsonProperty("docs" ) val docs : ArrayList<Docs> = arrayListOf(),
|
||||
@JsonProperty("total" ) val total : Int? = null,
|
||||
@JsonProperty("page" ) val page : Int? = null,
|
||||
@JsonProperty("limit" ) val limit : Int? = null,
|
||||
@JsonProperty("pages" ) val pages : Int? = null,
|
||||
@JsonProperty("type" ) val type : String? = null,
|
||||
)
|
||||
|
||||
private fun cleanTitle(title: String): String {
|
||||
|
@ -395,60 +416,21 @@ class TheFlixToProvider : MainAPI() {
|
|||
}
|
||||
|
||||
private suspend fun getLoadMan(url: String): LoadMain {
|
||||
val og = app.get(url, cookies = latestCookies)
|
||||
getCookies()
|
||||
val og = app.get(url, headers = latestCookies)
|
||||
val soup = og.document
|
||||
val script = soup.selectFirst("script[type=application/json]")!!.data()
|
||||
return parseJson(script)
|
||||
}
|
||||
|
||||
// I legit cant figure this out
|
||||
private suspend fun getLoadMainRetry(url: String): LoadMain {
|
||||
val first = getLoadMan(url)
|
||||
val notFound = "/404"
|
||||
if (first.page == notFound) {
|
||||
first.runtimeConfig?.Services?.TmdbServer?.Url?.let { authUrl ->
|
||||
val optionsUrl = "$authUrl/authorization/session/continue?contentUsageType=Viewing"
|
||||
val options = app.options(
|
||||
optionsUrl,
|
||||
headers = mapOf(
|
||||
"User-Agent" to USER_AGENT,
|
||||
"Access-Control-Request-Method" to "POST",
|
||||
"Access-Control-Request-Headers" to "content-type",
|
||||
"Origin" to url,
|
||||
"Referer" to mainUrl,
|
||||
)
|
||||
)
|
||||
//{"affiliateCode":"","pathname":"/movie/696806-the-adam-project"}
|
||||
val data = mapOf("affiliateCode" to "", "pathname" to url.removePrefix(mainUrl))
|
||||
val resp = app.post(
|
||||
optionsUrl, headers = mapOf(
|
||||
"User-Agent" to USER_AGENT,
|
||||
"Content-Type" to "application/json;charset=UTF-8",
|
||||
"Accept" to "application/json, text/plain, */*",
|
||||
"Origin" to url,
|
||||
"Referer" to mainUrl,
|
||||
), data = data
|
||||
)
|
||||
|
||||
latestCookies = resp.cookies
|
||||
val newData = getLoadMan(url)
|
||||
if (newData.page == notFound) {
|
||||
throw ErrorLoadingException("404 Not found")
|
||||
}
|
||||
return newData
|
||||
}
|
||||
}
|
||||
return first
|
||||
}
|
||||
|
||||
override suspend fun load(url: String): LoadResponse? {
|
||||
val tvtype = if (url.contains("movie")) TvType.Movie else TvType.TvSeries
|
||||
val json = getLoadMainRetry(url)
|
||||
val json = getLoadMan(url)
|
||||
val episodes = ArrayList<Episode>()
|
||||
val isMovie = tvtype == TvType.Movie
|
||||
val pageMain = json.props.pageProps
|
||||
val pageMain = json.props?.pageProps
|
||||
|
||||
val metadata: TheFlixMetadata? = if (isMovie) pageMain.movie else pageMain.selectedTv
|
||||
val metadata: TheFlixMetadata? = if (isMovie) pageMain?.movie else pageMain?.selectedTv
|
||||
|
||||
val available = metadata?.available
|
||||
|
||||
|
@ -463,9 +445,9 @@ class TheFlixToProvider : MainAPI() {
|
|||
val description = metadata.overview
|
||||
|
||||
if (!isMovie) {
|
||||
metadata.seasons.map { seasons ->
|
||||
metadata.seasons?.map { seasons ->
|
||||
val seasonPoster = seasons.posterUrl ?: metadata.posterUrl
|
||||
seasons.episodes.forEach { epi ->
|
||||
seasons.episodes?.forEach { epi ->
|
||||
val episodenu = epi.episodeNumber
|
||||
val seasonum = epi.seasonNumber
|
||||
val title = epi.name
|
||||
|
@ -474,7 +456,7 @@ class TheFlixToProvider : MainAPI() {
|
|||
val ratinginfo = (epi.voteAverage)?.times(10)?.toInt()
|
||||
val rating = if (ratinginfo?.equals(0) == true) null else ratinginfo
|
||||
val eps = Episode(
|
||||
"$mainUrl/tv-show/$movieId-${cleanTitle(movietitle)}/season-$seasonum/episode-$episodenu",
|
||||
"$mainUrl/tv-show/$movieId-${cleanTitle(movietitle!!)}/season-$seasonum/episode-$episodenu",
|
||||
title,
|
||||
seasonum,
|
||||
episodenu,
|
||||
|
@ -482,7 +464,7 @@ class TheFlixToProvider : MainAPI() {
|
|||
posterUrl = seasonPoster,
|
||||
rating = rating,
|
||||
)
|
||||
if (test.isNotEmpty()) {
|
||||
if (test!!.isNotEmpty()) {
|
||||
episodes.add(eps)
|
||||
} else {
|
||||
//Nothing, will prevent seasons/episodes with no videos to be added
|
||||
|
@ -492,9 +474,9 @@ class TheFlixToProvider : MainAPI() {
|
|||
}
|
||||
val rating = metadata.voteAverage?.toFloat()?.times(1000)?.toInt()
|
||||
|
||||
val tags = metadata.genres.map { it.name }
|
||||
val tags = metadata.genres?.mapNotNull { it.name }
|
||||
|
||||
val recommendationsitem = pageMain.recommendationsList?.docs?.map { loadDocs ->
|
||||
val recommendationsitem = pageMain?.recommendationsList?.docs?.map { loadDocs ->
|
||||
val title = loadDocs.name
|
||||
val posterrec = loadDocs.posterUrl
|
||||
val link = if (isMovie) "$mainUrl/movie/${loadDocs.id}-${cleanTitle(title)}"
|
||||
|
@ -516,7 +498,7 @@ class TheFlixToProvider : MainAPI() {
|
|||
|
||||
return when (tvtype) {
|
||||
TvType.TvSeries -> {
|
||||
return newTvSeriesLoadResponse(movietitle, url, TvType.TvSeries, episodes) {
|
||||
return newTvSeriesLoadResponse(movietitle!!, url, TvType.TvSeries, episodes) {
|
||||
this.posterUrl = poster
|
||||
this.year = year?.toIntOrNull()
|
||||
this.plot = description
|
||||
|
@ -529,7 +511,7 @@ class TheFlixToProvider : MainAPI() {
|
|||
}
|
||||
}
|
||||
TvType.Movie -> {
|
||||
newMovieLoadResponse(movietitle, url, TvType.Movie, url) {
|
||||
newMovieLoadResponse(movietitle!!, url, TvType.Movie, url) {
|
||||
this.year = year?.toIntOrNull()
|
||||
this.posterUrl = poster
|
||||
this.plot = description
|
||||
|
@ -546,27 +528,76 @@ class TheFlixToProvider : MainAPI() {
|
|||
}
|
||||
|
||||
|
||||
data class VideoData (
|
||||
@JsonProperty("url" ) val url : String? = null,
|
||||
@JsonProperty("id" ) val id : String? = null,
|
||||
@JsonProperty("type" ) val type : String? = null,
|
||||
)
|
||||
|
||||
|
||||
override suspend fun loadLinks(
|
||||
data: String,
|
||||
isCasting: Boolean,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
): Boolean {
|
||||
val json = getLoadMainRetry(data)
|
||||
val extractedLink = json.props.pageProps.videoUrl
|
||||
val json = getLoadMan(data)
|
||||
val authhost = json.runtimeConfig?.Services?.Server?.Url
|
||||
val isMovie = data.contains("/movie/")
|
||||
val qualityReg = Regex("(\\d+p)")
|
||||
if (extractedLink != null) {
|
||||
val quality = qualityReg.find(extractedLink)?.value ?: ""
|
||||
callback(
|
||||
ExtractorLink(
|
||||
name,
|
||||
"$name $quality",
|
||||
extractedLink,
|
||||
"",
|
||||
getQualityFromName(quality),
|
||||
false
|
||||
)
|
||||
)
|
||||
if (isMovie){
|
||||
json.props?.pageProps?.movie?.videos?.apmap { id ->
|
||||
val jsonmovie = app.get("$authhost/movies/videos/$id/request-access?contentUsageType=Viewing",
|
||||
headers = latestCookies).parsedSafe<VideoData>() ?: return@apmap false
|
||||
val extractedlink = jsonmovie.url
|
||||
if (!extractedlink.isNullOrEmpty()) {
|
||||
val quality = qualityReg.find(extractedlink)?.value ?: ""
|
||||
callback(
|
||||
ExtractorLink(
|
||||
name,
|
||||
name,
|
||||
extractedlink,
|
||||
"",
|
||||
getQualityFromName(quality),
|
||||
false
|
||||
)
|
||||
)
|
||||
} else null
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
val dataRegex = Regex("(season-(\\d+)\\/episode-(\\d+))")
|
||||
val cleandatainfo = dataRegex.find(data)?.value?.replace(Regex("(season-|episode-)"),"")?.replace("/","x")
|
||||
val tesatt = cleandatainfo.let { str ->
|
||||
str?.split("x")?.mapNotNull { subStr -> subStr.toIntOrNull() }
|
||||
}
|
||||
val epID = tesatt?.getOrNull(1)
|
||||
val seasonid = tesatt?.getOrNull(0)
|
||||
json.props?.pageProps?.selectedTv?.seasons?.map {
|
||||
it.episodes?.map {
|
||||
val epsInfo = Triple(it.seasonNumber, it.episodeNumber, it.videos)
|
||||
if (epsInfo.first == seasonid && epsInfo.second == epID) {
|
||||
epsInfo.third?.apmap { id ->
|
||||
val jsonserie = app.get("$authhost/tv/videos/$id/request-access?contentUsageType=Viewing", headers = latestCookies).parsedSafe<VideoData>() ?: return@apmap false
|
||||
val extractedlink = jsonserie.url
|
||||
if (!extractedlink.isNullOrEmpty()) {
|
||||
val quality = qualityReg.find(extractedlink)?.value ?: ""
|
||||
callback(
|
||||
ExtractorLink(
|
||||
name,
|
||||
name,
|
||||
extractedlink,
|
||||
"",
|
||||
getQualityFromName(quality),
|
||||
false
|
||||
)
|
||||
)
|
||||
} else null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
package com.lagradost.cloudstream3.movieproviders
|
||||
|
||||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.metaproviders.TmdbLink
|
||||
import com.lagradost.cloudstream3.metaproviders.TmdbProvider
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.M3u8Helper.Companion.generateM3u8
|
||||
import com.lagradost.cloudstream3.utils.loadExtractor
|
||||
|
||||
class VidSrcProvider : TmdbProvider() {
|
||||
override val apiName = "VidSrc"
|
||||
override var name = "VidSrc"
|
||||
override var mainUrl = "https://v2.vidsrc.me"
|
||||
override val useMetaLoadResponse = true
|
||||
override val instantLinkLoading = false
|
||||
override val supportedTypes = setOf(
|
||||
TvType.Movie,
|
||||
TvType.TvSeries,
|
||||
)
|
||||
|
||||
override suspend fun loadLinks(
|
||||
data: String,
|
||||
isCasting: Boolean,
|
||||
subtitleCallback: (SubtitleFile) -> Unit,
|
||||
callback: (ExtractorLink) -> Unit
|
||||
): Boolean {
|
||||
val mappedData = parseJson<TmdbLink>(data)
|
||||
val (id, site) = if (mappedData.imdbID != null) listOf(
|
||||
mappedData.imdbID,
|
||||
"imdb"
|
||||
) else listOf(mappedData.tmdbID.toString(), "tmdb")
|
||||
val isMovie = mappedData.episode == null && mappedData.season == null
|
||||
val embedUrl = if (isMovie) {
|
||||
if(site == "imdb") "$mainUrl/embed/$id" else
|
||||
"$mainUrl/embed/$id"
|
||||
} else {
|
||||
val suffix = "$id/${mappedData.season ?: 1}-${mappedData.episode ?: 1}"
|
||||
if (site == "imdb") "$mainUrl/embed/$suffix" else
|
||||
"$mainUrl/embed/$suffix"
|
||||
}
|
||||
val iframedoc = app.get(embedUrl).document
|
||||
|
||||
val serverslist = iframedoc.select("div#sources.button_content div#content div#list div").map {
|
||||
val datahash = it.attr("data-hash")
|
||||
if (datahash.isNotBlank()) {
|
||||
val links = try {
|
||||
app.get("$mainUrl/src/$datahash", referer = "https://source.vidsrc.me/").url
|
||||
} catch (e: Exception) {
|
||||
""
|
||||
}
|
||||
links
|
||||
} else ""
|
||||
}
|
||||
|
||||
serverslist.apmap { server ->
|
||||
val linkfixed = server.replace("https://vidsrc.xyz/","https://embedsito.com/")
|
||||
if (linkfixed.contains("/pro")) {
|
||||
val srcresponse = app.get(server, referer = mainUrl).text
|
||||
val m3u8Regex = Regex("((https:|http:)\\/\\/.*\\.m3u8)")
|
||||
val srcm3u8 = m3u8Regex.find(srcresponse)?.value ?: return@apmap false
|
||||
generateM3u8(
|
||||
name,
|
||||
srcm3u8,
|
||||
mainUrl
|
||||
).forEach(callback)
|
||||
} else
|
||||
loadExtractor(linkfixed, embedUrl, callback)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -41,7 +41,8 @@ class SettingsLang : PreferenceFragmentCompat() {
|
|||
Triple("", "Arabic", "ar"),
|
||||
Triple("", "Turkish", "tr"),
|
||||
Triple("", "Macedonian", "mk"),
|
||||
Triple("\uD83C\uDDE7\uD83C\uDDF7", "Portuguese (Brazil)", "pt"),
|
||||
Triple("\uD83C\uDDF5\uD83C\uDDF9", "Portuguese", "pt"),
|
||||
Triple("\uD83C\uDDE7\uD83C\uDDF7", "Brazilian Portuguese", "bp"),
|
||||
Triple("", "Romanian", "ro"),
|
||||
Triple("", "Italian", "it"),
|
||||
Triple("", "Chinese", "zh"),
|
||||
|
|
|
@ -63,7 +63,11 @@ open class ExtractorLink(
|
|||
override val headers: Map<String, String> = mapOf(),
|
||||
/** Used for getExtractorVerifierJob() */
|
||||
open val extractorData: String? = null,
|
||||
) : VideoDownloadManager.IDownloadableMinimum
|
||||
) : VideoDownloadManager.IDownloadableMinimum {
|
||||
override fun toString(): String {
|
||||
return "ExtractorLink(name=$name, url=$url, referer=$referer, isM3u8=$isM3u8)"
|
||||
}
|
||||
}
|
||||
|
||||
data class ExtractorUri(
|
||||
val uri: Uri,
|
||||
|
|
551
app/src/main/res/values-bp/strings.xml
Normal file
551
app/src/main/res/values-bp/strings.xml
Normal file
|
@ -0,0 +1,551 @@
|
|||
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
|
||||
<resources>
|
||||
<!-- KEYS DON'T TRANSLATE -->
|
||||
<string name="search_providers_list_key" translatable="false">search_providers_list</string>
|
||||
<string name="locale_key" translatable="false">app_locale</string>
|
||||
<string name="search_types_list_key" translatable="false">search_type_list</string>
|
||||
<string name="auto_update_key" translatable="false">auto_update</string>
|
||||
<string name="skip_update_key" translatable="false">skip_update_key</string>
|
||||
<string name="prerelease_update_key" translatable="false">prerelease_update</string>
|
||||
<string name="manual_check_update_key" translatable="false">manual_check_update</string>
|
||||
<string name="fast_forward_button_time_key" translatable="false">fast_forward_button_time</string>
|
||||
<string name="benene_count" translatable="false">benene_count</string>
|
||||
<string name="subtitle_settings_key" translatable="false">subtitle_settings_key</string>
|
||||
<string name="subtitle_settings_chromecast_key" translatable="false">subtitle_settings_chromecast_key</string>
|
||||
<string name="quality_pref_key" translatable="false">quality_pref_key</string>
|
||||
<string name="prefer_limit_title_key" translatable="false">prefer_limit_title_key</string>
|
||||
<string name="prefer_limit_title_rez_key" translatable="false">prefer_limit_title_rez_key</string>
|
||||
<string name="video_buffer_size_key" translatable="false">video_buffer_size_key</string>
|
||||
<string name="video_buffer_length_key" translatable="false">video_buffer_length_key</string>
|
||||
<string name="video_buffer_clear_key" translatable="false">video_buffer_clear_key</string>
|
||||
<string name="video_buffer_disk_key" translatable="false">video_buffer_disk_key</string>
|
||||
<string name="prerelease_commit_hash" translatable="false">unknown_prerelease</string>
|
||||
<string name="use_system_brightness_key" translatable="false">use_system_brightness_key</string>
|
||||
<string name="swipe_enabled_key" translatable="false">swipe_enabled_key</string>
|
||||
<string name="playback_speed_enabled_key" translatable="false">playback_speed_enabled_key</string>
|
||||
<string name="player_resize_enabled_key" translatable="false">player_resize_enabled_key</string>
|
||||
<string name="pip_enabled_key" translatable="false">pip_enabled_key</string>
|
||||
<string name="double_tap_enabled_key" translatable="false">double_tap_enabled_key</string>
|
||||
<string name="double_tap_pause_enabled_key" translatable="false">double_tap_pause_enabled_key</string>
|
||||
<string name="double_tap_seek_time_key" translatable="false">double_tap_seek_time_key</string>
|
||||
<string name="swipe_vertical_enabled_key" translatable="false">swipe_vertical_enabled_key</string>
|
||||
<string name="display_sub_key" translatable="false">display_sub_key</string>
|
||||
<string name="show_fillers_key" translatable="false">show_fillers_key</string>
|
||||
<string name="show_trailers_key" translatable="false">show_trailers_key</string>
|
||||
<string name="show_kitsu_posters_key" translatable="false">show_kitsu_posters_key</string>
|
||||
<string name="random_button_key" translatable="false">random_button_key</string>
|
||||
<string name="provider_lang_key" translatable="false">provider_lang_key</string>
|
||||
<string name="dns_key" translatable="false">dns_key</string>
|
||||
<string name="download_path_key" translatable="false">download_path_key</string>
|
||||
<string name="app_name_download_path" translatable="false">Cloudstream</string>
|
||||
<string name="app_layout_key" translatable="false">app_layout_key</string>
|
||||
<string name="primary_color_key" translatable="false">primary_color_key</string>
|
||||
<string name="restore_key" translatable="false">restore_key</string>
|
||||
<string name="killswitch_key" translatable="false">killswitch_key</string>
|
||||
<string name="backup_key" translatable="false">backup_key</string>
|
||||
<string name="prefer_media_type_key" translatable="false">prefer_media_type_key</string>
|
||||
<string name="app_theme_key" translatable="false">app_theme_key</string>
|
||||
<string name="episode_sync_enabled_key" translatable="false">episode_sync_enabled_key</string>
|
||||
<string name="log_enabled_key" translatable="false">log_enabled_key</string>
|
||||
<string name="show_logcat_key" translatable="false">show_logcat_key</string>
|
||||
<string name="bottom_title_key" translatable="false">bottom_title_key</string>
|
||||
<string name="poster_ui_key" translatable="false">poster_ui_key</string>
|
||||
<string name="subtitles_encoding_key" translatable="false">subtitles_encoding_key</string>
|
||||
<string name="override_site_key" translatable="false">override_site_key</string>
|
||||
|
||||
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
|
||||
<string name="extra_info_format" translatable="false" formatted="true">%d %s | %sMB</string>
|
||||
<string name="storage_size_format" translatable="false" formatted="true">%s • %sGB</string>
|
||||
<string name="download_size_format" translatable="false" formatted="true">%sMB / %sMB</string>
|
||||
<string name="mb_format" translatable="false" formatted="true">%dMB</string>
|
||||
<string name="episode_name_format" translatable="false" formatted="true">%s %s</string>
|
||||
<string name="ffw_text_format" translatable="false" formatted="true">+%d</string>
|
||||
<string name="rew_text_format" translatable="false" formatted="true">-%d</string>
|
||||
<string name="ffw_text_regular_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="rew_text_regular_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="rating_format" translatable="false" formatted="true">%.1f/10.0</string>
|
||||
<string name="year_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
|
||||
<string name="cast_format" formatted="true">Elenco: %s</string>
|
||||
<string name="next_episode_format" formatted="true">O episódio %d vai ser lançado em</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%dd %dh %dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%dh %dm</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%dm</string>
|
||||
|
||||
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
||||
<string name="result_poster_img_des">Poster</string>
|
||||
<string name="search_poster_img_des">@string/result_poster_img_des</string>
|
||||
<string name="episode_poster_img_des">Episode Poster</string>
|
||||
<string name="home_main_poster_img_des">Main Poster</string>
|
||||
<string name="home_next_random_img_des">Next Random</string>
|
||||
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
|
||||
<string name="go_back_img_des">Go back</string>
|
||||
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
|
||||
<string name="home_change_provider_img_des">Change Provider</string>
|
||||
<string name="preview_background_img_des">Preview Background</string>
|
||||
|
||||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">Velocidade (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Nota: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Nova atualização encontrada!\n%s -> %s</string>
|
||||
<string name="filler" formatted="true">Filler</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="title_home">Início</string>
|
||||
<string name="title_search">Procurar</string>
|
||||
<string name="title_downloads">Downloads</string>
|
||||
<string name="title_settings">Configurações</string>
|
||||
|
||||
<string name="search_hint">Procurar…</string>
|
||||
<string name="search_hint_site" formatted="true">Procurar no %s…</string>
|
||||
|
||||
<string name="no_data">Sem dados</string>
|
||||
<string name="episode_more_options_des">Mais Opções</string>
|
||||
<string name="next_episode">Próximo episódio</string>
|
||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
||||
<string name="result_tags">Gêneros</string>
|
||||
<string name="result_share">Compartilhar</string>
|
||||
<string name="result_open_in_browser">Abrir no Navegador</string>
|
||||
<string name="skip_loading">Pular Carregamento</string>
|
||||
<string name="loading_chromecast">Carregando…</string>
|
||||
|
||||
<string name="type_watching">Assistindo</string>
|
||||
<string name="type_on_hold">Em espera</string>
|
||||
<string name="type_completed">Completado</string>
|
||||
<string name="type_dropped">Deixado</string>
|
||||
<string name="type_plan_to_watch">Planejando assistir</string>
|
||||
<string name="type_none">Nenhum</string>
|
||||
<string name="type_re_watching">Reassistindo</string>
|
||||
|
||||
<string name="play_movie_button">Assistir Filme</string>
|
||||
<string name="play_torrent_button">Transmitir Torrent</string>
|
||||
<string name="pick_source">Fontes</string>
|
||||
<string name="pick_subtitle">Legendas</string>
|
||||
<string name="reload_error">Tentar reconectar…</string>
|
||||
<string name="go_back">Voltar</string>
|
||||
<string name="play_episode">Assistir Episódio</string>
|
||||
<!--<string name="need_storage">Permirtir baixar episódios</string>-->
|
||||
|
||||
<string name="download">Baixar</string>
|
||||
<string name="downloaded">Baixado</string>
|
||||
<string name="downloading">Baixando</string>
|
||||
<string name="download_paused">Download Pausado</string>
|
||||
<string name="download_started">Download Iniciado</string>
|
||||
<string name="download_failed">Download Falhado</string>
|
||||
<string name="download_canceled">Download Cancelado</string>
|
||||
<string name="download_done">Download Finalizado</string>
|
||||
<string name="download_format" translatable="false">%s - %s</string>
|
||||
<string name="stream">Transmitir</string>
|
||||
|
||||
<string name="error_loading_links_toast">Erro Carregando Links</string>
|
||||
<string name="download_storage_text">Armazenamento Interno</string>
|
||||
|
||||
<string name="app_dubbed_text">Dub</string>
|
||||
<string name="app_subbed_text">Leg</string>
|
||||
|
||||
<string name="popup_delete_file">Deletar Arquivo</string>
|
||||
<string name="popup_play_file">Assistir Arquivo</string>
|
||||
<string name="popup_resume_download">Retomar Download</string>
|
||||
<string name="popup_pause_download">Pausar Download</string>
|
||||
|
||||
<string name="pref_disable_acra">Desativar relatório automático de erros</string>
|
||||
<string name="home_more_info">Mais info</string>
|
||||
<string name="home_expanded_hide">Esconder</string>
|
||||
<string name="home_play">Assistir</string>
|
||||
<string name="home_info">Info</string>
|
||||
<string name="filter_bookmarks">Filtrar Marcadores</string>
|
||||
<string name="error_bookmarks_text">Marcadores</string>
|
||||
<string name="action_remove_from_bookmarks">Remover</string>
|
||||
<string name="action_add_to_bookmarks">Selecionar marcador</string>
|
||||
<string name="sort_apply">Aplicar</string>
|
||||
<string name="sort_cancel">Cancelar</string>
|
||||
<string name="sort_copy">Copiar</string>
|
||||
<string name="sort_close">Fechar</string>
|
||||
<string name="sort_clear">Limpar</string>
|
||||
<string name="sort_save">Salvar</string>
|
||||
|
||||
<string name="player_speed">Velocidade do Reprodutor</string>
|
||||
|
||||
<string name="subtitles_settings">Configurar Legendas</string>
|
||||
<string name="subs_text_color">Cor do Texto</string>
|
||||
<string name="subs_outline_color">Cor do Contorno</string>
|
||||
<string name="subs_background_color">Cor do Fundo</string>
|
||||
<string name="subs_window_color">Cor da Janela</string>
|
||||
<string name="subs_edge_type">Tipo de Borda</string>
|
||||
<string name="subs_subtitle_elevation">Elevação da Legenda</string>
|
||||
<string name="subs_font">Fonte</string>
|
||||
<string name="subs_font_size">Tamanho da Fonte</string>
|
||||
|
||||
<string name="search_provider_text_providers">Pesquisar usando fornecedor</string>
|
||||
<string name="search_provider_text_types">Pesquisar usando genêros</string>
|
||||
|
||||
<string name="benene_count_text">%d Benenes doados aos desenvolvedores</string>
|
||||
<string name="benene_count_text_none">Nenhuma Benenes doada</string>
|
||||
|
||||
<string name="subs_auto_select_language">Autosseleção de Lingua</string>
|
||||
<string name="subs_download_languages">Baixar Linguas</string>
|
||||
<string name="subs_subtitle_languages">Lingua da legenda</string>
|
||||
<string name="subs_hold_to_reset_to_default">Segure para retornar a configuração padrão</string>
|
||||
<string name="subs_import_text" formatted="true">Importe fontes colocando elas em %s</string>
|
||||
<string name="continue_watching">Continue Assistindo</string>
|
||||
|
||||
<string name="action_remove_watching">Remover</string>
|
||||
<string name="action_open_watching">Mais Info</string>
|
||||
<string name="action_open_play">@string/home_play </string>
|
||||
|
||||
<string name="vpn_might_be_needed">Uma VPN pode ser necessária para esse fornecedor funcionar corretamente</string>
|
||||
<string name="vpn_torrent">Esse fornecedor é um torrent, uma VPN é recomendada</string>
|
||||
|
||||
<string name="provider_info_meta">Metadados não são oferecidas pelo site, o carregamento do video pode falhar se ele não existir no site.</string>
|
||||
|
||||
<string name="torrent_plot">Descrição</string>
|
||||
<string name="normal_no_plot">Sinopse não encontrada</string>
|
||||
<string name="torrent_no_plot">Descrição não encontrada</string>
|
||||
|
||||
<string name="show_log_cat">Mostrar logcat 🐈</string>
|
||||
|
||||
<string name="picture_in_picture">Picture-in-picture</string>
|
||||
<string name="picture_in_picture_des">Continua a reprodução em um player miniatura que sobrepõe outros aplicativos</string>
|
||||
<string name="player_size_settings">Redimensionar player</string>
|
||||
<string name="player_size_settings_des">Remover bordas pretas</string>
|
||||
<string name="player_subtitles_settings">Legendas</string>
|
||||
<string name="player_subtitles_settings_des">Configurações de legendas do Player</string>
|
||||
<string name="chromecast_subtitles_settings">Legendas do Chromecast</string>
|
||||
<string name="chromecast_subtitles_settings_des">Configurações de legendas do Chromecast</string>
|
||||
|
||||
<string name="eigengraumode_settings">Modo Eigengravy</string>
|
||||
<string name="eigengraumode_settings_des">Adiciona um botão de velocidade no player</string>
|
||||
<string name="swipe_to_seek_settings">Deslize para avançar o vídeo</string>
|
||||
<string name="swipe_to_seek_settings_des">Deslize para a esq. ou dir. para controlar o tempo no player</string>
|
||||
<string name="swipe_to_change_settings">Deslize para mudar as configurações</string>
|
||||
<string name="swipe_to_change_settings_des">Deslize para o lado esq. ou dir. para ajustar brilho ou volume</string>
|
||||
<string name="double_tap_to_seek_settings">Toque duplo para avançar o vídeo</string>
|
||||
<string name="double_tap_to_pause_settings">Toque duplo para pausar</string>
|
||||
<string name="double_tap_to_seek_amount_settings">Segundos avançados no player</string>
|
||||
<string name="double_tap_to_seek_settings_des">Toque duplo no lado direito ou esquerdo para regredir ou avançar vídeo</string>
|
||||
<string name="double_tap_to_pause_settings_des">Toque no meio para pausar</string>
|
||||
<string name="use_system_brightness_settings">Usar brilho do sistema</string>
|
||||
<string name="use_system_brightness_settings_des">Usar brilho do sistema no player ao invés da sobreposição escura</string>
|
||||
|
||||
<string name="episode_sync_settings">Atualizar progresso assistido</string>
|
||||
<string name="episode_sync_settings_des">Sincronize automaticamente seu progresso do episódio</string>
|
||||
|
||||
<string name="restore_settings">Restaurar dados de backup</string>
|
||||
<string name="killswitch_settings">Baixar metadados mais recentes do github</string>
|
||||
<string name="killswitch_settings_des">Se você quiser acesso a todos os fornecedores (mesmo os quebrados) desmarque isso</string>
|
||||
|
||||
<string name="backup_settings">Fazer Backup</string>
|
||||
<string name="restore_success">Arquivo de Backup carregado</string>
|
||||
<string name="restore_failed_format" formatted="true">Falha em restaurar dados do arquivo %s</string>
|
||||
<string name="backup_success">Dados salvos com sucesso</string>
|
||||
<string name="backup_failed">Permissões de armazenamento faltando, por favor tente denovo</string>
|
||||
<string name="backup_failed_error_format">Erro no backup de %s</string>
|
||||
|
||||
<string name="search">Procurar</string>
|
||||
<string name="category_account">Contas</string>
|
||||
<string name="category_updates">Atualizações e backup</string>
|
||||
<string name="nginx_info_title">O que é Nginx ?</string>
|
||||
<string name="nginx_info_summary">Nginx é um software que pode ser usado para exibir arquivos de um servidor que você possui. Clique para ver um guia de configuração do Nginx</string>
|
||||
|
||||
<string name="settings_info">Info</string>
|
||||
<string name="advanced_search">Procura Avançada</string>
|
||||
<string name="advanced_search_des">Mostrar resultados separados por fornecedor</string>
|
||||
<string name="bug_report_settings_off">Só enviar dados sobre travamentos</string>
|
||||
<string name="bug_report_settings_on">Não enviar nenhum dado</string>
|
||||
<string name="show_fillers_settings">Mostrar episódios de Filler em anime</string>
|
||||
<string name="show_trailers_settings">Mostrar trailers</string>
|
||||
<string name="kitsu_settings">Mostrar posters do kitsu</string>
|
||||
|
||||
<string name="updates_settings">Mostrar atualizações do app</string>
|
||||
<string name="updates_settings_des">Automaticamente procurar por novas atualizações ao abrir</string>
|
||||
<string name="uprereleases_settings">Atualizar para pré-lançamento</string>
|
||||
<string name="uprereleases_settings_des">Procura atualizações do pré-lançamento ao invés de apenas do lançamento oficial</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="lightnovel">App de Light novel pelos mesmos desenvolvedores</string>
|
||||
<string name="anim">App de Anime pelos mesmos desenvolvedores</string>
|
||||
<string name="discord">Junte-se ao Discord</string>
|
||||
<string name="benene">Dar um benene para os desenvolvedores</string>
|
||||
<string name="benene_des">Benene dada</string>
|
||||
|
||||
<string name="app_language">Linguagem do App</string>
|
||||
|
||||
<string name="no_chromecast_support_toast">Esse fornecedor não possui suporte para Chromecast</string>
|
||||
<string name="no_links_found_toast">Nenhum link encontrado</string>
|
||||
<string name="copy_link_toast">Link copiado para área de transferência</string>
|
||||
<string name="play_episode_toast">Assistir Episódio</string>
|
||||
<string name="subs_default_reset_toast">Restaurar para o padrão</string>
|
||||
<string name="acra_report_toast">Desculpe, a aplicação travou. Um relatório de erro anônimo será enviado para os
|
||||
desenvolvedores
|
||||
</string>
|
||||
|
||||
<string name="season">Temporada</string>
|
||||
<string name="no_season">Nenhuma Temporada</string>
|
||||
<string name="episode">Episódio</string>
|
||||
<string name="episodes">Episódios</string>
|
||||
<string name="season_short">S</string>
|
||||
<string name="episode_short">E</string>
|
||||
<string name="no_episodes_found">Nenhum Episódio encontrado</string>
|
||||
|
||||
<string name="delete_file">Deletar Arquivo</string>
|
||||
<string name="delete">Deletar</string>
|
||||
<string name="cancel" translatable="false">@string/sort_cancel</string>
|
||||
<string name="pause">Pausar</string>
|
||||
<string name="resume">Retomar</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Isso apagará %s permanentemente\nVocê tem certeza?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm\nsobrando</string>
|
||||
|
||||
|
||||
<string name="status_ongoing">Em andamento</string>
|
||||
<string name="status_completed">Concluído</string>
|
||||
<string name="status">Estado</string>
|
||||
<string name="year">Ano</string>
|
||||
<string name="rating">Nota</string>
|
||||
<string name="duration">Duração</string>
|
||||
<string name="site">Site</string>
|
||||
<string name="synopsis">Sinopse</string>
|
||||
|
||||
<string name="queued">Na fila</string>
|
||||
<string name="no_subtitles">Sem Legendas</string>
|
||||
<string name="default_subtitles">Padrão</string>
|
||||
|
||||
<string name="free_storage">Livre</string>
|
||||
<string name="used_storage">Usado</string>
|
||||
<string name="app_storage">App</string>
|
||||
|
||||
<!--plural-->
|
||||
<string name="movies">Filmes</string>
|
||||
<string name="tv_series">Séries</string>
|
||||
<string name="cartoons">Desenhos Animados</string>
|
||||
<string name="anime">Anime</string>
|
||||
<string name="torrent">Torrents</string>
|
||||
<string name="documentaries">Documentários</string>
|
||||
<string name="ova">OVA</string>
|
||||
<string name="asian_drama">Dramas Asiáticos</string>
|
||||
|
||||
<!--singular-->
|
||||
<string name="movies_singular">Filme</string>
|
||||
<string name="tv_series_singular">Série</string>
|
||||
<string name="cartoons_singular">Desenho Animado</string>
|
||||
<string name="anime_singular">@string/anime</string>
|
||||
<string name="ova_singular">@string/ova</string>
|
||||
<string name="torrent_singular">Torrent</string>
|
||||
<string name="documentaries_singular">Documentário</string>
|
||||
<string name="asian_drama_singular">Drama Asiático</string>
|
||||
|
||||
<string name="source_error">Erro de fornecimento</string>
|
||||
<string name="remote_error">Erro remoto</string>
|
||||
<string name="render_error">Erro de renderização</string>
|
||||
<string name="unexpected_error">Erro de player inesperado</string>
|
||||
<string name="storage_error">Erro ao baixar, verifique as permissões de armazenamento</string>
|
||||
|
||||
<string name="episode_action_chromecast_episode">Episódio pelo Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Alternativa pelo Chromecast</string>
|
||||
<string name="episode_action_play_in_app">Assistir no App</string>
|
||||
<string name="episode_action_play_in_vlc">Assistir no VLC</string>
|
||||
<string name="episode_action_play_in_browser">Assistir no navegador</string>
|
||||
<string name="episode_action_copy_link">Copiar link</string>
|
||||
<string name="episode_action_auto_download">Auto download</string>
|
||||
<string name="episode_action_download_mirror">Baixar por servidor alternativo</string>
|
||||
<string name="episode_action_reload_links">Recarregar links</string>
|
||||
<string name="episode_action_download_subtitle">Baixar legendas</string>
|
||||
|
||||
<string name="show_hd">Etiqueta de qualidade</string>
|
||||
<string name="show_dub">Etiqueta Dub</string>
|
||||
<string name="show_sub">Etiqueta Sub</string>
|
||||
<string name="show_title">Título</string>
|
||||
<string name="show_hd_key" translatable="false">show_hd_key</string>
|
||||
<string name="show_dub_key" translatable="false">show_dub_key</string>
|
||||
<string name="show_sub_key" translatable="false">show_sub_key</string>
|
||||
<string name="show_title_key" translatable="false">show_title_key</string>
|
||||
<string name="poster_ui_settings">Alternar elementos da interface no pôster</string>
|
||||
|
||||
<string name="no_update_found">Nenhuma Atualização encontrada</string>
|
||||
<string name="check_for_update">Procurar nova Atualização</string>
|
||||
|
||||
<string name="video_lock">Bloquear</string>
|
||||
<string name="video_aspect_ratio_resize">Mudar Tamanho</string>
|
||||
<string name="video_source">Fonte</string>
|
||||
<string name="video_skip_op">Pular OP</string>
|
||||
|
||||
<string name="dont_show_again">Não mostrar de novo</string>
|
||||
<string name="skip_update">Pular essa Atualização</string>
|
||||
<string name="update">Atualizar</string>
|
||||
<string name="watch_quality_pref">Qualidade preferida</string>
|
||||
<string name="limit_title">Máximo de caracteres do título de vídeos</string>
|
||||
<string name="limit_title_rez">Resolução do player de vídeo</string>
|
||||
|
||||
<string name="video_buffer_size_settings">Tamanho do buffer do vídeo</string>
|
||||
<string name="video_buffer_length_settings">Comprimento do buffer do vídeo</string>
|
||||
<string name="video_buffer_disk_settings">Cache do vídeo em disco</string>
|
||||
<string name="video_buffer_clear_settings">Limpar cache de vídeo e imagem</string>
|
||||
|
||||
<string name="video_ram_description">Causará travamentos aleatórios se definido muito alto. Não mude caso tiver pouca memória RAM, como um Android TV ou um telefone antigo</string>
|
||||
<string name="video_disk_description">Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV</string>
|
||||
|
||||
<string name="dns_pref">DNS sobre HTTPS</string>
|
||||
<string name="dns_pref_summary">Útil para burlar bloqueios de provedores de internet</string>
|
||||
|
||||
<string name="add_site_pref">Clonar site</string>
|
||||
<string name="remove_site_pref">Remover site</string>
|
||||
<string name="add_site_summary">Adiciona um clone de um site existente, com uma url diferente</string>
|
||||
|
||||
<string name="download_path_pref">Caminho para Download</string>
|
||||
|
||||
<string name="nginx_url_pref">Url do servidor Nginx</string>
|
||||
|
||||
<string name="display_subbed_dubbed_settings">Mostrar Anime Dublado/Legendado</string>
|
||||
|
||||
<string name="resize_fit">Ajustar para a Tela</string>
|
||||
<string name="resize_fill">Esticar</string>
|
||||
<string name="resize_zoom">Zoom</string>
|
||||
|
||||
<string name="legal_notice">Aviso Legal</string>
|
||||
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
|
||||
<string name="legal_notice_text" translatable="false">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.
|
||||
</string>
|
||||
<string name="category_general">Geral</string>
|
||||
<string name="random_button_settings">Botão Aleatório</string>
|
||||
<string name="random_button_settings_desc">Mostra o botão Aleatório na página inicial</string>
|
||||
<string name="provider_lang_settings">Linguagem dos fornecedores</string>
|
||||
<string name="app_layout">Layout do App</string>
|
||||
<string name="preferred_media_settings">Mídia preferida</string>
|
||||
<string name="subtitles_encoding">Codificação das legendas</string>
|
||||
<string name="category_preferred_media_and_lang">Linguagem</string>
|
||||
<string name="category_ui">Layout</string>
|
||||
|
||||
<string name="automatic">Auto</string>
|
||||
<string name="tv_layout">Layout de TV</string>
|
||||
<string name="phone_layout">Layout de celular</string>
|
||||
<string name="emulator_layout">Layout de emulador</string>
|
||||
|
||||
<string name="primary_color_settings">Cor principal</string>
|
||||
<string name="app_theme_settings">Tema do App</string>
|
||||
<string name="bottom_title_settings">Local do título do poster</string>
|
||||
<string name="bottom_title_settings_des">Coloca o título debaixo do poster</string>
|
||||
|
||||
|
||||
<!-- account stuff -->
|
||||
<string name="anilist_key" translatable="false">anilist_key</string>
|
||||
<string name="mal_key" translatable="false">mal_key</string>
|
||||
<string name="opensubtitles_key" translatable="false">opensubtitles_key</string>
|
||||
<string name="nginx_key" translatable="false">nginx_key</string>
|
||||
<string name="example_password">senha123</string>
|
||||
<string name="example_username">MeuNomeLegal</string>
|
||||
<string name="example_email">oi@mundo.com</string>
|
||||
<string name="example_ip">127.0.0.1</string>
|
||||
<string name="example_site_name">MeuSiteLegal</string>
|
||||
<string name="example_site_url">examplo.com</string>
|
||||
<string name="example_lang_name">Codigo da Língua (bp)</string>
|
||||
|
||||
<!--
|
||||
<string name="mal_account_settings" translatable="false">MAL</string>
|
||||
<string name="anilist_account_settings" translatable="false">AniList</string>
|
||||
<string name="tmdb_account_settings" translatable="false">TMDB</string>
|
||||
<string name="imdb_account_settings" translatable="false">IMDB</string>
|
||||
<string name="kitsu_account_settings" translatable="false">Kitsu</string>
|
||||
<string name="trakt_account_settings" translatable="false">Trakt</string>
|
||||
-->
|
||||
<string name="login_format" formatted="true">%s %s</string>
|
||||
<string name="account">Conta</string>
|
||||
<string name="logout">Sair</string>
|
||||
<string name="login">Entrar</string>
|
||||
<string name="switch_account">Trocar conta</string>
|
||||
<string name="add_account">Adicionar conta</string>
|
||||
<string name="create_account">Criar conta</string>
|
||||
<string name="add_sync">Adicionar sincronização</string>
|
||||
<string name="added_sync_format" formatted="true">%s adicionado</string>
|
||||
<string name="upload_sync">Sincronizar</string>
|
||||
<string name="sync_score">Nota</string>
|
||||
<string name="sync_score_format" formatted="true">%d / 10</string>
|
||||
<string name="sync_total_episodes_none">/??</string>
|
||||
<string name="sync_total_episodes_some" formatted="true">/%d</string>
|
||||
<string name="authenticated_user" formatted="true">%s autenticado</string>
|
||||
<string name="authenticated_user_fail" formatted="true">Falha em autenticar para %s</string>
|
||||
|
||||
<!-- ============ -->
|
||||
<string name="none">Nenhum</string>
|
||||
<string name="normal">Normal</string>
|
||||
<string name="all">Tudo</string>
|
||||
<string name="max">Max</string>
|
||||
<string name="min">Min</string>
|
||||
<string name="subtitles_none" translatable="false">@string/none</string>
|
||||
<string name="subtitles_outline">Contornado</string>
|
||||
<string name="subtitles_depressed">Afundado</string>
|
||||
<string name="subtitles_shadow">Sombreado</string>
|
||||
<string name="subtitles_raised">Em Relevo</string>
|
||||
<string name="subtitle_offset">Sincronizar legendas</string>
|
||||
<string name="subtitle_offset_hint">1000ms</string>
|
||||
<string name="subtitle_offset_title">Atraso de legenda</string>
|
||||
<string name="subtitle_offset_extra_hint_later_format">Use isto se as legendas forem mostradas %dms adiantadas</string>
|
||||
<string name="subtitle_offset_extra_hint_before_format">Use isto se as legendas forem mostradas %dms atrasadas</string>
|
||||
<string name="subtitle_offset_extra_hint_none_format">Sem atraso de legenda</string>
|
||||
|
||||
<!--
|
||||
Example text (pangram) can optionally be translated; if you do, include all the letters in the alphabet,
|
||||
see:
|
||||
https://en.wikipedia.org/w/index.php?title=Pangram&oldid=225849300
|
||||
https://en.wikipedia.org/wiki/The_quick_brown_fox_jumps_over_the_lazy_dog
|
||||
-->
|
||||
<string name="subtitles_example_text">Já fiz vinho com toque de kiwi para belga sexy.</string>
|
||||
|
||||
<string name="recommended">Recomendada</string>
|
||||
<string name="player_loaded_subtitles" formatted="true">%s carregada</string>
|
||||
<string name="player_load_subtitles">Carregar de arquivo</string>
|
||||
<string name="player_load_subtitles_online">Carregar da Internet</string>
|
||||
<string name="downloaded_file">Arquivo baixado</string>
|
||||
<string name="actor_main">Protagonista</string>
|
||||
<string name="actor_supporting">Coadjuvante</string>
|
||||
<string name="actor_background">Figurante</string>
|
||||
|
||||
<string name="home_source">Fonte</string>
|
||||
<string name="home_random">Aleatório</string>
|
||||
|
||||
<string name="coming_soon">Em breve…</string>
|
||||
|
||||
<string name="quality_cam">Cam</string>
|
||||
<string name="quality_cam_rip">Cam</string>
|
||||
<string name="quality_cam_hd">Cam</string>
|
||||
<string name="quality_hq">HQ</string>
|
||||
<string name="quality_hd">HD</string>
|
||||
<string name="quality_ts">TS</string>
|
||||
<string name="quality_tc">TC</string>
|
||||
<string name="quality_blueray">BlueRay</string>
|
||||
<string name="quality_workprint">WP</string>
|
||||
<string name="quality_dvd">DVD</string>
|
||||
<string name="quality_4k">4K</string>
|
||||
<string name="quality_sd">SD</string>
|
||||
<string name="quality_uhd">UHD</string>
|
||||
<string name="quality_hdr">HDR</string>
|
||||
<string name="quality_sdr">SDR</string>
|
||||
<string name="quality_webrip">Web</string>
|
||||
|
||||
<string name="poster_image">Imagem de Poster</string>
|
||||
<string name="category_player">Player</string>
|
||||
<string name="resolution_and_title">Resolução e título</string>
|
||||
<string name="title">Título</string>
|
||||
<string name="resolution">Resolução</string>
|
||||
<string name="error_invalid_id">Id invalida</string>
|
||||
<string name="error_invalid_data">Dado invalido</string>
|
||||
<string name="error">Erro</string>
|
||||
<string name="subtitles_remove_captions">Remover legendas ocultas(CC) das legendas</string>
|
||||
<string name="subtitles_remove_bloat">Remover bloat das legendas</string>
|
||||
<string name="extras">Extras</string>
|
||||
<string name="trailer">Trailer</string>
|
||||
</resources>
|
|
@ -14,6 +14,10 @@
|
|||
<string name="year_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
|
||||
<string name="cast_format" formatted="true">Cast: %s</string>
|
||||
<string name="next_episode_format" formatted="true">Bölüm %d şu tarihte yayınlanacak: </string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%dd %dh %dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%dh %dm</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%dm</string>
|
||||
|
||||
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
||||
<string name="result_poster_img_des">Poster</string>
|
||||
|
@ -32,64 +36,67 @@
|
|||
<string name="rated_format" formatted="true">Puan: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Yeni güncelleme bulundu!\n%s -> %s</string>
|
||||
<string name="filler" formatted="true">Filler</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="duration_format" formatted="true">%d dakika</string>
|
||||
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="title_home">Ana Sayfa</string>
|
||||
<string name="title_home">Ana sayfa</string>
|
||||
<string name="title_search">Arama</string>
|
||||
<string name="title_downloads">İndirmeler</string>
|
||||
<string name="title_downloads">İndirilenler</string>
|
||||
<string name="title_settings">Ayarlar</string>
|
||||
|
||||
<string name="search_hint">Ara…</string>
|
||||
<string name="no_data">Veri Yok</string>
|
||||
<string name="episode_more_options_des">Daha Fazla Seçenek</string>
|
||||
<string name="search_hint_site" formatted="true">%s sağlayıcısında ara…</string>
|
||||
|
||||
<string name="no_data">Veri yok</string>
|
||||
<string name="episode_more_options_des">Daha fazla seçenek</string>
|
||||
<string name="next_episode">Sonraki bölüm</string>
|
||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
||||
<string name="result_tags">Türler</string>
|
||||
<string name="result_share">Paylaş</string>
|
||||
<string name="result_open_in_browser">Tarayıcıda Aç</string>
|
||||
<string name="skip_loading">Yüklemeyi Atla</string>
|
||||
<string name="result_open_in_browser">Tarayıcıda aç</string>
|
||||
<string name="skip_loading">Yüklemeyi atla</string>
|
||||
<string name="loading_chromecast">Yükleniyor…</string>
|
||||
|
||||
<string name="type_watching">İzleniyor</string>
|
||||
<string name="type_on_hold">Bekleniyor</string>
|
||||
<string name="type_on_hold">Beklemede</string>
|
||||
<string name="type_completed">Tamamlandı</string>
|
||||
<string name="type_dropped">Bırakıldı</string>
|
||||
<string name="type_plan_to_watch">Planlandı</string>
|
||||
<string name="type_none">Hiçbiri</string>
|
||||
<string name="type_re_watching">Yeniden İzleniyor</string>
|
||||
<string name="type_re_watching">Yeniden izleniyor</string>
|
||||
|
||||
<string name="play_movie_button">Filmi Oynat</string>
|
||||
<string name="play_torrent_button">Torrent Oynat</string>
|
||||
<string name="play_movie_button">Filmi oynat</string>
|
||||
<string name="play_torrent_button">Torrent oynat</string>
|
||||
<string name="pick_source">Kaynaklar</string>
|
||||
<string name="pick_subtitle">Altyazılar</string>
|
||||
<string name="pick_subtitle">Alt yazılar</string>
|
||||
<string name="reload_error">Yeniden bağlan…</string>
|
||||
<string name="go_back">Geri Dön</string>
|
||||
<string name="play_episode">Bölümü Oynat</string>
|
||||
<string name="go_back">Geri dön</string>
|
||||
<string name="play_episode">Bölümü oynat</string>
|
||||
<!--<string name="need_storage">Allow to download episodes</string>-->
|
||||
|
||||
<string name="download">İndir</string>
|
||||
<string name="downloaded">İndirildi</string>
|
||||
<string name="downloading">İndiriliyor</string>
|
||||
<string name="download_paused">İndirme Durduruldu</string>
|
||||
<string name="download_started">İndirme Başlatıldı</string>
|
||||
<string name="download_failed">İndirme Başarısız</string>
|
||||
<string name="download_canceled">İndirme İptal Edildi</string>
|
||||
<string name="download_done">İndirme Bitti</string>
|
||||
<string name="download_paused">İndirme duraklatıldı</string>
|
||||
<string name="download_started">İndirme başladı</string>
|
||||
<string name="download_failed">İndirme başarısız oldu</string>
|
||||
<string name="download_canceled">İndirme iptal edildi</string>
|
||||
<string name="download_done">İndirme bitti</string>
|
||||
<string name="download_format" translatable="false">%s - %s</string>
|
||||
<string name="stream">Yayınla</string>
|
||||
|
||||
<string name="error_loading_links_toast">Bağlantıları Yükleme Başarısız</string>
|
||||
<string name="download_storage_text">Dahili Depolama</string>
|
||||
<string name="error_loading_links_toast">Bağlantılar yüklenirken hata oluştu</string>
|
||||
<string name="download_storage_text">Dahili depolama</string>
|
||||
|
||||
<string name="app_dubbed_text">Dublaj</string>
|
||||
<string name="app_subbed_text">Altyazı</string>
|
||||
<string name="app_dubbed_text">Dublajlı</string>
|
||||
<string name="app_subbed_text">Alt yazılı</string>
|
||||
|
||||
<string name="popup_delete_file">Dosyayı Sil</string>
|
||||
<string name="popup_play_file">Dosyayı Oynat</string>
|
||||
<string name="popup_resume_download">İndirmeyi Sürdür</string>
|
||||
<string name="popup_pause_download">İndirmeyi Durdur</string>
|
||||
<string name="popup_delete_file">Dosyayı sil</string>
|
||||
<string name="popup_play_file">Dosyayı oynat</string>
|
||||
<string name="popup_resume_download">İndirmeyi sürdür</string>
|
||||
<string name="popup_pause_download">İndirmeyi duraklat</string>
|
||||
|
||||
<string name="pref_disable_acra">Otomatik hata raporlamayı devre dışı bırak</string>
|
||||
<string name="pref_disable_acra">Otomatik hata raporlamayı kapat</string>
|
||||
<string name="home_more_info">Daha fazla bilgi</string>
|
||||
<string name="home_expanded_hide">Gizle</string>
|
||||
<string name="home_play">Oynat</string>
|
||||
|
@ -99,23 +106,23 @@
|
|||
<string name="action_remove_from_bookmarks">Kaldır</string>
|
||||
<string name="action_add_to_bookmarks">İzleme durumunu ayarla</string>
|
||||
<string name="sort_apply">Uygula</string>
|
||||
<string name="sort_cancel">İptal Et</string>
|
||||
<string name="sort_cancel">İptal et</string>
|
||||
<string name="sort_copy">Kopyala</string>
|
||||
<string name="sort_close">Kapat</string>
|
||||
<string name="sort_clear">Temizle</string>
|
||||
<string name="sort_save">Kaydet</string>
|
||||
|
||||
<string name="player_speed">Oynatma Hızı</string>
|
||||
<string name="player_speed">Oynatıcı hızı</string>
|
||||
|
||||
<string name="subtitles_settings">Altyazı Ayarları</string>
|
||||
<string name="subs_text_color">Metin Rengi</string>
|
||||
<string name="subs_outline_color">Dış Hat Rengi</string>
|
||||
<string name="subs_background_color">Arkaplan Rengi</string>
|
||||
<string name="subs_window_color">Pencere Rengi</string>
|
||||
<string name="subs_edge_type">Kenar Tipi</string>
|
||||
<string name="subs_subtitle_elevation">Altyazı Yüksekliği</string>
|
||||
<string name="subs_font">Font</string>
|
||||
<string name="subs_font_size">Font Büyüklüğü</string>
|
||||
<string name="subtitles_settings">Alt yazı ayarları</string>
|
||||
<string name="subs_text_color">Yazı rengi</string>
|
||||
<string name="subs_outline_color">Dış hat rengi</string>
|
||||
<string name="subs_background_color">Arka plan rengi</string>
|
||||
<string name="subs_window_color">Pencere rengi</string>
|
||||
<string name="subs_edge_type">Kenar tipi</string>
|
||||
<string name="subs_subtitle_elevation">Alt yazı yüksekliği</string>
|
||||
<string name="subs_font">Yazı tipi</string>
|
||||
<string name="subs_font_size">Yazı boyutu</string>
|
||||
|
||||
<string name="search_provider_text_providers">Sağlayıcıları kullanarak ara</string>
|
||||
<string name="search_provider_text_types">Türleri kullanarak ara</string>
|
||||
|
@ -123,97 +130,99 @@
|
|||
<string name="benene_count_text">Geliştiricilere %d muz verildi</string>
|
||||
<string name="benene_count_text_none">Hiç muz verilmedi</string>
|
||||
|
||||
<string name="subs_auto_select_language">Dili otomatik seç</string>
|
||||
<string name="subs_download_languages">Dilleri İndir</string>
|
||||
<string name="subs_auto_select_language">Otomatik seçilecek dil</string>
|
||||
<string name="subs_download_languages">İndirilecek diller</string>
|
||||
<string name="subs_subtitle_languages">Alt yazı dili</string>
|
||||
<string name="subs_hold_to_reset_to_default">Varsayılana döndürmek için basılı tut</string>
|
||||
<string name="continue_watching">İzlemeye Devam Et</string>
|
||||
<string name="subs_import_text" formatted="true">Fontları içe aktarmak için %s konumuna yerleştirin</string>
|
||||
<string name="continue_watching">İzlemeye devam et</string>
|
||||
|
||||
<string name="action_remove_watching">Kaldır</string>
|
||||
<string name="action_open_watching">Daha Fazla Bilgi</string>
|
||||
<string name="action_open_watching">Daha fazla bilgi</string>
|
||||
<string name="action_open_play">@string/home_play </string>
|
||||
|
||||
<string name="vpn_might_be_needed">Bu sağlayıcının düzgün çalışması için VPN gerekebilir</string>
|
||||
<string name="vpn_torrent">Bu sağlayıcı bir Torrent, VPN kullanmanız önerilir</string>
|
||||
<string name="vpn_might_be_needed">Bu sağlayıcının düzgün çalışması için bir VPN gerekebilir</string>
|
||||
<string name="vpn_torrent">Bu sağlayıcı bir torrent. VPN önerilir</string>
|
||||
|
||||
<string name="provider_info_meta">Site Metadata verisini sağlamadı, video eğer sitede bulunmuyorsa oynatma başarısız olabilir</string>
|
||||
<string name="provider_info_meta">Metadata verisi site tarafından sağlanmadı, video yüklemesi eğer sitede bulunmuyorsa oynatma başarısız olacak</string>
|
||||
|
||||
<string name="torrent_plot">Açıklama</string>
|
||||
<string name="normal_no_plot">Senaryo bulunamadı</string>
|
||||
<string name="normal_no_plot">Konu bulunamadı</string>
|
||||
<string name="torrent_no_plot">Açıklama bulunamadı</string>
|
||||
|
||||
<string name="show_log_cat">logcat\'i göster 🐈</string>
|
||||
<string name="show_log_cat">Logcat\'i göster 🐈</string>
|
||||
|
||||
<string name="picture_in_picture">Resim-içinde-resim</string>
|
||||
<string name="picture_in_picture_des">Diğer uygulamaların üzerinde minyatür oynatıcıyı çalıştırır</string>
|
||||
<string name="player_size_settings">Yeniden boyutlandırma butonu</string>
|
||||
<string name="player_size_settings_des">Siyah kenarlıkları kaldır</string>
|
||||
<string name="player_subtitles_settings">Altyazılar</string>
|
||||
<string name="player_subtitles_settings_des">Oynatıcı altyazı seçenekleri</string>
|
||||
<string name="chromecast_subtitles_settings">Chromecast Altyazıları</string>
|
||||
<string name="chromecast_subtitles_settings_des">Chromecast Altyazı Ayarları</string>
|
||||
<string name="picture_in_picture_des">Diğer uygulamaların üzerinde minyatür bir oynatıcıda oynatmaya devam eder</string>
|
||||
<string name="player_size_settings">Oynatıcı yeniden boyutlandırma butonu</string>
|
||||
<string name="player_size_settings_des">Siyah sınırları kaldır</string>
|
||||
<string name="player_subtitles_settings">Alt yazı</string>
|
||||
<string name="player_subtitles_settings_des">Oynatıcı alt yazı ayarları</string>
|
||||
<string name="chromecast_subtitles_settings">Chromecast alt yazı</string>
|
||||
<string name="chromecast_subtitles_settings_des">Chromecast alt yazı ayarları</string>
|
||||
|
||||
<string name="eigengraumode_settings">Eigengravy Modu</string>
|
||||
<string name="eigengraumode_settings_des">Hız seçeneği ekler</string>
|
||||
<string name="eigengraumode_settings">Eigengravy modu</string>
|
||||
<string name="eigengraumode_settings_des">Oynatıcıya bir hız seçeneği ekler</string>
|
||||
<string name="swipe_to_seek_settings">Gözlemek için kaydır</string>
|
||||
<string name="swipe_to_seek_settings_des">Zamanı ayarlamak için sağa ve sola kaydır</string>
|
||||
<string name="swipe_to_seek_settings_des">Zamanı ayarlamak için sağa veya sola kaydır</string>
|
||||
<string name="swipe_to_change_settings">Ayarları değiştirmek için kaydır</string>
|
||||
<string name="swipe_to_change_settings_des">Sol ve sağ taraftan kaydırarak parlaklık ve sesi ayarla</string>
|
||||
<string name="double_tap_to_seek_settings">Gözlemek için çift tıkla</string>
|
||||
<string name="double_tap_to_pause_settings">Durdurmak için çift tıkla</string>
|
||||
<string name="double_tap_to_seek_settings_des">İleri ve geri atlamak için sağ ve sola çift tıkla
|
||||
</string>
|
||||
<string name="double_tap_to_pause_settings_des">Durdurmak için ortaya bas</string>
|
||||
<string name="double_tap_to_seek_amount_settings">Player seek amount</string>
|
||||
<string name="double_tap_to_seek_settings_des">İleri ve geri atlamak için sağa ve sola çift tıkla</string>
|
||||
<string name="double_tap_to_pause_settings_des">Durdurmak için ortaya tıkla</string>
|
||||
<string name="use_system_brightness_settings">Sistem parlaklığını kullan</string>
|
||||
<string name="use_system_brightness_settings_des">Oynatıcıda karanlık kaplama yerine sistem parlaklığını kullan
|
||||
</string>
|
||||
<string name="use_system_brightness_settings_des">Oynatıcıda karanlık kaplama yerine sistem parlaklığını kullan</string>
|
||||
|
||||
<string name="episode_sync_settings">İzleme ilerlemesini güncelle</string>
|
||||
<string name="episode_sync_settings_des">Mevcut bölüm ilerlemesini otomatik güncelle</string>
|
||||
|
||||
<string name="restore_settings">Yedekten veri iade et</string>
|
||||
<string name="killswitch_settings">Github\'dan en son metadata\'yı indir</string>
|
||||
<string name="killswitch_settings_des">If you want access to all providers (even broken ones) turn this off Tüm sağlayıcılara erişim istiyorsan (bozuk olanlar dahil) bunu kapat</string>
|
||||
<string name="restore_settings">Yedekten geri yükle</string>
|
||||
<string name="killswitch_settings">GitHub\'tan en son metadata\'yı indir</string>
|
||||
<string name="killswitch_settings_des">Tüm sağlayıcılara erişmek istiyorsanız (bozuk olanlara bile) bunu kapatın</string>
|
||||
|
||||
<string name="backup_settings">Veri Yedekle</string>
|
||||
<string name="restore_success">Yedek dosyayı yüklendi</string>
|
||||
<string name="restore_failed_format" formatted="true">Dosyadan veri iade etme başarısız %s</string>
|
||||
<string name="backup_success">Veri başarıyla depolandı</string>
|
||||
<string name="backup_settings">Yedekle</string>
|
||||
<string name="restore_success">Yedek dosyası yüklendi</string>
|
||||
<string name="restore_failed_format" formatted="true">Geri yükleme başarısız oldu: %s</string>
|
||||
<string name="backup_success">Başarıyla yedeklendi</string>
|
||||
<string name="backup_failed">Depolama izinleri eksik, lütfen tekrar deneyin</string>
|
||||
<string name="backup_failed_error_format">Yedekleme hatası %s</string>
|
||||
<string name="backup_failed_error_format">%s yedeklenirken hata</string>
|
||||
|
||||
<string name="search">Ara</string>
|
||||
<string name="category_account">Hesaplar</string>
|
||||
<string name="category_updates">Güncellemeler ve yedek</string>
|
||||
<string name="nginx_info_title">Nginx nedir?</string>
|
||||
<string name="nginx_info_summary">Nginx sahip olduğun sunucundaki dosyaları görüntülemek için kullanılabilecek bir yazılımdır. Nginx kurulum rehberini görmek için tıkla</string>
|
||||
<string name="nginx_info_summary">Nginx, sahip olduğunuz bir sunucudan dosyaları görüntülemek için kullanılabilecek bir yazılımdır. Nginx kurulum kılavuzunu görmek için tıklayın</string>
|
||||
|
||||
<string name="settings_info">Bilgi</string>
|
||||
<string name="advanced_search">Gelişmiş Arama</string>
|
||||
<string name="advanced_search_des">Sağlaayıcılar ile ayrılmış arama sonuçlarını verir</string>
|
||||
<string name="bug_report_settings_off">Sadece çökme durumunda veri gönderir</string>
|
||||
<string name="advanced_search">Gelişmiş arama</string>
|
||||
<string name="advanced_search_des">Sağlayıcılara göre ayrılmış arama sonuçlarını verir</string>
|
||||
<string name="bug_report_settings_off">Yalnızca çökmelerle ilgili verileri gönderir</string>
|
||||
<string name="bug_report_settings_on">Hiç veri göndermez</string>
|
||||
<string name="show_fillers_settings">Anime için filler bölümleri gösterir</string>
|
||||
<string name="show_trailers_settings">Fragmanları göster</string>
|
||||
<string name="kitsu_settings">Kitsu\'dan posterleri göster</string>
|
||||
|
||||
<string name="updates_settings">Uygulama güncellemelerini göster</string>
|
||||
<string name="updates_settings_des">Uygulamayı başlattığında yeni güncelleme olup olmadığını kontrol et</string>
|
||||
<string name="uprereleases_settings">Ön sürüme güncelle</string>
|
||||
<string name="uprereleases_settings_des"> Sadece tam sürümler yerine ön sürümleri de ara</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="lightnovel">Aynı geliştiricilerden LightNovel uygulaması</string>
|
||||
<string name="anim">Aynı geliştiricilerden anime uygulaması</string>
|
||||
<string name="updates_settings_des">Başlangıçta yeni güncellemeleri otomatik olarak ara</string>
|
||||
<string name="uprereleases_settings">Ön sürümlere güncelle</string>
|
||||
<string name="uprereleases_settings_des">Sadece tam sürümler yerine ön sürüm güncellemelerini de ara</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="lightnovel">Aynı geliştiriciler tarafından LightNovel uygulaması</string>
|
||||
<string name="anim">Aynı geliştiriciler tarafından anime uygulaması</string>
|
||||
<string name="discord">Discord\'a katıl</string>
|
||||
<string name="benene">Geliştiricilere muz ver</string>
|
||||
<string name="benene_des">Verilen muzlar</string>
|
||||
|
||||
<string name="app_language">Uygulama Dili</string>
|
||||
<string name="benene_des">Verilen muz</string>
|
||||
|
||||
<string name="app_language">Uygulama dili</string>
|
||||
|
||||
<string name="no_chromecast_support_toast">Bu sağlayıcının Chromecast desteği yok</string>
|
||||
<string name="no_links_found_toast">Bağlantı bulunamadı</string>
|
||||
|
||||
|
||||
<string name="copy_link_toast">Bağlantı panoya kopyalandı</string>
|
||||
<string name="play_episode_toast">Bölümü Oynat</string>
|
||||
<string name="subs_default_reset_toast">Varsayılan değere dön</string>
|
||||
<string name="acra_report_toast">Üzgünüm, uygulama çöktü. Anonim hata raporu geliştiricilere gönderilecek
|
||||
</string>
|
||||
<string name="play_episode_toast">Bölümü oynat</string>
|
||||
<string name="subs_default_reset_toast">Varsayılana sıfırla</string>
|
||||
<string name="acra_report_toast">Üzgünüz, uygulama çöktü. Geliştiricilere isimsiz bir hata raporu gönderilecek</string>
|
||||
|
||||
<string name="season">Sezon</string>
|
||||
<string name="no_season">Sezon yok</string>
|
||||
|
@ -221,18 +230,17 @@
|
|||
<string name="episodes">Bölümler</string>
|
||||
<string name="season_short">S</string>
|
||||
<string name="episode_short">B</string>
|
||||
<string name="no_episodes_found">Bölüm Bulunamadı</string>
|
||||
<string name="no_episodes_found">Bölüm bulunamadı</string>
|
||||
|
||||
<string name="delete_file">Dosyayı Sil</string>
|
||||
<string name="delete_file">Dosyayı sil</string>
|
||||
<string name="delete">Sil</string>
|
||||
<string name="cancel" translatable="false">@string/sort_cancel</string>
|
||||
<string name="pause">Durdur</string>
|
||||
<string name="resume">Sürdür</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Dosya tamamen silinecek %s\nEmin misin?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm\nkalan</string>
|
||||
|
||||
<string name="delete_message" formatted="true">%s dosyası tamamen silinecek\nEmins misiniz?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm\nkaldı</string>
|
||||
|
||||
<string name="status_ongoing">Devam ediyor</string>
|
||||
<string name="status_completed">Tamamlandı</string>
|
||||
|
@ -243,83 +251,98 @@
|
|||
<string name="site">Site</string>
|
||||
<string name="synopsis">Özet</string>
|
||||
|
||||
<string name="queued">kuyrukta</string>
|
||||
<string name="no_subtitles">Altyazı Yok</string>
|
||||
<string name="queued">Sıraya alındı</string>
|
||||
<string name="no_subtitles">Alt yazı yok</string>
|
||||
<string name="default_subtitles">Varsayılan</string>
|
||||
|
||||
<string name="free_storage">Kullanılabilir</string>
|
||||
<string name="free_storage">Boş</string>
|
||||
<string name="used_storage">Kullanılan</string>
|
||||
<string name="app_storage">Uygulama</string>
|
||||
|
||||
<!--plural-->
|
||||
<string name="movies">Filmler</string>
|
||||
<string name="tv_series">Diziler</string>
|
||||
<string name="cartoons">Çizgi Filmler</string>
|
||||
<string name="anime">Anime</string>
|
||||
<string name="cartoons">Çizgi filmler</string>
|
||||
<string name="anime">Animeler</string>
|
||||
<string name="torrent">Torrentler</string>
|
||||
<string name="documentaries">Belgeseller</string>
|
||||
<string name="ova">OVA</string>
|
||||
<string name="asian_drama">Asya Dramaları</string>
|
||||
<string name="asian_drama">Asya dramaları</string>
|
||||
|
||||
<!--singular-->
|
||||
<string name="movies_singular">Film</string>
|
||||
<string name="tv_series_singular">Dizi</string>
|
||||
<string name="cartoons_singular">Çizgi Film</string>
|
||||
<string name="cartoons_singular">Çizgi film</string>
|
||||
<string name="anime_singular">@string/anime</string>
|
||||
<string name="ova_singular">@string/ova</string>
|
||||
<string name="torrent_singular">Torrent</string>
|
||||
<string name="documentaries_singular">Belgesel</string>
|
||||
<string name="asian_drama_singular">Asya Draması</string>
|
||||
<string name="asian_drama_singular">Asya draması</string>
|
||||
|
||||
<string name="source_error">Kaynak hatası</string>
|
||||
<string name="remote_error">Uzak sunucu hatası</string>
|
||||
<string name="render_error">Oluşturucu hatası</string>
|
||||
<string name="unexpected_error">Oynatıcıda beklenmeyen hata</string>
|
||||
<string name="storage_error">İndirme hatası, depolama izinlerini kontrol et</string>
|
||||
<string name="remote_error">Sunucu hatası</string>
|
||||
<string name="render_error">İşleyici hatası</string>
|
||||
<string name="unexpected_error">Beklenmeyen oynatıcı hatası</string>
|
||||
<string name="storage_error">İndirme hatası, depolama izinlerini kontrol edin</string>
|
||||
|
||||
|
||||
<string name="episode_action_chromecast_episode">Chromecast bölümü</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast yansıtma</string>
|
||||
<string name="episode_action_chromecast_episode">Bölümü Chromecast ile yayınla</string>
|
||||
<string name="episode_action_chromecast_mirror">Bağlantıyı Chromecast ile yayınla</string>
|
||||
<string name="episode_action_play_in_app">Uygulamada oynat</string>
|
||||
<string name="episode_action_play_in_vlc">VLC\'de oynat</string>
|
||||
<string name="episode_action_play_in_browser">Tarayıcıda oynat</string>
|
||||
<string name="episode_action_copy_link">Bağlantıyı kopyala</string>
|
||||
<string name="episode_action_copy_link">Linki kopyala</string>
|
||||
<string name="episode_action_auto_download">Otomatik indir</string>
|
||||
<string name="episode_action_download_mirror">Ayna kaynaktan indir</string>
|
||||
<string name="episode_action_reload_links">Bağlantıyı yeniden yükle</string>
|
||||
<string name="episode_action_download_subtitle">Altyazıları indir</string>
|
||||
<string name="episode_action_download_mirror">Şu kaynaktan indir</string>
|
||||
<string name="episode_action_reload_links">Bağlantıları yenile</string>
|
||||
<string name="episode_action_download_subtitle">Alt yazıları indir</string>
|
||||
|
||||
<string name="show_hd">Kalite etiketi</string>
|
||||
<string name="show_dub">Dublaj etiketi</string>
|
||||
<string name="show_sub">Alt yazı etiketi</string>
|
||||
<string name="show_title">Başlık</string>
|
||||
<string name="show_hd_key" translatable="false">show_hd_key</string>
|
||||
<string name="show_dub_key" translatable="false">show_dub_key</string>
|
||||
<string name="show_sub_key" translatable="false">show_sub_key</string>
|
||||
<string name="show_title_key" translatable="false">show_title_key</string>
|
||||
<string name="poster_ui_settings">Poster üzerindeki öğeler</string>
|
||||
|
||||
<string name="no_update_found">Güncelleme bulunamadı</string>
|
||||
<string name="check_for_update">Güncellemeyi kontrol et</string>
|
||||
<string name="check_for_update">Güncellemeleri denetle</string>
|
||||
|
||||
<string name="video_lock">Kilitle</string>
|
||||
<string name="video_aspect_ratio_resize">Boyutlandır</string>
|
||||
<string name="video_aspect_ratio_resize">Yeniden boyutlandır</string>
|
||||
<string name="video_source">Kaynak</string>
|
||||
<string name="video_skip_op">Başlangıcı atla</string>
|
||||
<string name="video_skip_op">OP\'yi geç</string>
|
||||
|
||||
<string name="dont_show_again">Tekrar gösterme</string>
|
||||
<string name="dont_show_again">Bir daha gösterme</string>
|
||||
<string name="skip_update">Bu güncellemeyi atla</string>
|
||||
<string name="update">Güncelle</string>
|
||||
<string name="watch_quality_pref">Tercih edilen izleme kalitesi</string>
|
||||
<string name="limit_title">Oynatıcıda başlık karakterini sınırla</string>
|
||||
<string name="video_buffer_size_settings">Video ara bellek boyutu</string>
|
||||
<string name="video_buffer_length_settings">Video ara bellek uzunluğu</string>
|
||||
<string name="video_buffer_disk_settings">Video disk önbelleği</string>
|
||||
<string name="limit_title">Oynatıcıdaki maksimum başlık karakter sayısı</string>
|
||||
<string name="limit_title_rez">Oynatıcının üst tarafındaki öğeler</string>
|
||||
|
||||
<string name="video_buffer_size_settings">Video arabelleği boyutu</string>
|
||||
<string name="video_buffer_length_settings">Video arabelleği uzunluğu</string>
|
||||
<string name="video_buffer_disk_settings">Diskteki video önbelleği</string>
|
||||
<string name="video_buffer_clear_settings">Video ve resim önbelleğini temizle</string>
|
||||
|
||||
<string name="video_ram_description">Android TV cihazları veya eski telefonlar gibi RAM\'i düşük olan sistemlerde çok yüksek ayarlarsanız sorun çıkarabilir</string>
|
||||
<string name="video_disk_description">Çok yükseğe ayarlarsanız, Android TV cihazları gibi düşük depolama alanına sahip sistemlerde sorunlara neden olabilir</string>
|
||||
<string name="video_ram_description">Çok yükseğe ayarlanırsa rastgele çökmelere neden olur. Android TV veya eski bir telefon gibi ram miktarı düşük cihazlarda değiştirmeyin</string>
|
||||
<string name="video_disk_description">Çok yükseğe ayarlanırsa, Android TV cihazları gibi düşük depolama alanına sahip sistemlerde sorunlara neden olabilir</string>
|
||||
|
||||
<string name="dns_pref">HTTPS üzeri DNS</string>
|
||||
<string name="dns_pref_summary">İSS engellerine karşı kullanışlu</string>
|
||||
<string name="dns_pref">HTTPS üzerinden DNS</string>
|
||||
<string name="dns_pref_summary">ISP bloklarını atlatmak için kullanışlıdır</string>
|
||||
|
||||
<string name="download_path_pref">İndirme yolu</string>
|
||||
<string name="add_site_pref">Klon site</string>
|
||||
<string name="remove_site_pref">Siteyi kaldır</string>
|
||||
<string name="add_site_summary">Farklı bir URL ile mevcut bir sitenin klonunu ekleyin</string>
|
||||
|
||||
<string name="nginx_url_pref">Nginx sunucu url\'si</string>
|
||||
<string name="download_path_pref">İndirme konumu</string>
|
||||
|
||||
<string name="display_subbed_dubbed_settings">Dublajlı/Altyazılı Anime göster</string>
|
||||
<string name="nginx_url_pref">Nginx sunucu URL\'i</string>
|
||||
|
||||
<string name="resize_fit">Ekrana Sığdır</string>
|
||||
<string name="display_subbed_dubbed_settings">Dublajlı/Alt yazılı animeleri göster</string>
|
||||
|
||||
<string name="resize_fit">Ekrana sığdır</string>
|
||||
<string name="resize_fill">Uzat</string>
|
||||
<string name="resize_zoom">Yakınlaştır</string>
|
||||
|
||||
|
@ -342,21 +365,39 @@
|
|||
CloudStream 3 at your own risk.
|
||||
</string>
|
||||
<string name="category_general">Genel</string>
|
||||
<string name="provider_lang_settings">Sağlayıcı Dilleri</string>
|
||||
<string name="app_layout">Uygulama Düzeni</string>
|
||||
<string name="preferred_media_settings">Tercih Edilen Medya</string>
|
||||
<string name="random_button_settings">Rastgele butonu</string>
|
||||
<string name="random_button_settings_desc">Ana sayfada rastgele butonunu göster</string>
|
||||
<string name="provider_lang_settings">Sağlayıcı dilleri</string>
|
||||
<string name="app_layout">Uygulama düzeni</string>
|
||||
<string name="preferred_media_settings">Tercih edilen medya</string>
|
||||
<string name="subtitles_encoding">Alt yazı kodlaması</string>
|
||||
<string name="category_preferred_media_and_lang">Dil</string>
|
||||
<string name="category_ui">Düzen</string>
|
||||
|
||||
<string name="automatic">Otomatik</string>
|
||||
<string name="tv_layout">TV Düzeni</string>
|
||||
<string name="phone_layout">Telefon Düzeni</string>
|
||||
<string name="emulator_layout">Emülatör Düzeni</string>
|
||||
<string name="tv_layout">TV düzeni</string>
|
||||
<string name="phone_layout">Telefon düzeni</string>
|
||||
<string name="emulator_layout">Emülatör düzeni</string>
|
||||
|
||||
<string name="primary_color_settings">Birincil renk</string>
|
||||
<string name="app_theme_settings">Uygualama teması</string>
|
||||
<string name="bottom_title_settings">Poster başlık konumu</string>
|
||||
<string name="bottom_title_settings_des">Başlığı posterin altına yerleştir</string>
|
||||
|
||||
<string name="primary_color_settings">Birincil Renk</string>
|
||||
<string name="app_theme_settings">Uygulama Teması</string>
|
||||
|
||||
<!-- account stuff -->
|
||||
<string name="anilist_key" translatable="false">anilist_key</string>
|
||||
<string name="mal_key" translatable="false">mal_key</string>
|
||||
<string name="opensubtitles_key" translatable="false">opensubtitles_key</string>
|
||||
<string name="nginx_key" translatable="false">nginx_key</string>
|
||||
<string name="example_password">şifre123</string>
|
||||
<string name="example_username">HavalıKullanıcıAdı</string>
|
||||
<string name="example_email">hello@world.com</string>
|
||||
<string name="example_ip">127.0.0.1</string>
|
||||
<string name="example_site_name">MyCoolSite</string>
|
||||
<string name="example_site_url">example.com</string>
|
||||
<string name="example_lang_name">Dil kodu (tr)</string>
|
||||
|
||||
<!--
|
||||
<string name="mal_account_settings" translatable="false">MAL</string>
|
||||
<string name="anilist_account_settings" translatable="false">AniList</string>
|
||||
|
@ -366,11 +407,12 @@
|
|||
<string name="trakt_account_settings" translatable="false">Trakt</string>
|
||||
-->
|
||||
<string name="login_format" formatted="true">%s %s</string>
|
||||
<string name="account">hesap</string>
|
||||
<string name="logout">Çıkış</string>
|
||||
<string name="login">Giriş</string>
|
||||
<string name="account">hesabı</string>
|
||||
<string name="logout">Çıkış yap</string>
|
||||
<string name="login">Giriş yap</string>
|
||||
<string name="switch_account">Hesap değiştir</string>
|
||||
<string name="add_account">Hesap ekle</string>
|
||||
<string name="create_account">Hesap oluştur</string>
|
||||
<string name="add_sync">Bölüm takibi ekle</string>
|
||||
<string name="added_sync_format" formatted="true">Eklendi %s</string>
|
||||
<string name="upload_sync">Senkronize et</string>
|
||||
|
@ -378,26 +420,26 @@
|
|||
<string name="sync_score_format" formatted="true">%d / 10</string>
|
||||
<string name="sync_total_episodes_none">/??</string>
|
||||
<string name="sync_total_episodes_some" formatted="true">/%d</string>
|
||||
<string name="authenticated_user" formatted="true">Doğrulandı %s</string>
|
||||
<string name="authenticated_user_fail" formatted="true">Doğrulama Başarısız %s</string>
|
||||
<string name="authenticated_user" formatted="true">%s için doğrulama başarılı</string>
|
||||
<string name="authenticated_user_fail" formatted="true">%s için doğrulama başarısız</string>
|
||||
|
||||
<!-- ============ -->
|
||||
<string name="none">Hiçbiri</string>
|
||||
<string name="normal">Normal</string>
|
||||
<string name="all">Hepsi</string>
|
||||
<string name="max">Maks</string>
|
||||
<string name="min">Min</string>
|
||||
<string name="max">Maksimum</string>
|
||||
<string name="min">Minimum</string>
|
||||
<string name="subtitles_none" translatable="false">@string/none</string>
|
||||
<string name="subtitles_outline">Dış Hat</string>
|
||||
<string name="subtitles_depressed">Depresif</string>
|
||||
<string name="subtitles_outline">Dış hat</string>
|
||||
<string name="subtitles_depressed">Çökmüş</string>
|
||||
<string name="subtitles_shadow">Gölge</string>
|
||||
<string name="subtitles_raised">Yükseltilmiş</string>
|
||||
<string name="subtitle_offset">Altyazı senkronu</string>
|
||||
<string name="subtitle_offset">Alt yazı senkronu</string>
|
||||
<string name="subtitle_offset_hint">1000ms</string>
|
||||
<string name="subtitle_offset_title">Altyazı gecikmesi</string>
|
||||
<string name="subtitle_offset_extra_hint_later_format">Bunu altyazılar %dms erken geliyorsa kullan</string>
|
||||
<string name="subtitle_offset_extra_hint_before_format">Bunu altyazılar %dms geç kalıyorsa kullan</string>
|
||||
<string name="subtitle_offset_extra_hint_none_format">Altyazı gecikmesi yok</string>
|
||||
<string name="subtitle_offset_title">Alt yazı gecikmesi</string>
|
||||
<string name="subtitle_offset_extra_hint_later_format">Alt yazılar %dms erken gözüküyorsa bunu kullanın</string>
|
||||
<string name="subtitle_offset_extra_hint_before_format">Alt yazılar %dms geç gözüküyorsa bunu kullanın</string>
|
||||
<string name="subtitle_offset_extra_hint_none_format">Alt yazı gecikmesi yok</string>
|
||||
|
||||
<!--
|
||||
Example text (pangram) can optionally be translated; if you do, include all the letters in the alphabet,
|
||||
|
@ -407,17 +449,19 @@
|
|||
-->
|
||||
<string name="subtitles_example_text">Pijamalı hasta yağız şoföre çabucak güvendi</string>
|
||||
|
||||
<string name="recommended">Tavsiye edilen</string>
|
||||
<string name="player_loaded_subtitles" formatted="true">Yüklendi %s</string>
|
||||
<string name="recommended">Önerilen</string>
|
||||
<string name="player_loaded_subtitles" formatted="true">%s yüklendi</string>
|
||||
<string name="player_load_subtitles">Dosyadan yükle</string>
|
||||
<string name="player_load_subtitles_online">İnternetten yükle</string>
|
||||
<string name="downloaded_file">İndirilen dosya</string>
|
||||
<string name="actor_main">Ana</string>
|
||||
<string name="actor_supporting">Destekliyor</string>
|
||||
<string name="actor_background">Arkaplan</string>
|
||||
<string name="actor_main">Baş</string>
|
||||
<string name="actor_supporting">Yardımcı</string>
|
||||
<string name="actor_background">Geri plan</string>
|
||||
|
||||
<string name="home_source">Kaynak</string>
|
||||
<string name="home_random">Rastgele</string>
|
||||
|
||||
<string name="coming_soon">Çok Yakında…</string>
|
||||
<string name="coming_soon">Çok yakında…</string>
|
||||
|
||||
<string name="quality_cam">Cam</string>
|
||||
<string name="quality_cam_rip">Cam</string>
|
||||
|
@ -436,5 +480,17 @@
|
|||
<string name="quality_sdr">SDR</string>
|
||||
<string name="quality_webrip">Web</string>
|
||||
|
||||
<string name="poster_image">Poster Resmi</string>
|
||||
<string name="poster_image">Poster fotoğrafı</string>
|
||||
<string name="category_player">Oynatıcı</string>
|
||||
<string name="resolution_and_title">Çözünürlük ve başlık</string>
|
||||
<string name="title">Başlık</string>
|
||||
<string name="resolution">Çözünürlük</string>
|
||||
<string name="error_invalid_id">Geçersiz ID</string>
|
||||
<string name="error_invalid_data">Geçersiz veri</string>
|
||||
<string name="error">Hata</string>
|
||||
<string name="subtitles_remove_captions">Alt yazılardan seçmeli alt yazıyı kaldır</string>
|
||||
<string name="subtitles_remove_bloat">Alt yazılardaki şişkinliği kaldır</string>
|
||||
<string name="extras">Ekstralar</string>
|
||||
<string name="trailer">Fragman</string>
|
||||
</resources>
|
||||
|
||||
|
|
|
@ -261,7 +261,7 @@
|
|||
<item>Tối</item>
|
||||
<item>Xám</item>
|
||||
<item>Amoled</item>
|
||||
<item>Flashbang</item>
|
||||
<item>Sáng</item>
|
||||
</string-array>
|
||||
<string-array name="themes_names_values">
|
||||
<item>AmoledLight</item>
|
||||
|
|
|
@ -1,9 +1,63 @@
|
|||
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
|
||||
<resources>
|
||||
<!-- KEYS DON'T TRANSLATE -->
|
||||
<string name="search_providers_list_key" translatable="false">search_providers_list</string>
|
||||
<string name="locale_key" translatable="false">app_locale</string>
|
||||
<string name="search_types_list_key" translatable="false">search_type_list</string>
|
||||
<string name="auto_update_key" translatable="false">auto_update</string>
|
||||
<string name="skip_update_key" translatable="false">skip_update_key</string>
|
||||
<string name="prerelease_update_key" translatable="false">prerelease_update</string>
|
||||
<string name="manual_check_update_key" translatable="false">manual_check_update</string>
|
||||
<string name="fast_forward_button_time_key" translatable="false">fast_forward_button_time</string>
|
||||
<string name="benene_count" translatable="false">benene_count</string>
|
||||
<string name="subtitle_settings_key" translatable="false">subtitle_settings_key</string>
|
||||
<string name="subtitle_settings_chromecast_key" translatable="false">subtitle_settings_chromecast_key</string>
|
||||
<string name="quality_pref_key" translatable="false">quality_pref_key</string>
|
||||
<string name="prefer_limit_title_key" translatable="false">prefer_limit_title_key</string>
|
||||
<string name="prefer_limit_title_rez_key" translatable="false">prefer_limit_title_rez_key</string>
|
||||
<string name="video_buffer_size_key" translatable="false">video_buffer_size_key</string>
|
||||
<string name="video_buffer_length_key" translatable="false">video_buffer_length_key</string>
|
||||
<string name="video_buffer_clear_key" translatable="false">video_buffer_clear_key</string>
|
||||
<string name="video_buffer_disk_key" translatable="false">video_buffer_disk_key</string>
|
||||
<string name="prerelease_commit_hash" translatable="false">unknown_prerelease</string>
|
||||
<string name="use_system_brightness_key" translatable="false">use_system_brightness_key</string>
|
||||
<string name="swipe_enabled_key" translatable="false">swipe_enabled_key</string>
|
||||
<string name="playback_speed_enabled_key" translatable="false">playback_speed_enabled_key</string>
|
||||
<string name="player_resize_enabled_key" translatable="false">player_resize_enabled_key</string>
|
||||
<string name="pip_enabled_key" translatable="false">pip_enabled_key</string>
|
||||
<string name="double_tap_enabled_key" translatable="false">double_tap_enabled_key</string>
|
||||
<string name="double_tap_pause_enabled_key" translatable="false">double_tap_pause_enabled_key</string>
|
||||
<string name="double_tap_seek_time_key" translatable="false">double_tap_seek_time_key</string>
|
||||
<string name="swipe_vertical_enabled_key" translatable="false">swipe_vertical_enabled_key</string>
|
||||
<string name="display_sub_key" translatable="false">display_sub_key</string>
|
||||
<string name="show_fillers_key" translatable="false">show_fillers_key</string>
|
||||
<string name="show_trailers_key" translatable="false">show_trailers_key</string>
|
||||
<string name="show_kitsu_posters_key" translatable="false">show_kitsu_posters_key</string>
|
||||
<string name="random_button_key" translatable="false">random_button_key</string>
|
||||
<string name="provider_lang_key" translatable="false">provider_lang_key</string>
|
||||
<string name="dns_key" translatable="false">dns_key</string>
|
||||
<string name="download_path_key" translatable="false">download_path_key</string>
|
||||
<string name="app_name_download_path" translatable="false">Cloudstream</string>
|
||||
<string name="app_layout_key" translatable="false">app_layout_key</string>
|
||||
<string name="primary_color_key" translatable="false">primary_color_key</string>
|
||||
<string name="restore_key" translatable="false">restore_key</string>
|
||||
<string name="killswitch_key" translatable="false">killswitch_key</string>
|
||||
<string name="backup_key" translatable="false">backup_key</string>
|
||||
<string name="prefer_media_type_key" translatable="false">prefer_media_type_key</string>
|
||||
<string name="app_theme_key" translatable="false">app_theme_key</string>
|
||||
<string name="episode_sync_enabled_key" translatable="false">episode_sync_enabled_key</string>
|
||||
<string name="log_enabled_key" translatable="false">log_enabled_key</string>
|
||||
<string name="show_logcat_key" translatable="false">show_logcat_key</string>
|
||||
<string name="bottom_title_key" translatable="false">bottom_title_key</string>
|
||||
<string name="poster_ui_key" translatable="false">poster_ui_key</string>
|
||||
<string name="subtitles_encoding_key" translatable="false">subtitles_encoding_key</string>
|
||||
<string name="override_site_key" translatable="false">override_site_key</string>
|
||||
|
||||
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
|
||||
<string name="extra_info_format" translatable="false" formatted="true">%d %s | %sMB</string>
|
||||
<string name="storage_size_format" translatable="false" formatted="true">%s • %sGB</string>
|
||||
<string name="download_size_format" translatable="false" formatted="true">%sMB / %sMB</string>
|
||||
<string name="mb_format" translatable="false" formatted="true">%dMB</string>
|
||||
<string name="episode_name_format" translatable="false" formatted="true">%s %s</string>
|
||||
<string name="ffw_text_format" translatable="false" formatted="true">+%d</string>
|
||||
<string name="rew_text_format" translatable="false" formatted="true">-%d</string>
|
||||
|
@ -11,11 +65,11 @@
|
|||
<string name="rew_text_regular_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="rating_format" translatable="false" formatted="true">%.1f/10.0</string>
|
||||
<string name="year_format" translatable="false" formatted="true">%d</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
|
||||
<string name="cast_format" formatted="true">Cast: %s</string>
|
||||
<string name="next_episode_format" formatted="true">L\'episodio %d uscirà in</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%dg %do %dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%do %dm</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%s Tập %d</string>
|
||||
<string name="cast_format" formatted="true">Diễn viên: %s</string>
|
||||
<string name="next_episode_format" formatted="true">Tập %d sẽ ra mắt sau</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%dd %dh %dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%dh %dm</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%dm</string>
|
||||
|
||||
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
||||
|
@ -24,7 +78,9 @@
|
|||
<string name="episode_poster_img_des">Episode Poster</string>
|
||||
<string name="home_main_poster_img_des">Main Poster</string>
|
||||
<string name="home_next_random_img_des">Next Random</string>
|
||||
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
|
||||
<string name="go_back_img_des">Go back</string>
|
||||
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
|
||||
<string name="home_change_provider_img_des">Change Provider</string>
|
||||
<string name="preview_background_img_des">Preview Background</string>
|
||||
|
||||
|
@ -35,7 +91,7 @@
|
|||
<string name="filler" formatted="true">Bộ lọc</string>
|
||||
<string name="duration_format" formatted="true">%d phút</string>
|
||||
|
||||
<!-- <string name="app_name">CloudStream</string> -->
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="title_home">Trang Chủ</string>
|
||||
<string name="title_search">Tìm Kiếm</string>
|
||||
<string name="title_downloads">Tải Về</string>
|
||||
|
@ -47,6 +103,7 @@
|
|||
<string name="no_data">Không có dữ liệu</string>
|
||||
<string name="episode_more_options_des">Thêm tuỳ chọn</string>
|
||||
<string name="next_episode">Tập tiếp theo</string>
|
||||
<string name="result_plot" translatable="false">@string/synopsis</string>
|
||||
<string name="result_tags">Thể loại</string>
|
||||
<string name="result_share">Chia sẻ</string>
|
||||
<string name="result_open_in_browser">Mở bằng trình duyệt</string>
|
||||
|
@ -55,7 +112,7 @@
|
|||
|
||||
<string name="type_watching">Đang xem</string>
|
||||
<string name="type_on_hold">Đang chờ</string>
|
||||
<string name="type_completed">Hoàn thành</string>
|
||||
<string name="type_completed">Đã xem</string>
|
||||
<string name="type_dropped">Bỏ qua</string>
|
||||
<string name="type_plan_to_watch">Xem sau</string>
|
||||
<string name="type_none">Mặc định</string>
|
||||
|
@ -64,12 +121,13 @@
|
|||
<string name="play_movie_button">Xem Ngay</string>
|
||||
<string name="play_torrent_button">Xem Bằng Torrent</string>
|
||||
<string name="pick_source">Nguồn Phim</string>
|
||||
<string name="pick_subtitle">Phụ Đề</string>
|
||||
<string name="pick_subtitle">Phụ đề</string>
|
||||
<string name="reload_error">Thử kết nối lại…</string>
|
||||
<string name="go_back">Quay lại</string>
|
||||
<string name="play_episode">Xem Tập Phim</string>
|
||||
<!--<string name="need_storage">Allow to download episodes</string>-->
|
||||
|
||||
<string name="download">Tải Xuống</string>
|
||||
<string name="download">Tải xuống</string>
|
||||
<string name="downloaded">Đã tải</string>
|
||||
<string name="downloading">Đang tải</string>
|
||||
<string name="download_paused">Tạm dừng</string>
|
||||
|
@ -130,7 +188,7 @@
|
|||
<string name="subs_subtitle_languages">Ngôn ngữ phụ đề</string>
|
||||
<string name="subs_hold_to_reset_to_default">Giữ để làm mới toàn bộ</string>
|
||||
<string name="subs_import_text" formatted="true">Thêm phông chữ tại %s</string>
|
||||
<string name="continue_watching">Đang Xem</string>
|
||||
<string name="continue_watching">Tiếp tục xem</string>
|
||||
|
||||
<string name="action_remove_watching">Loại bỏ</string>
|
||||
<string name="action_open_watching">Thông tin thêm</string>
|
||||
|
@ -150,26 +208,27 @@
|
|||
<string name="picture_in_picture">Chế độ cửa sổ nhỏ</string>
|
||||
<string name="picture_in_picture_des">Tiếp tục xem phim khi thoát app hoặc đang tìm kiếm</string>
|
||||
<string name="player_size_settings">Bật nút thu phóng khi xem</string>
|
||||
<string name="player_size_settings_des">Điều này sẽ xóa khoảng đen của phim</string>
|
||||
<string name="player_size_settings_des">Xóa khoảng đen của phim</string>
|
||||
<string name="player_subtitles_settings">Phụ đề</string>
|
||||
<string name="player_subtitles_settings_des">Cài đặt phụ đề</string>
|
||||
<string name="chromecast_subtitles_settings">Phụ đề Chromecast</string>
|
||||
<string name="chromecast_subtitles_settings_des">Cài đặt phụ đề Chromecast</string>
|
||||
|
||||
<string name="eigengraumode_settings">Điều chỉnh tốc độ khi xem phim</string>
|
||||
<string name="eigengraumode_settings">Chỉnh tốc độ phim</string>
|
||||
<string name="eigengraumode_settings_des">Có thể điều chỉnh tốc độ phát phim</string>
|
||||
<string name="swipe_to_seek_settings">Vuốt để tua nhanh</string>
|
||||
<string name="swipe_to_seek_settings_des">Bạn có thể vuốt trái hoặc phải để tua nhanh khi đang xem phim</string>
|
||||
<string name="swipe_to_change_settings">Vuốt để điều chỉnh âm lượng và độ sáng</string>
|
||||
<string name="swipe_to_seek_settings_des">Bạn có thể vuốt trái hoặc phải để tua nhanh khi xem phim</string>
|
||||
<string name="swipe_to_change_settings">Vuốt để chỉnh độ sáng và âm lượng</string>
|
||||
<string name="swipe_to_change_settings_des">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</string>
|
||||
<string name="double_tap_to_seek_settings">Nhấn 2 lần để tua</string>
|
||||
<string name="double_tap_to_pause_settings">Chạm 2 lần để tạm dừng</string>
|
||||
<string name="double_tap_to_seek_settings_des">Nhấn 2 lần vào bên trái hoặc màn hình để tua trước hoặc sau</string>
|
||||
<string name="double_tap_to_pause_settings">Nhấn 2 lần để tạm dừng</string>
|
||||
<string name="double_tap_to_seek_amount_settings">Thời lượng tua</string>
|
||||
<string name="double_tap_to_seek_settings_des">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</string>
|
||||
<string name="double_tap_to_pause_settings_des">Nhấn vào giữa để tạm dừng</string>
|
||||
<string name="use_system_brightness_settings">Sử dụng độ sáng hệ thống</string>
|
||||
<string name="use_system_brightness_settings_des">Sử dụng độ sáng hệ thống trong trình phát ứng dụng</string>
|
||||
|
||||
<!--<string name="episode_sync_settings">Update watch progress</string>-->
|
||||
<string name="episode_sync_settings">Cập nhật tiến trình xem</string>
|
||||
<string name="episode_sync_settings_des">Tự động đồng bộ tiến trình hiện tại của bạn</string>
|
||||
|
||||
<string name="restore_settings">Khôi phục dữ liệu từ bản sao lưu</string>
|
||||
|
@ -267,8 +326,8 @@
|
|||
<string name="movies_singular">Phim Lẻ</string>
|
||||
<string name="tv_series_singular">Phim Bộ</string>
|
||||
<string name="cartoons_singular">Hoạt Hình</string>
|
||||
<string name="anime_singular">Anime</string>
|
||||
<string name="ova_singular">OVA</string>
|
||||
<string name="anime_singular">@string/anime</string>
|
||||
<string name="ova_singular">@string/ova</string>
|
||||
<string name="torrent_singular">Torrent</string>
|
||||
<string name="documentaries_singular">Phim Tài Liệu</string>
|
||||
<string name="asian_drama_singular">Truyền Hình Châu Á</string>
|
||||
|
@ -294,6 +353,10 @@
|
|||
<string name="show_dub">Nhãn lồng tiếng</string>
|
||||
<string name="show_sub">Nhãn phụ đề</string>
|
||||
<string name="show_title">Tiêu đề</string>
|
||||
<string name="show_hd_key" translatable="false">show_hd_key</string>
|
||||
<string name="show_dub_key" translatable="false">show_dub_key</string>
|
||||
<string name="show_sub_key" translatable="false">show_sub_key</string>
|
||||
<string name="show_title_key" translatable="false">show_title_key</string>
|
||||
<string name="poster_ui_settings">Thay đổi giao diện trên poster</string>
|
||||
|
||||
<string name="no_update_found">Bạn đang dùng phiên bản mới nhất</string>
|
||||
|
@ -301,18 +364,18 @@
|
|||
|
||||
<string name="video_lock">Khóa</string>
|
||||
<string name="video_aspect_ratio_resize">Thu Phóng</string>
|
||||
<string name="video_source">Phụ đề</string>
|
||||
<string name="video_source">Tuỳ chọn</string>
|
||||
<string name="video_skip_op">Tập tiếp</string>
|
||||
|
||||
<string name="dont_show_again">Không hiển thị lại</string>
|
||||
<string name="skip_update">Bỏ qua bản cập nhật này</string>
|
||||
<string name="dont_show_again">Không hiện lại</string>
|
||||
<string name="skip_update">Bỏ qua</string>
|
||||
<string name="update">Cập nhật</string>
|
||||
<string name="watch_quality_pref">Tự động chọn chất lượng phim</string>
|
||||
<string name="limit_title">Kí tự tối đa trên tiêu đề</string>
|
||||
<string name="limit_title_rez">Độ phân giải tối đa</string>
|
||||
<string name="limit_title_rez">Định dạng trình phát</string>
|
||||
|
||||
<string name="video_buffer_size_settings">Kích thước video cache</string>
|
||||
<string name="video_buffer_length_settings">Dung lượng bộ nhớ đệm</string>
|
||||
<string name="video_buffer_size_settings">Dung lượng video cache</string>
|
||||
<string name="video_buffer_length_settings">Thời lượng bộ nhớ đệm</string>
|
||||
<string name="video_buffer_disk_settings">Dung lượng video cache</string>
|
||||
<string name="video_buffer_clear_settings">Xoá hình ảnh và video</string>
|
||||
|
||||
|
@ -337,6 +400,23 @@
|
|||
<string name="resize_zoom">Phóng to</string>
|
||||
|
||||
<string name="legal_notice">Disclaimer</string>
|
||||
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
|
||||
<string name="legal_notice_text" translatable="false">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.
|
||||
</string>
|
||||
<string name="category_general">Tổng quan</string>
|
||||
<string name="random_button_settings">Nút ngẫu nhiên</string>
|
||||
<string name="random_button_settings_desc">Hiện nút ngẫu nhiên trên trang chủ</string>
|
||||
|
@ -358,6 +438,10 @@
|
|||
<string name="bottom_title_settings_des">Đặt tiêu đề dưới poster</string>
|
||||
|
||||
<!-- account stuff -->
|
||||
<string name="anilist_key" translatable="false">anilist_key</string>
|
||||
<string name="mal_key" translatable="false">mal_key</string>
|
||||
<string name="opensubtitles_key" translatable="false">opensubtitles_key</string>
|
||||
<string name="nginx_key" translatable="false">nginx_key</string>
|
||||
<string name="example_password">Mật khẩu</string>
|
||||
<string name="example_username">Tài khoản</string>
|
||||
<string name="example_email">Email</string>
|
||||
|
@ -366,6 +450,14 @@
|
|||
<string name="example_site_url">example.com</string>
|
||||
<string name="example_lang_name">Mã ngôn ngữ (vi)</string>
|
||||
|
||||
<!--
|
||||
<string name="mal_account_settings" translatable="false">MAL</string>
|
||||
<string name="anilist_account_settings" translatable="false">AniList</string>
|
||||
<string name="tmdb_account_settings" translatable="false">TMDB</string>
|
||||
<string name="imdb_account_settings" translatable="false">IMDB</string>
|
||||
<string name="kitsu_account_settings" translatable="false">Kitsu</string>
|
||||
<string name="trakt_account_settings" translatable="false">Trakt</string>
|
||||
-->
|
||||
<string name="login_format" formatted="true">%s %s</string>
|
||||
<string name="account">tài khoản</string>
|
||||
<string name="logout">Đăng xuất</string>
|
||||
|
@ -410,7 +502,7 @@
|
|||
|
||||
<string name="recommended">Được đề xuất</string>
|
||||
<string name="player_loaded_subtitles" formatted="true">Đã tải %s</string>
|
||||
<string name="player_load_subtitles">Chọn tệp</string>
|
||||
<string name="player_load_subtitles">Chọn từ máy</string>
|
||||
<string name="player_load_subtitles_online">Chọn từ Internet</string>
|
||||
<string name="downloaded_file">Tệp đã tải</string>
|
||||
<string name="actor_main">Vai chính</string>
|
||||
|
@ -447,8 +539,8 @@
|
|||
<string name="error_invalid_id">Id không hợp lệ</string>
|
||||
<string name="error_invalid_data">Lỗi dữ liệu</string>
|
||||
<string name="error">Lỗi</string>
|
||||
<!--<string name="subtitles_remove_captions">Remove closed captions from subtitles</string>-->
|
||||
<!--<string name="subtitles_remove_bloat">Remove bloat from subtitles</string>-->
|
||||
<!--<string name="extras">Extra</string>-->
|
||||
<string name="subtitles_remove_captions">Xoá phụ đề đã dùng</string>
|
||||
<string name="subtitles_remove_bloat">Loại bỏ mã hoá phụ đề</string>
|
||||
<string name="extras">Thêm</string>
|
||||
<string name="trailer">Trailer</string>
|
||||
</resources>
|
||||
|
|
|
@ -472,7 +472,7 @@
|
|||
"TheFlixToProvider": {
|
||||
"language": "en",
|
||||
"name": "TheFlix.to",
|
||||
"status": 0,
|
||||
"status": 1,
|
||||
"url": "https://theflix.to"
|
||||
},
|
||||
"TrailersTwoProvider": {
|
||||
|
@ -511,6 +511,12 @@
|
|||
"status": 1,
|
||||
"url": "https://vidembed.cc"
|
||||
},
|
||||
"VidSrcProvider": {
|
||||
"language": "en",
|
||||
"name": "VidSrc",
|
||||
"status": 1,
|
||||
"url": "https://v2.vidsrc.me"
|
||||
},
|
||||
"WatchAsianProvider": {
|
||||
"language": "en",
|
||||
"name": "WatchAsian",
|
||||
|
|
Loading…
Reference in a new issue