Compare commits

..

2 commits

Author SHA1 Message Date
Lag
805158ad14 Better quality selection 2023-03-07 17:29:25 +01:00
Lag
a6fd25d2e1 Added quality profiles 2023-03-07 01:33:47 +01:00
87 changed files with 1622 additions and 995 deletions

BIN
.github/downloads.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
.github/home.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

17
.github/locales.py vendored
View file

@ -1,7 +1,6 @@
import re
import glob
import requests
import lxml.etree as ET # builtin library doesn't preserve comments
SETTINGS_PATH = "app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt"
@ -46,18 +45,4 @@ open(SETTINGS_PATH, "w+",encoding='utf-8').write(
"\n" +
END_MARKER +
after_src
)
# Go through each values.xml file and fix escaped \@string
for file in glob.glob(f"{XML_NAME}*/strings.xml"):
try:
tree = ET.parse(file)
for child in tree.getroot():
if child.text.startswith("\\@string/"):
print(f"[{file}] fixing {child.attrib['name']}")
child.text = child.text.replace("\\@string/", "@string/")
with open(file, 'wb') as fp:
fp.write(b'<?xml version="1.0" encoding="utf-8"?>\n')
tree.write(fp, encoding="utf-8", method="xml", pretty_print=True, xml_declaration=False)
except ET.ParseError as ex:
print(f"[{file}] {ex}")
)

BIN
.github/player.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
.github/results.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
.github/search.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

View file

@ -1,4 +1,4 @@
name: Fix locale issues
name: Update locale lists
on:
workflow_dispatch:
@ -9,7 +9,7 @@ on:
- master
concurrency:
group: "locale"
group: "locale-list"
cancel-in-progress: true
jobs:
@ -26,9 +26,6 @@ jobs:
- uses: actions/checkout@v2
with:
token: ${{ steps.generate_token.outputs.token }}
- name: Install dependencies
run: |
pip3 install lxml
- name: Edit files
run: |
python3 .github/locales.py
@ -38,5 +35,5 @@ jobs:
git config --local user.name "recloudstream[bot]"
git add .
# "echo" returns true so the build succeeds, even if no changed files
git commit -m 'chore(locales): fix locale issues' || echo
git commit -m 'update list of locales' || echo
git push

View file

@ -12,7 +12,12 @@
+ Download and stream movies, tv-shows and anime
+ Chromecast
### Screenshots:
<img src="./.github/home.jpg" height="400"/><img src="./.github/search.jpg" height="400"/><img src="./.github/downloads.jpg" height="400"/><img src="./.github/results.jpg" height="400"/>
<img src="./.github/player.jpg" height="200"/>
### Supported languages:
<a href="https://hosted.weblate.org/engage/cloudstream/">
<img src="https://hosted.weblate.org/widgets/cloudstream/-/app/multi-auto.svg" alt="Translation status" />
</a>
</a>

View file

@ -159,8 +159,6 @@ dependencies {
implementation("com.google.android.exoplayer:extension-cast:2.18.2")
implementation("com.google.android.exoplayer:extension-mediasession:2.18.2")
implementation("com.google.android.exoplayer:extension-okhttp:2.18.2")
// Use the Jellyfin ffmpeg extension for easy ffmpeg audio decoding in exoplayer. Thank you Jellyfin <3
// implementation("org.jellyfin.exoplayer:exoplayer-ffmpeg-extension:2.18.2+1")
//implementation("com.google.android.exoplayer:extension-leanback:2.14.0")

View file

@ -98,16 +98,6 @@
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<!-- cloudstreamplayer://encodedUrl?name=Dune -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="cloudstreamplayer" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

View file

@ -5,8 +5,6 @@ import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.util.AttributeSet
import android.util.Log
@ -36,6 +34,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.navigationrail.NavigationRailView
import com.google.android.material.snackbar.Snackbar
import com.jaredrummler.android.colorpicker.ColorPickerDialogListener
import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.APIHolder.allProviders
import com.lagradost.cloudstream3.APIHolder.apis
import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings
@ -58,7 +57,6 @@ import com.lagradost.cloudstream3.receivers.VideoDownloadRestartReceiver
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.OAuth2Apis
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.accountManagers
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appString
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringPlayer
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringResumeWatching
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringSearch
@ -67,9 +65,6 @@ import com.lagradost.cloudstream3.ui.APIRepository
import com.lagradost.cloudstream3.ui.WatchType
import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO
import com.lagradost.cloudstream3.ui.home.HomeViewModel
import com.lagradost.cloudstream3.ui.player.BasicLink
import com.lagradost.cloudstream3.ui.player.GeneratorPlayer
import com.lagradost.cloudstream3.ui.player.LinkGenerator
import com.lagradost.cloudstream3.ui.result.ResultViewModel2
import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST
import com.lagradost.cloudstream3.ui.result.setImage
@ -175,12 +170,7 @@ open class ResultResume(
val VLC = object : ResultResume(
VLC_PACKAGE,
// Android 13 intent restrictions fucks up specifically launching the VLC player
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
"org.videolan.vlc.player.result"
} else {
Intent.ACTION_VIEW
},
"org.videolan.vlc.player.result",
"extra_position",
"extra_duration",
) {
@ -279,8 +269,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
isWebview: Boolean
): Boolean =
with(activity) {
// TODO MUCH BETTER HANDLING
// Invalid URIs can crash
fun safeURI(uri: String) = normalSafeApiCall { URI(uri) }
@ -336,20 +324,6 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
// It might be better to use the QuickSearch.
nav_view?.selectedItemId = R.id.navigation_search
nav_rail_view?.selectedItemId = R.id.navigation_search
} else if (safeURI(str)?.scheme == appStringPlayer) {
val uri = Uri.parse(str)
val name = uri.getQueryParameter("name")
val url = URLDecoder.decode(uri.authority, "UTF-8")
navigate(
R.id.global_to_navigation_player,
GeneratorPlayer.newInstance(
LinkGenerator(
listOf(BasicLink(url, name)),
extract = true,
)
)
)
} else if (safeURI(str)?.scheme == appStringResumeWatching) {
val id =
str.substringAfter("$appStringResumeWatching://").toIntOrNull()
@ -759,16 +733,15 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
} else {
this.setKey(getString(R.string.jsdelivr_proxy_key), true)
val parentView: View = findViewById(android.R.id.content)
Snackbar.make(parentView, R.string.jsdelivr_enabled, Snackbar.LENGTH_LONG)
.let { snackbar ->
snackbar.setAction(R.string.revert) {
setKey(getString(R.string.jsdelivr_proxy_key), false)
}
snackbar.setBackgroundTint(colorFromAttribute(R.attr.primaryGrayBackground))
snackbar.setTextColor(colorFromAttribute(R.attr.textColor))
snackbar.setActionTextColor(colorFromAttribute(R.attr.colorPrimary))
snackbar.show()
Snackbar.make(parentView, R.string.jsdelivr_enabled, Snackbar.LENGTH_LONG).let { snackbar ->
snackbar.setAction(R.string.revert) {
setKey(getString(R.string.jsdelivr_proxy_key), false)
}
snackbar.setBackgroundTint(colorFromAttribute(R.attr.primaryGrayBackground))
snackbar.setTextColor(colorFromAttribute(R.attr.textColor))
snackbar.setActionTextColor(colorFromAttribute(R.attr.colorPrimary))
snackbar.show()
}
}
}
@ -1150,10 +1123,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
suspend fun checkGithubConnectivity(): Boolean {
return try {
app.get(
"https://raw.githubusercontent.com/recloudstream/.github/master/connectivitycheck",
timeout = 5
).text.trim() == "ok"
app.get("https://raw.githubusercontent.com/recloudstream/.github/master/connectivitycheck", timeout = 5).text.trim() == "ok"
} catch (t: Throwable) {
false
}

View file

@ -134,7 +134,7 @@ open class StreamSB : ExtractorApi() {
it.value.replace(Regex("(embed-|/e/)"), "")
}.first()
// val master = "$mainUrl/sources48/6d6144797752744a454267617c7c${bytesToHex.lowercase()}7c7c4e61755a56456f34385243727c7c73747265616d7362/6b4a33767968506e4e71374f7c7c343837323439333133333462353935333633373836643638376337633462333634663539343137373761333635313533333835333763376333393636363133393635366136323733343435323332376137633763373337343732363536313664373336327c7c504d754478413835306633797c7c73747265616d7362"
val master = "$mainUrl/sources15/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/"
val master = "$mainUrl/sources51/" + bytesToHex("||$id||||streamsb".toByteArray()) + "/"
val headers = mapOf(
"watchsb" to "sbstream",
)

View file

@ -45,7 +45,6 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI {
const val appString = "cloudstreamapp"
const val appStringRepo = "cloudstreamrepo"
const val appStringPlayer = "cloudstreamplayer"
// Instantly start the search given a query
const val appStringSearch = "cloudstreamsearch"

View file

@ -24,6 +24,7 @@ import com.lagradost.cloudstream3.mvvm.observe
import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick
import com.lagradost.cloudstream3.ui.player.GeneratorPlayer
import com.lagradost.cloudstream3.ui.player.LinkGenerator
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
import com.lagradost.cloudstream3.utils.AppUtils.loadResult
import com.lagradost.cloudstream3.utils.Coroutines.main
import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE
@ -39,7 +40,6 @@ import kotlinx.android.synthetic.main.stream_input.*
import android.text.format.Formatter.formatShortFileSize
import androidx.core.widget.doOnTextChanged
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
import com.lagradost.cloudstream3.ui.player.BasicLink
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings
import java.net.URI
@ -225,7 +225,7 @@ class DownloadFragment : Fragment() {
R.id.global_to_navigation_player,
GeneratorPlayer.newInstance(
LinkGenerator(
listOf(BasicLink(url)),
listOf(url),
extract = true,
referer = referer,
isM3u8 = dialog.hls_switch?.isChecked

View file

@ -185,7 +185,7 @@ open class ParentItemAdapter(
) :
RecyclerView.ViewHolder(itemView) {
val title: TextView = itemView.home_child_more_info
private val recyclerView: RecyclerView = itemView.home_child_recyclerview
val recyclerView: RecyclerView = itemView.home_child_recyclerview
fun update(expand: HomeViewModel.ExpandableHomepageList) {
val info = expand.list

View file

@ -9,11 +9,8 @@ import android.widget.FrameLayout
import androidx.preference.PreferenceManager
import com.google.android.exoplayer2.*
import com.google.android.exoplayer2.C.*
import com.google.android.exoplayer2.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON
import com.google.android.exoplayer2.DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER
import com.google.android.exoplayer2.database.StandaloneDatabaseProvider
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector
import com.google.android.exoplayer2.source.*
import com.google.android.exoplayer2.text.TextRenderer
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
@ -541,8 +538,7 @@ class CS3IPlayer : IPlayer {
}
// Do no include empty referer, if the provider wants those they can use the header map.
val refererMap =
if (link.referer.isBlank()) emptyMap() else mapOf("referer" to link.referer)
val refererMap = if (link.referer.isBlank()) emptyMap() else mapOf("referer" to link.referer)
val headers = mapOf(
"accept" to "*/*",
"sec-ch-ua" to "\"Chromium\";v=\"91\", \" Not;A Brand\";v=\"99\"",
@ -673,27 +669,23 @@ class CS3IPlayer : IPlayer {
val exoPlayerBuilder =
ExoPlayer.Builder(context)
.setRenderersFactory { eventHandler, videoRendererEventListener, audioRendererEventListener, textRendererOutput, metadataRendererOutput ->
DefaultRenderersFactory(context).apply {
// setEnableDecoderFallback(true)
// Enable Ffmpeg extension
// setExtensionRendererMode(EXTENSION_RENDERER_MODE_ON)
}.createRenderers(
eventHandler,
videoRendererEventListener,
audioRendererEventListener,
textRendererOutput,
metadataRendererOutput
).map {
if (it is TextRenderer) {
currentTextRenderer = CustomTextRenderer(
subtitleOffset,
textRendererOutput,
eventHandler.looper,
CustomSubtitleDecoderFactory()
)
currentTextRenderer!!
} else it
}.toTypedArray()
DefaultRenderersFactory(context).createRenderers(
eventHandler,
videoRendererEventListener,
audioRendererEventListener,
textRendererOutput,
metadataRendererOutput
).map {
if (it is TextRenderer) {
currentTextRenderer = CustomTextRenderer(
subtitleOffset,
textRendererOutput,
eventHandler.looper,
CustomSubtitleDecoderFactory()
)
currentTextRenderer!!
} else it
}.toTypedArray()
}
.setTrackSelector(
trackSelector ?: getTrackSelector(
@ -1204,10 +1196,10 @@ class CS3IPlayer : IPlayer {
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory)
}
val mime = when {
link.isM3u8 -> MimeTypes.APPLICATION_M3U8
link.isDash -> MimeTypes.APPLICATION_MPD
else -> MimeTypes.VIDEO_MP4
val mime = if (link.isM3u8) {
MimeTypes.APPLICATION_M3U8
} else {
MimeTypes.VIDEO_MP4
}
val mediaItems = if (link is ExtractorLinkPlayList) {
@ -1257,4 +1249,4 @@ class CS3IPlayer : IPlayer {
loadOfflinePlayer(context, it)
}
}
}
}

View file

@ -4,16 +4,13 @@ import android.content.Context
import android.util.Log
import androidx.preference.PreferenceManager
import com.google.android.exoplayer2.Format
import com.google.android.exoplayer2.text.*
import com.google.android.exoplayer2.text.cea.Cea608Decoder
import com.google.android.exoplayer2.text.cea.Cea708Decoder
import com.google.android.exoplayer2.text.dvb.DvbDecoder
import com.google.android.exoplayer2.text.pgs.PgsDecoder
import com.google.android.exoplayer2.text.SubtitleDecoder
import com.google.android.exoplayer2.text.SubtitleDecoderFactory
import com.google.android.exoplayer2.text.SubtitleInputBuffer
import com.google.android.exoplayer2.text.SubtitleOutputBuffer
import com.google.android.exoplayer2.text.ssa.SsaDecoder
import com.google.android.exoplayer2.text.subrip.SubripDecoder
import com.google.android.exoplayer2.text.ttml.TtmlDecoder
import com.google.android.exoplayer2.text.tx3g.Tx3gDecoder
import com.google.android.exoplayer2.text.webvtt.Mp4WebvttDecoder
import com.google.android.exoplayer2.text.webvtt.WebvttDecoder
import com.google.android.exoplayer2.util.MimeTypes
import com.lagradost.cloudstream3.R
@ -22,11 +19,7 @@ import org.mozilla.universalchardet.UniversalDetector
import java.nio.ByteBuffer
import java.nio.charset.Charset
/**
* @param fallbackFormat used to create a decoder based on mimetype if the subtitle string is not
* enough to identify the subtitle format.
**/
class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder {
class CustomDecoder : SubtitleDecoder {
companion object {
fun updateForcedEncoding(context: Context) {
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
@ -146,7 +139,7 @@ class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder {
val inputString = getStr(inputBuffer)
if (realDecoder == null && !inputString.isNullOrBlank()) {
var str: String = inputString
// this way we read the subtitle file and decide what decoder to use instead of relying fully on mimetype
// this way we read the subtitle file and decide what decoder to use instead of relying on mimetype
Log.i(TAG, "Got data from queueInputBuffer")
//https://github.com/LagradOst/CloudStream-2/blob/ddd774ee66810137ff7bd65dae70bcf3ba2d2489/CloudStreamForms/CloudStreamForms/Script/MainChrome.cs#L388
realDecoder = when {
@ -155,31 +148,8 @@ class CustomDecoder(private val fallbackFormat: Format?) : SubtitleDecoder {
(str.startsWith(
"[Script Info]",
ignoreCase = true
) || str.startsWith("Title:", ignoreCase = true)) -> SsaDecoder(fallbackFormat?.initializationData)
) || str.startsWith("Title:", ignoreCase = true)) -> SsaDecoder()
str.startsWith("1", ignoreCase = true) -> SubripDecoder()
fallbackFormat != null -> {
when (val mimeType = fallbackFormat.sampleMimeType) {
MimeTypes.TEXT_VTT -> WebvttDecoder()
MimeTypes.TEXT_SSA -> SsaDecoder(fallbackFormat.initializationData)
MimeTypes.APPLICATION_MP4VTT -> Mp4WebvttDecoder()
MimeTypes.APPLICATION_TTML -> TtmlDecoder()
MimeTypes.APPLICATION_SUBRIP -> SubripDecoder()
MimeTypes.APPLICATION_TX3G -> Tx3gDecoder(fallbackFormat.initializationData)
MimeTypes.APPLICATION_CEA608, MimeTypes.APPLICATION_MP4CEA608 -> Cea608Decoder(
mimeType,
fallbackFormat.accessibilityChannel,
Cea608Decoder.MIN_DATA_CHANNEL_TIMEOUT_MS
)
MimeTypes.APPLICATION_CEA708 -> Cea708Decoder(
fallbackFormat.accessibilityChannel,
fallbackFormat.initializationData
)
MimeTypes.APPLICATION_DVBSUBS -> DvbDecoder(fallbackFormat.initializationData)
MimeTypes.APPLICATION_PGS -> PgsDecoder()
MimeTypes.TEXT_EXOPLAYER_CUES -> ExoplayerCuesDecoder()
else -> null
}
}
else -> null
}
Log.i(
@ -276,6 +246,28 @@ class CustomSubtitleDecoderFactory : SubtitleDecoderFactory {
}
override fun createDecoder(format: Format): SubtitleDecoder {
return CustomDecoder(format)
return CustomDecoder()
//return when (val mimeType = format.sampleMimeType) {
// MimeTypes.TEXT_VTT -> WebvttDecoder()
// MimeTypes.TEXT_SSA -> SsaDecoder(format.initializationData)
// MimeTypes.APPLICATION_MP4VTT -> Mp4WebvttDecoder()
// MimeTypes.APPLICATION_TTML -> TtmlDecoder()
// MimeTypes.APPLICATION_SUBRIP -> SubripDecoder()
// MimeTypes.APPLICATION_TX3G -> Tx3gDecoder(format.initializationData)
// MimeTypes.APPLICATION_CEA608, MimeTypes.APPLICATION_MP4CEA608 -> return Cea608Decoder(
// mimeType,
// format.accessibilityChannel,
// Cea608Decoder.MIN_DATA_CHANNEL_TIMEOUT_MS
// )
// MimeTypes.APPLICATION_CEA708 -> Cea708Decoder(
// format.accessibilityChannel,
// format.initializationData
// )
// MimeTypes.APPLICATION_DVBSUBS -> DvbDecoder(format.initializationData)
// MimeTypes.APPLICATION_PGS -> PgsDecoder()
// MimeTypes.TEXT_EXOPLAYER_CUES -> ExoplayerCuesDecoder()
// // Default WebVttDecoder
// else -> WebvttDecoder()
//}
}
}

View file

@ -42,7 +42,7 @@ class DownloadedPlayerActivity : AppCompatActivity() {
R.id.global_to_navigation_player, GeneratorPlayer.newInstance(
LinkGenerator(
listOf(
BasicLink(url)
url
)
)
)

View file

@ -39,6 +39,7 @@ import com.lagradost.cloudstream3.CommonActivity.playerEventListener
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.ui.player.GeneratorPlayer.Companion.subsProvidersIsActive
import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper
import com.lagradost.cloudstream3.utils.Qualities
import com.lagradost.cloudstream3.utils.AppUtils.isUsingMobileData
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
@ -108,8 +109,15 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
// get() = episodes.isNotEmpty()
// options for player
protected var currentPrefQuality =
Qualities.P2160.value // preferred maximum quality, used for ppl w bad internet or on cell
/**
* Default profile 1
* Decides how links should be sorted based on a priority system.
* This will be set in runtime based on settings.
**/
protected var currentQualityProfile = 1
// protected var currentPrefQuality =
// Qualities.P2160.value // preferred maximum quality, used for ppl w bad internet or on cell
protected var fastForwardTime = 10000L
protected var androidTVInterfaceOffSeekTime = 10000L;
protected var androidTVInterfaceOnSeekTime = 30000L;
@ -1221,10 +1229,16 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
.toLong() * 1000L
androidTVInterfaceOffSeekTime =
settingsManager.getInt(ctx.getString(R.string.android_tv_interface_off_seek_key), 10)
settingsManager.getInt(
ctx.getString(R.string.android_tv_interface_off_seek_key),
10
)
.toLong() * 1000L
androidTVInterfaceOnSeekTime =
settingsManager.getInt(ctx.getString(R.string.android_tv_interface_on_seek_key), 10)
settingsManager.getInt(
ctx.getString(R.string.android_tv_interface_on_seek_key),
10
)
.toLong() * 1000L
navigationBarHeight = ctx.getNavigationBarHeight()
@ -1257,10 +1271,20 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
ctx.getString(R.string.double_tap_pause_enabled_key),
false
)
currentPrefQuality = settingsManager.getInt(
ctx.getString(if (ctx.isUsingMobileData()) R.string.quality_pref_mobile_data_key else R.string.quality_pref_key),
currentPrefQuality
)
val profiles = QualityDataHelper.getProfiles()
val type = if (ctx.isUsingMobileData())
QualityDataHelper.QualityProfileType.Data
else QualityDataHelper.QualityProfileType.WiFi
currentQualityProfile =
profiles.firstOrNull { it.type == type }?.id ?: profiles.firstOrNull()?.id
?: currentQualityProfile
// currentPrefQuality = settingsManager.getInt(
// ctx.getString(if (ctx.isUsingMobileData()) R.string.quality_pref_mobile_data_key else R.string.quality_pref_key),
// currentPrefQuality
// )
// useSystemBrightness =
// settingsManager.getBoolean(ctx.getString(R.string.use_system_brightness_key), false)
}

View file

@ -31,6 +31,10 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.subtitl
import com.lagradost.cloudstream3.ui.player.CS3IPlayer.Companion.preferredAudioTrackLanguage
import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.updateForcedEncoding
import com.lagradost.cloudstream3.ui.player.PlayerSubtitleHelper.Companion.toSubtitleMimeType
import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper
import com.lagradost.cloudstream3.ui.player.source_priority.QualityProfileDialog
import com.lagradost.cloudstream3.ui.player.source_priority.SourcePriority
import com.lagradost.cloudstream3.ui.player.source_priority.SourcePriorityDialog
import com.lagradost.cloudstream3.ui.result.*
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.getAutoSelectLanguageISO639_1
@ -57,6 +61,7 @@ import kotlinx.coroutines.Job
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
import kotlin.math.abs
class GeneratorPlayer : FullScreenPlayer() {
companion object {
@ -188,17 +193,31 @@ class GeneratorPlayer : FullScreenPlayer() {
player.addTimeStamps(listOf()) // clear stamps
}
private fun sortLinks(useQualitySettings: Boolean = true): List<Pair<ExtractorLink?, ExtractorUri?>> {
return currentLinks.sortedBy {
val (linkData, _) = it
var quality = linkData?.quality ?: Qualities.Unknown.value
private fun closestQuality(target: Int?): Qualities {
if (target == null) return Qualities.Unknown
return Qualities.values().minBy { abs(it.value - target) }
}
// we set all qualities above current max as reverse
if (useQualitySettings && quality > currentPrefQuality) {
quality = currentPrefQuality - quality - 1
}
// negative because we want to sort highest quality first
-(quality)
private fun getLinkPriority(
qualityProfile: Int,
link: Pair<ExtractorLink?, ExtractorUri?>
): Int {
val (linkData, _) = link
val qualityPriority = QualityDataHelper.getQualityPriority(
qualityProfile,
closestQuality(linkData?.quality)
)
val sourcePriority =
QualityDataHelper.getSourcePriority(qualityProfile, linkData?.name)
// negative because we want to sort highest quality first
return qualityPriority + sourcePriority
}
private fun sortLinks(qualityProfile: Int): List<Pair<ExtractorLink?, ExtractorUri?>> {
return currentLinks.sortedBy {
-getLinkPriority(qualityProfile, it)
}
}
@ -584,33 +603,39 @@ class GeneratorPlayer : FullScreenPlayer() {
var sourceIndex = 0
var startSource = 0
var sortedUrls = emptyList<Pair<ExtractorLink?, ExtractorUri?>>()
val sortedUrls = sortLinks(useQualitySettings = false)
if (sortedUrls.isEmpty()) {
sourceDialog.findViewById<LinearLayout>(R.id.sort_sources_holder)?.isGone = true
} else {
startSource = sortedUrls.indexOf(currentSelectedLink)
sourceIndex = startSource
fun refreshLinks(qualityProfile: Int) {
sortedUrls = sortLinks(qualityProfile)
if (sortedUrls.isEmpty()) {
sourceDialog.findViewById<LinearLayout>(R.id.sort_sources_holder)?.isGone =
true
} else {
startSource = sortedUrls.indexOf(currentSelectedLink)
sourceIndex = startSource
val sourcesArrayAdapter =
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
val sourcesArrayAdapter =
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
sourcesArrayAdapter.addAll(sortedUrls.map { (link, uri) ->
val name = link?.name ?: uri?.name ?: "NULL"
"$name ${Qualities.getStringByInt(link?.quality)}"
})
sourcesArrayAdapter.addAll(sortedUrls.map { (link, uri) ->
val name = link?.name ?: uri?.name ?: "NULL"
"$name ${Qualities.getStringByInt(link?.quality)}"
})
providerList.choiceMode = AbsListView.CHOICE_MODE_SINGLE
providerList.adapter = sourcesArrayAdapter
providerList.setSelection(sourceIndex)
providerList.setItemChecked(sourceIndex, true)
providerList.choiceMode = AbsListView.CHOICE_MODE_SINGLE
providerList.adapter = sourcesArrayAdapter
providerList.setSelection(sourceIndex)
providerList.setItemChecked(sourceIndex, true)
providerList.setOnItemClickListener { _, _, which, _ ->
sourceIndex = which
providerList.setItemChecked(which, true)
providerList.setOnItemClickListener { _, _, which, _ ->
sourceIndex = which
providerList.setItemChecked(which, true)
}
}
}
refreshLinks(currentQualityProfile)
sourceDialog.setOnDismissListener {
if (shouldDismiss) dismiss()
selectSourceDialog = null
@ -650,6 +675,29 @@ class GeneratorPlayer : FullScreenPlayer() {
sourceDialog.dismissSafe(activity)
}
fun setProfileName(profile: Int) {
sourceDialog.source_settings_btt.setText(
QualityDataHelper.getProfileName(
profile
)
)
}
setProfileName(currentQualityProfile)
sourceDialog.source_settings_btt.setOnClickListener {
val activity = activity ?: return@setOnClickListener
QualityProfileDialog(
activity,
R.style.AlertDialogCustomBlack,
currentLinks.mapNotNull { it.first },
currentQualityProfile
) { profile ->
currentQualityProfile = profile.id
setProfileName(profile.id)
refreshLinks(profile.id)
}.show()
}
sourceDialog.subtitles_encoding_format?.apply {
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
@ -847,7 +895,7 @@ class GeneratorPlayer : FullScreenPlayer() {
private fun startPlayer() {
if (isActive) return // we don't want double load when you skip loading
val links = sortLinks()
val links = sortLinks(currentQualityProfile)
if (links.isEmpty()) {
noLinksFound()
return
@ -868,12 +916,12 @@ class GeneratorPlayer : FullScreenPlayer() {
}
override fun hasNextMirror(): Boolean {
val links = sortLinks()
val links = sortLinks(currentQualityProfile)
return links.isNotEmpty() && links.indexOf(currentSelectedLink) + 1 < links.size
}
override fun nextMirror() {
val links = sortLinks()
val links = sortLinks(currentQualityProfile)
if (links.isEmpty()) {
noLinksFound()
return
@ -1314,6 +1362,15 @@ class GeneratorPlayer : FullScreenPlayer() {
val turnVisible = it.isNotEmpty()
val wasGone = overlay_loading_skip_button?.isGone == true
overlay_loading_skip_button?.isVisible = turnVisible
normalSafeApiCall {
currentLinks.lastOrNull()?.let { last ->
if (getLinkPriority(currentQualityProfile, last) >= QualityDataHelper.AUTO_SKIP_PRIORITY) {
startPlayer()
}
}
}
if (turnVisible && wasGone) {
overlay_loading_skip_button?.requestFocus()
}

View file

@ -5,15 +5,8 @@ import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
import com.lagradost.cloudstream3.utils.*
import java.net.URI
/**
* Used to open the player more easily with the LinkGenerator
**/
data class BasicLink(
val url: String,
val name: String? = null,
)
class LinkGenerator(
private val links: List<BasicLink>,
private val links: List<String>,
private val extract: Boolean = true,
private val referer: String? = null,
private val isM3u8: Boolean? = null
@ -54,7 +47,7 @@ class LinkGenerator(
offset: Int
): Boolean {
links.amap { link ->
if (!extract || !loadExtractor(link.url, referer, {
if (!extract || !loadExtractor(link, referer, {
subtitleCallback(PlayerSubtitleHelper.getSubtitleData(it))
}) {
callback(it to null)
@ -64,11 +57,11 @@ class LinkGenerator(
callback(
ExtractorLink(
"",
link.name ?: link.url,
unshortenLinkSafe(link.url), // unshorten because it might be a raw link
link,
unshortenLinkSafe(link), // unshorten because it might be a raw link
referer ?: "",
Qualities.Unknown.value, isM3u8 ?: normalSafeApiCall {
URI(link.url).path?.substringAfterLast(".")?.contains("m3u")
URI(link).path?.substringAfterLast(".")?.contains("m3u")
} ?: false
) to null
)

View file

@ -0,0 +1,60 @@
package com.lagradost.cloudstream3.ui.player.source_priority
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.utils.AppUtils
import kotlinx.android.synthetic.main.player_prioritize_item.view.*
data class SourcePriority<T>(
val data: T,
val name: String,
var priority: Int
)
class PriorityAdapter<T>(override val items: MutableList<SourcePriority<T>>) :
AppUtils.DiffAdapter<SourcePriority<T>>(items) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return PriorityViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.player_prioritize_item, parent, false)
)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is PriorityViewHolder -> holder.bind(items[position])
}
}
class PriorityViewHolder(
itemView: View,
) : RecyclerView.ViewHolder(itemView) {
fun <T> bind(item: SourcePriority<T>) {
val plusButton: ImageView = itemView.add_button
val subtractButton: ImageView = itemView.subtract_button
val priorityText: TextView = itemView.priority_text
val priorityNumber: TextView = itemView.priority_number
priorityText.text = item.name
fun updatePriority() {
priorityNumber.text = item.priority.toString()
}
updatePriority()
plusButton.setOnClickListener {
// If someone clicks til the integer limit then they deserve to crash.
item.priority++
updatePriority()
}
subtractButton.setOnClickListener {
item.priority--
updatePriority()
}
}
}
}

View file

@ -0,0 +1,81 @@
package com.lagradost.cloudstream3.ui.player.source_priority
import android.content.res.ColorStateList
import android.graphics.Paint
import android.graphics.Typeface
import android.text.style.StyleSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.utils.AppUtils
import kotlinx.android.synthetic.main.player_quality_profile_item.view.*
class ProfilesAdapter(
override val items: MutableList<QualityDataHelper.QualityProfile>,
val usedProfile: Int,
val clickCallback: (oldIndex: Int?, newIndex: Int) -> Unit,
) :
AppUtils.DiffAdapter<QualityDataHelper.QualityProfile>(
items,
comparison = { first: QualityDataHelper.QualityProfile, second: QualityDataHelper.QualityProfile ->
first.id == second.id
}) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return ProfilesViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.player_quality_profile_item, parent, false)
)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ProfilesViewHolder -> holder.bind(items[position], position)
}
}
private var currentItem: Pair<Int, QualityDataHelper.QualityProfile>? = null
fun getCurrentProfile(): QualityDataHelper.QualityProfile? {
return currentItem?.second
}
inner class ProfilesViewHolder(
itemView: View,
) : RecyclerView.ViewHolder(itemView) {
fun bind(item: QualityDataHelper.QualityProfile, index: Int) {
val priorityText: TextView = itemView.profile_text
val wifiText: TextView = itemView.text_is_wifi
val dataText: TextView = itemView.text_is_mobile_data
val outline: View = itemView.outline
priorityText.text = item.name.asString(itemView.context)
dataText.isVisible = item.type == QualityDataHelper.QualityProfileType.Data
wifiText.isVisible = item.type == QualityDataHelper.QualityProfileType.WiFi
fun setCurrentItem() {
val prevIndex = currentItem?.first
currentItem = index to item
clickCallback.invoke(prevIndex, index)
}
outline.isVisible = currentItem?.second?.id == item.id
val textStyle =
if (item.id == usedProfile) {
Typeface.BOLD
} else {
Typeface.NORMAL
}
priorityText.setTypeface(null, textStyle)
itemView.setOnClickListener {
setCurrentItem()
}
}
}
}

View file

@ -0,0 +1,159 @@
package com.lagradost.cloudstream3.ui.player.source_priority
import android.content.Context
import androidx.annotation.StringRes
import com.lagradost.cloudstream3.AcraApplication.Companion.getKey
import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey
import com.lagradost.cloudstream3.AcraApplication.Companion.setKey
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.mvvm.debugAssert
import com.lagradost.cloudstream3.ui.result.UiText
import com.lagradost.cloudstream3.ui.result.txt
import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount
import com.lagradost.cloudstream3.utils.Qualities
object QualityDataHelper {
private const val VIDEO_SOURCE_PRIORITY = "video_source_priority"
private const val VIDEO_PROFILE_NAME = "video_profile_name"
private const val VIDEO_QUALITY_PRIORITY = "video_quality_priority"
private const val VIDEO_PROFILE_TYPE = "video_profile_type"
private const val DEFAULT_SOURCE_PRIORITY = 1
/**
* Automatically skip loading links once this priority is reached
**/
const val AUTO_SKIP_PRIORITY = 10
/**
* Must be higher than amount of QualityProfileTypes
**/
private const val PROFILE_COUNT = 10
/**
* Unique guarantees that there will always be one of this type in the profile list.
**/
enum class QualityProfileType(@StringRes val stringRes: Int, val unique: Boolean) {
None(R.string.none, false),
WiFi(R.string.wifi, true),
Data(R.string.mobile_data, true)
}
data class QualityProfile(
val name: UiText,
val id: Int,
val type: QualityProfileType
)
fun getSourcePriority(profile: Int, name: String?): Int {
if (name == null) return DEFAULT_SOURCE_PRIORITY
return getKey(
"$currentAccount/$VIDEO_SOURCE_PRIORITY/$profile",
name,
DEFAULT_SOURCE_PRIORITY
) ?: DEFAULT_SOURCE_PRIORITY
}
fun setSourcePriority(profile: Int, name: String, priority: Int) {
setKey("$currentAccount/$VIDEO_SOURCE_PRIORITY/$profile", name, priority)
}
fun setProfileName(profile: Int, name: String?) {
val path = "$currentAccount/$VIDEO_PROFILE_NAME/$profile"
if (name == null) {
removeKey(path)
} else {
setKey(path, name.trim())
}
}
fun getProfileName(profile: Int): UiText {
return getKey<String>("$currentAccount/$VIDEO_PROFILE_NAME/$profile")?.let { txt(it) }
?: txt(R.string.profile_number, profile)
}
fun getQualityPriority(profile: Int, quality: Qualities): Int {
return getKey(
"$currentAccount/$VIDEO_QUALITY_PRIORITY/$profile",
quality.value.toString(),
quality.defaultPriority
) ?: quality.defaultPriority
}
fun setQualityPriority(profile: Int, quality: Qualities, priority: Int) {
setKey(
"$currentAccount/$VIDEO_QUALITY_PRIORITY/$profile",
quality.value.toString(),
priority
)
}
fun getQualityProfileType(profile: Int): QualityProfileType {
return getKey("$currentAccount/$VIDEO_PROFILE_TYPE/$profile") ?: QualityProfileType.None
}
fun setQualityProfileType(profile: Int, type: QualityProfileType?) {
val path = "$currentAccount/$VIDEO_PROFILE_TYPE/$profile"
if (type == QualityProfileType.None) {
removeKey(path)
} else {
setKey(path, type)
}
}
/**
* Gets all quality profiles, always includes one profile with WiFi and Data
* Must under all circumstances at least return one profile
**/
fun getProfiles(): List<QualityProfile> {
val availableTypes = QualityProfileType.values().toMutableList()
val profiles = (1..PROFILE_COUNT).map { profileNumber ->
// Get the real type
val type = getQualityProfileType(profileNumber)
// This makes it impossible to get more than one of each type
// Duplicates will be turned to None
val uniqueType = if (type.unique && !availableTypes.remove(type)) {
QualityProfileType.None
} else {
type
}
QualityProfile(
getProfileName(profileNumber),
profileNumber,
uniqueType
)
}.toMutableList()
/**
* If no profile of this type exists: insert it on the earliest profile with None type
**/
fun insertType(
list: MutableList<QualityProfile>,
type: QualityProfileType
) {
if (list.any { it.type == type }) return
val index =
list.indexOfFirst { it.type == QualityProfileType.None }
list.getOrNull(index)?.copy(type = type)
?.let { fixed ->
list.set(index, fixed)
}
}
QualityProfileType.values().forEach {
if (it.unique) insertType(profiles, it)
}
debugAssert({
!QualityProfileType.values().all { type ->
!type.unique || profiles.any { it.type == type }
}
}, { "All unique quality types do not exist" })
debugAssert({
profiles.isEmpty()
}, { "No profiles!" })
return profiles
}
}

View file

@ -0,0 +1,106 @@
package com.lagradost.cloudstream3.ui.player.source_priority
import android.app.Dialog
import android.view.View
import android.widget.TextView
import androidx.annotation.StyleRes
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.RecyclerView
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper.getProfileName
import com.lagradost.cloudstream3.ui.player.source_priority.QualityDataHelper.getProfiles
import com.lagradost.cloudstream3.ui.result.txt
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
import kotlinx.android.synthetic.main.player_quality_profile_dialog.*
class QualityProfileDialog(
val activity: FragmentActivity,
@StyleRes val themeRes: Int,
private val links: List<ExtractorLink>,
private val usedProfile: Int,
private val profileSelectionCallback: (QualityDataHelper.QualityProfile) -> Unit
) : Dialog(activity, themeRes) {
override fun show() {
setContentView(R.layout.player_quality_profile_dialog)
val profilesRecyclerView: RecyclerView = profiles_recyclerview
val useBtt: View = use_btt
val editBtt: View = edit_btt
val cancelBtt: View = cancel_btt
val defaultBtt: View = set_default_btt
val currentProfileText: TextView = currently_selected_profile_text
val selectedItemActionsHolder: View = selected_item_holder
fun getCurrentProfile(): QualityDataHelper.QualityProfile? {
return (profilesRecyclerView.adapter as? ProfilesAdapter)?.getCurrentProfile()
}
fun refreshProfiles() {
currentProfileText.text = getProfileName(usedProfile).asString(context)
(profilesRecyclerView.adapter as? ProfilesAdapter)?.updateList(getProfiles())
}
profilesRecyclerView.adapter = ProfilesAdapter(
mutableListOf(),
usedProfile,
) { oldIndex: Int?, newIndex: Int ->
profilesRecyclerView.adapter?.notifyItemChanged(newIndex)
selectedItemActionsHolder.alpha = 1f
if (oldIndex != null) {
profilesRecyclerView.adapter?.notifyItemChanged(oldIndex)
}
}
refreshProfiles()
editBtt.setOnClickListener {
getCurrentProfile()?.let { profile ->
SourcePriorityDialog(context, themeRes, links, profile) {
refreshProfiles()
}.show()
}
}
defaultBtt.setOnClickListener {
val currentProfile = getCurrentProfile() ?: return@setOnClickListener
val choices = QualityDataHelper.QualityProfileType.values()
.filter { it != QualityDataHelper.QualityProfileType.None }
val choiceNames = choices.map { txt(it.stringRes).asString(context) }
activity.showBottomDialog(
choiceNames,
choices.indexOf(currentProfile.type),
txt(R.string.set_default).asString(context),
false,
{},
{ index ->
val pickedChoice = choices.getOrNull(index) ?: return@showBottomDialog
// Remove previous picks
if (pickedChoice.unique) {
getProfiles().filter { it.type == pickedChoice }.forEach {
QualityDataHelper.setQualityProfileType(it.id, null)
}
}
QualityDataHelper.setQualityProfileType(currentProfile.id, pickedChoice)
refreshProfiles()
})
}
cancelBtt.setOnClickListener {
this.dismissSafe()
}
useBtt.setOnClickListener {
getCurrentProfile()?.let {
profileSelectionCallback.invoke(it)
this.dismissSafe()
}
}
super.show()
}
}

View file

@ -0,0 +1,105 @@
package com.lagradost.cloudstream3.ui.player.source_priority
import android.app.Dialog
import android.content.Context
import android.view.View
import android.widget.EditText
import android.widget.TextView
import androidx.annotation.StyleRes
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.RecyclerView
import androidx.work.impl.constraints.controllers.ConstraintController
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.ui.result.txt
import com.lagradost.cloudstream3.utils.DataStoreHelper
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.Qualities
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
import kotlinx.android.synthetic.main.player_select_source_priority.*
class SourcePriorityDialog(
ctx: Context,
@StyleRes themeRes: Int,
val links: List<ExtractorLink>,
private val profile: QualityDataHelper.QualityProfile,
/**
* Notify that the profile overview should be updated, for example if the name has been updated
* Should not be called excessively.
**/
private val updatedCallback: () -> Unit
) : Dialog(ctx, themeRes) {
override fun show() {
setContentView(R.layout.player_select_source_priority)
val sourcesRecyclerView: RecyclerView = sort_sources
val qualitiesRecyclerView: RecyclerView = sort_qualities
val profileText: EditText = profile_text_editable
val saveBtt: View = save_btt
val exitBtt: View = close_btt
val helpBtt: View = help_btt
profileText.setText(QualityDataHelper.getProfileName(profile.id).asString(context))
profileText.hint = txt(R.string.profile_number, profile.id).asString(context)
sourcesRecyclerView.adapter = PriorityAdapter(
links.map { link ->
SourcePriority(
null,
link.source,
QualityDataHelper.getSourcePriority(profile.id, link.source)
)
}.distinctBy { it.name }.sortedBy { -it.priority }.toMutableList()
)
qualitiesRecyclerView.adapter = PriorityAdapter(
Qualities.values().mapNotNull {
SourcePriority(
it,
Qualities.getStringByIntFull(it.value).ifBlank { return@mapNotNull null },
QualityDataHelper.getQualityPriority(profile.id, it)
)
}.sortedBy { -it.priority }.toMutableList()
)
@Suppress("UNCHECKED_CAST") // We know the types
saveBtt.setOnClickListener {
val qualityAdapter = qualitiesRecyclerView.adapter as? PriorityAdapter<Qualities>
val sourcesAdapter = sourcesRecyclerView.adapter as? PriorityAdapter<Nothing>
val qualities = qualityAdapter?.items ?: emptyList()
val sources = sourcesAdapter?.items ?: emptyList()
qualities.forEach {
val data = it.data as? Qualities ?: return@forEach
QualityDataHelper.setQualityPriority(profile.id, data, it.priority)
}
sources.forEach {
QualityDataHelper.setSourcePriority(profile.id, it.name, it.priority)
}
qualityAdapter?.updateList(qualities.sortedBy { -it.priority })
sourcesAdapter?.updateList(sources.sortedBy { -it.priority })
val savedProfileName = profileText.text.toString()
if (savedProfileName.isBlank()) {
QualityDataHelper.setProfileName(profile.id, null)
} else {
QualityDataHelper.setProfileName(profile.id, savedProfileName)
}
updatedCallback.invoke()
}
exitBtt.setOnClickListener {
this.dismissSafe()
}
helpBtt.setOnClickListener {
AlertDialog.Builder(context, R.style.AlertDialogCustom).apply {
setMessage(R.string.quality_profile_help)
}.show()
}
super.show()
}
}

View file

@ -7,13 +7,13 @@ import androidx.recyclerview.widget.RecyclerView
import com.lagradost.cloudstream3.mvvm.logError
fun RecyclerView?.setLinearListLayout(isHorizontal: Boolean = true) {
if (this == null) return
if(this == null) return
this.layoutManager =
this.context?.let { LinearListLayout(it).apply { if (isHorizontal) setHorizontal() else setVertical() } }
?: this.layoutManager
}
open class LinearListLayout(context: Context?) :
class LinearListLayout(context: Context?) :
LinearLayoutManager(context) {
fun setHorizontal() {
@ -24,8 +24,7 @@ open class LinearListLayout(context: Context?) :
orientation = VERTICAL
}
private fun getCorrectParent(focused: View?): View? {
if (focused == null) return null
private fun getCorrectParent(focused: View): View? {
var current: View? = focused
val last: ArrayList<View> = arrayListOf(focused)
while (current != null && current !is RecyclerView) {
@ -55,17 +54,10 @@ open class LinearListLayout(context: Context?) :
linearSmoothScroller.targetPosition = position
startSmoothScroll(linearSmoothScroller)
}*/
override fun onInterceptFocusSearch(focused: View, direction: Int): View? {
val dir = if (orientation == HORIZONTAL) {
if (direction == View.FOCUS_DOWN || direction == View.FOCUS_UP) {
// This scrolls the recyclerview before doing focus search, which
// allows the focus search to work better.
// Without this the recyclerview focus location on the screen
// would change when scrolling between recyclerviews.
(focused.parent as? RecyclerView)?.focusSearch(direction)
return null
}
if (direction == View.FOCUS_DOWN || direction == View.FOCUS_UP) return null
if (direction == View.FOCUS_RIGHT) 1 else -1
} else {
if (direction == View.FOCUS_RIGHT || direction == View.FOCUS_LEFT) return null

View file

@ -22,7 +22,6 @@ import androidx.core.view.isVisible
import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.ViewModelProvider
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.RecyclerView
import com.discord.panels.OverlappingPanelsLayout
import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipDrawable
@ -532,25 +531,6 @@ open class ResultFragment : ResultTrailerPlayer() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
result_cast_items?.layoutManager = object : LinearListLayout(view.context) {
override fun onRequestChildFocus(
parent: RecyclerView,
state: RecyclerView.State,
child: View,
focused: View?
): Boolean {
// Make the cast always focus the first visible item when focused
// from somewhere else. Otherwise it jumps to the last item.
return if (parent.focusedChild == null) {
scrollToPosition(this.findFirstCompletelyVisibleItemPosition())
true
} else {
super.onRequestChildFocus(parent, state, child, focused)
}
}
}.apply {
this.orientation = RecyclerView.HORIZONTAL
}
result_cast_items?.adapter = ActorAdaptor()
updateUIListener = ::updateUI

View file

@ -3,7 +3,6 @@ package com.lagradost.cloudstream3.ui.result
import android.app.Activity
import android.content.*
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.widget.Toast
@ -1126,12 +1125,7 @@ class ResultViewModel2 : ViewModel() {
1L
}
// Component no longer safe to use in A13 for VLC
// https://code.videolan.org/videolan/vlc-android/-/issues/2776
// This will likely need to be updated once VLC fixes their documentation.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
component = VLC_COMPONENT
}
component = VLC_COMPONENT
putExtra("from_start", !resume)
putExtra("position", position)

View file

@ -157,28 +157,6 @@ class SettingsAccount : PreferenceFragmentCompat() {
)
dialog.dismissSafe()
}
val displayedItems = listOf(
dialog.login_username_input,
dialog.login_email_input,
dialog.login_server_input,
dialog.login_password_input
).filter { it.isVisible }
displayedItems.foldRight(displayedItems.firstOrNull()) { item, previous ->
item?.id?.let { previous?.nextFocusDownId = it }
previous?.id?.let { item?.nextFocusUpId = it }
item
}
displayedItems.firstOrNull()?.let {
dialog.create_account?.nextFocusDownId = it.id
it.nextFocusUpId = dialog.create_account.id
}
dialog.apply_btt?.id?.let {
displayedItems.lastOrNull()?.nextFocusDownId = it
}
dialog.text1?.text = api.name
if (api.storesPasswordInPlainText) {

View file

@ -78,7 +78,6 @@ val appLanguages = arrayListOf(
Triple("", "ಕನ್ನಡ", "kn"),
Triple("", "македонски", "mk"),
Triple("", "മലയാളം", "ml"),
Triple("", "bahasa Melayu", "ms"),
Triple("", "Nederlands", "nl"),
Triple("", "norsk nynorsk", "nn"),
Triple("", "norsk bokmål", "no"),

View file

@ -117,7 +117,7 @@ object DataStoreHelper {
/**
* A datastore wide account for future implementations of a multiple account system
**/
private var currentAccount: String = "0" //TODO ACCOUNT IMPLEMENTATION
var currentAccount: String = "0" //TODO ACCOUNT IMPLEMENTATION
fun getAllWatchStateIds(): List<Int>? {
val folder = "$currentAccount/$RESULT_WATCH_STATE"

View file

@ -52,7 +52,7 @@ data class ExtractorLinkPlayList(
)
open class ExtractorLink constructor(
open class ExtractorLink(
open val source: String,
open val name: String,
override val url: String,
@ -62,24 +62,7 @@ open class ExtractorLink constructor(
override val headers: Map<String, String> = mapOf(),
/** Used for getExtractorVerifierJob() */
open val extractorData: String? = null,
open val isDash: Boolean = false,
) : VideoDownloadManager.IDownloadableMinimum {
/**
* Old constructor without isDash, allows for backwards compatibility with extensions.
* Should be removed after all extensions have updated their cloudstream.jar
**/
constructor(
source: String,
name: String,
url: String,
referer: String,
quality: Int,
isM3u8: Boolean = false,
headers: Map<String, String> = mapOf(),
/** Used for getExtractorVerifierJob() */
extractorData: String? = null
) : this(source, name, url, referer, quality, isM3u8, headers, extractorData, false)
override fun toString(): String {
return "ExtractorLink(name=$name, url=$url, referer=$referer, isM3u8=$isM3u8)"
}
@ -114,16 +97,16 @@ data class ExtractorSubtitleLink(
*/
val schemaStripRegex = Regex("""^(https:|)//(www\.|)""")
enum class Qualities(var value: Int) {
Unknown(400),
P144(144), // 144p
P240(240), // 240p
P360(360), // 360p
P480(480), // 480p
P720(720), // 720p
P1080(1080), // 1080p
P1440(1440), // 1440p
P2160(2160); // 4k or 2160p
enum class Qualities(var value: Int, val defaultPriority: Int) {
Unknown(400, 4),
P144(144, 0), // 144p
P240(240, 2), // 240p
P360(360, 3), // 360p
P480(480, 4), // 480p
P720(720, 5), // 720p
P1080(1080, 6), // 1080p
P1440(1440, 7), // 1440p
P2160(2160, 8); // 4k or 2160p
companion object {
fun getStringByInt(qual: Int?): String {
@ -135,6 +118,14 @@ enum class Qualities(var value: Int) {
else -> "${qual}p"
}
}
fun getStringByIntFull(quality: Int): String {
return when (quality) {
0 -> "Auto"
Unknown.value -> "Unknown"
P2160.value -> "4K"
else -> "${quality}p"
}
}
}
}

View file

@ -250,17 +250,6 @@ object SingleSelectionHelper {
)
}
fun showBottomDialog(
items: List<String>,
selectedIndex: Int,
name: String,
showApply: Boolean,
dismissCallback: () -> Unit,
callback: (Int) -> Unit,
) {
}
/** Only for a low amount of items */
fun Activity?.showBottomDialog(
items: List<String>,

View file

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:tint="?attr/white" android:viewportHeight="24"
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z"/>
</vector>

View file

@ -3,7 +3,7 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
android:tint="?attr/white">
<path
android:fillColor="@android:color/white"
android:pathData="M19,13H5v-2h14v2z"/>

View file

@ -199,13 +199,17 @@
android:id="@+id/result_back"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:layout_marginEnd="10dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/go_back"
android:focusable="true"
android:gravity="center_vertical"
android:nextFocusDown="@id/result_description"
android:src="@drawable/ic_baseline_arrow_back_24"
app:tint="?attr/white" />
@ -381,8 +385,8 @@
<com.google.android.material.chip.ChipGroup
android:id="@+id/result_tag"
style="@style/ChipParent"
android:id="@+id/result_tag"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
@ -419,11 +423,11 @@
<LinearLayout
android:animateLayoutChanges="true"
android:id="@+id/result_movie_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:animateLayoutChanges="true"
android:orientation="horizontal"
tools:visibility="visible">
@ -564,7 +568,6 @@
android:layout_weight="1"
android:minWidth="250dp"
android:nextFocusLeft="@id/result_movie_progress_downloaded_holder"
android:nextFocusRight="@id/result_bookmark_button"
android:nextFocusDown="@id/result_resume_series_button_play"
android:text="@string/type_none"
android:visibility="visible" />

View file

@ -2,30 +2,33 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_height="wrap_content">
<TextView
android:layout_marginStart="@dimen/navbar_width"
android:id="@+id/home_child_more_info"
style="@style/WatchHeaderText"
android:padding="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/navbar_width"
style="@style/WatchHeaderText"
android:layout_marginEnd="0dp"
android:padding="12dp"
tools:text="Trending" />
<androidx.recyclerview.widget.RecyclerView
android:nextFocusUp="@id/home_child_more_info"
android:paddingEnd="5dp"
android:paddingStart="@dimen/navbar_width"
android:clipToPadding="false"
android:descendantFocusability="afterDescendants"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:id="@+id/home_child_recyclerview"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:descendantFocusability="afterDescendants"
android:nextFocusUp="@id/home_child_more_info"
android:orientation="horizontal"
android:paddingStart="@dimen/navbar_width"
android:paddingEnd="5dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/home_result_grid" />
</LinearLayout>

View file

@ -0,0 +1,48 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="15dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/priority_text"
style="@style/NoCheckLabel"
android:layout_width="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/subtract_button"
tools:text="hello" />
<ImageView
android:id="@+id/subtract_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/priority_number"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="10dp"
android:src="@drawable/baseline_remove_24" />
<TextView
android:id="@+id/priority_number"
style="@style/NoCheckLabel"
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/add_button"
android:gravity="center"
android:minWidth="50dp"
android:textColor="?attr/textColor"
tools:text="1" />
<ImageView
android:id="@+id/add_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="10dp"
android:src="@drawable/ic_baseline_add_24" />
</RelativeLayout>

View file

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_rowWeight="1"
android:layout_marginTop="10dp"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingTop="10dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingBottom="10dp"
android:text="@string/profiles"
android:textColor="?attr/textColor"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/currently_selected_profile_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_rowWeight="1"
android:layout_marginTop="10dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:textColor="?attr/textColor"
android:textSize="15sp"
tools:text="Profile 1" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/profiles_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="4"
tools:listitem="@layout/player_quality_profile_item" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:animateLayoutChanges="true"
android:gravity="end|bottom"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/selected_item_holder"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:alpha="0.5"
android:layout_weight="1">
<com.google.android.material.button.MaterialButton
android:id="@+id/edit_btt"
style="@style/WhiteButton"
android:layout_width="wrap_content"
android:text="@string/edit" />
<com.google.android.material.button.MaterialButton
android:id="@+id/set_default_btt"
style="@style/WhiteButton"
android:layout_width="wrap_content"
android:text="@string/set_default" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end">
<com.google.android.material.button.MaterialButton
android:id="@+id/use_btt"
style="@style/WhiteButton"
android:layout_width="wrap_content"
android:text="@string/use" />
</LinearLayout>
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/cancel_btt"
style="@style/BlackButton"
android:layout_width="wrap_content"
android:text="@string/sort_cancel" />
</LinearLayout>
</LinearLayout>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/card_view"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginStart="10dp"
android:animateLayoutChanges="true"
android:backgroundTint="?attr/primaryGrayBackground"
app:cardCornerRadius="@dimen/rounded_image_radius">
<View
android:id="@+id/outline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/outline"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:layout_gravity="center"
android:id="@+id/profile_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:padding="10dp"
tools:text="@string/mobile_data" />
<TextView
android:id="@+id/text_is_wifi"
style="@style/DubButton"
android:layout_gravity="end"
android:text="@string/wifi" />
<TextView
android:id="@+id/text_is_mobile_data"
style="@style/DubButton"
android:layout_gravity="end"
android:text="@string/mobile_data" />
</androidx.cardview.widget.CardView>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -20,19 +21,45 @@
android:layout_weight="50"
android:orientation="vertical">
<TextView
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_rowWeight="1"
android:layout_marginTop="10dp"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingTop="10dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingBottom="10dp"
android:text="@string/pick_source"
android:textColor="?attr/textColor"
android:textSize="20sp"
android:textStyle="bold" />
android:background="@drawable/outline_drawable_less"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingTop="10dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingBottom="10dp"
android:text="@string/pick_source"
android:textColor="?attr/textColor"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/source_settings_btt"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@drawable/outline_drawable"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:drawablePadding="10dp"
android:gravity="center"
android:minWidth="140dp"
android:paddingHorizontal="10dp"
android:textColor="?attr/textColor"
android:textSize="15sp"
app:drawableEndCompat="@drawable/ic_outline_settings_24"
tools:text="@string/profile_number" />
</LinearLayout>
<ListView
android:id="@+id/sort_providers"

View file

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="60dp"
android:baselineAligned="false"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/sort_sources_holder"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="50"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_rowWeight="1"
android:layout_marginTop="10dp"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingTop="10dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingBottom="10dp"
android:text="@string/pick_source"
android:textColor="?attr/textColor"
android:textSize="20sp"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/sort_sources"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_rowWeight="1"
android:background="?attr/primaryBlackBackground"
android:listSelector="@drawable/outline_drawable_less"
android:nextFocusLeft="@id/sort_subtitles"
android:nextFocusRight="@id/apply_btt"
android:requiresFadingEdge="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:layout_height="100dp"
tools:listitem="@layout/player_prioritize_item" />
</LinearLayout>
<LinearLayout
android:id="@+id/sort_subtitles_holder"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="50"
android:orientation="vertical">
<!-- android:id="@+id/subs_settings" android:foreground="?android:attr/selectableItemBackgroundBorderless"
-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<LinearLayout
android:id="@+id/subtitles_click_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_rowWeight="1"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingTop="10dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingBottom="10dp"
android:text="@string/qualities"
android:textColor="?attr/textColor"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/help_btt"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="12dp"
android:src="@drawable/baseline_help_outline_24"
android:contentDescription="@string/help" />
</LinearLayout>
<ImageView
android:layout_width="25dp"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:layout_marginTop="0dp"
android:layout_marginEnd="10dp"
android:contentDescription="@string/home_change_provider_img_des"
android:src="@drawable/ic_outline_settings_24"
android:visibility="gone" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/sort_qualities"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_rowWeight="1"
android:background="?attr/primaryBlackBackground"
android:listSelector="@drawable/outline_drawable_less"
android:nextFocusLeft="@id/sort_providers"
android:nextFocusRight="@id/cancel_btt"
android:requiresFadingEdge="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:layout_height="200dp"
tools:listfooter="@layout/sort_bottom_footer_add_choice"
tools:listitem="@layout/player_prioritize_item" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/apply_btt_holder"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_gravity="bottom"
android:layout_marginTop="-60dp"
android:orientation="horizontal">
<EditText
android:id="@+id/profile_text_editable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:inputType="text"
android:maxLength="32"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:textColor="?attr/textColor"
android:textSize="20sp"
android:textStyle="bold"
tools:text="@string/profile_number"
android:autofillHints="username" />
<!-- <ImageView-->
<!-- android:layout_width="50dp"-->
<!-- android:layout_height="50dp"-->
<!-- android:padding="10dp"-->
<!-- android:layout_gravity="center"-->
<!-- android:src="@drawable/outline_edit_24" />-->
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
</Space>
<com.google.android.material.button.MaterialButton
android:id="@+id/save_btt"
style="@style/WhiteButton"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical|end"
android:text="@string/sort_save" />
<com.google.android.material.button.MaterialButton
android:id="@+id/close_btt"
style="@style/BlackButton"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical|end"
android:text="@string/sort_close" />
</LinearLayout>
</LinearLayout>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 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">ملصق</string>
@ -119,16 +119,16 @@
<string name="eigengraumode_settings">وضع إيغنغرافي</string>
<string name="eigengraumode_settings_des">يضيف خيار السرعة في المُشغل</string>
<string name="swipe_to_seek_settings">السحب لتقديم</string>
<string name="swipe_to_seek_settings_des">اسحب من جانب إلى آخر للتحكم في موضعك في مقطع فيديو</string>
<string name="swipe_to_seek_settings_des">إسحب إلى اليسار أو اليمين للتحكم في الوقت في مُشغل الفيديو</string>
<string name="swipe_to_change_settings">السحب لتغيير الإعدادات</string>
<string name="swipe_to_change_settings_des">مرر لأعلى أو لأسفل على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت</string>
<string name="swipe_to_change_settings_des">إسحب على الجانب الأيسر أو الأيمن لتغيير السطوع أو مستوى الصوت</string>
<string name="autoplay_next_settings">تشغيل الحلقة التالية تلقائيًا</string>
<string name="autoplay_next_settings_des">تبدأ الحلقة التالية عندما تنتهي الحالية</string>
<string name="double_tap_to_seek_settings">النقر مرتان للتقديم للأمام أو للخلف</string>
<string name="double_tap_to_pause_settings">الضغط مرتان لإيقاف مؤقت</string>
<string name="double_tap_to_seek_amount_settings">التحكم في مدى تقديم المُشغل(ثوان)</string>
<string name="double_tap_to_seek_amount_settings">التحكم في مدى تقديم المُشغل</string>
<string name="double_tap_to_seek_settings_des">إضغط مرتين على الجانب الأيمن أو الأيسر للتقديم للأمام أو للخلف</string>
<string name="double_tap_to_pause_settings_des">اضغط مرتين في المنتصف للتوقف</string>
<string name="double_tap_to_pause_settings_des">إضغط في الوسط لإيقاف مؤقت</string>
<string name="use_system_brightness_settings">استخدم سطوع النظام</string>
<string name="use_system_brightness_settings_des">استخدم سطوع النظام في مُشغل التطبيق بدلاً من التراكب الداكن</string>
<string name="episode_sync_settings">تحديث تقدم المشاهدة</string>
@ -155,7 +155,7 @@
<string name="automatic_plugin_updates">تحديث الإضافات تلقائيًا</string>
<string name="automatic_plugin_download">تنزيل الإضافات تلقائيًا</string>
<string name="updates_settings">التحديث التلقائي</string>
<string name="updates_settings_des">ابحث تلقائيا عن التحديثات الجديدة بعد بدء التطبيق.</string>
<string name="updates_settings_des">البحث تلقائيًا عن التحديثات الجديدة عند البداية</string>
<string name="uprereleases_settings">التحديث إلى الاصدارات التجريبية (بيتا)</string>
<string name="uprereleases_settings_des">البحث عن التحديثات التجريبية بدلاً من الإصدارات الكاملة فقط</string>
<string name="github">غيت هاب</string>
@ -218,8 +218,8 @@
<string name="movies_singular">فيلم</string>
<string name="tv_series_singular">مسلسل</string>
<string name="cartoons_singular">كرتون</string>
<string name="anime_singular">أنيمي</string>
<string name="ova_singular">أوفا</string>
<string name="anime_singular">أنمي</string>
<string name="ova_singular">اوفا</string>
<string name="torrent_singular">تورنت</string>
<string name="documentaries_singular">وثائقي</string>
<string name="asian_drama_singular">دراما آسيوية</string>
@ -284,7 +284,7 @@
<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">عام</string>
<string name="random_button_settings">زر العشوائي</string>
<string name="random_button_settings_desc">يظهر الزر على الصفحة الرئيسية والذي يمكنه اختيار فيلم عشوائي أو مسلسل تلفزيوني من الصفحة الرئيسية</string>
<string name="random_button_settings_desc">إظهار زر العشوائي على الصفحة الرئيسية</string>
<string name="provider_lang_settings">لغات المزود</string>
<string name="app_layout">واجهة التطبيق</string>
<string name="preferred_media_settings">المحتوى المفضل</string>
@ -342,7 +342,7 @@
<string name="all">الكل</string>
<string name="max">الحد الاقصي</string>
<string name="min">الحد الأدنى</string>
<string name="subtitles_none" translatable="false">@string/none</string>
<string name="subtitles_none" translatable="false">\@string/none</string>
<string name="subtitles_outline">الخطوط المحيطة</string>
<string name="subtitles_depressed">النمط المنخفض</string>
<string name="subtitles_shadow">ظل</string>
@ -558,7 +558,7 @@
<string name="pref_category_bypass">تجاوز مزود خدمة الإنترنت</string>
<string name="revert">استرجاع</string>
<string name="jsdelivr_enabled">فشل الوصول إلى GitHub ، وتمكين وكيل jsdelivr.</string>
<string name="jsdelivr_proxy_summary">باستخدام jsdelivr ، يمكن تجاوز حظر GitHub. قد يؤخر التحديثات لبضعة أيام.</string>
<string name="jsdelivr_proxy_summary">تجاوز حظر GitHub باستخدام jsdelivr ، قد يتسبب في تأخير التحديثات لبضعة أيام.</string>
<string name="jsdelivr_proxy">وكيل raw.githubusercontent.com</string>
<string name="watch_quality_pref_data">جودة المشاهدة المفضلة (بيانات الجوال)</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string formatted="true" name="app_dub_sub_episode_text_format">%s еп. %d</string>
<string formatted="true" name="cast_format">Актьори: %s</string>
@ -106,7 +105,7 @@
<string name="continue_watching">Продължете да гледате</string>
<string name="action_remove_watching">Премахване</string>
<string name="action_open_watching">Повече информация</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Може да е необходим VPN, за да работи правилно този доставчик</string>
<string name="vpn_torrent">Този доставчик е торент, препоръчва се VPN</string>
<string name="provider_info_meta">Метаданните не се предоставят от сайта, зареждането на видео ще бъде неуспешно, ако не съществува на сайта.</string>
@ -224,8 +223,8 @@
<string name="movies_singular">Филм</string>
<string name="tv_series_singular">Серия</string>
<string name="cartoons_singular">Анимационен филм</string>
<string name="anime_singular">@string/anime</string>
<string name="ova_singular">@string/ova</string>
<string name="anime_singular">\@string/anime</string>
<string name="ova_singular">\@string/ova</string>
<string name="torrent_singular">Торент</string>
<string name="documentaries_singular">Документален филм</string>
<string name="asian_drama_singular">Азиатска драма</string>
@ -498,4 +497,4 @@
<string name="delayed_update_notice">Приложението ще се актуализира при изход от него</string>
<string name="update_started">Започна Актуализация</string>
<string name="action_remove_from_watched">Премахване от гледани</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="result_poster_img_des">পোস্টার</string>
<string name="play_with_app_name">ক্লাউডস্ট্রিম দিয়ে চালান</string>
@ -143,9 +143,9 @@
<string name="category_updates">হালনাগাদ ও ব্যাকআপ</string>
<string name="updates_settings">অ্যাপ এর হালনাগাদ দেখান</string>
<string name="swipe_to_seek_settings">খুঁজতে সোয়াইপ করুন</string>
<string name="search_poster_img_des">@string/result_poster_img_des</string>
<string name="action_open_play">@string/home_play</string>
<string name="search_poster_img_des">\@string/result_poster_img_des</string>
<string name="action_open_play">\@string/home_play</string>
<string name="double_tap_to_seek_settings">আগাতে ডবল ট্যাপ করুন</string>
<string name="eigengraumode_settings">আইজেনগ্রাভি মোড</string>
<string name="update_started">আপডেট শুরু হয়েছে</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- KEYS DON'T TRANSLATE -->
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
@ -11,7 +10,7 @@
<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="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>
@ -109,7 +108,7 @@
<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="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>
@ -223,8 +222,8 @@
<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="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>
@ -429,4 +428,4 @@
<string name="autoplay_next_settings_des">Começa o próximo episódio quando o atual termina</string>
<string name="enable_nsfw_on_providers">Ativar NSFW em fornecedores compatíveis</string>
<string name="category_providers">Fornecedores</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- KEYS DON'T TRANSLATE -->
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
@ -104,7 +103,7 @@
<string name="continue_watching">Pokračovat ve sledování</string>
<string name="action_remove_watching">Odebrat</string>
<string name="action_open_watching">Další informace</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Aby tento poskytovatel fungoval správně, budete možná potřebovat VPN</string>
<string name="vpn_torrent">Tento poskytovatel je torrent, je doporučená VPN</string>
<string name="provider_info_meta">Web neposkytnul žádná metadata, načítání videa selže, pokud na webu neexistuje.</string>
@ -123,14 +122,14 @@
<string name="eigengraumode_settings">Rychlostní režim</string>
<string name="eigengraumode_settings_des">Přidá do přehrávače možnost rychlosti</string>
<string name="swipe_to_seek_settings">Přejet pro posun</string>
<string name="swipe_to_seek_settings_des">Přejeďte prstem ze strany na stranu pro ovládání své pozice ve videu</string>
<string name="swipe_to_seek_settings_des">Přejeďte prstem vlevo nebo vpravo pro ovládání času v přehrávači</string>
<string name="swipe_to_change_settings">Přejet pro změnu nastavení</string>
<string name="swipe_to_change_settings_des">Přejeďte prstem nahoru nebo dolů na levé nebo pravé straně pro změnu jasu nebo hlasitosti</string>
<string name="swipe_to_change_settings_des">Přejeďte prstem na levé nebo pravé straně pro změnu jasu nebo hlasitosti</string>
<string name="double_tap_to_seek_settings">Dvojité klepnutí pro posun</string>
<string name="double_tap_to_pause_settings">Dvojité klepnutí pro pozastavení</string>
<string name="double_tap_to_seek_amount_settings">Množství času k posunu (sekundy)</string>
<string name="double_tap_to_seek_amount_settings">Množství času k posunu</string>
<string name="double_tap_to_seek_settings_des">Klepněte dvakrát vpravo nebo vlevo pro posun vpřed nebo vzad</string>
<string name="double_tap_to_pause_settings_des">Klepněte dvakrát doprostřed pro pozastavení</string>
<string name="double_tap_to_pause_settings_des">Klepněte doprostřed pro pozastavení</string>
<string name="use_system_brightness_settings">Použít systémový jas</string>
<string name="use_system_brightness_settings_des">V přehrávači použít systémov překrytí</string>
<string name="episode_sync_settings">Aktualizovat postup sledování</string>
@ -152,7 +151,7 @@
<string name="bug_report_settings_on">Nebude odesílat žádná data</string>
<string name="show_fillers_settings">Zobrazit výplňové epizody u anime</string>
<string name="updates_settings">Zobrazit aktualizace aplikace</string>
<string name="updates_settings_des">Při spuštění aplikace automaticky zkontrolovat nové aktualizace.</string>
<string name="updates_settings_des">Při spuštění automaticky zkontrolovat nové aktualizace</string>
<string name="uprereleases_settings">Aktualizovat na předběžná vydání</string>
<string name="uprereleases_settings_des">Kontrolovat aktualizace předběžných vydání, místo normálních plných vydání</string>
<string name="github">GitHub</string>
@ -212,8 +211,8 @@
<string name="movies_singular">Film</string>
<string name="tv_series_singular">Seriál</string>
<string name="cartoons_singular">Animovaný</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">Dokument</string>
<string name="asian_drama_singular">Asijské drama</string>
@ -267,7 +266,7 @@
<string name="legal_notice_text" translatable="false">Jakékoli právní otázky týkající se obsahu této aplikace je třeba řešit se samotnými hostiteli a poskytovateli souborů, protože s nimi nejsme nijak spojeni. V případě porušení autorských práv se obraťte přímo na odpovědné strany nebo na webové stránky, na kterých se streamování odehrává. Aplikace je určena výhradně pro vzdělávací a osobní účely. CloudStream 3 v aplikaci nehostuje žádný obsah a nemá žádnou kontrolu nad tím, jaká média jsou v aplikaci umístěna nebo odstraněna. CloudStream 3 funguje jako jakýkoli jiný vyhledávač, například Google. Služba CloudStream 3 nehostuje, nenahrává ani nespravuje žádná videa, filmy ani obsah. Pouze vyhledává, agreguje a zobrazuje odkazy v pohodlném, uživatelsky přívětivém rozhraní. Pouze shromažďuje webové stránky třetích stran, které jsou veřejně přístupné prostřednictvím jakéhokoli běžného webového prohlížeče. Je odpovědností uživatele, aby se vyvaroval jakýchkoli akcí, které by mohly porušovat zákony platné v jeho lokalitě. Použijte CloudStream 3 na vlastní nebezpečí.</string>
<string name="category_general">Obecné</string>
<string name="random_button_settings">Náhodné tlačítko</string>
<string name="random_button_settings_desc">Zobrazit na domovské stránce tlačítko, kterým lze vybrat náhodný film nebo seriál z domovské stránky</string>
<string name="random_button_settings_desc">Zobrazit na domovské stránce náhodné tlačítko</string>
<string name="provider_lang_settings">Jazyk poskytovatelů</string>
<string name="app_layout">Rozložení aplikace</string>
<string name="preferred_media_settings">Preferovaná média</string>
@ -552,6 +551,6 @@
<string name="jsdelivr_enabled">Nepodařilo se připojit ke GitHubu, povolování proxy jsdelivr.</string>
<string name="watch_quality_pref_data">Upřednostněná kvalita sledování (mobilní data)</string>
<string name="revert">Vrátit zpět</string>
<string name="jsdelivr_proxy_summary">Pomocí jsdelivr lze obejít blokování GitHubu. Může dojít ke zpoždění aktualizací o několik dní.</string>
<string name="jsdelivr_proxy_summary">Obchází blokování GitHubu pomocí jsdelivr, může způsobit zpoždění aktualizací o několik dní.</string>
<string name="pref_category_bypass">Obcházení ISP</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
<string name="cast_format" formatted="true">Besetzung: %s</string>
@ -41,7 +41,7 @@
<string name="search_hint_site" formatted="true">Suche %s…</string>
<string name="no_data">Keine Daten vorhanden</string>
<string name="episode_more_options_des">Mehr Optionen</string>
<string name="next_episode">Nächste Episode</string>
<string name="next_episode">Nächste Epsisode</string>
<string name="result_tags">Genres</string>
<string name="result_share">Teilen</string>
<string name="result_open_in_browser">In Browser öffnen</string>
@ -115,7 +115,7 @@
<string name="continue_watching">Weiterschauen</string>
<string name="action_remove_watching">Entfernen</string>
<string name="action_open_watching">Mehr Infos</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Damit dieser Anbieter korrekt funktioniert, ist möglicherweise ein VPN erforderlich</string>
<string name="vpn_torrent">Dieser Anbieter bietet Torrents an, ein VPN wird dringend empfohlen</string>
<string name="provider_info_meta">Metadaten werden nicht von der Website bereitgestellt, das Laden des Videos schlägt fehl, wenn sie auf der Website nicht vorhanden sind.</string>
@ -136,14 +136,14 @@
<string name="swipe_to_seek_settings">Wischen zum vor- und zurückspulen</string>
<string name="swipe_to_seek_settings_des">Nach links oder rechts wischen, um die Zeit im Videoplayer zu steuern</string>
<string name="swipe_to_change_settings">Wischen, um Einstellungen zu ändern</string>
<string name="swipe_to_change_settings_des">Links oder rechts nach oben oder unten wischen, um die Helligkeit oder Lautstärke zu ändern</string>
<string name="swipe_to_change_settings_des">Links oder rechts wischen, um die Helligkeit oder Lautstärke zu ändern</string>
<string name="autoplay_next_settings">Nächste Episode automatisch abspielen</string>
<string name="autoplay_next_settings_des">Nächste Episode wird gestartet, sobald die aktuelle Episode endet</string>
<string name="double_tap_to_seek_settings">Doppeltippen zum vor- und zurückspulen</string>
<string name="double_tap_to_pause_settings">Doppeltippen zum Pausieren</string>
<string name="double_tap_to_seek_amount_settings">Zeit für vor- und zurückspulen im Player (Sekunden)</string>
<string name="double_tap_to_seek_amount_settings">Zeit für vor- und zurückspulen im Player</string>
<string name="double_tap_to_seek_settings_des">Zweimal auf die rechte oder linke Seite tippen, um vor- oder zurückzuspulen</string>
<string name="double_tap_to_pause_settings_des">Doppelt in die Mitte tippen, um zu pausieren</string>
<string name="double_tap_to_pause_settings_des">In die Mitte tippen, um zu pausieren</string>
<string name="use_system_brightness_settings">Systemhelligkeit verwenden</string>
<string name="use_system_brightness_settings_des">Systemhelligkeit anstelle eines dunklen Overlay im Player verwenden</string>
<string name="episode_sync_settings">Episodenfortschritt aktualisieren</string>
@ -166,7 +166,7 @@
<string name="pref_filter_search_quality">Ausgewählte Videoqualität bei Suchergebnissen ausblenden</string>
<string name="automatic_plugin_updates">Automatische Plugin-Updates</string>
<string name="updates_settings">App-Updates anzeigen</string>
<string name="updates_settings_des">Automatisches Suchen nach neuen Updates nach dem Start</string>
<string name="updates_settings_des">Automatisches Suchen nach neuen Updates beim Start</string>
<string name="uprereleases_settings">Auf Vorabversionen updaten</string>
<string name="uprereleases_settings_des">Suche nach Vorabversionen statt nur nach Vollversionen</string>
<string name="github">Github</string>
@ -246,7 +246,7 @@
<string name="episode_action_play_in_browser">In Browser wiedergeben</string>
<string name="episode_action_copy_link">Link kopieren</string>
<string name="episode_action_auto_download">Auto-Download</string>
<string name="episode_action_download_mirror">Alternativer Download</string>
<string name="episode_action_download_mirror">Download-Mirror</string>
<string name="episode_action_reload_links">Links neu laden</string>
<string name="episode_action_download_subtitle">Untertitel herunterladen</string>
<string name="show_hd">Qualitätsanzeige</string>
@ -286,7 +286,7 @@
<string name="legal_notice">Haftungsausschluss</string>
<string name="category_general">Allgemein</string>
<string name="random_button_settings">Zufalls-Button</string>
<string name="random_button_settings_desc">Zeigt einen Zufallsbutton auf der Startseite an, mit welchem eine Serie oder ein Film von der Website zufällig ausgewählt wird</string>
<string name="random_button_settings_desc">Zufallsbutton auf der Startseite anzeigen</string>
<string name="provider_lang_settings">Anbieter-Sprachen</string>
<string name="app_layout">App-Layout</string>
<string name="preferred_media_settings">Bevorzugte Medien</string>
@ -519,14 +519,14 @@
<string name="start">Start</string>
<string name="restart">Neustarten</string>
<string name="watch_quality_pref_data">Bevorzugte Videoqualität (mobile Daten)</string>
<string name="jsdelivr_proxy_summary">Umgehung der GitHub Sperre mit jsdelivr. Kann zu einigen Tagen Verzögerung bei Updates führen.</string>
<string name="jsdelivr_proxy_summary">Umgehung der GitHub Sperre mit jsdelivr, kann zu einigen Tagen Verzögerung bei Updates führen.</string>
<string name="subscription_new">%s abonniert</string>
<string name="subscription_deleted">%s deabonniert</string>
<string name="subscription_episode_released">Episode %d erschienen!</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Proxy</string>
<string name="jsdelivr_enabled">GitHub kann nicht erreicht werden, der jsdelivr-Proxy wird aktiviert.</string>
<string name="subscription_in_progress_notification">Abonnierte Serien werden aktualisiert</string>
<string name="subscription_in_progress_notification">Aktualisierung abonnierter Sendungen</string>
<string name="revert">Rückgängig</string>
<string name="subscription_list_name">Abonniert</string>
<string name="pref_category_bypass">ISP-Umgehungen</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<string name="app_name">CloudStream</string>
<string name="title_home">Αρχική</string>
<string name="title_search">Αναζήτηση</string>
@ -388,7 +387,7 @@
<string name="sort_close">Κλείσιμο</string>
<string name="sort_clear">Εκκαθάριση</string>
<string name="subs_subtitle_languages">Γλώσσα υποτίτλων</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="provider_info_meta">Δεν έχουν παρασχεθεί μεταδεδομένα από τον ιστότοπο, η φόρτωση του βίντεο θα αποτύχει αν δεν υπάρχει στον ιστότοπο.</string>
<string name="double_tap_to_pause_settings">Διπλό πάτημα για παύση</string>
<string name="double_tap_to_seek_amount_settings">Μέγεθος αναζήτησης στο πρόγραμμα αναπαραγωγής</string>
@ -453,7 +452,7 @@
<string name="skip_type_mixed_ed">Ανάμεικτοι τίτλοι τέλους</string>
<string name="go_back_30">-30</string>
<string name="rating">Κριτική</string>
<string name="ova_singular">@string/ova</string>
<string name="ova_singular">\@string/ova</string>
<string name="pref_category_app_updates">Ενημερώσεις εφαρμογής</string>
<string name="pref_category_backup">Αντίγραφο ασφαλείας</string>
<string name="pref_category_extensions">Extensions</string>
@ -465,7 +464,7 @@
<string name="pref_category_defaults">Προεπιλεγμένα</string>
<string name="login_format" formatted="true">%s %s</string>
<string name="subs_font_size">Μέγεθος γραμματοσειράς</string>
<string name="anime_singular">@string/anime</string>
<string name="anime_singular">\@string/anime</string>
<string name="pref_category_links">Σύνδεσμοι</string>
<string name="pref_category_looks">Εμφάνιση</string>
<string name="pref_category_ui_features">Χαρακτηριστικά</string>
@ -509,4 +508,4 @@
\nΣυνδέσου σε έναν λογαριασμό που έχει βιβλιοθήκη, ή πρόσθεσε σειρές στην τοπική βιβλιοθήκη σου</string>
<string name="safe_mode_file">Βρέθηκε αρχείο Ασφαλούς Λειτουργίας!
\nΔεν πρόκειται να φορτωθούν extensions κατά το ξεκίνημα μέχρι να διαγραφεί το αρχείο.</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="go_back_img_des">Reen</string>
<string name="title_home">Hejmo</string>
@ -78,4 +78,4 @@
<string name="player_speed_text_format" formatted="true">Rapido (%.2fx)</string>
<string name="search_hint">Serĉi…</string>
<string name="download">Elŝuti</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_category_extensions">Extensiones</string>
<string name="setup_extensions_subtext">Descargue la lista de sitios que quiera utilizar</string>
@ -51,10 +51,10 @@
<string name="subtitles_raised">Elevado</string>
<string name="subtitle_offset_extra_hint_later_format">Use esto si los subtítulos se muestran %d ms muy pronto</string>
<string name="subtitle_offset_extra_hint_before_format">Use esto si los subtítulos se muestran %d ms tarde</string>
<string name="swipe_to_seek_settings_des">Desliza el dedo de lado a lado para controlar la posición en un video</string>
<string name="swipe_to_seek_settings_des">Desliza el dedo hacia la izquierda o hacia la derecha para controlar el tiempo en el reproductor de video</string>
<string name="subtitles_filter_lang">Filtrar por idioma de medios preferido</string>
<string name="subtitles_remove_captions">Eliminar Closed Captions (CC) de los subtítulos</string>
<string name="double_tap_to_seek_amount_settings">Cantidad de búsquedas del reproductor (segundos)</string>
<string name="double_tap_to_seek_amount_settings">Cantidad de tiempo de búsqueda en el reproductor (en segundos)</string>
<string name="use_system_brightness_settings_des">Use el brillo del sistema en el reproductor de la app en lugar de una superposición oscura</string>
<string name="limit_title_rez">Resolución del reproductor de video</string>
<string name="player_settings_play_in_mpv">MPV</string>
@ -194,7 +194,7 @@
<string name="continue_watching">Continuar Viendo</string>
<string name="action_remove_watching">Remover</string>
<string name="action_open_watching">Más info</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Una VPN puede ser necesaria para que este proveedor funcione correctamente</string>
<string name="vpn_torrent">Este proveedor es un torrent, se recomienda una VPN</string>
<string name="provider_info_meta">El sitio no proporciona los metadatos, la carga del video fallará si no existe en el sitio.</string>
@ -205,16 +205,16 @@
<string name="eigengraumode_settings">Modo Eigengravy</string>
<string name="swipe_to_seek_settings">Deslice para avanzar/retroceder</string>
<string name="swipe_to_change_settings">Deslice para cambiar la configuración</string>
<string name="swipe_to_change_settings_des">Deslice hacia arriba o hacia abajo en el lado izquierdo o derecho para cambiar el brillo o el volumen</string>
<string name="swipe_to_change_settings_des">Deslice el dedo hacia la izquierda o hacia la derecha para cambiar el brillo o el volumen</string>
<string name="double_tap_to_seek_settings">Toca dos veces para buscar</string>
<string name="double_tap_to_pause_settings">Tocar dos veces para pausar</string>
<string name="double_tap_to_seek_settings_des">Toque dos veces en el lado derecho o izquierdo para buscar hacia adelante o hacia atrás</string>
<string name="double_tap_to_pause_settings_des">Toque dos veces en el medio para hacer una pausa</string>
<string name="double_tap_to_pause_settings_des">Toque en el medio para pausar</string>
<string name="use_system_brightness_settings">Usar brillo del sistema</string>
<string name="restore_settings">Restaurar datos desde el backup</string>
<string name="backup_settings">Hacer copia de los datos (backup)</string>
<string name="restore_success">Archivo de backup cargado</string>
<string name="updates_settings_des">Busque automáticamente nuevas actualizaciones después de iniciar la aplicación.</string>
<string name="updates_settings_des">Buscar automáticamente nuevas actualizaciones al inicio</string>
<string name="redo_setup_process">Rehacer el proceso de configuración inicial</string>
<string name="show_fillers_settings">Mostrar episodio de relleno para Anime</string>
<string name="play_episode_toast">Reproducir Episodio</string>
@ -306,7 +306,7 @@
<string name="pref_category_looks">Aspecto</string>
<string name="pref_category_ui_features">Características</string>
<string name="random_button_settings">Botón de Al azar</string>
<string name="random_button_settings_desc">Muestra un botón de reproducción \"al azar\" en la página de inicio para poelículas y series</string>
<string name="random_button_settings_desc">Muestra un botón de reproducción \"al azar\" en la página de inicio</string>
<string name="account">cuenta</string>
<string name="logout">Cerrar sesión</string>
<string name="switch_account">Cambiar cuenta</string>
@ -363,8 +363,8 @@
<string name="movies_singular">Película</string>
<string name="tv_series_singular">Serie</string>
<string name="cartoons_singular">Dibujo animado</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">Documental</string>
<string name="asian_drama_singular">Drama asiático</string>
@ -506,11 +506,11 @@
\nInicia sesión en una cuenta de biblioteca o añade series desde tu biblioteca local</string>
<string name="safe_mode_file">¡Se encontró un archivo en modo seguro!
\nNo cargar ninguna extensión al inicio hasta que se elimine el archivo.</string>
<string name="android_tv_interface_on_seek_settings">Reproductor visible - buscar cantidad</string>
<string name="android_tv_interface_off_seek_settings">Reproductor oculto - buscar cantidad</string>
<string name="android_tv_interface_on_seek_settings">Jugadora mostrada - buscar cantidad</string>
<string name="android_tv_interface_off_seek_settings">Jugadora oculta - buscar cantidad</string>
<string name="pref_category_android_tv">Android TV</string>
<string name="android_tv_interface_on_seek_settings_summary">Tiempo de búsqueda usado (en segundos) cuando el reproductor está visible</string>
<string name="android_tv_interface_off_seek_settings_summary">Tiempo de búsqueda usado (en segundos) cuando el reproductor está oculto</string>
<string name="android_tv_interface_on_seek_settings_summary">La cantidad de búsqueda utilizada cuando la jugadora es visible</string>
<string name="android_tv_interface_off_seek_settings_summary">La cantidad de búsqueda utilizada cuando el jugador está oculto</string>
<string name="stop">Parar</string>
<string name="test_failed">Falló</string>
<string name="test_log">Registro</string>
@ -525,8 +525,8 @@
<string name="subscription_episode_released">¡Episodio %d publicado!</string>
<string name="jsdelivr_proxy">Proxy raw.githubusercontent.com</string>
<string name="jsdelivr_enabled">No se ha podido acceder a GitHub, activando el proxy jsdelivr.</string>
<string name="jsdelivr_proxy_summary">Con jsdelivr, se puede omitir el bloqueo de GitHub. Puede retrasar las actualizaciones unos días.</string>
<string name="jsdelivr_proxy_summary">Evita el bloqueo de GitHub usando jsdelivr, puede causar que las actualizaciones se retrasen unos días.</string>
<string name="revert">Revertir</string>
<string name="pref_category_bypass">ISP Bypasses</string>
<string name="watch_quality_pref_data">Calidad de visualización preferida (Datos móviles)</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="delete">حذف</string>
<string name="pause">مکث</string>
@ -33,4 +33,4 @@
<string name="next_episode_time_hour_format" formatted="true">%dساعت %dدقیقه</string>
<string name="next_episode_time_min_format" formatted="true">%dدقیقه</string>
<string name="home_main_poster_img_des">پوستر اصلی</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<string name="app_name">CloudStream</string>
<string name="title_home">Accueil</string>
<string name="title_search">Rechercher</string>
@ -131,7 +130,7 @@
<string name="new_update_format" formatted="true">Nouvelle mise à jour trouvée !
\n%s -&gt; %s</string>
<string name="filler" formatted="true">Épisode spécial</string>
<string name="watch_quality_pref">Qualité de visionnage préférée (WiFi)</string>
<string name="watch_quality_pref">Qualité de visionnage préférée</string>
<string name="video_buffer_size_settings">Taille de la mémoire cache</string>
<string name="resize_fill">Étendre</string>
<string name="legal_notice">Non-responsabilité</string>
@ -241,7 +240,7 @@
<string name="continue_watching">Continuer à regarder</string>
<string name="action_remove_watching">Retirer</string>
<string name="action_open_watching">Plus d\'informations</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Un VPN peut être nécessaire pour que ce fournisseur fonctionne correctement</string>
<string name="vpn_torrent">Ce fournisseur est un torrent, un VPN est recommandé</string>
<string name="provider_info_meta">Les métadonnées ne sont pas fournies par le site, le chargement de la vidéo échouera si elles n\'existent pas sur le site.</string>
@ -386,8 +385,8 @@
<string name="quality_4k">4K</string>
<string name="quality_webrip">Web</string>
<string name="go_back_30">-30</string>
<string name="anime_singular">@string/anime</string>
<string name="ova_singular">@string/ova</string>
<string name="anime_singular">\@string/anime</string>
<string name="ova_singular">\@string/ova</string>
<string name="nsfw_singular">NSFW</string>
<string name="login_format" formatted="true">%s %s</string>
<string name="subtitles_filter_lang">Filtrez par langue préférée</string>
@ -509,19 +508,4 @@
<string name="sort_updated_old">Mis à jour (ancien vers nouveau)</string>
<string name="safe_mode_file">Fichier du mode sans échec trouvé !
\nAucune extension ne sera chargée au démarrage avant que le fichier ne soit enlevé.</string>
<string name="stop">Arrêter</string>
<string name="revert">Revenir à</string>
<string name="test_log">Enregistrer</string>
<string name="watch_quality_pref_data">Qualité de visionnage préférée (données mobiles)</string>
<string name="subscription_new">Abonné à %s</string>
<string name="start">Démarrer</string>
<string name="category_provider_test">Test des fournisseurs</string>
<string name="test_passed">Réussi</string>
<string name="subscription_deleted">Désabonné de %s</string>
<string name="restart">Redémarrer</string>
<string name="subscription_list_name">Abonné</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Proxy</string>
<string name="pref_category_bypass">Contournements de FAI</string>
<string name="subscription_episode_released">L\'épisode %d est sorti !</string>
<string name="test_failed">Échouer</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
<string name="player_speed_text_format" formatted="true">रफ्तार (%.2fx)</string>
<string name="new_update_format" formatted="true">नया अपडेट आया है!
@ -147,4 +146,4 @@
<string name="next_episode_time_hour_format" formatted="true">%dh %dm</string>
<string name="next_episode_time_min_format" formatted="true">%dm</string>
<string name="result_poster_img_des">विज्ञापन</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="extra_info_format" formatted="true" translatable="false">%d %s | %s</string>
<string name="storage_size_format" formatted="true" translatable="false">%s • %s</string>
@ -120,7 +119,7 @@
<string name="continue_watching">Nastavite s gledanjem</string>
<string name="action_remove_watching">Makni</string>
<string name="action_open_watching">Više informacija</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Za ispravan rad ovog pružatelja usluga može biti potreban VPN</string>
<string name="vpn_torrent">Ovaj pružatelj usluga je torrent, preporučuje se VPN</string>
<string name="provider_info_meta">Stranica ne daje metapodatke, učitavanje videozapisa neće uspjeti ako ne postoji na stranici.</string>
@ -139,16 +138,16 @@
<string name="eigengraumode_settings">Eigengravy način</string>
<string name="eigengraumode_settings_des">Dodaje opciju brzine u playeru</string>
<string name="swipe_to_seek_settings">Prijeđi prstom za traženje</string>
<string name="swipe_to_seek_settings_des">Prijeđite prstom ulijevo ili udesno kako biste kontrolirali player</string>
<string name="swipe_to_seek_settings_des">Prijeđi prstom ulijevo ili udesno za kontrolu vremena u videoplayeru</string>
<string name="swipe_to_change_settings">Klizni za promjenu postavki</string>
<string name="swipe_to_change_settings_des">Kliznite prstom ulijevo ili udesno za promjenu svjetline ili glasnoće</string>
<string name="swipe_to_change_settings_des">Prijeđi prstom ulijevo ili udesno za promjenu svjetline ili glasnoće</string>
<string name="autoplay_next_settings">Automatski započni sljedeću epizodu</string>
<string name="autoplay_next_settings_des">Započne sljedeću epizodu kad trenutna završi</string>
<string name="double_tap_to_seek_settings">Dodirni dvaput za traženje</string>
<string name="double_tap_to_pause_settings">Dodirni dvaput za pauziranje</string>
<string name="double_tap_to_seek_amount_settings">Iznos preskakanja u playeru (Sekunde)</string>
<string name="double_tap_to_seek_amount_settings">Iznos preskakanja u playeru</string>
<string name="double_tap_to_seek_settings_des">Dvaput dodirni desnu ili lijevu stranu ekrana za pomicanje naprijed ili natrag</string>
<string name="double_tap_to_pause_settings_des">Dodirnite dvaput u sredinu zaslona za pauziranje</string>
<string name="double_tap_to_pause_settings_des">Dodirni u sredinu zaslona za pauziranje</string>
<string name="use_system_brightness_settings">Koristi svijetlinu u sustavu</string>
<string name="use_system_brightness_settings_des">Koristi svjetlinu sustava u playeru aplikacija umjesto tamnog preklopa</string>
<string name="episode_sync_settings">Ažuriraj napredak gledanja</string>
@ -174,7 +173,7 @@
<string name="pref_filter_search_quality">Sakrij odabranu kvalitetu videozapisa u rezultatima pretraživanja</string>
<string name="automatic_plugin_updates">Automatsko ažuriranje dodataka</string>
<string name="updates_settings">Prikaži ažuriranja aplikacije</string>
<string name="updates_settings_des">Automatski traži nova ažuriranja nakon pokretanja aplikacije</string>
<string name="updates_settings_des">Automatski traži nova ažuriranja pri pokretanju aplikacije</string>
<string name="uprereleases_settings">Ažuriranje na predizdanja</string>
<string name="uprereleases_settings_des">Tražite ažuriranja prije izdanja umjesto samo potpunih izdanja</string>
<string name="github">Github</string>
@ -239,8 +238,8 @@
<string name="movies_singular">Film</string>
<string name="tv_series_singular">Serija</string>
<string name="cartoons_singular">Crtić</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">Dokumentarac</string>
<string name="asian_drama_singular">Azijska drama</string>
@ -300,7 +299,7 @@
<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">Općenito</string>
<string name="random_button_settings">Random gumb</string>
<string name="random_button_settings_desc">Prikazuje gumb na početnoj stranici koji može odabrati nasumični film ili TV seriju s početne stranice</string>
<string name="random_button_settings_desc">Prikaži random gumb na početnoj stranici</string>
<string name="provider_lang_settings">Jezici pružatelja usluga</string>
<string name="app_layout">Izgled aplikacije</string>
<string name="preferred_media_settings">Preferirani mediji</string>
@ -553,6 +552,5 @@
<string name="pref_category_bypass">ISP zaobilaznice</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Proxy</string>
<string name="jsdelivr_enabled">Neuspješno dohvaćanje GitHuba, omogućavanje jsdelivr proxyja.</string>
<string name="jsdelivr_proxy_summary">Koristeći jsdelivr, GitHub blokiranje se može zaobići. Može odgoditi ažuriranja za nekoliko dana.</string>
<string name="watch_quality_pref_data">Preferirana kvaliteta gledanja (podatkovna mobilna mreža)</string>
</resources>
<string name="jsdelivr_proxy_summary">Zaobilazi blokiranje GitHuba pomoću jsdelivr, može uzrokovati odgode ažuriranja za nekoliko dana.</string>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="cast_format" formatted="true">Stáblista: %s</string>
<string name="next_episode_time_day_format" formatted="true">%dn %dó%dp</string>
@ -57,7 +57,7 @@
<string name="result_open_in_browser">Megnyitás böngészőben</string>
<string name="skip_loading">Betöltés kihagyása</string>
<string name="result_poster_img_des">Poster</string>
<string name="search_poster_img_des">@string/result_poster_img_des</string>
<string name="search_poster_img_des">\@string/result_poster_img_des</string>
<string name="type_watching">Nézés</string>
<string name="type_completed">Befejezve</string>
<string name="type_plan_to_watch">Később megnézés</string>
@ -111,7 +111,7 @@
<string name="subs_import_text" formatted="true">Betűtípusok importálása %s</string>
<string name="action_remove_watching">Eltávolítás</string>
<string name="action_open_watching">Több információ</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">VPN szükséges lehet ehhez a szolgáltató megfelelő működéséhez</string>
<string name="vpn_torrent">Ez a szolgáltató torrent, VPN ajánlott</string>
<string name="torrent_plot">Leírás</string>
@ -172,11 +172,11 @@
<string name="ova">OVA</string>
<string name="others">Egyebek</string>
<string name="tv_series_singular">Sorozat</string>
<string name="anime_singular">@string/anime</string>
<string name="anime_singular">\@string/anime</string>
<string name="source_error">Forráshiba</string>
<string name="nsfw">NSFW</string>
<string name="cartoons_singular">Rajzfilm</string>
<string name="ova_singular">@string/ova</string>
<string name="ova_singular">\@string/ova</string>
<string name="live_singular">Élőadás</string>
<string name="nsfw_singular">NSFW</string>
<string name="other_singular">Videó</string>
@ -275,4 +275,4 @@
<string name="show_hd">Minőségi jelzés</string>
<string name="show_dub">Szinkroncímke</string>
<string name="show_sub">Alcímke</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
<string name="cast_format" formatted="true">Pemeran: %s</string>
@ -102,7 +101,7 @@
<string name="continue_watching">Lanjutkan Menonton</string>
<string name="action_remove_watching">Hapus</string>
<string name="action_open_watching">Info lebih lanjut</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Sebuah VPN mungkin diperlukan agar provider ini bisa bekerja dengan benar</string>
<string name="vpn_torrent">Provider ini adalah sebuah torrent, VPN direkomendasikan</string>
<string name="provider_info_meta">Metadata tidak disediakan oleh situs, loading video akan gagal jika tidak ada di situs.</string>
@ -121,14 +120,14 @@
<string name="eigengraumode_settings">Mode Eigengravy</string>
<string name="eigengraumode_settings_des">Menambahkan opsi kecepatan di pemutar</string>
<string name="swipe_to_seek_settings">Geser untuk mengubah waktu</string>
<string name="swipe_to_seek_settings_des">Geser dari sisi ke sisi untuk mengontrol posisi dalam video</string>
<string name="swipe_to_seek_settings_des">Geser ke kiri atau kanan untuk mengontrol waktu di pemutar video</string>
<string name="swipe_to_change_settings">Geser untuk mengubah pengaturan</string>
<string name="swipe_to_change_settings_des">Geser ke atas atau ke bawah di sisi kiri atau kanan untuk mengubah kecerahan atau volume</string>
<string name="swipe_to_change_settings_des">Geser ke sisi kiri atau kanan untuk mengubah pencerahan atau volume</string>
<string name="double_tap_to_seek_settings">Tekan dua kali untuk mengubah waktu</string>
<string name="double_tap_to_pause_settings">Tekan dua kali untuk menjeda</string>
<string name="double_tap_to_seek_amount_settings">Jumlah pengubah waktu pemutar (Detik)</string>
<string name="double_tap_to_seek_amount_settings">Jumlah pengubah waktu pemutar</string>
<string name="double_tap_to_seek_settings_des">Tekan dua kali di sisi kanan atau kiri untuk mengubah waktu ke depan atau ke belakang</string>
<string name="double_tap_to_pause_settings_des">Tekan dua kali di tengah untuk menjeda</string>
<string name="double_tap_to_pause_settings_des">Tekan di tengah untuk menjeda</string>
<string name="use_system_brightness_settings">Gunakan pencerahan sistem</string>
<string name="use_system_brightness_settings_des">Gunakan pencerahan sistem di pemutar aplikasi dari pada hamparan gelap</string>
<string name="episode_sync_settings">Update progres tontonan</string>
@ -150,7 +149,7 @@
<string name="bug_report_settings_on">Tidak mengirim data</string>
<string name="show_fillers_settings">Tampilkan episode filler untuk anime</string>
<string name="updates_settings">Tampilkan update aplikasi</string>
<string name="updates_settings_des">Secara otomatis mencari update terbaru setelah aplikasi dibuka.</string>
<string name="updates_settings_des">Secara otomatis mencari update terbaru saat aplikasi dibuka</string>
<string name="uprereleases_settings">Update ke prarilis</string>
<string name="uprereleases_settings_des">Hanya mencari update prarilis daripada rilis penuh</string>
<string name="github">Github</string>
@ -210,8 +209,8 @@
<string name="movies_singular">Movie</string>
<string name="tv_series_singular">Seri</string>
<string name="cartoons_singular">Kartun</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">Film Dokumenter</string>
<string name="asian_drama_singular">Drama Asia</string>
@ -244,7 +243,7 @@
<string name="dont_show_again">Jangan tunjukkan lagi</string>
<string name="skip_update">Skip Update ini</string>
<string name="update">Update</string>
<string name="watch_quality_pref">Kualitas tontonan yang lebih diinginkan (WIFI)</string>
<string name="watch_quality_pref">Kualitas tontonan yang lebih diinginkan</string>
<string name="limit_title">Karakter maksimal judul pemutar video</string>
<string name="limit_title_rez">Resolusi pemutar video</string>
<string name="video_buffer_size_settings">Ukuran buffer video</string>
@ -265,7 +264,7 @@
<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">Umum</string>
<string name="random_button_settings">Tombol Acak</string>
<string name="random_button_settings_desc">Tampilkan tombol di halaman utama yang dapat memilih seri film atau TV acak dari halaman utama</string>
<string name="random_button_settings_desc">Tampilkan tombol acak di Beranda</string>
<string name="provider_lang_settings">Bahasa provider</string>
<string name="app_layout">Tata Letak Aplikasi</string>
<string name="preferred_media_settings">Media yang lebih diinginkan</string>
@ -549,8 +548,7 @@
<string name="subscription_episode_released">Episode %d telah rilis!</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Proksi</string>
<string name="jsdelivr_enabled">Gagal mencapai GitHub, mengaktifkan proksi jsdelivr.</string>
<string name="jsdelivr_proxy_summary">Mengunakan jsdelivers, bisa melewati pemblokiran GitHub. Mungkin dapat menyebabkan pembaruan tertunda dalam beberapa hari.</string>
<string name="jsdelivr_proxy_summary">Bypass pemblokiran Github menggunakan JSDeliVR, dapat menyebabkan pembaruan tertunda beberapa hari.</string>
<string name="pref_category_bypass">Bypass ISP</string>
<string name="revert">Pulihkan</string>
<string name="watch_quality_pref_data">Nonton dengan kualitas yang di inginkan (Data Seluler)</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
<string name="cast_format" formatted="true">Cast: %s</string>
@ -109,7 +108,7 @@
<string name="continue_watching">Continua a guardare</string>
<string name="action_remove_watching">Rimuovi</string>
<string name="action_open_watching">Più info</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Potrebbe essere necessaria una VPN per far funzionare correttamente questo provider</string>
<string name="vpn_torrent">Questo provider è un torrent, si raccomanda una VPN</string>
<string name="provider_info_meta">I metadati non sono forniti dal sito, il caricamento del video fallirà se non esiste sul sito.</string>
@ -266,7 +265,7 @@
<string name="dont_show_again">Non mostrare di nuovo</string>
<string name="skip_update">Salta questo aggiornamento</string>
<string name="update">Aggiorna</string>
<string name="watch_quality_pref">Qualità di visualizzazione preferita (WiFi)</string>
<string name="watch_quality_pref">Risoluzione preferita</string>
<string name="limit_title">Limita i caratteri del titolo nel player</string>
<string name="limit_title_rez">Risoluzione video player</string>
<string name="video_buffer_size_settings">Dimensione cache video</string>
@ -551,5 +550,4 @@
<string name="revert">Ripristina</string>
<string name="subscription_in_progress_notification">Aggiornando shows a cui sei iscritto</string>
<string name="subscription_episode_released">L\'episodio %d è stato rilasciato!</string>
<string name="watch_quality_pref_data">Qualità di visualizzazione preferita (Dati mobili)</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="preview_background_img_des">הרקע של ההצגה לפני</string>
<string name="cast_format" formatted="true">צוות שחקנים: %s</string>
@ -116,7 +116,7 @@
<string name="chromecast_subtitles_settings">כתוביות כרומקאסט</string>
<string name="picture_in_picture_des">ממשיך ניגון בנגן מינימלי מעל ישומים אחרים</string>
<string name="player_subtitles_settings">כתוביות</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="history">היסטוריה</string>
<string name="apk_installer_legacy">מורשת</string>
<string name="no">לא</string>
@ -164,8 +164,8 @@
<string name="used_storage">משומש</string>
<string name="tv_series">סדרת טלוויזיה</string>
<string name="cartoons">סדרות/סרטים מצוירים</string>
<string name="anime_singular">@string/anime</string>
<string name="ova_singular">@string/ova</string>
<string name="anime_singular">\@string/אנימה</string>
<string name="ova_singular">\@string/אנימציית וידאו מקורית</string>
<string name="asian_drama_singular">דרמה אסייתית</string>
<string name="episode_action_chromecast_episode">כרומקאסט את הפרק</string>
<string name="episode_action_chromecast_mirror">כרומקאסט את המראה</string>
@ -506,4 +506,4 @@
<string name="sort_alphabetical_z">אלפביתי (ת\' עד א\')</string>
<string name="open_with">פתח עם</string>
<string name="empty_library_logged_in_message">נראה שהרשימה הזו ריקה, נסו לעבור לרשימה אחרת</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="next_episode_time_min_format" formatted="true">%d分</string>
<string name="title_downloads">ダウンロード</string>
@ -182,4 +182,4 @@
<string name="check_for_update">アップデートを確認</string>
<string name="show_title">作品名</string>
<string name="update_notification_installing">アプリのアップデートをインストール中…</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_dub_sub_episode_text_format" formatted="true">%sಎಪಿ%d</string>
<string name="cast_format" formatted="true">ಕ್ಯಾಸ್ಟ್:%s</string>
@ -125,4 +125,4 @@
<string name="download_started">ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭವಾಗಿದೆ</string>
<string name="download_canceled">ಡೌನ್‌ಲೋಡ್ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ</string>
<string name="home_next_random_img_des">ಮುಂದಿನ ರಾಂಡಮ್</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
<string name="player_speed_text_format" formatted="true">Брзина (%.2fx)</string>
<string name="rated_format" formatted="true">Оценето: %.1f</string>
@ -214,4 +213,4 @@
<string name="subtitles_shadow">Сенка</string>
<string name="subtitles_raised">Подигнат</string>
<string name="history">Историја</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
<string name="player_speed_text_format" formatted="true">വേഗം (%.2fx)</string>
<string name="rated_format" formatted="true">റേറ്റിംഗ്: %.1f</string>
@ -170,4 +169,4 @@
<string name="watch_quality_pref">ഔചിത്യ വീഡിയോ ക്വാളിറ്റി</string>
<string name="history">ചരിത്രം</string>
<string name="action_mark_as_watched">കണ്ടതാണെന്ന് അടയാളപ്പെടുത്തുക</string>
</resources>
</resources>

View file

@ -1,2 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources/>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
<string name="cast_format" formatted="true">Cast: %s</string>
@ -10,7 +9,7 @@
<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">Poster</string>
<string name="search_poster_img_des">\@string/result_poster_img_des</string>
<string name="episode_poster_img_des">Aflevering Poster</string>
<string name="home_main_poster_img_des">Hoofdposter</string>
<string name="home_next_random_img_des">Volgende willekeurig</string>
@ -110,7 +109,7 @@
<string name="continue_watching">Doorgaan met kijken</string>
<string name="action_remove_watching">Verwijder</string>
<string name="action_open_watching">Meer Info</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Een VPN kan nodig zijn om deze provider correct te laten werken</string>
<string name="vpn_torrent">Deze provider is een torrent, een VPN wordt aanbevolen</string>
<string name="provider_info_meta">Metadata wordt niet geleverd door de site, het laden van video\'s zal mislukken als deze niet op de site bestaat.</string>
@ -129,14 +128,14 @@
<string name="eigengraumode_settings">Eigengravy Modus</string>
<string name="eigengraumode_settings_des">Voegt een snelheidsoptie toe in de speler</string>
<string name="swipe_to_seek_settings">Swipe to seek</string>
<string name="swipe_to_seek_settings_des">Veeg naar links of rechts om de tijd in de videospeler te regelen</string>
<string name="swipe_to_seek_settings_des">Veeg naar links of rechts om de tijd in de videoplayer te regelen</string>
<string name="swipe_to_change_settings">Veeg om instellingen te wijzigen</string>
<string name="swipe_to_change_settings_des">Veeg naar links of rechts om de helderheid of het volume te wijzigen</string>
<string name="double_tap_to_seek_settings">Dubbeltik om te zien</string>
<string name="double_tap_to_pause_settings">Dubbeltik om te pauzeren</string>
<string name="double_tap_to_seek_amount_settings">Videospeler aantal zoeken</string>
<string name="double_tap_to_seek_amount_settings">Speler zoeken bedrag</string>
<string name="double_tap_to_seek_settings_des">Tik twee keer aan de rechter- of linkerkant om vooruit of achteruit te zoeken</string>
<string name="double_tap_to_pause_settings_des">Tik twee keer in het midden om te pauzeren</string>
<string name="double_tap_to_pause_settings_des">Tik in het midden om te pauzeren</string>
<string name="use_system_brightness_settings">Systeemhelderheid gebruiken</string>
<string name="use_system_brightness_settings_des">Gebruik systeemhelderheid in de app-speler in plaats van een donkere overlay</string>
<string name="episode_sync_settings">Kijkvoortgang bijwerken</string>
@ -223,8 +222,8 @@
<string name="movies_singular">Film</string>
<string name="tv_series_singular">Serie</string>
<string name="cartoons_singular">Tekenfilm</string>
<string name="anime_singular">@string/anime</string>
<string name="ova_singular">@string/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">Documentaire</string>
<string name="asian_drama_singular">Aziatisch drama</string>
@ -406,7 +405,4 @@
<string name="autoplay_next_settings_des">Start de volgende episode wanneer deze afgelopen is</string>
<string name="autoplay_next_settings">Volgende episode automatisch afspelen</string>
<string name="update_started">De update is gestart</string>
<string name="library">Bibliotheek</string>
<string name="browser">Browser</string>
<string name="test_log">Logboek</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="episode_more_options_des">Fleire val</string>
<string name="title_home">Heim</string>
@ -183,4 +183,4 @@
<string name="duration">Varigheit</string>
<string name="livestreams">Direktesendingar</string>
<string name="pref_category_app_updates">Programoppdateringar</string>
</resources>
</resources>

View file

@ -1,8 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 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">Plakat</string>
<string name="search_poster_img_des">@string/result_poster_img_des</string>
<string name="search_poster_img_des">\@string/result_poster_img_des</string>
<string name="episode_poster_img_des">Episode Plakat</string>
<string name="home_main_poster_img_des">Main Plakat</string>
<string name="home_next_random_img_des">Neste tilfeldig</string>
@ -412,7 +412,7 @@
<string name="poster_ui_settings">Slå av/på grensesnittselementer på plakat</string>
<string name="skip_update">Hopp over denne oppdateringen</string>
<string name="video_ram_description">Forårsaker tilfeldige krasj hvis satt for høyt. Ikke endre dette hvis du ikke har lite minne.</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="backup_settings">Sikkerhetskopier data</string>
<string name="backup_success">Data lagret</string>
<string name="authenticated_user_fail" formatted="true">Kunne ikke logge inn på %s</string>
@ -422,11 +422,11 @@
<string name="nsfw">Sensurerbart</string>
<string name="quality_webrip">Vev</string>
<string name="network_adress_example">Lenke til strøm</string>
<string name="anime_singular">@string/anime</string>
<string name="anime_singular">\@string/anime</string>
<string name="pref_filter_search_quality">Skjul valgt videokvalitet i søkeresultater</string>
<string name="restore_success">Lastet inn sikkerhetkopifil</string>
<string name="category_updates">Oppdateringer og sikkerhetskopi</string>
<string name="ova_singular">@string/ova</string>
<string name="ova_singular">\@string/ova</string>
<string name="confirm_exit_dialog">Avslutt\?</string>
<string name="nsfw_singular">Sensurerbart</string>
<string name="batch_download_nothing_to_download_format" formatted="true">Alle %s er allerede nedlastet</string>
@ -492,4 +492,4 @@
<string name="update_started">Oppdatering startet</string>
<string name="plugin_downloaded">Programtillegg nedlastet</string>
<string name="delayed_update_notice">Programmet vil oppgraderes når du avslutter det</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<string name="player_speed_text_format" formatted="true">Prędkość (%.2fx)</string>
<string name="rated_format" formatted="true">Ocena: %.1f</string>
<string name="new_update_format" formatted="true">Znaleziono nową aktualizację!
@ -255,7 +254,7 @@
<string name="dont_show_again">Nie pokazuj ponownie</string>
<string name="skip_update">Pomiń tę aktualizację</string>
<string name="update">Aktualizacja</string>
<string name="watch_quality_pref">Domyślna jakość (WiFi)</string>
<string name="watch_quality_pref">Domyślna jakość</string>
<string name="limit_title">Maksymalna ilość znaków w tytule odtwarzacza</string>
<string name="limit_title_rez">Rozdzielczość odtwarzacza wideo</string>
<string name="video_buffer_size_settings">Rozmiar bufora wideo</string>
@ -456,7 +455,7 @@
<string name="apk_installer_settings">Instalator APK</string>
<string name="apk_installer_settings_des">Niektóre telefony nie obsługują nowego instalatora pakietów. Wypróbuj tryb legacy, jeśli aktualizacje nie zostaną zainstalowane.</string>
<string name="example_password">password123</string>
<string name="ova_singular">@string/ova</string>
<string name="ova_singular">\@string/ova</string>
<string name="example_site_name">MojaFajnaWitryna</string>
<string name="example_username">MyCoolUsername</string>
<string name="example_ip">127.0.0.1</string>
@ -464,9 +463,9 @@
<string name="example_site_url">przyklad.pl</string>
<string name="sync_total_episodes_none">/\?\?</string>
<string name="apk_installer_package_installer">Instalator pakietów</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="example_email">hello@world.com</string>
<string name="anime_singular">@string/anime</string>
<string name="anime_singular">\@string/anime</string>
<string name="skip_type_op">Opening</string>
<string name="skip_type_ed">Ending</string>
<string name="skip_type_mixed_op">Mixed opening</string>
@ -532,5 +531,4 @@
<string name="subscription_episode_released">Został wydany odcinek %d!</string>
<string name="jsdelivr_proxy_summary">Obchodzi blokadę GitHuba za pomocą jsdelivr, może spowodować opóźnienie aktualizacji o kilka dni.</string>
<string name="jsdelivr_enabled">Nie udało się połączyć z GitHub, włączono serwer pośredniczący jsdelivr.</string>
<string name="watch_quality_pref_data">Domyślna jakość (dane mobilne)</string>
</resources>
</resources>

View file

@ -1,65 +1,65 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
<string name="next_episode_time_hour_format" formatted="true">%dh %dm</string>
<string name="next_episode_time_min_format" formatted="true">%dm</string>
<string name="next_episode_format" formatted="true">O episódio %d será lançado em</string>
<string name="next_episode_format" formatted="true">Episódio %d será lançado em</string>
<string name="result_poster_img_des">Poster</string>
<string name="episode_poster_img_des">Pôster do episódio</string>
<string name="episode_poster_img_des">Capa do Episódio</string>
<string name="search_poster_img_des">Poster</string>
<string name="home_main_poster_img_des">Pôster Principal</string>
<string name="home_main_poster_img_des">Capa Principal</string>
<string name="home_next_random_img_des">Próximo Aleatório</string>
<string name="go_back_img_des">Voltar</string>
<string name="home_change_provider_img_des">Alterar Provedor</string>
<string name="next_episode_time_day_format" formatted="true">%dd %dh %dm</string>
<string name="home_change_provider_img_des">Trocar Provedor</string>
<string name="next_episode_time_day_format" formatted="true">%d dia(s), %d hora(s) e %d mese(s)</string>
<string name="home_source">Fonte</string>
<string name="resolution">Resolução</string>
<string name="extras">Extras</string>
<string name="preview_background_img_des">Visualizar plano de fundo</string>
<string name="preview_background_img_des">Preview Background</string>
<string name="player_speed_text_format" formatted="true">Velocidade (%.2fx)</string>
<string name="rated_format" formatted="true">Classificado: %.1f</string>
<string name="new_update_format" formatted="true">Nova atualização encontrada!
\n%s -&gt; %s</string>
<string name="filler" formatted="true">Preenchimento</string>
<string name="filler" formatted="true">Enchimento</string>
<string name="app_name">CloudStream</string>
<string name="play_with_app_name">Assistir com o CloudStream</string>
<string name="play_with_app_name">Reproduzir com CloudStream</string>
<string name="title_home">Início</string>
<string name="title_search">Pesquisar</string>
<string name="title_downloads">Downloads</string>
<string name="title_settings">Configurações</string>
<string name="title_search">Pesquisa</string>
<string name="title_downloads">Transferências</string>
<string name="title_settings">Opções</string>
<string name="search_hint">Procurar…</string>
<string name="search_hint_site" formatted="true">Pesquisar %s…</string>
<string name="no_data">Sem dados</string>
<string name="episode_more_options_des">Mais opções</string>
<string name="search_hint_site" formatted="true">Procurar em %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_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="result_tags">Géneros</string>
<string name="result_share">Partilhar</string>
<string name="result_open_in_browser">Abrir no Navegador</string>
<string name="skip_loading">Saltar Carga</string>
<string name="loading">Carregando…</string>
<string name="type_watching">Assistindo</string>
<string name="type_on_hold">Em espera</string>
<string name="type_on_hold">Em Espera</string>
<string name="type_completed">Concluído</string>
<string name="type_dropped">Desistido</string>
<string name="type_plan_to_watch">Pretendo assistir</string>
<string name="type_none">Nenhum</string>
<string name="type_re_watching">Reassistindo</string>
<string name="play_movie_button">Reproduzir filme</string>
<string name="play_livestream_button">Reproduzir transmissão ao vivo</string>
<string name="type_dropped">Abandonado</string>
<string name="type_plan_to_watch">Planeio Assistir</string>
<string name="type_none">Nenhuma</string>
<string name="type_re_watching">Assistindo de Novo</string>
<string name="play_movie_button">Reproduzir Filme</string>
<string name="play_livestream_button">Reproduzir Livestream</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 conexão novamente</string>
<string name="go_back">Voltar</string>
<string name="play_episode">Reproduzir episódio</string>
<string name="download">Download</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">Falha no Download</string>
<string name="download_canceled">Download cancelado</string>
<string name="download_done">Download concluído</string>
<string name="reload_error">Voltar a tentar ligação</string>
<string name="go_back">Voltar Atrás</string>
<string name="play_episode">Reproduzir Episódio</string>
<string name="download">Transferir</string>
<string name="downloaded">Transferido</string>
<string name="downloading">A Transferir</string>
<string name="download_paused">Transferência em Pausa</string>
<string name="download_started">Transferência Iniciada</string>
<string name="download_failed">Transferência Falhou</string>
<string name="download_canceled">Transferência Cancelada</string>
<string name="download_done">Transferência Completa</string>
<string name="stream">Stream</string>
<string name="error_loading_links_toast">Erro a Carregar Links</string>
<string name="download_storage_text">Armazenamento Interno</string>
@ -123,16 +123,16 @@
<string name="eigengraumode_settings">Modo Eigengravy</string>
<string name="eigengraumode_settings_des">Acrescenta uma opção de velocidade no player</string>
<string name="swipe_to_seek_settings">Deslize para andar</string>
<string name="swipe_to_seek_settings_des">Deslize para os lados para controlar a posição em um 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 cima ou para baixo, no lado esquerdo ou direito, para ajustar brilho ou volume</string>
<string name="swipe_to_change_settings_des">Deslize do lado esq. ou dir. para ajustar brilho ou volume</string>
<string name="autoplay_next_settings">Reproduzir automaticamente próximo episódio</string>
<string name="autoplay_next_settings_des">Começa o próximo episódio quando o atual termina</string>
<string name="double_tap_to_seek_settings">Toque duplo para avançar</string>
<string name="double_tap_to_pause_settings">Toque duplo para pôr em pausa</string>
<string name="double_tap_to_seek_amount_settings">Tempo de busca no player (Segundos)</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 esq. ou dir. para andar para trás ou para a frente</string>
<string name="double_tap_to_pause_settings_des">Toque duas vezes no meio para pausar</string>
<string name="double_tap_to_pause_settings_des">Toque no meio para pôr em pausa</string>
<string name="use_system_brightness_settings">Usar brilho da sistema</string>
<string name="use_system_brightness_settings_des">Usar brilho do sistema no player em vez de uma sobreposição escura</string>
<string name="episode_sync_settings">Atualizar progresso</string>
@ -142,7 +142,7 @@
<string name="restore_success">Arquivo de backup carregado</string>
<string name="restore_failed_format" formatted="true">Falha ao restaurar dados do ficheiro %s</string>
<string name="backup_success">Dados guardados com sucesso</string>
<string name="backup_failed">Permissão de armazenamento não encontrada, por favor tente novamente.</string>
<string name="backup_failed">Permissões de armazenamento em falta, por favor tente de novo</string>
<string name="backup_failed_error_format">Erro no backup de %s</string>
<string name="search">Procurar</string>
<string name="category_account">Contas</string>
@ -158,7 +158,7 @@
<string name="pref_filter_search_quality">Esconder qualidades de vídeo selecionadas nos resultados da Pesquisa</string>
<string name="automatic_plugin_updates">Atualizações de plugin automáticas</string>
<string name="updates_settings">Mostrar atualizações da app</string>
<string name="updates_settings_des">Procurar automaticamente por novas atualizações depois de iniciar o app.</string>
<string name="updates_settings_des">Procurar novas atualizações automaticamente ao iniciar</string>
<string name="uprereleases_settings">Atualizar para pré-lançamentos</string>
<string name="uprereleases_settings_des">Procura atualizações de pré-lançamento em vez de só lançamentos oficiais</string>
<string name="github">Github</string>
@ -250,15 +250,15 @@
<string name="dont_show_again">Não mostrar de novo</string>
<string name="skip_update">Saltar esta Atualização</string>
<string name="update">Atualizar</string>
<string name="watch_quality_pref">Qualidade Preferida (WiFi)</string>
<string name="limit_title">Máximo de caracteres do título no player de video</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 em dispositivos com pouca memória se definido muito alto , como uma Android TV.</string>
<string name="video_disk_description">Pode causar problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como uma Android TV.</string>
<string name="video_ram_description">Causará travamentos aleatórios se definido muito alto. Não mude se tiver pouca memória RAM, como um Android TV ou um telefone antigo</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 contornar bloqueios do fornecedor de internet</string>
<string name="add_site_pref">Clonar site</string>
@ -273,7 +273,7 @@
<string name="legal_notice">Aviso Legal</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, que pode escolher aleatoriamente um filme ou série</string>
<string name="random_button_settings_desc">Mostra o botão Aleatório na página inicial</string>
<string name="provider_lang_settings">Idioma dos fornecedores</string>
<string name="app_layout">Layout da App</string>
<string name="preferred_media_settings">Mídia preferida</string>
@ -363,7 +363,7 @@
<string name="plugin_loaded">Plugin Carregado</string>
<string name="plugin_deleted">Plugin Apagado</string>
<string name="plugin_load_fail" formatted="true">Falha ao carregar %s</string>
<string name="batch_download_start_format" formatted="true">Download iniciado %d %s…</string>
<string name="batch_download_start_format" formatted="true">Iniciada a transferência %d %s</string>
<string name="batch_download_finish_format" formatted="true">Transferido %d %s com sucesso</string>
<string name="batch_download_nothing_to_download_format" formatted="true">Tudo %s já transferido</string>
<string name="batch_download">Transferência em batch</string>
@ -375,22 +375,18 @@
<string name="plugins_downloaded" formatted="true">Transferido: %d</string>
<string name="plugins_disabled" formatted="true">Desativado: %d</string>
<string name="plugins_not_downloaded" formatted="true">Não transferido: %d</string>
<string name="blank_repo_message">O CloudStream não possui sites instalados por padrão. Você precisa instalar os sites a partir de repositórios.
\n
\nDevido a uma restrição sem sentido de direitos autorais (DMCA) pela Sky UK Limited 🤮 não podemos vincular o site do repositório no aplicativo.
\n
\nJunte-se ao nosso Discord ou pesquise online.</string>
<string name="blank_repo_message">Adicionar um repositório para instalar extensões de sites</string>
<string name="view_public_repositories_button">Ver repositórios da comunidade</string>
<string name="view_public_repositories_button_short">Lista pública</string>
<string name="uppercase_all_subtitles">Todas as legendas em maiúsculas</string>
<string name="download_all_plugins_from_repo">Transferir todos os plugins deste repositório\?</string>
<string name="single_plugin_disabled" formatted="true">%s (Desativado)</string>
<string name="apk_installer_settings">Instalador APK</string>
<string name="duration_format" formatted="true">%d min</string>
<string name="play_trailer_button">Assistir Trailer</string>
<string name="duration_format" formatted="true">%d minuto(s)</string>
<string name="play_trailer_button">Reproduzir trailer</string>
<string name="action_add_to_bookmarks">Marcar como visto/não visto</string>
<string name="action_open_play">Reproduzir</string>
<string name="automatic_plugin_download_summary">Instalar automaticamente todos os plugins ainda não instalados dos repositórios adicionados.</string>
<string name="automatic_plugin_download_summary">Instalar automaticamente todas as extensões dos repositórios cadastrados.</string>
<string name="automatic_plugin_download">Baixar extensões automaticamente</string>
<string name="redo_setup_process">Refazer o processo de configuração</string>
<string name="go_back_30">-30</string>
@ -398,9 +394,9 @@
<string name="go_forward_30">+30</string>
<string name="season_format">%s %d%s</string>
<string name="cast_format" formatted="true">Elenco: %s</string>
<string name="update_started">Atualização iniciada</string>
<string name="update_started">Atualização em andamento</string>
<string name="test_log">Log</string>
<string name="apk_installer_settings_des">Alguns aparelhos não suportam o novo instalador de pacotes. Use a opção legado caso não esteja conseguindo atualizar.</string>
<string name="apk_installer_settings_des">Alguns aparelhos não possuem suporte para o novo instalador de pacotes. Use a opção legado caso não esteja conseguindo atualizar.</string>
<string name="episodes_range">%d-%d</string>
<string name="episode_format" formatted="true">%d %s</string>
<string name="start">Iniciar</string>
@ -412,121 +408,4 @@
<string name="ova_singular">Ova</string>
<string name="anime_singular">Anime</string>
<string name="android_tv_interface_on_seek_settings">Player visível - Procurar valor</string>
<string name="update_notification_installing">Instalando atualização do app…</string>
<string name="confirm_exit_dialog">Você tem certeza que deseja sair\?</string>
<string name="extension_version">Versão</string>
<string name="skip_type_ed">Encerramento</string>
<string name="clear_history">Limpar histórico</string>
<string name="skip_type_op">Abertura</string>
<string name="no">Não</string>
<string name="sort_by">Ordenar por</string>
<string name="yes">Sim</string>
<string name="update_notification_downloading">Baixando atualização do app…</string>
<string name="subscription_episode_released">Episódio %d lançado!</string>
<string name="skip_type_creddits">Créditos</string>
<string name="extension_description">Descrição</string>
<string name="extension_size">Tamanho</string>
<string name="stop">Parar</string>
<string name="safe_mode_title">Modo seguro ligado</string>
<string name="history">Histórico</string>
<string name="sort">Ordenar</string>
<string name="player_settings_play_in_app">Player interno</string>
<string name="extension_authors">Autores</string>
<string name="extension_types">Suportado</string>
<string name="extension_language">Idioma</string>
<string name="extension_install_first">Instalar a extensão primeiro</string>
<string name="hls_playlist">Playlist HLS</string>
<string name="player_pref">Player de vídeo preferido</string>
<string name="extension_status">Estado</string>
<string name="pref_category_gestures">Gestos</string>
<string name="tracks">Faixas</string>
<string name="quality_workprint">WP</string>
<string name="quality_cam">Cam</string>
<string name="skip_type_intro">Abertura</string>
<string name="select_library">Selecionar Biblioteca</string>
<string name="jsdelivr_proxy_summary">Usando jsdelivr o bloqueio do GitHub pode ser contornado. Pode atrasar atualizações em alguns dias.</string>
<string name="player_settings_play_in_vlc">VLC</string>
<string name="all_languages_preference">Todas as linguagens</string>
<string name="sort_updated_new">Atualizado (Novo para Antigo)</string>
<string name="subscription_list_name">Inscrito</string>
<string name="quality_hdr">HDR</string>
<string name="restart">Reiniciar</string>
<string name="player_settings_play_in_browser">Navegador Web</string>
<string name="sort_updated_old">Atualizado (Antigo para Novo)</string>
<string name="player_settings_play_in_web">Web Video Cast</string>
<string name="quality_dvd">DVD</string>
<string name="apk_installer_package_installer">Instalador de pacotes</string>
<string name="player_settings_play_in_mpv">MPV</string>
<string name="action_remove_from_watched">Remover dos assistidos</string>
<string name="update_notification_failed">Não foi possível instalar a nova versão do aplicativo</string>
<string name="subscription_deleted">Inscrição cancelada em %s</string>
<string name="skip_type_mixed_ed">Final misto</string>
<string name="sort_rating_desc">Avaliações (Decrescente)</string>
<string name="apply_on_restart">Aplicar ao reiniciar</string>
<string name="referer">Referente</string>
<string name="android_tv_interface_off_seek_settings">Player oculto - Quantidade de Busca</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Proxy</string>
<string name="quality_blueray">Blu-ray</string>
<string name="pref_category_looks">Aparência</string>
<string name="subtitle_offset_hint">1000 ms</string>
<string name="quality_sdr">SDR</string>
<string name="is_adult">18+</string>
<string name="open_with">Abrir com</string>
<string name="category_provider_test">Teste de provedor</string>
<string name="quality_uhd">UHD</string>
<string name="safe_mode_crash_info">Ver informações sobre falha</string>
<string name="app_not_found_error">Aplicativo não encontrado</string>
<string name="revert">Reverter</string>
<string name="network_adress_example">Link para transmitir</string>
<string name="plugin_downloaded">Plugins baixados</string>
<string name="plugins_updated" formatted="true">%d plugins atualizados</string>
<string name="skip_type_format" formatted="true">Pular %s</string>
<string name="skip_type_mixed_op">Abertura mista</string>
<string name="sort_alphabetical_z">Alfabético (Z a A)</string>
<string name="empty_library_logged_in_message">Parece que esta lista está vazia, tente trocar para outra</string>
<string name="subscription_new">Inscrito em %s</string>
<string name="quality_4k">4K</string>
<string name="video_tracks">Faixas de vídeo</string>
<string name="delayed_update_notice">O aplicativo será atualizado ao sair</string>
<string name="subscription_in_progress_notification">Atualizando shows inscritos</string>
<string name="sort_alphabetical_a">Alfabético (A a Z)</string>
<string name="sort_rating_asc">Avaliações (Crescente)</string>
<string name="empty_library_no_accounts_message">Parece que a sua biblioteca está vazia :(
\nFaça login em uma conta de biblioteca ou adicione shows à sua biblioteca local</string>
<string name="safe_mode_file">Arquivo de modo de segurança encontrado!
\nNenhuma extensão será carregada na inicialização do app até que o arquivo seja removido.</string>
<string name="pref_category_bypass">Contorno do provedor de serviço de internet (ISP)</string>
<string name="pref_category_links">Links</string>
<string name="pref_category_player_features">Recursos do Player</string>
<string name="pref_category_ui_features">Recursos</string>
<string name="pref_category_app_updates">Atualizações de aplicativos</string>
<string name="watch_quality_pref_data">Qualidade Preferida (Dados Móveis)</string>
<string name="android_tv_interface_on_seek_settings_summary">Quantidade de busca (em segundos) usada quando o player de video está visível</string>
<string name="android_tv_interface_off_seek_settings_summary">Quantidade de busca (em segundos) usada quando o player de video está oculto</string>
<string name="jsdelivr_enabled">Falha ao conectar com GitHub, ativando proxy jsdelivr.</string>
<string name="pref_category_cache">Cache</string>
<string name="pref_category_android_tv">Android TV</string>
<string name="pref_category_subtitles">Legendas</string>
<string name="login_format" formatted="true">%s %s</string>
<string name="quality_ts">TS</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_tc">TC</string>
<string name="quality_webrip">Web</string>
<string name="extension_rating" formatted="true">Nota: %s</string>
<string name="apk_installer_legacy">Legado</string>
<string name="safe_mode_description">Todas as extensões foram desativadas devido a uma falha para ajudá-lo a encontrar a que está causando o problema.</string>
<string name="skip_type_recap">Recapitular</string>
<string name="enable_skip_op_from_database_des">Mostrar pop-ups para pular abertura/encerramento</string>
<string name="clipboard_too_large">Muito texto. Não é possível salvar na área de transferência.</string>
<string name="action_mark_as_watched">Marcar como assistido</string>
<string name="pref_category_backup">Backup</string>
<string name="pref_category_extensions">Extensões</string>
<string name="pref_category_actions">Ações</string>
<string name="pref_category_player_layout">Layout</string>
<string name="pref_category_defaults">Configurações padrão</string>
<string name="quality_sd">SD</string>
<string name="audio_tracks">Faixas de áudio</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- For true intellectuals -->
<string name="app_name">aauugghhaauuh</string>
@ -219,33 +219,4 @@
<string name="sort_copy">uuuuhhhoouuooog ooaaahhhh</string>
<string name="sort_close">uuu ugggg</string>
<string name="sort_clear">ooo guggg ooh</string>
<string name="tracks">auuuooohaaaaagh</string>
<string name="library">uuuuuuuh aaaoo o</string>
<string name="category_updates">ooooooouuuua aa aaagh agh</string>
<string name="ova">AAAAUUUOH</string>
<string name="subscription_list_name">aoughoooaaaa</string>
<string name="movies_singular">oooouuuh</string>
<string name="category_player">ahaough aaouuuuh-h</string>
<string name="tv_series_singular">auughooo</string>
<string name="pref_category_player_layout">ooooooa aauoh</string>
<string name="subs_subtitle_languages">aaaaagh oouoo aaaaaaa</string>
<string name="category_account">aaaaaagh uuohuoh</string>
<string name="extensions">aaaaaauo agghhhhhhaoouu</string>
<string name="others">uuuuuuuuh</string>
<string name="test_log">ouaaahh</string>
<string name="subs_import_text" formatted="true">ooough aaoough aooou %s aaaa</string>
<string name="documentaries">ouooooouuuu oooooo</string>
<string name="livestreams">aaaaaaaaaaahhhgh-aooohoooo</string>
<string name="pref_category_extensions">aau aooooghaao</string>
<string name="provider_info_meta">aagh aaaaaaaaaaaa oooh, aaough, ooga oguuu aaaaaaaaaaa ooooooohghh a-a-aaauo</string>
<string name="resume_time_left" formatted="true">%dmmmmmm..
\naaaaooughugh</string>
<string name="asian_drama">aooohuohaaaa ooooagh</string>
<string name="subtitle_offset">oooooogh-aaaaaogh</string>
<string name="trailer">guuuaaaahhhhhhhaaa</string>
<string name="show_log_cat">woooaaahh ahahaaaauu 🦍</string>
<string name="nsfw">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOOOGGAGHAGHAAA</string>
<string name="clear_history">aoaaaaaoooghhh</string>
<string name="sort_save">oooooh uuaagh</string>
<string name="action_open_play">@string/home_play</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
<string name="cast_format" formatted="true">Distribuție: %s</string>
@ -107,7 +106,7 @@
<string name="continue_watching">Continuați să urmăriți</string>
<string name="action_remove_watching">Eliminați</string>
<string name="action_open_watching">Mai multe informații</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Există probabilitatea necesitații unui VPN pentru ca acest furnizor să funcționeze corespunzător</string>
<string name="vpn_torrent">Acest furnizor este un torrent, se recomandă un VPN</string>
<string name="provider_info_meta">Metadatele nu sunt furnizate de către site, există posibilitatea ca încărcarea videoclipului să eșueze.</string>
@ -389,4 +388,4 @@
<string name="test_log">Log</string>
<string name="browser">Browser</string>
<string name="play_with_app_name">Joacă cu CloudStream</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="history">История</string>
<string name="no">Нет</string>
@ -142,10 +142,10 @@
<string name="eigengraumode_settings_des">Добавляет опцию скорости в проигрывателе</string>
<string name="swipe_to_seek_settings">Проведите пальцем для поиска</string>
<string name="swipe_to_change_settings">Проведите пальцем для изменения настроек</string>
<string name="swipe_to_change_settings_des">Проведите вверх или вниз по левой или правой стороне, чтобы изменить яркость или громкость</string>
<string name="swipe_to_change_settings_des">Проведите пальцем по левой или правой стороне для изменения яркости или громкости</string>
<string name="autoplay_next_settings">Автопроиграть следующего серия</string>
<string name="play_torrent_button">Поток торрент</string>
<string name="swipe_to_seek_settings_des">Проведите пальцем из стороны в сторону, чтобы управлять свое место в видеоролике</string>
<string name="swipe_to_seek_settings_des">Проведите пальцем влево или вправо, чтобы управлять временем в видеоплеере</string>
<string name="autoplay_next_settings_des">Начните следующий серию, когда закончится текущий</string>
<string name="restore_success">Загружена резервная копия</string>
<string name="restore_failed_format" formatted="true">Не удалось восстановить данные из %s</string>
@ -159,7 +159,7 @@
<string name="automatic_plugin_updates">Автоматическое обновление плагинов</string>
<string name="automatic_plugin_download">Автоматическая загрузка плагинов</string>
<string name="updates_settings">Показать обновления приложения</string>
<string name="updates_settings_des">Автоматически проверять обновления при старте приложения.</string>
<string name="updates_settings_des">Автоматически проверять обновления при старте</string>
<string name="uprereleases_settings">Обновится до пре-релиза</string>
<string name="apk_installer_settings">APK установщик</string>
<string name="github">Github</string>
@ -227,7 +227,7 @@
<string name="used_storage">Использовано</string>
<string name="double_tap_to_pause_settings">Двойное нажатие для паузы</string>
<string name="double_tap_to_seek_settings_des">Коснитесь дважды правой или левой стороны для поиска вперед или назад</string>
<string name="double_tap_to_pause_settings_des">Нажмите дважды в центре, чтобы сделать паузу</string>
<string name="double_tap_to_pause_settings_des">Нажмите в центре для паузы</string>
<string name="use_system_brightness_settings">Использовать системную яркость</string>
<string name="episode_sync_settings_des">Автоматически синхронизировать текущий прогресс эпизода</string>
<string name="backup_failed_error_format">Ошибка резервного копирования %s</string>
@ -318,7 +318,7 @@
<string name="skip_type_creddits">Титры</string>
<string name="action_mark_as_watched">Отметить как просмотренное</string>
<string name="limit_title_rez">Разрешение видеоплеера</string>
<string name="watch_quality_pref">Предпочтительное качество видео (WiFi)</string>
<string name="watch_quality_pref">Желаемое качество видео</string>
<string name="limit_title">Максимум символов</string>
<string name="video_buffer_length_settings">Длинна буфера</string>
<string name="video_buffer_disk_settings">Кеш видео на диске</string>
@ -363,7 +363,7 @@
<string name="extensions">Расширения</string>
<string name="repository_url_hint">URL репозитория</string>
<string name="plugin_loaded">Плагин загружен</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="double_tap_to_seek_settings">Перемотка двойным нажатием</string>
<string name="sync_total_episodes_none">/\?\?</string>
<string name="sync_total_episodes_some" formatted="true">/%d</string>
@ -408,8 +408,8 @@
<string name="subtitles_example_text">Съешь ещё этих мягких французских булок, да выпей же чаю</string>
<string name="recommended">Рекомендуется</string>
<string name="player_loaded_subtitles" formatted="true">Загружено %s</string>
<string name="anime_singular">Аниме</string>
<string name="ova_singular">OVA</string>
<string name="anime_singular">\@нить/аниме</string>
<string name="ova_singular">\@нить/ova</string>
<string name="show_dub">Этикетка Dub</string>
<string name="site">Сайт</string>
<string name="pref_category_ui_features">Функции</string>
@ -493,7 +493,7 @@
<string name="subtitles_filter_lang">Фильтровать по предпочитаемому языку медиа</string>
<string name="error_invalid_id">Неверный ID</string>
<string name="network_adress_example">Ссылка на стрим</string>
<string name="random_button_settings_desc">Показывает кнопку на главной странице, с помощью которой можно выбрать случайный фильм или сериал с главной страницы</string>
<string name="random_button_settings_desc">Отображать рандомную кнопку на Главной странице</string>
<string name="random_button_settings">Рандомная кнопка</string>
<string name="apk_installer_legacy">Legacy (старый)</string>
<string name="player_settings_play_in_web">Веб видеокаст</string>
@ -501,7 +501,7 @@
<string name="episode_action_reload_links">Перезагрузить ссылки</string>
<string name="preferred_media_settings">Предпочтительные медиа</string>
<string name="subtitles_depressed">Опущенные</string>
<string name="double_tap_to_seek_amount_settings">Объем перемотки плеера (секундах)</string>
<string name="double_tap_to_seek_amount_settings">Объем перемотки плеера</string>
<string name="android_tv_interface_on_seek_settings_summary">Объем перемотка, используемый, когда плеер виден</string>
<string name="android_tv_interface_on_seek_settings">Плеер показан - Перемотки объем</string>
<string name="android_tv_interface_off_seek_settings">Плеер спрятан - Перемотки объем</string>
@ -518,15 +518,4 @@
<string name="test_failed">Неудачный</string>
<string name="stop">Прекратить</string>
<string name="restart">Перезапустить</string>
<string name="revert">Вернуться</string>
<string name="subscription_new">Подписался на %s</string>
<string name="watch_quality_pref_data">Предпочтительное качество видео (Мобильный интернет)</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Прокси-сервер</string>
<string name="jsdelivr_enabled">Не удалось подключиться к GitHub. Будет выполнен прокси jsdelivr.</string>
<string name="subscription_episode_released">Эпизод %d выпущен!</string>
<string name="pref_category_bypass">Обходы провайдера</string>
<string name="subscription_in_progress_notification">Обновление подписки на фильмы и сериалы</string>
<string name="jsdelivr_proxy_summary">Обход ограничения доступа к GitHub с помощью jsdelivr может задержать обновления на несколько дней.</string>
<string name="subscription_list_name">Подписные</string>
<string name="subscription_deleted">Отказались от подписки на %s</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="new_update_format" formatted="true">Našla sa nová aktualizácia!
\n%s -&gt; %s</string>
@ -99,9 +99,9 @@
<string name="vpn_torrent">Tento poskytovateľ je torrent, odporúča sa VPN</string>
<string name="subs_import_text" formatted="true">Importovať písma ich umiestnením do %s</string>
<string name="action_open_watching">Viac informácií</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="continue_watching">Pokračovať v sledovaní</string>
<string name="vpn_might_be_needed">Na správne fungovanie tohto poskytovateľa môže byť potrebná VPN</string>
<string name="provider_info_meta">Stránka neposkytla žiadne metadáta, načítanie videa zlyhá, ak na stránke neexistuje.</string>
<string name="torrent_plot">Popis</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="cast_format" formatted="true">Metalaya: %s</string>
<string name="next_episode_time_day_format" formatted="true">%dm %ds %dd</string>
@ -487,4 +487,4 @@
<string name="skip_type_op">Bilowga</string>
<string name="skip_type_mixed_op">Bilow isku qasan</string>
<string name="skip_type_creddits">Qoraalka dhamaadka</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<string name="rated_format">Betygsatt: %.1f</string>
<string name="player_speed_text_format">Hastighet (%.2fx)</string>
<string name="new_update_format">Ny uppdatering hittad!
@ -34,7 +33,7 @@
<string name="pick_subtitle">Undertexter</string>
<string name="reload_error">Försök ansluta igen…</string>
<string name="go_back">Gå tillbaka</string>
<string name="episode_poster_img_des">@string/result_poster_img_des</string>
<string name="episode_poster_img_des">\@string/result_poster_img_des</string>
<string name="play_episode">Spela Avsnitt</string>
<string name="download">Ladda ner</string>
<string name="download_storage_text">Intern lagring</string>
@ -45,7 +44,7 @@
<string name="pref_disable_acra">Inaktivera automatisk felrapportering</string>
<string name="home_more_info">Mer information</string>
<string name="home_expanded_hide">Hide</string>
<string name="home_main_poster_img_des">@string/result_poster_img_des</string>
<string name="home_main_poster_img_des">\@string/result_poster_img_des</string>
<string name="home_play">Spela upp</string>
<string name="home_info">Info</string>
<string name="home_next_random_img_des">Nästa</string>
@ -236,7 +235,7 @@
<string name="next_episode_format" formatted="true">Episod %d kommer släppas om</string>
<string name="duration_format" formatted="true">%d min</string>
<string name="show_trailers_settings">Visa trailers</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="ova">OVA</string>
<string name="episodes_range">%d-%d</string>
<string name="episode_format" formatted="true">%d %s</string>
@ -245,7 +244,7 @@
<string name="resume_time_left" formatted="true">%dm
\nåterstår</string>
<string name="nsfw">NSFW</string>
<string name="ova_singular">@string/ova</string>
<string name="ova_singular">\@string/ova</string>
<string name="torrent_singular">Torrent</string>
<string name="nsfw_singular">NSFW</string>
<string name="go_forward_30">+30</string>
@ -274,7 +273,7 @@
<string name="asian_drama">Asiatiska draman</string>
<string name="others">Andra</string>
<string name="cartoons_singular">Tecknade serier</string>
<string name="anime_singular">@string/anime</string>
<string name="anime_singular">\@string/anime</string>
<string name="documentaries_singular">Dokumentär</string>
<string name="asian_drama_singular">Asiatisk drama</string>
<string name="other_singular">Video</string>
@ -369,4 +368,4 @@
<string name="provider_languages_tip">Titta på videor på dessa språk</string>
<string name="previous">Föregående</string>
<string name="tracks">Spår</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="search_hint">தேடுக</string>
<string name="search_hint_site" formatted="true">தேடல் %s…</string>
@ -107,4 +107,4 @@
<string name="double_tap_to_pause_settings">இடைநிறுத்துவதற்கு இருமுறை தட்டவும்</string>
<string name="chromecast_subtitles_settings_des">Chromecast வசன அமைப்புகள்</string>
<string name="use_system_brightness_settings_des">இருண்ட மேலடுக்குக்குப் பதிலாக ஆப் பிளேயரில் சிஸ்டம் பிரகாசத்தைப் பயன்படுத்தவும்</string>
</resources>
</resources>

View file

@ -1,12 +1,11 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- KEYS DON'T TRANSLATE -->
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format">%s Ep %d</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="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>
@ -264,4 +263,4 @@
<string name="add_account">Magdagdag ng Account</string>
<string name="history">Kasaysayan</string>
<string name="action_mark_as_watched">I-tanda bilang napanood na</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="extra_info_format" formatted="true" translatable="false">%d %s | %s</string>
<string name="storage_size_format" formatted="true" translatable="false">%s • %s</string>
@ -24,9 +23,9 @@
<string name="episode_poster_img_des">Bölüm Posteri</string>
<string name="home_main_poster_img_des">Ana Poster</string>
<string name="home_next_random_img_des">Sonraki Rastgele</string>
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
<string name="episode_play_img_des" translatable="false">\@string/play_episode</string>
<string name="go_back_img_des">Geri git</string>
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</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 -->
@ -47,7 +46,7 @@
<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_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>
@ -118,47 +117,47 @@
<string name="benene_count_text_none">Hiç muz verilmedi</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">Altyazı dili</string>
<string name="subs_hold_to_reset_to_default">Sıfırlamak için basılı tut</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="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_play">@string/home_play</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 bir VPN gerekebilir</string>
<string name="vpn_torrent">Bu sağlayıcı torrent kullanıyor, bir VPN önerilir</string>
<string name="vpn_torrent">Bu sağlayıcı bir torrent. VPN önerilir</string>
<string name="provider_info_meta">Metadata site tarafından sağlanmamış, veri site\'de bulunmuyorsa video yüklenmesi başarısız olacak.</string>
<string name="torrent_plot">ıklama</string>
<string name="normal_no_plot">Konu bulunamadı</string>
<string name="torrent_no_plot">ıklama bulunamadı</string>
<string name="show_log_cat">Logcat\'i görüntüle 🐈</string>
<string name="picture_in_picture">Görüntü içinde görüntü</string>
<string name="picture_in_picture_des">İçerik diğer uygulamaların üzerinde küçük bir pencerede oynatılmaya devam eder</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 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ır çizgilerini kaldır</string>
<string name="player_subtitles_settings">Alt yazılar</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ıları</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">Eigengrau modu</string>
<string name="eigengraumode_settings_des">Oynatıcıya hız seçeneği ekler</string>
<string name="swipe_to_seek_settings">Atlamak için kaydır</string>
<string name="swipe_to_seek_settings_des">Zamanı ayarlamak için yanlardan kaydır</string>
<string name="eigengraumode_settings">Eigengravy modu</string>
<string name="eigengraumode_settings_des">Oynatıcıya bir hız seçeneği ekle</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 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 yukarı kaydırarak ekran parlaklığı ve sesi ayarla</string>
<string name="swipe_to_change_settings_des">Sol ve sağ taraftan kaydırarak parlaklık ve sesi ayarla</string>
<string name="autoplay_next_settings">Sonraki bölümü otomatik oynat</string>
<string name="autoplay_next_settings_des">Mevcut bölüm bittiğinde sonraki bölüme başla</string>
<string name="double_tap_to_seek_settings">Çift dokunarak atla</string>
<string name="double_tap_to_pause_settings">İki kez dokunarak duraklat</string>
<string name="double_tap_to_seek_amount_settings">Atlanacak süre (Saniye)</string>
<string name="double_tap_to_seek_settings_des">İleri ve geri atlamak için sağa ve sola iki kez dokun</string>
<string name="double_tap_to_pause_settings_des">Durdurmak için ekranın ortasına çift dokun</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_amount_settings">Oynatıcı gözleme miktarı</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ıyı karartmak 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">Verileri yedekten geri yükle</string>
<string name="backup_settings">Verileri yedekle</string>
<string name="restore_settings">Yedekten geri yükle</string>
<string name="backup_settings">Verileri yedekleyin</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>
@ -166,21 +165,21 @@
<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 yedekleme</string>
<string name="category_updates">Güncellemeler ve yedek</string>
<string name="settings_info">Bilgi</string>
<string name="advanced_search">Gelişmiş arama</string>
<string name="advanced_search_des">Arama sonuçlarını sağlayıcıya göre ayırır</string>
<string name="advanced_search_des">Sağlayıcılara göre ayrılmış arama sonuçlarını ver</string>
<string name="bug_report_settings_off">Yalnızca çökmelerle ilgili verileri gönderir</string>
<string name="bug_report_settings_on">Veri göndermez</string>
<string name="show_fillers_settings">Anime için filler bölümleri göster</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="pref_filter_search_quality">Seçilen video kalitelerini arama sonuçlarında gösterme</string>
<string name="pref_filter_search_quality">Seçilen video kalitelerini arama sonuçlarında gizle</string>
<string name="automatic_plugin_updates">Otomatik eklenti güncellemeleri</string>
<string name="updates_settings">Uygulama güncellemelerini göster</string>
<string name="updates_settings_des">Uygulama başlatıldıktan sonra güncellemeleri otomatik olarak kontrol et.</string>
<string name="uprereleases_settings">Deneysel sürümlere güncelle</string>
<string name="uprereleases_settings_des">Yalnızca tam sürümler yerine deneysel güncellemeleri de ara</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>
@ -192,8 +191,8 @@
<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 sıfırla</string>
<string name="acra_report_toast">Üzgünüz, uygulama çöktü. Geliştiricilere anonim bir hata raporu gönderilecek</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="season_format">%s %d%s</string>
<string name="no_season">Sezon yok</string>
@ -206,13 +205,13 @@
<string name="no_episodes_found">Bölüm bulunamadı</string>
<string name="delete_file">Dosyayı sil</string>
<string name="delete">Sil</string>
<string name="cancel" translatable="false">@string/sort_cancel</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">%s tamamen silinecek
\nEmin misiniz\?</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>
@ -237,21 +236,21 @@
<string name="torrent">Torrentler</string>
<string name="documentaries">Belgeseller</string>
<string name="ova">OVA</string>
<string name="asian_drama">Asya dizileri</string>
<string name="asian_drama">Asya dramaları</string>
<string name="livestreams">Canlı yayınlar</string>
<string name="nsfw">+18</string>
<string name="nsfw">NSFW</string>
<string name="others">Diğerleri</string>
<!--singular-->
<string name="movies_singular">Film</string>
<string name="tv_series_singular">Dizi</string>
<string name="cartoons_singular">Çizgi film</string>
<string name="anime_singular">@string/anime</string>
<string name="ova_singular">@string/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">Belgesel</string>
<string name="asian_drama_singular">Asya dizisi</string>
<string name="asian_drama_singular">Asya draması</string>
<string name="live_singular">Canlı yayın</string>
<string name="nsfw_singular">+18</string>
<string name="nsfw_singular">NSFW</string>
<string name="other_singular">Video</string>
<string name="source_error">Kaynak hatası</string>
<string name="remote_error">Sunucu hatası</string>
@ -260,10 +259,10 @@
<string name="storage_error">İndirme hatası, depolama izinlerini kontrol edin</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">Burada oynat</string>
<string name="episode_action_play_in_format">%s üzerinden oynat</string>
<string name="episode_action_play_in_app">Uygulamada oynat</string>
<string name="episode_action_play_in_format">%s\'deda 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">Şu kaynaktan indir</string>
<string name="episode_action_reload_links">Bağlantıları yenile</string>
@ -282,22 +281,22 @@
<string name="video_lock">Kilitle</string>
<string name="video_aspect_ratio_resize">Yeniden boyutlandır</string>
<string name="video_source">Kaynak</string>
<string name="video_skip_op">Jeneriği geç</string>
<string name="video_skip_op">OP\'yi geç</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 görüntü kalitesi (WiFi)</string>
<string name="limit_title">Video oynatıcı başlığı karakter üst sınırı</string>
<string name="limit_title_rez">Oynatıcının çözünürlüğü</string>
<string name="watch_quality_pref">Tercih edilen izleme kalitesi</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">Hafızadaki video önbelleği</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">Çok yükseğe ayarlanırsa düşük belleğe sahip cihazlarda çökmelere neden olur (örn. Android TV).</string>
<string name="video_disk_description">Çok yükseğe ayarlanırsa düşük depolama alanına sahip sistemlerde sorunlara neden olur (örn. Android TV).</string>
<string name="dns_pref">HTTPS üzerinden DNS (DoH)</string>
<string name="dns_pref_summary">İnternet Servis Sağlayıcısı (İSS) kısıtlamalarınımak için kullanışlıdır</string>
<string name="add_site_pref">Siteyi kopyala</string>
<string name="video_ram_description">Android TV gibi düşük belleğe sahip cihazlarda çok yükseğe ayarlanırsa çökmelere neden olur.</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 üzerinden DNS</string>
<string name="dns_pref_summary">ISP bloklarını atlatmak için kullanışlıdır</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="download_path_pref">İndirme konumu</string>
@ -306,16 +305,16 @@
<string name="resize_fit">Ekrana sığdır</string>
<string name="resize_fill">Uzat</string>
<string name="resize_zoom">Yakınlaştır</string>
<string name="legal_notice">Yasal Uyarı</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">Genel</string>
<string name="random_button_settings">Rastgele İçerik</string>
<string name="random_button_settings_desc">Ana sayfada rastgele bir film veya dizi seçen bir tuş gösterir</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="enable_nsfw_on_providers">Desteklenen sağlayıcılarda +18 içeriği etkinleştir</string>
<string name="enable_nsfw_on_providers">Desteklenen sağlayıcılarda NSFW\'yi etkinleştir</string>
<string name="subtitles_encoding">Alt yazı kodlaması</string>
<string name="category_providers">Sağlayıcılar</string>
<string name="category_ui">Düzen</string>
@ -337,7 +336,7 @@
<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">ornek.com</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>
@ -355,21 +354,21 @@
<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">%s eklendi</string>
<string name="added_sync_format" formatted="true">Eklendi %s</string>
<string name="upload_sync">Senkronize et</string>
<string name="sync_score">Puan</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 başarıyla doğrulandı</string>
<string name="authenticated_user_fail" formatted="true">%s ile giriş yapılamadı</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">Maksimum</string>
<string name="min">Minimum</string>
<string name="subtitles_none" translatable="false">@string/none</string>
<string name="subtitles_none" translatable="false">\@string/none</string>
<string name="subtitles_outline">Dış hat</string>
<string name="subtitles_depressed">Çökmüş</string>
<string name="subtitles_shadow">Gölge</string>
@ -377,7 +376,7 @@
<string name="subtitle_offset">Alt yazı senkronu</string>
<string name="subtitle_offset_hint">1000 ms</string>
<string name="subtitle_offset_title">Alt yazı gecikmesi</string>
<string name="subtitle_offset_extra_hint_later_format">Alt yazılar %d ms erken görüntüleniyorsa bunu kullanın</string>
<string name="subtitle_offset_extra_hint_later_format">Alt yazılar %d ms erken gözüküyorsa bunu kullanın</string>
<string name="subtitle_offset_extra_hint_before_format">Alt yazılar %d ms geç gözüküyorsa bunu kullanın</string>
<string name="subtitle_offset_extra_hint_none_format">Alt yazı gecikmesi yok</string>
<!--
@ -388,7 +387,7 @@
-->
<string name="subtitles_example_text">Pijamalı hasta yağız şoföre çabucak güvendi</string>
<string name="recommended">Önerilen</string>
<string name="player_loaded_subtitles" formatted="true">%s eklendi</string>
<string name="player_loaded_subtitles" formatted="true">%s 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>
@ -423,10 +422,10 @@
<string name="error_invalid_data">Geçersiz veri</string>
<string name="error_invalid_url">Geçersiz URL</string>
<string name="error">Hata</string>
<string name="subtitles_remove_captions">Alt yazılardan seçmeli alt yazıyı (CC) kaldır</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="subtitles_filter_lang">Tercih edilen medya diline göre filtrele</string>
<string name="extras">Ek içerikler</string>
<string name="extras">Ekstralar</string>
<string name="trailer">Fragman</string>
<string name="network_adress_example">Yayına bağlan</string>
<string name="referer">Yönlendiren</string>
@ -434,7 +433,7 @@
<string name="provider_languages_tip">Videoları bu dillerde izle</string>
<string name="previous">Geri</string>
<string name="skip_setup">Kurulumu atla</string>
<string name="app_layout_subtext">Cihazınıza uygun uygulama görünümünü seçin</string>
<string name="app_layout_subtext">Cihazınıza uygun görünümü seçin</string>
<string name="crash_reporting_title">Çökme raporları</string>
<string name="preferred_media_subtext">Ne izlemek istiyorsunuz</string>
<string name="setup_done">Bitti</string>
@ -446,7 +445,7 @@
<string name="plugin_deleted">Eklenti silindi</string>
<string name="plugin_load_fail" formatted="true">%s yüklenemedi</string>
<string name="is_adult">+18</string>
<string name="batch_download_start_format" formatted="true">%d %s indirilmeye başlandı</string>
<string name="batch_download_start_format" formatted="true">%d %s indirilmeye başlandı</string>
<string name="batch_download_finish_format" formatted="true">%d %s indirildi</string>
<string name="batch_download_nothing_to_download_format" formatted="true">%s\'nin tamamı zaten indirildi</string>
<string name="batch_download">Toplu indir</string>
@ -478,7 +477,7 @@
<string name="safe_mode_crash_info">Çökme bilgisini göster</string>
<string name="extension_rating" formatted="true">Puan: %s</string>
<string name="extension_description">ıklama</string>
<string name="extension_version">Sürüm</string>
<string name="extension_version">Versiyon</string>
<string name="extension_status">Durum</string>
<string name="extension_size">Boyut</string>
<string name="extension_authors">Geliştiriciler</string>
@ -500,14 +499,14 @@
<string name="play_trailer_button">Fragmanı oynat</string>
<string name="automatic_plugin_download_summary">Eklenen depolardan henüz yüklenmemiş tüm eklentileri otomatik olarak yükleyin.</string>
<string name="update_started">Güncelleme başladı</string>
<string name="apk_installer_settings_des">Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemeler yüklenmezse eski seçeneği deneyin.</string>
<string name="apk_installer_settings_des">Bazı cihazlar yeni paket yükleyiciyi desteklemez.. Güncellemele yüklenmezse eski seçeneği deneyin.</string>
<string name="automatic_plugin_download">Eklentileri otomatik olarak indir</string>
<string name="apk_installer_settings">APK indirici</string>
<string name="pref_category_links">Bağlantılar</string>
<string name="pref_category_links">Linkler</string>
<string name="pref_category_app_updates">Uygulama güncellemeleri</string>
<string name="pref_category_backup">Yedek</string>
<string name="pref_category_player_features">Oynatıcı özellikleri</string>
<string name="pref_category_subtitles">Alt yazılar</string>
<string name="pref_category_subtitles">Altyazılar</string>
<string name="pref_category_player_layout">Düzen</string>
<string name="pref_category_defaults">Varsayılanlar</string>
<string name="pref_category_extensions">Eklentiler</string>
@ -532,22 +531,22 @@
<string name="action_remove_from_watched">İzlenenlerden kaldır</string>
<string name="skip_type_mixed_ed">Karışık son</string>
<string name="skip_type_mixed_op">Karışık başlangıç</string>
<string name="skip_type_creddits">Katkıda Bulunanlar</string>
<string name="skip_type_creddits">Kredi</string>
<string name="skip_type_intro">Giriş</string>
<string name="plugin_downloaded">Eklenti İndirildi</string>
<string name="pref_category_actions">Eylemler</string>
<string name="enable_skip_op_from_database_des">ılış/bitiş için atlama açılır pencerelerini göster</string>
<string name="pref_category_actions">Aksiyonlar</string>
<string name="enable_skip_op_from_database_des">ma/bitiş için atlama açılır pencerelerini göster</string>
<string name="clipboard_too_large">Çok fazla metin. Panoya kaydedilemiyor.</string>
<string name="library">Kütüphane</string>
<string name="browser">Tarayıcı</string>
<string name="empty_library_no_accounts_message">Görünüşe göre kütüphaneniz boş :(
\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize içerik ekleyin</string>
\nBir kütüphane hesabına giriş yapın veya yerel kütüphanenize gösteri ekleyin</string>
<string name="safe_mode_file">Güvenli mod dosyası bulundu!
\nDosya kaldırılana kadar başlangıçta herhangi bir uzantı yüklenmiyor.</string>
<string name="sort_by">Sırala</string>
<string name="sort">Sırala</string>
<string name="sort_updated_new">Güncellenme (Yeniden Eskiye)</string>
<string name="sort_updated_old">Güncellenme (Eskiden Yeniye)</string>
<string name="sort_updated_new">Güncel (Yeniden Eskiye)</string>
<string name="sort_updated_old">Güncel (Eskiden Yeniye)</string>
<string name="sort_alphabetical_a">Alfabetik (A\'dan Zye)</string>
<string name="sort_alphabetical_z">Alfabetik (Z - A)</string>
<string name="select_library">Kütüphane Seçin</string>
@ -555,27 +554,4 @@
<string name="empty_library_logged_in_message">Görünüşe göre bu liste boş, başka bir listeye geçmeyi deneyin</string>
<string name="sort_rating_desc">Derecelendirme (Yüksekten Düşüğe)</string>
<string name="sort_rating_asc">Derecelendirme (Düşükten Yükseğe)</string>
<string name="restart">Yeniden başlat</string>
<string name="android_tv_interface_off_seek_settings">Oynatıcı gizlenmişken atlanacak süre</string>
<string name="pref_category_bypass">İSS Kısıtlamaları</string>
<string name="jsdelivr_enabled">GitHub\'a ulaşılamadı, jsdelivr vekil sunucusu etkinleştiriliyor.</string>
<string name="start">Başlat</string>
<string name="test_passed">Başarılı oldu</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com vekil sunucusu (proxy)</string>
<string name="watch_quality_pref_data">Tercih edilen görüntü kalitesi (Mobil veri)</string>
<string name="android_tv_interface_on_seek_settings">Oynatıcı görünürken atlanacak süre</string>
<string name="android_tv_interface_off_seek_settings_summary">Oynatıcı gizli durumdayken atlanacak süre miktarı</string>
<string name="jsdelivr_proxy_summary">jsdelivr kullanarak GitHub kısıtlamasını aşar. Güncellemeler birkaç gün gecikebilir.</string>
<string name="pref_category_android_tv">Android TV</string>
<string name="subscription_episode_released">Yeni bölüm %d yayınlandı!</string>
<string name="category_provider_test">Sağlayıcıyı kontrol et</string>
<string name="test_failed">Başarısız oldu</string>
<string name="stop">Durdur</string>
<string name="revert">Geri al</string>
<string name="subscription_in_progress_notification">Abone olunan gösteriler güncelleniyor</string>
<string name="subscription_list_name">Abone olunan</string>
<string name="subscription_new">%s kanalına abone olundu</string>
<string name="subscription_deleted">%s kanalı aboneliğinden çıkıldı</string>
<string name="test_log">Günlük</string>
<string name="android_tv_interface_on_seek_settings_summary">Oynatıcı görünür durumdayken atlanacak süre miktarı</string>
</resources>
</resources>

View file

@ -1,13 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="search_poster_img_des">Постер</string>
<string name="episode_poster_img_des">Постер до епізоду</string>
<string name="episode_poster_img_des">Постер епізоду</string>
<string name="download_canceled">Завантаження скасовано</string>
<string name="home_change_provider_img_des">Змінити постачальника</string>
<string name="go_back_img_des">Назад</string>
<string name="rated_format" formatted="true">Рейтинг: %.1f</string>
<string name="cast_format" formatted="true">Актори: %s</string>
<string name="next_episode_format" formatted="true">Епізод %d вийде через</string>
<string name="next_episode_format" formatted="true">Епізод %d буде випущено через</string>
<string name="result_poster_img_des">Poster</string>
<string name="app_dub_sub_episode_text_format" formatted="true">%s Еп. %d</string>
<string name="next_episode_time_day_format" formatted="true">%dд %dгод %dхв</string>
@ -15,16 +15,16 @@
<string name="next_episode_time_min_format" formatted="true">%dхв</string>
<string name="home_main_poster_img_des">Головний постер</string>
<string name="home_next_random_img_des">Наступний випадковий</string>
<string name="preview_background_img_des">Попередній перегляд фону</string>
<string name="preview_background_img_des">Перегляд фону</string>
<string name="player_speed_text_format" formatted="true">Швидкість (%.2fx)</string>
<string name="new_update_format" formatted="true">Знайдено нове оновлення!
<string name="new_update_format" formatted="true">Нове оновлення знайдено!
\n%s -&gt; %s</string>
<string name="title_search">Пошук</string>
<string name="title_downloads">Завантаження</string>
<string name="duration_format" formatted="true">%d хв</string>
<string name="title_settings">Налаштування</string>
<string name="title_settings">Параметри</string>
<string name="search_hint">Пошук…</string>
<string name="search_hint_site" formatted="true">Пошук на %s…</string>
<string name="search_hint_site" formatted="true">Пошук %s…</string>
<string name="no_data">Дані відсутні</string>
<string name="episode_more_options_des">Більше опцій</string>
<string name="next_episode">Наступний епізод</string>
@ -37,7 +37,7 @@
<string name="type_dropped">Покинуто</string>
<string name="play_movie_button">Переглянути фільм</string>
<string name="play_trailer_button">Переглянути трейлер</string>
<string name="play_torrent_button">Трансляція через торрент</string>
<string name="play_torrent_button">Переглянути торрент</string>
<string name="reload_error">Повторити підключення…</string>
<string name="go_back">Назад</string>
<string name="play_episode">Переглянути епізод</string>
@ -87,13 +87,13 @@
<string name="chromecast_subtitles_settings_des">Налаштування субтитрів Chromecast</string>
<string name="eigengraumode_settings">Режим Eigengravy</string>
<string name="swipe_to_change_settings">Проведіть пальцем, щоб змінити налаштування</string>
<string name="swipe_to_change_settings_des">Проведіть пальцем вгору або вниз ліворуч або праворуч, щоб змінити яскравість або гучність</string>
<string name="swipe_to_change_settings_des">Проведіть пальцем ліворуч або праворуч, щоб змінити яскравість або гучність</string>
<string name="autoplay_next_settings_des">Відтворення наступного епізоду після закінчення поточного</string>
<string name="title_home">Головна</string>
<string name="app_name">CloudStream</string>
<string name="filler" formatted="true">Філер</string>
<string name="play_with_app_name">Програти в CloudStream</string>
<string name="stream">Трансляція</string>
<string name="stream">Потік</string>
<string name="type_watching">Переглядаю</string>
<string name="result_share">Поділитися</string>
<string name="type_on_hold">Відкладено</string>
@ -121,10 +121,10 @@
<string name="subs_text_color">Колір тексту</string>
<string name="subs_outline_color">Колір контуру</string>
<string name="autoplay_next_settings">Автовідтворення наступного епізоду</string>
<string name="swipe_to_seek_settings_des">Проведіть пальцем з боку в бік, щоб керувати своїм положенням у відео</string>
<string name="swipe_to_seek_settings_des">Проведіть пальцем ліворуч або праворуч, щоб керувати часом у відеоплеєрі</string>
<string name="benene_count_text">%d Бананів для розробників</string>
<string name="player_size_settings">Кнопка зміни розміру плеєра</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Для коректної роботи цього постачальника може знадобитися VPN</string>
<string name="provider_info_meta">Метадані не надаються сайтом, завантаження відео не відбудеться, якщо їх немає на сайті.</string>
<string name="picture_in_picture">Картинка в картинці</string>
@ -133,8 +133,8 @@
<string name="swipe_to_seek_settings">Проведіть пальцем, щоб перемотати</string>
<string name="double_tap_to_seek_settings">Двічі торкніться, щоб перемотати</string>
<string name="double_tap_to_pause_settings">Двічі торкніться для паузи</string>
<string name="double_tap_to_seek_amount_settings">Крок перемотки (Секунди)</string>
<string name="double_tap_to_pause_settings_des">Натисніть двічі посередині, щоб призупинити</string>
<string name="double_tap_to_seek_amount_settings">Крок перемотки</string>
<string name="double_tap_to_pause_settings_des">Натисніть посередині, щоб поставити на паузу</string>
<string name="use_system_brightness_settings">Використовувати яскравість системи</string>
<string name="episode_sync_settings">Оновити прогрес перегляду</string>
<string name="restore_settings">Відновлення даних з резервної копії</string>
@ -230,7 +230,7 @@
<string name="kitsu_settings">Показати постери від Kitsu</string>
<string name="automatic_plugin_updates">Автоматичне оновлення плагінів</string>
<string name="automatic_plugin_download_summary">Автоматично встановлювати всі ще не встановлені плагіни з доданих репозиторіїв.</string>
<string name="updates_settings_des">Автоматично шукати нові оновлення після запуску застосунку.</string>
<string name="updates_settings_des">Автоматичний пошук нових оновлень при запуску</string>
<string name="uprereleases_settings">Оновлення до бета-версій</string>
<string name="copy_link_toast">Посилання скопійовано в буфер обміну</string>
<string name="apk_installer_settings_des">Деякі телефони не підтримують новий інсталятор пакетів. Спробуйте стару версію, якщо оновлення не встановлюються.</string>
@ -255,7 +255,7 @@
<string name="documentaries">Документальні фільми</string>
<string name="nsfw">NSFW</string>
<string name="movies_singular">Фільм</string>
<string name="ova_singular">OVA</string>
<string name="ova_singular">\@string/ova</string>
<string name="torrent_singular">Торрент</string>
<string name="show_hd">Мітка якості</string>
<string name="nsfw_singular">NSFW</string>
@ -283,7 +283,7 @@
<string name="pref_category_ui_features">Особливості</string>
<string name="category_general">Загальне</string>
<string name="random_button_settings">Випадкова кнопка</string>
<string name="random_button_settings_desc">Показує кнопку на Головній сторінці, яка може вибрати випадковий фільм або серіал на Головній сторінці</string>
<string name="random_button_settings_desc">Показати випадкову кнопку на Головній сторінці</string>
<string name="provider_lang_settings">Мови постачальника</string>
<string name="app_layout">Макет програми</string>
<string name="preferred_media_settings">Бажані медіа</string>
@ -524,9 +524,10 @@
<string name="subscription_deleted">Відписатися від %s</string>
<string name="subscription_episode_released">Епізод %d випущено!</string>
<string name="revert">Повернути</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Proxy</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com
\nProxy</string>
<string name="jsdelivr_enabled">Не вдалося зв\'язатися з GitHub, увімкнувши проксі-сервер jsdelivr.</string>
<string name="pref_category_bypass">Обходи ISP</string>
<string name="jsdelivr_proxy_summary">За допомогою jsdelivr можна обійти блокування GitHub. Можлива затримка оновлень на кілька днів.</string>
<string name="jsdelivr_proxy_summary">Обходити блокування GitHub з використанням jsdlitr, може викликати затримку оновлень на кілька днів.</string>
<string name="watch_quality_pref_data">Бажана якість перегляду (Мобільні дані)</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="cast_format" formatted="true">کاسٹ: %s</string>
<string name="next_episode_format" formatted="true">قسط %d جاری کیا جائے گا</string>
@ -230,7 +230,7 @@
<string name="tv_series_singular">سلسلہ</string>
<string name="cartoons_singular">کارٹون</string>
<string name="anime_singular">انیمی</string>
<string name="ova_singular">اووا</string>
<string name="ova_singular">\@string/اووا</string>
<string name="torrent_singular">ٹورینٹ</string>
<string name="documentaries_singular">دستاویزی فلم</string>
<string name="asian_drama_singular">ایشیائی ڈرامے</string>
@ -356,4 +356,4 @@
<string name="sync_score_format" formatted="true">%d / 10</string>
<string name="subtitles_raised">اٹھایا</string>
<string name="subtitle_offset_extra_hint_before_format">اگر سب ٹائٹلز %d ms بہت جلد دکھائے جائیں تو اسے استعمال کریں</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- KEYS DON'T TRANSLATE -->
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Tập %d</string>
@ -11,7 +10,7 @@
<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">Ảnh bìa</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>
@ -111,7 +110,7 @@
<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>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">Bạn có thể sẽ cần sử dụng VPN để xem phim này</string>
<string name="vpn_torrent">Phim này được chiếu dưới dạng Torrent. Hãy sử dụng VPN để xem</string>
<string name="torrent_plot">Thông tin phim</string>
@ -230,7 +229,7 @@
<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">@string/ova</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>
@ -261,18 +260,18 @@
<string name="check_for_update">Kiểm tra cập nhật</string>
<string name="video_lock">Khóa</string>
<string name="video_aspect_ratio_resize">Thu Phóng</string>
<string name="video_source">Nguồn</string>
<string name="video_skip_op">Bỏ qua OP</string>
<string name="video_source">Tuỳ chọn</string>
<string name="video_skip_op">Tua nhanh</string>
<string name="dont_show_again">Không hiện lại</string>
<string name="skip_update">Bỏ qua bản cập nhật này</string>
<string name="skip_update">Bỏ qua</string>
<string name="update">Cập nhật</string>
<string name="watch_quality_pref">Chất lượng xem ưu tiên (WiFi)</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 trình phát video</string>
<string name="video_buffer_size_settings">Kích thước bộ nhớ đệm video</string>
<string name="limit_title_rez">Định dạng trình phát</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">Lưu bộ nhớ đệm video trên ổ cứng</string>
<string name="video_buffer_clear_settings">Xoá bộ nhớ đệm hình ảnh và video</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>
<string name="video_ram_description">Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng ram thấp như Android TV.</string>
<string name="video_disk_description">Sẽ gây lỗi nếu đặt quá cao trên máy có dung lượng lưu trữ thấp như Android TV.</string>
<string name="dns_pref">DNS over HTTPS</string>
@ -520,9 +519,4 @@
<string name="empty_library_logged_in_message">Có vẻ như danh sách này trống, hãy thử chuyển sang danh sách khác</string>
<string name="sort_alphabetical_a">Chữ cái (A đến Z)</string>
<string name="select_library">Chọn Thư viện</string>
<string name="test_log">Nhật ký</string>
<string name="watch_quality_pref_data">Chất lượng xem ưu tiên (Dữ liệu di động)</string>
<string name="test_failed">Thất bại</string>
<string name="test_passed">Thành công</string>
<string name="start">Bắt đầu</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="extra_info_format" formatted="true" translatable="false">%d %s | %s</string>
<string name="storage_size_format" formatted="true" translatable="false">%s • %s</string>
@ -24,9 +23,9 @@
<string name="episode_poster_img_des">劇集封面</string>
<string name="home_main_poster_img_des">主封面</string>
<string name="home_next_random_img_des">隨機下一個</string>
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
<string name="episode_play_img_des" translatable="false">\@string/play_episode</string>
<string name="go_back_img_des">返回</string>
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
<string name="change_providers_img_des" translatable="false">\@string/home_change_provider_img_des</string>
<string name="home_change_provider_img_des">更改片源</string>
<string name="preview_background_img_des">預覽背景</string>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
@ -47,7 +46,7 @@
<string name="no_data">無資料</string>
<string name="episode_more_options_des">更多選項</string>
<string name="next_episode">下一集</string>
<string name="result_plot" translatable="false">@string/synopsis</string>
<string name="result_plot" translatable="false">\@string/synopsis</string>
<string name="result_tags">類型</string>
<string name="result_share">分享</string>
<string name="result_open_in_browser">在瀏覽器中打開</string>
@ -124,7 +123,7 @@
<string name="continue_watching">繼續觀看</string>
<string name="action_remove_watching">移除</string>
<string name="action_open_watching">更多資訊</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">此片源可能需要 VPN 才能正常使用</string>
<string name="vpn_torrent">此片源是種子,建議使用 VPN</string>
<string name="provider_info_meta">站點不提供元數據,如果站點上不存在元數據,影片載入將失敗。</string>
@ -206,7 +205,7 @@
<string name="no_episodes_found">未找到劇集</string>
<string name="delete_file">刪除文件</string>
<string name="delete">刪除</string>
<string name="cancel" translatable="false">@string/sort_cancel</string>
<string name="cancel" translatable="false">\@string/sort_cancel</string>
<string name="pause">暫停</string>
<string name="resume">繼續</string>
<string name="go_back_30">-30</string>
@ -245,8 +244,8 @@
<string name="movies_singular">電影</string>
<string name="tv_series_singular">電視劇</string>
<string name="cartoons_singular">卡通</string>
<string name="anime_singular">@string/anime</string>
<string name="ova_singular">@string/ova</string>
<string name="anime_singular">\@string/anime</string>
<string name="ova_singular">\@string/ova</string>
<string name="torrent_singular">種子</string>
<string name="documentaries_singular">紀錄片</string>
<string name="asian_drama_singular">亞洲劇</string>
@ -369,7 +368,7 @@
<string name="all">全部</string>
<string name="max">最大</string>
<string name="min">最小</string>
<string name="subtitles_none" translatable="false">@string/none</string>
<string name="subtitles_none" translatable="false">\@string/none</string>
<string name="subtitles_outline">輪廓</string>
<string name="subtitles_depressed">凹陷</string>
<string name="subtitles_shadow">陰影</string>
@ -535,4 +534,4 @@
<string name="pref_category_looks">外觀</string>
<string name="pref_category_ui_features">功能</string>
<string name="browser">瀏覽器</string>
</resources>
</resources>

View file

@ -1,6 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<?xml version="1.0" encoding="utf-8"?>
<!--https://newbedev.com/concatenate-multiple-strings-in-xml--><resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="extra_info_format" formatted="true" translatable="false">%d %s | %s</string>
<string name="storage_size_format" formatted="true" translatable="false">%s • %s</string>
@ -24,9 +23,9 @@
<string name="episode_poster_img_des">剧集封面</string>
<string name="home_main_poster_img_des">主封面</string>
<string name="home_next_random_img_des">随机下一个</string>
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
<string name="episode_play_img_des" translatable="false">\@string/play_episode</string>
<string name="go_back_img_des">返回</string>
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
<string name="change_providers_img_des" translatable="false">\@string/home_change_provider_img_des</string>
<string name="home_change_provider_img_des">更改片源</string>
<string name="preview_background_img_des">预览背景</string>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
@ -47,7 +46,7 @@
<string name="no_data">无数据</string>
<string name="episode_more_options_des">更多选项</string>
<string name="next_episode">下一集</string>
<string name="result_plot" translatable="false">@string/synopsis</string>
<string name="result_plot" translatable="false">\@string/synopsis</string>
<string name="result_tags">类型</string>
<string name="result_share">分享</string>
<string name="result_open_in_browser">在浏览器中打开</string>
@ -124,7 +123,7 @@
<string name="continue_watching">继续观看</string>
<string name="action_remove_watching">移除</string>
<string name="action_open_watching">更多信息</string>
<string name="action_open_play">@string/home_play</string>
<string name="action_open_play">\@string/home_play</string>
<string name="vpn_might_be_needed">此片源可能需要 VPN 才能正常使用</string>
<string name="vpn_torrent">此片源为种子文件,建议使用 VPN</string>
<string name="provider_info_meta">站点不提供元数据,如果站点上不存在元数据,视频加载将失败。</string>
@ -143,14 +142,14 @@
<string name="eigengraumode_settings">倍速模式</string>
<string name="eigengraumode_settings_des">在播放器中添加播放速度选项</string>
<string name="swipe_to_seek_settings">滑动控制进度</string>
<string name="swipe_to_seek_settings_des">左右滑动以控制视频中的位置</string>
<string name="swipe_to_seek_settings_des">左右滑动控制播放进度</string>
<string name="swipe_to_change_settings">滑动更改设置</string>
<string name="swipe_to_change_settings_des">上下滑动修改亮度或音量</string>
<string name="autoplay_next_settings">自动播放下一集</string>
<string name="autoplay_next_settings_des">播放完毕后播放下一集</string>
<string name="double_tap_to_seek_settings">双击控制进度</string>
<string name="double_tap_to_pause_settings">双击暂停</string>
<string name="double_tap_to_seek_amount_settings">双击控制进度时间 (秒)</string>
<string name="double_tap_to_seek_amount_settings">双击控制进度时间</string>
<string name="double_tap_to_seek_settings_des">在左右侧双击快进或快退</string>
<string name="double_tap_to_pause_settings_des">双击中间暂停</string>
<string name="use_system_brightness_settings">使用系统亮度</string>
@ -179,7 +178,7 @@
<string name="automatic_plugin_updates">自动更新插件</string>
<string name="automatic_plugin_download">自动下载插件</string>
<string name="updates_settings">显示应用更新</string>
<string name="updates_settings_des">启动应用后自动搜索更新。</string>
<string name="updates_settings_des">启动时自动搜索更新</string>
<string name="uprereleases_settings">更新至预览版</string>
<string name="uprereleases_settings_des">搜索预览版更新替代仅搜索完整版本</string>
<string name="github">Github</string>
@ -207,7 +206,7 @@
<string name="no_episodes_found">未找到剧集</string>
<string name="delete_file">删除文件</string>
<string name="delete">删除</string>
<string name="cancel" translatable="false">@string/sort_cancel</string>
<string name="cancel" translatable="false">\@string/sort_cancel</string>
<string name="pause">暂停</string>
<string name="resume">继续</string>
<string name="go_back_30">-30</string>
@ -246,8 +245,8 @@
<string name="movies_singular">电影</string>
<string name="tv_series_singular">电视剧</string>
<string name="cartoons_singular">卡通</string>
<string name="anime_singular">动漫</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">种子</string>
<string name="documentaries_singular">纪录片</string>
<string name="asian_drama_singular">亚洲剧</string>
@ -287,7 +286,7 @@
<string name="dont_show_again">不再显示</string>
<string name="skip_update">跳过此更新</string>
<string name="update">更新</string>
<string name="watch_quality_pref">首选播放画质WiFi</string>
<string name="watch_quality_pref">首选播放画质</string>
<string name="limit_title">视频播放器标题最多字符</string>
<string name="limit_title_rez">视频播放器标题</string>
<string name="video_buffer_size_settings">视频缓冲大小</string>
@ -312,7 +311,7 @@
<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">通用</string>
<string name="random_button_settings">随机按钮</string>
<string name="random_button_settings_desc">在主页上显示按钮,可以从主页上随机选择电影或电视剧</string>
<string name="random_button_settings_desc">在主页中显示随机按钮</string>
<string name="provider_lang_settings">片源语言</string>
<string name="app_layout">应用布局</string>
<string name="preferred_media_settings">首选类型</string>
@ -370,7 +369,7 @@
<string name="all">全部</string>
<string name="max">最大</string>
<string name="min">最小</string>
<string name="subtitles_none" translatable="false">@string/none</string>
<string name="subtitles_none" translatable="false">\@string/none</string>
<string name="subtitles_outline">轮廓</string>
<string name="subtitles_depressed">凹陷</string>
<string name="subtitles_shadow">阴影</string>
@ -574,8 +573,7 @@
<string name="test_log">日志</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com 代理</string>
<string name="jsdelivr_enabled">连接 Github 失败,正在启用 jsdelivr 代理。</string>
<string name="jsdelivr_proxy_summary">使用 jsdelivr,可以绕过 GitHub 的封锁。可能会延迟几天的更新</string>
<string name="jsdelivr_proxy_summary">使用 jsdelivr 绕过对 Github 的封锁,可能导致更新延迟几天</string>
<string name="pref_category_bypass">ISP 绕过</string>
<string name="revert">还原</string>
<string name="watch_quality_pref_data">首选播放画质(移动数据)</string>
</resources>
</resources>

View file

@ -210,17 +210,17 @@
<string name="eigengraumode_settings">Eigengravy Mode</string>
<string name="eigengraumode_settings_des">Adds a speed option in the player</string>
<string name="swipe_to_seek_settings">Swipe to seek</string>
<string name="swipe_to_seek_settings_des">Swipe from side to side to control your position in a video</string>
<string name="swipe_to_seek_settings_des">Swipe left or right to control time in the videoplayer</string>
<string name="swipe_to_change_settings">Swipe to change settings</string>
<string name="swipe_to_change_settings_des">Slide up or down on the left or right side to change brightness or volume</string>
<string name="swipe_to_change_settings_des">Swipe on the left or right side to change brightness or volume</string>
<string name="autoplay_next_settings">Autoplay next episode</string>
<string name="autoplay_next_settings_des">Start the next episode when the current one ends</string>
<string name="double_tap_to_seek_settings">Double tap to seek</string>
<string name="double_tap_to_pause_settings">Double tap to pause</string>
<string name="double_tap_to_seek_amount_settings">Player seek amount (Seconds)</string>
<string name="double_tap_to_seek_amount_settings">Player seek amount</string>
<string name="double_tap_to_seek_settings_des">Tap twice on the right or left side to seek forwards or backwards
</string>
<string name="double_tap_to_pause_settings_des">Tap twice in the middle to pause</string>
<string name="double_tap_to_pause_settings_des">Tap in the middle to pause</string>
<string name="use_system_brightness_settings">Use system brightness</string>
<string name="use_system_brightness_settings_des">Use system brightness in the app player instead of a dark
overlay
@ -251,7 +251,7 @@
<string name="automatic_plugin_download">Automatically download plugins</string>
<string name="automatic_plugin_download_summary">Automatically install all not yet installed plugins from added repositories.</string>
<string name="updates_settings">Show app updates</string>
<string name="updates_settings_des">Automatically search for new updates after starting the app.</string>
<string name="updates_settings_des">Automatically search for new updates on start</string>
<string name="redo_setup_process">Redo setup process</string>
<string name="uprereleases_settings">Update to prereleases</string>
<string name="uprereleases_settings_des">Search for prerelease updates instead of full releases only</string>
@ -324,8 +324,8 @@
<string name="movies_singular">Movie</string>
<string name="tv_series_singular">Series</string>
<string name="cartoons_singular">Cartoon</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">Documentary</string>
<string name="asian_drama_singular">Asian Drama</string>
@ -383,7 +383,7 @@
<string name="dns_pref_summary">Useful for bypassing ISP blocks</string>
<string name="jsdelivr_proxy">raw.githubusercontent.com Proxy</string>
<string name="jsdelivr_enabled">Failed to reach GitHub, enabling jsdelivr proxy.</string>
<string name="jsdelivr_proxy_summary">Using jsdelivr, GitHub blocking can be bypassed. May delay updates by a few days.</string>
<string name="jsdelivr_proxy_summary">Bypasses blocking of GitHub using jsdelivr, may cause updates to be delayed by few days.</string>
<string name="add_site_pref">Clone site</string>
<string name="remove_site_pref">Remove site</string>
<string name="add_site_summary">Add a clone of an existing site, with a different URL</string>
@ -428,7 +428,7 @@
<string name="pref_category_ui_features">Features</string>
<string name="category_general">General</string>
<string name="random_button_settings">Random Button</string>
<string name="random_button_settings_desc">Shows button on Homepage which can choose a random movie or TV series from the Homepage</string>
<string name="random_button_settings_desc">Show random button on Homepage</string>
<string name="provider_lang_settings">Provider languages</string>
<string name="app_layout">App Layout</string>
<string name="preferred_media_settings">Preferred media</string>
@ -657,4 +657,22 @@
<string name="subscription_new">Subscribed to %s</string>
<string name="subscription_deleted">Unsubscribed from %s</string>
<string name="subscription_episode_released">Episode %d released!</string>
</resources>
<string name="profile_number">Profile %d</string>
<string name="wifi">Wi-Fi</string>
<string name="mobile_data">Mobile data</string>
<string name="set_default">Set default</string>
<string name="use">Use</string>
<string name="edit">Edit</string>
<string name="profiles">Profiles</string>
<string name="help">Help</string>
<string name="quality_profile_help">
Here you can change how the sources are ordered. If a video has a higher priority it will appear higher in the source selection.
The sum of the source priority and the quality priority is the video priority.
\n\nSource A: 3
\nQuality B: 7
\nWill have a combined video priority of 10.
\n\nNOTE: If the sum is 10 or more the player will automatically skip loading when that link is loaded!
</string>
<string name="qualities">Qualities</string>
</resources>

View file

@ -40,6 +40,7 @@
<!-- Preference -->
<item name="android:textColor">?attr/textColor</item>
<item name="android:textColorSecondary">?attr/grayTextColor</item>
<item name="android:icon">?attr/grayTextColor</item>
<item name="android:textColorHint">?attr/grayTextColor</item>
<item name="android:editTextColor">?attr/textColor</item>

View file

@ -11,14 +11,14 @@
<PreferenceCategory
android:title="@string/pref_category_defaults">
<Preference
android:icon="@drawable/ic_baseline_hd_24"
android:key="@string/quality_pref_key"
android:title="@string/watch_quality_pref" />
<Preference
android:icon="@drawable/ic_baseline_hd_24"
android:key="@string/quality_pref_mobile_data_key"
android:title="@string/watch_quality_pref_data" />
<!-- <Preference-->
<!-- android:icon="@drawable/ic_baseline_hd_24"-->
<!-- android:key="@string/quality_pref_key"-->
<!-- android:title="@string/watch_quality_pref" />-->
<!-- <Preference-->
<!-- android:icon="@drawable/ic_baseline_hd_24"-->
<!-- android:key="@string/quality_pref_mobile_data_key"-->
<!-- android:title="@string/watch_quality_pref_data" />-->
<Preference
android:icon="@drawable/netflix_play"