mirror of
https://github.com/recloudstream/cloudstream.git
synced 2026-06-19 20:05:41 +00:00
Compare commits
1 commit
master
...
fix-player
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
09eeb93f35 |
171 changed files with 2641 additions and 3945 deletions
1
.github/workflows/build_to_archive.yml
vendored
1
.github/workflows/build_to_archive.yml
vendored
|
|
@ -71,7 +71,6 @@ jobs:
|
|||
SIGNING_STORE_PASSWORD: ${{ steps.fetch_keystore.outputs.key_pwd }}
|
||||
SIMKL_CLIENT_ID: ${{ secrets.SIMKL_CLIENT_ID }}
|
||||
SIMKL_CLIENT_SECRET: ${{ secrets.SIMKL_CLIENT_SECRET }}
|
||||
TRAKT_CLIENT_ID: ${{ secrets.TRAKT_CLIENT_ID }}
|
||||
MDL_API_KEY: ${{ secrets.MDL_API_KEY }}
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
|
|
|
|||
98
.github/workflows/issue_action.yml
vendored
Normal file
98
.github/workflows/issue_action.yml
vendored
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
name: Issue automatic actions
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
issue-moderator:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Generate access token
|
||||
id: generate_token
|
||||
uses: tibdex/github-app-token@v2
|
||||
with:
|
||||
app_id: ${{ secrets.GH_APP_ID }}
|
||||
private_key: ${{ secrets.GH_APP_KEY }}
|
||||
|
||||
- name: Similarity analysis
|
||||
id: similarity
|
||||
uses: actions-cool/issues-similarity-analysis@v1
|
||||
with:
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
filter-threshold: 0.60
|
||||
title-excludes: ''
|
||||
comment-title: |
|
||||
### Your issue looks similar to these issues:
|
||||
Please close if duplicate.
|
||||
comment-body: '${index}. ${similarity} #${number}'
|
||||
|
||||
- name: Label if possible duplicate
|
||||
if: steps.similarity.outputs.similar-issues-found =='true'
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
github-token: ${{ steps.generate_token.outputs.token }}
|
||||
script: |
|
||||
github.rest.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ["possible duplicate"]
|
||||
})
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Automatically close issues that dont follow the issue template
|
||||
uses: lucasbento/auto-close-issues@v1.0.2
|
||||
with:
|
||||
github-token: ${{ steps.generate_token.outputs.token }}
|
||||
issue-close-message: |
|
||||
@${issue.user.login}: hello! :wave:
|
||||
This issue is being automatically closed because it does not follow the issue template."
|
||||
closed-issues-label: "invalid"
|
||||
|
||||
- name: Check if issue mentions a provider
|
||||
id: provider_check
|
||||
env:
|
||||
GH_TEXT: "${{ github.event.issue.title }} ${{ github.event.issue.body }}"
|
||||
run: |
|
||||
wget --output-document check_issue.py "https://raw.githubusercontent.com/recloudstream/.github/master/.github/check_issue.py"
|
||||
pip3 install httpx
|
||||
RES="$(python3 ./check_issue.py)"
|
||||
echo "name=${RES}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Comment if issue mentions a provider
|
||||
if: steps.provider_check.outputs.name != 'none'
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: 'create-comment'
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
body: |
|
||||
Hello ${{ github.event.issue.user.login }}.
|
||||
Please do not report any provider bugs here. This repository does not contain any providers. Please find the appropriate repository and report your issue there or join the [discord](https://discord.gg/5Hus6fM).
|
||||
|
||||
Found provider name: `${{ steps.provider_check.outputs.name }}`
|
||||
|
||||
- name: Label if mentions provider
|
||||
if: steps.provider_check.outputs.name != 'none'
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
github-token: ${{ steps.generate_token.outputs.token }}
|
||||
script: |
|
||||
github.rest.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ["possible provider issue"]
|
||||
})
|
||||
|
||||
- name: Add eyes reaction to all issues
|
||||
uses: actions-cool/emoji-helper@v1.0.0
|
||||
with:
|
||||
type: 'issue'
|
||||
token: ${{ steps.generate_token.outputs.token }}
|
||||
emoji: 'eyes'
|
||||
1
.github/workflows/prerelease.yml
vendored
1
.github/workflows/prerelease.yml
vendored
|
|
@ -62,7 +62,6 @@ jobs:
|
|||
SIGNING_STORE_PASSWORD: ${{ steps.fetch_keystore.outputs.key_pwd }}
|
||||
SIMKL_CLIENT_ID: ${{ secrets.SIMKL_CLIENT_ID }}
|
||||
SIMKL_CLIENT_SECRET: ${{ secrets.SIMKL_CLIENT_SECRET }}
|
||||
TRAKT_CLIENT_ID: ${{ secrets.TRAKT_CLIENT_ID }}
|
||||
MDL_API_KEY: ${{ secrets.MDL_API_KEY }}
|
||||
|
||||
- name: Create pre-release
|
||||
|
|
|
|||
2
.github/workflows/pull_request.yml
vendored
2
.github/workflows/pull_request.yml
vendored
|
|
@ -27,7 +27,7 @@ jobs:
|
|||
cache-read-only: false
|
||||
|
||||
- name: Run Gradle
|
||||
run: ./gradlew assemblePrereleaseDebug lint check
|
||||
run: ./gradlew assemblePrereleaseDebug lint
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v7
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
|||
plugins {
|
||||
alias(libs.plugins.android.application)
|
||||
alias(libs.plugins.dokka)
|
||||
alias(libs.plugins.kotlin.serialization)
|
||||
}
|
||||
|
||||
val javaTarget = JvmTarget.fromTarget(libs.versions.jvmTarget.get())
|
||||
|
|
@ -104,8 +103,8 @@ android {
|
|||
applicationId = "com.lagradost.cloudstream3"
|
||||
minSdk = libs.versions.minSdk.get().toInt()
|
||||
targetSdk = libs.versions.targetSdk.get().toInt()
|
||||
versionCode = libs.versions.versionCode.get().toInt()
|
||||
versionName = libs.versions.versionName.get()
|
||||
versionCode = 68
|
||||
versionName = "4.7.0"
|
||||
|
||||
manifestPlaceholders["target_sdk_version"] = libs.versions.targetSdk.get()
|
||||
|
||||
|
|
@ -207,11 +206,9 @@ dependencies {
|
|||
testImplementation(libs.junit)
|
||||
testImplementation(libs.json)
|
||||
androidTestImplementation(libs.core)
|
||||
androidTestImplementation(libs.espresso.core)
|
||||
implementation(libs.junit.ktx)
|
||||
androidTestImplementation(libs.ext.junit)
|
||||
androidTestImplementation(libs.instancio.core)
|
||||
androidTestImplementation(libs.junit.ktx)
|
||||
androidTestImplementation(libs.kotlin.test)
|
||||
androidTestImplementation(libs.espresso.core)
|
||||
|
||||
// Android Core & Lifecycle
|
||||
implementation(libs.core.ktx)
|
||||
|
|
@ -222,7 +219,6 @@ dependencies {
|
|||
implementation(libs.bundles.lifecycle)
|
||||
implementation(libs.bundles.navigation)
|
||||
implementation(libs.kotlinx.collections.immutable)
|
||||
implementation(libs.kotlinx.serialization.json) // JSON Parser
|
||||
|
||||
// Design & UI
|
||||
implementation(libs.preference.ktx)
|
||||
|
|
@ -259,15 +255,13 @@ dependencies {
|
|||
// Extensions & Other Libs
|
||||
implementation(libs.jsoup) // HTML Parser
|
||||
implementation(libs.rhino) // Run JavaScript
|
||||
implementation(libs.fuzzywuzzy) // Library/Ext Searching with Levenshtein Distance
|
||||
implementation(libs.safefile) // To Prevent the URI File Fu*kery
|
||||
coreLibraryDesugaring(libs.desugar.jdk.libs.nio) // NIO Flavor Needed for NewPipeExtractor
|
||||
implementation(libs.conscrypt.android) // To Fix SSL Fu*kery on Android 9
|
||||
implementation(libs.jackson.module.kotlin) // JSON Parser
|
||||
implementation(libs.zipline)
|
||||
|
||||
// Deprecated; will be removed once extensions have time to migrate from using it
|
||||
implementation("me.xdrop:fuzzywuzzy:1.4.0")
|
||||
|
||||
// Torrent Support
|
||||
implementation(libs.torrentserver)
|
||||
|
||||
|
|
@ -316,7 +310,6 @@ tasks.withType<KotlinJvmCompile> {
|
|||
optIn.addAll(
|
||||
"com.lagradost.cloudstream3.InternalAPI",
|
||||
"com.lagradost.cloudstream3.Prerelease",
|
||||
"kotlin.uuid.ExperimentalUuidApi",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,134 +0,0 @@
|
|||
package com.lagradost.cloudstream3
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||
import dalvik.system.DexFile
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.InternalSerializationApi
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.serializer
|
||||
import kotlinx.serialization.serializerOrNull
|
||||
import org.instancio.Instancio
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.jvm.jvmName
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class SerializationClassTester {
|
||||
// Same as app, or using app reference
|
||||
val jacksonMapper = mapper
|
||||
val kotlinxMapper = json
|
||||
|
||||
@Test
|
||||
fun isIdenticalSerialization() {
|
||||
val serializableClasses = findSerializableClasses("com.lagradost")
|
||||
println("Number of serializable classes: ${serializableClasses.size}")
|
||||
|
||||
serializableClasses.forEach { kClass ->
|
||||
val instance = Instancio.create(kClass.java)
|
||||
|
||||
val jacksonJson = jacksonMapper.writeValueAsString(instance)
|
||||
val kotlinxJson = serializeWithKotlinx(kClass, instance)
|
||||
|
||||
assertEquals(
|
||||
jacksonJson,
|
||||
kotlinxJson,
|
||||
"""
|
||||
Serialization mismatch for:
|
||||
${kClass.qualifiedName}
|
||||
|
||||
Jackson:
|
||||
$jacksonJson
|
||||
|
||||
Kotlinx:
|
||||
$kotlinxJson
|
||||
|
||||
""".trimIndent()
|
||||
)
|
||||
println("Identical serialization for: ${kClass.jvmName}")
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(InternalSerializationApi::class, ExperimentalSerializationApi::class)
|
||||
@Test
|
||||
fun isIdenticalDeserialization() {
|
||||
val serializableClasses = findSerializableClasses("com.lagradost")
|
||||
println("Number of serializable classes: ${serializableClasses.size}")
|
||||
|
||||
serializableClasses.forEach { kClass ->
|
||||
val instance = Instancio.create(kClass.java)
|
||||
// Convert to JSON to get example JSON object
|
||||
// We prefer jackson here because the app may have many jackson JSON strings in local storage
|
||||
val originalJson = jacksonMapper.writeValueAsString(instance)
|
||||
|
||||
// Create an object from the JSON using kotlinx
|
||||
val serializer =
|
||||
kClass.serializerOrNull() ?: kotlinxMapper.serializersModule.getContextual(kClass)
|
||||
assertNotNull(serializer, "The class: ${kClass.jvmName} must be serializable!")
|
||||
val kotlinxDecoded = kotlinxMapper.decodeFromString(serializer, originalJson)
|
||||
|
||||
// Create an object from the JSON using jackson
|
||||
val mapperDecoded = jacksonMapper.readValue(originalJson, kClass.java)
|
||||
|
||||
|
||||
// Deep inspect both object using the mapper toJson function.
|
||||
// This deep equality check can be performed using other methods, but this just works.
|
||||
val jacksonJson = mapperDecoded.toJson()
|
||||
val kotlinxJson = kotlinxDecoded.toJson()
|
||||
|
||||
assertEquals(
|
||||
jacksonJson,
|
||||
kotlinxJson,
|
||||
"""
|
||||
Serialization mismatch for:
|
||||
${kClass.qualifiedName}
|
||||
|
||||
Jackson:
|
||||
$jacksonJson
|
||||
|
||||
Kotlinx:
|
||||
$kotlinxJson
|
||||
|
||||
""".trimIndent()
|
||||
)
|
||||
println("Identical deserialization for: ${kClass.jvmName}")
|
||||
}
|
||||
}
|
||||
|
||||
// DEX files are the best solution to read all our classes dynamically.
|
||||
// classgraph could be used instead, but it only gives results on the JVM, not Android.
|
||||
@Suppress("DEPRECATION")
|
||||
private fun findSerializableClasses(packageName: String): List<KClass<*>> {
|
||||
val context = InstrumentationRegistry
|
||||
.getInstrumentation()
|
||||
.targetContext
|
||||
|
||||
val dexFile = DexFile(context.packageCodePath)
|
||||
return dexFile.entries()
|
||||
.toList()
|
||||
.filter { it.startsWith(packageName) }
|
||||
.mapNotNull {
|
||||
runCatching { Class.forName(it).kotlin }.getOrNull()
|
||||
}.filter { kClass ->
|
||||
// Not possible to use .hasAnnotation() on newer Android versions.
|
||||
kClass.java.annotations.any {
|
||||
it is Serializable
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(InternalSerializationApi::class)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
private fun serializeWithKotlinx(
|
||||
kClass: KClass<*>,
|
||||
value: Any
|
||||
): String {
|
||||
val serializer = kClass.serializer() as KSerializer<Any>
|
||||
return kotlinxMapper.encodeToString(serializer, value)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,157 +0,0 @@
|
|||
package com.lagradost.cloudstream3.utils.serializers
|
||||
|
||||
import android.net.Uri
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.KeepGeneratedSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@KeepGeneratedSerializer
|
||||
@Serializable(with = NonEmptyData.Serializer::class)
|
||||
data class NonEmptyData(
|
||||
val title: String = "",
|
||||
val tags: List<String> = emptyList(),
|
||||
val meta: Map<String, String> = emptyMap(),
|
||||
val name: String = "hello",
|
||||
) {
|
||||
object Serializer : NonEmptySerializer<NonEmptyData>(NonEmptyData.generatedSerializer())
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@KeepGeneratedSerializer
|
||||
@Serializable(with = WriteOnlyData.Serializer::class)
|
||||
data class WriteOnlyData(
|
||||
val fieldA: String = "",
|
||||
val fieldB: String = "",
|
||||
) {
|
||||
object Serializer : WriteOnlySerializer<WriteOnlyData>(
|
||||
WriteOnlyData.generatedSerializer(),
|
||||
setOf("fieldB"),
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@KeepGeneratedSerializer
|
||||
@Serializable(with = MultiWriteOnly.Serializer::class)
|
||||
data class MultiWriteOnly(
|
||||
val fieldA: String = "",
|
||||
val fieldB: String = "",
|
||||
val fieldC: String = "",
|
||||
) {
|
||||
object Serializer : WriteOnlySerializer<MultiWriteOnly>(
|
||||
MultiWriteOnly.generatedSerializer(),
|
||||
setOf("fieldB", "fieldC"),
|
||||
)
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class UriData(
|
||||
@Serializable(with = UriSerializer::class)
|
||||
val uri: Uri = Uri.EMPTY,
|
||||
)
|
||||
|
||||
class SerializerTest {
|
||||
|
||||
@Test
|
||||
fun nonEmptySerializerOmitsEmptyStrings() {
|
||||
val data = NonEmptyData(title = "", name = "hello")
|
||||
val result = data.toJson()
|
||||
assertFalse(result.contains("title"))
|
||||
assertTrue(result.contains("name"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun nonEmptySerializerOmitsEmptyLists() {
|
||||
val data = NonEmptyData(tags = emptyList(), name = "hello")
|
||||
val result = data.toJson()
|
||||
assertFalse(result.contains("tags"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun nonEmptySerializerOmitsEmptyMaps() {
|
||||
val data = NonEmptyData(meta = emptyMap(), name = "hello")
|
||||
val result = data.toJson()
|
||||
assertFalse(result.contains("meta"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun nonEmptySerializerKeepsNonEmptyFields() {
|
||||
val data = NonEmptyData(title = "hello", tags = listOf("a"), meta = mapOf("k" to "v"))
|
||||
val result = data.toJson()
|
||||
assertTrue(result.contains("title"))
|
||||
assertTrue(result.contains("tags"))
|
||||
assertTrue(result.contains("meta"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun nonEmptySerializerDoesNotAffectDeserialization() {
|
||||
val input = """{"title":"hello","tags":["a"],"meta":{"k":"v"},"name":"world"}"""
|
||||
val result = parseJson<NonEmptyData>(input)
|
||||
assertEquals("hello", result.title)
|
||||
assertEquals(listOf("a"), result.tags)
|
||||
assertEquals(mapOf("k" to "v"), result.meta)
|
||||
assertEquals("world", result.name)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun writeOnlySerializerOmitsFieldOnSerialize() {
|
||||
val data = WriteOnlyData(fieldA = "hello", fieldB = "secret")
|
||||
val result = data.toJson()
|
||||
assertTrue(result.contains("fieldA"))
|
||||
assertFalse(result.contains("fieldB"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun writeOnlySerializerDeserializesNormally() {
|
||||
val input = """{"fieldA":"hello","fieldB":"secret"}"""
|
||||
val result = parseJson<WriteOnlyData>(input)
|
||||
assertEquals("hello", result.fieldA)
|
||||
assertEquals("secret", result.fieldB)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun writeOnlySerializerDeserializesMissingAsDefault() {
|
||||
val input = """{"fieldA":"hello"}"""
|
||||
val result = parseJson<WriteOnlyData>(input)
|
||||
assertEquals("hello", result.fieldA)
|
||||
assertEquals("", result.fieldB)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun writeOnlySerializerHandlesMultipleKeys() {
|
||||
val data = MultiWriteOnly(fieldA = "hello", fieldB = "secret1", fieldC = "secret2")
|
||||
val result = data.toJson()
|
||||
assertTrue(result.contains("fieldA"))
|
||||
assertFalse(result.contains("fieldB"))
|
||||
assertFalse(result.contains("fieldC"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun uriSerializerSerializesUriToString() {
|
||||
val data = UriData(uri = Uri.parse("https://example.com/path?query=1"))
|
||||
val result = data.toJson()
|
||||
assertTrue(result.contains("https://example.com/path?query=1"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun uriSerializerDeserializesStringToUri() {
|
||||
val input = """{"uri":"https://example.com/path?query=1"}"""
|
||||
val result = parseJson<UriData>(input)
|
||||
assertEquals(Uri.parse("https://example.com/path?query=1"), result.uri)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun uriSerializerRoundtripsCorrectly() {
|
||||
val data = UriData(uri = Uri.parse("https://example.com/path?query=1"))
|
||||
val encoded = data.toJson()
|
||||
val decoded = parseJson<UriData>(encoded)
|
||||
assertEquals(data.uri, decoded.uri)
|
||||
}
|
||||
}
|
||||
|
|
@ -22,47 +22,6 @@
|
|||
android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||
tools:ignore="QueryAllPackagesPermission" />
|
||||
|
||||
<queries>
|
||||
<!--
|
||||
QUERY_ALL_PACKAGES does not work on some devices running Android 11+ (like Google TV 14),
|
||||
so we must explicitly specify the packages and intent patterns we query to ensure visibility.
|
||||
-->
|
||||
<!-- For external video players -->
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:mimeType="video/*" />
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:mimeType="application/x-mpegURL" />
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:mimeType="application/vnd.apple.mpegurl" />
|
||||
</intent>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:scheme="magnet" />
|
||||
</intent>
|
||||
|
||||
<!-- Common players supported in actions/temp -->
|
||||
<package android:name="org.videolan.vlc" />
|
||||
<package android:name="org.videolan.vlc.debug" />
|
||||
<package android:name="is.xyz.mpv" />
|
||||
<package android:name="is.xyz.mpv.ytdl" />
|
||||
<package android:name="app.marlboroadvance.mpvex" />
|
||||
<package android:name="live.mehiz.mpvkt" />
|
||||
<package android:name="live.mehiz.mpvkt.preview" />
|
||||
<package android:name="com.brouken.player" />
|
||||
<package android:name="dev.anilbeesetti.nextplayer" />
|
||||
<package android:name="com.instantbits.cast.webvideo" />
|
||||
<package android:name="com.gianlu.aria2android" />
|
||||
|
||||
<!-- Torrent clients -->
|
||||
<package android:name="org.proninyaroslav.libretorrent" />
|
||||
<package android:name="com.biglybt.android.client" />
|
||||
</queries>
|
||||
|
||||
<!-- Fixes android tv fuckery -->
|
||||
<uses-feature
|
||||
android:name="android.hardware.touchscreen"
|
||||
|
|
|
|||
|
|
@ -579,10 +579,8 @@ object CommonActivity {
|
|||
|
||||
// TODO: Figure out why removing the check for SearchAutoComplete seems
|
||||
// to break focus on TV as it shouldn't need to be used.
|
||||
// Also handle KEYCODE_ENTER here because some remotes (e.g. LG Magic Remote)
|
||||
// send KEYCODE_ENTER instead of KEYCODE_DPAD_CENTER when clicking the OK button.
|
||||
@SuppressLint("RestrictedApi")
|
||||
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) &&
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER &&
|
||||
(act.currentFocus is SearchView || act.currentFocus is SearchView.SearchAutoComplete)
|
||||
) {
|
||||
showInputMethod(act.currentFocus?.findFocus())
|
||||
|
|
@ -603,4 +601,4 @@ object CommonActivity {
|
|||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -408,10 +408,13 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
|
|||
return true
|
||||
}
|
||||
|
||||
val matchedApi = apis.filter { str.startsWith(it.mainUrl) }.firstOrNull()
|
||||
if (matchedApi != null) {
|
||||
loadResult(str, matchedApi.name, "")
|
||||
return true
|
||||
synchronized(apis) {
|
||||
for (api in apis) {
|
||||
if (str.startsWith(api.mainUrl)) {
|
||||
loadResult(str, api.name, "")
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -806,11 +809,12 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private val pluginsLock = Mutex()
|
||||
private fun onAllPluginsLoaded(success: Boolean = false) {
|
||||
ioSafe {
|
||||
pluginsLock.withLock {
|
||||
allProviders.withLock {
|
||||
synchronized(allProviders) {
|
||||
// Load cloned sites after plugins have been loaded since clones depend on plugins.
|
||||
try {
|
||||
getKey<Array<SettingsGeneral.CustomSite>>(USER_PROVIDER_API)?.let { list ->
|
||||
|
|
@ -1653,7 +1657,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
|
|||
ioSafe {
|
||||
initAll()
|
||||
// No duplicates (which can happen by registerMainAPI)
|
||||
apis = allProviders.distinctBy { it }
|
||||
apis = synchronized(allProviders) {
|
||||
allProviders.distinctBy { it }
|
||||
}
|
||||
}
|
||||
|
||||
// val navView: BottomNavigationView = findViewById(R.id.nav_view)
|
||||
|
|
@ -1961,7 +1967,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener, BiometricCa
|
|||
|
||||
if (BuildConfig.DEBUG) {
|
||||
var providersAndroidManifestString = "Current androidmanifest should be:\n"
|
||||
allProviders.withLock {
|
||||
synchronized(allProviders) {
|
||||
for (api in allProviders) {
|
||||
providersAndroidManifestString += "<data android:scheme=\"https\" android:host=\"${
|
||||
api.mainUrl.removePrefix(
|
||||
|
|
|
|||
|
|
@ -20,10 +20,8 @@ import com.lagradost.cloudstream3.actions.temp.MpvExPackage
|
|||
import com.lagradost.cloudstream3.actions.temp.MpvKtPackage
|
||||
import com.lagradost.cloudstream3.actions.temp.MpvKtPreviewPackage
|
||||
import com.lagradost.cloudstream3.actions.temp.MpvPackage
|
||||
import com.lagradost.cloudstream3.actions.temp.MpvRxPackage
|
||||
import com.lagradost.cloudstream3.actions.temp.MpvYTDLPackage
|
||||
import com.lagradost.cloudstream3.actions.temp.NextPlayerPackage
|
||||
import com.lagradost.cloudstream3.actions.temp.OnlyPlayer
|
||||
import com.lagradost.cloudstream3.actions.temp.PlayInBrowserAction
|
||||
import com.lagradost.cloudstream3.actions.temp.PlayMirrorAction
|
||||
import com.lagradost.cloudstream3.actions.temp.ViewM3U8Action
|
||||
|
|
@ -34,8 +32,8 @@ import com.lagradost.cloudstream3.actions.temp.fcast.FcastAction
|
|||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.ui.result.LinkLoadingResult
|
||||
import com.lagradost.cloudstream3.ui.result.ResultEpisode
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.atomicListOf
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLinkType
|
||||
import com.lagradost.cloudstream3.utils.UiText
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
|
@ -45,7 +43,7 @@ import java.util.concurrent.FutureTask
|
|||
import kotlin.reflect.jvm.jvmName
|
||||
|
||||
object VideoClickActionHolder {
|
||||
val allVideoClickActions = atomicListOf(
|
||||
val allVideoClickActions = threadSafeListOf(
|
||||
// Default
|
||||
PlayInBrowserAction(),
|
||||
CopyClipboardAction(),
|
||||
|
|
@ -66,8 +64,6 @@ object VideoClickActionHolder {
|
|||
MpvYTDLPackage(),
|
||||
MpvKtPackage(),
|
||||
MpvKtPreviewPackage(),
|
||||
OnlyPlayer(),
|
||||
MpvRxPackage(),
|
||||
// Always Ask option
|
||||
AlwaysAskAction(),
|
||||
// added by plugins
|
||||
|
|
|
|||
|
|
@ -1,75 +0,0 @@
|
|||
package com.lagradost.cloudstream3.actions.temp
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.core.net.toUri
|
||||
import com.lagradost.api.Log
|
||||
import com.lagradost.cloudstream3.actions.OpenInAppAction
|
||||
import com.lagradost.cloudstream3.actions.updateDurationAndPosition
|
||||
import com.lagradost.cloudstream3.isEpisodeBased
|
||||
import com.lagradost.cloudstream3.ui.result.LinkLoadingResult
|
||||
import com.lagradost.cloudstream3.ui.result.ResultEpisode
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
|
||||
import com.lagradost.cloudstream3.utils.txt
|
||||
|
||||
/** https://github.com/Riteshp2001/mpvRx
|
||||
*
|
||||
* https://github.com/Riteshp2001/mpvRx/blob/00e0c5e803ab53e5757426cbf2248448ba1f49bf/app/src/main/java/app/gyrolet/mpvrx/utils/media/MediaUtils.kt#L132
|
||||
* https://github.com/Riteshp2001/mpvRx/blob/00e0c5e803ab53e5757426cbf2248448ba1f49bf/app/src/main/java/app/gyrolet/mpvrx/utils/media/MediaUtils.kt#L56
|
||||
* */
|
||||
class MpvRxPackage : OpenInAppAction(
|
||||
appName = txt("mpvRx"),
|
||||
packageName = "app.gyrolet.mpvrx",
|
||||
intentClass = "app.gyrolet.mpvrx.ui.player.PlayerActivity"
|
||||
) {
|
||||
override val oneSource = true
|
||||
override suspend fun putExtra(
|
||||
context: Context,
|
||||
intent: Intent,
|
||||
video: ResultEpisode,
|
||||
result: LinkLoadingResult,
|
||||
index: Int?
|
||||
) {
|
||||
intent.apply {
|
||||
putExtra("title", video.name)
|
||||
val link = result.links[index!!]
|
||||
val headers = link.headers
|
||||
|
||||
setData(link.url.toUri())
|
||||
if (headers.isNotEmpty()) {
|
||||
// PlayerActivity expects a flat array: [key1, value1, key2, value2, ...]
|
||||
val flat = headers.entries.flatMap { listOf(it.key, it.value) }.toTypedArray()
|
||||
intent.putExtra("headers", flat)
|
||||
}
|
||||
/*val subs = result.subs // disabled due to https://github.com/Riteshp2001/mpvRx/issues/146
|
||||
intent.putExtra("subs", subs.map { it.url.toUri() }.toTypedArray())
|
||||
intent.putExtra(
|
||||
"subs.titles",
|
||||
subs.map { it.name }.toTypedArray(),
|
||||
)
|
||||
intent.putExtra(
|
||||
"subs.langs",
|
||||
subs.map { it.languageCode }.toTypedArray(),
|
||||
)
|
||||
val selected = subs.firstOrNull { it.matchesLanguageCode("en") }?.url?.toUri()
|
||||
intent.putExtra("subs.enable", selected?.let { arrayOf(it) } ?: arrayOf<Uri>() )*/
|
||||
|
||||
if (video.tvType.isEpisodeBased()) {
|
||||
video.season?.let { intent.putExtra("introdb_season", it) }
|
||||
video.episode.let { intent.putExtra("introdb_episode", it) }
|
||||
}
|
||||
|
||||
val position = getViewPos(video.id)?.position
|
||||
if (position != null)
|
||||
putExtra("position", position.toInt())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResult(activity: Activity, intent: Intent?) {
|
||||
val position = intent?.getIntExtra("position", -1) ?: -1
|
||||
val duration = intent?.getIntExtra("duration", -1) ?: -1
|
||||
Log.d("MPV", "Position: $position, Duration: $duration")
|
||||
updateDurationAndPosition(position.toLong(), duration.toLong())
|
||||
}
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
package com.lagradost.cloudstream3.actions.temp
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.core.net.toUri
|
||||
import com.lagradost.cloudstream3.actions.OpenInAppAction
|
||||
import com.lagradost.cloudstream3.ui.result.LinkLoadingResult
|
||||
import com.lagradost.cloudstream3.ui.result.ResultEpisode
|
||||
import com.lagradost.cloudstream3.utils.txt
|
||||
|
||||
/** https://github.com/Kindness-Kismet/only_player/tree/main
|
||||
* https://github.com/Kindness-Kismet/only_player/blob/main/feature/player/src/main/java/one/only/player/feature/player/PlayerActivity.kt */
|
||||
class OnlyPlayer : OpenInAppAction(
|
||||
txt("Only Player"),
|
||||
"one.only.player",
|
||||
intentClass = "one.only.player.feature.player.PlayerActivity"
|
||||
) {
|
||||
override val oneSource = true
|
||||
override suspend fun putExtra(
|
||||
context: Context,
|
||||
intent: Intent,
|
||||
video: ResultEpisode,
|
||||
result: LinkLoadingResult,
|
||||
index: Int?
|
||||
) {
|
||||
/** https://github.com/Kindness-Kismet/only_player/blob/d3f55049a2913fa762d31b311146073cc2da46cb/app/src/main/java/one/only/player/navigation/CloudNavGraph.kt#L39 */
|
||||
intent.apply {
|
||||
val link = result.links[index!!]
|
||||
setData(link.url.toUri())
|
||||
|
||||
putExtra("headers", Bundle().apply {
|
||||
for ((key, value) in link.headers) {
|
||||
putExtra(key, value)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResult(activity: Activity, intent: Intent?) {
|
||||
/* onResult does not get called */
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ import com.lagradost.cloudstream3.actions.VideoClickAction
|
|||
import com.lagradost.cloudstream3.actions.VideoClickActionHolder
|
||||
import kotlin.Throws
|
||||
|
||||
|
||||
abstract class Plugin : BasePlugin() {
|
||||
/**
|
||||
* Called when your Plugin is loaded
|
||||
|
|
@ -25,7 +26,9 @@ abstract class Plugin : BasePlugin() {
|
|||
fun registerVideoClickAction(element: VideoClickAction) {
|
||||
Log.i(PLUGIN_TAG, "Adding ${element.name} VideoClickAction")
|
||||
element.sourcePlugin = this.filename
|
||||
VideoClickActionHolder.allVideoClickActions.add(element)
|
||||
synchronized(VideoClickActionHolder.allVideoClickActions) {
|
||||
VideoClickActionHolder.allVideoClickActions.add(element)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -37,4 +40,4 @@ abstract class Plugin : BasePlugin() {
|
|||
* This will add a button in the settings allowing you to add custom settings
|
||||
*/
|
||||
var openSettings: ((context: Context) -> Unit)? = null
|
||||
}
|
||||
}
|
||||
|
|
@ -610,7 +610,7 @@ object PluginManager {
|
|||
return false
|
||||
}
|
||||
InputStreamReader(stream).use { reader ->
|
||||
manifest = parseJson<BasePlugin.Manifest>(reader.readText())
|
||||
manifest = parseJson(reader, BasePlugin.Manifest::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -651,15 +651,9 @@ object PluginManager {
|
|||
context.resources.configuration
|
||||
)
|
||||
}
|
||||
synchronized(plugins) {
|
||||
plugins[filePath] = pluginInstance
|
||||
}
|
||||
synchronized(classLoaders) {
|
||||
classLoaders[loader] = pluginInstance
|
||||
}
|
||||
synchronized(urlPlugins) {
|
||||
urlPlugins[data.url ?: filePath] = pluginInstance
|
||||
}
|
||||
plugins[filePath] = pluginInstance
|
||||
classLoaders[loader] = pluginInstance
|
||||
urlPlugins[data.url ?: filePath] = pluginInstance
|
||||
if (pluginInstance is Plugin) {
|
||||
pluginInstance.load(context)
|
||||
} else {
|
||||
|
|
@ -695,20 +689,21 @@ object PluginManager {
|
|||
}
|
||||
|
||||
// remove all registered apis
|
||||
APIHolder.apis.filter { api -> api.sourcePlugin == plugin.filename }.forEach {
|
||||
removePluginMapping(it)
|
||||
synchronized(APIHolder.apis) {
|
||||
APIHolder.apis.filter { api -> api.sourcePlugin == plugin.filename }.forEach {
|
||||
removePluginMapping(it)
|
||||
}
|
||||
}
|
||||
synchronized(APIHolder.allProviders) {
|
||||
APIHolder.allProviders.removeIf { provider: MainAPI -> provider.sourcePlugin == plugin.filename }
|
||||
}
|
||||
|
||||
APIHolder.allProviders.withLock {
|
||||
APIHolder.allProviders.removeAll { provider -> provider.sourcePlugin == plugin.filename }
|
||||
synchronized(extractorApis) {
|
||||
extractorApis.removeIf { provider: ExtractorApi -> provider.sourcePlugin == plugin.filename }
|
||||
}
|
||||
|
||||
extractorApis.withLock {
|
||||
extractorApis.removeAll { provider -> provider.sourcePlugin == plugin.filename }
|
||||
}
|
||||
|
||||
VideoClickActionHolder.allVideoClickActions.withLock {
|
||||
VideoClickActionHolder.allVideoClickActions.removeAll { action -> action.sourcePlugin == plugin.filename }
|
||||
synchronized(VideoClickActionHolder.allVideoClickActions) {
|
||||
VideoClickActionHolder.allVideoClickActions.removeIf { action: VideoClickAction -> action.sourcePlugin == plugin.filename }
|
||||
}
|
||||
|
||||
synchronized(classLoaders) {
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ import kotlinx.coroutines.delay
|
|||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.debounce
|
||||
import kotlinx.coroutines.flow.takeWhile
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.flow.updateAndGet
|
||||
|
|
@ -187,16 +186,6 @@ class DownloadQueueService : Service() {
|
|||
debugAssert({ timeTaken == null }, { "Downloader startup should not time out" })
|
||||
|
||||
totalDownloadFlow
|
||||
.debounce { (instances, queue) ->
|
||||
// Filter away incorrect transient queue states.
|
||||
// For example when we pop the queue and add a download instance there exists a transient state where
|
||||
// there is no queue and no download instances (leading to an early exit)
|
||||
if (instances.isEmpty() && queue.isEmpty()) {
|
||||
500.milliseconds
|
||||
} else {
|
||||
0.milliseconds
|
||||
}
|
||||
}
|
||||
.takeWhile { (instances, queue) ->
|
||||
// Stop if destroyed
|
||||
isRunning
|
||||
|
|
|
|||
|
|
@ -36,9 +36,11 @@ import com.lagradost.cloudstream3.syncproviders.providers.SubSourceApi
|
|||
import com.lagradost.cloudstream3.ui.SyncWatchType
|
||||
import com.lagradost.cloudstream3.ui.library.ListSorting
|
||||
import com.lagradost.cloudstream3.utils.AppContextUtils.splitQuery
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||
import com.lagradost.cloudstream3.utils.UiText
|
||||
import com.lagradost.cloudstream3.utils.txt
|
||||
import me.xdrop.fuzzywuzzy.FuzzySearch
|
||||
import java.net.URL
|
||||
import java.security.SecureRandom
|
||||
import java.util.Date
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.lagradost.cloudstream3.ErrorLoadingException
|
|||
import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities.SubtitleEntity
|
||||
import com.lagradost.cloudstream3.subtitles.AbstractSubtitleEntities.SubtitleSearch
|
||||
import com.lagradost.cloudstream3.subtitles.SubtitleResource
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.atomicListOf
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf
|
||||
|
||||
/** Stateless safe abstraction of SubtitleAPI */
|
||||
class SubtitleRepo(override val api: SubtitleAPI) : AuthRepo(api) {
|
||||
|
|
@ -24,30 +24,26 @@ class SubtitleRepo(override val api: SubtitleAPI) : AuthRepo(api) {
|
|||
)
|
||||
|
||||
// maybe make this a generic struct? right now there is a lot of boilerplate
|
||||
private val searchCache = atomicListOf<SavedSearchResponse>()
|
||||
private val searchCache = threadSafeListOf<SavedSearchResponse>()
|
||||
private var searchCacheIndex: Int = 0
|
||||
private val resourceCache = atomicListOf<SavedResourceResponse>()
|
||||
private val resourceCache = threadSafeListOf<SavedResourceResponse>()
|
||||
private var resourceCacheIndex: Int = 0
|
||||
const val CACHE_SIZE = 20
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
suspend fun resource(data: SubtitleEntity): Result<SubtitleResource> = runCatching {
|
||||
val cached = resourceCache.withLock {
|
||||
var found: SubtitleResource? = null
|
||||
synchronized(resourceCache) {
|
||||
for (item in resourceCache) {
|
||||
// 20 min save
|
||||
if (item.query == data && (unixTime - item.unixTime) < 60 * 20) {
|
||||
found = item.response
|
||||
break
|
||||
return@runCatching item.response
|
||||
}
|
||||
}
|
||||
found
|
||||
}
|
||||
if (cached != null) return@runCatching cached
|
||||
|
||||
val returnValue = api.resource(freshAuth(), data)
|
||||
resourceCache.withLock {
|
||||
synchronized(resourceCache) {
|
||||
val add = SavedResourceResponse(unixTime, returnValue, data)
|
||||
if (resourceCache.size > CACHE_SIZE) {
|
||||
resourceCache[resourceCacheIndex] = add // rolling cache
|
||||
|
|
@ -62,25 +58,22 @@ class SubtitleRepo(override val api: SubtitleAPI) : AuthRepo(api) {
|
|||
@WorkerThread
|
||||
suspend fun search(query: SubtitleSearch): Result<List<SubtitleEntity>> {
|
||||
return runCatching {
|
||||
val cached = searchCache.withLock {
|
||||
var found: List<SubtitleEntity>? = null
|
||||
synchronized(searchCache) {
|
||||
for (item in searchCache) {
|
||||
// 120 min save
|
||||
if (item.query == query && (unixTime - item.unixTime) < 60 * 120) {
|
||||
found = item.response
|
||||
break
|
||||
return@runCatching item.response
|
||||
}
|
||||
}
|
||||
found
|
||||
}
|
||||
|
||||
if (cached != null) return@runCatching cached
|
||||
val returnValue = api.search(freshAuth(), query) ?: emptyList()
|
||||
val returnValue =
|
||||
api.search(freshAuth(), query) ?: emptyList()
|
||||
|
||||
// only cache valid return values
|
||||
if (returnValue.isNotEmpty()) {
|
||||
val add = SavedSearchResponse(unixTime, returnValue, query)
|
||||
searchCache.withLock {
|
||||
synchronized(searchCache) {
|
||||
if (searchCache.size > CACHE_SIZE) {
|
||||
searchCache[searchCacheIndex] = add // rolling cache
|
||||
searchCacheIndex = (searchCacheIndex + 1) % CACHE_SIZE
|
||||
|
|
@ -93,3 +86,4 @@ class SubtitleRepo(override val api: SubtitleAPI) : AuthRepo(api) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ import com.lagradost.cloudstream3.ShowStatus
|
|||
import com.lagradost.cloudstream3.TvType
|
||||
import com.lagradost.cloudstream3.ui.SyncWatchType
|
||||
import com.lagradost.cloudstream3.ui.library.ListSorting
|
||||
import com.lagradost.cloudstream3.utils.Levenshtein
|
||||
import com.lagradost.cloudstream3.utils.UiText
|
||||
import me.xdrop.fuzzywuzzy.FuzzySearch
|
||||
import java.util.Date
|
||||
|
||||
/**
|
||||
|
|
@ -138,7 +138,7 @@ abstract class SyncAPI : AuthAPI() {
|
|||
ListSorting.Query ->
|
||||
if (query != null) {
|
||||
items.sortedBy {
|
||||
-Levenshtein.partialRatio(
|
||||
-FuzzySearch.partialRatio(
|
||||
query.lowercase(), it.name.lowercase()
|
||||
)
|
||||
}
|
||||
|
|
@ -191,4 +191,4 @@ abstract class SyncAPI : AuthAPI() {
|
|||
override var score: Score? = null,
|
||||
val tags: List<String>? = null
|
||||
) : SearchResponse
|
||||
}
|
||||
}
|
||||
|
|
@ -50,8 +50,7 @@ class AniListApi : SyncAPI() {
|
|||
override suspend fun login(redirectUrl: String, payload: String?): AuthToken? {
|
||||
val sanitizer = splitRedirectUrl(redirectUrl)
|
||||
val token = AuthToken(
|
||||
accessToken = sanitizer["access_token"]
|
||||
?: throw ErrorLoadingException("No access token"),
|
||||
accessToken = sanitizer["access_token"] ?: throw ErrorLoadingException("No access token"),
|
||||
//refreshToken = sanitizer["refresh_token"],
|
||||
accessTokenLifetime = unixTime + sanitizer["expires_in"]!!.toLong(),
|
||||
)
|
||||
|
|
@ -84,8 +83,8 @@ class AniListApi : SyncAPI() {
|
|||
return "$mainUrl/anime/$id"
|
||||
}
|
||||
|
||||
override suspend fun search(auth: AuthData?, query: String): List<SyncAPI.SyncSearchResult>? {
|
||||
val data = searchShows(query) ?: return null
|
||||
override suspend fun search(auth : AuthData?, query: String): List<SyncAPI.SyncSearchResult>? {
|
||||
val data = searchShows(name) ?: return null
|
||||
return data.data?.page?.media?.map {
|
||||
SyncAPI.SyncSearchResult(
|
||||
it.title.romaji ?: return null,
|
||||
|
|
@ -97,7 +96,7 @@ class AniListApi : SyncAPI() {
|
|||
}
|
||||
}
|
||||
|
||||
override suspend fun load(auth: AuthData?, id: String): SyncAPI.SyncResult? {
|
||||
override suspend fun load(auth : AuthData?, id: String): SyncAPI.SyncResult? {
|
||||
val internalId = (Regex("anilist\\.co/anime/(\\d*)").find(id)?.groupValues?.getOrNull(1)
|
||||
?: id).toIntOrNull() ?: throw ErrorLoadingException("Invalid internalId")
|
||||
val season = getSeason(internalId).data.media
|
||||
|
|
@ -159,7 +158,7 @@ class AniListApi : SyncAPI() {
|
|||
)
|
||||
}
|
||||
|
||||
override suspend fun status(auth: AuthData?, id: String): SyncAPI.AbstractSyncStatus? {
|
||||
override suspend fun status(auth : AuthData?, id: String): SyncAPI.AbstractSyncStatus? {
|
||||
val internalId = id.toIntOrNull() ?: return null
|
||||
val data = getDataAboutId(auth ?: return null, internalId) ?: return null
|
||||
|
||||
|
|
@ -460,7 +459,7 @@ class AniListApi : SyncAPI() {
|
|||
}
|
||||
}
|
||||
|
||||
private suspend fun getDataAboutId(auth: AuthData, id: Int): AniListTitleHolder? {
|
||||
private suspend fun getDataAboutId(auth : AuthData, id: Int): AniListTitleHolder? {
|
||||
val q =
|
||||
"""query (${'$'}id: Int = $id) { # Define which variables will be used in the query (id)
|
||||
Media (id: ${'$'}id, type: ANIME) { # Insert our variables into the query arguments (id) (type: ANIME is hard-coded in the query)
|
||||
|
|
@ -507,7 +506,7 @@ class AniListApi : SyncAPI() {
|
|||
|
||||
}
|
||||
|
||||
private suspend fun postApi(token: AuthToken, q: String, cache: Boolean = false): String? {
|
||||
private suspend fun postApi(token : AuthToken, q: String, cache: Boolean = false): String? {
|
||||
return app.post(
|
||||
"https://graphql.anilist.co/",
|
||||
headers = mapOf(
|
||||
|
|
@ -639,7 +638,7 @@ class AniListApi : SyncAPI() {
|
|||
}
|
||||
}
|
||||
|
||||
override suspend fun library(auth: AuthData?): SyncAPI.LibraryMetadata? {
|
||||
override suspend fun library(auth : AuthData?): SyncAPI.LibraryMetadata? {
|
||||
val list = getAniListAnimeListSmart(auth ?: return null)?.groupBy {
|
||||
convertAniListStringToStatus(it.status ?: "").stringRes
|
||||
}?.mapValues { group ->
|
||||
|
|
@ -667,7 +666,7 @@ class AniListApi : SyncAPI() {
|
|||
)
|
||||
}
|
||||
|
||||
private suspend fun getFullAniListList(auth: AuthData): FullAnilistList? {
|
||||
private suspend fun getFullAniListList(auth : AuthData): FullAnilistList? {
|
||||
val userID = auth.user.id
|
||||
val mediaType = "ANIME"
|
||||
|
||||
|
|
@ -715,7 +714,7 @@ class AniListApi : SyncAPI() {
|
|||
return text?.toKotlinObject()
|
||||
}
|
||||
|
||||
suspend fun toggleLike(auth: AuthData, id: Int): Boolean {
|
||||
suspend fun toggleLike(auth : AuthData, id: Int): Boolean {
|
||||
val q = """mutation (${'$'}animeId: Int = $id) {
|
||||
ToggleFavourite (animeId: ${'$'}animeId) {
|
||||
anime {
|
||||
|
|
@ -738,7 +737,7 @@ class AniListApi : SyncAPI() {
|
|||
data class MediaListId(@JsonProperty("id") val id: Long? = null)
|
||||
|
||||
private suspend fun postDataAboutId(
|
||||
auth: AuthData,
|
||||
auth : AuthData,
|
||||
id: Int,
|
||||
type: AniListStatusType,
|
||||
score: Score?,
|
||||
|
|
@ -787,7 +786,7 @@ class AniListApi : SyncAPI() {
|
|||
return data != ""
|
||||
}
|
||||
|
||||
private suspend fun getUser(token: AuthToken): AniListUser? {
|
||||
private suspend fun getUser(token : AuthToken): AniListUser? {
|
||||
val q = """
|
||||
{
|
||||
Viewer {
|
||||
|
|
|
|||
|
|
@ -27,8 +27,9 @@ import okhttp3.Request
|
|||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import okhttp3.Response
|
||||
import java.text.SimpleDateFormat
|
||||
import java.time.Instant
|
||||
import java.time.LocalDate
|
||||
import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
|
||||
|
|
@ -201,7 +202,7 @@ class KitsuApi: SyncAPI() {
|
|||
id = id,
|
||||
totalEpisodes = anime.episodeCount,
|
||||
title = anime.canonicalTitle ?: anime.titles?.enJp ?: anime.titles?.jaJp.orEmpty(),
|
||||
publicScore = Score.from(anime.ratingTwenty, 20),
|
||||
publicScore = Score.from(anime.ratingTwenty.toString(), 20),
|
||||
duration = anime.episodeLength,
|
||||
synopsis = anime.synopsis,
|
||||
airStatus = when(anime.status) {
|
||||
|
|
@ -249,7 +250,7 @@ class KitsuApi: SyncAPI() {
|
|||
}
|
||||
|
||||
return SyncStatus(
|
||||
score = Score.from(anime.ratingTwenty, 20),
|
||||
score = Score.from(anime.ratingTwenty.toString(), 20),
|
||||
status = SyncWatchType.fromInternalId(kitsuStatusAsString.indexOf(anime.status)),
|
||||
isFavorite = null,
|
||||
watchedEpisodes = anime.progress,
|
||||
|
|
@ -453,8 +454,8 @@ class KitsuApi: SyncAPI() {
|
|||
|
||||
private suspend fun getKitsuAnimeList(token: AuthToken, userId: Int): Array<KitsuNode> {
|
||||
|
||||
val animeSelectedFields = arrayOf("titles","canonicalTitle","posterImage","synopsis","startDate","endDate","episodeCount")
|
||||
val libraryEntriesSelectedFields = arrayOf("progress","ratingTwenty","updatedAt", "status")
|
||||
val animeSelectedFields = arrayOf("titles","canonicalTitle","posterImage","synopsis","startDate","episodeCount")
|
||||
val libraryEntriesSelectedFields = arrayOf("progress","rating","updatedAt", "status")
|
||||
val limit = 500
|
||||
var url = "$apiUrl/library-entries?filter[userId]=$userId&filter[kind]=anime&include=anime&page[limit]=$limit&page[offset]=0&fields[anime]=${animeSelectedFields.joinToString(",")}&fields[libraryEntries]=${libraryEntriesSelectedFields.joinToString(",")}"
|
||||
|
||||
|
|
@ -525,7 +526,7 @@ class KitsuApi: SyncAPI() {
|
|||
this.id,
|
||||
this.attributes.progress,
|
||||
numEpisodes,
|
||||
Score.from(this.attributes.ratingTwenty, 20),
|
||||
Score.from(this.attributes.ratingTwenty.toString(), 20),
|
||||
parseDateLong(this.attributes.updatedAt),
|
||||
"Kitsu",
|
||||
TvType.Anime,
|
||||
|
|
@ -534,9 +535,12 @@ class KitsuApi: SyncAPI() {
|
|||
null,
|
||||
plot = synopsis,
|
||||
releaseDate = if (startDate == null) null else try {
|
||||
Date.from(LocalDate.parse(startDate).atStartOfDay()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toInstant())
|
||||
Date.from(
|
||||
Instant.from(
|
||||
DateTimeFormatter.ofPattern(if (startDate.length == 4) "yyyy" else if (startDate.length == 7) "yyyy-MM" else "yyyy-MM-dd")
|
||||
.parse(startDate)
|
||||
)
|
||||
)
|
||||
} catch (_: RuntimeException) {
|
||||
null
|
||||
}
|
||||
|
|
@ -579,7 +583,7 @@ class KitsuApi: SyncAPI() {
|
|||
@JsonProperty("avatar") val avatar: KitsuUserAvatar?,
|
||||
/* User list anime attributes */
|
||||
@JsonProperty("progress") val progress: Int?,
|
||||
@JsonProperty("ratingTwenty") val ratingTwenty: Int?,
|
||||
@JsonProperty("ratingTwenty") val ratingTwenty: Float?,
|
||||
@JsonProperty("updatedAt") val updatedAt: String?,
|
||||
@JsonProperty("status") val status: String?,
|
||||
)
|
||||
|
|
@ -628,7 +632,7 @@ class KitsuApi: SyncAPI() {
|
|||
const val KITSU_CACHED_LIST: String = "kitsu_cached_list"
|
||||
private fun parseDateLong(string: String?): Long? {
|
||||
return try {
|
||||
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault()).parse(
|
||||
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()).parse(
|
||||
string ?: return null
|
||||
)?.time?.div(1000)
|
||||
} catch (e: Exception) {
|
||||
|
|
|
|||
|
|
@ -98,9 +98,9 @@ class MALApi : SyncAPI() {
|
|||
)
|
||||
}
|
||||
|
||||
override suspend fun search(auth: AuthData?, query: String): List<SyncAPI.SyncSearchResult>? {
|
||||
override suspend fun search(auth : AuthData?, query: String): List<SyncAPI.SyncSearchResult>? {
|
||||
val auth = auth?.token?.accessToken ?: return null
|
||||
val url = "$apiUrl/v2/anime?q=$query&limit=$MAL_MAX_SEARCH_LIMIT"
|
||||
val url = "$apiUrl/v2/anime?q=$name&limit=$MAL_MAX_SEARCH_LIMIT"
|
||||
val res = app.get(
|
||||
url, headers = mapOf(
|
||||
"Authorization" to "Bearer $auth",
|
||||
|
|
@ -122,7 +122,7 @@ class MALApi : SyncAPI() {
|
|||
Regex("""/anime/((.*)/|(.*))""").find(url)!!.groupValues.first()
|
||||
|
||||
override suspend fun updateStatus(
|
||||
auth: AuthData?,
|
||||
auth : AuthData?,
|
||||
id: String,
|
||||
newStatus: SyncAPI.AbstractSyncStatus
|
||||
): Boolean {
|
||||
|
|
@ -225,7 +225,7 @@ class MALApi : SyncAPI() {
|
|||
)
|
||||
}
|
||||
|
||||
override suspend fun load(auth: AuthData?, id: String): SyncAPI.SyncResult? {
|
||||
override suspend fun load(auth : AuthData?, id: String): SyncAPI.SyncResult? {
|
||||
val auth = auth?.token?.accessToken ?: return null
|
||||
val internalId = id.toIntOrNull() ?: return null
|
||||
val url =
|
||||
|
|
@ -271,7 +271,7 @@ class MALApi : SyncAPI() {
|
|||
}
|
||||
}
|
||||
|
||||
override suspend fun status(auth: AuthData?, id: String): SyncAPI.AbstractSyncStatus? {
|
||||
override suspend fun status(auth : AuthData?, id: String): SyncAPI.AbstractSyncStatus? {
|
||||
val auth = auth?.token?.accessToken ?: return null
|
||||
|
||||
// https://myanimelist.net/apiconfig/references/api/v2#operation/anime_anime_id_get
|
||||
|
|
@ -477,7 +477,7 @@ class MALApi : SyncAPI() {
|
|||
@JsonProperty("start_time") val startTime: String?
|
||||
)
|
||||
|
||||
override suspend fun library(auth: AuthData?): LibraryMetadata? {
|
||||
override suspend fun library(auth : AuthData?): LibraryMetadata? {
|
||||
val list = getMalAnimeListSmart(auth ?: return null)?.groupBy {
|
||||
convertToStatus(it.listStatus?.status ?: "").stringRes
|
||||
}?.mapValues { group ->
|
||||
|
|
@ -505,7 +505,7 @@ class MALApi : SyncAPI() {
|
|||
)
|
||||
}
|
||||
|
||||
private suspend fun getMalAnimeListSmart(auth: AuthData): Array<Data>? {
|
||||
private suspend fun getMalAnimeListSmart(auth : AuthData): Array<Data>? {
|
||||
return if (requireLibraryRefresh) {
|
||||
val list = getMalAnimeList(auth.token)
|
||||
setKey(MAL_CACHED_LIST, auth.user.id.toString(), list)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import com.lagradost.cloudstream3.Score
|
|||
import com.lagradost.cloudstream3.SimklSyncServices
|
||||
import com.lagradost.cloudstream3.TvType
|
||||
import com.lagradost.cloudstream3.app
|
||||
import com.lagradost.cloudstream3.mapper
|
||||
import com.lagradost.cloudstream3.mvvm.debugPrint
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.APP_STRING
|
||||
|
|
@ -29,7 +30,6 @@ import com.lagradost.cloudstream3.syncproviders.SyncIdName
|
|||
import com.lagradost.cloudstream3.ui.SyncWatchType
|
||||
import com.lagradost.cloudstream3.ui.library.ListSorting
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.toYear
|
||||
import com.lagradost.cloudstream3.utils.txt
|
||||
import java.math.BigInteger
|
||||
|
|
@ -117,8 +117,13 @@ class SimklApi : SyncAPI() {
|
|||
* Gets cached object, if object is not fresh returns null and removes it from cache
|
||||
*/
|
||||
inline fun <reified T : Any> getKey(path: String): T? {
|
||||
// Required for generic otherwise "LinkedHashMap cannot be cast to MediaObject"
|
||||
val type = mapper.typeFactory.constructParametricType(
|
||||
SimklCacheWrapper::class.java,
|
||||
T::class.java
|
||||
)
|
||||
val cache = getKey<String>(SIMKL_CACHE_KEY, path)?.let {
|
||||
tryParseJson<SimklCacheWrapper<T>>(it)
|
||||
mapper.readValue<SimklCacheWrapper<T>>(it, type)
|
||||
}
|
||||
|
||||
return if (cache?.isFresh() == true) {
|
||||
|
|
@ -911,7 +916,7 @@ class SimklApi : SyncAPI() {
|
|||
|
||||
override suspend fun search(auth: AuthData?, query: String): List<SyncAPI.SyncSearchResult>? {
|
||||
return app.get(
|
||||
"$mainUrl/search/", params = mapOf("client_id" to CLIENT_ID, "q" to query)
|
||||
"$mainUrl/search/", params = mapOf("client_id" to CLIENT_ID, "q" to name)
|
||||
).parsedSafe<Array<MediaObject>>()?.mapNotNull { it.toSyncSearchResult() }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import com.lagradost.cloudstream3.mvvm.Resource
|
|||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.mvvm.safeApiCall
|
||||
import com.lagradost.cloudstream3.newSearchResponseList
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.atomicListOf
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.async
|
||||
|
|
@ -55,7 +55,7 @@ class APIRepository(val api: MainAPI) {
|
|||
val hash: Pair<String, String>
|
||||
)
|
||||
|
||||
private val cache = atomicListOf<SavedLoadResponse>()
|
||||
private val cache = threadSafeListOf<SavedLoadResponse>()
|
||||
private var cacheIndex: Int = 0
|
||||
const val CACHE_SIZE = 20
|
||||
|
||||
|
|
@ -66,7 +66,9 @@ class APIRepository(val api: MainAPI) {
|
|||
|
||||
private fun afterPluginsLoaded(forceReload: Boolean) {
|
||||
if (forceReload) {
|
||||
cache.clear()
|
||||
synchronized(cache) {
|
||||
cache.clear()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -89,25 +91,21 @@ class APIRepository(val api: MainAPI) {
|
|||
val fixedUrl = api.fixUrl(url)
|
||||
val lookingForHash = Pair(api.name, fixedUrl)
|
||||
|
||||
val cached = cache.withLock {
|
||||
var found: LoadResponse? = null
|
||||
synchronized(cache) {
|
||||
for (item in cache) {
|
||||
// 10 min save
|
||||
if (item.hash == lookingForHash && (unixTime - item.unixTime) < 60 * 10) {
|
||||
found = item.response
|
||||
break
|
||||
return@withTimeout item.response
|
||||
}
|
||||
}
|
||||
found
|
||||
}
|
||||
|
||||
if (cached != null) return@withTimeout cached
|
||||
api.load(fixedUrl)?.also { response ->
|
||||
// Remove all blank tags as early as possible
|
||||
response.tags = response.tags?.filter { it.isNotBlank() }
|
||||
val add = SavedLoadResponse(unixTime, response, lookingForHash)
|
||||
|
||||
cache.withLock {
|
||||
synchronized(cache) {
|
||||
if (cache.size > CACHE_SIZE) {
|
||||
cache[cacheIndex] = add // rolling cache
|
||||
cacheIndex = (cacheIndex + 1) % CACHE_SIZE
|
||||
|
|
@ -217,4 +215,4 @@ class APIRepository(val api: MainAPI) {
|
|||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,9 @@ import android.widget.ImageView
|
|||
import android.widget.LinearLayout
|
||||
import android.widget.ListView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||
import com.fasterxml.jackson.databind.json.JsonMapper
|
||||
import com.fasterxml.jackson.module.kotlin.kotlinModule
|
||||
import com.google.android.gms.cast.MediaLoadOptions
|
||||
import com.google.android.gms.cast.MediaQueueItem
|
||||
import com.google.android.gms.cast.MediaSeekOptions
|
||||
|
|
@ -102,6 +105,9 @@ data class MetadataHolder(
|
|||
|
||||
class SelectSourceController(val view: ImageView, val activity: ControllerActivity) :
|
||||
UIController() {
|
||||
private val mapper: JsonMapper = JsonMapper.builder().addModule(kotlinModule())
|
||||
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).build()
|
||||
|
||||
init {
|
||||
view.setImageResource(R.drawable.ic_baseline_playlist_play_24)
|
||||
view.setOnClickListener {
|
||||
|
|
@ -443,4 +449,4 @@ class ControllerActivity : ExpandedControllerActivity() {
|
|||
SkipNextEpisodeController(skipOpButton)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -133,7 +133,7 @@ class HomeViewModel : ViewModel() {
|
|||
private var currentShuffledList: List<SearchResponse> = listOf()
|
||||
|
||||
private fun autoloadRepo(): APIRepository {
|
||||
return APIRepository(apis.withLock { apis.first { it.hasMainPage } })
|
||||
return APIRepository(synchronized(apis) { apis.first { it.hasMainPage } })
|
||||
}
|
||||
|
||||
private val _availableWatchStatusTypes =
|
||||
|
|
|
|||
|
|
@ -210,13 +210,14 @@ class LibraryFragment : BaseFragment<FragmentLibraryBinding>(
|
|||
syncId: SyncIdName,
|
||||
apiName: String? = null,
|
||||
) {
|
||||
val availableProviders = allProviders.filter {
|
||||
it.supportedSyncNames.contains(syncId)
|
||||
}.map { it.name } +
|
||||
// Add the api if it exists
|
||||
(APIHolder.getApiFromNameNull(apiName)?.let { listOf(it.name) }
|
||||
?: emptyList())
|
||||
|
||||
val availableProviders = synchronized(allProviders) {
|
||||
allProviders.filter {
|
||||
it.supportedSyncNames.contains(syncId)
|
||||
}.map { it.name } +
|
||||
// Add the api if it exists
|
||||
(APIHolder.getApiFromNameNull(apiName)?.let { listOf(it.name) }
|
||||
?: emptyList())
|
||||
}
|
||||
val baseOptions = listOf(
|
||||
LibraryOpenerType.Default,
|
||||
LibraryOpenerType.None,
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle
|
|||
import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.applyStyle
|
||||
import com.lagradost.cloudstream3.utils.AppContextUtils.isUsingMobileData
|
||||
import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus
|
||||
import com.lagradost.cloudstream3.utils.CLEARKEY_DRM_UUID
|
||||
import com.lagradost.cloudstream3.utils.CLEARKEY_UUID
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.currentAccount
|
||||
|
|
@ -104,9 +104,9 @@ import com.lagradost.cloudstream3.utils.DrmExtractorLink
|
|||
import com.lagradost.cloudstream3.utils.ExtractorLink
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLinkPlayList
|
||||
import com.lagradost.cloudstream3.utils.ExtractorLinkType
|
||||
import com.lagradost.cloudstream3.utils.PLAYREADY_DRM_UUID
|
||||
import com.lagradost.cloudstream3.utils.PLAYREADY_UUID
|
||||
import com.lagradost.cloudstream3.utils.SubtitleHelper.fromTagToLanguageName
|
||||
import com.lagradost.cloudstream3.utils.WIDEVINE_DRM_UUID
|
||||
import com.lagradost.cloudstream3.utils.WIDEVINE_UUID
|
||||
import com.lagradost.cloudstream3.utils.videoskip.VideoSkipStamp
|
||||
import kotlinx.coroutines.delay
|
||||
import okhttp3.Interceptor
|
||||
|
|
@ -118,7 +118,6 @@ import java.util.concurrent.Executors
|
|||
import javax.net.ssl.HttpsURLConnection
|
||||
import javax.net.ssl.SSLContext
|
||||
import javax.net.ssl.SSLSession
|
||||
import kotlin.uuid.toJavaUuid
|
||||
|
||||
const val TAG = "CS3ExoPlayer"
|
||||
const val PREFERRED_AUDIO_LANGUAGE_KEY = "preferred_audio_language"
|
||||
|
|
@ -1279,7 +1278,7 @@ class CS3IPlayer : IPlayer {
|
|||
|
||||
item.drm?.let { drm ->
|
||||
when (drm.uuid) {
|
||||
CLEARKEY_DRM_UUID.toJavaUuid() -> {
|
||||
CLEARKEY_UUID -> {
|
||||
// Use headers from DrmMetadata for media requests
|
||||
val client = dataSourceFactory
|
||||
?: throw IllegalArgumentException("Must supply onlineSource")
|
||||
|
|
@ -1300,8 +1299,8 @@ class CS3IPlayer : IPlayer {
|
|||
.createMediaSource(item.mediaItem)
|
||||
}
|
||||
|
||||
WIDEVINE_DRM_UUID.toJavaUuid(),
|
||||
PLAYREADY_DRM_UUID.toJavaUuid() -> {
|
||||
WIDEVINE_UUID,
|
||||
PLAYREADY_UUID -> {
|
||||
// Use headers from DrmMetadata for media requests
|
||||
val client = dataSourceFactory
|
||||
?: throw IllegalArgumentException("Must supply onlineSource")
|
||||
|
|
@ -1915,7 +1914,7 @@ class CS3IPlayer : IPlayer {
|
|||
drm = DrmMetadata(
|
||||
kid = link.kid,
|
||||
key = link.key,
|
||||
uuid = link.uuid.toJavaUuid(),
|
||||
uuid = link.uuid,
|
||||
kty = link.kty,
|
||||
licenseUrl = link.licenseUrl,
|
||||
keyRequestParameters = link.keyRequestParameters,
|
||||
|
|
|
|||
|
|
@ -58,23 +58,9 @@ class DownloadedPlayerActivity : AppCompatActivity() {
|
|||
enableEdgeToEdgeCompat()
|
||||
setContentView(R.layout.empty_layout)
|
||||
Log.i(TAG, "onCreate")
|
||||
handleIntent(intent)
|
||||
|
||||
/**
|
||||
* Use moveTaskToBack instead of finish() so there is always exactly one task
|
||||
* entry in recents, always reflecting the current file.
|
||||
*
|
||||
* finish() destroys the Activity but may leave the task in recents. Each new file
|
||||
* open can create a new task entry, so recents accumulates stale entries for old
|
||||
* files. The user then taps a stale entry and gets the wrong file.
|
||||
*
|
||||
* moveTaskToBack keeps the Activity alive in the background. There is only ever
|
||||
* one task entry in recents. New files opened from the file manager arrive via
|
||||
* onNewIntent on the live instance, updating the player immediately. The single
|
||||
* recents entry always reflects the current state, ensuring we load the
|
||||
* correct file.
|
||||
*/
|
||||
attachBackPressedCallback("DownloadedPlayerActivity") { moveTaskToBack(true) }
|
||||
handleIntent(intent)
|
||||
attachBackPressedCallback("DownloadedPlayerActivity") { finish() }
|
||||
}
|
||||
|
||||
private fun handleIntent(intent: Intent) {
|
||||
|
|
@ -97,11 +83,11 @@ class DownloadedPlayerActivity : AppCompatActivity() {
|
|||
url != null -> playLink(this, url)
|
||||
data != null -> playUri(this, data)
|
||||
extraText != null -> playLink(this, extraText)
|
||||
else -> finishAndRemoveTask()
|
||||
else -> { finish(); return }
|
||||
}
|
||||
} else if (data?.scheme == "content") {
|
||||
playUri(this, data)
|
||||
} else finishAndRemoveTask()
|
||||
} else finish()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
|
|
|||
|
|
@ -945,18 +945,12 @@ open class FullScreenPlayer : AbstractPlayerFragment<FragmentPlayerBinding>(
|
|||
player.handleEvent(CSPlayerEvent.SkipCurrentChapter)
|
||||
}
|
||||
|
||||
KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, KeyEvent.KEYCODE_P, KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_NUMPAD_ENTER -> { // space is not captured due to navigation
|
||||
KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, KeyEvent.KEYCODE_P, KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_NUMPAD_ENTER, KeyEvent.KEYCODE_ENTER -> { // space is not captured due to navigation
|
||||
player.handleEvent(CSPlayerEvent.PlayPauseToggle)
|
||||
}
|
||||
|
||||
// KEYCODE_DPAD_CENTER and KEYCODE_ENTER both act as a "select/confirm" button.
|
||||
// Some remotes (e.g. LG Magic Remote) send KEYCODE_ENTER instead of KEYCODE_DPAD_CENTER.
|
||||
// When the player UI or a dialog is visible, we let the event pass through (return null)
|
||||
// so the focused button/item can handle the click normally, rather than always toggling
|
||||
// play/pause. Only when the UI is hidden do we treat it as a play/pause toggle.
|
||||
KeyEvent.KEYCODE_DPAD_CENTER,
|
||||
KeyEvent.KEYCODE_ENTER -> {
|
||||
if (isShowing || isDialogOpen()) {
|
||||
KeyEvent.KEYCODE_DPAD_CENTER -> {
|
||||
if (isShowing) {
|
||||
return null
|
||||
}
|
||||
// If UI is not shown make click instantly skip to next chapter even if locked
|
||||
|
|
|
|||
|
|
@ -143,11 +143,7 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
const val STOP_ACTION = "stopcs3"
|
||||
|
||||
private val generators = ConcurrentHashMap<String, VideoGenerator<*>>()
|
||||
fun newInstance(
|
||||
generator: VideoGenerator<*>,
|
||||
index: Int,
|
||||
syncData: HashMap<String, String>? = null
|
||||
): Bundle {
|
||||
fun newInstance(generator: VideoGenerator<*>, index : Int, syncData: HashMap<String, String>? = null): Bundle {
|
||||
Log.i(TAG, "newInstance = $syncData")
|
||||
val uuid = UUID.randomUUID().toString()
|
||||
generators[uuid] = generator
|
||||
|
|
@ -182,14 +178,12 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
private var isNextEpisode: Boolean = false // this is used to reset the watch time
|
||||
|
||||
private var preferredAutoSelectSubtitles: String? = null // null means do nothing, "" means none
|
||||
private val allMeta: List<ResultEpisode>?
|
||||
get() = viewModel.state.generatorState?.allMeta?.filterIsInstance<ResultEpisode>()
|
||||
?.map { episode ->
|
||||
// Refresh all the episodes watch duration
|
||||
getViewPos(episode.id)?.let { data ->
|
||||
episode.copy(position = data.position, duration = data.duration)
|
||||
} ?: episode
|
||||
}
|
||||
private val allMeta: List<ResultEpisode>? get() = viewModel.state.generatorState?.allMeta?.filterIsInstance<ResultEpisode>()?.map { episode ->
|
||||
// Refresh all the episodes watch duration
|
||||
getViewPos(episode.id)?.let { data ->
|
||||
episode.copy(position = data.position, duration = data.duration)
|
||||
} ?: episode
|
||||
}
|
||||
|
||||
private fun setSubtitles(subtitle: SubtitleData?, userInitiated: Boolean): Boolean {
|
||||
// If subtitle is changed and user initiated -> Save the language
|
||||
|
|
@ -1547,7 +1541,7 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
|
||||
private fun startPlayer() {
|
||||
// We don't want double load when you skip loading
|
||||
if (isPlayerActive.get()) {
|
||||
if(isPlayerActive.get()) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -1732,11 +1726,11 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
): SubtitleData? {
|
||||
val langCode = preferredAutoSelectSubtitles ?: return null
|
||||
if (downloads) {
|
||||
sortSubs(subtitles).firstOrNull {
|
||||
return sortSubs(subtitles).firstOrNull {
|
||||
it.origin == SubtitleOrigin.DOWNLOADED_FILE && it.matchesLanguageCode(
|
||||
langCode
|
||||
)
|
||||
}?.let { return it }
|
||||
}
|
||||
}
|
||||
|
||||
if (!settings) return null
|
||||
|
|
@ -2146,7 +2140,6 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
fun releasePlayer() {
|
||||
player.release()
|
||||
currentSelectedSubtitles = null
|
||||
currentSelectedLink = null
|
||||
isPlayerActive.set(false)
|
||||
binding?.overlayLoadingSkipButton?.isVisible = false
|
||||
binding?.playerLoadingOverlay?.isVisible = true
|
||||
|
|
@ -2159,31 +2152,19 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
activity?.popCurrentPage()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
outState.putInt("index", viewModel.episodeIndex)
|
||||
super.onSaveInstanceState(outState)
|
||||
}
|
||||
|
||||
override fun onBindingCreated(binding: FragmentPlayerBinding, savedInstanceState: Bundle?) {
|
||||
viewModel = ViewModelProvider(this)[PlayerGeneratorViewModel::class.java]
|
||||
sync = ViewModelProvider(this)[SyncViewModel::class.java]
|
||||
|
||||
val uuid = savedInstanceState?.getString("uuid") ?: arguments?.getString("uuid")
|
||||
val index = savedInstanceState?.getInt("index") ?: arguments?.getInt("index")
|
||||
val generator = generators[uuid]
|
||||
|
||||
viewModel.attachGenerator(generators[uuid], index)
|
||||
|
||||
unwrapBundle(savedInstanceState)
|
||||
unwrapBundle(arguments)
|
||||
|
||||
super.onBindingCreated(binding, savedInstanceState)
|
||||
|
||||
// Avoid showing no links found
|
||||
if (generator == null || index == null) {
|
||||
exitPlayer()
|
||||
return
|
||||
}
|
||||
viewModel.attachGenerator(generator, index)
|
||||
|
||||
context?.let { ctx ->
|
||||
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||
showName = settingsManager.getBoolean(ctx.getString(R.string.show_name_key), true)
|
||||
|
|
@ -2212,18 +2193,14 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
|
||||
preferredAutoSelectSubtitles = getAutoSelectLanguageTagIETF()
|
||||
|
||||
val selectedLink = currentSelectedLink
|
||||
if (selectedLink == null) {
|
||||
if (currentSelectedLink == null) {
|
||||
viewModel.loadLinks()
|
||||
} else {
|
||||
// Recreated view, so we need to recreate the
|
||||
loadLink(selectedLink, true)
|
||||
}
|
||||
|
||||
binding.overlayLoadingSkipButton.setOnClickListener {
|
||||
// Mark as "success" early
|
||||
viewModel.modifyState {
|
||||
copy(loading = Resource.Success(Unit))
|
||||
copy(loading = Resource.Success(true))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2241,13 +2218,11 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
}
|
||||
}
|
||||
|
||||
observe(viewModel.currentStamps) { (stamps, instance) ->
|
||||
if (instance != viewModel.state.instance) return@observe // Outdated observe
|
||||
observe(viewModel.currentStamps) { stamps ->
|
||||
player.addTimeStamps(stamps)
|
||||
}
|
||||
|
||||
observe(viewModel.currentSubtitles) { (subtitles, instance) ->
|
||||
if (instance != viewModel.state.instance) return@observe // Outdated observe
|
||||
observe(viewModel.currentSubtitles) { subtitles ->
|
||||
player.setActiveSubtitles(subtitles)
|
||||
|
||||
// If the file is downloaded then do not select auto select the subtitles
|
||||
|
|
@ -2258,9 +2233,7 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
autoSelectSubtitles()
|
||||
}
|
||||
}
|
||||
observe(viewModel.loadingLinks) { (loading, instance) ->
|
||||
if (instance != viewModel.state.instance) return@observe // Outdated observe
|
||||
|
||||
observe(viewModel.loadingLinks) { loading ->
|
||||
when (loading) {
|
||||
is Resource.Loading -> {
|
||||
releasePlayer()
|
||||
|
|
@ -2281,9 +2254,7 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
}
|
||||
}
|
||||
|
||||
observe(viewModel.currentLinks) { (links, instance) ->
|
||||
if (instance != viewModel.state.instance) return@observe // Outdated observe
|
||||
|
||||
observe(viewModel.currentLinks) { links ->
|
||||
val turnVisible = links.isNotEmpty() && viewModel.generator?.canSkipLoading == true
|
||||
val wasGone = binding.overlayLoadingSkipButton.isGone
|
||||
|
||||
|
|
@ -2298,7 +2269,7 @@ class GeneratorPlayer : FullScreenPlayer() {
|
|||
}
|
||||
|
||||
safe {
|
||||
if (!isPlayerActive.get() && viewModel.state.links.any { link ->
|
||||
if (viewModel.state.links.any { link ->
|
||||
getLinkPriority(currentQualityProfile, link.first) >=
|
||||
QualityDataHelper.AUTO_SKIP_PRIORITY
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import android.app.Activity
|
|||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.core.content.ContextCompat.getString
|
||||
import androidx.navigation.NavOptions
|
||||
import com.lagradost.cloudstream3.R
|
||||
import com.lagradost.cloudstream3.actions.temp.CloudStreamPackage
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
||||
|
|
@ -13,15 +12,6 @@ import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
|||
import com.lagradost.safefile.SafeFile
|
||||
|
||||
object OfflinePlaybackHelper {
|
||||
/**
|
||||
* Pop any existing player off the nav back stack before pushing the new one,
|
||||
* keeping the stack flat (at most one player at a time). This prevents an
|
||||
* OOM when many files are opened in sequence via DownloadedPlayerActivity.
|
||||
*/
|
||||
private val replacePlayerNavOptions = NavOptions.Builder()
|
||||
.setPopUpTo(R.id.navigation_player, inclusive = true, saveState = false)
|
||||
.build()
|
||||
|
||||
fun playLink(activity: Activity, url: String) {
|
||||
activity.navigate(
|
||||
R.id.global_to_navigation_player, GeneratorPlayer.newInstance(
|
||||
|
|
@ -30,8 +20,7 @@ object OfflinePlaybackHelper {
|
|||
BasicLink(url)
|
||||
), id = url.hashCode()
|
||||
), 0
|
||||
),
|
||||
replacePlayerNavOptions
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -63,8 +52,7 @@ object OfflinePlaybackHelper {
|
|||
subs,
|
||||
if (id != -1) id else null,
|
||||
), 0
|
||||
),
|
||||
replacePlayerNavOptions
|
||||
)
|
||||
)
|
||||
return true
|
||||
}
|
||||
|
|
@ -88,8 +76,7 @@ object OfflinePlaybackHelper {
|
|||
)
|
||||
)
|
||||
), 0
|
||||
),
|
||||
replacePlayerNavOptions
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -47,9 +47,8 @@ data class VideoState(
|
|||
val subtitles: PersistentSet<SubtitleData> = persistentSetOf(),
|
||||
val links: PersistentSet<VideoLink> = persistentSetOf(),
|
||||
val stamps: PersistentList<VideoSkipStamp> = persistentListOf(),
|
||||
val loading: Resource<Unit> = Resource.Loading(),
|
||||
val loading: Resource<Boolean?> = Resource.Loading(),
|
||||
val generatorState: GeneratorState? = null,
|
||||
val instance: Int,
|
||||
) {
|
||||
/**
|
||||
* This acts as a local cache for sorted links that are not copied over by the copy constructor.
|
||||
|
|
@ -115,11 +114,6 @@ data class VideoState(
|
|||
fun set(items: Collection<VideoSkipStamp>): VideoState = copy(stamps = items.toPersistentList())
|
||||
}
|
||||
|
||||
data class VideoLive<T>(
|
||||
val value: T,
|
||||
val instance: Int,
|
||||
)
|
||||
|
||||
class PlayerGeneratorViewModel : ViewModel() {
|
||||
companion object {
|
||||
const val TAG = "PlayViewGen"
|
||||
|
|
@ -129,7 +123,7 @@ class PlayerGeneratorViewModel : ViewModel() {
|
|||
var generator: VideoGenerator<*>? = null
|
||||
|
||||
@Volatile
|
||||
var episodeIndex: Int = 0
|
||||
private var episodeIndex: Int = 0
|
||||
|
||||
/**
|
||||
* The state of the video player, only modify it by modifyState to make sure observe is called,
|
||||
|
|
@ -138,21 +132,20 @@ class PlayerGeneratorViewModel : ViewModel() {
|
|||
* This value can be used without Synchronized or locking when reading, as all fields are immutable.
|
||||
* */
|
||||
@Volatile
|
||||
var state = VideoState(instance = 0)
|
||||
var state = VideoState()
|
||||
private set
|
||||
|
||||
private val _currentLinks =
|
||||
MutableLiveData<VideoLive<Set<Pair<ExtractorLink?, ExtractorUri?>>>>(null)
|
||||
val currentLinks: LiveData<VideoLive<Set<Pair<ExtractorLink?, ExtractorUri?>>>> = _currentLinks
|
||||
private val _currentLinks = MutableLiveData<Set<Pair<ExtractorLink?, ExtractorUri?>>>(setOf())
|
||||
val currentLinks: LiveData<Set<Pair<ExtractorLink?, ExtractorUri?>>> = _currentLinks
|
||||
|
||||
private val _currentSubtitles = MutableLiveData<VideoLive<Set<SubtitleData>>>(null)
|
||||
val currentSubtitles: LiveData<VideoLive<Set<SubtitleData>>> = _currentSubtitles
|
||||
private val _currentSubtitles = MutableLiveData<Set<SubtitleData>>(setOf())
|
||||
val currentSubtitles: LiveData<Set<SubtitleData>> = _currentSubtitles
|
||||
|
||||
private val _loadingLinks = MutableLiveData<VideoLive<Resource<Unit>>>()
|
||||
val loadingLinks: LiveData<VideoLive<Resource<Unit>>> = _loadingLinks
|
||||
private val _loadingLinks = MutableLiveData<Resource<Boolean?>>()
|
||||
val loadingLinks: LiveData<Resource<Boolean?>> = _loadingLinks
|
||||
|
||||
private val _currentStamps = MutableLiveData<VideoLive<List<VideoSkipStamp>>>(null)
|
||||
val currentStamps: LiveData<VideoLive<List<VideoSkipStamp>>> = _currentStamps
|
||||
private val _currentStamps = MutableLiveData<List<VideoSkipStamp>>(emptyList())
|
||||
val currentStamps: LiveData<List<VideoSkipStamp>> = _currentStamps
|
||||
|
||||
/**
|
||||
* Modifies the `state` variable safely, and with the correct observe behavior.
|
||||
|
|
@ -165,15 +158,6 @@ class PlayerGeneratorViewModel : ViewModel() {
|
|||
val oldState = state
|
||||
state = op.invoke(oldState)
|
||||
|
||||
/** New instance, always push state */
|
||||
if (state.instance != oldState.instance) {
|
||||
_currentSubtitles.postValue(VideoLive(state.subtitles, state.instance))
|
||||
_currentStamps.postValue(VideoLive(state.stamps, state.instance))
|
||||
_currentLinks.postValue(VideoLive(state.links, state.instance))
|
||||
_loadingLinks.postValue(VideoLive(state.loading, state.instance))
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* Only post the changed values, this makes sure we do not invoke the "observe"
|
||||
*
|
||||
|
|
@ -181,15 +165,15 @@ class PlayerGeneratorViewModel : ViewModel() {
|
|||
* to avoid comparing the entire set or list as "Persistent" classes will hold the same reference if they are unchanged.
|
||||
* */
|
||||
if (state.links !== oldState.links)
|
||||
_currentLinks.postValue(VideoLive(state.links, state.instance))
|
||||
_currentLinks.postValue(state.links)
|
||||
if (state.stamps !== oldState.stamps)
|
||||
_currentStamps.postValue(VideoLive(state.stamps, state.instance))
|
||||
_currentStamps.postValue(state.stamps)
|
||||
if (state.subtitles !== oldState.subtitles)
|
||||
_currentSubtitles.postValue(VideoLive(state.subtitles, state.instance))
|
||||
_currentSubtitles.postValue(state.subtitles)
|
||||
|
||||
/** Normal equality here as it is not a collection */
|
||||
if (state.loading != oldState.loading)
|
||||
_loadingLinks.postValue(VideoLive(state.loading, state.instance))
|
||||
_loadingLinks.postValue(state.loading)
|
||||
}
|
||||
|
||||
private val _currentSubtitleYear = MutableLiveData<Int?>(null)
|
||||
|
|
@ -268,10 +252,13 @@ class PlayerGeneratorViewModel : ViewModel() {
|
|||
loadLinks()
|
||||
}
|
||||
|
||||
fun attachGenerator(newGenerator: VideoGenerator<*>, index: Int) {
|
||||
Log.i(TAG, "attachGenerator with generator=$newGenerator and index=$index")
|
||||
generator = newGenerator
|
||||
episodeIndex = index
|
||||
fun attachGenerator(newGenerator: VideoGenerator<*>?, index: Int?) {
|
||||
if (generator == null) {
|
||||
generator = newGenerator
|
||||
if (index != null) {
|
||||
episodeIndex = index
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -334,49 +321,45 @@ class PlayerGeneratorViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
fun loadLinks(sourceTypes: Set<ExtractorLinkType> = LOADTYPE_INAPP) {
|
||||
Log.i(TAG, "loadLinks with generator=$generator and index=$episodeIndex")
|
||||
Log.i(TAG, "loadLinks")
|
||||
currentJob?.cancel()
|
||||
val index = episodeIndex
|
||||
|
||||
// Clear old data and reset the state
|
||||
modifyState {
|
||||
VideoState(
|
||||
loading = Resource.Loading(),
|
||||
generatorState = generator?.let { gen ->
|
||||
GeneratorState(
|
||||
meta = gen.videos.getOrNull(index),
|
||||
nextMeta = gen.videos.getOrNull(index + 1),
|
||||
id = gen.getId(index),
|
||||
response = (gen as? RepoLinkGenerator)?.page,
|
||||
index = index,
|
||||
allMeta = gen.videos
|
||||
)
|
||||
},
|
||||
instance = instance + 1
|
||||
)
|
||||
}
|
||||
|
||||
currentJob = viewModelScope.launchSafe {
|
||||
// Clear old data and reset the state
|
||||
modifyState {
|
||||
VideoState(
|
||||
generatorState = generator?.let { gen ->
|
||||
GeneratorState(
|
||||
meta = gen.videos.getOrNull(index),
|
||||
nextMeta = gen.videos.getOrNull(index + 1),
|
||||
id = gen.getId(index),
|
||||
response = (gen as? RepoLinkGenerator)?.page,
|
||||
index = index,
|
||||
allMeta = gen.videos
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
// Load more data
|
||||
val loadingState = safeApiCall {
|
||||
generator?.generateLinks(
|
||||
sourceTypes = sourceTypes,
|
||||
clearCache = forceClearCache,
|
||||
callback = { link ->
|
||||
if (isActive)
|
||||
modifyState {
|
||||
add(link)
|
||||
}
|
||||
modifyState {
|
||||
add(link)
|
||||
}
|
||||
},
|
||||
isCasting = false,
|
||||
offset = index,
|
||||
subtitleCallback = { link ->
|
||||
if (isActive && isValidSubtitle(link))
|
||||
if (isValidSubtitle(link))
|
||||
modifyState {
|
||||
add(link)
|
||||
}
|
||||
})
|
||||
Unit
|
||||
}
|
||||
|
||||
if (!isActive) {
|
||||
|
|
@ -385,13 +368,9 @@ class PlayerGeneratorViewModel : ViewModel() {
|
|||
|
||||
/** Only mark as success if we have not skipped loading */
|
||||
modifyState {
|
||||
if (!isActive) {
|
||||
this
|
||||
} else {
|
||||
when (loading) {
|
||||
is Resource.Loading -> copy(loading = loadingState)
|
||||
else -> this
|
||||
}
|
||||
when (loading) {
|
||||
is Resource.Loading -> copy(loading = loadingState)
|
||||
else -> this
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,7 +83,6 @@ import com.lagradost.cloudstream3.utils.AppContextUtils.getNameFull
|
|||
import com.lagradost.cloudstream3.utils.AppContextUtils.isConnectedToChromecast
|
||||
import com.lagradost.cloudstream3.utils.AppContextUtils.setDefaultFocus
|
||||
import com.lagradost.cloudstream3.utils.AppContextUtils.sortSubs
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||
import com.lagradost.cloudstream3.utils.CastHelper.startCast
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.ioWork
|
||||
|
|
@ -1325,7 +1324,7 @@ class ResultViewModel2 : ViewModel() {
|
|||
episodeIds: Array<String>,
|
||||
watchState: VideoWatchState
|
||||
) {
|
||||
val watchStateString = watchState.toJson()
|
||||
val watchStateString = DataStore.mapper.writeValueAsString(watchState)
|
||||
episodeIds.forEach {
|
||||
if (getVideoWatchState(it.toInt()) != watchState) {
|
||||
editor.setKeyRaw(
|
||||
|
|
@ -1686,13 +1685,14 @@ class ResultViewModel2 : ViewModel() {
|
|||
}
|
||||
|
||||
val realRecommendations = ArrayList<SearchResponse>()
|
||||
val apiNames = apis.filter {
|
||||
it.name.contains("gogoanime", true) ||
|
||||
it.name.contains("9anime", true)
|
||||
}.map {
|
||||
it.name
|
||||
val apiNames = synchronized(apis) {
|
||||
apis.filter {
|
||||
it.name.contains("gogoanime", true) ||
|
||||
it.name.contains("9anime", true)
|
||||
}.map {
|
||||
it.name
|
||||
}
|
||||
}
|
||||
|
||||
meta.recommendations?.forEach { rec ->
|
||||
apiNames.forEach { name ->
|
||||
realRecommendations.add(rec.copy(apiName = name))
|
||||
|
|
@ -2706,4 +2706,4 @@ class ResultViewModel2 : ViewModel() {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ class SearchViewModel : ViewModel() {
|
|||
|
||||
private var suggestionJob: Job? = null
|
||||
|
||||
private var repos = apis.withLock { apis.map { APIRepository(it) } }
|
||||
private var repos = synchronized(apis) { apis.map { APIRepository(it) } }
|
||||
|
||||
fun clearSearch() {
|
||||
_searchResponse.postValue(Resource.Success(ExpandableSearchList(emptyList(), 0, false)))
|
||||
|
|
@ -68,7 +68,7 @@ class SearchViewModel : ViewModel() {
|
|||
private var onGoingSearch: Job? = null
|
||||
|
||||
fun reloadRepos() {
|
||||
repos = apis.withLock { apis.map { APIRepository(it) } }
|
||||
repos = synchronized(apis) { apis.map { APIRepository(it) } }
|
||||
}
|
||||
|
||||
fun searchAndCancel(
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ class SettingsGeneral : BasePreferenceFragmentCompat() {
|
|||
}
|
||||
|
||||
fun showAdd() {
|
||||
val providers = allProviders.distinctBy { it::class }.sortedBy { it.name }
|
||||
val providers = synchronized(allProviders) { allProviders.distinctBy { it.javaClass }.sortedBy { it.name } }
|
||||
activity?.showDialog(
|
||||
providers.map { "${it.name} (${it.mainUrl})" },
|
||||
-1,
|
||||
|
|
|
|||
|
|
@ -111,10 +111,10 @@ class SettingsProviders : BasePreferenceFragmentCompat() {
|
|||
|
||||
getPref(R.string.provider_lang_key)?.setOnPreferenceClickListener {
|
||||
activity?.getApiProviderLangSettings()?.let { currentLangTags ->
|
||||
val languagesTagName = APIHolder.apis.withLock {
|
||||
listOf(Pair(AllLanguagesName, getString(R.string.all_languages_preference))) +
|
||||
APIHolder.apis.map { Pair(it.lang, getNameNextToFlagEmoji(it.lang) ?: it.lang) }
|
||||
.toSet().sortedBy { it.second.substringAfter("\u00a0").lowercase() }
|
||||
val languagesTagName = synchronized(APIHolder.apis) {
|
||||
listOf( Pair(AllLanguagesName, getString(R.string.all_languages_preference)) ) +
|
||||
APIHolder.apis.map { Pair(it.lang, getNameNextToFlagEmoji(it.lang) ?: it.lang) }
|
||||
.toSet().sortedBy { it.second.substringAfter("\u00a0").lowercase() } // name ignoring flag emoji
|
||||
}
|
||||
|
||||
val currentIndexList = currentLangTags.map { langTag ->
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import com.lagradost.cloudstream3.utils.txt
|
|||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.main
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.runOnMainThread
|
||||
import com.lagradost.cloudstream3.utils.Levenshtein
|
||||
import me.xdrop.fuzzywuzzy.FuzzySearch
|
||||
import java.io.File
|
||||
|
||||
// String => repository url
|
||||
|
|
@ -246,7 +246,7 @@ class PluginsViewModel : ViewModel() {
|
|||
this.sortedBy { it.plugin.second.name }
|
||||
} else {
|
||||
this.sortedBy {
|
||||
-Levenshtein.partialRatio(
|
||||
-FuzzySearch.partialRatio(
|
||||
it.plugin.second.name.lowercase(),
|
||||
query.lowercase()
|
||||
)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import androidx.lifecycle.MutableLiveData
|
|||
import androidx.lifecycle.ViewModel
|
||||
import com.lagradost.cloudstream3.APIHolder
|
||||
import com.lagradost.cloudstream3.MainAPI
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.atomicListOf
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.threadSafeListOf
|
||||
import com.lagradost.cloudstream3.utils.TestingUtils
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
|
@ -40,7 +40,7 @@ class TestViewModel : ViewModel() {
|
|||
get() = scope != null
|
||||
|
||||
private var filter = ProviderFilter.All
|
||||
private val providers = atomicListOf<Pair<MainAPI, TestingUtils.TestResultProvider>>()
|
||||
private val providers = threadSafeListOf<Pair<MainAPI, TestingUtils.TestResultProvider>>()
|
||||
private var passed = 0
|
||||
private var failed = 0
|
||||
private var total = 0
|
||||
|
|
@ -51,9 +51,9 @@ class TestViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
private fun postProviders() {
|
||||
providers.withLock {
|
||||
synchronized(providers) {
|
||||
val filtered = when (filter) {
|
||||
ProviderFilter.All -> providers.toList()
|
||||
ProviderFilter.All -> providers
|
||||
ProviderFilter.Passed -> providers.filter { it.second.success }
|
||||
ProviderFilter.Failed -> providers.filter { !it.second.success }
|
||||
}
|
||||
|
|
@ -68,7 +68,7 @@ class TestViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
private fun addProvider(api: MainAPI, results: TestingUtils.TestResultProvider) {
|
||||
providers.withLock {
|
||||
synchronized(providers) {
|
||||
val index = providers.indexOfFirst { it.first == api }
|
||||
if (index == -1) {
|
||||
providers.add(api to results)
|
||||
|
|
@ -81,14 +81,14 @@ class TestViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
fun init() {
|
||||
total = APIHolder.allProviders.withLock { APIHolder.allProviders.size }
|
||||
total = synchronized(APIHolder.allProviders) { APIHolder.allProviders.size }
|
||||
updateProgress()
|
||||
}
|
||||
|
||||
fun startTest() {
|
||||
scope = CoroutineScope(Dispatchers.Default)
|
||||
|
||||
val apis = APIHolder.allProviders.withLock { APIHolder.allProviders.toTypedArray() }
|
||||
val apis = synchronized(APIHolder.allProviders) { APIHolder.allProviders.toTypedArray() }
|
||||
total = apis.size
|
||||
failed = 0
|
||||
passed = 0
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ class SetupFragmentExtensions : BaseFragment<FragmentSetupExtensionsBinding>(
|
|||
if (isSetup)
|
||||
if (
|
||||
// If any available languages
|
||||
apis.distinctBy { it.lang }.size > 1
|
||||
synchronized(apis) { apis.distinctBy { it.lang }.size > 1 }
|
||||
) {
|
||||
findNavController().navigate(R.id.action_navigation_setup_extensions_to_navigation_setup_provider_languages)
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ class SetupFragmentProviderLanguage : BaseFragment<FragmentSetupProviderLanguage
|
|||
|
||||
val currentLangTags = ctx.getApiProviderLangSettings()
|
||||
|
||||
val languagesTagName = APIHolder.apis.withLock {
|
||||
listOf(Pair(AllLanguagesName, getString(R.string.all_languages_preference))) +
|
||||
val languagesTagName = synchronized(APIHolder.apis) {
|
||||
listOf( Pair(AllLanguagesName, getString(R.string.all_languages_preference)) ) +
|
||||
APIHolder.apis.map { Pair(it.lang, getNameNextToFlagEmoji(it.lang) ?: it.lang) }
|
||||
.toSet().sortedBy { it.second.substringAfter("\u00a0").lowercase() } // name ignoring flag emoji
|
||||
.toSet().sortedBy { it.second.substringAfter("\u00a0").lowercase() } // name ignoring flag emoji
|
||||
}
|
||||
|
||||
val currentIndexList = currentLangTags.map { langTag ->
|
||||
|
|
|
|||
|
|
@ -369,10 +369,28 @@ object AppContextUtils {
|
|||
}
|
||||
|
||||
fun Context.getApiSettings(): HashSet<String> {
|
||||
//val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
|
||||
val hashSet = HashSet<String>()
|
||||
val activeLangs = getApiProviderLangSettings()
|
||||
val hasUniversal = activeLangs.contains(AllLanguagesName)
|
||||
hashSet.addAll(apis.filter { hasUniversal || activeLangs.contains(it.lang) }.map { it.name })
|
||||
hashSet.addAll(synchronized(apis) { apis.filter { hasUniversal || activeLangs.contains(it.lang) } }
|
||||
.map { it.name })
|
||||
|
||||
/*val set = settingsManager.getStringSet(
|
||||
this.getString(R.string.search_providers_list_key),
|
||||
hashSet
|
||||
)?.toHashSet() ?: hashSet
|
||||
|
||||
val list = HashSet<String>()
|
||||
for (name in set) {
|
||||
val api = getApiFromNameNull(name) ?: continue
|
||||
if (activeLangs.contains(api.lang)) {
|
||||
list.add(name)
|
||||
}
|
||||
}*/
|
||||
//if (list.isEmpty()) return hashSet
|
||||
//return list
|
||||
return hashSet
|
||||
}
|
||||
|
||||
|
|
@ -463,7 +481,9 @@ object AppContextUtils {
|
|||
} ?: default
|
||||
val langs = this.getApiProviderLangSettings()
|
||||
val hasUniversal = langs.contains(AllLanguagesName)
|
||||
val allApis = apis.filter { api -> (hasUniversal || langs.contains(api.lang)) && (api.hasMainPage || !hasHomePageIsRequired) }
|
||||
val allApis = synchronized(apis) {
|
||||
apis.filter { api -> (hasUniversal || langs.contains(api.lang)) && (api.hasMainPage || !hasHomePageIsRequired) }
|
||||
}
|
||||
return if (currentPrefMedia.isEmpty()) {
|
||||
allApis
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import androidx.core.net.toUri
|
|||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import com.lagradost.cloudstream3.CloudStreamApp.Companion.getActivity
|
||||
import com.lagradost.cloudstream3.CommonActivity.showToast
|
||||
import com.lagradost.cloudstream3.R
|
||||
|
|
@ -20,12 +21,11 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager
|
|||
import com.lagradost.cloudstream3.syncproviders.providers.AniListApi.Companion.ANILIST_CACHED_LIST
|
||||
import com.lagradost.cloudstream3.syncproviders.providers.MALApi.Companion.MAL_CACHED_LIST
|
||||
import com.lagradost.cloudstream3.syncproviders.providers.KitsuApi.Companion.KITSU_CACHED_LIST
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJson
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||
import com.lagradost.cloudstream3.utils.Coroutines.main
|
||||
import com.lagradost.cloudstream3.utils.DataStore.getDefaultSharedPrefs
|
||||
import com.lagradost.cloudstream3.utils.DataStore.getSharedPrefs
|
||||
import com.lagradost.cloudstream3.utils.DataStore.mapper
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.checkWrite
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.requestRW
|
||||
import com.lagradost.cloudstream3.utils.downloader.VideoDownloadManager.setupStream
|
||||
|
|
@ -133,7 +133,9 @@ object BackupUtils {
|
|||
)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
private fun getBackup(context: Context): BackupFile {
|
||||
private fun getBackup(context: Context?): BackupFile? {
|
||||
if (context == null) return null
|
||||
|
||||
val allData = context.getSharedPrefs().all.filter { it.key.isTransferable() }
|
||||
val allSettings = context.getDefaultSharedPrefs().all.filter { it.key.isTransferable() }
|
||||
|
||||
|
|
@ -212,7 +214,7 @@ object BackupUtils {
|
|||
|
||||
fileStream = stream.openNew()
|
||||
printStream = PrintWriter(fileStream)
|
||||
printStream.print(backupFile.toJson())
|
||||
printStream.print(mapper.writeValueAsString(backupFile))
|
||||
|
||||
showToast(
|
||||
R.string.backup_success,
|
||||
|
|
@ -257,8 +259,8 @@ object BackupUtils {
|
|||
val input = activity.contentResolver.openInputStream(uri)
|
||||
?: return@ioSafe
|
||||
|
||||
val text = input.bufferedReader().readText()
|
||||
val restoredValue = parseJson<BackupFile>(text)
|
||||
val restoredValue =
|
||||
mapper.readValue<BackupFile>(input)
|
||||
|
||||
restore(
|
||||
activity,
|
||||
|
|
|
|||
|
|
@ -2,16 +2,17 @@ package com.lagradost.cloudstream3.utils
|
|||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import androidx.core.content.edit
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||
import com.fasterxml.jackson.databind.json.JsonMapper
|
||||
import com.fasterxml.jackson.module.kotlin.kotlinModule
|
||||
import com.lagradost.cloudstream3.CloudStreamApp.Companion.getKeyClass
|
||||
import com.lagradost.cloudstream3.CloudStreamApp.Companion.removeKey
|
||||
import com.lagradost.cloudstream3.CloudStreamApp.Companion.setKeyClass
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.toJsonLiteral
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KProperty
|
||||
import androidx.core.content.edit
|
||||
|
||||
/** Used to display metadata about downloads and resume watching */
|
||||
const val DOWNLOAD_HEADER_CACHE = "download_header_cache"
|
||||
|
|
@ -87,18 +88,8 @@ data class Editor(
|
|||
}
|
||||
|
||||
object DataStore {
|
||||
// Extensions shouldn't have really been using this version of it, but it seems
|
||||
// some have. Since there has always been a very easy alternative, we won't
|
||||
// need to deprecate it that long, and should be able to fully remove it
|
||||
// once extensions at least use the other version.
|
||||
@Deprecated(
|
||||
"Please do not use the mapper version from DataStore. Preferably use methods from AppUtils " +
|
||||
"to parse JSON. However, you can use the stable-API version of the mapper at " +
|
||||
"com.lagradost.cloudstream3.mapper to access the mapper directly if necessary.",
|
||||
level = DeprecationLevel.ERROR,
|
||||
replaceWith = ReplaceWith("com.lagradost.cloudstream3.mapper"),
|
||||
)
|
||||
val mapper = com.lagradost.cloudstream3.mapper
|
||||
val mapper: JsonMapper = JsonMapper.builder().addModule(kotlinModule())
|
||||
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).build()
|
||||
|
||||
private fun getPreferences(context: Context): SharedPreferences {
|
||||
return context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE)
|
||||
|
|
@ -108,6 +99,7 @@ object DataStore {
|
|||
return getPreferences(this)
|
||||
}
|
||||
|
||||
|
||||
fun getFolderName(folder: String, path: String): String {
|
||||
return "${folder}/${path}"
|
||||
}
|
||||
|
|
@ -173,17 +165,17 @@ object DataStore {
|
|||
fun <T> Context.setKey(path: String, value: T) {
|
||||
try {
|
||||
getSharedPrefs().edit {
|
||||
putString(path, value?.toJsonLiteral())
|
||||
putString(path, mapper.writeValueAsString(value))
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
}
|
||||
}
|
||||
|
||||
fun <T : Any> Context.getKey(path: String, valueType: Class<T>): T? {
|
||||
fun <T> Context.getKey(path: String, valueType: Class<T>): T? {
|
||||
try {
|
||||
val json: String = getSharedPrefs().getString(path, null) ?: return null
|
||||
return parseJson(json, valueType.kotlin)
|
||||
return json.toKotlinObject(valueType)
|
||||
} catch (e: Exception) {
|
||||
return null
|
||||
}
|
||||
|
|
@ -194,11 +186,11 @@ object DataStore {
|
|||
}
|
||||
|
||||
inline fun <reified T : Any> String.toKotlinObject(): T {
|
||||
return parseJson(this)
|
||||
return mapper.readValue(this, T::class.java)
|
||||
}
|
||||
|
||||
fun <T : Any> String.toKotlinObject(valueType: Class<T>): T {
|
||||
return parseJson(this, valueType.kotlin)
|
||||
fun <T> String.toKotlinObject(valueType: Class<T>): T {
|
||||
return mapper.readValue(this, valueType)
|
||||
}
|
||||
|
||||
// GET KEY GIVEN PATH AND DEFAULT VALUE, NULL IF ERROR
|
||||
|
|
@ -222,4 +214,4 @@ object DataStore {
|
|||
inline fun <reified T : Any> Context.getKey(folder: String, path: String, defVal: T?): T? {
|
||||
return getKey(getFolderName(folder, path), defVal) ?: defVal
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,6 @@ package com.lagradost.cloudstream3.utils
|
|||
import android.graphics.Bitmap
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Build.VERSION.SDK_INT
|
||||
import android.util.Log
|
||||
import android.widget.ImageView
|
||||
|
|
@ -12,7 +11,6 @@ import coil3.EventListener
|
|||
import coil3.ImageLoader
|
||||
import coil3.PlatformContext
|
||||
import coil3.SingletonImageLoader
|
||||
import coil3.decode.BitmapFactoryDecoder
|
||||
import coil3.disk.DiskCache
|
||||
import coil3.dispose
|
||||
import coil3.load
|
||||
|
|
@ -24,86 +22,82 @@ import coil3.request.CachePolicy
|
|||
import coil3.request.ErrorResult
|
||||
import coil3.request.ImageRequest
|
||||
import coil3.request.allowHardware
|
||||
import coil3.request.bitmapConfig
|
||||
import coil3.request.crossfade
|
||||
import coil3.util.DebugLogger
|
||||
import com.lagradost.cloudstream3.BuildConfig
|
||||
import com.lagradost.cloudstream3.USER_AGENT
|
||||
import com.lagradost.cloudstream3.network.buildDefaultClient
|
||||
import okhttp3.HttpUrl
|
||||
import okio.Path.Companion.toOkioPath
|
||||
import java.io.File
|
||||
import java.nio.ByteBuffer
|
||||
|
||||
object ImageLoader {
|
||||
|
||||
private const val TAG = "CoilImgLoader"
|
||||
internal fun buildImageLoader(context: PlatformContext): ImageLoader {
|
||||
val isBrokenHardware = hasPotentialBrokenHardware()
|
||||
return ImageLoader.Builder(context)
|
||||
|
||||
internal fun buildImageLoader(context: PlatformContext): ImageLoader = ImageLoader.Builder(context)
|
||||
.crossfade(200)
|
||||
.allowHardware(SDK_INT >= 28 && !isBrokenHardware)
|
||||
.allowHardware(SDK_INT >= 28) // SDK_INT >= 28, cant use hardware bitmaps for Palette Builder
|
||||
.diskCachePolicy(CachePolicy.ENABLED)
|
||||
.networkCachePolicy(CachePolicy.ENABLED)
|
||||
.memoryCache {
|
||||
MemoryCache.Builder().maxSizePercent(context, 0.1)//10 % of heap for mem-cache
|
||||
.strongReferencesEnabled(false)
|
||||
MemoryCache.Builder().maxSizePercent(context, 0.1) // Use 10 % of the app's available memory for caching
|
||||
.build()
|
||||
}
|
||||
.diskCache {
|
||||
DiskCache.Builder()
|
||||
.directory(context.cacheDir.resolve("cs3_image_cache").toOkioPath())
|
||||
.maxSizeBytes(512L * 1024 * 1024) // 512 MB
|
||||
.maxSizePercent(0.04) // max 4% of storage for disk caching
|
||||
.maxSizePercent(0.04) // Use 4 % of the device's storage space for disk caching
|
||||
.build()
|
||||
}
|
||||
/** Pass interceptors with care, unnecessary passing tokens to servers
|
||||
or image hosting services causes unauthorized exceptions **/
|
||||
.components {
|
||||
add(OkHttpNetworkFetcherFactory(callFactory = { buildDefaultClient(context) }))
|
||||
if (isBrokenHardware) {
|
||||
add(BitmapFactoryDecoder.Factory())
|
||||
} // sw decoder
|
||||
}
|
||||
.apply {
|
||||
if (isBrokenHardware) { // coil will auto choose optimal config on modern device
|
||||
bitmapConfig(Bitmap.Config.ARGB_8888)
|
||||
}
|
||||
setupCoilLogger()
|
||||
.components { add(OkHttpNetworkFetcherFactory(callFactory = { buildDefaultClient(context) })) }
|
||||
.also {
|
||||
it.setupCoilLogger()
|
||||
Log.d(TAG, "buildImageLoader: Setting COIL Image Loader.")
|
||||
}
|
||||
.build()
|
||||
}
|
||||
|
||||
/** DebugLogger on debug builds which won't slow down release builds & use EventListener for
|
||||
/** Use DebugLogger on debug builds which won't slow down release builds & use EventListener for
|
||||
Errors on release builds. **/
|
||||
internal fun ImageLoader.Builder.setupCoilLogger() {
|
||||
if (BuildConfig.DEBUG) {
|
||||
logger(DebugLogger())
|
||||
Log.d(TAG, "setupCoilLogger: Activated DEBUG_LOGGER FOR COIL")
|
||||
} else {
|
||||
eventListener(object : EventListener() {
|
||||
override fun onError(request: ImageRequest, result: ErrorResult) {
|
||||
super.onError(request, result)
|
||||
Log.e(TAG, "Image load error: ${result.throwable.message ?: result.throwable}")
|
||||
Log.e(TAG, " URL: ${request.data}")
|
||||
Log.e(TAG, " allowHardware: ${request.allowHardware}")
|
||||
Log.e(TAG, " hardware: ${Build.HARDWARE}, board: ${Build.BOARD}")
|
||||
Log.e(TAG, "Error loading image: ${result.throwable}")
|
||||
}
|
||||
})
|
||||
Log.d(TAG, "setupCoilLogger: Activated EVENT_LISTENER FOR COIL")
|
||||
}
|
||||
}
|
||||
|
||||
/** coil's built in loader attached w/ global synchronized instance **/
|
||||
/** we use coil's built in loader with our global synchronized instance, this way we achieve
|
||||
latest and complete functionality as well as stability **/
|
||||
private fun ImageView.loadImageInternal(
|
||||
imageData: Any?,
|
||||
headers: Map<String, String>? = null,
|
||||
builder: ImageRequest.Builder.() -> Unit = {} // for placeholder, error & transformations
|
||||
) {
|
||||
// clear image to avoid loading & flickering issue at fast scrolling (~recycler view/lazy column)
|
||||
// clear image to avoid loading & flickering issue at fast scrolling (e.g, an image recycler)
|
||||
this.dispose()
|
||||
if (imageData == null) return
|
||||
|
||||
if(imageData == null) return // Just in case
|
||||
|
||||
// setImageResource is better than coil3 on resources due to attr
|
||||
if (imageData is Int) {
|
||||
this.setImageResource(imageData); return
|
||||
if(imageData is Int) {
|
||||
this.setImageResource(imageData)
|
||||
return
|
||||
}
|
||||
// headers can be overridden by extensions.
|
||||
|
||||
// Use Coil's built-in load method but with our custom module & a decent USER-AGENT always
|
||||
// which can be overridden by extensions.
|
||||
this.load(imageData, SingletonImageLoader.get(context)) {
|
||||
this.httpHeaders(NetworkHeaders.Builder().also { headerBuilder ->
|
||||
headerBuilder["User-Agent"] = USER_AGENT
|
||||
|
|
@ -111,22 +105,11 @@ object ImageLoader {
|
|||
headerBuilder[key] = value
|
||||
}
|
||||
}.build())
|
||||
|
||||
builder() // if passed
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasPotentialBrokenHardware(): Boolean {
|
||||
val hardware = Build.HARDWARE?.lowercase() ?: ""
|
||||
val board = Build.BOARD?.lowercase() ?: ""
|
||||
val model = Build.MODEL?.lowercase() ?: ""
|
||||
val manufacturer = Build.MANUFACTURER?.lowercase() ?: ""
|
||||
val allwinnerPatterns = listOf("sun50iw9", "h713", "allwinner", "sunxi")
|
||||
val problematicModels =
|
||||
listOf("hy320", "hy300", "a10plus", "magcubic", "sinoy", "android tv box")
|
||||
return allwinnerPatterns.any { it in hardware || it in board || it in manufacturer } ||
|
||||
problematicModels.any { it in model }
|
||||
}
|
||||
|
||||
/** TYPE_SAFE_LOADERS **/
|
||||
fun ImageView.loadImage(
|
||||
imageData: UiImage?,
|
||||
|
|
@ -155,6 +138,12 @@ object ImageLoader {
|
|||
builder: ImageRequest.Builder.() -> Unit = {}
|
||||
) = loadImageInternal(imageData = imageData, headers = headers, builder = builder)
|
||||
|
||||
fun ImageView.loadImage(
|
||||
imageData: HttpUrl?,
|
||||
headers: Map<String, String>? = null,
|
||||
builder: ImageRequest.Builder.() -> Unit = {}
|
||||
) = loadImageInternal(imageData = imageData, headers = headers, builder = builder)
|
||||
|
||||
fun ImageView.loadImage(
|
||||
imageData: File?,
|
||||
builder: ImageRequest.Builder.() -> Unit = {}
|
||||
|
|
@ -184,4 +173,4 @@ object ImageLoader {
|
|||
imageData: ByteBuffer?,
|
||||
builder: ImageRequest.Builder.() -> Unit = {}
|
||||
) = loadImageInternal(imageData = imageData, builder = builder)
|
||||
}
|
||||
}
|
||||
|
|
@ -93,9 +93,9 @@ object InAppUpdater {
|
|||
private suspend fun Activity.getReleaseUpdate(): Update {
|
||||
val url = "https://api.github.com/repos/$GITHUB_USER_NAME/$GITHUB_REPO/releases"
|
||||
val headers = mapOf("Accept" to "application/vnd.github.v3+json")
|
||||
val response = parseJson<Array<GithubRelease>>(
|
||||
val response = parseJson<List<GithubRelease>>(
|
||||
app.get(url, headers = headers).text
|
||||
).toList()
|
||||
)
|
||||
|
||||
val versionRegex = Regex("""(.*?((\d+)\.(\d+)\.(\d+))\.apk)""")
|
||||
val versionRegexLocal = Regex("""(.*?((\d+)\.(\d+)\.(\d+)).*)""")
|
||||
|
|
@ -103,7 +103,9 @@ object InAppUpdater {
|
|||
!rel.prerelease
|
||||
}.sortedWith(compareBy { release ->
|
||||
release.assets.firstOrNull { it.contentType == "application/vnd.android.package-archive" }?.name?.let { it1 ->
|
||||
versionRegex.find(it1)?.groupValues?.let {
|
||||
versionRegex.find(
|
||||
it1
|
||||
)?.groupValues?.let {
|
||||
it[3].toInt() * 100_000_000 + it[4].toInt() * 10_000 + it[5].toInt()
|
||||
}
|
||||
}
|
||||
|
|
@ -148,9 +150,9 @@ object InAppUpdater {
|
|||
"https://api.github.com/repos/$GITHUB_USER_NAME/$GITHUB_REPO/git/ref/tags/pre-release"
|
||||
val releaseUrl = "https://api.github.com/repos/$GITHUB_USER_NAME/$GITHUB_REPO/releases"
|
||||
val headers = mapOf("Accept" to "application/vnd.github.v3+json")
|
||||
val response = parseJson<Array<GithubRelease>>(
|
||||
val response = parseJson<List<GithubRelease>>(
|
||||
app.get(releaseUrl, headers = headers).text
|
||||
).toList()
|
||||
)
|
||||
|
||||
val found = response.lastOrNull { rel ->
|
||||
rel.prerelease || rel.tagName == "pre-release"
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import com.lagradost.cloudstream3.APIHolder.apis
|
|||
//import com.lagradost.cloudstream3.animeproviders.AniflixProvider
|
||||
import com.lagradost.cloudstream3.app
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.tryParseJson
|
||||
import com.lagradost.cloudstream3.utils.AppUtils.parseJson
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
object SyncUtil {
|
||||
|
|
@ -71,7 +71,7 @@ object SyncUtil {
|
|||
val url =
|
||||
"https://raw.githubusercontent.com/MALSync/MAL-Sync-Backup/master/data/pages/$site/$slug.json"
|
||||
val response = app.get(url, cacheTime = 1, cacheUnit = TimeUnit.DAYS).text
|
||||
val mapped = tryParseJson<MalSyncPage?>(response)
|
||||
val mapped = parseJson<MalSyncPage?>(response)
|
||||
|
||||
val overrideMal = mapped?.malId ?: mapped?.mal?.id ?: mapped?.anilist?.malId
|
||||
val overrideAnilist = mapped?.aniId ?: mapped?.anilist?.id
|
||||
|
|
@ -96,8 +96,10 @@ object SyncUtil {
|
|||
.mapNotNull { it.url }.toMutableList()
|
||||
|
||||
if (type == "anilist") { // TODO MAKE BETTER
|
||||
apis.filter { it.name.contains("Aniflix", ignoreCase = true) }.forEach {
|
||||
current.add("${it.mainUrl}/anime/$id")
|
||||
synchronized(apis) {
|
||||
apis.filter { it.name.contains("Aniflix", ignoreCase = true) }.forEach {
|
||||
current.add("${it.mainUrl}/anime/$id")
|
||||
}
|
||||
}
|
||||
}
|
||||
return current
|
||||
|
|
@ -167,4 +169,4 @@ object SyncUtil {
|
|||
@JsonProperty("updatedAt") val updatedAt: String?,
|
||||
@JsonProperty("deletedAt") val deletedAt: String?
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -3,10 +3,10 @@ package com.lagradost.cloudstream3.utils
|
|||
import com.lagradost.cloudstream3.*
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import kotlinx.coroutines.*
|
||||
import org.junit.Assert
|
||||
import kotlin.random.Random
|
||||
|
||||
object TestingUtils {
|
||||
|
||||
open class TestResult(val success: Boolean) {
|
||||
companion object {
|
||||
val Pass = TestResult(true)
|
||||
|
|
@ -48,10 +48,6 @@ object TestingUtils {
|
|||
messageLog.add(Message(LogLevel.Error, message))
|
||||
}
|
||||
}
|
||||
|
||||
private fun fail(message: String): Nothing = throw AssertionError(message)
|
||||
private fun assertTrue(message: String, condition: Boolean) { if (!condition) fail(message) }
|
||||
private fun assertNotNull(message: String, value: Any?) { if (value == null) fail(message) }
|
||||
|
||||
class TestResultList(val results: List<SearchResponse>) : TestResult(true)
|
||||
class TestResultLoad(val extractorData: String, val shouldLoadLinks: Boolean) : TestResult(true)
|
||||
|
|
@ -91,7 +87,7 @@ object TestingUtils {
|
|||
} catch (e: Throwable) {
|
||||
when (e) {
|
||||
is NotImplementedError -> {
|
||||
fail("Provider marked as hasMainPage, while in reality is has not been implemented")
|
||||
Assert.fail("Provider marked as hasMainPage, while in reality is has not been implemented")
|
||||
}
|
||||
|
||||
is CancellationException -> {
|
||||
|
|
@ -119,7 +115,7 @@ object TestingUtils {
|
|||
api.search(query, 1)?.items?.takeIf { it.isNotEmpty() }
|
||||
} catch (e: Throwable) {
|
||||
if (e is NotImplementedError) {
|
||||
fail("Provider has not implemented search()")
|
||||
Assert.fail("Provider has not implemented search()")
|
||||
} else if (e is CancellationException) {
|
||||
throw e
|
||||
}
|
||||
|
|
@ -129,7 +125,7 @@ object TestingUtils {
|
|||
}
|
||||
|
||||
return if (searchResults.isNullOrEmpty()) {
|
||||
fail("Api ${api.name} did not return any search responses")
|
||||
Assert.fail("Api ${api.name} did not return any search responses")
|
||||
TestResult.Fail // Should not be reached
|
||||
} else {
|
||||
TestResultList(searchResults)
|
||||
|
|
@ -220,7 +216,7 @@ object TestingUtils {
|
|||
// return TestResult(validResults)
|
||||
} catch (e: Throwable) {
|
||||
if (e is NotImplementedError) {
|
||||
fail("Provider has not implemented load()")
|
||||
Assert.fail("Provider has not implemented load()")
|
||||
}
|
||||
throw e
|
||||
}
|
||||
|
|
@ -232,14 +228,14 @@ object TestingUtils {
|
|||
url: String?,
|
||||
logger: Logger
|
||||
): TestResult {
|
||||
assertNotNull("Api ${api.name} has invalid url on episode", url)
|
||||
Assert.assertNotNull("Api ${api.name} has invalid url on episode", url)
|
||||
if (url == null) return TestResult.Fail // Should never trigger
|
||||
|
||||
var linksLoaded = 0
|
||||
try {
|
||||
val success = api.loadLinks(url, false, {}) { link ->
|
||||
logger.log("Video loaded: ${link.name}")
|
||||
assertTrue(
|
||||
Assert.assertTrue(
|
||||
"Api ${api.name} returns link with invalid url ${link.url}",
|
||||
link.url.length > 4
|
||||
)
|
||||
|
|
@ -249,12 +245,12 @@ object TestingUtils {
|
|||
logger.log("Links loaded: $linksLoaded")
|
||||
return TestResult(linksLoaded > 0)
|
||||
} else {
|
||||
fail("Api ${api.name} returns false on loadLinks() with $linksLoaded links loaded")
|
||||
Assert.fail("Api ${api.name} returns false on loadLinks() with $linksLoaded links loaded")
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
when (e) {
|
||||
is NotImplementedError -> {
|
||||
fail("Provider has not implemented loadLinks()")
|
||||
Assert.fail("Provider has not implemented loadLinks()")
|
||||
}
|
||||
|
||||
else -> {
|
||||
|
|
@ -280,7 +276,7 @@ object TestingUtils {
|
|||
|
||||
// Test Homepage
|
||||
val homepage = testHomepage(api, logger)
|
||||
assertTrue("Homepage failed to load", homepage.success)
|
||||
Assert.assertTrue("Homepage failed to load", homepage.success)
|
||||
val homePageList = (homepage as? TestResultList)?.results ?: emptyList()
|
||||
|
||||
// Test Search Results
|
||||
|
|
@ -291,7 +287,7 @@ object TestingUtils {
|
|||
listOf("over", "iron", "guy")).take(3)
|
||||
|
||||
val searchResults = testSearch(api, searchQueries, logger)
|
||||
assertTrue("Failed to get search results", searchResults.success)
|
||||
Assert.assertTrue("Failed to get search results", searchResults.success)
|
||||
searchResults as TestResultList
|
||||
|
||||
// Test Load and LoadLinks
|
||||
|
|
@ -325,4 +321,4 @@ object TestingUtils {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -804,7 +804,6 @@ object VideoDownloadManager {
|
|||
private suspend fun resolve(
|
||||
startByte: Long,
|
||||
endByte: Long?,
|
||||
buffer: ByteArray,
|
||||
callback: (suspend CoroutineScope.(LazyStreamDownloadResponse) -> Unit)
|
||||
): Long = withContext(Dispatchers.IO) {
|
||||
var currentByte: Long = startByte
|
||||
|
|
@ -823,6 +822,7 @@ object VideoDownloadManager {
|
|||
)
|
||||
val requestStream = request.body.byteStream()
|
||||
|
||||
val buffer = ByteArray(bufferSize)
|
||||
var read: Int
|
||||
|
||||
try {
|
||||
|
|
@ -853,7 +853,6 @@ object VideoDownloadManager {
|
|||
suspend fun resolveSafe(
|
||||
index: Int,
|
||||
retries: Int = 3,
|
||||
buffer: ByteArray,
|
||||
callback: (suspend CoroutineScope.(LazyStreamDownloadResponse) -> Unit)
|
||||
): Boolean {
|
||||
var start = chuckStartByte.getOrNull(index) ?: return false
|
||||
|
|
@ -862,7 +861,7 @@ object VideoDownloadManager {
|
|||
for (i in 0 until retries) {
|
||||
try {
|
||||
// in case
|
||||
start = resolve(start, end, buffer, callback)
|
||||
start = resolve(start, end, callback)
|
||||
// no end defined, so we don't care exactly where it ended
|
||||
if (end == null) return true
|
||||
// we have download more or exactly what we needed
|
||||
|
|
@ -1159,29 +1158,13 @@ object VideoDownloadManager {
|
|||
}
|
||||
}
|
||||
|
||||
// Reuse a download buffer to decrease unnecessary alloc
|
||||
val buffer = ByteArray(items.bufferSize)
|
||||
|
||||
// This will take up the first available job and resolve
|
||||
// this will take up the first available job and resolve
|
||||
while (true) {
|
||||
if (!isActive) return@launch
|
||||
|
||||
var isTooFarAhead = false
|
||||
fileMutex.withLock {
|
||||
if (metadata.type == DownloadType.IsStopped
|
||||
|| metadata.type == DownloadType.IsFailed
|
||||
) return@launch
|
||||
|
||||
// Limit RAM usage by throttling if too much data is downloaded but not yet written to disk
|
||||
// 50MB limit
|
||||
if (metadata.bytesDownloaded - metadata.bytesWritten > 50_000_000) {
|
||||
isTooFarAhead = true
|
||||
}
|
||||
}
|
||||
|
||||
if (isTooFarAhead) {
|
||||
delay(500)
|
||||
continue
|
||||
}
|
||||
|
||||
// mutex just in case, we never want this to fail due to multithreading
|
||||
|
|
@ -1192,7 +1175,7 @@ object VideoDownloadManager {
|
|||
|
||||
// in case something has gone wrong set to failed if the fail is not caused by
|
||||
// user cancellation
|
||||
if (!items.resolveSafe(index, buffer = buffer, callback = callback)) {
|
||||
if (!items.resolveSafe(index, callback = callback)) {
|
||||
fileMutex.withLock {
|
||||
if (metadata.type != DownloadType.IsStopped) {
|
||||
metadata.type = DownloadType.IsFailed
|
||||
|
|
@ -1350,23 +1333,10 @@ object VideoDownloadManager {
|
|||
launch(Dispatchers.IO) {
|
||||
while (true) {
|
||||
if (!isActive) return@launch
|
||||
|
||||
var isTooFarAhead = false
|
||||
fileMutex.withLock {
|
||||
if (metadata.type == DownloadType.IsStopped
|
||||
|| metadata.type == DownloadType.IsFailed
|
||||
) return@launch
|
||||
|
||||
// Limit RAM usage by throttling if too much data is downloaded but not yet written to disk
|
||||
// 50MB limit
|
||||
if (metadata.bytesDownloaded - metadata.bytesWritten > 50_000_000) {
|
||||
isTooFarAhead = true
|
||||
}
|
||||
}
|
||||
|
||||
if (isTooFarAhead) {
|
||||
delay(500)
|
||||
continue
|
||||
}
|
||||
|
||||
// mutex just in case, we never want this to fail due to multithreading
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
package com.lagradost.cloudstream3.utils.serializers
|
||||
|
||||
import android.net.Uri
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
/**
|
||||
* Custom KSerializer for Android's [Uri] type.
|
||||
*
|
||||
* Uri is an Android platform type and cannot be annotated with @Serializable directly.
|
||||
* Registering it in a SerializersModule globally would require a custom module passed to
|
||||
* every Json instance, which adds hidden coupling. This serializer is also used sparingly
|
||||
* across the codebase, so the overhead of a global registration isn't justified.
|
||||
* Instead, we keep it explicit so that each usage site opts in intentionally and the
|
||||
* serialization behavior remains visible.
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* @Serializable
|
||||
* data class MyData(
|
||||
* @Serializable(with = UriSerializer::class)
|
||||
* val uri: Uri,
|
||||
* )
|
||||
*/
|
||||
object UriSerializer : KSerializer<Uri> {
|
||||
override val descriptor: SerialDescriptor =
|
||||
PrimitiveSerialDescriptor("Uri", PrimitiveKind.STRING)
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Uri) {
|
||||
encoder.encodeString(value.toString())
|
||||
}
|
||||
|
||||
override fun deserialize(decoder: Decoder): Uri {
|
||||
return Uri.parse(decoder.decodeString())
|
||||
}
|
||||
}
|
||||
|
|
@ -11,7 +11,6 @@
|
|||
android:id="@+id/player_metadata_scrim"
|
||||
android:layout_width="640dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="-10dp"
|
||||
android:background="@drawable/bg_player_metadata_scrim_netflix"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@
|
|||
android:id="@+id/player_metadata_scrim"
|
||||
android:layout_width="680dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="-10dp"
|
||||
android:background="@drawable/bg_player_metadata_scrim_netflix"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
android:id="@+id/player_metadata_scrim"
|
||||
android:layout_width="640dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="-10dp"
|
||||
android:background="@drawable/bg_player_metadata_scrim_netflix"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
@ -24,7 +24,8 @@
|
|||
<string name="subs_edge_type">Rand tipe</string>
|
||||
<string name="download_done">Klaar Afgelaai</string>
|
||||
<string name="continue_watching">Kyk verder</string>
|
||||
<string name="new_update_format" formatted="true">Nuwe opdatering gevind! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nuwe opdatering gevind!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="subs_download_languages">Laai Tale af</string>
|
||||
<string name="search_provider_text_providers">Soek deur verskaffers te gebruik</string>
|
||||
<string name="go_back_img_des">Gaan terug</string>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@
|
|||
<string name="next_episode_time_hour_format" formatted="true">%1$dሰዓት %2$dደቂቃ</string>
|
||||
<string name="search_poster_img_des">ፖስተር</string>
|
||||
<string name="title_downloads">የወረዱ</string>
|
||||
<string name="new_update_format" formatted="true">አዲስ ማሻሻያ ተገኝቷል! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">አዲስ ማሻሻያ ተገኝቷል!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="go_back_img_des">ተመለስ</string>
|
||||
<string name="episode_more_options_des">ተጨማሪ አማራጮች</string>
|
||||
<string name="type_watching">በማየት ላይ</string>
|
||||
|
|
|
|||
|
|
@ -29,7 +29,8 @@
|
|||
<string name="show_log_cat">فرجي الـLogcat 🐈</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="continue_watching">كفي حضر</string>
|
||||
<string name="new_update_format" formatted="true">في أپدايت جديدة! \n%1$s ← %2$s</string>
|
||||
<string name="new_update_format" formatted="true">في أپدايت جديدة!
|
||||
\n%1$s ← %2$s</string>
|
||||
<string name="subs_download_languages">نزل الترجمات مع الڤيديو</string>
|
||||
<string name="search_provider_text_providers">عوزو المصادر لَ تنبّشو</string>
|
||||
<string name="go_back_img_des">رجاع</string>
|
||||
|
|
@ -95,7 +96,8 @@
|
|||
<string name="subs_text_color">لون الكتيبة</string>
|
||||
<string name="type_completed">مخلص</string>
|
||||
<string name="use_system_brightness_settings_des">عوز قوة ضوّ الشاشة تبع السيستام بدل من تغميئ الڤيديو</string>
|
||||
<string name="restore_failed_format" formatted="true">فشل ترجيع النسخة الإحتياطية من ملف \n%s</string>
|
||||
<string name="restore_failed_format" formatted="true">فشل ترجيع النسخة الإحتياطية من ملف
|
||||
\n%s</string>
|
||||
<string name="play_trailer_button">مشّي المقطع الدعائي</string>
|
||||
<string name="play_livestream_button">مشّي البث المباشر</string>
|
||||
<string name="no_episodes_found">م لقينا ولا حلقة</string>
|
||||
|
|
@ -164,7 +166,8 @@
|
|||
<string name="no_subtitles">طفي الترجمة</string>
|
||||
<string name="synopsis">القصة</string>
|
||||
<string name="used_storage">مستعمل</string>
|
||||
<string name="resume_time_left" formatted="true">%dد \nباقي</string>
|
||||
<string name="resume_time_left" formatted="true">%dد
|
||||
\nباقي</string>
|
||||
<string name="status_ongoing">عم ينعرض حاليًا</string>
|
||||
<string name="queued">بلايحة النَطر</string>
|
||||
<string name="status">حالة</string>
|
||||
|
|
@ -191,7 +194,7 @@
|
|||
<string name="render_error">في مشكلة بجهاز العرض (Renderer error)</string>
|
||||
<string name="show_title">العِنوان</string>
|
||||
<string name="jsdelivr_proxy">پروكسي \"گِت هَب\"</string>
|
||||
<string name="limit_title_rez">فرجي معلومات مشغل الڤيديو</string>
|
||||
<string name="limit_title_rez">جودة مشغل الڤيديو</string>
|
||||
<string name="show_sub">ملصق الترجمة</string>
|
||||
<string name="ova_singular">أوڤا</string>
|
||||
<string name="episode_action_download_mirror">نَزِل من مصادر وجودات مختلفة</string>
|
||||
|
|
@ -358,7 +361,11 @@
|
|||
<string name="home_next_random_img_des">العشوائي يللي بعده</string>
|
||||
<string name="subtitles_shadow">خيال</string>
|
||||
<string name="subscription_in_progress_notification">عم نجدِد المثلثلات يللي مشتركينلها</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">مبين إنو فيه عنصر متل هيدا موجود بال مكتبة عندكن: \n \n%s \n \nبدكن تزيدو هيدا العنصر بأيّ حال، أو تستبدلوه مع العنصر الموجود، أو تلغو الإجراء؟</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">مبين إنو فيه عنصر متل هيدا موجود بال مكتبة عندكن:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nبدكن تزيدو هيدا العنصر بأيّ حال، أو تستبدلوه مع العنصر الموجود، أو تلغو الإجراء؟</string>
|
||||
<string name="batch_download_finish_format" formatted="true">نزلت %1$d %2$s</string>
|
||||
<string name="error_invalid_id">معرف مش صالح</string>
|
||||
<string name="skip_type_format" formatted="true">أفّي %s</string>
|
||||
|
|
@ -366,7 +373,9 @@
|
|||
<string name="enter_pin_with_name" formatted="true">حطو الأرقام السرية لـ\"%s\"</string>
|
||||
<string name="apk_installer_legacy">الطريقة القديمة</string>
|
||||
<string name="subtitles_raised">معلى</string>
|
||||
<string name="blank_repo_message">\"كلود ستريم\" م بتجي مع مصادر ڤيديوات. لازم تنزلو المصادر من ريپويات. \n \nفيه معلومات على الـ\"ديسكورد\" تبعنا، أو فيكن تنبشو ع معلومات على الإنترنت.</string>
|
||||
<string name="blank_repo_message">\"كلود ستريم\" م بتجي مع مصادر ڤيديوات. لازم تنزلو المصادر من ريپويات.
|
||||
\n
|
||||
\nفيه معلومات على الـ\"ديسكورد\" تبعنا، أو فيكن تنبشو ع معلومات على الإنترنت.</string>
|
||||
<string name="add_sync">زبد تتبع</string>
|
||||
<string name="mobile_data">3G/4G…</string>
|
||||
<string name="player_loaded_subtitles" formatted="true">نفَتح %s</string>
|
||||
|
|
@ -379,7 +388,8 @@
|
|||
<string name="uppercase_all_subtitles">دايمًا كتوب ب أحرف كاپيتال، A بدل a</string>
|
||||
<string name="player_pref">مشغل الڤيديو المفضل</string>
|
||||
<string name="quality_4k">4K</string>
|
||||
<string name="batch_download_start_format" formatted="true">بَلَش تنزيل %1$d %2$s \n…</string>
|
||||
<string name="batch_download_start_format" formatted="true">بَلَش تنزيل %1$d %2$s
|
||||
\n…</string>
|
||||
<string name="extension_description">الوصف</string>
|
||||
<string name="view_public_repositories_button">شوف الريپويات تبع مجتمع \"كلاود ستريم\"</string>
|
||||
<string name="safe_mode_title">إنت هلّق بال وضع الآمن</string>
|
||||
|
|
@ -409,7 +419,9 @@
|
|||
<string name="skip_setup">أفّى الإعداد</string>
|
||||
<string name="authenticated_user" formatted="true">فتت ع أكونت \"%s\" تبعك</string>
|
||||
<string name="subtitles_outline">حدود خطية</string>
|
||||
<string name="unable_to_inflate">في مشكلة بطعمير الـUI. هيدي مشكبة كبيرة. پليز بَلِغ عنّا \n(UI was unable to be created correctly) \n%s</string>
|
||||
<string name="unable_to_inflate">في مشكلة بطعمير الـUI. هيدي مشكبة كبيرة. پليز بَلِغ عنّا
|
||||
\n(UI was unable to be created correctly)
|
||||
\n%s</string>
|
||||
<string name="edit">عَدِل</string>
|
||||
<string name="sort_updated_new">تجَدَد (من الجديد للقديم)</string>
|
||||
<string name="quality_tc">TC</string>
|
||||
|
|
@ -465,7 +477,8 @@
|
|||
<string name="quality_sd">SD</string>
|
||||
<string name="extensions">الإضافات</string>
|
||||
<string name="subtitles_remove_bloat">شيل الإعلانات من الترجمة</string>
|
||||
<string name="empty_library_no_accounts_message">رفّكن فاضي ☹ \nفوتو على أكونت فيها رفّ الڤيديوات يللي حضرينها أو زيدو ڤيديوات بال رفّ المحلي.</string>
|
||||
<string name="empty_library_no_accounts_message">رفّكن فاضي ☹
|
||||
\nفوتو على أكونت فيها رفّ الڤيديوات يللي حضرينها أو زيدو ڤيديوات بال رفّ المحلي.</string>
|
||||
<string name="repository_name_hint">اسم الريپو (مش ضروري)</string>
|
||||
<string name="qualities">الجودات</string>
|
||||
<string name="error_invalid_data">بيانات مش صالحة</string>
|
||||
|
|
@ -492,7 +505,8 @@
|
|||
<string name="sort_rating_asc">رايتينگ (من الواطي للعالي)</string>
|
||||
<string name="player_load_subtitles">فتاح من ملف</string>
|
||||
<string name="disable">طفي</string>
|
||||
<string name="safe_mode_file">لقينا ملف الوضع الآمن! \nمش رح نعوز إضافيات وقت ما ينفَتَح الآپ حتّى ينشال الملف.</string>
|
||||
<string name="safe_mode_file">لقينا ملف الوضع الآمن!
|
||||
\nمش رح نعوز إضافيات وقت ما ينفَتَح الآپ حتّى ينشال الملف.</string>
|
||||
<string name="subtitle_offset_extra_hint_none_format">مش مغير وقت الترجمة</string>
|
||||
<string name="error">مشكلة</string>
|
||||
<string name="home_source">مصدر</string>
|
||||
|
|
@ -517,7 +531,7 @@
|
|||
<string name="plugin">إضافات</string>
|
||||
<string name="plugin_load_fail" formatted="true">م قدرنا نفتح %s</string>
|
||||
<string name="extension_rating" formatted="true">رايتينگ: %s</string>
|
||||
<string name="download_all_plugins_from_repo">تحزير: \"كلاود ستريم\" مش مسؤولة عن الإضافات المش رسمية، و م بتدعمن أبدًا!</string>
|
||||
<string name="download_all_plugins_from_repo">تحزير: \"كلاود ستريم 3\" مش مسؤولة عن الإضافات المش رسمية، و م بتدعمن أبدًا!</string>
|
||||
<string name="extension_status">الحالة</string>
|
||||
<string name="delete_repository">محي الريپو</string>
|
||||
<string name="category_player">مشغل الڤيديو</string>
|
||||
|
|
@ -526,7 +540,10 @@
|
|||
<string name="already_voted">إنتو أصلًا مصوتين</string>
|
||||
<string name="quality_cam">كاميرا</string>
|
||||
<string name="no_plugins_found_error">م لقينا ولا إضافة بال ريپو</string>
|
||||
<string name="duplicate_message_single" formatted="true">مبين إنو في عنصر متل هيدا موجود بالمكتبة عندكن: \n\"%s\" \n \nبدكن تزيدو هيدا العنصر بأيّ حال، أو تستبدلوّ مع العنصر الموجود، أو تلغو الإجراء؟</string>
|
||||
<string name="duplicate_message_single" formatted="true">مبين إنو في عنصر متل هيدا موجود بالمكتبة عندكن:
|
||||
\n\"%s\"
|
||||
\n
|
||||
\nبدكن تزيدو هيدا العنصر بأيّ حال، أو تستبدلوّ مع العنصر الموجود، أو تلغو الإجراء؟</string>
|
||||
<string name="error_invalid_url">رايط مش صالح</string>
|
||||
<string name="subtitle_offset_hint">1000 مللي ثانية</string>
|
||||
<string name="extension_version">إصدار</string>
|
||||
|
|
@ -546,7 +563,13 @@
|
|||
<string name="action_open_play">@string/home_play</string>
|
||||
<string name="action_remove_from_watched">شيلو من لايحة المحتوى الحاضرينو</string>
|
||||
<string name="skip_type_credits">الإعتمادات</string>
|
||||
<string name="quality_profile_help">فيكُن هون تغيرو طريقة ترتيب المصادر. المصدر يللي عنده أولوية أكتر بينحط أعلى بلايحت تنقايت المصدر. إنتو بتنقو الأولوية يإستعمال الأرقام. حطو الرقم الأعلى للمصادر والجودات يللي بتفضلوها. \n \nمتلًا: \nإزا المصدر \"أ\" بتفضلوه، بتعطوه كتير نقات (متلًا 8). \nإزا الجودة 480 ما بتحبوها، بتعطوها نقات قليلة (متلًا 1). \n \nعلامت المصدر وال جودة تبعه بينجمعو مع بعض (8 + 1 = 9). يللي علامته 10 أو أعلى، بينحط تلقائيًا، من دون ما ينعمل لود لكل المصادر!</string>
|
||||
<string name="quality_profile_help">فيكُن هون تغيرو طريقة ترتيب المصادر. المصدر يللي عنده أولوية أكتر بينحط أعلى بلايحت تنقايت المصدر. إنتو بتنقو الأولوية يإستعمال الأرقام. حطو الرقم الأعلى للمصادر والجودات يللي بتفضلوها.
|
||||
\n
|
||||
\nمتلًا:
|
||||
\nإزا المصدر \"أ\" بتفضلوه، بتعطوه كتير نقات (متلًا 8).
|
||||
\nإزا الجودة 480 ما بتحبوها، بتعطوها نقات قليلة (متلًا 1).
|
||||
\n
|
||||
\nعلامت المصدر وال جودة تبعه بينجمعو مع بعض (8 + 1 = 9). يللي علامته 10 أو أعلى، بينحط تلقائيًا، من دون ما ينعمل لود لكل المصادر!</string>
|
||||
<string name="enter_current_pin">حطو الأرقام السرية الحالية</string>
|
||||
<string name="audio_tracks">صوت</string>
|
||||
<string name="rotate_video_desc">حط كبسة لبرم إتجاه الشاشة</string>
|
||||
|
|
@ -566,14 +589,16 @@
|
|||
<string name="password_pin_authentication_title">رمز/كلمة مرور للمصادقة</string>
|
||||
<string name="biometric_setting_summary">فتاح التطبيق باستعمال البصمة، آي دي الوج، پِن، النمط، أو الپاسورد.</string>
|
||||
<string name="biometric_prompt_description">بعد كذا محاولة فاشلة، هيدا الشباك رح يسكر. بكل بساطة، سكر الآپ ورجاع فتحه حتى تجرب بعد مرة.</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nباقي</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nباقي</string>
|
||||
<string name="biometric_unsupported">المصادقة البيومترية مش مدعومة ع هالجهاز</string>
|
||||
<string name="unfavorite">شيله من المفضل</string>
|
||||
<string name="repo_copy_label">اسم وعنوان الريپو</string>
|
||||
<string name="toast_copied">نتسخ!</string>
|
||||
<string name="clipboard_permission_error">فيه ارور بال وصول ل الكليپ-بورد. پليز جرب مرة أخرى.</string>
|
||||
<string name="clipboard_unknown_error">فيه ارور بال نسخ. پليز نسوخ الـLogcat 🐈 وبعته ل المسؤولين عن دعم الآپ.</string>
|
||||
<string name="biometric_warning">هلّق نعمل نسخة احتياطية للداتا تبع \"كلود ستريم\". إذا مابق ينفتح ويمشي الآپ، فيك تعمل كلير للداتا تبعه وترَجع الداتا من النسخة الاحتياطية اللي هلّق عملنالك ياها. \nالاحتمال انو مابق ينفتح الآپ احتمالية زغيرة كتير، بس كل جهاز بيتصرف بشكل مختلف، ونحنا منعتذر إذا سببنا أي إزعاج.</string>
|
||||
<string name="biometric_warning">هلّق نعمل نسخة احتياطية للداتا تبع \"كلود ستريم\". إذا مابق ينفتح ويمشي الآپ، فيك تعمل كلير للداتا تبعه وترَجع الداتا من النسخة الاحتياطية اللي هلّق عملنالك ياها.
|
||||
\nالاحتمال انو مابق ينفتح الآپ احتمالية زغيرة كتير، بس كل جهاز بيتصرف بشكل مختلف، ونحنا منعتذر إذا سببنا أي إزعاج.</string>
|
||||
<string name="ok">أوكي</string>
|
||||
<string name="battery_dialog_title">وقف اپتميزايشن بطارية جهازك</string>
|
||||
<string name="app_unrestricted_toast">بطارية الآپ اصلًا محطوطة ع «غير مقيد» \"Unrestricted\"</string>
|
||||
|
|
@ -609,13 +634,21 @@
|
|||
<string name="downloads_delete_select">نقي الإشيا اللي بدك تمحيها</string>
|
||||
<string name="offline_file">موجود لينحضر بلا إنترنت</string>
|
||||
<string name="delete_files">محي الفايلات</string>
|
||||
<string name="delete_message_multiple" formatted="true">متأكد إنو بدك تمحي هيدي الإشيا ل الأبد؟ \n \n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">رح كمان تمحي ل الأبد كل الحلقات اللي ب هيدا المسلسل؟ \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">متأكد إنو بدك تمحي هيدي الإشيا ل الأبد؟
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">رح كمان تمحي ل الأبد كل الحلقات اللي ب هيدا المسلسل؟
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="select_all">نقي كل شي</string>
|
||||
<string name="deselect_all">شيل التنقاية</string>
|
||||
<string name="delete_format" formatted="true">محي (%1$d | %2$s)</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">متأكد إنو بدك تمحي هيدي الحلقات من %1$s؟ \n \n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">متأكد إنو بدك تمحي كل الحلقات اللي بهيدا المسلسل؟ \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">متأكد إنو بدك تمحي هيدي الحلقات من %1$s؟
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">متأكد إنو بدك تمحي كل الحلقات اللي بهيدا المسلسل؟
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="preview_seekbar">صورة زغيرة مع التقريب وال تبعيد</string>
|
||||
<string name="preview_seekbar_desc">بت حط صورة زغير من الڤيديو إنت و عم بت قرب أو ترجع بال ڤيديو</string>
|
||||
<string name="no_subtitles_loaded">بعد مش معمول لود لولا ترجمة</string>
|
||||
|
|
@ -706,33 +739,4 @@
|
|||
<string name="top_left">فوق، عال شمال</string>
|
||||
<string name="top_center">فوق، بال نُص</string>
|
||||
<string name="top_right">فوق، عال يمين</string>
|
||||
<string name="download_queue">ليستة التنزيلات</string>
|
||||
<string name="queue_empty_message">مافي شي عم يتنزّل هلّق.</string>
|
||||
<string name="extra_brightness_settings">قوة ضو إضافية</string>
|
||||
<string name="extra_brightness_settings_des">بت حط فلتر للبرايتنس لمّا تعلي قوة الضو ل أكتر من 100%</string>
|
||||
<string name="extra_brightness_key">extra_brightness_enabled</string>
|
||||
<string name="search_suggestions">اقتراحات التنبيش</string>
|
||||
<string name="search_suggestions_des">بت فرجي اقتراحات إنتا و عم بت نَبّش</string>
|
||||
<string name="clear_suggestions">مساح الاقتراحات</string>
|
||||
<string name="show_player_metadata_overlay">فرجي ميتا-ديتا فوق الڤيديو</string>
|
||||
<string name="show_cast_in_details">فرجي ليستة الممثلين</string>
|
||||
<string name="video_singular">ڤيديو</string>
|
||||
<string name="video_info">معلومات الڤيديو</string>
|
||||
<string name="source_priority">أولوية المصدر</string>
|
||||
<string name="source_priority_help">حدد ترتيب المصادر بال مشغل</string>
|
||||
<string name="source_name">اسم المصدر</string>
|
||||
<string name="download_all">نزلن كلن</string>
|
||||
<string name="cancel_all">لغين كلن</string>
|
||||
<string name="download_episode_range">بدك تنزل الحلقة %s؟</string>
|
||||
<string name="cancel_queue_message">بدك تلغي كل شي عم يتنَزَّل؟</string>
|
||||
<plurals name="downloads_active">
|
||||
<item quantity="one">م شي عم يتنزل</item>
|
||||
<item quantity="other">شي واحد عم يتنزل</item>
|
||||
</plurals>
|
||||
<plurals name="downloads_queued">
|
||||
<item quantity="one">مافي شي بعد بده يبلش يتنزل</item>
|
||||
<item quantity="other">فيه شي واحد بعد بده يبلش يتنزل</item>
|
||||
</plurals>
|
||||
<string name="player_is_live">لايڤ</string>
|
||||
<string name="skip_type_preview">پريڤيو</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">سرعة (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">تقييم: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">يوجد تحديث جديد! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">يوجد تحديث جديد!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d دقيقة</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="play_with_app_name">تشغيل بواسطة CloudStream</string>
|
||||
|
|
@ -175,8 +176,10 @@
|
|||
<string name="resume">إستئناف</string>
|
||||
<string name="go_back_30">-٣٠</string>
|
||||
<string name="go_forward_30">+٣٠</string>
|
||||
<string name="delete_message">سوف يتم الحذف نهائيا %s \nهل أنت متأكد?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nمتبقية</string>
|
||||
<string name="delete_message">سوف يتم الحذف نهائيا %s
|
||||
\nهل أنت متأكد?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nمتبقية</string>
|
||||
<string name="status_ongoing">جاري التنفيذ</string>
|
||||
<string name="status_completed">اكتمل</string>
|
||||
<string name="status">الحالة</string>
|
||||
|
|
@ -398,7 +401,9 @@
|
|||
<string name="plugins_downloaded" formatted="true">تم تحميل: %d</string>
|
||||
<string name="plugins_disabled" formatted="true">مُعطل %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">غير مُحمل: %d</string>
|
||||
<string name="blank_repo_message">لا يحتوي CloudStream على مواقع مثبتة افتراضيًا. تحتاج إلى تثبيت المواقع من المستودعات. \n \nانضم إلى ديسكورد أو ابحث عبر الإنترنت.</string>
|
||||
<string name="blank_repo_message">لا يحتوي CloudStream على مواقع مثبتة افتراضيًا. تحتاج إلى تثبيت المواقع من المستودعات.
|
||||
\n
|
||||
\nانضم إلى ديسكورد أو ابحث عبر الإنترنت.</string>
|
||||
<string name="view_public_repositories_button">عرض مستودعات المجتمع</string>
|
||||
<string name="view_public_repositories_button_short">قائمة عامة</string>
|
||||
<string name="uppercase_all_subtitles">جميع الترجمات حروف كبيرة</string>
|
||||
|
|
@ -488,13 +493,15 @@
|
|||
<string name="sort_rating_desc">التقييم (من الأعلى إلى الأدنى)</string>
|
||||
<string name="sort_rating_asc">التقييم (من الأدنى إلى الأعلى)</string>
|
||||
<string name="sort_alphabetical_z">الترتيب الأبجدي (من ي إلى أ)</string>
|
||||
<string name="empty_library_no_accounts_message">مكتبتك فارغة :( \nقم بتسجيل الدخول على حساب مكتبة أو أضف عروضا إلى مكتبتك المحلية.</string>
|
||||
<string name="empty_library_no_accounts_message">مكتبتك فارغة :(
|
||||
\nقم بتسجيل الدخول على حساب مكتبة أو أضف عروضا إلى مكتبتك المحلية.</string>
|
||||
<string name="sort_updated_old">محدث (من القديم إلى الجديد)</string>
|
||||
<string name="sort_by">فرز حسب</string>
|
||||
<string name="sort">افرز</string>
|
||||
<string name="open_with">فتح بواسطة</string>
|
||||
<string name="library">المكتبة</string>
|
||||
<string name="safe_mode_file">تم العثور على ملف الوضع الآمن! \nلا يتم تحميل أي ملحقات عند بدء التشغيل حتى تتم إزالة الملف.</string>
|
||||
<string name="safe_mode_file">تم العثور على ملف الوضع الآمن!
|
||||
\nلا يتم تحميل أي ملحقات عند بدء التشغيل حتى تتم إزالة الملف.</string>
|
||||
<string name="android_tv_interface_off_seek_settings_summary">مدة التقديم عنما يكون المشغل مخفيا</string>
|
||||
<string name="android_tv_interface_off_seek_settings">مدة التقديم - المشغل مخفي</string>
|
||||
<string name="pref_category_android_tv">تلفزيون أندرويد</string>
|
||||
|
|
@ -526,7 +533,13 @@
|
|||
<string name="edit">تعديل</string>
|
||||
<string name="profiles">الملفات التعريفية</string>
|
||||
<string name="help">مساعدة</string>
|
||||
<string name="quality_profile_help">هنا يمكنك تغيير طريقة ترتيب المصادر. إذا كان للفيديو أولوية أعلى ، فسيظهر في الأعلى في اختيار المصدر. يمثل مجموع أولوية المصدر وأولوية الجودة أولوية الفيديو. \n \nالمصدر أ: 3 \nالجودة ب: 7 \nسيكون لها أولوية فيديو مجمعة تبلغ 10. \n \nملاحظة: إذا كان المجموع 10 أو أكثر ، فسيتخطى المشغل التحميل تلقائيًا عند تحميل هذا الرابط!</string>
|
||||
<string name="quality_profile_help">هنا يمكنك تغيير طريقة ترتيب المصادر. إذا كان للفيديو أولوية أعلى ، فسيظهر في الأعلى في اختيار المصدر. يمثل مجموع أولوية المصدر وأولوية الجودة أولوية الفيديو.
|
||||
\n
|
||||
\nالمصدر أ: 3
|
||||
\nالجودة ب: 7
|
||||
\nسيكون لها أولوية فيديو مجمعة تبلغ 10.
|
||||
\n
|
||||
\nملاحظة: إذا كان المجموع 10 أو أكثر ، فسيتخطى المشغل التحميل تلقائيًا عند تحميل هذا الرابط!</string>
|
||||
<string name="qualities">النوعيات</string>
|
||||
<string name="profile_background_des">خلفية الملف الشخصي</string>
|
||||
<string name="unable_to_inflate">تعذر إنشاء واجهة المستخدم بشكل صحيح ، وهذا خطأ كبير ويجب الإبلاغ عنه على الفور %s</string>
|
||||
|
|
@ -539,7 +552,11 @@
|
|||
<string name="favorite_removed">تمت إزالة %s من المفضلة</string>
|
||||
<string name="favorites_list_name">المفضلة</string>
|
||||
<string name="favorite_added">تمت إضافة %s إلى المفضلة</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">احتمال وجود تكرارات في مكتبتك. \n \n%s \n \nهل تريد الاضافة على اي حال مستبدلاً النسخة الموجودة بالفعل, أم تفضل إلغاء العملية؟</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">احتمال وجود تكرارات في مكتبتك.
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nهل تريد الاضافة على اي حال مستبدلاً النسخة الموجودة بالفعل, أم تفضل إلغاء العملية؟</string>
|
||||
<string name="duplicate_title">احتمال أن يكون موجود بالفعل</string>
|
||||
<string name="lock_profile">قفل الحساب</string>
|
||||
<string name="action_add_to_favorites">اضافة الى المفضلة</string>
|
||||
|
|
@ -552,7 +569,9 @@
|
|||
<string name="action_subscribe">إشترك</string>
|
||||
<string name="action_remove_from_favorites">إزالة من المفضلة</string>
|
||||
<string name="select_an_account">اختار حساب</string>
|
||||
<string name="duplicate_message_single">يبدو أن هناك عنصرًا مكررًا موجود بالفعل في مكتبتك: \'%s\'. \n \nهل ترغب في إضافة هذا العنصر على أية حال، أو استبدال العنصر الموجود، أو إلغاء الإجراء؟</string>
|
||||
<string name="duplicate_message_single">يبدو أن هناك عنصرًا مكررًا موجود بالفعل في مكتبتك: \'%s\'.
|
||||
\n
|
||||
\nهل ترغب في إضافة هذا العنصر على أية حال، أو استبدال العنصر الموجود، أو إلغاء الإجراء؟</string>
|
||||
<string name="enter_pin">ادخال ال PIN</string>
|
||||
<string name="pin">PIN</string>
|
||||
<string name="enter_current_pin">أدخل ال PIN الحالي</string>
|
||||
|
|
@ -580,7 +599,8 @@
|
|||
<string name="password_pin_authentication_title">مصادقة كلمة المرور/رقم التعريف الشخصي</string>
|
||||
<string name="biometric_prompt_description">بعد عدة محاولات فاشلة، سيتم إغلاق المطالبة. ما عليك سوى إعادة تشغيل التطبيق للمحاولة مرة أخرى.</string>
|
||||
<string name="biometric_warning">لقد تم الآن نسخ بيانات CloudStream احتياطيًا. على الرغم من أن احتمال حدوث ذلك منخفض جدًا، إلا أن جميع الأجهزة يمكن أن تتصرف بشكل مختلف. في الحالات النادرة، التي يتم فيها منعك من الوصول إلى التطبيق، قم بمسح بيانات التطبيق بالكامل واستعادتها من نسخة احتياطية. نحن نأسف جدًا لأي إزعاج ناتج عن هذا.</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nمتبقي</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nمتبقي</string>
|
||||
<string name="favorite">المفضلة</string>
|
||||
<string name="unfavorite">إزالة من المفضلة</string>
|
||||
<string name="repo_copy_label">اسم و عنوان المخزن</string>
|
||||
|
|
@ -622,13 +642,21 @@
|
|||
<string name="downloads_delete_select">الرجاء تحديد العناصر للحذف</string>
|
||||
<string name="select_all">تحديد الكل</string>
|
||||
<string name="delete_files">حذف الملفات</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">هل أنت متأكد أنك تريد حذف الحلقات التالية نهائيًا في %1$s ؟ \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">ستقوم أيضًا بحذف جميع الحلقات في السلسلة التالية نهائيًا: \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">هل أنت متأكد أنك تريد حذف الحلقات التالية نهائيًا في %1$s ؟
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">ستقوم أيضًا بحذف جميع الحلقات في السلسلة التالية نهائيًا:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_format" formatted="true">حذف (%1$d | %2$s)</string>
|
||||
<string name="offline_file">متاح للمشاهدة في وضع عدم الاتصال</string>
|
||||
<string name="deselect_all">إلغاء تحديد الكل</string>
|
||||
<string name="delete_message_multiple" formatted="true">هل أنت متأكد أنك تريد حذف العناصر التالية نهائيًا ؟ \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">هل أنت متأكد أنك تريد حذف جميع الحلقات في السلسلة التالية نهائيًا ؟ \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">هل أنت متأكد أنك تريد حذف العناصر التالية نهائيًا ؟
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">هل أنت متأكد أنك تريد حذف جميع الحلقات في السلسلة التالية نهائيًا ؟
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="preview_seekbar">معاينة شريط البحث</string>
|
||||
<string name="preview_seekbar_desc">تمكين معاينة الصورة المصغرة على شريط البحث</string>
|
||||
<string name="no_subtitles_loaded">لم يتم تحميل أي ترجمات بعد</string>
|
||||
|
|
@ -721,7 +749,7 @@
|
|||
<string name="search_suggestions">اقتراحات البحث</string>
|
||||
<string name="search_suggestions_des">عرض اقتراحات البحث أثناء الكتابة</string>
|
||||
<string name="clear_suggestions">مسح الاقتراحات</string>
|
||||
<string name="show_cast_in_details">عرض لوحة فريق التمثيل</string>
|
||||
<string name="show_cast_in_details">عرض لوحة البث</string>
|
||||
<string name="install_prerelease">تثبيت الإصدار التجريبي</string>
|
||||
<string name="prerelease_already_installed">تم تثبيت الإصدار التجريبي بالفعل.</string>
|
||||
<string name="prerelease_install_failed">فشل تثبيت الإصدار التجريبي.</string>
|
||||
|
|
@ -753,7 +781,4 @@
|
|||
<item quantity="other">%d تنزيل قيد الانتظار</item>
|
||||
</plurals>
|
||||
<string name="show_player_metadata_overlay">عرض واجهة منبثقة للبيانات الوصفية للمشغِّل</string>
|
||||
<string name="video_singular">مقطع</string>
|
||||
<string name="skip_type_preview">استعراض</string>
|
||||
<string name="player_is_live">البث قائم</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@
|
|||
<string name="download_paused">توقف التنزيل</string>
|
||||
<string name="type_plan_to_watch">خطط للمشاهدة</string>
|
||||
<string name="type_re_watching">إعادة المشاهدة</string>
|
||||
<string name="new_update_format" formatted="true">!تم العثور على تحديث جديد \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">!تم العثور على تحديث جديد
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="rated_format" formatted="true">%.1f:قدر</string>
|
||||
<string name="duration_format" formatted="true">%dاقل</string>
|
||||
<string name="app_name">كلاودستريم</string>
|
||||
|
|
@ -156,15 +157,23 @@
|
|||
<string name="sort_updated_new">تم التحديث (من الجديد إلى القديم)</string>
|
||||
<string name="sort_updated_old">تم التحديث (القديم إلى الجديد)</string>
|
||||
<string name="sort_alphabetical_a">أبجديًا (من الألف إلى الياء)</string>
|
||||
<string name="empty_library_no_accounts_message">مكتبتك فارغة :( \nقم بتسجيل الدخول إلى حساب المكتبة أو قم بإضافة العروض إلى مكتبتك المحلية.</string>
|
||||
<string name="safe_mode_file">!تم العثور على ملف الوضع الآمن \n.عدم تحميل أي ملحقات عند بدء التشغيل حتى تتم إزالة الملف</string>
|
||||
<string name="empty_library_no_accounts_message">مكتبتك فارغة :(
|
||||
\nقم بتسجيل الدخول إلى حساب المكتبة أو قم بإضافة العروض إلى مكتبتك المحلية.</string>
|
||||
<string name="safe_mode_file">!تم العثور على ملف الوضع الآمن
|
||||
\n.عدم تحميل أي ملحقات عند بدء التشغيل حتى تتم إزالة الملف</string>
|
||||
<string name="revert">ارجع</string>
|
||||
<string name="subscription_in_progress_notification">تحديث العروض المشتركة</string>
|
||||
<string name="set_default">الوضع العادي</string>
|
||||
<string name="edit">حرر</string>
|
||||
<string name="profiles">ملفات تعريفية</string>
|
||||
<string name="help">مساعدة</string>
|
||||
<string name="quality_profile_help">.هنا يمكنك تغيير كيفية ترتيب المصادر. إذا كان للفيديو أولوية أعلى، فسيظهر في مكان أعلى في تحديد المصدر. مجموع أولوية المصدر وأولوية الجودة هو أولوية الفيديو \n \nالمصدر أ: 3 \nالجودة ب: 7 \nستكون أولوية الفيديو المدمجة .10 \n \n!ملاحظة: إذا كان المجموع 10 أو أكثر، فسيقوم اللاعب تلقائيًا بتخطي التحميل عند تحميل هذا الرابط</string>
|
||||
<string name="quality_profile_help">.هنا يمكنك تغيير كيفية ترتيب المصادر. إذا كان للفيديو أولوية أعلى، فسيظهر في مكان أعلى في تحديد المصدر. مجموع أولوية المصدر وأولوية الجودة هو أولوية الفيديو
|
||||
\n
|
||||
\nالمصدر أ: 3
|
||||
\nالجودة ب: 7
|
||||
\nستكون أولوية الفيديو المدمجة .10
|
||||
\n
|
||||
\n!ملاحظة: إذا كان المجموع 10 أو أكثر، فسيقوم اللاعب تلقائيًا بتخطي التحميل عند تحميل هذا الرابط</string>
|
||||
<string name="already_voted">لقد صوت بالفعل</string>
|
||||
<string name="sort_alphabetical_z">أبجديًا (ياء إلى ألف)</string>
|
||||
<string name="sort_by">ترتيب حسب</string>
|
||||
|
|
@ -218,7 +227,8 @@
|
|||
<string name="sort_apply">قدم</string>
|
||||
<string name="torrent_plot">وصف</string>
|
||||
<string name="picture_in_picture_des">يستمر التشغيل في مشغل مصغر فوق التطبيقات الأخرى</string>
|
||||
<string name="delete_message" formatted="true">نهائيا %sسيؤدي هذا الى حذف \nهل أنت متأكد؟</string>
|
||||
<string name="delete_message" formatted="true">نهائيا %sسيؤدي هذا الى حذف
|
||||
\nهل أنت متأكد؟</string>
|
||||
<string name="subs_font">الخط</string>
|
||||
<string name="subs_font_size">حجم الخط</string>
|
||||
<string name="action_remove_watching">زيل</string>
|
||||
|
|
@ -245,7 +255,8 @@
|
|||
<string name="show_log_cat">🐈عرض لوجكات</string>
|
||||
<string name="test_log">سجل</string>
|
||||
<string name="picture_in_picture">صور في صور</string>
|
||||
<string name="resume_time_left" formatted="true">%d \nباقي</string>
|
||||
<string name="resume_time_left" formatted="true">%d
|
||||
\nباقي</string>
|
||||
<string name="video_source">مصدر</string>
|
||||
<string name="android_tv_interface_off_seek_settings">اللاعب مخفي - ابحث عن المبلغ</string>
|
||||
<string name="backup_frequency">تكرار النسخ الاحتياطي</string>
|
||||
|
|
|
|||
|
|
@ -252,9 +252,12 @@
|
|||
<string name="resume">পুনৰ আৰম্ভ কৰক</string>
|
||||
<string name="go_back_30">-৩০</string>
|
||||
<string name="go_forward_30">+৩০</string>
|
||||
<string name="delete_message" formatted="true">এইটো স্থায়ীভাৱে %s ডিলিট কৰিব। \nআপুনি নিশ্চিত নেকি?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nবাকী</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nবাকী</string>
|
||||
<string name="delete_message" formatted="true">এইটো স্থায়ীভাৱে %s ডিলিট কৰিব।
|
||||
\nআপুনি নিশ্চিত নেকি?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nবাকী</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nবাকী</string>
|
||||
<string name="status_ongoing">চলমান</string>
|
||||
<string name="status_completed">সম্পূৰ্ণ</string>
|
||||
<string name="status">স্থিতি</string>
|
||||
|
|
@ -453,7 +456,9 @@
|
|||
<string name="plugins_updated" formatted="true">%d প্লাগইন আপডেট কৰা হ\'ল</string>
|
||||
<string name="plugins_disabled" formatted="true">নিষ্ক্ৰিয় কৰা: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">ডাউনলোড কৰা নহয়: %d</string>
|
||||
<string name="blank_repo_message">CloudStreamত কোনো চাইট ডিফল্টভাৱে ইনষ্টল হোৱা নাই। আপুনিয়ে ৰিপ\'জিট\'ৰিবোৰৰ পৰা চাইটসমূহ ইনষ্টল কৰিব লাগিব। \n \nআমাৰ Discordত যোগদান কৰক বা অনলাইন বিচাৰক।</string>
|
||||
<string name="blank_repo_message">CloudStreamত কোনো চাইট ডিফল্টভাৱে ইনষ্টল হোৱা নাই। আপুনিয়ে ৰিপ\'জিট\'ৰিবোৰৰ পৰা চাইটসমূহ ইনষ্টল কৰিব লাগিব।
|
||||
\n
|
||||
\nআমাৰ Discordত যোগদান কৰক বা অনলাইন বিচাৰক।</string>
|
||||
<string name="view_public_repositories_button">সম্প্ৰদায়ৰ ৰিপ\'জিট\'ৰিসমূহ চাওক</string>
|
||||
<string name="uppercase_all_subtitles">সকলো চাবটাইটল মুকলি আখৰত</string>
|
||||
<string name="download_all_plugins_from_repo">সতর্কতা: CloudStream 3 কোৱা নাই যে তৃতীয় পক্ষৰ বৃদ্ধিসমূহ ব্যৱহাৰ কৰিবলৈ আপুনি সম্পূৰ্ণ দায়িত্ব ল\'ব আৰু কোনো সহায় নাপাব!</string>
|
||||
|
|
@ -518,9 +523,11 @@
|
|||
<string name="sort_alphabetical_a">বৰ্ণানুক্ৰমিক (A ৰ পৰা Z)</string>
|
||||
<string name="select_library">পুথিভঁৰালী বাছক</string>
|
||||
<string name="open_with">ইয়াৰ সহায়ত খুলক</string>
|
||||
<string name="empty_library_no_accounts_message">আপোনাৰ পুথিভঁৰালী খালি আছে :( \nএখন পুথিভঁৰালী একাউণ্টত লগ ইন কৰক বা স্থানীয় পুথিভঁৰালীত শ্ব\'সমূহ যোগ কৰক।</string>
|
||||
<string name="empty_library_no_accounts_message">আপোনাৰ পুথিভঁৰালী খালি আছে :(
|
||||
\nএখন পুথিভঁৰালী একাউণ্টত লগ ইন কৰক বা স্থানীয় পুথিভঁৰালীত শ্ব\'সমূহ যোগ কৰক।</string>
|
||||
<string name="empty_library_logged_in_message">এই তালিকা খালি। অন্য এটি তালিকালৈ সলনি কৰি চাওক।</string>
|
||||
<string name="safe_mode_file">নিরাপদ ম\'ড ফাইল পোৱা গৈছে! \nফাইল আঁতৰোৱা নোহোৱালৈকে কোনো এক্সটেনশ্যন আৰম্ভ নকৰা হৈছে।</string>
|
||||
<string name="safe_mode_file">নিরাপদ ম\'ড ফাইল পোৱা গৈছে!
|
||||
\nফাইল আঁতৰোৱা নোহোৱালৈকে কোনো এক্সটেনশ্যন আৰম্ভ নকৰা হৈছে।</string>
|
||||
<string name="revert">ঘূৰাই দিয়া</string>
|
||||
<string name="subscription_in_progress_notification">সদস্যতা গ্ৰহণ কৰা শ্ব\'সমূহ আপডেট কৰিছে</string>
|
||||
<string name="subscription_new">%s-ত সদস্যতা গ্ৰহণ কৰা হৈছে</string>
|
||||
|
|
@ -532,7 +539,13 @@
|
|||
<string name="edit">সম্পাদনা কৰক</string>
|
||||
<string name="profiles">প্ৰ\'ফাইলসমূহ</string>
|
||||
<string name="help">সহায়</string>
|
||||
<string name="quality_profile_help">ইয়াত আপুনি উৎসসমূহ কেনেকৈ ক্ৰম অনুযায়ী চিহ্নিত কৰিব সেই বিষয়ে সলনি কৰিব পাৰে। যদি এখন ভিডিঅ\'ৰ উচ্চ অগ্ৰাধিকাৰ থাকে তেন্তে সেইটো উৎস নিৰ্বাচনৰ সময়ত ওপৰত দেখা যাব। উৎস অগ্ৰাধিকাৰ আৰু গুণ অগ্ৰাধিকাৰৰ মুঠ যোগফল হৈছে ভিডিঅ\'ৰ অগ্ৰাধিকাৰ। \n \nউৎস A: 3 \nগুণ B: 7 \nসৰহযোগে ভিডিঅ\'ৰ অগ্ৰাধিকাৰ হ\'ব 10। \n \nদ্ৰষ্টব্য: যদি যোগফল 10 বা তাৰ ওপৰত থাকে তেন্তে প্লেয়াৰটো নিজেই লিংক ল\'ড কৰাৰ সময়ত ল\'ডিং এড়াই যাব!</string>
|
||||
<string name="quality_profile_help">ইয়াত আপুনি উৎসসমূহ কেনেকৈ ক্ৰম অনুযায়ী চিহ্নিত কৰিব সেই বিষয়ে সলনি কৰিব পাৰে। যদি এখন ভিডিঅ\'ৰ উচ্চ অগ্ৰাধিকাৰ থাকে তেন্তে সেইটো উৎস নিৰ্বাচনৰ সময়ত ওপৰত দেখা যাব। উৎস অগ্ৰাধিকাৰ আৰু গুণ অগ্ৰাধিকাৰৰ মুঠ যোগফল হৈছে ভিডিঅ\'ৰ অগ্ৰাধিকাৰ।
|
||||
\n
|
||||
\nউৎস A: 3
|
||||
\nগুণ B: 7
|
||||
\nসৰহযোগে ভিডিঅ\'ৰ অগ্ৰাধিকাৰ হ\'ব 10।
|
||||
\n
|
||||
\nদ্ৰষ্টব্য: যদি যোগফল 10 বা তাৰ ওপৰত থাকে তেন্তে প্লেয়াৰটো নিজেই লিংক ল\'ড কৰাৰ সময়ত ল\'ডিং এড়াই যাব!</string>
|
||||
<string name="profile_background_des">প্ৰ\'ফাইলৰ পটভূমি</string>
|
||||
<string name="unable_to_inflate">UI সঠিকভাৱে সৃষ্টি কৰিব পৰা নগ\'ল, ই এটা গুৰুত্বপূৰ্ণ সমস্যা আৰু তাক অবিলম্বে জনোৱা উচিত %s</string>
|
||||
<string name="already_voted">আপুনি ইতিমধ্যে ভোট দিছে</string>
|
||||
|
|
@ -543,8 +556,14 @@
|
|||
<string name="action_remove_from_favorites">প্ৰিয় তালিকাৰ পৰা আঁতৰ কৰক</string>
|
||||
<string name="duplicate_title">সম্ভাৱ্য নকল বস্ত্ত পোৱা গৈছে</string>
|
||||
<string name="duplicate_replace_all">সকলো প্ৰতিস্থাপন কৰক</string>
|
||||
<string name="duplicate_message_single" formatted="true">আপোনাৰ পুথিভঁৰালীতে সম্ভাৱ্য নকল বস্তু পোৱা গৈছে: \'%s.\' \n \nআপুনি এই বস্তু যিকোনো হ\'লে যোগ কৰিব বিচাৰেনে, বিদ্যমান বস্তু প্ৰতিস্থাপন কৰিব, বা কাৰ্য বাতিল কৰিব বিচাৰেনে?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">আপোনাৰ পুথিভঁৰালীতে সম্ভাৱ্য নকল বস্তুসমূহ পোৱা গৈছে: \n \n%s \n \nআপুনি এই বস্তু যিকোনো হ\'লে যোগ কৰিব বিচাৰেনে, বিদ্যমানবোৰ প্ৰতিস্থাপন কৰিব, বা কাৰ্য বাতিল কৰিব বিচাৰেনে?</string>
|
||||
<string name="duplicate_message_single" formatted="true">আপোনাৰ পুথিভঁৰালীতে সম্ভাৱ্য নকল বস্তু পোৱা গৈছে: \'%s.\'
|
||||
\n
|
||||
\nআপুনি এই বস্তু যিকোনো হ\'লে যোগ কৰিব বিচাৰেনে, বিদ্যমান বস্তু প্ৰতিস্থাপন কৰিব, বা কাৰ্য বাতিল কৰিব বিচাৰেনে?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">আপোনাৰ পুথিভঁৰালীতে সম্ভাৱ্য নকল বস্তুসমূহ পোৱা গৈছে:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nআপুনি এই বস্তু যিকোনো হ\'লে যোগ কৰিব বিচাৰেনে, বিদ্যমানবোৰ প্ৰতিস্থাপন কৰিব, বা কাৰ্য বাতিল কৰিব বিচাৰেনে?</string>
|
||||
<string name="enter_pin_with_name" formatted="true">%s ৰ বাবে পিন সন্নিবিষ্ট কৰক</string>
|
||||
<string name="enter_current_pin">বৰ্তমান পিন সন্নিবিষ্ট কৰক</string>
|
||||
<string name="lock_profile">প্ৰফাইল লক কৰক</string>
|
||||
|
|
@ -569,7 +588,8 @@
|
|||
<string name="download">ডাউনলোড</string>
|
||||
<string name="updates_settings_des">এপ্ আৰম্ভণিৰ পিছত নতুন আপডেটৰ সন্ধান কৰক।</string>
|
||||
<string name="anim">একেই ডেভেলপাৰৰ দ্বাৰা এনিম এপ্</string>
|
||||
<string name="new_update_format" formatted="true">নতুন আপডেট পোৱা গ’ল! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">নতুন আপডেট পোৱা গ’ল!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">ফিলাৰ</string>
|
||||
<string name="play_with_app_name">CloudStreamৰে প্লে কৰক</string>
|
||||
<string name="title_search">সন্ধান</string>
|
||||
|
|
@ -589,10 +609,18 @@
|
|||
<string name="sort_apply">প্ৰয়োগ কৰক</string>
|
||||
<string name="delete_files">ফাইলসমূহ ডিলিট কৰক</string>
|
||||
<string name="delete_format" formatted="true">ডিলিট (%1$d | %2$s)</string>
|
||||
<string name="delete_message_multiple" formatted="true">আপুনি স্থায়ীভাৱে তলত দিয়া আইটেমসমূহ ডিলিট কৰিবলৈ নিশ্চিত নেকি? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">%1$s ত তলত দিয়া এপিচ’ডসমূহ স্থায়ীভাৱে ডিলিট কৰিব নেকি? \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">আপুনি দিয়া ছিৰিজৰ সকলো এপিচ’ড স্থায়ীভাৱে ডিলিট কৰিব: \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">আপুনি দিয়া ছিৰিজৰ সকলো এপিচ’ড স্থায়ীভাৱে ডিলিট কৰিবলৈ নিশ্চিত নেকি? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">আপুনি স্থায়ীভাৱে তলত দিয়া আইটেমসমূহ ডিলিট কৰিবলৈ নিশ্চিত নেকি?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">%1$s ত তলত দিয়া এপিচ’ডসমূহ স্থায়ীভাৱে ডিলিট কৰিব নেকি?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">আপুনি দিয়া ছিৰিজৰ সকলো এপিচ’ড স্থায়ীভাৱে ডিলিট কৰিব:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">আপুনি দিয়া ছিৰিজৰ সকলো এপিচ’ড স্থায়ীভাৱে ডিলিট কৰিবলৈ নিশ্চিত নেকি?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="sort_release_date_old">মুক্তিৰ তাৰিখ (পুৰণাৰ পৰা নতুন)</string>
|
||||
<string name="test_warning">সতৰ্কবাৰ্তা</string>
|
||||
<string name="auth_locally">স্থানীয়ভাৱে প্ৰমাণীকৰণ কৰক</string>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,8 @@
|
|||
<string name="preview_background_img_des">Визуализация на фона</string>
|
||||
<string formatted="true" name="player_speed_text_format">Скорост (%.2fx)</string>
|
||||
<string formatted="true" name="rated_format">Оценка: %.1f</string>
|
||||
<string formatted="true" name="new_update_format">Намерена е нова актуализация! \n%1$s -> %2$s</string>
|
||||
<string formatted="true" name="new_update_format">Намерена е нова актуализация!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string formatted="true" name="filler">Шаблон</string>
|
||||
<string formatted="true" name="duration_format">%d мин</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
|
|
@ -182,8 +183,10 @@
|
|||
<string name="resume">Продължи</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">30</string>
|
||||
<string formatted="true" name="delete_message">Това ще изтрие за постоянно %s \nСигурни ли сте?</string>
|
||||
<string formatted="true" name="resume_time_left">%dm \nостава</string>
|
||||
<string formatted="true" name="delete_message">Това ще изтрие за постоянно %s
|
||||
\nСигурни ли сте?</string>
|
||||
<string formatted="true" name="resume_time_left">%dm
|
||||
\nостава</string>
|
||||
<string name="status_ongoing">Продължава</string>
|
||||
<string name="status_completed">Завършен</string>
|
||||
<string name="status">Статус</string>
|
||||
|
|
@ -402,7 +405,9 @@
|
|||
<string formatted="true" name="plugins_disabled">Деактивирано: %d</string>
|
||||
<string formatted="true" name="plugins_not_downloaded">Не е изтеглено: %d</string>
|
||||
<string formatted="true" name="plugins_updated">Актуализирани %d плъгини</string>
|
||||
<string name="blank_repo_message">CloudStream няма инсталирани сайтове по подразбиране. Трябва да инсталирате сайтовете от хранилища. \n \nПрисъединете се към нашия Дискорд или потърсете онлайн.</string>
|
||||
<string name="blank_repo_message">CloudStream няма инсталирани сайтове по подразбиране. Трябва да инсталирате сайтовете от хранилища.
|
||||
\n
|
||||
\nПрисъединете се към нашия Дискорд или потърсете онлайн.</string>
|
||||
<string name="view_public_repositories_button">Вижте хранилищата на общността</string>
|
||||
<string name="view_public_repositories_button_short">Публичен списък</string>
|
||||
<string name="uppercase_all_subtitles">Всички субтитри с главни букви</string>
|
||||
|
|
@ -514,10 +519,12 @@
|
|||
<string name="profile_number">Профил %d</string>
|
||||
<string name="sort_alphabetical_a">По азбучен ред (A до Z)</string>
|
||||
<string name="open_with">Отваряне с</string>
|
||||
<string name="empty_library_no_accounts_message">Вашата библиотека е празна :( \nВпишете се в акаунт с библиотеки или добавете сериали в локалната Ви библиотека.</string>
|
||||
<string name="empty_library_no_accounts_message">Вашата библиотека е празна :(
|
||||
\nВпишете се в акаунт с библиотеки или добавете сериали в локалната Ви библиотека.</string>
|
||||
<string name="use">Използване</string>
|
||||
<string name="subscription_episode_released">Епизод %d е публикуван!</string>
|
||||
<string name="safe_mode_file">Намерен е файл за безопасен режим! \nНяма да се зареждат никакви разширения при стартиране, докато файлът не бъде премахнат.</string>
|
||||
<string name="safe_mode_file">Намерен е файл за безопасен режим!
|
||||
\nНяма да се зареждат никакви разширения при стартиране, докато файлът не бъде премахнат.</string>
|
||||
<string name="already_voted">Вече сте гласували</string>
|
||||
<string name="set_default">Задаване по подразбиране</string>
|
||||
<string name="pin_error_length">ПИН трябва да е 4 символа</string>
|
||||
|
|
@ -544,11 +551,23 @@
|
|||
<string name="android_tv_interface_off_seek_settings">Скрит играч - сума за търсене</string>
|
||||
<string name="android_tv_interface_off_seek_settings_summary">Сумата за търсене, използвана, когато играчът е скрит</string>
|
||||
<string name="sort_updated_new">Актуализирано (от ново към старо)</string>
|
||||
<string name="quality_profile_help">Тук можете да промените начина на подреждане на източниците. Ако даден видеоклип има по-висок приоритет, той ще се показва по-високо в избора на източник. Сборът от приоритета на източника и приоритета на качеството е приоритетът на видеото. \n \nИзточник A: 3 \nКачество B: 7 \nЩе има комбиниран видео приоритет от 10. \n \nЗАБЕЛЕЖКА: Ако сумата е 10 или повече, играчът автоматично ще пропусне зареждането, когато тази връзка се зареди!</string>
|
||||
<string name="quality_profile_help">Тук можете да промените начина на подреждане на източниците. Ако даден видеоклип има по-висок приоритет, той ще се показва по-високо в избора на източник. Сборът от приоритета на източника и приоритета на качеството е приоритетът на видеото.
|
||||
\n
|
||||
\nИзточник A: 3
|
||||
\nКачество B: 7
|
||||
\nЩе има комбиниран видео приоритет от 10.
|
||||
\n
|
||||
\nЗАБЕЛЕЖКА: Ако сумата е 10 или повече, играчът автоматично ще пропусне зареждането, когато тази връзка се зареди!</string>
|
||||
<string name="duplicate_replace">Замени</string>
|
||||
<string name="duplicate_replace_all">Замени Всички</string>
|
||||
<string name="duplicate_message_single" formatted="true">Изглежда, че потенциално дублиран елемент вече съществува във вашата библиотека: „%s“. \n \nИскате ли все пак да добавите този елемент, да замените съществуващия или да отмените действието?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Във вашата библиотека са намерени потенциални дублиращи се елементи: \n \n%s \n \nИскате ли все пак да добавите този елемент, да замените съществуващите или да отмените действието?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Изглежда, че потенциално дублиран елемент вече съществува във вашата библиотека: „%s“.
|
||||
\n
|
||||
\nИскате ли все пак да добавите този елемент, да замените съществуващия или да отмените действието?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Във вашата библиотека са намерени потенциални дублиращи се елементи:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nИскате ли все пак да добавите този елемент, да замените съществуващите или да отмените действието?</string>
|
||||
<string name="lock_profile">Заключи Профил</string>
|
||||
<string name="enter_current_pin">Вкарай Сегашен ПИН</string>
|
||||
<string name="manage_accounts">Управлявай Профили</string>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@
|
|||
<string name="preview_background_img_des">ব্যাকগ্রাউন্ড দেখান</string>
|
||||
<string name="player_speed_text_format" formatted="true">গতি (%.2f গুণ)</string>
|
||||
<string name="rated_format" formatted="true">মূল্যায়নঃ %.1f</string>
|
||||
<string name="new_update_format" formatted="true">নতুন আপডেট এসেছে! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">নতুন আপডেট এসেছে!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">ফিলার</string>
|
||||
<string name="duration_format" formatted="true">%d মিনিট</string>
|
||||
<string name="app_name">ক্লাউডস্ট্রিম</string>
|
||||
|
|
@ -158,7 +159,8 @@
|
|||
<string name="movies">সিনেমা</string>
|
||||
<string name="discord">ডিসকর্ডে যোগ দিন</string>
|
||||
<string name="torrent">টরেন্টস</string>
|
||||
<string name="delete_message" formatted="true">এটি স্থায়ীভাবে মুছে ফেলা হবে %s \nআপনি কি নিশ্চিত?</string>
|
||||
<string name="delete_message" formatted="true">এটি স্থায়ীভাবে মুছে ফেলা হবে %s
|
||||
\nআপনি কি নিশ্চিত?</string>
|
||||
<string name="pause">থামুন</string>
|
||||
<string name="go_back_30">-৩০</string>
|
||||
<string name="github">গিটহাব</string>
|
||||
|
|
@ -182,7 +184,8 @@
|
|||
<string name="used_storage">ব্যবহৃত</string>
|
||||
<string name="library">লাইব্রেরী</string>
|
||||
<string name="lightnovel">আমাদের তৈরি ছোট উপন্যাস পড়ার অ্যাপ্লিকেশন</string>
|
||||
<string name="resume_time_left" formatted="true">%d মি \nবাকি</string>
|
||||
<string name="resume_time_left" formatted="true">%d মি
|
||||
\nবাকি</string>
|
||||
<string name="others">অন্যান্য</string>
|
||||
<string name="status_ongoing">চলমান</string>
|
||||
<string name="asian_drama">এশিয়ান নাটক</string>
|
||||
|
|
@ -305,7 +308,8 @@
|
|||
<string name="example_password">password123</string>
|
||||
<string name="episode_upcoming_format" formatted="true">আসছে %s সময়ের মধ্যে</string>
|
||||
<string name="cancel">বাতিল করুন</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nঅবশিষ্ট</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nঅবশিষ্ট</string>
|
||||
<string name="live_singular">লাইভ স্ট্রিম</string>
|
||||
<string name="source_error">সোর্স সমস্যা</string>
|
||||
<string name="remote_error">রিমোট সমস্যা</string>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">Rychlost (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Hodnocení: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Nalezena nová aktualizace! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nalezena nová aktualizace!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Výplň</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
|
|
@ -171,8 +172,10 @@
|
|||
<string name="resume">Pokračovat</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Toto nevratně smaže %s \nJste si jisti?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nzbývá</string>
|
||||
<string name="delete_message" formatted="true">Toto nevratně smaže %s
|
||||
\nJste si jisti?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nzbývá</string>
|
||||
<string name="status_ongoing">Probíhající</string>
|
||||
<string name="status_completed">Dokončena</string>
|
||||
<string name="status">Stav</string>
|
||||
|
|
@ -413,7 +416,9 @@
|
|||
<string name="plugin_downloaded">Doplněk stažen</string>
|
||||
<string name="is_adult">18+</string>
|
||||
<string name="batch_download_start_format" formatted="true">Spuštěno stahování %1$d %2$s…</string>
|
||||
<string name="blank_repo_message">CloudStream nemá ve výchozím nastavení nainstalované žádné zdroje. Je třeba je nainstalovat z repozitářů. \n \nPřipojte se na náš Discord nebo hledejte na internetu.</string>
|
||||
<string name="blank_repo_message">CloudStream nemá ve výchozím nastavení nainstalované žádné zdroje. Je třeba je nainstalovat z repozitářů.
|
||||
\n
|
||||
\nPřipojte se na náš Discord nebo hledejte na internetu.</string>
|
||||
<string name="plugins_disabled" formatted="true">Zakázáno: %d</string>
|
||||
<string name="plugins_updated" formatted="true">Aktualizováno %d doplňků</string>
|
||||
<string name="safe_mode_crash_info">Zobrazit informace o pádu</string>
|
||||
|
|
@ -441,7 +446,8 @@
|
|||
<string name="update_notification_failed">Nepodařilo se nainstalovat novou verzi aplikace</string>
|
||||
<string name="apk_installer_legacy">Původní</string>
|
||||
<string name="delayed_update_notice">Aplikace bude po ukončení aktualizována</string>
|
||||
<string name="empty_library_no_accounts_message">Vaše knihovna je prázdná :( \nPřihlaste se k účtu v knihovně nebo přidejte pořady do místní knihovny.</string>
|
||||
<string name="empty_library_no_accounts_message">Vaše knihovna je prázdná :(
|
||||
\nPřihlaste se k účtu v knihovně nebo přidejte pořady do místní knihovny.</string>
|
||||
<string name="select_library">Vybrat knihovnu</string>
|
||||
<string name="sort_rating_desc">Hodnocení (od nejvyššího)</string>
|
||||
<string name="sort_rating_asc">Hodnocení (od nejnižšího)</string>
|
||||
|
|
@ -449,7 +455,8 @@
|
|||
<string name="sort_by">Seřadit podle</string>
|
||||
<string name="sort">Řazení</string>
|
||||
<string name="empty_library_logged_in_message">Tento seznam je prázdný. Zkuste přepnout na jiný.</string>
|
||||
<string name="safe_mode_file">Nalezen soubor bezpečného režimu! \nDo odebrání souboru nebudeme načítat žádná rozšíření.</string>
|
||||
<string name="safe_mode_file">Nalezen soubor bezpečného režimu!
|
||||
\nDo odebrání souboru nebudeme načítat žádná rozšíření.</string>
|
||||
<string name="sort_updated_new">Aktualizováno (od nejnovějšího)</string>
|
||||
<string name="sort_updated_old">Aktualizováno (od nejstaršího)</string>
|
||||
<string name="sort_alphabetical_a">Abecedně (od A do Z)</string>
|
||||
|
|
@ -530,7 +537,13 @@
|
|||
<string name="help">Nápověda</string>
|
||||
<string name="qualities">Kvality</string>
|
||||
<string name="profile_background_des">Pozadí profilu</string>
|
||||
<string name="quality_profile_help">Zde můžete změnit pořadí zdrojů. Pokud má video vyšší prioritu, objeví se ve výběru zdrojů výše. Součet priority zdroje a priority kvality je priorita videa. \n \nZdroj A: 3 \nKvalita B: 7 \nBudou mít celkovou prioritu videa 10. \n \nPOZNÁMKA: Pokud je součet 10 nebo vyšší, přehrávač automaticky přeskočí načítání při načtení daného odkazu!</string>
|
||||
<string name="quality_profile_help">Zde můžete změnit pořadí zdrojů. Pokud má video vyšší prioritu, objeví se ve výběru zdrojů výše. Součet priority zdroje a priority kvality je priorita videa.
|
||||
\n
|
||||
\nZdroj A: 3
|
||||
\nKvalita B: 7
|
||||
\nBudou mít celkovou prioritu videa 10.
|
||||
\n
|
||||
\nPOZNÁMKA: Pokud je součet 10 nebo vyšší, přehrávač automaticky přeskočí načítání při načtení daného odkazu!</string>
|
||||
<string name="unable_to_inflate">Nepodařilo se správně vytvořit rozhraní. Toto je VÁŽNÁ CHYBA, kterou je potřeba ihned nahlásit %s</string>
|
||||
<string name="disable">Vypnout</string>
|
||||
<string name="automatic_plugin_download_mode_title">Výběr režimu pro filtrování stahování doplňků</string>
|
||||
|
|
@ -540,7 +553,11 @@
|
|||
<string name="favorite_removed">%s odebráno z oblíbených</string>
|
||||
<string name="favorites_list_name">Oblíbené</string>
|
||||
<string name="favorite_added">%s přidáno do oblíbených</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Ve vaší knihovně byl nalezen potenciální duplikát: \n \n%s \n \nChcete přesto přidat tuto položku, nahradit existující nebo zrušit akci?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Ve vaší knihovně byl nalezen potenciální duplikát:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nChcete přesto přidat tuto položku, nahradit existující nebo zrušit akci?</string>
|
||||
<string name="backup_frequency">Frekvence záloh</string>
|
||||
<string name="duplicate_title">Nalezena potenciální duplicita</string>
|
||||
<string name="lock_profile">Zamknout profil</string>
|
||||
|
|
@ -554,7 +571,9 @@
|
|||
<string name="action_subscribe">Odebírat</string>
|
||||
<string name="action_remove_from_favorites">Odebrat z oblíbených</string>
|
||||
<string name="select_an_account">Vyberte účet</string>
|
||||
<string name="duplicate_message_single">Vypadá to, že ve vaší knihovně již existuje potenciální duplikát: „%s“. \n \nChcete přesto přidat tuto položku, nahradit existující nebo zrušit akci?</string>
|
||||
<string name="duplicate_message_single">Vypadá to, že ve vaší knihovně již existuje potenciální duplikát: „%s“.
|
||||
\n
|
||||
\nChcete přesto přidat tuto položku, nahradit existující nebo zrušit akci?</string>
|
||||
<string name="enter_pin">Zadejte PIN</string>
|
||||
<string name="pin">PIN</string>
|
||||
<string name="enter_current_pin">Zadejte současný PIN</string>
|
||||
|
|
@ -583,7 +602,8 @@
|
|||
<string name="biometric_prompt_description">Po několika nezdařilých pokusech se okno zavře. Pro opětovný pokus restartujte aplikaci.</string>
|
||||
<string name="biometric_warning">Vaše data z aplikace CloudStream byla nyní zálohována. Ačkoli je tato možnost velmi malá, různá zařízení se mohou chovat různě. Ve výjimečném případě, že se vám přístup k aplikaci zablokuje, data aplikace zcela vymažte a obnovte je ze zálohy. Velmi se omlouváme za případné nepříjemnosti z toho plynoucí.</string>
|
||||
<string name="unfavorite">Odebrat z oblíbených</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nzbývá</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nzbývá</string>
|
||||
<string name="favorite">Přidat do oblíbených</string>
|
||||
<string name="repo_copy_label">Název a adresa repozitáře</string>
|
||||
<string name="clipboard_unknown_error">Chyba při kopírování, zkopírujte prosím protokol a kontaktujte podporu aplikace.</string>
|
||||
|
|
@ -624,12 +644,20 @@
|
|||
<string name="downloads_delete_select">Zvolte položky k odstranění</string>
|
||||
<string name="offline_file">Dostupné pro sledování offline</string>
|
||||
<string name="select_all">Vybrat vše</string>
|
||||
<string name="delete_message_multiple" formatted="true">Opravdu chcete trvale odstranit následující položky? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Opravdu chcete trvale odstranit následující epizody v %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Opravdu chcete trvale odstranit všechny epizody v následujících sériích? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Opravdu chcete trvale odstranit následující položky?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Opravdu chcete trvale odstranit následující epizody v %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Opravdu chcete trvale odstranit všechny epizody v následujících sériích?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="deselect_all">Zrušit výběr všeho</string>
|
||||
<string name="delete_files">Odstranit soubory</string>
|
||||
<string name="delete_message_series_section" formatted="true">Také trvale odstraníte všechny epizody v následujících sériích: \n \n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Také trvale odstraníte všechny epizody v následujících sériích:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_format" formatted="true">Odstranit (%1$d | %2$s)</string>
|
||||
<string name="preview_seekbar">Náhled v liště přehrávače</string>
|
||||
<string name="preview_seekbar_desc">Povolit náhled miniatur na liště přehrávače</string>
|
||||
|
|
@ -751,7 +779,4 @@
|
|||
<string name="source_priority">Priorita zdrojů</string>
|
||||
<string name="source_priority_help">Rozhodněte, jak mají být řazeny zdroje videí v přehrávači</string>
|
||||
<string name="show_player_metadata_overlay">Zobrazit překrytí metadat v přehrávači</string>
|
||||
<string name="video_singular">Video</string>
|
||||
<string name="skip_type_preview">Náhled</string>
|
||||
<string name="player_is_live">Živě</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@
|
|||
<string name="preview_background_img_des">Hintergrundbildvorschau</string>
|
||||
<string name="player_speed_text_format" formatted="true">Geschwindigkeit (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Bewertung: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Neues Update gefunden! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Neues Update gefunden!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Füller</string>
|
||||
<string name="duration_format" formatted="true">%d Min</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
|
|
@ -187,8 +188,10 @@
|
|||
<string name="resume">Fortsetzen</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Dadurch wird %s permanent gelöscht \nBist du dir sicher?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nverbleibend</string>
|
||||
<string name="delete_message" formatted="true">Dadurch wird %s permanent gelöscht
|
||||
\nBist du dir sicher?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nverbleibend</string>
|
||||
<string name="status_ongoing">Laufend</string>
|
||||
<string name="status_completed">Abgeschlossen</string>
|
||||
<string name="status">Status</string>
|
||||
|
|
@ -252,7 +255,7 @@
|
|||
<string name="update">Update</string>
|
||||
<string name="watch_quality_pref">Bevorzugte Videoqualität (WLAN)</string>
|
||||
<string name="limit_title">Videoplayertitel max. Zeichen</string>
|
||||
<string name="limit_title_rez">Zeige Playerinformationen</string>
|
||||
<string name="limit_title_rez">Playerinformationen anzeigen</string>
|
||||
<string name="video_buffer_size_settings">Videopuffergröße</string>
|
||||
<string name="video_buffer_length_settings">Videopufferlänge</string>
|
||||
<string name="video_buffer_disk_settings">Video-Cache in Speicher</string>
|
||||
|
|
@ -398,7 +401,9 @@
|
|||
<string name="plugins_downloaded" formatted="true">Heruntergeladen: %d</string>
|
||||
<string name="plugins_disabled" formatted="true">Deaktiviert: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Nicht heruntergeladen: %d</string>
|
||||
<string name="blank_repo_message">CloudStream hat standardmäßig keine Websites installiert. Websites müssen aus Repositories installiert werden. \n \nTrete unserem Discord Server bei oder suche online.</string>
|
||||
<string name="blank_repo_message">CloudStream hat standardmäßig keine Websites installiert. Websites müssen aus Repositories installiert werden.
|
||||
\n
|
||||
\nTrete unserem Discord Server bei oder suche online.</string>
|
||||
<string name="view_public_repositories_button">Community-Repositories anzeigen</string>
|
||||
<string name="view_public_repositories_button_short">Öffentliche Liste</string>
|
||||
<string name="uppercase_all_subtitles">Alle Untertitel in Großbuchstaben</string>
|
||||
|
|
@ -479,9 +484,11 @@
|
|||
<string name="sort_alphabetical_z">Alphabetisch (Z zu A)</string>
|
||||
<string name="select_library">Bibliothek auswählen</string>
|
||||
<string name="open_with">Öffnen mit</string>
|
||||
<string name="empty_library_no_accounts_message">Deine Bibliothek ist leer :( \nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu.</string>
|
||||
<string name="empty_library_no_accounts_message">Deine Bibliothek ist leer :(
|
||||
\nMelde dich mit einem Bibliothekskonto an oder füge Titel zu deiner lokalen Bibliothek hinzu.</string>
|
||||
<string name="empty_library_logged_in_message">Diese Liste ist leer. Versuch zu einer anderen Liste zu wechseln.</string>
|
||||
<string name="safe_mode_file">Datei für den abgesicherten Modus gefunden! \nBeim Start werden keine Erweiterungen geladen, bis die Datei entfernt wird.</string>
|
||||
<string name="safe_mode_file">Datei für den abgesicherten Modus gefunden!
|
||||
\nBeim Start werden keine Erweiterungen geladen, bis die Datei entfernt wird.</string>
|
||||
<string name="android_tv_interface_off_seek_settings">Player ausgeblendet - Betrag zum vor- und zurückspulen</string>
|
||||
<string name="android_tv_interface_on_seek_settings_summary">Der Betrag, welcher verwendet wird, wenn der Player eingeblendet ist</string>
|
||||
<string name="android_tv_interface_off_seek_settings_summary">Der Betrag, welcher verwendet wird, wenn der Player ausgeblendet ist</string>
|
||||
|
|
@ -515,7 +522,13 @@
|
|||
<string name="help">Hilfe</string>
|
||||
<string name="qualities">Qualitäten</string>
|
||||
<string name="profile_background_des">Profil-Hintergrund</string>
|
||||
<string name="quality_profile_help">Hier kannst du verändern, wie die Quellen geordnet werden. Wenn ein Video eine höhere Priorität hat, wird es höher in der Quellenauswahl erscheinen. Die Summe der Quellenpriorität und der Qualitätspriorität ist die Videopriorität. \n \nQuelle A: 3 \nQualität B: 7 \nWerden eine kombinierte Videopriorität von 10 haben. \n \nHINWEIS: Wenn die Summe 10 oder mehr beträgt, überspringt der Player automatisch das Laden, wenn der Link geladen wird!</string>
|
||||
<string name="quality_profile_help">Hier kannst du verändern, wie die Quellen geordnet werden. Wenn ein Video eine höhere Priorität hat, wird es höher in der Quellenauswahl erscheinen. Die Summe der Quellenpriorität und der Qualitätspriorität ist die Videopriorität.
|
||||
\n
|
||||
\nQuelle A: 3
|
||||
\nQualität B: 7
|
||||
\nWerden eine kombinierte Videopriorität von 10 haben.
|
||||
\n
|
||||
\nHINWEIS: Wenn die Summe 10 oder mehr beträgt, überspringt der Player automatisch das Laden, wenn der Link geladen wird!</string>
|
||||
<string name="automatic_plugin_download_mode_title">Filtermodus für Plugin-Downloads auswählen</string>
|
||||
<string name="already_voted">Es wurde bereits abgestimmt</string>
|
||||
<string name="no_plugins_found_error">Keine Plugins im Repository gefunden</string>
|
||||
|
|
@ -547,8 +560,14 @@
|
|||
<string name="skip_startup_account_select_pref">Kontoauswahl beim Starten überspringen</string>
|
||||
<string name="manage_accounts">Konten verwalten</string>
|
||||
<string name="edit_account">Konto bearbeiten</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Es wurden potentielle Duplikate in deiner Bibliothek gefunden: \n \n%s \n \nMöchtest du dieses Element dennoch hinzufügen, das existierende ersetzen oder diese Aktion abbrechen?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Deine Bibliothek enthält möglicherweise schon ein Duplikat dieses Elements: \'%s\' \n \nMöchtest du dieses Element dennoch hinzufügen, das existierende ersetzen oder diese Aktion abbrechen?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Es wurden potentielle Duplikate in deiner Bibliothek gefunden:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nMöchtest du dieses Element dennoch hinzufügen, das existierende ersetzen oder diese Aktion abbrechen?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Deine Bibliothek enthält möglicherweise schon ein Duplikat dieses Elements: \'%s\'
|
||||
\n
|
||||
\nMöchtest du dieses Element dennoch hinzufügen, das existierende ersetzen oder diese Aktion abbrechen?</string>
|
||||
<string name="links_reloaded_toast">Links wurden neu geladen</string>
|
||||
<string name="rotate_video">Drehen</string>
|
||||
<string name="rotate_video_desc">Zeige einen Umschalter für Bildschirmorientierung an</string>
|
||||
|
|
@ -568,7 +587,8 @@
|
|||
<string name="unfavorite">kein Favorit</string>
|
||||
<string name="biometric_prompt_description">Dieser Bildschirm wurde nach einigen Fehlversuchen geschlossen. Starte die App neu.</string>
|
||||
<string name="biometric_warning">Ihre CloudStream-Daten wurden gesichert. Obwohl die Wahrscheinlichkeit dieses seltenen Falles sehr gering ist, verhalten sich alle Geräte unterschiedlich. Falls Sie im schlimmsten Fall den Zugriff zur App verlieren, löschen Sie die App-Daten vollständig und stellen Sie die Sicherung wieder her. Jegliche Unannehmlichkeiten, die Ihnen dadurch entstehen, bedauern wir sehr.</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nausstehend</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nausstehend</string>
|
||||
<string name="favorite">Favorit</string>
|
||||
<string name="toast_copied">Kopiert!</string>
|
||||
<string name="clipboard_unknown_error">Beim kopieren ist ein Fehler aufgetreten, bitte kopieren sie logical und wenden sich an den Support.</string>
|
||||
|
|
@ -587,7 +607,7 @@
|
|||
<string name="pref_category_security">Sicherheit</string>
|
||||
<string name="pref_category_accounts">Konten</string>
|
||||
<string name="open_downloaded_repo">Repository öffnen</string>
|
||||
<string name="device_pin_url_message">Besuche <b>%s</b> auf dem Smartphone oder Computer und gebe den obenstehenden Code ein</string>
|
||||
<string name="device_pin_url_message">Besuche<b>%s</b> auf dem Smartphone oder Computer und gebe den obenstehenden Code ein</string>
|
||||
<string name="device_pin_error_message">PIN-Code vom Gerät nicht abrufbar, versuche lokale Authentifizierung</string>
|
||||
<string name="downloads_empty">Zur Zeit sind keine Downloads verfügbar.</string>
|
||||
<string name="open_local_video">Lokales Video öffnen</string>
|
||||
|
|
@ -610,10 +630,18 @@
|
|||
<string name="play_from_beginning_img_des">Vom Beginn an spielen</string>
|
||||
<string name="downloads_delete_select">Elemente zum Löschen auswählen</string>
|
||||
<string name="offline_file">Zum Offline-Ansehen verfügbar</string>
|
||||
<string name="delete_message_multiple" formatted="true">Bist du dir sicher, dass du die folgenden Elemente permanent löschen willst? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Bist du dir sicher, dass du die folgenden Episoden in %1$s permanent löschen willst? \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Du wirst ebenfalls alle Episoden der folgenden Serien permanent löschen: \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Bist du dir sicher, dass du alle Episoden der folgenden Serien permanent löschen willst? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Bist du dir sicher, dass du die folgenden Elemente permanent löschen willst?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Bist du dir sicher, dass du die folgenden Episoden in %1$s permanent löschen willst?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Du wirst ebenfalls alle Episoden der folgenden Serien permanent löschen:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Bist du dir sicher, dass du alle Episoden der folgenden Serien permanent löschen willst?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="sort_release_date_new">Veröffentlichungsdatum (von neu nach alt)</string>
|
||||
<string name="sort_release_date_old">Veröffentlichungsdatum (von alt nach neu)</string>
|
||||
<string name="preview_seekbar">Suchleisten Vorschau</string>
|
||||
|
|
@ -712,8 +740,8 @@
|
|||
<string name="extra_brightness_settings">Zusätzliche Helligkeit</string>
|
||||
<string name="extra_brightness_settings_des">Aktiviere Helligkeitsfilter, wenn 100% Bildschirmhelligkeit überschritten ist</string>
|
||||
<string name="extra_brightness_key">Erhöhte Helligkeit aktiviert</string>
|
||||
<string name="show_cast_in_details">Zeige Cast-Panel</string>
|
||||
<string name="video_info">Mediainfo</string>
|
||||
<string name="show_cast_in_details">Cast-Panel zeigen</string>
|
||||
<string name="video_info">Medieninfo</string>
|
||||
<string name="source_name">Quellname</string>
|
||||
<string name="download_all">Alle herunterladen</string>
|
||||
<string name="download_episode_range">Möchtest du Episode %s herunter laden?</string>
|
||||
|
|
@ -731,8 +759,4 @@
|
|||
<string name="queue_empty_message">Es befinden sich keine Downloads in der Warteschlange.</string>
|
||||
<string name="source_priority">Quellpriorität</string>
|
||||
<string name="source_priority_help">Entscheide, wie Videoquellen im Player sortiert werden sollen</string>
|
||||
<string name="show_player_metadata_overlay">Zeige Player-Metadaten</string>
|
||||
<string name="video_singular">Video</string>
|
||||
<string name="skip_type_preview">Vorschau</string>
|
||||
<string name="player_is_live">Live</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -110,7 +110,8 @@
|
|||
<string name="benene_des">Μπανάνα δόθηκε</string>
|
||||
<string name="player_speed_text_format" formatted="true">Ταχύτητα (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Βαθμολογία: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Νέα διαθέσιμη ενημέρωση! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Νέα διαθέσιμη ενημέρωση!
|
||||
\n%1$s -> %2$s</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>
|
||||
|
|
@ -148,8 +149,10 @@
|
|||
<string name="cancel">Ακύρωση</string>
|
||||
<string name="pause">Παύση</string>
|
||||
<string name="resume">Συνέχιση</string>
|
||||
<string name="delete_message" formatted="true">Αυτό θα διαγράψει μόνιμα το %s \nΕίστε σίγουροι πως θέλετε να προχωρήσετε;</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nαπομένουν</string>
|
||||
<string name="delete_message" formatted="true">Αυτό θα διαγράψει μόνιμα το %s
|
||||
\nΕίστε σίγουροι πως θέλετε να προχωρήσετε;</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nαπομένουν</string>
|
||||
<string name="status_ongoing">Σε εξέλιξη</string>
|
||||
<string name="status">Κατάσταση</string>
|
||||
<string name="year">Έτος</string>
|
||||
|
|
@ -320,7 +323,9 @@
|
|||
<string name="plugins_disabled" formatted="true">Απενεργοποιήθηκε: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Δεν κατέβηκε: %d</string>
|
||||
<string name="plugins_updated" formatted="true">Ενημερώθηκαν %d πρόσθετα</string>
|
||||
<string name="blank_repo_message">Το CloudStream δεν έχει προεγκατεστημένους ιστότοπους. Πρέπει να εγκαταστήσετε ιστότοπους μέσω ορισμένων αποθετηρίων. \n \nΒρείτε μας στο Discord ή ψάξτε στο διαδίκτυο.</string>
|
||||
<string name="blank_repo_message">Το CloudStream δεν έχει προεγκατεστημένους ιστότοπους. Πρέπει να εγκαταστήσετε ιστότοπους μέσω ορισμένων αποθετηρίων.
|
||||
\n
|
||||
\nΒρείτε μας στο Discord ή ψάξτε στο διαδίκτυο.</string>
|
||||
<string name="view_public_repositories_button">Προβολή αποθετηρίων κοινότητας</string>
|
||||
<string name="view_public_repositories_button_short">Δημόσια λίστα</string>
|
||||
<string name="uppercase_all_subtitles">Κεφαλοποίηση υποτίτλων</string>
|
||||
|
|
@ -482,15 +487,23 @@
|
|||
<string name="action_remove_from_watched">Αφαίρεση από παρακολουθημένα</string>
|
||||
<string name="browser">Περιηγητής</string>
|
||||
<string name="open_with">Άνοιγμα με</string>
|
||||
<string name="empty_library_no_accounts_message">Η βιβλιοθήκη σας είναι άδεια :( \nΣυνδεθείτε με έναν λογαριασμό βιβλιοθήκης ή προσθέστε σειρές στην τοπική βιβλιοθήκη σας.</string>
|
||||
<string name="safe_mode_file">Βρέθηκε αρχείο Ασφαλούς Λειτουργίας! \nΔεν πρόκειται να φορτωθούν extensions κατά το ξεκίνημα μέχρι να διαγραφεί το αρχείο.</string>
|
||||
<string name="empty_library_no_accounts_message">Η βιβλιοθήκη σας είναι άδεια :(
|
||||
\nΣυνδεθείτε με έναν λογαριασμό βιβλιοθήκης ή προσθέστε σειρές στην τοπική βιβλιοθήκη σας.</string>
|
||||
<string name="safe_mode_file">Βρέθηκε αρχείο Ασφαλούς Λειτουργίας!
|
||||
\nΔεν πρόκειται να φορτωθούν extensions κατά το ξεκίνημα μέχρι να διαγραφεί το αρχείο.</string>
|
||||
<string name="test_log">Αρχείο Καταγραφής</string>
|
||||
<string name="test_failed">Απέτυχε</string>
|
||||
<string name="test_passed">Πέτυχε</string>
|
||||
<string name="start">Εκκίνηση</string>
|
||||
<string name="no_plugins_found_error">Δε βρέθηκαν επεκτάσεις στο αποθετήριο</string>
|
||||
<string name="no_repository_found_error">Δε βρέθηκε αποθετήριο, ελέγξτε την URL και δοκιμάστε VPN</string>
|
||||
<string name="quality_profile_help">Από εδώ μπορείτε να αλλάξετε τον τρόπο σειράς των πηγών. Εάν ένα βίντεο έχει υψηλότερη προτεραιότητα, θα εμφανίζεται ψηλότερα στην επιλογή πηγής. Το άθροισμα της προτεραιότητας πηγής και της ποιότητας, είναι η προτεραιότητα του βίντεο. \n \nΠηγή Α: 3 \nΠοιότητα Β: 7 \nΘα έχει συνδυασμένη προτεραιότητα βίντεο 10. \n \nΣΗΜΕΙΩΣΗ: Εάν το άθροισμα είναι 10 ή περισσότερο, η συσκευή αναπαραγωγής θα παραλείψει αυτόματα τη φόρτωση όταν φορτωθεί αυτός ο σύνδεσμος!</string>
|
||||
<string name="quality_profile_help">Από εδώ μπορείτε να αλλάξετε τον τρόπο σειράς των πηγών. Εάν ένα βίντεο έχει υψηλότερη προτεραιότητα, θα εμφανίζεται ψηλότερα στην επιλογή πηγής. Το άθροισμα της προτεραιότητας πηγής και της ποιότητας, είναι η προτεραιότητα του βίντεο.
|
||||
\n
|
||||
\nΠηγή Α: 3
|
||||
\nΠοιότητα Β: 7
|
||||
\nΘα έχει συνδυασμένη προτεραιότητα βίντεο 10.
|
||||
\n
|
||||
\nΣΗΜΕΙΩΣΗ: Εάν το άθροισμα είναι 10 ή περισσότερο, η συσκευή αναπαραγωγής θα παραλείψει αυτόματα τη φόρτωση όταν φορτωθεί αυτός ο σύνδεσμος!</string>
|
||||
<string name="category_provider_test">Δοκιμή παρόχου</string>
|
||||
<string name="watch_quality_pref_data">Προτιμώμενη ποιότητας παρακολούθησης (Δεδομένα τηλεφώνου)</string>
|
||||
<string name="jsdelivr_proxy">Διακομιστής μεσολάβησης GitHub</string>
|
||||
|
|
@ -536,7 +549,9 @@
|
|||
<string name="ok">Εντάξει</string>
|
||||
<string name="battery_dialog_title">Απενεργοποιήση της εξοικονόμησης της μπαταρίας</string>
|
||||
<string name="already_voted">Έχετε ήδη ψηφίσει</string>
|
||||
<string name="duplicate_message_single" formatted="true">Φαίνεται πως ένα πιθανό αντίγραφο βρίσκεται στη βιβλιοθήκη σας: \'%s.\' \n \nΘα επιθυμούσατε να το προσθέσετε, να το αντικαταστήσετε, ή να ακυρώσετε την ενέργεια;</string>
|
||||
<string name="duplicate_message_single" formatted="true">Φαίνεται πως ένα πιθανό αντίγραφο βρίσκεται στη βιβλιοθήκη σας: \'%s.\'
|
||||
\n
|
||||
\nΘα επιθυμούσατε να το προσθέσετε, να το αντικαταστήσετε, ή να ακυρώσετε την ενέργεια;</string>
|
||||
<string name="enter_current_pin">Εισαγωγή Τρέχον Κωδικού</string>
|
||||
<string name="lock_profile">Κλείδωμα Προφίλ</string>
|
||||
<string name="biometric_authentication_title">Ξεκλείδωμα Cloudstream</string>
|
||||
|
|
@ -563,7 +578,11 @@
|
|||
<string name="duplicate_title">Πιθανό αντίγραφο βρέθηκε</string>
|
||||
<string name="duplicate_add">Προσθήκη</string>
|
||||
<string name="duplicate_replace">Αντικατάσταση</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Πιθανά διπλά αρχεία βρέθηκαν στην βιβλιοθήκη: \n \n%s \n \nΘα επιθυμούσατε να προσθέσετε αυτό το αρχείο ούτως η άλλως, να αντικαταστήσετε τα ήδη υπάρχοντα, ή να ακυρώσετε την ενέργεια?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Πιθανά διπλά αρχεία βρέθηκαν στην βιβλιοθήκη:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nΘα επιθυμούσατε να προσθέσετε αυτό το αρχείο ούτως η άλλως, να αντικαταστήσετε τα ήδη υπάρχοντα, ή να ακυρώσετε την ενέργεια?</string>
|
||||
<string name="enter_pin_with_name" formatted="true">Εισαγωγή Κωδικού για %s</string>
|
||||
<string name="pin">Κωδικός</string>
|
||||
<string name="pin_error_incorrect">Εσφαλμένος Κωδικός. Προσπαθήστε ξανά.</string>
|
||||
|
|
@ -576,7 +595,8 @@
|
|||
<string name="jsdelivr_proxy_summary">Παράκαμψη απαγόρευσης από raw github URLs χρησιμοποιώντας jsDelivr. Μπορεί να καθυστερήσει τις ενημερώσεις για μερικές μέρες.</string>
|
||||
<string name="rotate_video_desc">Εμφάνιση κουμπιού για περιστροφή οθόνης</string>
|
||||
<string name="favorite">Αγαπημένο</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nαπομένουν</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nαπομένουν</string>
|
||||
<string name="biometric_unsupported">Βιομετρική αυθεντικοποίηση δεν υποστηρίζεται από τη συσκευή</string>
|
||||
<string name="episode_action_cast_mirror">Καστ ταινίας</string>
|
||||
<string name="battery_dialog_message">Για να εξασφαλιστούν αδιάκοπες λήψεις και ειδοποιήσεις για αναγραφόμενες τηλεοπτικές εκπομπές, το CloudStream χρειάζεται άδεια για να τρέξει στο παρασκήνιο. Πατώντας OK, θα εμφανιστεί ένας διάλογος αιτήματος. Παρακαλώ πατήστε \\\"Επιτρέπω\\\".\n\nΠαρακαλώ σημειώστε, αυτή η άδεια δεν σημαίνει ότι το CS3 θα αποστραγγίσει την μπαταρία σας. Θα λειτουργεί στο παρασκήνιο μόνο όταν είναι απαραίτητο, όπως κατά τη λήψη ειδοποιήσεων ή τη λήψη βίντεο από επίσημες επεκτάσεις.</string>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,8 @@
|
|||
<string name="next_episode_time_day_format" formatted="true">%1$dt %2$dh %3$dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$dh %2$dm</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%dm</string>
|
||||
<string name="new_update_format" formatted="true">Nova ĝisdatigo trovita! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nova ĝisdatigo trovita!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Speciala epizodo</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="download_started">Elŝuto Komencite</string>
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@
|
|||
<string name="batch_download_finish_format" formatted="true">Descargado %1$d %2$s</string>
|
||||
<string name="delete_repository">Borrar repositorio</string>
|
||||
<string name="next_episode_format" formatted="true">El episodio %d se lanzará en</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$d h %2$d m</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%d m</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$d h %2$d m</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%d m</string>
|
||||
<string name="result_poster_img_des">Póster</string>
|
||||
<string name="extensions">Extensiones</string>
|
||||
<string name="downloaded_file">Archivo descargado</string>
|
||||
|
|
@ -80,7 +80,8 @@
|
|||
<string name="episode_action_reload_links">Recargar enlaces</string>
|
||||
<string name="sync_total_episodes_none">/??</string>
|
||||
<string name="sync_total_episodes_some" formatted="true">/%d</string>
|
||||
<string name="delete_message" formatted="true">Esto eliminará %s permanentemente \nEstá seguro?</string>
|
||||
<string name="delete_message" formatted="true">Esto eliminará %s permanentemente
|
||||
\nEstá seguro?</string>
|
||||
<string name="confirm_exit_dialog">¿Seguro que quieres salir?</string>
|
||||
<string name="popup_resume_download">Continuar Descarga</string>
|
||||
<string name="example_lang_name">Código de idioma (es_ES)</string>
|
||||
|
|
@ -103,7 +104,7 @@
|
|||
<string name="player_speed_text_format" formatted="true">Velocidad (%.2f×)</string>
|
||||
<string name="skip_loading">Omitir carga</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%1$s Ep. %2$d</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%1$d d %2$d h %3$d m</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%1$d d %2$d h %3$d m</string>
|
||||
<string name="cast_format" formatted="true">Reparto: %s</string>
|
||||
<string name="filler" formatted="true">Relleno</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
|
|
@ -248,7 +249,8 @@
|
|||
<string name="resume">Continuar</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nfaltante</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nfaltante</string>
|
||||
<string name="status_ongoing">En curso</string>
|
||||
<string name="status_completed">Completado</string>
|
||||
<string name="status">Estado</string>
|
||||
|
|
@ -480,8 +482,10 @@
|
|||
<string name="sort_alphabetical_z">Alfabéticamente (Z a A)</string>
|
||||
<string name="select_library">Seleccionar biblioteca</string>
|
||||
<string name="open_with">Abrir con</string>
|
||||
<string name="empty_library_no_accounts_message">Tu biblioteca está vacía :( \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="empty_library_no_accounts_message">Tu biblioteca está vacía :(
|
||||
\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="pref_category_android_tv">Android TV</string>
|
||||
|
|
@ -506,7 +510,13 @@
|
|||
<string name="pref_category_bypass">ISP Bypasses</string>
|
||||
<string name="watch_quality_pref_data">Calidad de visualización preferida (Datos móviles)</string>
|
||||
<string name="help">Ayuda</string>
|
||||
<string name="quality_profile_help">Aquí puedes cambiar el orden de las fuentes. Si un vídeo tiene una prioridad más alta, aparecerá más arriba en la selección de las fuentes. La suma de la prioridad de la fuente y la prioridad de la calidad es la prioridad del vídeo. \n \nFuente A: 3 \nCalidad B: 7 \nTendrá una prioridad en el vídeo combinada de 10. \n \nNOTA: ¡Si la suma es 10 o más el reproductor saltará automáticamente la carga cuando se cargue ese enlace!</string>
|
||||
<string name="quality_profile_help">Aquí puedes cambiar el orden de las fuentes. Si un vídeo tiene una prioridad más alta, aparecerá más arriba en la selección de las fuentes. La suma de la prioridad de la fuente y la prioridad de la calidad es la prioridad del vídeo.
|
||||
\n
|
||||
\nFuente A: 3
|
||||
\nCalidad B: 7
|
||||
\nTendrá una prioridad en el vídeo combinada de 10.
|
||||
\n
|
||||
\nNOTA: ¡Si la suma es 10 o más el reproductor saltará automáticamente la carga cuando se cargue ese enlace!</string>
|
||||
<string name="profile_number">Perfil %d</string>
|
||||
<string name="wifi">Wifi</string>
|
||||
<string name="edit">Editar</string>
|
||||
|
|
@ -526,7 +536,11 @@
|
|||
<string name="favorite_removed">%s eliminado de favoritos</string>
|
||||
<string name="favorites_list_name">Favoritos</string>
|
||||
<string name="favorite_added">%s añadido a favoritos</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Se han encontrado posibles elementos duplicados en su biblioteca: \n \n%s \n \n¿Desea añadir este elemento de todos modos, sustituir los existentes o cancelar la acción?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Se han encontrado posibles elementos duplicados en su biblioteca:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\n¿Desea añadir este elemento de todos modos, sustituir los existentes o cancelar la acción?</string>
|
||||
<string name="duplicate_title">Posible duplicado encontrado</string>
|
||||
<string name="lock_profile">Bloquear perfil</string>
|
||||
<string name="action_add_to_favorites">Añadido a favoritos</string>
|
||||
|
|
@ -569,7 +583,8 @@
|
|||
<string name="biometric_warning">Ahora se ha realizado una copia de seguridad de sus datos de CloudStream. Aunque la posibilidad de que esto ocurra es muy baja, todos los dispositivos pueden comportarse de forma diferente. En el raro caso de que no puedas acceder a la aplicación, borra completamente los datos de la aplicación y restaura desde una copia de seguridad. Sentimos mucho las molestias que esto pueda ocasionarte.</string>
|
||||
<string name="favorite">Favorito</string>
|
||||
<string name="unfavorite">Eliminar de favoritos</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nrestante</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nrestante</string>
|
||||
<string name="repo_copy_label">Nombre y URL del repositorio</string>
|
||||
<string name="toast_copied">¡Copiado!</string>
|
||||
<string name="clipboard_unknown_error">Error al copiar. Por favor, copie el logcat y comuníquese con el soporte de la aplicación.</string>
|
||||
|
|
@ -594,7 +609,7 @@
|
|||
<string name="qr_image">Imagen del código QR</string>
|
||||
<string name="dismiss">Descartar</string>
|
||||
<string name="open_downloaded_repo">Abrir repositorio</string>
|
||||
<string name="device_pin_url_message">Visita <b>%s</b> en tu smartphone o equipo e introduce el código anterior</string>
|
||||
<string name="device_pin_url_message">Visita <b> %s </b> en tu smartphone o ordenador e introduce el código anterior</string>
|
||||
<string name="device_pin_expired_message">¡El código PIN ya ha caducado!</string>
|
||||
<string name="device_pin_counter_text">El código caduca en %1$d mín y %2$d s</string>
|
||||
<string name="device_pin_error_message">No puedo obtener el código PIN del dispositivo; intente con la autenticación local</string>
|
||||
|
|
@ -606,16 +621,24 @@
|
|||
<string name="hide_player_control_names">Ocultar los nombres de los controles del reproductor</string>
|
||||
<string name="sort_release_date_old">Fecha de lanzamiento (antigua a nueva)</string>
|
||||
<string name="sort_release_date_new">Fecha de lanzamiento (de nueva a antigua)</string>
|
||||
<string name="delete_message_series_only" formatted="true">¿Estás seguro de que quieres borrar permanentemente todos los episodios de la serie? \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">¿Estás seguro de que quieres borrar permanentemente todos los episodios de la serie?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="downloads_delete_select">Seleccionar elementos para eliminar</string>
|
||||
<string name="offline_file">Disponible para visualizar sin conexión</string>
|
||||
<string name="select_all">Seleccionar todo</string>
|
||||
<string name="deselect_all">Deseleccionar todo</string>
|
||||
<string name="delete_files">Borrar archivos</string>
|
||||
<string name="delete_format" formatted="true">Borrar (%1$d | %2$s)</string>
|
||||
<string name="delete_message_multiple" formatted="true">¿Seguro que quieres borrar de forma permanente los siguientes elementos? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">¿Estás seguro de que deseas eliminar permanentemente los siguientes episodios en %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">También borrará permanentemente todos los episodios de las siguientes series: \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">¿Seguro que quieres borrar de forma permanente los siguientes elementos?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">¿Estás seguro de que deseas eliminar permanentemente los siguientes episodios en %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">También borrará permanentemente todos los episodios de las siguientes series:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="preview_seekbar_desc">Activar la previsualización para las miniaturas en la barra de búsqueda</string>
|
||||
<string name="preview_seekbar">Previsualización de Seekbar</string>
|
||||
<string name="no_subtitles_loaded">Aún no hay subtítulos cargados</string>
|
||||
|
|
@ -672,9 +695,9 @@
|
|||
<string name="overscan_settings">Sobreexploración</string>
|
||||
<string name="poster_size_settings_des">Cambios en el tamaño de los pósteres</string>
|
||||
<string name="poster_size_settings">Tamaño del póster</string>
|
||||
<string name="download_time_left_hour_min_sec_format" formatted="true">%1$d h %2$d m %3$d s</string>
|
||||
<string name="download_time_left_min_sec_format" formatted="true">%1$d m %2$d s</string>
|
||||
<string name="download_time_left_sec_format" formatted="true">%1$d s</string>
|
||||
<string name="download_time_left_hour_min_sec_format" formatted="true">%1$d h %2$d m %3$d s</string>
|
||||
<string name="download_time_left_min_sec_format" formatted="true">%1$d m %2$d s</string>
|
||||
<string name="download_time_left_sec_format" formatted="true">%1$d s</string>
|
||||
<string name="show_rating">Etiqueta de valoración</string>
|
||||
<string name="speedup_summary">Mantenga presionado para duplicar la velocidad</string>
|
||||
<string name="no_account">Sin cuenta</string>
|
||||
|
|
@ -733,8 +756,4 @@
|
|||
<item quantity="many">%d descargas encoladas</item>
|
||||
<item quantity="other">%d descargas encoladas</item>
|
||||
</plurals>
|
||||
<string name="show_player_metadata_overlay">Mostrar superposición de metadatos del jugador</string>
|
||||
<string name="video_singular">Vídeo</string>
|
||||
<string name="skip_type_preview">Vista previa</string>
|
||||
<string name="player_is_live">En Vivo</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -113,7 +113,8 @@
|
|||
<string name="type_watching">در حال تماشا</string>
|
||||
<string name="title_downloads">بارگیریها</string>
|
||||
<string name="player_speed_text_format" formatted="true">سرعت (%.2f برابر)</string>
|
||||
<string name="new_update_format" formatted="true">بروزرسانی جدید پیدا شد! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">بروزرسانی جدید پیدا شد!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="play_movie_button">پخش فیلم</string>
|
||||
<string name="browser">مرورگر</string>
|
||||
<string name="play_episode">پخش قسمت</string>
|
||||
|
|
@ -129,7 +130,8 @@
|
|||
<string name="subs_hold_to_reset_to_default">برای بازنشانی به پیشفرض نگهدارید</string>
|
||||
<string name="library">کتابخانه</string>
|
||||
<string name="status_ongoing">در ادامه</string>
|
||||
<string name="delete_message" formatted="true">این فرآیند بطور کامل %s را حذف میکند \nآیا از این کار اطمینان دارید؟</string>
|
||||
<string name="delete_message" formatted="true">این فرآیند بطور کامل %s را حذف میکند
|
||||
\nآیا از این کار اطمینان دارید؟</string>
|
||||
<string name="repo_copy_label">نام مخزن و نشانی</string>
|
||||
<string name="toast_copied">کپی شد!</string>
|
||||
<string name="settings_info">درباره</string>
|
||||
|
|
@ -178,11 +180,13 @@
|
|||
<string name="delete_file">حذف پرونده</string>
|
||||
<string name="show_trailers_settings">نمایش تریلر ها</string>
|
||||
<string name="episodes">قسمتها</string>
|
||||
<string name="resume_time_left" formatted="true">%dد \nباقیمانده</string>
|
||||
<string name="resume_time_left" formatted="true">%dد
|
||||
\nباقیمانده</string>
|
||||
<string name="github">گیتهاب</string>
|
||||
<string name="pref_filter_search_quality">پنهان کردن ویدیو مشخص شده از نتایج جستجو</string>
|
||||
<string name="cancel">لغو</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nباقیمانده</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nباقیمانده</string>
|
||||
<string name="action_default">پیشفرض</string>
|
||||
<string name="cartoons_singular">کارتون</string>
|
||||
<string name="torrent_singular">تورنت</string>
|
||||
|
|
|
|||
|
|
@ -79,7 +79,8 @@
|
|||
<string name="cancel">Annuler</string>
|
||||
<string name="pause">Pause</string>
|
||||
<string name="resume">Reprendre</string>
|
||||
<string name="delete_message">Cela va supprimer définitivement %s \nÊtes-vous sûr ?</string>
|
||||
<string name="delete_message">Cela va supprimer définitivement %s
|
||||
\nÊtes-vous sûr ?</string>
|
||||
<string name="status_ongoing">En cours</string>
|
||||
<string name="status_completed">Terminé</string>
|
||||
<string name="status">Statut</string>
|
||||
|
|
@ -121,7 +122,8 @@
|
|||
<string name="update">Mettre à jour</string>
|
||||
<string name="dns_pref_summary">Utile pour contourner les bloquages des FAI</string>
|
||||
<string name="download_path_pref">Emplacement de téléchargement</string>
|
||||
<string name="new_update_format" formatted="true">Nouvelle mise à jour trouvée ! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nouvelle mise à jour trouvée !
|
||||
\n%1$s -> %2$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="video_buffer_size_settings">Taille de la mémoire cache</string>
|
||||
|
|
@ -135,7 +137,7 @@
|
|||
<string name="display_subbed_dubbed_settings">Afficher les animés en Anglais (Dub) / sous-titrés</string>
|
||||
<string name="phone_layout">Disposition en mode téléphone</string>
|
||||
<string name="app_dub_sub_episode_text_format">%1$s Ep %2$d</string>
|
||||
<string name="rated_format" formatted="true">Note : %.1f</string>
|
||||
<string name="rated_format" formatted="true">Note : %.1f</string>
|
||||
<string name="resize_zoom">Zoom</string>
|
||||
<string name="resize_fit">Adapter à l\'écran</string>
|
||||
<string name="app_layout">Disposition de l\'application</string>
|
||||
|
|
@ -143,7 +145,7 @@
|
|||
<string name="provider_lang_settings">Langues des extensions</string>
|
||||
<string name="preferred_media_settings">Médias préférées</string>
|
||||
<string name="automatic">Auto</string>
|
||||
<string name="cast_format">Distribution : %s</string>
|
||||
<string name="cast_format">Distribution : %s</string>
|
||||
<string name="duration_format">%d min</string>
|
||||
<string name="search_hint_site">Rechercher sur %s…</string>
|
||||
<string name="type_re_watching">À re-regarder</string>
|
||||
|
|
@ -289,8 +291,8 @@
|
|||
<string name="lightnovel">Application Light Novel par les mêmes devs</string>
|
||||
<string name="anim">Anime app by the same devs</string>
|
||||
<string name="discord">Rejoignez le Discord</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$d h %2$d min</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%d min</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$d h %2$d min</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%d min</string>
|
||||
<string name="play_with_app_name">Lire avec CloudStream</string>
|
||||
<string name="play_livestream_button">Lire en direct</string>
|
||||
<string name="skip_type_ed">Fin</string>
|
||||
|
|
@ -304,9 +306,9 @@
|
|||
<string name="skip_type_intro">Intro</string>
|
||||
<string name="clear_history">Effacer l\'historique</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%1$d j %2$d h %3$d min</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%1$d j %2$d h %3$d min</string>
|
||||
<string name="stream">Stream</string>
|
||||
<string name="confirm_exit_dialog">Êtes-vous sûr·e de vouloir quitter ?</string>
|
||||
<string name="confirm_exit_dialog">Êtes-vous sûr·e de vouloir quitter ?</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="update_notification_downloading">Téléchargement de la mise à jour…</string>
|
||||
<string name="next_episode_format" formatted="true">L\'épisode %d sera publié dans</string>
|
||||
|
|
@ -319,7 +321,8 @@
|
|||
<string name="example_site_name">Nouveau Nom du site</string>
|
||||
<string name="error_invalid_id">ID invalide</string>
|
||||
<string name="automatic_plugin_download_summary">Installer automatiquement les plugins qui sont dans les repository mais qui n\'ont pas encore été installés.</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nrestant</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nrestant</string>
|
||||
<string name="livestreams">En direct</string>
|
||||
<string name="others">Autres</string>
|
||||
<string name="live_singular">En direct</string>
|
||||
|
|
@ -360,7 +363,7 @@
|
|||
<string name="nsfw">NSFW</string>
|
||||
<string name="example_ip">127.0.0.1</string>
|
||||
<string name="sync_score_format" formatted="true">%d / 10</string>
|
||||
<string name="sync_total_episodes_none">/ ??</string>
|
||||
<string name="sync_total_episodes_none">/??</string>
|
||||
<string name="sync_total_episodes_some" formatted="true">/%d</string>
|
||||
<string name="quality_sd">SD</string>
|
||||
<string name="quality_uhd">UHD</string>
|
||||
|
|
@ -406,14 +409,14 @@
|
|||
<string name="batch_download_finish_format" formatted="true">Téléchargé %1$d %2$s</string>
|
||||
<string name="batch_download_nothing_to_download_format" formatted="true">Tous les %s déjà téléchargés</string>
|
||||
<string name="setup_extensions_subtext">Télécharger la liste de sites que vous voulez utiliser</string>
|
||||
<string name="plugins_downloaded" formatted="true">Téléchargé : %d</string>
|
||||
<string name="plugins_downloaded" formatted="true">Téléchargé : %d</string>
|
||||
<string name="video_tracks">Pistes vidéo</string>
|
||||
<string name="apply_on_restart">Redémarrez l\'application pour voir les changements.</string>
|
||||
<string name="safe_mode_description">Toutes les extensions ont été désactivé à cause d\'un crash pour vous aider à trouver l\'extension causant le problème.</string>
|
||||
<string name="safe_mode_title">Mode sans échec activé</string>
|
||||
<string name="extension_size">Taille</string>
|
||||
<string name="extension_version">Version</string>
|
||||
<string name="extension_rating" formatted="true">Note : %s</string>
|
||||
<string name="extension_rating" formatted="true">Note : %s</string>
|
||||
<string name="extension_description">Description</string>
|
||||
<string name="extension_status">Status</string>
|
||||
<string name="extension_install_first">Installer l\'extension d\'abord</string>
|
||||
|
|
@ -429,10 +432,10 @@
|
|||
<string name="repository_name_hint">Nom de dépôt (optionnel)</string>
|
||||
<string name="plugin_singular">plugin</string>
|
||||
<string name="delete_repository">Supprimer le repository</string>
|
||||
<string name="plugins_disabled" formatted="true">Désactivé : %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Non téléchargé : %d</string>
|
||||
<string name="plugins_disabled" formatted="true">Désactivé : %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Non téléchargé : %d</string>
|
||||
<string name="plugins_updated" formatted="true">%d plugins mis-à-jour</string>
|
||||
<string name="download_all_plugins_from_repo">Avertissement : CloudStream 3 décline toute responsabilité concernant l’utilisation d’extensions tierces et ne fournit aucun support pour celles-ci !</string>
|
||||
<string name="download_all_plugins_from_repo">Avertissement : CloudStream 3 décline toute responsabilité concernant l’utilisation d’extensions tierces et ne fournit aucun support pour celles-ci !</string>
|
||||
<string name="single_plugin_disabled" formatted="true">%s (Désactivé)</string>
|
||||
<string name="tracks">Pistes</string>
|
||||
<string name="audio_tracks">Pistes audio</string>
|
||||
|
|
@ -445,7 +448,9 @@
|
|||
<string name="apk_installer_package_installer">Installateur de paquet</string>
|
||||
<string name="plugin">plugins</string>
|
||||
<string name="delete_repository_plugins">Cela supprimera également tous les plugins du repository</string>
|
||||
<string name="blank_repo_message">CloudStream n\'a aucun site installé par défaut. Vous devez installer les sites à partir de dépôts. \n \nRejoignez notre Discord ou cherchez en ligne.</string>
|
||||
<string name="blank_repo_message">CloudStream n\'a aucun site installé par défaut. Vous devez installer les sites à partir de dépôts.
|
||||
\n
|
||||
\nRejoignez notre Discord ou cherchez en ligne.</string>
|
||||
<string name="extension_language">Langage</string>
|
||||
<string name="enable_skip_op_from_database_des">Afficher les popups skip pour les intro / fins</string>
|
||||
<string name="apk_installer_legacy">Ancienne méthode d\'installation</string>
|
||||
|
|
@ -474,7 +479,8 @@
|
|||
<string name="sort_rating_asc">Note (basse à haute)</string>
|
||||
<string name="sort_rating_desc">Note (haut à bas)</string>
|
||||
<string name="sort_alphabetical_a">Alphabétique (A à Z)</string>
|
||||
<string name="empty_library_no_accounts_message">Votre bibliothèque est vide :( \nConnectez-vous à un compte de bibliothèque ou ajoutez des séries à votre bibliothèque locale.</string>
|
||||
<string name="empty_library_no_accounts_message">Votre bibliothèque est vide :(
|
||||
\nConnectez-vous à un compte de bibliothèque ou ajoutez des séries à votre bibliothèque locale.</string>
|
||||
<string name="empty_library_logged_in_message">Cette liste est vide. Essayez d\'en changer.</string>
|
||||
<string name="pref_category_android_tv">Android TV</string>
|
||||
<string name="sort_by">Trier par</string>
|
||||
|
|
@ -483,7 +489,8 @@
|
|||
<string name="open_with">Ouvrir avec</string>
|
||||
<string name="sort_updated_new">Mis à jour (Nouveau vers ancien)</string>
|
||||
<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="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">Annuler</string>
|
||||
<string name="test_log">Enregistrer</string>
|
||||
|
|
@ -508,7 +515,13 @@
|
|||
<string name="jsdelivr_enabled">Impossible d\'atteindre GitHub. Activation du proxy jsDelivr…</string>
|
||||
<string name="already_voted">Vous avez déjà voté</string>
|
||||
<string name="disable">Désactivé</string>
|
||||
<string name="quality_profile_help">Ici, vous pouvez modifier la façon dont les sources sont ordonnées. Si une vidéo a une priorité plus élevée, elle apparaîtra plus haut dans la sélection de la source. La somme de la priorité source et de la priorité qualité est la priorité vidéo. \n \nSource A : 3 \nQualité B : 7 \nLa priorité vidéo combinée sera de 10. \n \nREMARQUE : Si la somme est de 10 ou plus, le joueur sautera automatiquement le chargement lorsque ce lien est chargé !</string>
|
||||
<string name="quality_profile_help">Ici, vous pouvez modifier la façon dont les sources sont ordonnées. Si une vidéo a une priorité plus élevée, elle apparaîtra plus haut dans la sélection de la source. La somme de la priorité source et de la priorité qualité est la priorité vidéo.
|
||||
\n
|
||||
\nSource A : 3
|
||||
\nQualité B : 7
|
||||
\nLa priorité vidéo combinée sera de 10.
|
||||
\n
|
||||
\nREMARQUE : Si la somme est de 10 ou plus, le joueur sautera automatiquement le chargement lorsque ce lien est chargé !</string>
|
||||
<string name="no_plugins_found_error">Aucun plugin trouvé dans ce dossier</string>
|
||||
<string name="no_repository_found_error">Dépôt introuvable, vérifiez l\'URL et essayez avec un VPN</string>
|
||||
<string name="mobile_data">Données mobiles</string>
|
||||
|
|
@ -541,14 +554,20 @@
|
|||
<string name="pin">PIN</string>
|
||||
<string name="favorites_list_name">Favoris</string>
|
||||
<string name="logged_account" formatted="true">Connecté en tant que %s</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Des doublons potentiels ont été trouvés dans votre bibliothèque : \n \n%s \n \nSouhaitez-vous ajouter cet élément, remplacer les éléments existants ou annuler l\'action ?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Des doublons potentiels ont été trouvés dans votre bibliothèque :
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nSouhaitez-vous ajouter cet élément, remplacer les éléments existants ou annuler l\'action ?</string>
|
||||
<string name="enter_pin_with_name" formatted="true">Saisir le code PIN pour %s</string>
|
||||
<string name="duplicate_title">Doublon potentiel trouvé</string>
|
||||
<string name="lock_profile">Verrouiller le profil</string>
|
||||
<string name="skip_startup_account_select_pref">Ignorer la sélection de compte au démarrage</string>
|
||||
<string name="action_unsubscribe">Se désabonner</string>
|
||||
<string name="action_subscribe">S\'abonner</string>
|
||||
<string name="duplicate_message_single" formatted="true">Il semble qu\'un élément potentiellement dupliqué existe déjà dans votre bibliothèque : \'%s. \n \nSouhaitez-vous ajouter cet élément, remplacer l\'élément existant ou annuler l\'action ?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Il semble qu\'un élément potentiellement dupliqué existe déjà dans votre bibliothèque : \'%s.
|
||||
\n
|
||||
\nSouhaitez-vous ajouter cet élément, remplacer l\'élément existant ou annuler l\'action ?</string>
|
||||
<string name="enter_current_pin">Saisir le code PIN actuel</string>
|
||||
<string name="rotate_video">Pivoter</string>
|
||||
<string name="links_reloaded_toast">Les liens ont été rechargés</string>
|
||||
|
|
@ -561,7 +580,7 @@
|
|||
<string name="test_extensions">Testez toutes les extensions</string>
|
||||
<string name="recommendations_tooltip">Afficher les recommandations</string>
|
||||
<string name="test_extensions_summary">Ce test est destiné uniquement aux développeurs et ne vérifie ni n\'empêche le fonctionnement d\'aucune extension.</string>
|
||||
<string name="toast_copied">Copié !</string>
|
||||
<string name="toast_copied">Copié !</string>
|
||||
<string name="repo_copy_label">Nom du dépôt et adresse internet</string>
|
||||
<string name="favorite">Favori</string>
|
||||
<string name="biometric_warning">Vos données CloudStream viennent d\'être sauvegardées. Bien que cette éventualité soit très faible, tous les appareils peuvent se comporter différemment. Dans le rare cas où l\'accès à l\'application est bloqué, effacez complètement les données de l\'application et restaurez à partir d\'une sauvegarde. Nous sommes sincèrement désolés pour les désagréments occasionnés par cette situation.</string>
|
||||
|
|
@ -600,10 +619,10 @@
|
|||
<string name="open_downloaded_repo">Ouvrir le dépôt</string>
|
||||
<string name="device_pin_counter_text">Code expire dans %1$dm %2$ds</string>
|
||||
<string name="cs3wiki">Wiki de CloudStream</string>
|
||||
<string name="device_pin_expired_message">Le code PIN est maintenant expiré !</string>
|
||||
<string name="device_pin_expired_message">Le code PIN est maintenant expiré !</string>
|
||||
<string name="qr_image">Image du code QR</string>
|
||||
<string name="delete_plugin">Supprimer l\'extension</string>
|
||||
<string name="delete_message_multiple" formatted="true">Êtes-vous sûr de vouloir supprimer définitivement les éléments suivants ? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Êtes-vous sûr de vouloir supprimer définitivement les éléments suivants ? \n \n%s</string>
|
||||
<string name="auth_locally">Authentification locale</string>
|
||||
<string name="sort_release_date_old">Date de sortie (du plus ancien au plus récent)</string>
|
||||
<string name="sort_release_date_new">Date de sortie (du plus récent au plus ancien)</string>
|
||||
|
|
@ -619,9 +638,9 @@
|
|||
<string name="pref_category_accounts">Comptes</string>
|
||||
<string name="torrent_info">Cette vidéo est un torrent, ce qui signifie que votre activité vidéo peut être suivie.\nAssurez-vous de comprendre le fonctionnement des torrents avant de continuer.</string>
|
||||
<string name="dismiss">Ignorer</string>
|
||||
<string name="delete_message_series_section" formatted="true">Vous allez également supprimer définitivement tous les épisodes des séries suivantes :\n\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Êtes-vous sûr de vouloir supprimer définitivement tous les épisodes des séries suivantes ?\n\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Êtes-vous sûr de vouloir supprimer définitivement les épisodes suivants dans %1$s ?\n\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Vous allez également supprimer définitivement tous les épisodes des séries suivantes :\n\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Êtes-vous sûr de vouloir supprimer définitivement tous les épisodes des séries suivantes ?\n\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Êtes-vous sûr de vouloir supprimer définitivement les épisodes suivants dans %1$s ?\n\n%2$s</string>
|
||||
<string name="episode_action_cast_mirror">Recopier l’écran</string>
|
||||
<string name="no_subtitles_loaded">Aucun sous-titre n’a encore été chargé</string>
|
||||
<string name="backup_path_title">Emplacement du dossier de sauvegarde</string>
|
||||
|
|
@ -641,7 +660,7 @@
|
|||
<string name="sort_button_rating">Note %s</string>
|
||||
<string name="sort_button_date">Date %s</string>
|
||||
<string name="update_plugins">Mettre à jour les plugins</string>
|
||||
<string name="plugins_updated_manually">%d plugin(s) mis à jour avec succès !</string>
|
||||
<string name="plugins_updated_manually">%d plugin(s) mis à jour avec succès !</string>
|
||||
<string name="no_plugins_updated_manually">Aucun plugin n\'a été mis à jour.</string>
|
||||
<string name="sort_episodes_rating_high_low">Note (Plus Haute)</string>
|
||||
<string name="update_plugins_manually">Mettre à jour les plugins manuellement</string>
|
||||
|
|
@ -652,7 +671,7 @@
|
|||
<string name="player_notification_channel_description">La notification du lecteur pour contrôler la lecture en arrière-plan</string>
|
||||
<string name="sort_episodes_date_newest">Date (Plus Récent)</string>
|
||||
<string name="sort_episodes_rating_low_high">Note (Plus Basse)</string>
|
||||
<string name="starting_plugin_update_manually">Démarrage du processus de mise à jour du plugin !</string>
|
||||
<string name="starting_plugin_update_manually">Démarrage du processus de mise à jour du plugin !</string>
|
||||
<string name="subtitles_from_embedded">Intégré</string>
|
||||
<string name="subtitles_from_online">En ligne</string>
|
||||
<string name="speech_recognition_unavailable">La reconnaissance vocale n\'est pas disponible</string>
|
||||
|
|
@ -722,8 +741,8 @@
|
|||
<string name="source_priority_help">Déterminez comment les sources vidéo seront triées dans le lecteur</string>
|
||||
<string name="download_all">Télécharger tout</string>
|
||||
<string name="cancel_all">Tout annuler</string>
|
||||
<string name="download_episode_range">Voulez-vous télécharger l\'épisode %s ?</string>
|
||||
<string name="cancel_queue_message">Vous voulez annuler tous les téléchargements en file d\'attente ?</string>
|
||||
<string name="download_episode_range">Voulez-vous télécharger l\'épisode %s ?</string>
|
||||
<string name="cancel_queue_message">Vous voulez annuler tous les téléchargements en file d\'attente ?</string>
|
||||
<plurals name="downloads_active">
|
||||
<item quantity="one">%d téléchargement actif</item>
|
||||
<item quantity="many">%d téléchargements actifs</item>
|
||||
|
|
@ -735,7 +754,4 @@
|
|||
<item quantity="other">%d téléchargements en attente</item>
|
||||
</plurals>
|
||||
<string name="show_player_metadata_overlay">Afficher les métadata de l\'overlay du lecteur vidéo</string>
|
||||
<string name="video_singular">Vidéo</string>
|
||||
<string name="skip_type_preview">Prévisualisation</string>
|
||||
<string name="player_is_live">Direct</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@
|
|||
<string name="episode_poster_img_des">Póster do Episodio</string>
|
||||
<string name="go_back_img_des">Regresar</string>
|
||||
<string name="home_change_provider_img_des">Cambiar provedor</string>
|
||||
<string name="new_update_format" formatted="true">Nova actualización atopada! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nova actualización atopada!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Recheo</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="title_settings">Configuración</string>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
<resources>
|
||||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">स्पीड (%.2fx)</string>
|
||||
<string name="new_update_format" formatted="true">नया अपडेट आया है! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">नया अपडेट आया है!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="title_home">होम</string>
|
||||
<string name="title_search">खोजें</string>
|
||||
<string name="title_downloads">डाउनलोडस</string>
|
||||
|
|
@ -86,7 +87,8 @@
|
|||
<string name="cancel">रद्द करें</string>
|
||||
<string name="pause">रोकें</string>
|
||||
<string name="resume">फिर से चलाएं</string>
|
||||
<string name="delete_message">इससे %s स्थायी रूप से हट जाएगा \nक्या आपका निर्णय निश्चित है ?</string>
|
||||
<string name="delete_message">इससे %s स्थायी रूप से हट जाएगा
|
||||
\nक्या आपका निर्णय निश्चित है ?</string>
|
||||
<string name="status_ongoing">अभी चालू है</string>
|
||||
<string name="status_completed">मुकम्मल हुया</string>
|
||||
<string name="status">स्थिति</string>
|
||||
|
|
@ -151,7 +153,11 @@
|
|||
<string name="duration_format" formatted="true">%d मिनट</string>
|
||||
<string name="app_name">क्लाउडस्ट्रीम</string>
|
||||
<string name="play_with_app_name">क्लाउडस्ट्रीम के साथ चलाएं</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">आपकी लाइब्रेरी में संभावित डुप्लिकेट आइटम पाए गए हैं: \n \n%s \n \nक्या आप किसी भी तरह इस आइटम को जोड़ना चाहेंगे, मौजूदा आइटम को बदलना चाहेंगे, या कार्रवाई रद्द करना चाहेंगे?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">आपकी लाइब्रेरी में संभावित डुप्लिकेट आइटम पाए गए हैं:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nक्या आप किसी भी तरह इस आइटम को जोड़ना चाहेंगे, मौजूदा आइटम को बदलना चाहेंगे, या कार्रवाई रद्द करना चाहेंगे?</string>
|
||||
<string name="enter_pin_with_name" formatted="true">%s के लिए पिन दर्ज करें</string>
|
||||
<string name="duplicate_title">संभावित डुप्लिकेट मिला</string>
|
||||
<string name="update_started">अपडेट शुरू हुआ</string>
|
||||
|
|
@ -171,7 +177,9 @@
|
|||
<string name="select_an_account">अकाउंट चुनिये</string>
|
||||
<string name="skip_loading">लोडिंग स्किप करे</string>
|
||||
<string name="loading">लोडिंग…</string>
|
||||
<string name="duplicate_message_single" formatted="true">ऐसा प्रतीत होता है कि संभावित रूप से डुप्लिकेट आइटम आपकी लाइब्रेरी में पहले से मौजूद है: \'%s.\' \n \nक्या आप किसी भी तरह इस आइटम को जोड़ना चाहेंगे, मौजूदा आइटम को बदलना चाहेंगे, या कार्रवाई रद्द करना चाहेंगे?</string>
|
||||
<string name="duplicate_message_single" formatted="true">ऐसा प्रतीत होता है कि संभावित रूप से डुप्लिकेट आइटम आपकी लाइब्रेरी में पहले से मौजूद है: \'%s.\'
|
||||
\n
|
||||
\nक्या आप किसी भी तरह इस आइटम को जोड़ना चाहेंगे, मौजूदा आइटम को बदलना चाहेंगे, या कार्रवाई रद्द करना चाहेंगे?</string>
|
||||
<string name="enter_pin">पिन दर्ज करें</string>
|
||||
<string name="pin">पिन</string>
|
||||
<string name="links_reloaded_toast">लिंक पुन्ह खुली</string>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">Brzina (%.2f×)</string>
|
||||
<string name="rated_format" formatted="true">Ocjena: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Pronađeno je novo ažuriranje! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Pronađeno je novo ažuriranje!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Umetak</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
|
|
@ -185,8 +186,10 @@
|
|||
<string name="resume">Nastavi</string>
|
||||
<string name="go_back_30">−30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Ovo će trajno izbrisati %s \nJeste li sigurni?</string>
|
||||
<string name="resume_time_left" formatted="true">%dmin \npreostalo</string>
|
||||
<string name="delete_message" formatted="true">Ovo će trajno izbrisati %s
|
||||
\nJeste li sigurni?</string>
|
||||
<string name="resume_time_left" formatted="true">%dmin
|
||||
\npreostalo</string>
|
||||
<string name="status_ongoing">U tijeku</string>
|
||||
<string name="status_completed">Završeno</string>
|
||||
<string name="status">Status</string>
|
||||
|
|
@ -408,7 +411,9 @@
|
|||
<string name="plugins_downloaded" formatted="true">Preuzeto: %d</string>
|
||||
<string name="plugins_disabled" formatted="true">Onemogućeno: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Nepreuzeto: %d</string>
|
||||
<string name="blank_repo_message">CloudStream standardno nema instalirane web stranice. Stranice morate instalirati iz repozitorija. \n \nPridružite se našem Discordu ili tražite online.</string>
|
||||
<string name="blank_repo_message">CloudStream standardno nema instalirane web stranice. Stranice morate instalirati iz repozitorija.
|
||||
\n
|
||||
\nPridružite se našem Discordu ili tražite online.</string>
|
||||
<string name="view_public_repositories_button">Prikaži repozitorije zajednice</string>
|
||||
<string name="view_public_repositories_button_short">Javni popis</string>
|
||||
<string name="uppercase_all_subtitles">Koristi velika slova za sve titlove</string>
|
||||
|
|
@ -493,9 +498,11 @@
|
|||
<string name="sort_alphabetical_z">Abecedno (Ž do A)</string>
|
||||
<string name="select_library">Odaberite biblioteku</string>
|
||||
<string name="open_with">Otvori sa</string>
|
||||
<string name="empty_library_no_accounts_message">Vaša je biblioteka prazna :( \nPrijavite se na račun biblioteke ili dodajte filmove / serije u svoju lokalnu biblioteku.</string>
|
||||
<string name="empty_library_no_accounts_message">Vaša je biblioteka prazna :(
|
||||
\nPrijavite se na račun biblioteke ili dodajte filmove / serije u svoju lokalnu biblioteku.</string>
|
||||
<string name="empty_library_logged_in_message">Ova je lista prazna. Pokušajte se prebaciti na jednu drugu listu.</string>
|
||||
<string name="safe_mode_file">Pronađena je datoteka sigurnog načina rada! \nProširenja se ne učitavaju tijekom pokretanja dok se datoteka ne ukloni.</string>
|
||||
<string name="safe_mode_file">Pronađena je datoteka sigurnog načina rada!
|
||||
\nProširenja se ne učitavaju tijekom pokretanja dok se datoteka ne ukloni.</string>
|
||||
<string name="android_tv_interface_on_seek_settings">Prikazan player – Količina pomicanja</string>
|
||||
<string name="android_tv_interface_on_seek_settings_summary">Količina pomicanja koja se koristi kada je player vidljiv</string>
|
||||
<string name="android_tv_interface_off_seek_settings">Player skriven – Količina pomicanja</string>
|
||||
|
|
@ -534,13 +541,23 @@
|
|||
<string name="disable">Onemogući</string>
|
||||
<string name="no_plugins_found_error">U repozitoriju nisu pronađeni dodaci</string>
|
||||
<string name="no_repository_found_error">Repozitorij nije pronađen. Provjeri URL i pokušaj VPN</string>
|
||||
<string name="quality_profile_help">Ovdje možete promijeniti način na koji su izvori poredani. Ako video ima viši prioritet, pojavit će se više u odabiru izvora. Zbroj prioriteta izvora i prioriteta kvalitete je prioritet videa. \n \nIzvor A: 3 \nKvaliteta B: 7 \nImat će kombinirani prioritet videa od 10. \n \nNAPOMENA: Ako je zbroj 10 ili više, video player će automatski preskočiti učitavanje kada se ta poveznica učita!</string>
|
||||
<string name="quality_profile_help">Ovdje možete promijeniti način na koji su izvori poredani. Ako video ima viši prioritet, pojavit će se više u odabiru izvora. Zbroj prioriteta izvora i prioriteta kvalitete je prioritet videa.
|
||||
\n
|
||||
\nIzvor A: 3
|
||||
\nKvaliteta B: 7
|
||||
\nImat će kombinirani prioritet videa od 10.
|
||||
\n
|
||||
\nNAPOMENA: Ako je zbroj 10 ili više, video player će automatski preskočiti učitavanje kada se ta poveznica učita!</string>
|
||||
<string name="already_voted">Već si glasao/la</string>
|
||||
<string name="backup_frequency">Učestalost spremanja sigurnosne kopije</string>
|
||||
<string name="favorite_removed">%s uklonjeno iz favorita</string>
|
||||
<string name="favorites_list_name">Favoriti</string>
|
||||
<string name="favorite_added">%s dodano u favorite</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Potencijalni duplikati pronađeni su u vašoj biblioteci: \n \n%s \n \nŽelite li ipak dodati ovu stavku koja zamjenjuje postojeće ili poništiti radnju?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Potencijalni duplikati pronađeni su u vašoj biblioteci:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nŽelite li ipak dodati ovu stavku koja zamjenjuje postojeće ili poništiti radnju?</string>
|
||||
<string name="duplicate_title">Pronađen potencijalni duplikat</string>
|
||||
<string name="lock_profile">Zaključaj profil</string>
|
||||
<string name="action_add_to_favorites">Dodaj u favorite</string>
|
||||
|
|
@ -553,7 +570,9 @@
|
|||
<string name="action_subscribe">Pretplata</string>
|
||||
<string name="action_remove_from_favorites">Ukloni iz favorita</string>
|
||||
<string name="select_an_account">Odaberite račun</string>
|
||||
<string name="duplicate_message_single" formatted="true">Čini se da potencijalno duplicirana stavka već postoji u vašoj biblioteci: \'%s.\' \n \nŽelite li ipak dodati ovu stavku koja zamjenjuje postojeću ili poništiti radnju?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Čini se da potencijalno duplicirana stavka već postoji u vašoj biblioteci: \'%s.\'
|
||||
\n
|
||||
\nŽelite li ipak dodati ovu stavku koja zamjenjuje postojeću ili poništiti radnju?</string>
|
||||
<string name="enter_pin">Unesite PIN</string>
|
||||
<string name="pin">PIN</string>
|
||||
<string name="enter_current_pin">Unesite trenutni PIN</string>
|
||||
|
|
@ -577,7 +596,8 @@
|
|||
<string name="repo_copy_label">Ime repozitorija i URL</string>
|
||||
<string name="toast_copied">kopirano!</string>
|
||||
<string name="biometric_setting">Zaključaj s biometrijskim podatcima</string>
|
||||
<string name="resume_remaining" formatted="true">%s \npreostalo</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\npreostalo</string>
|
||||
<string name="clipboard_permission_error">Pogreška pri pristupanju međuspremnika. Pokušaj ponovo.</string>
|
||||
<string name="biometric_authentication_title">Otključaj CloudStream</string>
|
||||
<string name="password_pin_authentication_title">Lozinka/PIN autentifikacija</string>
|
||||
|
|
@ -596,7 +616,7 @@
|
|||
<string name="biometric_setting_summary">Otključaj aplikaciju pomoću otiska prsta, ID-a lica, PIN-a, uzorka i lozinke.</string>
|
||||
<string name="episode_upcoming_format" formatted="true">Sljedeća u %s</string>
|
||||
<string name="clipboard_unknown_error">Pogreška pri kopiranju. Kopirajte zapisnik i kontaktirajte podršku aplikacije.</string>
|
||||
<string name="battery_dialog_message">Da biste osigurali neprekinuta preuzimanja i obavijesti za pretplaćene TV emisije, CloudStream treba dopuštenje za rad u pozadini. Pritiskom na \"U redu\" prikazat će vam se dijaloški okvir s zahtjevom. Molimo vas da pritisnete \"Dopusti\". \n\nNapominjemo da ovo dopuštenje ne znači da će CS3 trošiti vašu bateriju. Aplikacija će raditi u pozadini samo kada je to potrebno, primjerice prilikom primanja obavijesti ili preuzimanja videozapisa iz službenih proširenja.</string>
|
||||
<string name="battery_dialog_message">Da biste osigurali neprekinuta preuzimanja i obavijesti za pretplaćene TV emisije, CloudStream treba dopuštenje za rad u pozadini. Pritiskom na \"U redu\" prikazat će vam se dijaloški okvir s zahtjevom. Molimo vas da pritisnete \"Dopusti\". \n\nNapominjemo da ovo dopuštenje ne znači da će CS3 trošiti vašu bateriju. Aplikacija će raditi u pozadini samo kada je to potrebno, primjerice prilikom primanja obavijesti ili preuzimanja videozapisa iz službenih proširenja.</string>
|
||||
<string name="biometric_warning">Vaši CloudStream podaci su sada spremljeni u sigurnosnu kopiju. Iako je vjerojatnost mala, neki se uređaji mogu ponašati drugačije. Ako izgubite pristup aplikaciji, potpuno izbrišite podatke aplikacije i obnovite ih pomoću sigurnosne kopije. Ispričavamo se zbog mogućih neugodnosti.</string>
|
||||
<string name="next_season_episode_format" formatted="true">Sezona %1$d epizoda %2$d izlazi za</string>
|
||||
<string name="episode_action_cast_mirror">Cast duplikat</string>
|
||||
|
|
@ -622,14 +642,22 @@
|
|||
<string name="delete_plugin">Izbriši dodatak</string>
|
||||
<string name="offline_file">Dostupno za gledanje offline</string>
|
||||
<string name="select_all">Označi sve</string>
|
||||
<string name="delete_message_multiple" formatted="true">Stvarno želite trajno izbrisati sljedeće stavke? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Stvarno želite trajno izbrisati sljedeće epizode u %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Trajno ćete izbrisati i sve epizode u sljedećim serijama: \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Stvarno želite trajno izbrisati sljedeće stavke?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Stvarno želite trajno izbrisati sljedeće epizode u %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Trajno ćete izbrisati i sve epizode u sljedećim serijama:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="downloads_delete_select">Odaberi stavke za brisanje</string>
|
||||
<string name="deselect_all">Odznači sve</string>
|
||||
<string name="delete_format" formatted="true">Izbriši (%1$d | %2$s)</string>
|
||||
<string name="delete_files">Izbriši datoteke</string>
|
||||
<string name="delete_message_series_only" formatted="true">Stvarno želite trajno izbrisati sve epizode u sljedećoj seriji? \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Stvarno želite trajno izbrisati sve epizode u sljedećoj seriji?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="no_subtitles_loaded">Još nije učitan nijedan titl</string>
|
||||
<string name="preview_seekbar">Pretpregled trake za traženje</string>
|
||||
<string name="preview_seekbar_desc">Omogući minijaturu pregleda na traci za pretraživanje</string>
|
||||
|
|
@ -721,7 +749,7 @@
|
|||
<string name="top_center">Gore u sredini</string>
|
||||
<string name="top_right">Gore desno</string>
|
||||
<string name="extra_brightness_settings">Dodatna svjetlina</string>
|
||||
<string name="extra_brightness_settings_des">Uključi filtar svjetline kada se prekorači 100 % svjetline ekrana</string>
|
||||
<string name="extra_brightness_settings_des">Uključi filtar svjetline kada se prekorači 100 % svjetline ekrana</string>
|
||||
<string name="extra_brightness_key">dodatna_svjetlina_uključena</string>
|
||||
<string name="search_suggestions">Prijedlozi za pretraživanje</string>
|
||||
<string name="search_suggestions_des">Prikaži prijedloge za pretraživanje tijekom tipkanja</string>
|
||||
|
|
@ -747,8 +775,4 @@
|
|||
<string name="download_episode_range">Želiš li preuzeti epizodu %s?</string>
|
||||
<string name="cancel_queue_message">Želiš li otkazati sva preuzimanja u redu čekanja?</string>
|
||||
<string name="show_cast_in_details">Prikaži ploču glumačke postave</string>
|
||||
<string name="video_singular">Video</string>
|
||||
<string name="skip_type_preview">Pregled</string>
|
||||
<string name="player_is_live">Uživo</string>
|
||||
<string name="show_player_metadata_overlay">Prikaži sloj metapodataka playera</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@
|
|||
<string name="home_change_provider_img_des">Szolgáltató Váltás</string>
|
||||
<string name="player_speed_text_format" formatted="true">Sebesség (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Értékelés: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Új frissítés található! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Új frissítés található!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d perc</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%1$sEp%2$d</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
|
|
@ -148,7 +149,8 @@
|
|||
<string name="episode_short">Ep</string>
|
||||
<string name="no_episodes_found">Nem található epizód</string>
|
||||
<string name="delete_file">Fájl törlése</string>
|
||||
<string name="resume_time_left" formatted="true">%dp \nhátra</string>
|
||||
<string name="resume_time_left" formatted="true">%dp
|
||||
\nhátra</string>
|
||||
<string name="duration">Időtartam</string>
|
||||
<string name="free_storage">Elérhető</string>
|
||||
<string name="used_storage">Használatban</string>
|
||||
|
|
@ -204,7 +206,8 @@
|
|||
<string name="season_format">%1$s %2$d%3$s</string>
|
||||
<string name="no_season">Nincs évad</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Ezzel véglegesen törli a %s \nBiztosan törli?</string>
|
||||
<string name="delete_message" formatted="true">Ezzel véglegesen törli a %s
|
||||
\nBiztosan törli?</string>
|
||||
<string name="status_ongoing">Folyamatban levő</string>
|
||||
<string name="year">Év</string>
|
||||
<string name="site">Webhely</string>
|
||||
|
|
@ -320,7 +323,8 @@
|
|||
<string name="extension_types">Támogatott</string>
|
||||
<string name="update_notification_downloading">Alkalmazásfrissítés letöltése…</string>
|
||||
<string name="sort_updated_new">Frissítve (újabbtól a régebbihez)</string>
|
||||
<string name="empty_library_no_accounts_message">Úgy tűnik, a könyvtárad üres :( \nJelentkezz be egy könyvtár fiókba, vagy adj hozzá műsorokat a helyi könyvtárodhoz.</string>
|
||||
<string name="empty_library_no_accounts_message">Úgy tűnik, a könyvtárad üres :(
|
||||
\nJelentkezz be egy könyvtár fiókba, vagy adj hozzá műsorokat a helyi könyvtárodhoz.</string>
|
||||
<string name="empty_library_logged_in_message">Úgy tűnik, ez a lista üres, próbálj meg egy másikra váltani.</string>
|
||||
<string name="max">Max</string>
|
||||
<string name="quality_4k">4K</string>
|
||||
|
|
@ -412,7 +416,9 @@
|
|||
<string name="subtitles_remove_captions">Zárt feliratok eltávolítása a feliratokból</string>
|
||||
<string name="is_adult">18+</string>
|
||||
<string name="delete_repository_plugins">Ez az összes tároló bővítményt is törli</string>
|
||||
<string name="blank_repo_message">A CloudStream alapértelmezés szerint nem telepített webhelyeket. A webhelyeket a tárolókból kell telepítenie. \n \nCsatlakozz a Discord-unkhoz vagy keress online.</string>
|
||||
<string name="blank_repo_message">A CloudStream alapértelmezés szerint nem telepített webhelyeket. A webhelyeket a tárolókból kell telepítenie.
|
||||
\n
|
||||
\nCsatlakozz a Discord-unkhoz vagy keress online.</string>
|
||||
<string name="extension_version">Verzió</string>
|
||||
<string name="action_mark_as_watched">Megjelölés megtekintettként</string>
|
||||
<string name="action_remove_from_watched">Eltávolítás a megnézettek közül</string>
|
||||
|
|
@ -466,7 +472,8 @@
|
|||
<string name="skip_type_credits">Közreműködők</string>
|
||||
<string name="sort_alphabetical_z">Betűrendben (Z-től az A-ig)</string>
|
||||
<string name="select_library">Könyvtár kiválasztása</string>
|
||||
<string name="safe_mode_file">Biztonságos módú fájlba ütköztünk! \nNem töltődik be semmilyen kiegészítő indításkor, amíg a fájl nem kerül törlésre.</string>
|
||||
<string name="safe_mode_file">Biztonságos módú fájlba ütköztünk!
|
||||
\nNem töltődik be semmilyen kiegészítő indításkor, amíg a fájl nem kerül törlésre.</string>
|
||||
<string name="normal">Normál</string>
|
||||
<string name="player_loaded_subtitles" formatted="true">%s betöltve</string>
|
||||
<string name="skip_setup">Beállítás kihagyása</string>
|
||||
|
|
@ -529,8 +536,18 @@
|
|||
<string name="profiles">Profilok</string>
|
||||
<string name="action_remove_from_favorites">Eltávolítás kedvencekből</string>
|
||||
<string name="enter_current_pin">Adja meg a jelenlegi PIN-t</string>
|
||||
<string name="quality_profile_help">Itt beállíthatja hogyan rendezze el a forrásokat. Ha egy videónak nagyobb a prioritása, előbb fog megjelenni a listában. A forrás prioritás és a minőség prioritás együttes értéke adja ki a videó prioritást. \n \nForrás A: 3 \nMinőség B: 7 \nEzek összértéke egy 10-es videó prioritást eredményez. \n \nFIGYELEM: Ha az összeg több mint 10, a lejátszó nem tölt be mást ha már a link betöltésre került!</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Potenciálisan dupla elemek a könyvtárjában: \n \n%s \n \nSzeretné hozzáadni ezt az elemet mindenképpen, ezzel felülírva a jelenlegit, vagy visszavonja a műveletet?</string>
|
||||
<string name="quality_profile_help">Itt beállíthatja hogyan rendezze el a forrásokat. Ha egy videónak nagyobb a prioritása, előbb fog megjelenni a listában. A forrás prioritás és a minőség prioritás együttes értéke adja ki a videó prioritást.
|
||||
\n
|
||||
\nForrás A: 3
|
||||
\nMinőség B: 7
|
||||
\nEzek összértéke egy 10-es videó prioritást eredményez.
|
||||
\n
|
||||
\nFIGYELEM: Ha az összeg több mint 10, a lejátszó nem tölt be mást ha már a link betöltésre került!</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Potenciálisan dupla elemek a könyvtárjában:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nSzeretné hozzáadni ezt az elemet mindenképpen, ezzel felülírva a jelenlegit, vagy visszavonja a műveletet?</string>
|
||||
<string name="skip_startup_account_select_pref">Fiók választás kihagyása belépéskor</string>
|
||||
<string name="use_default_account">Használjon alapértelmezett fiókot</string>
|
||||
<string name="rotate_video">Elforgatás</string>
|
||||
|
|
@ -539,7 +556,9 @@
|
|||
<string name="favorite_added">%s hozzáadva a kedvencekhez</string>
|
||||
<string name="favorite_removed">%s eltávolítva a kedvencekből</string>
|
||||
<string name="action_add_to_favorites">Hozzáadás a kedvencekhez</string>
|
||||
<string name="duplicate_message_single" formatted="true">Úgy tűnik egy potenciálisan dupla elem már létezik a könyvtárjában: \'%s.\' \n \nMindenképpen hozzá akarja adni ezt az elemet, ezzel felülírva a régit, vagy visszavonja a műveletet?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Úgy tűnik egy potenciálisan dupla elem már létezik a könyvtárjában: \'%s.\'
|
||||
\n
|
||||
\nMindenképpen hozzá akarja adni ezt az elemet, ezzel felülírva a régit, vagy visszavonja a műveletet?</string>
|
||||
<string name="enter_pin">Adja meg a PIN-t</string>
|
||||
<string name="lock_profile">Profil Zárolása</string>
|
||||
<string name="select_an_account">Válasszon egy fiókot</string>
|
||||
|
|
|
|||
|
|
@ -169,8 +169,10 @@
|
|||
<string name="resume">Lanjutkan</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Ini akan secara permanen menghapus %s \nApakah anda yakin?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \ntersisa</string>
|
||||
<string name="delete_message" formatted="true">Ini akan secara permanen menghapus %s
|
||||
\nApakah anda yakin?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\ntersisa</string>
|
||||
<string name="status_ongoing">Masih Berlanjut</string>
|
||||
<string name="status_completed">Tamat</string>
|
||||
<string name="status">Status</string>
|
||||
|
|
@ -388,7 +390,9 @@
|
|||
<string name="plugins_updated" formatted="true">%d plugin diperbarui</string>
|
||||
<string name="view_public_repositories_button">Lihat repositori komunitas</string>
|
||||
<string name="view_public_repositories_button_short">Daftar publik</string>
|
||||
<string name="blank_repo_message">CloudStream tidak memiliki situs yang terinstal secara default. Anda perlu menginstal situs-situs dari repositori. \n \nBergabunglah dengan Discord kami atau cari secara online.</string>
|
||||
<string name="blank_repo_message">CloudStream tidak memiliki situs yang terinstal secara default. Anda perlu menginstal situs-situs dari repositori.
|
||||
\n
|
||||
\nBergabunglah dengan Discord kami atau cari secara online.</string>
|
||||
<string name="repository_url_hint">URL Repositori atau Kode Pendek</string>
|
||||
<string name="create_account">Buat Akun</string>
|
||||
<string name="error">Error</string>
|
||||
|
|
@ -483,7 +487,8 @@
|
|||
<string name="action_remove_from_watched">Hapus dari tontonan</string>
|
||||
<string name="browser">Peramban</string>
|
||||
<string name="select_library">Pilih pustaka</string>
|
||||
<string name="empty_library_no_accounts_message">Yahh daftar pustaka kamu kosong :( \nMasuk ke akun pustaka atau tambah perlihatkan ke lokal pustaka kamu.</string>
|
||||
<string name="empty_library_no_accounts_message">Yahh daftar pustaka kamu kosong :(
|
||||
\nMasuk ke akun pustaka atau tambah perlihatkan ke lokal pustaka kamu.</string>
|
||||
<string name="library">Pustaka</string>
|
||||
<string name="sort_by">Urutkan berdasarkan</string>
|
||||
<string name="sort">Urutkan</string>
|
||||
|
|
@ -495,7 +500,8 @@
|
|||
<string name="sort_alphabetical_z">Abjad (Z ke A)</string>
|
||||
<string name="open_with">Buka dengan</string>
|
||||
<string name="empty_library_logged_in_message">Yahh daftar ini kosong. Coba ganti ke yang lain.</string>
|
||||
<string name="safe_mode_file">Mode aman file ditemukan! \nTidak memuat ekstensi pada startup sampai berkas dihapus.</string>
|
||||
<string name="safe_mode_file">Mode aman file ditemukan!
|
||||
\nTidak memuat ekstensi pada startup sampai berkas dihapus.</string>
|
||||
<string name="android_tv_interface_off_seek_settings">Sembunyikan Pemutaran - Geser</string>
|
||||
<string name="android_tv_interface_on_seek_settings">Pemutar terlihat - Geser</string>
|
||||
<string name="android_tv_interface_on_seek_settings_summary">Geser untuk menghilangkan</string>
|
||||
|
|
@ -521,7 +527,13 @@
|
|||
<string name="watch_quality_pref_data">Kualitas nonton yang diinginkan (Data Seluler)</string>
|
||||
<string name="mobile_data">Data seluler</string>
|
||||
<string name="help">Bantuan</string>
|
||||
<string name="quality_profile_help">Di sini anda dapat mengubah sumber yang diurutkan. Jika video memiliki prioritas lebih tinggi, video tersebut akan muncul lebih tinggi dalam pemilihan sumber. Jumlah prioritas sumber dan prioritas kualitas adalah prioritas video. \n \nSumber A: 3 \nKualitas B: 7 \nAkan memiliki prioritas video yang digabung 10. \n \nCATATAN: Jika jumlahnya 10 atau lebih, pemain akan melewatkan pemuatan secara otomatis saat tautan dimuat!</string>
|
||||
<string name="quality_profile_help">Di sini anda dapat mengubah sumber yang diurutkan. Jika video memiliki prioritas lebih tinggi, video tersebut akan muncul lebih tinggi dalam pemilihan sumber. Jumlah prioritas sumber dan prioritas kualitas adalah prioritas video.
|
||||
\n
|
||||
\nSumber A: 3
|
||||
\nKualitas B: 7
|
||||
\nAkan memiliki prioritas video yang digabung 10.
|
||||
\n
|
||||
\nCATATAN: Jika jumlahnya 10 atau lebih, pemain akan melewatkan pemuatan secara otomatis saat tautan dimuat!</string>
|
||||
<string name="profile_number">Profil %d</string>
|
||||
<string name="wifi">Wifi</string>
|
||||
<string name="set_default">Pengaturan default</string>
|
||||
|
|
@ -581,7 +593,8 @@
|
|||
<string name="biometric_prompt_description">Setelah beberapa kali gagal, perintah akan ditutup. Cukup mulai ulang aplikasi untuk mencoba lagi.</string>
|
||||
<string name="unfavorite">Batalkan favorit</string>
|
||||
<string name="biometric_authentication_title">Buka kunci CloudStream</string>
|
||||
<string name="resume_remaining" formatted="true">%s \ntersisa</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\ntersisa</string>
|
||||
<string name="favorite">Favorit</string>
|
||||
<string name="biometric_setting">Kunci dengan Biometrik</string>
|
||||
<string name="repo_copy_label">Nama dan URL repositori</string>
|
||||
|
|
@ -625,10 +638,18 @@
|
|||
<string name="select_all">Pilih Semua</string>
|
||||
<string name="deselect_all">Batal Pilih Semua</string>
|
||||
<string name="delete_files">Hapus File</string>
|
||||
<string name="delete_message_multiple" formatted="true">Apakah Anda yakin ingin menghapus item berikut secara permanen? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Apakah Anda yakin ingin menghapus episode berikut di %1$s secara permanen? \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Anda juga akan menghapus semua episode dalam seri berikut secara permanen: \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Apakah Anda yakin ingin menghapus semua episode dalam seri berikut secara permanen? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Apakah Anda yakin ingin menghapus item berikut secara permanen?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Apakah Anda yakin ingin menghapus episode berikut di %1$s secara permanen?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Anda juga akan menghapus semua episode dalam seri berikut secara permanen:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Apakah Anda yakin ingin menghapus semua episode dalam seri berikut secara permanen?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_format" formatted="true">Hapus (%1$d | %2$s)</string>
|
||||
<string name="delete_plugin">Hapus plugin</string>
|
||||
<string name="device_pin_error_message">Tidak bisa mendapatkan kode PIN perangkat, coba autentikasi lokal</string>
|
||||
|
|
@ -744,7 +765,4 @@
|
|||
<string name="download_episode_range">Apakah kamu ingin mengunduh episode %s?</string>
|
||||
<string name="cancel_queue_message">Apakah kamu ingin membatalkan semua unduhan dalam antrean?</string>
|
||||
<string name="show_player_metadata_overlay">Tampilkan overlay metadata pemutar</string>
|
||||
<string name="player_is_live">Live</string>
|
||||
<string name="video_singular">Video</string>
|
||||
<string name="skip_type_preview">Pratinjau</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<string name="next_episode_format" formatted="true">L\'episodio %d uscirà in</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%1$dd %2$dh %3$dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$dh %2$dm</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%d min</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%d min</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>
|
||||
|
|
@ -19,7 +19,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">Velocità (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Valutato: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Nuovo aggiornamento trovato! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nuovo aggiornamento trovato!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Filler</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<!-- <string name="app_name">CloudStream</string> -->
|
||||
|
|
@ -185,8 +186,10 @@
|
|||
<string name="resume">Riprendi</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Stai per eliminare permanentemente %s \nSei sicuro?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nrimanenti</string>
|
||||
<string name="delete_message" formatted="true">Stai per eliminare permanentemente %s
|
||||
\nSei sicuro?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nrimanenti</string>
|
||||
<string name="status_ongoing">In corso</string>
|
||||
<string name="status_completed">Completato</string>
|
||||
<string name="status">Stato</string>
|
||||
|
|
@ -409,7 +412,9 @@
|
|||
<string name="plugins_disabled" formatted="true">Disabilitato: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Non scaricato: %d</string>
|
||||
<string name="plugins_updated" formatted="true">Aggiornati %d plugin</string>
|
||||
<string name="blank_repo_message">CloudStream non ha siti installati per impostazione predefinita. È necessario installare i siti dai repository. \n \nUnisciti al nostro Discord o cerca online.</string>
|
||||
<string name="blank_repo_message">CloudStream non ha siti installati per impostazione predefinita. È necessario installare i siti dai repository.
|
||||
\n
|
||||
\nUnisciti al nostro Discord o cerca online.</string>
|
||||
<string name="view_public_repositories_button">Visualizza i repository della comunità</string>
|
||||
<string name="view_public_repositories_button_short">Lista pubblica</string>
|
||||
<string name="uppercase_all_subtitles">Tutti i sottotitoli in maiuscolo</string>
|
||||
|
|
@ -497,13 +502,15 @@
|
|||
<string name="sort_updated_old">Aggiornato (Da vecchio a nuovo)</string>
|
||||
<string name="sort_alphabetical_a">Alfabetico (A - Z)</string>
|
||||
<string name="sort_alphabetical_z">Alfabetico (Z - A)</string>
|
||||
<string name="empty_library_no_accounts_message">La tua libreria è vuota :( \nAccedi a un account di libreria o aggiungi degli show alla tua libreria locale.</string>
|
||||
<string name="empty_library_no_accounts_message">La tua libreria è vuota :(
|
||||
\nAccedi a un account di libreria o aggiungi degli show alla tua libreria locale.</string>
|
||||
<string name="select_library">Seleziona libreria</string>
|
||||
<string name="open_with">Apri con</string>
|
||||
<string name="library">Libreria</string>
|
||||
<string name="sort">Ordina</string>
|
||||
<string name="empty_library_logged_in_message">Questo elenco è vuoto. Prova a passare a un altro.</string>
|
||||
<string name="safe_mode_file">File \"safe mode\" trovato! \nAll\'avvio non sarà caricata alcuna estensione finchè il file non verrà rimosso.</string>
|
||||
<string name="safe_mode_file">File \"safe mode\" trovato!
|
||||
\nAll\'avvio non sarà caricata alcuna estensione finchè il file non verrà rimosso.</string>
|
||||
<string name="android_tv_interface_off_seek_settings_summary">Intervallo di ricerca utilizzato quando il lettore è nascosto</string>
|
||||
<string name="pref_category_android_tv">TV Android</string>
|
||||
<string name="android_tv_interface_on_seek_settings_summary">Intervallo di ricerca utilizzato quando il lettore è visibile</string>
|
||||
|
|
@ -527,7 +534,13 @@
|
|||
<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>
|
||||
<string name="quality_profile_help">Qui puoi cambiare l\'ordine delle fonti. Se un video ha una priorità maggiore, apparirà più in alto nella selezione delle fonti. La somma tra la priorità della fonte e la priorità della qualità è la priorità video. \n \nFonte A: 3 \nQualità B: 7 \nAvranno una priorità video combinata di 10. \n \nNOTA: se la somma è pari o superiore a 10, il lettore salterà automaticamente il caricamento quando viene caricato quel link!</string>
|
||||
<string name="quality_profile_help">Qui puoi cambiare l\'ordine delle fonti. Se un video ha una priorità maggiore, apparirà più in alto nella selezione delle fonti. La somma tra la priorità della fonte e la priorità della qualità è la priorità video.
|
||||
\n
|
||||
\nFonte A: 3
|
||||
\nQualità B: 7
|
||||
\nAvranno una priorità video combinata di 10.
|
||||
\n
|
||||
\nNOTA: se la somma è pari o superiore a 10, il lettore salterà automaticamente il caricamento quando viene caricato quel link!</string>
|
||||
<string name="profile_number">Profilo %d</string>
|
||||
<string name="wifi">Wi-Fi</string>
|
||||
<string name="set_default">Imposta predefinito</string>
|
||||
|
|
@ -547,7 +560,11 @@
|
|||
<string name="favorite_removed">%s rimosso dai preferiti</string>
|
||||
<string name="favorites_list_name">Preferiti</string>
|
||||
<string name="favorite_added">%s aggiunto ai preferiti</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Dei possibili duplicati sono stati trovati nella tua libreria: \n \n%s \n \nVorresti aggiungere l\'oggetto alla libreria comunque, rimpiazzare l\'esistente, o cancellare l\'azione?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Dei possibili duplicati sono stati trovati nella tua libreria:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nVorresti aggiungere l\'oggetto alla libreria comunque, rimpiazzare l\'esistente, o cancellare l\'azione?</string>
|
||||
<string name="backup_frequency">Frequenza di backup</string>
|
||||
<string name="duplicate_title">Trovato Possibile Duplicato</string>
|
||||
<string name="action_add_to_favorites">Aggiungi ai preferiti</string>
|
||||
|
|
@ -560,7 +577,9 @@
|
|||
<string name="action_subscribe">Iscriviti</string>
|
||||
<string name="action_remove_from_favorites">Rimuovi dai preferiti</string>
|
||||
<string name="select_an_account">Seleziona un account</string>
|
||||
<string name="duplicate_message_single">Sembra che nella tua libreria esista già un elemento potenzialmente duplicato: \'%s.\' \n \nDesideri aggiungere comunque questo elemento, sostituire quello esistente o annullare l\'azione?</string>
|
||||
<string name="duplicate_message_single">Sembra che nella tua libreria esista già un elemento potenzialmente duplicato: \'%s.\'
|
||||
\n
|
||||
\nDesideri aggiungere comunque questo elemento, sostituire quello esistente o annullare l\'azione?</string>
|
||||
<string name="enter_pin">Inserisci PIN</string>
|
||||
<string name="pin">PIN</string>
|
||||
<string name="enter_current_pin">Inserisci PIN corrente</string>
|
||||
|
|
@ -590,7 +609,8 @@
|
|||
<string name="biometric_prompt_description">Dopo alcuni tentativi falliti, il prompt si chiuderà. Riavvia semplicemente l\'app per riprovare.</string>
|
||||
<string name="biometric_warning">È stato eseguito il backup dei tuoi dati CloudStream. Sebbene questa possibilità sia molto bassa, tutti i dispositivi possono comportarsi in modo diverso. Nel raro caso in cui ti venga bloccato l\'accesso all\'app, cancella completamente i dati dell\'app e ripristina da un backup. Siamo molto spiacenti per qualsiasi inconveniente derivanti da questo.</string>
|
||||
<string name="unfavorite">Non preferito</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nresiduo</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nresiduo</string>
|
||||
<string name="favorite">Preferito</string>
|
||||
<string name="repo_copy_label">Nome e URL del repository</string>
|
||||
<string name="toast_copied">copiato!</string>
|
||||
|
|
@ -632,12 +652,20 @@
|
|||
<string name="select_all">Seleziona tutto</string>
|
||||
<string name="deselect_all">Deseleziona tutto</string>
|
||||
<string name="delete_format" formatted="true">Elimina (%1$d | %2$s)</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Sei sicuro di voler eliminare definitivamente i seguenti episodi in %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Eliminerai definitivamente anche tutti gli episodi delle seguenti serie: \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Sei sicuro di voler eliminare definitivamente tutti gli episodi delle seguenti serie? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Sei sicuro di voler eliminare definitivamente i seguenti episodi in %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Eliminerai definitivamente anche tutti gli episodi delle seguenti serie:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Sei sicuro di voler eliminare definitivamente tutti gli episodi delle seguenti serie?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="sort_release_date_old">Data di rilascio (dal più vecchio)</string>
|
||||
<string name="delete_files">Elimina file</string>
|
||||
<string name="delete_message_multiple" formatted="true">Sei sicuro di voler eliminare definitivamente i seguenti elementi? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Sei sicuro di voler eliminare definitivamente i seguenti elementi?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="preview_seekbar">Anteprima barra di avanzamento</string>
|
||||
<string name="preview_seekbar_desc">Abilita miniatura di anteprima sulla barra di avanzamento</string>
|
||||
<string name="no_subtitles_loaded">Nessun sottotitolo caricato</string>
|
||||
|
|
@ -756,7 +784,4 @@
|
|||
<string name="source_priority">Priorità sorgente</string>
|
||||
<string name="source_priority_help">Decidi come le sorgenti video devono essere ordinate nel lettore</string>
|
||||
<string name="show_player_metadata_overlay">Mostra sovrapposizione metadati lettore</string>
|
||||
<string name="video_singular">Video</string>
|
||||
<string name="skip_type_preview">Anteprima</string>
|
||||
<string name="player_is_live">Live</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@
|
|||
<string name="home_change_provider_img_des">לשנות ספק</string>
|
||||
<string name="player_speed_text_format" formatted="true">מהירות (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">דירוג: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">נמצא עדכון חדש! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">נמצא עדכון חדש!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">סינון</string>
|
||||
<string name="duration_format" formatted="true">%d דקות</string>
|
||||
<string name="app_name">קלאודסטרים</string>
|
||||
|
|
@ -145,8 +146,10 @@
|
|||
<string name="resume">המשך</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="resume_time_left" formatted="true">%dדקות \nנותרו</string>
|
||||
<string name="delete_message" formatted="true">פעולה זאת תמחק לצמיתות את %s \nהאם אתם בטוחים?</string>
|
||||
<string name="resume_time_left" formatted="true">%dדקות
|
||||
\nנותרו</string>
|
||||
<string name="delete_message" formatted="true">פעולה זאת תמחק לצמיתות את %s
|
||||
\nהאם אתם בטוחים?</string>
|
||||
<string name="status_ongoing">מתמשך</string>
|
||||
<string name="duration">משך זמן</string>
|
||||
<string name="rating">דירוג</string>
|
||||
|
|
@ -422,8 +425,10 @@
|
|||
<string name="skip_type_credits">קרדיטים</string>
|
||||
<string name="sort">מיין</string>
|
||||
<string name="select_library">בחר ספרייה</string>
|
||||
<string name="empty_library_no_accounts_message">נראה שהספרייה שלכם ריקה :( \nהתחברו לחשבון ספריה או הוסיפו סדרות לספרייה המקומית שלכם.</string>
|
||||
<string name="safe_mode_file">קובץ מצב בטוח נמצא! \nלא טוען שום תוספות בהפעלה עד להסרת הקובץ.</string>
|
||||
<string name="empty_library_no_accounts_message">נראה שהספרייה שלכם ריקה :(
|
||||
\nהתחברו לחשבון ספריה או הוסיפו סדרות לספרייה המקומית שלכם.</string>
|
||||
<string name="safe_mode_file">קובץ מצב בטוח נמצא!
|
||||
\nלא טוען שום תוספות בהפעלה עד להסרת הקובץ.</string>
|
||||
<string name="update_notification_failed">לא ניתן להתקין את הגרסה החדשה של האפליקציה</string>
|
||||
<string name="batch_download">הורדת אצווה</string>
|
||||
<string name="plugin_singular">תוסף</string>
|
||||
|
|
@ -439,7 +444,11 @@
|
|||
<string name="plugins_downloaded" formatted="true">הורד: %d</string>
|
||||
<string name="plugins_disabled" formatted="true">מוגבל: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">לא מורד: %d</string>
|
||||
<string name="blank_repo_message">לקלאודסטרים אין אתרים מותקנים כברירת מחדל. עליכם להתקין את האתרים ממאגרים. \n \nבגלל הסרת DMCA על ידי Sky UK LImited 🤮 אנחנו לא יכולים לקשר את אתר המאגרים באפליקציה. \n \nתצטרפו לדיסקורד שלנו או תחפשו באינטרנט.</string>
|
||||
<string name="blank_repo_message">לקלאודסטרים אין אתרים מותקנים כברירת מחדל. עליכם להתקין את האתרים ממאגרים.
|
||||
\n
|
||||
\nבגלל הסרת DMCA על ידי Sky UK LImited 🤮 אנחנו לא יכולים לקשר את אתר המאגרים באפליקציה.
|
||||
\n
|
||||
\nתצטרפו לדיסקורד שלנו או תחפשו באינטרנט.</string>
|
||||
<string name="view_public_repositories_button">הצג מאגרים קהילתיים</string>
|
||||
<string name="view_public_repositories_button_short">רשימה ציבורית</string>
|
||||
<string name="uppercase_all_subtitles">לשים את הכתוביות באותיות רישיות</string>
|
||||
|
|
@ -521,7 +530,13 @@
|
|||
<string name="set_default">קביעה כברירת מחדל</string>
|
||||
<string name="test_passed">עבר</string>
|
||||
<string name="pref_category_bypass">מעקף ספק אינטרנט</string>
|
||||
<string name="quality_profile_help">כאן ניתן לשנות את סדר המקורות. אם לוידיאו יש עדיפות גבוהה יותר, הוא יופיע גבוה יותר בבחירת המקור. סכום עדיפות המקור ועדיפות האיכות היא עדיפות הוידיאו. \n \nמקור א: 3 \nאיכות ב: 7 \nיגרמו לעדיפות הסרטון להיות 10. \n \nשימו לב: אם הסכום הוא 10 או יותר, הנגן ידלג על טעינת הסרטון כאשר הלינק נטען!</string>
|
||||
<string name="quality_profile_help">כאן ניתן לשנות את סדר המקורות. אם לוידיאו יש עדיפות גבוהה יותר, הוא יופיע גבוה יותר בבחירת המקור. סכום עדיפות המקור ועדיפות האיכות היא עדיפות הוידיאו.
|
||||
\n
|
||||
\nמקור א: 3
|
||||
\nאיכות ב: 7
|
||||
\nיגרמו לעדיפות הסרטון להיות 10.
|
||||
\n
|
||||
\nשימו לב: אם הסכום הוא 10 או יותר, הנגן ידלג על טעינת הסרטון כאשר הלינק נטען!</string>
|
||||
<string name="next_season_episode_format" formatted="true">עונה %1$d פרק %2$d תשודר ב:</string>
|
||||
<string name="download_time_left_hour_min_sec_format" formatted="true">%1$d שעות %2$d דקות %3$d שניות</string>
|
||||
<string name="download_time_left_min_sec_format" formatted="true">%1$d דקות %2$d שניות</string>
|
||||
|
|
|
|||
|
|
@ -62,7 +62,8 @@
|
|||
<string name="loading">ローディング…</string>
|
||||
<string name="result_open_in_browser">ブラウザで開く</string>
|
||||
<string name="season_short">シーズン</string>
|
||||
<string name="resume_time_left" formatted="true">残り \n%d分</string>
|
||||
<string name="resume_time_left" formatted="true">残り
|
||||
\n%d分</string>
|
||||
<string name="play_episode">再生エピソード</string>
|
||||
<string name="downloaded">ダウンロード済</string>
|
||||
<string name="pref_category_backup">バックアップ</string>
|
||||
|
|
@ -81,7 +82,8 @@
|
|||
<string name="home_next_random_img_des">次のランダム</string>
|
||||
<string name="go_back_img_des">戻り</string>
|
||||
<string name="rated_format" formatted="true">評価: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">新しいアップデートを発見! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">新しいアップデートを発見!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d分</string>
|
||||
<string name="search_hint_site" formatted="true">%sを検索…</string>
|
||||
<string name="pick_source">ソース</string>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,8 @@
|
|||
<string name="result_share">ಶೇರ್</string>
|
||||
<string name="popup_delete_file">ಫೈಲ್ ಅಳಿಸಿ</string>
|
||||
<string name="home_more_info">ಹೆಚ್ಚಿನ ಮಾಹಿತಿ</string>
|
||||
<string name="new_update_format" formatted="true">ಹೊಸ ಅಪ್ಡೇಟ್ ಬಂದಿದೆ \n%1$s-%2$s</string>
|
||||
<string name="new_update_format" formatted="true">ಹೊಸ ಅಪ್ಡೇಟ್ ಬಂದಿದೆ
|
||||
\n%1$s-%2$s</string>
|
||||
<string name="loading">ಲೋಡಿಂಗ್…</string>
|
||||
<string name="subs_download_languages">ಡೌನ್ಲೋಡ್ ಭಾಷೆಗಳನ್ನು ಮಾಡಿ</string>
|
||||
<string name="play_livestream_button">ಲೈವ್ಸ್ಟ್ರೀಮ್ ಪ್ಲೇ ಮಾಡಿ</string>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@
|
|||
<string name="preview_background_img_des">배경 미리보기</string>
|
||||
<string name="player_speed_text_format" formatted="true">속도 (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">평점: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">새로운 업데이트! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">새로운 업데이트!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d분</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="play_with_app_name">CloudStream으로 재생</string>
|
||||
|
|
@ -27,7 +28,7 @@
|
|||
<string name="result_share">공유</string>
|
||||
<string name="result_open_in_browser">브라우저로 열기</string>
|
||||
<string name="browser">브라우저</string>
|
||||
<string name="skip_loading">로딩 스킵</string>
|
||||
<string name="skip_loading">로딩 건너뛰기</string>
|
||||
<string name="loading">로딩중…</string>
|
||||
<string name="type_watching">시청</string>
|
||||
<string name="type_on_hold">보류</string>
|
||||
|
|
@ -123,7 +124,7 @@
|
|||
<string name="use_system_brightness_settings_des">어두운 오버레이 대신 앱 플레이어의 시스템 밝기를 사용합니다</string>
|
||||
<string name="episode_sync_settings">시청 진행 상황 업데이트</string>
|
||||
<string name="episode_sync_settings_des">현재 에피소드 진행 상황을 자동으로 동기화합니다</string>
|
||||
<string name="restore_settings">데이터 복원</string>
|
||||
<string name="restore_settings">백업에서 데이터 복원</string>
|
||||
<string name="backup_settings">데이터 백업</string>
|
||||
<string name="restore_failed_format" formatted="true">파일에서 데이터를 복원하지 못했습니다 %s</string>
|
||||
<string name="backup_success">저장된 데이터</string>
|
||||
|
|
@ -160,8 +161,10 @@
|
|||
<string name="year">년</string>
|
||||
<string name="rating">평점</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">%s이(가) 영구적으로 삭제됩니다 \n정말 삭제하시겠습니까?</string>
|
||||
<string name="resume_time_left" formatted="true">%d분 \n남음</string>
|
||||
<string name="delete_message" formatted="true">%s가 영구 삭제됩니다
|
||||
\n정말 삭제하시겠습니까?</string>
|
||||
<string name="resume_time_left" formatted="true">%d분
|
||||
\n남음</string>
|
||||
<string name="site">사이트</string>
|
||||
<string name="duration">시간</string>
|
||||
<string name="synopsis">개요</string>
|
||||
|
|
@ -181,7 +184,7 @@
|
|||
<string name="episode_action_play_in_format">%s로 재생</string>
|
||||
<string name="episode_action_auto_download">자동 다운로드</string>
|
||||
<string name="episode_action_download_mirror">다운로드 소스 목록</string>
|
||||
<string name="episode_action_reload_links">링크 초기화</string>
|
||||
<string name="episode_action_reload_links">링크 새로고침</string>
|
||||
<string name="episode_action_download_subtitle">자막 다운로드</string>
|
||||
<string name="show_hd">화질 라벨</string>
|
||||
<string name="show_dub">더빙 라벨</string>
|
||||
|
|
@ -192,7 +195,7 @@
|
|||
<string name="video_aspect_ratio_resize">크기 조정</string>
|
||||
<string name="video_source">소스</string>
|
||||
<string name="video_skip_op">오프닝 스킵</string>
|
||||
<string name="skip_update">다음에 업데이트</string>
|
||||
<string name="skip_update">이 업데이트 건너뛰기</string>
|
||||
<string name="watch_quality_pref">선호하는 화질 (WiFi)</string>
|
||||
<string name="watch_quality_pref_data">선호하는 화질 (모바일 데이터)</string>
|
||||
<string name="limit_title_rez">플레이어 내 표시 정보</string>
|
||||
|
|
@ -294,7 +297,11 @@
|
|||
<string name="delete_repository">저장소 삭제</string>
|
||||
<string name="setup_extensions_subtext">사용하려는 사이트 목록 다운로드</string>
|
||||
<string name="plugins_downloaded" formatted="true">다운로드됨: %d</string>
|
||||
<string name="blank_repo_message">CloudStream에는 기본적으로 설치된 사이트가 없습니다. 저장소에서 사이트를 설치해야 합니다. \n \nDiscord에 가입하거나 온라인으로 검색해 보세요.</string>
|
||||
<string name="blank_repo_message">CloudStream에는 기본적으로 설치된 사이트가 없습니다. 저장소에서 사이트를 설치해야 합니다.
|
||||
\n
|
||||
\nSky UK Limited의 무분별한 DMCA 게시 중단으로 인해 앱에서 저장소 사이트를 연결 할 수 없습니다.
|
||||
\n
|
||||
\nDiscord에 가입하거나 온라인으로 검색해 보세요.</string>
|
||||
<string name="view_public_repositories_button">커뮤니티 저장소 보기</string>
|
||||
<string name="view_public_repositories_button_short">공개 목록</string>
|
||||
<string name="uppercase_all_subtitles">자막 대문자화 표시</string>
|
||||
|
|
@ -315,7 +322,7 @@
|
|||
<string name="safe_mode_crash_info">충돌 정보 보기</string>
|
||||
<string name="extension_language">언어</string>
|
||||
<string name="subscription_episode_released">에피소드 %d 공개!</string>
|
||||
<string name="picture_in_picture">Picture-in-picture 모드</string>
|
||||
<string name="picture_in_picture">PIP 모드</string>
|
||||
<string name="player_size_settings">플레이어 크기 조정 버튼</string>
|
||||
<string name="picture_in_picture_des">미니플레이어를 통해 다른 앱 상단에서 계속 재생합니다</string>
|
||||
<string name="player_size_settings_des">레터박스 제거</string>
|
||||
|
|
@ -324,7 +331,7 @@
|
|||
<string name="restore_success">백업 파일을 성공적으로 로드하였습니다</string>
|
||||
<string name="settings_info">정보</string>
|
||||
<string name="advanced_search">고급 검색</string>
|
||||
<string name="redo_setup_process">설정 프로세스 재실행</string>
|
||||
<string name="redo_setup_process">설정 프로세스 다시 실행</string>
|
||||
<string name="apk_installer_settings">APK 인스톨러</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="source_error">소스 오류</string>
|
||||
|
|
@ -431,16 +438,16 @@
|
|||
<string name="extension_install_first">먼저 확장 프로그램을 설치하세요</string>
|
||||
<string name="app_not_found_error">앱을 찾을 수 없음</string>
|
||||
<string name="all_languages_preference">모든 언어</string>
|
||||
<string name="skip_type_format" formatted="true">%s 스킵</string>
|
||||
<string name="skip_type_format" formatted="true">건너뛰기 %s</string>
|
||||
<string name="skip_type_op">오프닝</string>
|
||||
<string name="skip_type_ed">엔딩</string>
|
||||
<string name="skip_type_mixed_ed">혼합 엔딩</string>
|
||||
<string name="skip_type_mixed_op">혼합 오프닝</string>
|
||||
<string name="skip_type_credits">크레딧</string>
|
||||
<string name="skip_type_intro">인트로</string>
|
||||
<string name="skip_type_intro">소개</string>
|
||||
<string name="clear_history">기록 삭제</string>
|
||||
<string name="history">기록</string>
|
||||
<string name="enable_skip_op_from_database_des">오프닝/엔딩 시 스킵 팝업 표시</string>
|
||||
<string name="enable_skip_op_from_database_des">오프닝/엔딩 시 건너뛰기 팝업 표시</string>
|
||||
<string name="clipboard_too_large">텍스트가 너무 많습니다. 클립보드에 저장할 수 없습니다.</string>
|
||||
<string name="action_remove_from_watched">시청에서 삭제</string>
|
||||
<string name="confirm_exit_dialog">정말 종료하시겠습니까?</string>
|
||||
|
|
@ -459,8 +466,10 @@
|
|||
<string name="sort_alphabetical_a">알파벳순 (A에서 Z)</string>
|
||||
<string name="sort_alphabetical_z">알파벳순 (Z에서 A)</string>
|
||||
<string name="open_with">다음으로 열기</string>
|
||||
<string name="empty_library_no_accounts_message">라이브러리가 비어 있습니다 :( \n라이브러리 계정으로 로그인하거나 로컬 라이브러리에 프로그램을 추가하세요.</string>
|
||||
<string name="safe_mode_file">안전 모드 파일을 찾았습니다! \n파일이 제거될 때까지 시작 시 확장 프로그램을 로드하지 않습니다.</string>
|
||||
<string name="empty_library_no_accounts_message">라이브러리가 비어 있습니다 :(
|
||||
\n라이브러리 계정으로 로그인하거나 로컬 라이브러리에 프로그램을 추가하세요.</string>
|
||||
<string name="safe_mode_file">안전 모드 파일을 찾았습니다!
|
||||
\n파일이 제거될 때까지 시작 시 확장 프로그램을 로드하지 않습니다.</string>
|
||||
<string name="hls_playlist">HLS 재생목록</string>
|
||||
<string name="player_settings_play_in_app">내부 플레이어</string>
|
||||
<string name="player_pref">선호하는 동영상 플레이어</string>
|
||||
|
|
@ -476,7 +485,7 @@
|
|||
<string name="action_open_play">@string/home_play</string>
|
||||
<string name="normal_no_plot">플롯을 찾을 수 없음</string>
|
||||
<string name="torrent_no_plot">설명을 찾을 수 없음</string>
|
||||
<string name="show_log_cat">로그캣 🐈 보기</string>
|
||||
<string name="show_log_cat">Logcat 🐈 표시</string>
|
||||
<string name="show_fillers_settings">애니메이션용 필러 에피소드 표시</string>
|
||||
<string name="test_passed">통과</string>
|
||||
<string name="resume">계속</string>
|
||||
|
|
@ -508,11 +517,11 @@
|
|||
<string name="pref_category_security">보안</string>
|
||||
<string name="pref_category_accounts">계정</string>
|
||||
<string name="no_plugins_found_error">리포지토리에서 플러그인을 찾을 수 없습니다</string>
|
||||
<string name="toast_copied">복사 완료!</string>
|
||||
<string name="toast_copied">복사됨!</string>
|
||||
<string name="repo_copy_label">레포지토리 이름 및 URL</string>
|
||||
<string name="test_extensions_summary">본 테스트는 개발자만을 대상으로 하며, 확장자의 작업을 확인하거나 거부하지 않습니다.</string>
|
||||
<string name="cs3wiki">CloudStream 위키</string>
|
||||
<string name="links_reloaded_toast">링크 초기화 완료</string>
|
||||
<string name="links_reloaded_toast">링크 새로고침 완료</string>
|
||||
<string name="backup_frequency">백업 빈도</string>
|
||||
<string name="favorites_list_name">즐겨찾기</string>
|
||||
<string name="qr_image">QR 이미지</string>
|
||||
|
|
@ -563,11 +572,17 @@
|
|||
<string name="set_default">기본값 설정</string>
|
||||
<string name="action_subscribe">구독</string>
|
||||
<string name="use">사용</string>
|
||||
<string name="duplicate_message_single" formatted="true">당신의 라이브러리에 이미 잠재적으로 중복된 항목이 존재합니다: \'%s\'. \n \n이 항목을 그래도 추가하시겠습니까, 기존 항목을 교체하시겠습니까, 아니면 작업을 취소하시겠습니까?</string>
|
||||
<string name="duplicate_message_single" formatted="true">당신의 라이브러리에 이미 잠재적으로 중복된 항목이 존재합니다: \'%s\'.
|
||||
\n
|
||||
\n이 항목을 그래도 추가하시겠습니까, 기존 항목을 교체하시겠습니까, 아니면 작업을 취소하시겠습니까?</string>
|
||||
<string name="duplicate_replace_all">전부 대체</string>
|
||||
<string name="duplicate_add">추가</string>
|
||||
<string name="favorite_removed">즐겨찾기에서 %s 제거</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">당신의 라이브러리에 잠재적으로 중복된 항목이 발견되었습니다: \n \n%s \n \n이 항목을 그래도 추가하시겠습니까, 기존 항목을 교체하시겠습니까, 아니면 작업을 취소하시겠습니까?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">당신의 라이브러리에 잠재적으로 중복된 항목이 발견되었습니다:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\n이 항목을 그래도 추가하시겠습니까, 기존 항목을 교체하시겠습니까, 아니면 작업을 취소하시겠습니까?</string>
|
||||
<string name="select_an_account">계정 선택</string>
|
||||
<string name="use_default_account">기본 계정 사용</string>
|
||||
<string name="rotate_video">회전</string>
|
||||
|
|
@ -584,7 +599,7 @@
|
|||
<string name="reset_btn">재설정</string>
|
||||
<string name="automatic_plugin_download_mode_title">플러그인 다운로드를 필터링할 모드 선택</string>
|
||||
<string name="biometric_warning">CloudStream 데이터 백업이 완료되었습니다. 드문 경우지만, 기기에 따라 앱 접속이 안 되는 오류가 발생할 수 있습니다. 만약 앱이 열리지 않는다면, 앱 데이터를 완전히 삭제(초기화)한 후 이 백업 파일로 복구해 주시기 바랍니다. 이용에 불편을 드려 대단히 죄송합니다.</string>
|
||||
<string name="device_pin_url_message">스마트폰이나 컴퓨터에서 <b>%s</b> 위의 코드를 입력하세요</string>
|
||||
<string name="device_pin_url_message">스마트폰이나 컴퓨터에서 <b>%s</b>를 방문하여 위의 코드를 입력하세요</string>
|
||||
<string name="battery_dialog_message">구독 중인 TV 쇼의 알림을 받고 다운로드를 끊김 없이 완료하려면, CloudStream의 백그라운드 실행 권한이 필요합니다. \'확인\'을 누른 후 나타나는 요청 창에서 \'허용\'을 선택해 주세요.\n\n참고로, 이 권한을 허용한다고 해서 배터리가 계속 소모되는 것은 아닙니다. 알림을 받거나 공식 확장 프로그램에서 영상을 다운로드할 때처럼 꼭 필요한 상황에서만 백그라운드 작업을 수행합니다.</string>
|
||||
<string name="quality_profile_help">여기서 소스의 순서를 변경할 수 있습니다. 비디오의 우선 순위가 높은 경우에는 소스 선택 화면에 더 높게 나타납니다. 소스 우선 순위와 품질 우선 순위의 합이 비디오 우선 순위입니다. \n \n참고 A: 3 \n품질 B: 7 \n총 비디오 우선 순위는 10입니다. \n \n참고: 합이 10 이상이면 해당 링크가 로드되면 플레이어는 자동으로 로드를 건너뜁니다!</string>
|
||||
<string name="next_season_episode_format" formatted="true">시즌 %1$d 에피소드 %2$d 공개 예정</string>
|
||||
|
|
@ -593,7 +608,8 @@
|
|||
<string name="recommendations_tooltip">추천목록 보기</string>
|
||||
<string name="speed_setting_summary">플레이어에 속도 옵션을 추가합니다</string>
|
||||
<string name="episode_upcoming_format" formatted="true">%s 후 공개 예정</string>
|
||||
<string name="resume_remaining" formatted="true">%s \n남음</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\n남음</string>
|
||||
<string name="duplicate_title">잠재적 중복 발견</string>
|
||||
<string name="enter_pin_with_name" formatted="true">%s의 PIN 입력</string>
|
||||
<string name="action_remove_from_favorites">즐겨찾기에서 제거</string>
|
||||
|
|
@ -611,10 +627,18 @@
|
|||
<string name="open_local_video">로컬 비디오 열기</string>
|
||||
<string name="delete_files">파일 삭제</string>
|
||||
<string name="delete_format" formatted="true">삭제 (%1$d | %2$s)</string>
|
||||
<string name="delete_message_multiple" formatted="true">다음 항목을 영구적으로 삭제 하시겠습니까? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">다음 에피소드를 영구적으로 삭제 하시겠습니까? %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">또한 다음 시리즈의 모든 에피소드를 영구적으로 삭제합니다: \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">다음 시리즈의 모든 에피소드를 영구적으로 삭제 하시겠습니까? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">다음 항목을 영구적으로 삭제 하시겠습니까??
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">다음 에피소드를 영구적으로 삭제 하시겠습니까? %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_section" formatted="true">또한 다음 시리즈의 모든 에피소드를 영구적으로 삭제합니다:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">다음 시리즈의 모든 에피소드를 영구적으로 삭제 하시겠습니까??
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="sort_release_date_new">공개일 (최신순)</string>
|
||||
<string name="sort_release_date_old">공개일 (오래된순)</string>
|
||||
<string name="hide_player_control_names">플레이어 내 버튼명 숨기기</string>
|
||||
|
|
@ -730,7 +754,4 @@
|
|||
<string name="action_reload">새로고침</string>
|
||||
<string name="extra_brightness_key">최대 밝기 확장 활성화</string>
|
||||
<string name="show_player_metadata_overlay">플레이어에 메타데이터 오버레이 표시</string>
|
||||
<string name="video_singular">비디오</string>
|
||||
<string name="skip_type_preview">프리뷰</string>
|
||||
<string name="player_is_live">라이브</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,8 @@
|
|||
<string name="go_forward_30">+30</string>
|
||||
<string name="download_done">Atsiuntimas baigtas</string>
|
||||
<string name="continue_watching">Tęsti žiūrėjimą</string>
|
||||
<string name="new_update_format" formatted="true">Rastas atnaujinimas! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Rastas atnaujinimas!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="subs_download_languages">Atsisiųsti kalbas</string>
|
||||
<string name="search_provider_text_providers">Ieškoti naudojant tiekėjus</string>
|
||||
<string name="go_back_img_des">Grįžti atgal</string>
|
||||
|
|
@ -87,7 +88,8 @@
|
|||
<string name="popup_resume_download">Pratęsti siuntimą</string>
|
||||
<string name="asian_drama">Azijietiškos dramos</string>
|
||||
<string name="episode">Serija</string>
|
||||
<string name="empty_library_no_accounts_message">Jūsų biblioteka tuščia :( \nPrisijunkite prie bibliotekos paskyros arba pridėkite laidas prie vietinės bibliotekos.</string>
|
||||
<string name="empty_library_no_accounts_message">Jūsų biblioteka tuščia :(
|
||||
\nPrisijunkite prie bibliotekos paskyros arba pridėkite laidas prie vietinės bibliotekos.</string>
|
||||
<string name="autoplay_next_settings_des">Pradėti sekančia seriją, kai dabartinė baigsis</string>
|
||||
<string name="subs_text_color">Teksto spalva</string>
|
||||
<string name="type_completed">Užbaigta</string>
|
||||
|
|
@ -179,7 +181,11 @@
|
|||
<string name="example_ip">127.0.0.1</string>
|
||||
<string name="batch_download_finish_format" formatted="true">Atsiųsta %1$d %2$s</string>
|
||||
<string name="skip_type_format" formatted="true">Praleisti %s</string>
|
||||
<string name="blank_repo_message">Pagal numatytuosius nustatymus „CloudStream“ neturi įdiegtų svetainių. Turite įdiegti svetaines iš saugyklų. \n \nDėl beprotiško DMCA reikalavimų, kurios atliko Sky UK Limited 🤮, negalime susieti saugyklos svetainės programoje. \n \nPrisijunkite prie mūsų Discord arba ieškokite internete.</string>
|
||||
<string name="blank_repo_message">Pagal numatytuosius nustatymus „CloudStream“ neturi įdiegtų svetainių. Turite įdiegti svetaines iš saugyklų.
|
||||
\n
|
||||
\nDėl beprotiško DMCA reikalavimų, kurios atliko Sky UK Limited 🤮, negalime susieti saugyklos svetainės programoje.
|
||||
\n
|
||||
\nPrisijunkite prie mūsų Discord arba ieškokite internete.</string>
|
||||
<string name="mobile_data">Mobilūs duomenys</string>
|
||||
<string name="example_username">šaunusPrisijungimoVardas</string>
|
||||
<string name="extension_authors">Autoriai</string>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@
|
|||
<string name="preview_background_img_des">Apskatīt background</string>
|
||||
<string name="player_speed_text_format" formatted="true">Ātrums (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Lidzīgi: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Jauns atjauninājums atrasts! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Jauns atjauninājums atrasts!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d galvenais</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="play_with_app_name">Atskaņo ar cloudstream</string>
|
||||
|
|
@ -192,8 +193,10 @@
|
|||
<string name="resume">Atsākt</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Šis pilnibā dzesīs %s \nEsat parliecināts?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \natlikušas</string>
|
||||
<string name="delete_message" formatted="true">Šis pilnibā dzesīs %s
|
||||
\nEsat parliecināts?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\natlikušas</string>
|
||||
<string name="status_completed">Pabeigts</string>
|
||||
<string name="status">Statuss</string>
|
||||
<string name="year">Gads</string>
|
||||
|
|
@ -455,7 +458,8 @@
|
|||
<string name="sort_alphabetical_z">Alfabētiskā secībā (Z līdz A)</string>
|
||||
<string name="select_library">Atlasiet Bibliotēka</string>
|
||||
<string name="open_with">Atvērt ar</string>
|
||||
<string name="empty_library_no_accounts_message">Šķiet, ka jūsu bibliotēka ir tukša :( \nPiesakieties bibliotēkas kontā vai pievienojiet pārraides savai vietējai bibliotēkai.</string>
|
||||
<string name="empty_library_no_accounts_message">Šķiet, ka jūsu bibliotēka ir tukša :(
|
||||
\nPiesakieties bibliotēkas kontā vai pievienojiet pārraides savai vietējai bibliotēkai.</string>
|
||||
<string name="revert">Atgriest</string>
|
||||
<string name="subscription_deleted">Anulēts %s abonements</string>
|
||||
<string name="subscription_episode_released">%d sērija izlaista!</string>
|
||||
|
|
|
|||
|
|
@ -126,7 +126,8 @@
|
|||
<string name="cancel">Откажи</string>
|
||||
<string name="pause">Паузирај</string>
|
||||
<string name="resume">Продолжи</string>
|
||||
<string name="delete_message">Ова трајно ќе го избрише %s \nДали си сигурен?</string>
|
||||
<string name="delete_message">Ова трајно ќе го избрише %s
|
||||
\nДали си сигурен?</string>
|
||||
<string name="status_ongoing">Во тек</string>
|
||||
<string name="status_completed">Изгледанo</string>
|
||||
<string name="status">Статус</string>
|
||||
|
|
@ -244,7 +245,7 @@
|
|||
<string name="quality_tc">TC</string>
|
||||
<string name="subscription_new">Претплатен на %s</string>
|
||||
<string name="pref_category_subtitles">Преводи</string>
|
||||
<string name="download_all_plugins_from_repo">Предупредување: CloudStream не презема никаква одговорност за користење на екстензии од трети страни и не обезбедува никаква поддршка за нив!</string>
|
||||
<string name="download_all_plugins_from_repo">Предупредување: CloudStream 3 не презема никаква одговорност за користење на екстензии од трети страни и не обезбедува никаква поддршка за нив!</string>
|
||||
<string name="backup_failed">Недостасуваат дозволи за складирање. Обиди се повторно.</string>
|
||||
<string name="sort_save">Зачувај</string>
|
||||
<string name="player_load_subtitles">Вчитај од датотека</string>
|
||||
|
|
@ -416,7 +417,8 @@
|
|||
<string name="batch_download_start_format" formatted="true">Почна да презема %1$d %2$s…</string>
|
||||
<string name="automatic_plugin_updates">Автоматски ажурирања на приклучоци</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nпреостанува</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nпреостанува</string>
|
||||
<string name="video_buffer_disk_settings">Видео кеш на дискот</string>
|
||||
<string name="network_adress_example">https://example.com/example.mp4</string>
|
||||
<string name="setup_done">Готово</string>
|
||||
|
|
@ -445,7 +447,7 @@
|
|||
<string name="backup_failed_error_format">Грешка при правење резервна копија на %s</string>
|
||||
<string name="pref_filter_search_quality">Сокриј го избраниот квалитет на видеото во резултатите од пребарувањето</string>
|
||||
<string name="apk_installer_settings_des">Некои уреди не го поддржуваат новиот инсталатор на пакети. Испробај ја легаси(старата) опција, ако ажурирањата не се инсталираат.</string>
|
||||
<string name="limit_title_rez">Прикажи информации за плеерот</string>
|
||||
<string name="limit_title_rez">Резолуција на видео плеер</string>
|
||||
<string name="video_buffer_size_settings">Големина на видео баферот</string>
|
||||
<string name="pref_category_player_layout">Распоред</string>
|
||||
<string name="pref_category_defaults">Стандардно</string>
|
||||
|
|
@ -585,7 +587,8 @@
|
|||
<string name="biometric_prompt_description">По неколку неуспешни обиди, известувањето ќе се затвори. Едноставно вклучи ја апликацијата повторно за да се обидеш повторно.</string>
|
||||
<string name="custom_media_singular">Медиуми</string>
|
||||
<string name="episode_upcoming_format" formatted="true">Претстои во %s</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nпреостанати</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nпреостанати</string>
|
||||
<string name="battery_dialog_message">За да се обезбедат непрекинати преземања и известувања за претплатените ТВ серии, CloudStream треба дозвола за работа во позадина. Со притискање на „ОК“, ќе ви биде прикажан дијалог за барање дозвола. Ве молиме, притиснете „Дозволи“.\n\nИмајте предвид дека оваа дозвола не значи дека CS3 ќе ја троши вашата батерија. Ќе работи во позадина само кога е потребно, како на пример при примање известувања или преземање видеа од официјални екстензии.</string>
|
||||
<string name="clipboard_permission_error">Грешка при пристапот до таблата со исечоци, обиди се повторно.</string>
|
||||
<string name="clipboard_unknown_error">Грешка при копирање, молам копирај го логот и контактирај ја поддршката на апликацијата.</string>
|
||||
|
|
@ -705,37 +708,4 @@
|
|||
<string name="top_center">Горе во центар</string>
|
||||
<string name="top_right">Горе на десно</string>
|
||||
<string name="play_full_series_button">Пушти ја целата серија</string>
|
||||
<string name="download_queue">Редица за преземање</string>
|
||||
<string name="queue_empty_message">Моментално нема преземања во редицата.</string>
|
||||
<string name="extra_brightness_settings">Дополнителна осветленост</string>
|
||||
<string name="extra_brightness_settings_des">Овозможи филтер за осветленост кога ќе се надмине 100% осветленост на екранот</string>
|
||||
<string name="extra_brightness_key">овозможена_дополнителна_осветленост</string>
|
||||
<string name="search_suggestions">Предлози за пребарување</string>
|
||||
<string name="search_suggestions_des">Прикажувај предлози за пребарување додека пишуваш</string>
|
||||
<string name="clear_suggestions">Исчисти предлози</string>
|
||||
<string name="show_player_metadata_overlay">Прикажи преклоп со метаподатоци на плеерот</string>
|
||||
<string name="show_cast_in_details">Прикажи панел за емитување</string>
|
||||
<string name="install_prerelease">Инсталирај предиздавачка верзија</string>
|
||||
<string name="prerelease_already_installed">Предиздавачката верзија е веќе инсталирана.</string>
|
||||
<string name="prerelease_install_failed">Неуспешна инсталација на предиздавачката верзија.</string>
|
||||
<string name="video_singular">Видео</string>
|
||||
<string name="show_episode_text">Текст на епизода</string>
|
||||
<string name="video_info">Информации за медиумот</string>
|
||||
<string name="skip_type_preview">Преглед</string>
|
||||
<string name="source_priority">Приоритет на извор</string>
|
||||
<string name="source_priority_help">Одреди како ќе се подредуваат видео изворите во плеерот</string>
|
||||
<string name="source_name">Име на изворот</string>
|
||||
<string name="download_all">Преземи сѐ</string>
|
||||
<string name="cancel_all">Откажи сѐ</string>
|
||||
<string name="download_episode_range">Дали сакате да ја преземете епизодата %s?</string>
|
||||
<string name="cancel_queue_message">Дали сакате да ги откажете сите преземања во редицата?</string>
|
||||
<plurals name="downloads_active">
|
||||
<item quantity="one">%d активно преземање</item>
|
||||
<item quantity="other">%d активни преземања</item>
|
||||
</plurals>
|
||||
<plurals name="downloads_queued">
|
||||
<item quantity="one">%d преземање во редицата</item>
|
||||
<item quantity="other">%d преземања во редицата</item>
|
||||
</plurals>
|
||||
<string name="player_is_live">Во живо</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">വേഗം (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">റേറ്റിംഗ്: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">പുതിയ അപ്ഡേറ്റ്! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">പുതിയ അപ്ഡേറ്റ്!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="app_name">ക്ലൗഡ് സ്ട്രീം</string>
|
||||
<string name="title_home">ഹോം</string>
|
||||
<string name="title_search">തിരയുക</string>
|
||||
|
|
@ -114,7 +115,8 @@
|
|||
<string name="cancel">റദ്ദാക്കുക</string>
|
||||
<string name="pause">നിർത്തുക</string>
|
||||
<string name="resume">തുടരുക</string>
|
||||
<string name="delete_message">സ്ഥിരമായി %sനെ ഡിലീറ്റ് ചെയ്യുക \nഉറപ്പാണോ?</string>
|
||||
<string name="delete_message">സ്ഥിരമായി %sനെ ഡിലീറ്റ് ചെയ്യുക
|
||||
\nഉറപ്പാണോ?</string>
|
||||
<string name="status_ongoing">തുടരുന്നു</string>
|
||||
<string name="status_completed">പൂർത്തിയായി</string>
|
||||
<string name="status">അവസ്ഥ</string>
|
||||
|
|
@ -190,7 +192,9 @@
|
|||
<string name="subs_import_text" formatted="true">%s ൽ ഫോൻ്റ്സ് വെച്ചു കൊണ്ട് ഇംപോർട്ട് ചെയ്യുക</string>
|
||||
<string name="safe_mode_description">പ്രശ്നമുണ്ടാക്കുന്ന ഒന്ന് കണ്ടെത്താൻ നിങ്ങളെ സഹായിക്കുന്നതിന് ഒരു ക്രാഷ് കാരണം എല്ലാ വിപുലീകരണങ്ങളും ഓഫാക്കി.</string>
|
||||
<string name="view_public_repositories_button_short">പൊതു പട്ടിക</string>
|
||||
<string name="blank_repo_message">CloudStream-ന് സ്ഥിരസ്ഥിതിയായി സൈറ്റുകളൊന്നും ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. നിങ്ങൾ റിപ്പോസിറ്ററികളിൽ നിന്ന് സൈറ്റുകൾ ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്. \n \nഞങ്ങളുടെ ഡിസ്കോർഡിൽ ചേരുക അല്ലെങ്കിൽ ഓൺലൈനിൽ തിരയുക.</string>
|
||||
<string name="blank_repo_message">CloudStream-ന് സ്ഥിരസ്ഥിതിയായി സൈറ്റുകളൊന്നും ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. നിങ്ങൾ റിപ്പോസിറ്ററികളിൽ നിന്ന് സൈറ്റുകൾ ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്.
|
||||
\n
|
||||
\nഞങ്ങളുടെ ഡിസ്കോർഡിൽ ചേരുക അല്ലെങ്കിൽ ഓൺലൈനിൽ തിരയുക.</string>
|
||||
<string name="sort_copy">പകർത്തുക</string>
|
||||
<string name="uppercase_all_subtitles">എല്ലാ സബ്ടൈറ്റിലുകളും വലിയക്ഷരമാക്കുക</string>
|
||||
<string name="render_error">റെൻഡറർ പിശക്</string>
|
||||
|
|
@ -257,7 +261,8 @@
|
|||
<string name="empty_library_logged_in_message">ഈ ലിസ്റ്റ് ശൂന്യമാണ്. മറ്റൊന്നിലേക്ക് മാറാൻ ശ്രമിക്കുക.</string>
|
||||
<string name="clear_history">ചരിത്രം മായ്ക്കുക</string>
|
||||
<string name="show_log_cat">ലോഗ്കാറ്റ് കാണിക്കുക 🐈</string>
|
||||
<string name="empty_library_no_accounts_message">നിങ്ങളുടെ ലൈബ്രറി ശൂന്യമാണ് :( \nഒരു ലൈബ്രറി അക്കൗണ്ടിൽ ലോഗിൻ ചെയ്യുക അല്ലെങ്കിൽ നിങ്ങളുടെ പ്രാദേശിക ലൈബ്രറിയിലേക്ക് ഷോകൾ ചേർക്കുക.</string>
|
||||
<string name="empty_library_no_accounts_message">നിങ്ങളുടെ ലൈബ്രറി ശൂന്യമാണ് :(
|
||||
\nഒരു ലൈബ്രറി അക്കൗണ്ടിൽ ലോഗിൻ ചെയ്യുക അല്ലെങ്കിൽ നിങ്ങളുടെ പ്രാദേശിക ലൈബ്രറിയിലേക്ക് ഷോകൾ ചേർക്കുക.</string>
|
||||
<string name="other_singular">വീഡിയോ</string>
|
||||
<string name="repo_copy_label">റിപ്പോസിറ്ററി നാമവും URL ഉം</string>
|
||||
<string name="toast_copied">പകർത്തി!</string>
|
||||
|
|
|
|||
|
|
@ -25,8 +25,8 @@
|
|||
<string name="next_episode_format" formatted="true">Episod %d akan disiarkan dalam</string>
|
||||
<string name="cast_format" formatted="true">Pelakon:%s</string>
|
||||
<string name="safe_mode_title">Mod Selamat Hidup</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%1$dh %2$dj %3$dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$dj %2$dm</string>
|
||||
<string name="next_episode_time_day_format" formatted="true">%1$dd %2$dh %3$dm</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$dh %2$dm</string>
|
||||
<string name="next_episode_time_min_format" formatted="true">%dm</string>
|
||||
<string name="episode_poster_img_des">Poster Episod</string>
|
||||
<string name="home_main_poster_img_des">Poster Utama</string>
|
||||
|
|
@ -56,7 +56,8 @@
|
|||
<string name="sort_close">Tutup</string>
|
||||
<string name="preview_background_img_des">Pratonton</string>
|
||||
<string name="rated_format" formatted="true">Resensi:%.1f</string>
|
||||
<string name="new_update_format" formatted="true">Kemas kini baru dijumpai! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Kemas kini baru dijumpai!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="play_from_beginning_img_des">Main dari mula</string>
|
||||
<string name="next_season_episode_format" formatted="true">Musim %1$d Episod %2$d akan dikeluarkan di</string>
|
||||
|
|
@ -485,7 +486,7 @@
|
|||
<string name="category_updates">Kemaskini dan sandaran</string>
|
||||
<string name="double_tap_to_seek_settings">Ketik dua kali untuk mencari</string>
|
||||
<string name="use_system_brightness_settings_des">Gunakan kecerahan sistem dalam pemain apl dan bukannya tindanan gelap</string>
|
||||
<string name="download_time_left_hour_min_sec_format" formatted="true">%1$dj %2$dm %3$ds</string>
|
||||
<string name="download_time_left_hour_min_sec_format" formatted="true">%1$dh %2$dm %3$ds</string>
|
||||
<string name="download_time_left_min_sec_format" formatted="true">%1$dm %2$ds</string>
|
||||
<string name="download_time_left_sec_format" formatted="true">%1$ds</string>
|
||||
<string name="speech_recognition_unavailable">Pengecaman pertuturan tidak tersedia</string>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
<string name="home_change_provider_img_des">Ibdel Il-fornitur</string>
|
||||
<string name="player_speed_text_format" formatted="true">veloċità (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Klassifikazzjoni: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Aġġornament ġdid misjub! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Aġġornament ġdid misjub!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="play_with_app_name">Ara bil-CloudStream</string>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@
|
|||
<string name="go_back_img_des">နောက်သို့</string>
|
||||
<string name="preview_background_img_des">နောက်ခံပုံရိပ်ကို အကြိုကြည့်ရန်</string>
|
||||
<string name="rated_format" formatted="true">အဆင့်: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">အပ်ဒိတ်အသစ်! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">အပ်ဒိတ်အသစ်!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">စစ်ထုတ်မှု</string>
|
||||
<string name="duration_format" formatted="true">%d မိနစ်</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
|
|
@ -110,8 +111,10 @@
|
|||
<string name="episode">အပိုင်း</string>
|
||||
<string name="episodes">အပိုင်းများ</string>
|
||||
<string name="episodes_range">%1$d-%2$d</string>
|
||||
<string name="delete_message" formatted="true">ဒါကအပြီးဖျက်ခြင်းဖြစ်ပါသည် %s \nသင်သေချာပါသလား။</string>
|
||||
<string name="resume_time_left" formatted="true">%dမိနစ် \nကျန်ရိှသည်</string>
|
||||
<string name="delete_message" formatted="true">ဒါကအပြီးဖျက်ခြင်းဖြစ်ပါသည် %s
|
||||
\nသင်သေချာပါသလား။</string>
|
||||
<string name="resume_time_left" formatted="true">%dမိနစ်
|
||||
\nကျန်ရိှသည်</string>
|
||||
<string name="status_ongoing">ထုတ်လွှင့်နေဆဲ</string>
|
||||
<string name="status_completed">ထုတ်လွှင့်မှုပြီးဆုံး</string>
|
||||
<string name="status">အခြေအနေ</string>
|
||||
|
|
@ -339,7 +342,11 @@
|
|||
<string name="apk_installer_legacy">သမားရိုးကျ</string>
|
||||
<string name="apk_installer_package_installer">ထည့်သွင်းသူ</string>
|
||||
<string name="delayed_update_notice">ထွက်ချိန်တွင် အက်ပ်ကို အပ်ဒိတ်လုပ်ပါမည်</string>
|
||||
<string name="blank_repo_message">CloudStream တွင် မူရင်းအတိုင်း ထည့်သွင်းထားသည့်ဆိုက်များ မရှိပါ။ ရီပိုစစ်ထရီများ မှ ဆိုဒ် များကို ထည့်သွင်းရန်လိုအပ်သည်။ \n \nSky UK Limited မှ ဦးနှောက်မဲ့ DMCA ကို ဖယ်ရှားလိုက်ခြင်းကြောင့် 🤮 ကျွန်ုပ်တို့သည် ရီပိုစစ်ထရီဆိုဒ်ကို အက်ပ်တွင် ချိတ်ဆက်၍မရပါ။ \n \nကျွန်ုပ်တို့၏ Discord တွင်ပါဝင်ပါ သို့မဟုတ် အွန်လိုင်းတွင်ရှာဖွေပါ။</string>
|
||||
<string name="blank_repo_message">CloudStream တွင် မူရင်းအတိုင်း ထည့်သွင်းထားသည့်ဆိုက်များ မရှိပါ။ ရီပိုစစ်ထရီများ မှ ဆိုဒ် များကို ထည့်သွင်းရန်လိုအပ်သည်။
|
||||
\n
|
||||
\nSky UK Limited မှ ဦးနှောက်မဲ့ DMCA ကို ဖယ်ရှားလိုက်ခြင်းကြောင့် 🤮 ကျွန်ုပ်တို့သည် ရီပိုစစ်ထရီဆိုဒ်ကို အက်ပ်တွင် ချိတ်ဆက်၍မရပါ။
|
||||
\n
|
||||
\nကျွန်ုပ်တို့၏ Discord တွင်ပါဝင်ပါ သို့မဟုတ် အွန်လိုင်းတွင်ရှာဖွေပါ။</string>
|
||||
<string name="view_public_repositories_button">အခြားသူများ၏ရီပိုစစ်ထရီများကိုရှာဖွေမည်</string>
|
||||
<string name="tracks">အသံများ</string>
|
||||
<string name="audio_tracks">အသံဖိုင်များ</string>
|
||||
|
|
@ -415,7 +422,8 @@
|
|||
<string name="update_notification_downloading">အက်ပ်အပ်ဒိတ်အားဒေါင်းလုဒ်လုပ်နေသည်…</string>
|
||||
<string name="update_notification_installing">အက်ပ်အပ်ဒိတ်အားသွင်းနေသည်…</string>
|
||||
<string name="sort_updated_new">အပ်ဒိတ်ဖြစ်မှု (အသစ် မှ အဟောင်း)</string>
|
||||
<string name="empty_library_no_accounts_message">သင့်လိုက်ဘရီသည် ဗလာဖြစ်နေသည် :( \nအကောင့်ဝင်ပါ သို့မဟုတ် သင့်ဖုန်းလိုက်ဘရီတွင် ကြည့်စရာများထည့်ပါ။</string>
|
||||
<string name="empty_library_no_accounts_message">သင့်လိုက်ဘရီသည် ဗလာဖြစ်နေသည် :(
|
||||
\nအကောင့်ဝင်ပါ သို့မဟုတ် သင့်ဖုန်းလိုက်ဘရီတွင် ကြည့်စရာများထည့်ပါ။</string>
|
||||
<string name="use">သုံးရန်</string>
|
||||
<string name="edit">တည်းဖြတ်ရန်</string>
|
||||
<string name="qualities">အရည်အသွေးများ</string>
|
||||
|
|
@ -508,7 +516,8 @@
|
|||
<string name="subscription_new">စာရင်းသွင်းပြီး %s</string>
|
||||
<string name="subscription_deleted">စာရင်းသွင်းမှုပယ်ဖျက်ပြီး %s</string>
|
||||
<string name="empty_library_logged_in_message">ဤစာရင်းသည် ဗလာဖြစ်နေသည်။ အခြားတစ်ခုသို့ ပြောင်းကြည့်ပါ။</string>
|
||||
<string name="safe_mode_file">Safe mode ဖိုင်ကို တွေ့ရှိခဲ့သည်။ \nဖိုင်ကိုမဖယ်ရှားမချင်း စတင်ဖွင့်စတွင် မည်သည့် extension များကိုမျှ မတင်ပါ။</string>
|
||||
<string name="safe_mode_file">Safe mode ဖိုင်ကို တွေ့ရှိခဲ့သည်။
|
||||
\nဖိုင်ကိုမဖယ်ရှားမချင်း စတင်ဖွင့်စတွင် မည်သည့် extension များကိုမျှ မတင်ပါ။</string>
|
||||
<string name="subscription_episode_released">အပိုင်းသစ် %d ထွက်ပြီ</string>
|
||||
<string name="profile_number">ပရိုဖိုင် %d</string>
|
||||
<string name="wifi">ဝိုင်ဖိုင်</string>
|
||||
|
|
@ -516,7 +525,13 @@
|
|||
<string name="set_default">ပုံသေထားရန်</string>
|
||||
<string name="profiles">ပရိုဖိုင်များ</string>
|
||||
<string name="help">အကူအညီ</string>
|
||||
<string name="quality_profile_help">ဤနေရာတွင် သင်သည် အရင်းအမြစ်များကို မည်ကဲ့သို့ အစီအစဥ်ချမည်ကို ပြောင်းလဲနိုင်သည်။ ဗီဒီယိုတစ်ခုတွင် ပိုမိုဦးစားပေးပါက ရင်းမြစ်ရွေးချယ်မှုတွင် ပိုမိုမြင့်မားလာမည်ဖြစ်သည်။ အရင်းအမြစ် ဦးစားပေးနှင့် အရည်အသွေး ဦးစားပေး၏ ပေါင်းစုသည် ဗီဒီယို ဦးစားပေးဖြစ်သည်။ \n \nအရင်းအမြစ် A: 3 \nအရည်အသွေး B: 7 \nပေါင်းစပ်ဗီဒီယို ဦးစားပေး 10 ခု ရှိပါမည်။ \n \nမှတ်ချက်- ပေါင်းလဒ်သည် 10 သို့မဟုတ် ထို့ထက်ပိုပါက ထိုလင့်ခ်ကို တင်သည့်အခါ ဗီဒီယိုဖွင့်စက်သည် အလိုအလျောက် ဒေါင်းလုဒ်ကို ကျော်သွားမည်ဖြစ်သည်</string>
|
||||
<string name="quality_profile_help">ဤနေရာတွင် သင်သည် အရင်းအမြစ်များကို မည်ကဲ့သို့ အစီအစဥ်ချမည်ကို ပြောင်းလဲနိုင်သည်။ ဗီဒီယိုတစ်ခုတွင် ပိုမိုဦးစားပေးပါက ရင်းမြစ်ရွေးချယ်မှုတွင် ပိုမိုမြင့်မားလာမည်ဖြစ်သည်။ အရင်းအမြစ် ဦးစားပေးနှင့် အရည်အသွေး ဦးစားပေး၏ ပေါင်းစုသည် ဗီဒီယို ဦးစားပေးဖြစ်သည်။
|
||||
\n
|
||||
\nအရင်းအမြစ် A: 3
|
||||
\nအရည်အသွေး B: 7
|
||||
\nပေါင်းစပ်ဗီဒီယို ဦးစားပေး 10 ခု ရှိပါမည်။
|
||||
\n
|
||||
\nမှတ်ချက်- ပေါင်းလဒ်သည် 10 သို့မဟုတ် ထို့ထက်ပိုပါက ထိုလင့်ခ်ကို တင်သည့်အခါ ဗီဒီယိုဖွင့်စက်သည် အလိုအလျောက် ဒေါင်းလုဒ်ကို ကျော်သွားမည်ဖြစ်သည်</string>
|
||||
<string name="profile_background_des">ပရိုဖိုင်နောက်ခံ</string>
|
||||
<string name="unable_to_inflate">UI ကို မှန်ကန်စွာ ဖန်တီး၍မရပါ၊ ၎င်းသည် အဓိက ချို့ယွင်းချက်တစ်ခုဖြစ်ပြီး ချက်ချင်းသတင်းပို့သင့်သည်။ %s</string>
|
||||
<string name="already_voted">သင်နဂိုတည်းကသတ်မှတ်ပြီး</string>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@
|
|||
<string name="home_main_poster_img_des">मुख्य पोस्टर</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%1$s Ep %2$d</string>
|
||||
<string name="cast_format" formatted="true">अभिनेता:%s</string>
|
||||
<string name="new_update_format" formatted="true">नयाँ अपडेट भेटियो! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">नयाँ अपडेट भेटियो!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">फिलर</string>
|
||||
<string name="duration_format" formatted="true">%d मिनेट</string>
|
||||
<string name="app_name">क्लाउडस्ट्रीम</string>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">Snelheid (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Beoordeeld: %.1fAls</string>
|
||||
<string name="new_update_format" formatted="true">Nieuwe update gevonden! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nieuwe update gevonden!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Filler</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
|
|
@ -181,8 +182,10 @@
|
|||
<string name="resume">Hervatten</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Dit wordt zeker permanent verwijderd %s \nWeet u het zeker?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nremaining</string>
|
||||
<string name="delete_message" formatted="true">Dit wordt zeker permanent verwijderd %s
|
||||
\nWeet u het zeker?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nremaining</string>
|
||||
<string name="status_ongoing">Voortdurende</string>
|
||||
<string name="status_completed">Voltooid</string>
|
||||
<string name="status">Status</string>
|
||||
|
|
@ -481,7 +484,8 @@
|
|||
<string name="action_remove_from_watched">Verwijderen uit bekeken</string>
|
||||
<string name="delayed_update_notice">App wordt bijgewerkt bij afsluiten</string>
|
||||
<string name="sort">Gesorteerd</string>
|
||||
<string name="empty_library_no_accounts_message">Je bibliotheek is leeg :( \nLog in op een bibliotheekaccount of voeg voorstellingen toe aan uw lokale bibliotheek.</string>
|
||||
<string name="empty_library_no_accounts_message">Je bibliotheek is leeg :(
|
||||
\nLog in op een bibliotheekaccount of voeg voorstellingen toe aan uw lokale bibliotheek.</string>
|
||||
<string name="plugins_disabled" formatted="true">Uitgeschakeld: %d</string>
|
||||
<string name="stop">Stop</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Niet gedownload: %d</string>
|
||||
|
|
@ -503,7 +507,8 @@
|
|||
<string name="single_plugin_disabled" formatted="true">%s ( Uitgeschakeld)</string>
|
||||
<string name="apply_on_restart">Herstart de app om veranderingen te zien.</string>
|
||||
<string name="plugins_downloaded" formatted="true">Gedownload: %d</string>
|
||||
<string name="safe_mode_file">Veilige mode bestand gevonden! \nGeen extensies laden bij het opstarten totdat het bestand is verwijderd.</string>
|
||||
<string name="safe_mode_file">Veilige mode bestand gevonden!
|
||||
\nGeen extensies laden bij het opstarten totdat het bestand is verwijderd.</string>
|
||||
<string name="no">Nee</string>
|
||||
<string name="sort_rating_asc">Beoordeling ( Hoog naar Laag)</string>
|
||||
<string name="safe_mode_title">Veilige mode aan</string>
|
||||
|
|
@ -515,7 +520,11 @@
|
|||
<string name="delete_repository">Wis repository</string>
|
||||
<string name="subscription_deleted">Uitgeschreven bij %s</string>
|
||||
<string name="revert">Terugkeren</string>
|
||||
<string name="blank_repo_message">CloudStream heeft standaard geen sites geïnstalleerd. U moet de sites uit repositories installeren. \n \nVanwege een hersenloze DMCA verwijdering door Sky UK Limited 🤮 kunnen we de repository site niet linken in de app. \n \nWord lid van onze Discord of zoek online.</string>
|
||||
<string name="blank_repo_message">CloudStream heeft standaard geen sites geïnstalleerd. U moet de sites uit repositories installeren.
|
||||
\n
|
||||
\nVanwege een hersenloze DMCA verwijdering door Sky UK Limited 🤮 kunnen we de repository site niet linken in de app.
|
||||
\n
|
||||
\nWord lid van onze Discord of zoek online.</string>
|
||||
<string name="audio_tracks">Audiosporen</string>
|
||||
<string name="sort_by">Gesorteerd op</string>
|
||||
<string name="wifi">Wifi</string>
|
||||
|
|
@ -527,7 +536,13 @@
|
|||
<string name="qualities">Kwaliteiten</string>
|
||||
<string name="profile_background_des">Profiel achtergrond</string>
|
||||
<string name="use">Gebruik</string>
|
||||
<string name="quality_profile_help">Hier kan je de volgorde van de bronnen veranderen. Als een video een hogere prioriteit heeft zal het hoger in de bronnenlijst staan. De som van de prioriteit van de bron en de prioriteit van de kwaliteit is de prioriteit van de video. \n \nBron A: 3 \nKwaliteit B: 7 \nHeeft een totale prioriteit van de video van 10. \n \nNOTITIE: Als de som 10 of hoger is zal de speler automatisch het laden overslaan wanneer die link is geladen!</string>
|
||||
<string name="quality_profile_help">Hier kan je de volgorde van de bronnen veranderen. Als een video een hogere prioriteit heeft zal het hoger in de bronnenlijst staan. De som van de prioriteit van de bron en de prioriteit van de kwaliteit is de prioriteit van de video.
|
||||
\n
|
||||
\nBron A: 3
|
||||
\nKwaliteit B: 7
|
||||
\nHeeft een totale prioriteit van de video van 10.
|
||||
\n
|
||||
\nNOTITIE: Als de som 10 of hoger is zal de speler automatisch het laden overslaan wanneer die link is geladen!</string>
|
||||
<string name="profile_number">Profiel %d</string>
|
||||
<string name="no_repository_found_error">Repository niet gevonden, controleer de URL en probeer een VPN</string>
|
||||
<string name="no_plugins_found_error">Geen plug-ins gevonden in de repository</string>
|
||||
|
|
@ -539,7 +554,11 @@
|
|||
<string name="favorites_list_name">Favorieten</string>
|
||||
<string name="favorite_added">%s toegevoegd aan favorieten</string>
|
||||
<string name="logged_account" formatted="true">Aangemeld als %s</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Er zijn mogelijk dubbele items gevonden in uw bibliotheek: \n \n%s \n \nWilt u dit item toch toevoegen, de bestaande vervangen of de actie annuleren?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Er zijn mogelijk dubbele items gevonden in uw bibliotheek:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nWilt u dit item toch toevoegen, de bestaande vervangen of de actie annuleren?</string>
|
||||
<string name="enter_pin_with_name" formatted="true">Voer PIN in voor %s</string>
|
||||
<string name="backup_frequency">Backupfrequentie</string>
|
||||
<string name="duplicate_title">Mogelijk Duplicaat Gevonden</string>
|
||||
|
|
@ -558,7 +577,9 @@
|
|||
<string name="action_subscribe">Abonneer</string>
|
||||
<string name="action_remove_from_favorites">Verwijder uit favorieten</string>
|
||||
<string name="select_an_account">Selecteer een Account</string>
|
||||
<string name="duplicate_message_single" formatted="true">Het lijkt erop dat er al een mogelijk duplicaat bestaat in uw bibliotheek: \'%s.\' \n \nWilt u dit item toch toevoegen, het bestaande item vervangen of de actie annuleren?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Het lijkt erop dat er al een mogelijk duplicaat bestaat in uw bibliotheek: \'%s.\'
|
||||
\n
|
||||
\nWilt u dit item toch toevoegen, het bestaande item vervangen of de actie annuleren?</string>
|
||||
<string name="enter_pin">PIN invoeren</string>
|
||||
<string name="pin">PIN</string>
|
||||
<string name="enter_current_pin">Huidige PIN invoeren</string>
|
||||
|
|
@ -661,20 +682,4 @@
|
|||
<string name="clipboard_permission_error">Fout bij toegang tot het Klembord, Probeer het opnieuw.</string>
|
||||
<string name="clipboard_unknown_error">Fout bij het kopiëren. Kopieer alsjeblieft de logcat en neem contact op met de app-ondersteuning.</string>
|
||||
<string name="dismiss">Afwijzen</string>
|
||||
<string name="video_singular">Video</string>
|
||||
<string name="skip_type_preview">Voorbeeld</string>
|
||||
<string name="source_priority">Bron Prioriteit</string>
|
||||
<string name="source_priority_help">Bepaal hoe de videobronnen worden gesorteerd in de speler</string>
|
||||
<string name="biometric_authentication_title">Ontgrendel CloudStream</string>
|
||||
<string name="biometric_setting">Versleutel met Biometrie</string>
|
||||
<string name="reset_btn">Reset</string>
|
||||
<string name="sort_release_date_new">verschijningsdatum (Nieuw naar Oud)</string>
|
||||
<string name="sort_release_date_old">verschijningsdatum (Oud naar Nieuw)</string>
|
||||
<string name="hide_player_control_names">Verberg de namen van de besturingselementen van de speler</string>
|
||||
<string name="no_subtitles_loaded">Ondertiteling nog niet geladen</string>
|
||||
<string name="backup_path_title">Back-up folder locatie</string>
|
||||
<string name="custom">Aangepast</string>
|
||||
<string name="confirm_before_exiting_title">Bevestig voor afsluiten</string>
|
||||
<string name="confirm_before_exiting_desc">Toon dialoogvenster voordat de app wordt afgesloten</string>
|
||||
<string name="subs_edge_size">Randgrote</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@
|
|||
<string name="filler" formatted="true">Fyllstoff</string>
|
||||
<string name="preview_background_img_des">Forhandsvis bakgrunnsbilete</string>
|
||||
<string name="rated_format" formatted="true">Vurdert: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Ny oppdatering tilgjengeleg! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Ny oppdatering tilgjengeleg!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration_format" formatted="true">%d minutt</string>
|
||||
<string name="result_poster_img_des">Miniatyrbilete</string>
|
||||
<string name="next_episode_format" formatted="true">Episode %d vil bli sleppt om</string>
|
||||
|
|
@ -114,8 +115,10 @@
|
|||
<string name="resume">Gjenoppta</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Dette vil slette %s permanent. \nEr du sikker på dette?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \ngjenstår</string>
|
||||
<string name="delete_message" formatted="true">Dette vil slette %s permanent.
|
||||
\nEr du sikker på dette?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\ngjenstår</string>
|
||||
<string name="status_ongoing">Pågåande</string>
|
||||
<string name="status_completed">Fullført</string>
|
||||
<string name="year">År</string>
|
||||
|
|
@ -188,14 +191,4 @@
|
|||
<string name="picture_in_picture">Bilde i bilde</string>
|
||||
<string name="continue_watching">Fortsett å sjå</string>
|
||||
<string name="reload_error">Prøv tilkopling på nytt…</string>
|
||||
<string name="next_season_episode_format" formatted="true">Sesong %1$d Episode %2$d blir sleppt om</string>
|
||||
<string name="play_from_beginning_img_des">Spel av frå start</string>
|
||||
<string name="download_queue">Nedlastingskø</string>
|
||||
<string name="speech_recognition_unavailable">Semmegjenkjenning er ikkje tilgjengeleg</string>
|
||||
<string name="begin_speaking">Snakk no…</string>
|
||||
<string name="browser">Nettlesar</string>
|
||||
<string name="type_dropped">Fjerna</string>
|
||||
<string name="play_torrent_button">Strøm Torrent</string>
|
||||
<string name="play_full_series_button">Spel heile serien</string>
|
||||
<string name="torrent_info">Denne filmen er ein Torrent, som betyr at bruken din kan bli spora\nSett deg inn i bruk av Torrent-resursar før du fortsetter.</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">Avspillingshastighet (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Vurdert: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Ny oppdatering funnet! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Ny oppdatering funnet!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="title_home">Hjem</string>
|
||||
<string name="title_search">Søk</string>
|
||||
|
|
@ -134,7 +135,8 @@
|
|||
<string name="cancel">Avbryt</string>
|
||||
<string name="pause">Stopp</string>
|
||||
<string name="resume">Gjenoppta</string>
|
||||
<string name="delete_message">Dette vil slette %s \nEr du sikker?</string>
|
||||
<string name="delete_message">Dette vil slette %s
|
||||
\nEr du sikker?</string>
|
||||
<string name="status_ongoing">Pågående</string>
|
||||
<string name="status_completed">Fullført</string>
|
||||
<string name="status">Posisjon</string>
|
||||
|
|
@ -351,7 +353,8 @@
|
|||
<string name="episodes_range">%1$d-%2$d</string>
|
||||
<string name="view_public_repositories_button_short">Offentlig liste</string>
|
||||
<string name="plugin">programtillegg</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nigjen</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nigjen</string>
|
||||
<string name="limit_title_rez">Videooppløsning</string>
|
||||
<string name="subtitle_offset">Synkroniser undertekster</string>
|
||||
<string name="subtitle_offset_title">Undertekstforsinkelse</string>
|
||||
|
|
@ -370,7 +373,11 @@
|
|||
<string name="error_invalid_url">Ugyldig nettadresse</string>
|
||||
<string name="batch_download">Knippe-nedlasting</string>
|
||||
<string name="delete_repository">Slett pakkebrønn</string>
|
||||
<string name="blank_repo_message">CloudStream har ingen sider installert som forvalg. Du må installere sidene fra pakkebrønner. \n \nSom følge av en hjernedød DMCA-forespørsel fra Sky UK Limited 🤮 kan vi ikke lenke til pakkebrønnssiden i programmet. \n \nTa del i vår Discord, eller søk på nett.</string>
|
||||
<string name="blank_repo_message">CloudStream har ingen sider installert som forvalg. Du må installere sidene fra pakkebrønner.
|
||||
\n
|
||||
\nSom følge av en hjernedød DMCA-forespørsel fra Sky UK Limited 🤮 kan vi ikke lenke til pakkebrønnssiden i programmet.
|
||||
\n
|
||||
\nTa del i vår Discord, eller søk på nett.</string>
|
||||
<string name="subtitle_offset_extra_hint_before_format">Bruk dette hvis undertekster vises %d ms for sent</string>
|
||||
<string name="plugin_loaded">Programtillegg innlastet</string>
|
||||
<string name="audio_tracks">Lydspor</string>
|
||||
|
|
@ -505,8 +512,10 @@
|
|||
<string name="pref_category_bypass">ISP-omgåelser</string>
|
||||
<string name="empty_library_logged_in_message">Denne listen er tom. Prøv å bytte til en annen.</string>
|
||||
<string name="sort">Sorter</string>
|
||||
<string name="safe_mode_file">Fant fil for trygt modus. \nLaster ikke inn noen utvidelser ved oppstart til filen er fjernet.</string>
|
||||
<string name="empty_library_no_accounts_message">Biblioteket ditt er tomt :( \nLogg inn på en bibliotekkonto eller legg til programmer i ditt lokale bibliotek.</string>
|
||||
<string name="safe_mode_file">Fant fil for trygt modus.
|
||||
\nLaster ikke inn noen utvidelser ved oppstart til filen er fjernet.</string>
|
||||
<string name="empty_library_no_accounts_message">Biblioteket ditt er tomt :(
|
||||
\nLogg inn på en bibliotekkonto eller legg til programmer i ditt lokale bibliotek.</string>
|
||||
<string name="edit">Rediger</string>
|
||||
<string name="profiles">Profiler</string>
|
||||
<string name="favorites_list_name">Favoritter</string>
|
||||
|
|
|
|||
|
|
@ -84,7 +84,8 @@
|
|||
<string name="pref_category_backup">ବ୍ୟାକଅପ୍</string>
|
||||
<string name="pref_category_android_tv">ଆଣ୍ଡ୍ରଏଡ୍ ଟିଵି</string>
|
||||
<string name="pref_category_gestures">ଅଙ୍ଗଭଙ୍ଗୀ</string>
|
||||
<string name="new_update_format" formatted="true">ନୂଆ ଅଦ୍ୟତନ ମିଳିଲା! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">ନୂଆ ଅଦ୍ୟତନ ମିଳିଲା!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="duration">ଅଵଧି</string>
|
||||
<string name="app_storage">ଆପ୍</string>
|
||||
<string name="restore_success">ବ୍ୟାକଅପ୍ ଫାଇଲ୍ ଧାରଣ ହେଲା</string>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
<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ę! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Znaleziono nową aktualizację!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Filler</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<string name="app_dub_sub_episode_text_format">%1$s Odc. %2$d</string>
|
||||
|
|
@ -176,8 +177,10 @@
|
|||
<string name="resume">Odtwórz</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Spowoduje to trwałe usunięcie %s \nCzy jesteś pewien?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \npozostało</string>
|
||||
<string name="delete_message" formatted="true">Spowoduje to trwałe usunięcie %s
|
||||
\nCzy jesteś pewien?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\npozostało</string>
|
||||
<string name="status_ongoing">Bieżący</string>
|
||||
<string name="status_completed">Zakończone</string>
|
||||
<string name="status">Status</string>
|
||||
|
|
@ -243,7 +246,7 @@
|
|||
<string name="update">Aktualizacja</string>
|
||||
<string name="watch_quality_pref">Domyślna jakość (WiFi)</string>
|
||||
<string name="limit_title">Maksymalna liczba znaków w tytule odtwarzacza</string>
|
||||
<string name="limit_title_rez">Pokaż informacje o odtwarzaczu</string>
|
||||
<string name="limit_title_rez">Pokaż informacje o odtwarzaczu</string>
|
||||
<string name="video_buffer_size_settings">Rozmiar bufora wideo</string>
|
||||
<string name="video_buffer_length_settings">Długość bufora wideo</string>
|
||||
<string name="video_buffer_disk_settings">Pamięć podręczna wideo na dysku</string>
|
||||
|
|
@ -382,7 +385,9 @@
|
|||
<string name="plugins_disabled" formatted="true">Wyłączono: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Nie pobrano: %d</string>
|
||||
<string name="plugins_updated">Zaaktualizowano %d rozszerzeń</string>
|
||||
<string name="blank_repo_message">CloudStream nie ma domyślnie zainstalowanych żadnych witryn. Musisz zainstalować witryny z repozytoriów. \n \nDołącz do naszego Discorda lub poszukaj online.</string>
|
||||
<string name="blank_repo_message">CloudStream nie ma domyślnie zainstalowanych żadnych witryn. Musisz zainstalować witryny z repozytoriów.
|
||||
\n
|
||||
\nDołącz do naszego Discorda lub poszukaj online.</string>
|
||||
<string name="view_public_repositories_button">Zobacz repozytoria społeczności</string>
|
||||
<string name="view_public_repositories_button_short">Publiczna lista</string>
|
||||
<string name="uppercase_all_subtitles">Wszystkie napisy wielką literą</string>
|
||||
|
|
@ -482,9 +487,11 @@
|
|||
<string name="sort_alphabetical_z">Alfabetycznie (od Z do A)</string>
|
||||
<string name="select_library">Wybierz bibliotekę</string>
|
||||
<string name="library">Biblioteka</string>
|
||||
<string name="empty_library_no_accounts_message">Twoja biblioteka jest pusta :( \nZaloguj się na swoje konto lub dodaj programy do swojej lokalnej biblioteki.</string>
|
||||
<string name="empty_library_no_accounts_message">Twoja biblioteka jest pusta :(
|
||||
\nZaloguj się na swoje konto lub dodaj programy do swojej lokalnej biblioteki.</string>
|
||||
<string name="empty_library_logged_in_message">Ta lista jest pusta. Spróbuj przełączyć się na inną.</string>
|
||||
<string name="safe_mode_file">Znaleziono plik trybu bezpiecznego. \nRozszerzenia nie zostaną wczytane, dopóki plik nie zostanie usunięty.</string>
|
||||
<string name="safe_mode_file">Znaleziono plik trybu bezpiecznego.
|
||||
\nRozszerzenia nie zostaną wczytane, dopóki plik nie zostanie usunięty.</string>
|
||||
<string name="android_tv_interface_on_seek_settings_summary">Używana ilość przewijania, gdy widoczny jest odtwarzacz</string>
|
||||
<string name="android_tv_interface_off_seek_settings">Ukryty odtwarzacz - ilość przewijania</string>
|
||||
<string name="pref_category_android_tv">Android TV</string>
|
||||
|
|
@ -508,7 +515,13 @@
|
|||
<string name="jsdelivr_proxy_summary">Obchodzi blokadę surowych adresów URL GitHuba za pomocą jsDelivr. Może powodować opóźnienie aktualizacji o kilka dni.</string>
|
||||
<string name="jsdelivr_enabled">Nie udało się połączyć z GitHubem. Włączono serwer pośredniczący jsDelivr…</string>
|
||||
<string name="watch_quality_pref_data">Domyślna jakość (dane mobilne)</string>
|
||||
<string name="quality_profile_help">W tym miejscu można zmienić kolejność źródeł. Jeśli wideo ma wyższy priorytet, pojawi się wyżej w wyborze źródła. Priorytet wideo jest sumą priorytetu źródła i priorytetu jakości. \n \nŹródło A: 3 \nJakość B: 7 \nŁączny priorytet wideo będzie wynosił 10. \n \nUWAGA: Jeśli suma wynosi 10 lub więcej, odtwarzacz automatycznie pominie ładowanie po załadowaniu tego łącza!</string>
|
||||
<string name="quality_profile_help">W tym miejscu można zmienić kolejność źródeł. Jeśli wideo ma wyższy priorytet, pojawi się wyżej w wyborze źródła. Priorytet wideo jest sumą priorytetu źródła i priorytetu jakości.
|
||||
\n
|
||||
\nŹródło A: 3
|
||||
\nJakość B: 7
|
||||
\nŁączny priorytet wideo będzie wynosił 10.
|
||||
\n
|
||||
\nUWAGA: Jeśli suma wynosi 10 lub więcej, odtwarzacz automatycznie pominie ładowanie po załadowaniu tego łącza!</string>
|
||||
<string name="profile_number">Profil %d</string>
|
||||
<string name="wifi">Wi-Fi</string>
|
||||
<string name="mobile_data">Dane mobilne</string>
|
||||
|
|
@ -528,7 +541,11 @@
|
|||
<string name="favorite_removed">Usunięto %s z ulubionych</string>
|
||||
<string name="favorites_list_name">Ulubione</string>
|
||||
<string name="favorite_added">Dodano %s do ulubionych</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">W swojej bibliotece znaleziono potencjalne duplikaty: \n \n%s \n \nCzy chcesz dodać ten element, zastąpić istniejące, czy anulować operację?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">W swojej bibliotece znaleziono potencjalne duplikaty:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nCzy chcesz dodać ten element, zastąpić istniejące, czy anulować operację?</string>
|
||||
<string name="enter_pin_with_name" formatted="true">Wprowadź PIN dla %s</string>
|
||||
<string name="backup_frequency">Częstotliwość tworzenia kopii zapasowych</string>
|
||||
<string name="duplicate_title">Znaleziono potencjalny duplikat</string>
|
||||
|
|
@ -545,7 +562,9 @@
|
|||
<string name="action_subscribe">Zasubskrybuj</string>
|
||||
<string name="action_remove_from_favorites">Usuń z ulubionych</string>
|
||||
<string name="select_an_account">Wybierz konto</string>
|
||||
<string name="duplicate_message_single" formatted="true">Wygląda się, że potencjalny duplikat już znajduje się w bibliotece: \'%s\'. \' \n \nCzy chciałbyś dodać ten element, zastąpić istniejący, czy anulować akcję?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Wygląda się, że potencjalny duplikat już znajduje się w bibliotece: \'%s\'. \'
|
||||
\n
|
||||
\nCzy chciałbyś dodać ten element, zastąpić istniejący, czy anulować akcję?</string>
|
||||
<string name="enter_pin">Wprowadź PIN</string>
|
||||
<string name="pin">PIN</string>
|
||||
<string name="links_reloaded_toast">Linki załadowane ponownie</string>
|
||||
|
|
@ -571,7 +590,8 @@
|
|||
<string name="biometric_setting_summary">Odblokuj aplikację za pomocą odcisku palca, identyfikatora twarzy, kodu PIN, wzoru i hasła.</string>
|
||||
<string name="biometric_warning">Kopia zapasowa Twoich danych CloudStream została teraz utworzona. Chociaż prawdopodobieństwo tego jest bardzo niskie, wszystkie urządzenia mogą zachowywać się inaczej. W rzadkich przypadkach, gdy dostęp do aplikacji zostanie zablokowany, należy całkowicie wyczyścić dane aplikacji i przywrócić je z kopii zapasowej. Bardzo nam przykro z powodu wszelkich niedogodności z tym związanych.</string>
|
||||
<string name="unfavorite">Usuń z ulubionych</string>
|
||||
<string name="resume_remaining" formatted="true">%s \npozostało</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\npozostało</string>
|
||||
<string name="favorite">Dodaj do ulubionych</string>
|
||||
<string name="repo_copy_label">Nazwa repozytorium i adres URL</string>
|
||||
<string name="clipboard_permission_error">Błąd dostępu do schowka. Spróbuj ponownie.</string>
|
||||
|
|
@ -613,11 +633,19 @@
|
|||
<string name="select_all">Zaznacz wszystkie</string>
|
||||
<string name="downloads_delete_select">Zaznacz elementy do usunięcia</string>
|
||||
<string name="deselect_all">Odznacz wszystkie</string>
|
||||
<string name="delete_message_multiple" formatted="true">Czy na pewno chcesz na stałe usunąć następujące elementy? \n \n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Usuniesz na stale wszystkie odcinki następującego serialu: \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Czy na pewno chcesz na stałe usunąć wszystkie odcinki następującego serialu? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Czy na pewno chcesz na stałe usunąć następujące elementy?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Usuniesz na stale wszystkie odcinki następującego serialu:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Czy na pewno chcesz na stałe usunąć wszystkie odcinki następującego serialu?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_files">Usuń pliki</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Czy na pewno chcesz na stałe usunąć następujące odcinki %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Czy na pewno chcesz na stałe usunąć następujące odcinki %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_format" formatted="true">Usuń (%1$d | %2$s)</string>
|
||||
<string name="preview_seekbar">Podgląd paska przewijania</string>
|
||||
<string name="preview_seekbar_desc">Włącz podgląd miniatury na pasku wyszukiwania</string>
|
||||
|
|
@ -693,7 +721,7 @@
|
|||
<string name="reload_provider">Przeładuj dostawcę</string>
|
||||
<string name="episode_action_play_mirror">Odtwarzaj inne źródło</string>"
|
||||
<string name="name">Nazwa</string>
|
||||
<string name="resolution_and_name">Rozdzielczość i nazwa</string>
|
||||
<string name="resolution_and_name">Rozdzielczość i nazwa</string>
|
||||
<string name="bottom_left">Dolne lewe</string>
|
||||
<string name="subs_subtitle_alignment">Wyrównanie napisów</string>
|
||||
<string name="bottom_center">Dolne środkowe</string>
|
||||
|
|
@ -714,16 +742,16 @@
|
|||
<string name="clear_suggestions">Wyczyść sugestie</string>
|
||||
<string name="show_cast_in_details">Pokaż panel obsady</string>
|
||||
<string name="source_name">Nazwa źródła</string>
|
||||
<string name="video_info">Informacje o multimediach</string>
|
||||
<string name="video_info">Informacje o multimediach</string>
|
||||
<string name="extra_brightness_settings">Dodatkowa jasność</string>
|
||||
<string name="extra_brightness_settings_des">Włącz filtr jasności, gdy jasność wyświetlacza przekroczy 100%</string>
|
||||
<string name="extra_brightness_key">Włączono dodatkową jasność</string>
|
||||
<string name="download_queue">Kolejka pobierania</string>
|
||||
<string name="queue_empty_message">Obecnie nie ma żadnych plików do pobrania w kolejce.</string>
|
||||
<string name="queue_empty_message">Obecnie nie ma żadnych plików do pobrania w kolejce.</string>
|
||||
<string name="download_all">Pobierz wszystkie</string>
|
||||
<string name="cancel_all">Anuluj wszystkie</string>
|
||||
<string name="download_episode_range">Czy chcesz pobrać odcinek %s?</string>
|
||||
<string name="cancel_queue_message">Czy chcesz anulować wszystkie pliki do pobrania z kolejki?</string>
|
||||
<string name="cancel_queue_message">Czy chcesz anulować wszystkie pliki do pobrania z kolejki?</string>
|
||||
<plurals name="downloads_active">
|
||||
<item quantity="one">%d aktywne pobieranie</item>
|
||||
<item quantity="few">%d aktywne pobierania</item>
|
||||
|
|
@ -731,15 +759,12 @@
|
|||
<item quantity="other">%d aktywnych pobierań</item>
|
||||
</plurals>
|
||||
<plurals name="downloads_queued">
|
||||
<item quantity="one">%d pobieranie w kolejce</item>
|
||||
<item quantity="few">%d pobierania w kolejce</item>
|
||||
<item quantity="many">%d pobierań w kolejce</item>
|
||||
<item quantity="other">%d pobierań w kolejce</item>
|
||||
<item quantity="one">%d pobieranie w kolejce</item>
|
||||
<item quantity="few">%d pobierania w kolejce</item>
|
||||
<item quantity="many">%d pobierań w kolejce</item>
|
||||
<item quantity="other">%d pobierań w kolejce</item>
|
||||
</plurals>
|
||||
<string name="source_priority">Priorytet źródła</string>
|
||||
<string name="source_priority_help">Zdecyduj, jak mają być sortowane źródła wideo w odtwarzaczu</string>
|
||||
<string name="source_priority_help">Zdecyduj, jak mają być sortowane źródła wideo w odtwarzaczu</string>
|
||||
<string name="show_player_metadata_overlay">Pokaż nakładkę metadanych odtwarzacza</string>
|
||||
<string name="video_singular">Wideo</string>
|
||||
<string name="skip_type_preview">Zapowiedź</string>
|
||||
<string name="player_is_live">Na żywo</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -180,7 +180,8 @@
|
|||
<string name="resume">Continuar</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Isso apagará %s permanentemente \nVocê tem certeza?</string>
|
||||
<string name="delete_message" formatted="true">Isso apagará %s permanentemente
|
||||
\nVocê tem certeza?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm\nrestantes</string>
|
||||
<string name="status_ongoing">Em andamento</string>
|
||||
<string name="status_completed">Concluído</string>
|
||||
|
|
@ -395,7 +396,9 @@
|
|||
<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">CloudStream não tem fontes instaladas por padrão. Você precisa instalar um site de repositórios. \n \nEntre no nosso Discord ou pesquise online.</string>
|
||||
<string name="blank_repo_message">CloudStream não tem fontes instaladas por padrão. Você precisa instalar um site de repositórios.
|
||||
\n
|
||||
\nEntre no nosso Discord ou pesquise online.</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>
|
||||
|
|
@ -438,7 +441,8 @@
|
|||
<string name="open_with">Abrir com</string>
|
||||
<string name="select_library">Selecionar Biblioteca</string>
|
||||
<string name="test_passed">Passou nos testes</string>
|
||||
<string name="empty_library_no_accounts_message">Sua biblioteca está vazia :0 \nEntre numa conta de biblioteca ou adicione Midias para sua biblioteca local.</string>
|
||||
<string name="empty_library_no_accounts_message">Sua biblioteca está vazia :0
|
||||
\nEntre numa conta de biblioteca ou adicione Midias para sua biblioteca local.</string>
|
||||
<string name="watch_quality_pref_data">Qualidade preferida de reprodução (Dados Móveis)</string>
|
||||
<string name="apk_installer_legacy">Legado</string>
|
||||
<string name="library">Biblioteca</string>
|
||||
|
|
@ -456,8 +460,15 @@
|
|||
<string name="sort_alphabetical_z">Alfabética(Z => A)</string>
|
||||
<string name="qualities">Qualidade</string>
|
||||
<string name="profile_background_des">Perfil de plano de fundo</string>
|
||||
<string name="quality_profile_help">Aqui você pode alterar como as fontes são ordenadas. Se um vídeo tiver uma prioridade mais alta, aparecerá mais alto na seleção da fonte. A soma da prioridade da fonte e da prioridade da qualidade é a prioridade do vídeo. \n \nFonte A: 3 \nQualidade B: 7 \nTerá uma prioridade de vídeo combinada de 10. \n \nNOTA: Se a soma for 10 ou mais, o Player pulará automaticamente o carregamento quando o link for carregado!</string>
|
||||
<string name="safe_mode_file">Arquivo de modo de segurança encontrado! \nNão carregar nenhuma extensão na inicialização até que o arquivo seja removido.</string>
|
||||
<string name="quality_profile_help">Aqui você pode alterar como as fontes são ordenadas. Se um vídeo tiver uma prioridade mais alta, aparecerá mais alto na seleção da fonte. A soma da prioridade da fonte e da prioridade da qualidade é a prioridade do vídeo.
|
||||
\n
|
||||
\nFonte A: 3
|
||||
\nQualidade B: 7
|
||||
\nTerá uma prioridade de vídeo combinada de 10.
|
||||
\n
|
||||
\nNOTA: Se a soma for 10 ou mais, o Player pulará automaticamente o carregamento quando o link for carregado!</string>
|
||||
<string name="safe_mode_file">Arquivo de modo de segurança encontrado!
|
||||
\nNão carregar nenhuma extensão na inicialização até que o arquivo seja removido.</string>
|
||||
<string name="subscription_new">Inscrito em %s</string>
|
||||
<string name="subscription_episode_released">Episódio %d lançado!</string>
|
||||
<string name="set_default">Selecionar padrão</string>
|
||||
|
|
@ -542,7 +553,11 @@
|
|||
<string name="duplicate_title">Duplicata em potencial encontrada</string>
|
||||
<string name="duplicate_add">Adicionar</string>
|
||||
<string name="duplicate_replace">Substituir</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Possíveis itens duplicados foram encontrados em sua biblioteca: \n \n %s \n \nGostaria de adicionar este item mesmo assim, substituir os existentes ou cancelar a ação?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Possíveis itens duplicados foram encontrados em sua biblioteca:
|
||||
\n
|
||||
\n %s
|
||||
\n
|
||||
\nGostaria de adicionar este item mesmo assim, substituir os existentes ou cancelar a ação?</string>
|
||||
<string name="enter_pin">Insira o PIN</string>
|
||||
<string name="enter_pin_with_name" formatted="true">Insira o PIN para %s</string>
|
||||
<string name="enter_current_pin">Insira o PIN atual</string>
|
||||
|
|
@ -561,7 +576,9 @@
|
|||
<string name="links_reloaded_toast">Links recarregados</string>
|
||||
<string name="backup_frequency">Frequência de backup</string>
|
||||
<string name="duplicate_replace_all">Substitua tudo</string>
|
||||
<string name="duplicate_message_single" formatted="true">Parece que já existe um item potencialmente duplicado na sua biblioteca: \'%s.\' \n \nGostaria de adicionar este item mesmo assim, substituir o existente ou cancelar a ação?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Parece que já existe um item potencialmente duplicado na sua biblioteca: \'%s.\'
|
||||
\n
|
||||
\nGostaria de adicionar este item mesmo assim, substituir o existente ou cancelar a ação?</string>
|
||||
<string name="action_subscribe">Inscrever-se</string>
|
||||
<string name="action_unsubscribe">Cancelar inscrição</string>
|
||||
<string name="use_default_account">Usar conta padrão</string>
|
||||
|
|
@ -582,7 +599,8 @@
|
|||
<string name="biometric_unsupported">A autenticação biométrica não é compatível com este dispositivo</string>
|
||||
<string name="biometric_setting_summary">Desbloquear o aplicativo com impressão digital, ID facial, PIN, padrão e senha.</string>
|
||||
<string name="biometric_prompt_description">Após algumas tentativas fracassadas, o prompt será fechado. Basta reiniciar o aplicativo para tentar novamente.</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nrestante(s)</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nrestante(s)</string>
|
||||
<string name="favorite">Favorito</string>
|
||||
<string name="unfavorite">Não favorito</string>
|
||||
<string name="toast_copied">copiado!</string>
|
||||
|
|
@ -616,7 +634,7 @@
|
|||
<string name="play_from_beginning_img_des">Reproduzir do começo</string>
|
||||
<string name="test_warning">Reprovou alguns testes</string>
|
||||
<string name="delete_plugin">Excluir plugin</string>
|
||||
<string name="downloads_empty">Atualmente não há downloads disponíveis.</string>
|
||||
<string name="downloads_empty">Você não baixou nada :/</string>
|
||||
<string name="hide_player_control_names">Ocultar os nomes dos controles do player</string>
|
||||
<string name="open_local_video">Abrir arquivo de vídeo</string>
|
||||
<string name="sort_release_date_new">Data de lançamento (do novo ao antigo)</string>
|
||||
|
|
@ -736,7 +754,7 @@
|
|||
<string name="source_name">Nome da fonte</string>
|
||||
<string name="download_all">Baixar tudo</string>
|
||||
<string name="cancel_all">Cancelar tudo</string>
|
||||
<string name="download_episode_range">Você deseja baixar o episódio%s?</string>
|
||||
<string name="download_episode_range">Você deseja baixar o episódio%s</string>
|
||||
<string name="cancel_queue_message">Você gostaria de cancelar todos os downloads da fila?</string>
|
||||
<plurals name="downloads_active">
|
||||
<item quantity="one">%ddownload ativo</item>
|
||||
|
|
@ -748,8 +766,4 @@
|
|||
<item quantity="many">%d downloads na sequência</item>
|
||||
<item quantity="other">%d downloads na sequência</item>
|
||||
</plurals>
|
||||
<string name="show_player_metadata_overlay">Mostrar sobreposição de metadados do reprodutor</string>
|
||||
<string name="video_singular">Vídeo</string>
|
||||
<string name="skip_type_preview">Visualização</string>
|
||||
<string name="player_is_live">Ao vivo</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@
|
|||
<string name="preview_background_img_des">Visualizar plano de fundo</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%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Nova atualização encontrada!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Preenchimento</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="play_with_app_name">Assistir com o CloudStream</string>
|
||||
|
|
@ -61,7 +62,7 @@
|
|||
<string name="stream">Transmitir</string>
|
||||
<string name="error_loading_links_toast">Erro a Carregar Links</string>
|
||||
<string name="download_storage_text">Armazenamento Interno</string>
|
||||
<string name="app_dubbed_text">Dub</string>
|
||||
<string name="app_dubbed_text">Dob</string>
|
||||
<string name="app_subbed_text">Leg</string>
|
||||
<string name="popup_delete_file">Eliminar Ficheiro</string>
|
||||
<string name="popup_play_file">Reproduzir Ficheiro</string>
|
||||
|
|
@ -100,7 +101,7 @@
|
|||
<string name="subs_import_text" formatted="true">Importar fontes colocando em %s</string>
|
||||
<string name="continue_watching">Continuar a Assistir</string>
|
||||
<string name="action_remove_watching">Remover</string>
|
||||
<string name="action_open_watching">Mais informações</string>
|
||||
<string name="action_open_watching">Mais info</string>
|
||||
<string name="vpn_might_be_needed">Uma VPN pode ser necessária para que este fornecedor funcione corretamente</string>
|
||||
<string name="vpn_torrent">Este fornecedor é um torrent, uma VPN é recomendada</string>
|
||||
<string name="provider_info_meta">Metadados não são oferecidos pelo site, o carregamento do vídeo irá falhar se ele não existir no site.</string>
|
||||
|
|
@ -142,7 +143,7 @@
|
|||
<string name="search">Procurar</string>
|
||||
<string name="category_account">Contas e segurança</string>
|
||||
<string name="category_updates">Atualizações e cópias de segurança</string>
|
||||
<string name="settings_info">Informações</string>
|
||||
<string name="settings_info">Info</string>
|
||||
<string name="advanced_search">Procura Avançada</string>
|
||||
<string name="advanced_search_des">Mostra resultados separados por fornecedor</string>
|
||||
<string name="show_fillers_settings">Mostrar episódios de enchimento para anime</string>
|
||||
|
|
@ -175,8 +176,10 @@
|
|||
<string name="cancel">Cancelar</string>
|
||||
<string name="pause">Pôr em Pausa</string>
|
||||
<string name="resume">Retomar</string>
|
||||
<string name="delete_message" formatted="true">Isto apagará %s permanentemente \nTem a certeza?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nem falta</string>
|
||||
<string name="delete_message" formatted="true">Isto apagará %s permanentemente
|
||||
\nTem a certeza?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nem falta</string>
|
||||
<string name="status_ongoing">Em Curso</string>
|
||||
<string name="status_completed">Concluído</string>
|
||||
<string name="status">Estado</string>
|
||||
|
|
@ -318,9 +321,9 @@
|
|||
<string name="player_load_subtitles">Carregar de arquivo</string>
|
||||
<string name="player_load_subtitles_online">Carregar da Internet</string>
|
||||
<string name="downloaded_file">Arquivo baixado</string>
|
||||
<string name="actor_main">Principal</string>
|
||||
<string name="actor_supporting">Suporte</string>
|
||||
<string name="actor_background">Plano de fundo</string>
|
||||
<string name="actor_main">Protagonista</string>
|
||||
<string name="actor_supporting">Coadjuvante</string>
|
||||
<string name="actor_background">Figurante</string>
|
||||
<string name="home_random">Aleatório</string>
|
||||
<string name="coming_soon">Em breve…</string>
|
||||
<string name="poster_image">Imagem de Poster</string>
|
||||
|
|
@ -361,7 +364,9 @@
|
|||
<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 tem sites instalados por padrão. É necessário instalar os sites a partir de repositórios. \n \nJunte-se ao nosso Discord ou pesquise online.</string>
|
||||
<string name="blank_repo_message">O CloudStream não tem sites instalados por padrão. É necessário instalar os sites a partir de repositórios.
|
||||
\n
|
||||
\nJunte-se ao nosso Discord ou pesquise online.</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>
|
||||
|
|
@ -469,8 +474,10 @@
|
|||
<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">A sua biblioteca está vazia :( \nEntre numa conta da biblioteca ou adicione espectáculos à 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="empty_library_no_accounts_message">A sua biblioteca está vazia :(
|
||||
\nEntre numa conta da biblioteca ou adicione espectáculos à 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>
|
||||
|
|
@ -515,7 +522,13 @@
|
|||
<string name="help">Ajuda</string>
|
||||
<string name="qualities">Qualidades</string>
|
||||
<string name="profile_background_des">Perfil de fundo</string>
|
||||
<string name="quality_profile_help">Aqui pode alterar a forma como as fontes são ordenadas. Se um vídeo tiver uma prioridade mais elevada, aparecerá mais alto na seleção da fonte. A soma da prioridade da fonte com a prioridade da qualidade é a prioridade do vídeo. \n \nFonte A: 3 \nQualidade B: 7 \nTerá uma prioridade de vídeo combinada de 10. \n \nNOTA: Se a soma for 10 ou mais, o leitor saltará automaticamente o carregamento quando essa ligação for carregada!</string>
|
||||
<string name="quality_profile_help">Aqui pode alterar a forma como as fontes são ordenadas. Se um vídeo tiver uma prioridade mais elevada, aparecerá mais alto na seleção da fonte. A soma da prioridade da fonte com a prioridade da qualidade é a prioridade do vídeo.
|
||||
\n
|
||||
\nFonte A: 3
|
||||
\nQualidade B: 7
|
||||
\nTerá uma prioridade de vídeo combinada de 10.
|
||||
\n
|
||||
\nNOTA: Se a soma for 10 ou mais, o leitor saltará automaticamente o carregamento quando essa ligação for carregada!</string>
|
||||
<string name="automatic_plugin_download_mode_title">Selecionar o modo para filtrar a transferência de plug-ins</string>
|
||||
<string name="unable_to_inflate">Não foi possível criar corretamente a interface do utilizador, trata-se de um GRANDE BUG e deve ser comunicado imediatamente %s</string>
|
||||
<string name="disable">Desativar</string>
|
||||
|
|
@ -523,7 +536,7 @@
|
|||
<string name="no_repository_found_error">Repositório não encontrado, verifique o URL e tente a VPN</string>
|
||||
<string name="already_voted">Você já votou</string>
|
||||
<string name="action_unsubscribe">Cancelar Inscrição</string>
|
||||
<string name="action_subscribe">Inscrever-se</string>
|
||||
<string name="action_subscribe">Subscrever</string>
|
||||
<string name="favorites_list_name">Favoritos</string>
|
||||
<string name="links_reloaded_toast">A recarregar links</string>
|
||||
<string name="backup_frequency">Frequência de Backup</string>
|
||||
|
|
@ -547,8 +560,14 @@
|
|||
<string name="select_an_account">Selecione uma conta</string>
|
||||
<string name="manage_accounts">Gerenciar contas</string>
|
||||
<string name="use_default_account">Usar conta padrão</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Potenciais itens duplicados foram encontrados na sua biblioteca: \n \n%s \n \nDeseja adicionar esse item mesmo assim, subtituir os existentes, ou cancelar a ação?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Parece que já existe um item potencialmente duplicado na sua biblioteca: \'%s.\' \n \nDeseja adicionar esse item mesmo assim, subtituir o existente, ou cancelar a ação?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Potenciais itens duplicados foram encontrados na sua biblioteca:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nDeseja adicionar esse item mesmo assim, subtituir os existentes, ou cancelar a ação?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Parece que já existe um item potencialmente duplicado na sua biblioteca: \'%s.\'
|
||||
\n
|
||||
\nDeseja adicionar esse item mesmo assim, subtituir o existente, ou cancelar a ação?</string>
|
||||
<string name="recommendations_tooltip">Mostrar recomendações</string>
|
||||
<string name="speed_setting_summary">Adiciona uma opção de velocidade no leitor</string>
|
||||
<string name="test_extensions">Testar todas as extensões</string>
|
||||
|
|
@ -565,7 +584,8 @@
|
|||
<string name="unfavorite">Desfavorito</string>
|
||||
<string name="biometric_setting">Bloqueio com biometria</string>
|
||||
<string name="toast_copied">copiado!</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nrestante</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nrestante</string>
|
||||
<string name="clipboard_permission_error">Erro ao aceder à área de transferência, tente novamente.</string>
|
||||
<string name="clipboard_unknown_error">Erro ao copiar, copie o logcat e contacte o suporte da aplicação.</string>
|
||||
<string name="biometric_authentication_title">Desbloquear o CloudStream</string>
|
||||
|
|
@ -591,7 +611,9 @@
|
|||
<string name="preview_seekbar">Pré-visualização na barra de progresso</string>
|
||||
<string name="preview_seekbar_desc">Ativar a miniatura de pré-visualização na barra de progresso</string>
|
||||
<string name="auth_locally">Autenticação Local</string>
|
||||
<string name="delete_message_series_section" formatted="true">Irá também eliminar permanentemente todos os episódios da seguinte série: \n \n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Irá também eliminar permanentemente todos os episódios da seguinte série:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_format" formatted="true">Eliminar (%1$d | %2$s)</string>
|
||||
<string name="device_pin_url_message">Visite <b>%s</b> no seu smartphone ou computador e introduza o código acima</string>
|
||||
<string name="play_from_beginning_img_des">Recomeçar</string>
|
||||
|
|
@ -604,9 +626,15 @@
|
|||
<string name="episode_upcoming_format" formatted="true">Próximo em %s</string>
|
||||
<string name="delete_files">Eliminar Ficheiros</string>
|
||||
<string name="test_warning">Aviso</string>
|
||||
<string name="delete_message_multiple" formatted="true">Tem a certeza que pretende eliminar permanentemente os seguintes items? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Tem a certeza que pretende eliminar permanentemente os seguintes episódios em %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Tem a certeza que pretende eliminar permanentemente todos os episódios da seguinte série? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Tem a certeza que pretende eliminar permanentemente os seguintes items?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Tem a certeza que pretende eliminar permanentemente os seguintes episódios em %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Tem a certeza que pretende eliminar permanentemente todos os episódios da seguinte série?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="pref_category_security">Segurança</string>
|
||||
<string name="pref_category_accounts">Contas</string>
|
||||
<string name="qr_image">QR Code</string>
|
||||
|
|
@ -686,7 +714,7 @@
|
|||
<string name="edit_profile_image_success">Imagem Atualizada com Sucesso</string>
|
||||
<string name="action_mark_watched_up_to_this_episode">Marcar como assistido o episódio</string>
|
||||
<string name="action_remove_mark_watched_up_to_this_episode">Removar marcação de assistido até esse episódio</string>
|
||||
<string name="action_reload">Recarregar</string>
|
||||
<string name="action_reload">Recarregado</string>
|
||||
<string name="reload_provider">Provedor de Recarregamento</string>
|
||||
<string name="episode_action_play_mirror">Reproduzir do servidor alternativo</string>"
|
||||
<string name="name">Nome</string>
|
||||
|
|
@ -733,8 +761,4 @@
|
|||
<item quantity="many">%d downloads na fila</item>
|
||||
<item quantity="other">%d downloads na fila</item>
|
||||
</plurals>
|
||||
<string name="show_player_metadata_overlay">Mostrar sobreposição de metadados do player</string>
|
||||
<string name="video_singular">Vídeo</string>
|
||||
<string name="skip_type_preview">Pré-visualização</string>
|
||||
<string name="player_is_live">Ao Vivo</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -185,7 +185,8 @@
|
|||
<string name="phone_layout">u ooah uo ahauao huhuu hauu h</string>
|
||||
<string name="primary_color_settings">a ou oh ouhuouhoaaha</string>
|
||||
<string name="show_fillers_settings">aaooohhouhhha hauauuu</string>
|
||||
<string name="new_update_format">aaaaaaa uuuuuu \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format">aaaaaaa uuuuuu
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="app_dub_sub_episode_text_format" formatted="true">%1$s aaou %2$d</string>
|
||||
<string name="cast_format" formatted="true">oouaaahh %s</string>
|
||||
<string name="next_episode_format" formatted="true">aaaaaaugh ouh %d uuoogahaaah ooua-h-ha</string>
|
||||
|
|
@ -227,7 +228,8 @@
|
|||
<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="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>
|
||||
|
|
@ -276,7 +278,9 @@
|
|||
<string name="home_random">aaaagg</string>
|
||||
<string name="quality_cam_rip">uug</string>
|
||||
<string name="delete_plugin">oooogg oooogg</string>
|
||||
<string name="blank_repo_message">oooohhhoogg uuh uh uuuhh aaaaggguh og ooooggg uug aagg ek aaaaggg oog aaahh aagg uuuugggooohh \n \nJoin uuh uuuuggg ag uuuuhh eeeeek</string>
|
||||
<string name="blank_repo_message">oooohhhoogg uuh uh uuuhh aaaaggguh og ooooggg uug aagg ek aaaaggg oog aaahh aagg uuuugggooohh
|
||||
\n
|
||||
\nJoin uuh uuuuggg ag uuuuhh eeeeek</string>
|
||||
<string name="audio_tracks">uuugg aaaagg</string>
|
||||
<string name="safe_mode_title">oogg uugg uh</string>
|
||||
<string name="skip_type_intro">aaagg</string>
|
||||
|
|
@ -309,7 +313,13 @@
|
|||
<string name="profile_number">ooooggg %d</string>
|
||||
<string name="edit">aahh</string>
|
||||
<string name="profiles">oooogggk</string>
|
||||
<string name="quality_profile_help">eeek aag uug uuuuhh ooh aak uuuuggg ooh uuuuhhh ug g eeeek oog h uuuuhh oooogggh ag aahh oooohh aaaagg uh oog uuuugg uuuugggog uug oog uh uuh aaaagg uuuuuukg uug aah uuuuuuk uuuuuukg ak ooh uuuhh aaaagggk \n \nSource A: 3 \nQuality B: 7 \nWill uuhh k uuuuhhhk ooogg uuuuhhhh uk 10 \n \nNOTE: ah uug oog ug 10 og oogg uug aaaahh uuhh uuuugggaaaahh oogg aaaahhh oogg uuhh aahh uh loaded!</string>
|
||||
<string name="quality_profile_help">eeek aag uug uuuuhh ooh aak uuuuggg ooh uuuuhhh ug g eeeek oog h uuuuhh oooogggh ag aahh oooohh aaaagg uh oog uuuugg uuuugggog uug oog uh uuh aaaagg uuuuuukg uug aah uuuuuuk uuuuuukg ak ooh uuuhh aaaagggk
|
||||
\n
|
||||
\nSource A: 3
|
||||
\nQuality B: 7
|
||||
\nWill uuhh k uuuuhhhk ooogg uuuuhhhh uk 10
|
||||
\n
|
||||
\nNOTE: ah uug oog ug 10 og oogg uug aaaahh uuhh uuuugggaaaahh oogg aaaahhh oogg uuhh aahh uh loaded!</string>
|
||||
<string name="favorites_list_name">uuuuhhhug</string>
|
||||
<string name="favorite_removed">%s aaaaggg uuhh aaaagggug</string>
|
||||
<string name="duplicate_add">oog</string>
|
||||
|
|
@ -478,7 +488,10 @@
|
|||
<string name="already_voted">uuh uuhh uuuuggg uuuhh</string>
|
||||
<string name="favorite_added">%s ooogg oh oooohhhog</string>
|
||||
<string name="duplicate_replace_all">aaaahhh uuh</string>
|
||||
<string name="duplicate_message_single" formatted="true">oh ooooggg oogg k uuuuuukaahh uuuugggag uuhh ooooggg oooogg ah oogg library: \'%s\' \n \n \nWould uug uugg uh aak oogg oohh anyway, oooohhh uuh oooohhhg one, oh aaaagg eek action?</string>
|
||||
<string name="duplicate_message_single" formatted="true">oh ooooggg oogg k uuuuuukaahh uuuugggag uuhh ooooggg oooogg ah oogg library: \'%s\'
|
||||
\n
|
||||
\n
|
||||
\nWould uug uugg uh aak oogg oohh anyway, oooohhh uuh oooohhhg one, oh aaaagg eek action?</string>
|
||||
<string name="enter_pin">ooogg uuh</string>
|
||||
<string name="speed_setting_summary">uuhh g ooogg oooogg oh aah uuuugg</string>
|
||||
<string name="test_extensions_summary">uugg oogg ak aaagg ooh oooohhhuug aagg uug aahh uug oooohhhg ak oooohh uuuuuuk oh uuh aaaagggag</string>
|
||||
|
|
@ -510,7 +523,8 @@
|
|||
<string name="automatic_plugin_download_mode_title">uuuugg oogg oh eeeeek eeeeeek uuuugggg</string>
|
||||
<string name="redo_setup_process">aagg uuugg uuuuggg</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nremaining</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nremaining</string>
|
||||
<string name="edit_account">aagg uuuuhhh</string>
|
||||
<string name="biometric_setting_summary">uuuuhh aag aah oogg Fingerprint, eeek ID, PIN, aaaaggg uuh aaaagggh</string>
|
||||
<string name="downloads_delete_select">eeeeek uuuhh oh aaaagg</string>
|
||||
|
|
@ -530,13 +544,21 @@
|
|||
<string name="episode_sync_settings">aaaagg aaahh aaaahhhg</string>
|
||||
<string name="backup_failed_error_format">uuuhh oooohhh uh %s</string>
|
||||
<string name="kitsu_settings">oohh uuuuggg uuhh uuugg</string>
|
||||
<string name="delete_message_series_section" formatted="true">uuh oohh oogg aaaahhhuugg uuuugg oog aaaagggh ak uuh uuuuhhhog series: \n \n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">uuh oohh oogg aaaahhhuugg uuuugg oog aaaagggh ak uuh uuuuhhhog series:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="apk_installer_settings">aak aaaagggah</string>
|
||||
<string name="delete_files">oooohh uuuhh</string>
|
||||
<string name="delete_format" formatted="true">oooogg (%1$d | %2$s)</string>
|
||||
<string name="delete_message_multiple" formatted="true">uuh uug oohh uuk aagg oh uuuuggguugg aaaahh uuh aaaagggah items? \n \n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">uug ooh aagg ooh uuuk ag aaaahhhuuhh oooohh ooh oooohhhug oooohhhh ah %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">ooh aag oogg uuh aagg ug eeeeeekoohh aaaahh aah uuuugggg uk aag oooohhhek series? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">uuh uug oohh uuk aagg oh uuuuggguugg aaaahh uuh aaaagggah items?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">uug ooh aagg ooh uuuk ag aaaahhhuuhh oooohh ooh oooohhhug oooohhhh ah %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="delete_message_series_only" formatted="true">ooh aag oogg uuh aagg ug eeeeeekoohh aaaahh aah uuuugggg uk aag oooohhhek series?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="login_format" formatted="true">%1$s %2$s</string>
|
||||
<string name="show_hd">aaaahhh uuuhh</string>
|
||||
<string name="video_disk_description">eeeeek oooohhhg ah uuk uuh aahh ug aaaaggg aaak ooh oooohhh space, aahh ug oooohhh ek</string>
|
||||
|
|
@ -590,8 +612,10 @@
|
|||
<string name="sort_updated_old">uuuuggg (Old og New)</string>
|
||||
<string name="sort_alphabetical_z">uuuuggguuuhh (Z ak A)</string>
|
||||
<string name="select_library">uuuugg uuuuggg</string>
|
||||
<string name="empty_library_no_accounts_message">uuhh eeeeeek ek uuugg :( \nLog oh ag h aaaaggg uuuuggg ah uuk ooogg ag uugg uuugg oooohhh</string>
|
||||
<string name="safe_mode_file">oohh aagg uugg found! \nNot aaaaggg aak uuuugggaag ah uuuuhhh aaaak oogg ah eeeeeek</string>
|
||||
<string name="empty_library_no_accounts_message">uuhh eeeeeek ek uuugg :(
|
||||
\nLog oh ag h aaaaggg uuuuggg ah uuk ooogg ag uugg uuugg oooohhh</string>
|
||||
<string name="safe_mode_file">oohh aagg uugg found!
|
||||
\nNot aaaaggg aak uuuugggaag ah uuuuhhh aaaak oogg ah eeeeeek</string>
|
||||
<string name="subscription_deleted">uuuuggguuugg oohh %s</string>
|
||||
<string name="subscription_episode_released">ooooggg %d released!</string>
|
||||
<string name="wifi">uugg</string>
|
||||
|
|
@ -599,7 +623,11 @@
|
|||
<string name="set_default">ooh ooooggg</string>
|
||||
<string name="profile_background_des">oooohhh uuuuhhhoog</string>
|
||||
<string name="unable_to_inflate">uh ooh oooogg ag ek oooohhh correctly, uuhh uh g ooogg aah uug aaaagg uh uuuugggk uuuuhhhaahh %s</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">uuuuggguk uuuuhhhoh uuugg aahh aaak uuugg ag oohh library: \n \n%s \n \nWould aag aagg og uuk uugg oogg anyway, aaaahhh ooh uuuugggh ones, ek uuuuhh aah action?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">uuuuggguk uuuuhhhoh uuugg aahh aaak uuugg ag oohh library:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nWould aag aagg og uuk uugg oogg anyway, aaaahhh ooh uuuugggh ones, ek uuuuhh aah action?</string>
|
||||
<string name="pin_error_incorrect">oooohhhag uug oooohh uuh eeeek</string>
|
||||
<string name="rotate_video_desc">aaaaggg h oooogg aaaaak uug uuuugg aaaaaakaagg</string>
|
||||
<string name="auto_rotate_video_desc">uuuuhh uuuuhhhuh oooogggag ag aaaahh uuuuggguugg aaagg ek aaagg aaaagggaagg</string>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
|
||||
<string name="player_speed_text_format" formatted="true">Viteză (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Evaluare: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Actualizare nouă găsită! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Actualizare nouă găsită!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Filler</string>
|
||||
<string name="duration_format" formatted="true">%d min</string>
|
||||
<!-- <string name="app_name">CloudStream</string> -->
|
||||
|
|
@ -176,8 +177,10 @@
|
|||
<string name="resume">Continuă</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Sunteți pe cale să ștergeți definitiv %s \nSunteți sigur?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nrămas</string>
|
||||
<string name="delete_message" formatted="true">Sunteți pe cale să ștergeți definitiv %s
|
||||
\nSunteți sigur?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nrămas</string>
|
||||
<string name="status_ongoing">În curs de desfășurare</string>
|
||||
<string name="status_completed">Finalizat</string>
|
||||
<string name="status">Status</string>
|
||||
|
|
@ -427,7 +430,8 @@
|
|||
<string name="pref_category_ui_features">Funcții</string>
|
||||
<string name="extension_authors">Autori</string>
|
||||
<string name="add_repository">Adaugă depozit</string>
|
||||
<string name="empty_library_no_accounts_message">Biblioteca ta este goală :( \nConectați-vă într-un cont de bibliotecă sau adăugați emisiuni la biblioteca locală.</string>
|
||||
<string name="empty_library_no_accounts_message">Biblioteca ta este goală :(
|
||||
\nConectați-vă într-un cont de bibliotecă sau adăugați emisiuni la biblioteca locală.</string>
|
||||
<string name="subtitles_remove_captions">Eliminați subtitrările închise din subtitrări</string>
|
||||
<string name="setup_extensions_subtext">Descărcați lista de site-uri pe care doriți să le utilizați</string>
|
||||
<string name="sort_rating_desc">Evaluare (Ridicat la Scăzut)</string>
|
||||
|
|
@ -467,10 +471,13 @@
|
|||
<string name="error_invalid_url">URL invalid</string>
|
||||
<string name="safe_mode_description">Toate extensiile au fost dezactivate din cauza unei defecțiuni pentru a vă ajuta să o găsiți pe cea care cauzează probleme.</string>
|
||||
<string name="update_notification_downloading">Se descarcă actualizarea aplicației…</string>
|
||||
<string name="blank_repo_message">CloudStream nu are niciun site instalat din start. Trebuie să instalați site-urile din depozite. \n \nAlăturați-vă Discord-ului nostru sau căutați online.</string>
|
||||
<string name="blank_repo_message">CloudStream nu are niciun site instalat din start. Trebuie să instalați site-urile din depozite.
|
||||
\n
|
||||
\nAlăturați-vă Discord-ului nostru sau căutați online.</string>
|
||||
<string name="batch_download_start_format" formatted="true">A început să descarce %1$d %2$s…</string>
|
||||
<string name="safe_mode_title">Mod sigur pornit</string>
|
||||
<string name="safe_mode_file">Fișier Mod Sigur găsit! \nNu încarcă nicio extensie la pornire până când fișierul nu este eliminat.</string>
|
||||
<string name="safe_mode_file">Fișier Mod Sigur găsit!
|
||||
\nNu încarcă nicio extensie la pornire până când fișierul nu este eliminat.</string>
|
||||
<string name="action_remove_from_watched">Scoateți de la urmărit</string>
|
||||
<string name="sort_updated_old">Actualizat (Vechi la Nou)</string>
|
||||
<string name="apply_on_restart">Reporniți aplicația pentru a vedea schimbările.</string>
|
||||
|
|
@ -524,7 +531,13 @@
|
|||
<string name="pref_category_app_updates">Actualizări al aplicației</string>
|
||||
<string name="pref_category_subtitles">Subtitrări</string>
|
||||
<string name="disable">Dezactivați</string>
|
||||
<string name="quality_profile_help">Aici puteți schimba modul în care sunt ordonate sursele. Dacă un videoclip are o prioritate mai mare, acesta va apărea mai sus în selecția surselor. Suma dintre prioritatea sursei și prioritatea calității reprezintă prioritatea video. \n \nSursa A: 3 \nCalitate B: 7 \nVa avea o prioritate video combinată de 10. \n \nNOTĂ: Dacă suma este 10 sau mai mare, playerul va sări automat peste încărcare atunci când este încărcat link-ul respectiv!</string>
|
||||
<string name="quality_profile_help">Aici puteți schimba modul în care sunt ordonate sursele. Dacă un videoclip are o prioritate mai mare, acesta va apărea mai sus în selecția surselor. Suma dintre prioritatea sursei și prioritatea calității reprezintă prioritatea video.
|
||||
\n
|
||||
\nSursa A: 3
|
||||
\nCalitate B: 7
|
||||
\nVa avea o prioritate video combinată de 10.
|
||||
\n
|
||||
\nNOTĂ: Dacă suma este 10 sau mai mare, playerul va sări automat peste încărcare atunci când este încărcat link-ul respectiv!</string>
|
||||
<string name="no_plugins_found_error">Nu s-a găsit plugin-uri în depozit</string>
|
||||
<string name="no_repository_found_error">Nu s-a găsit depozitul, verificați URL-ul și încercați cu un VPN</string>
|
||||
<string name="edit">Editați</string>
|
||||
|
|
@ -540,12 +553,18 @@
|
|||
<string name="unable_to_inflate">UI nu a putut fi creată corect, acesta este un BUG MAJOR și trebuie raportat imediat %s</string>
|
||||
<string name="automatic_plugin_download_mode_title">Selectați modul de filtrare a descărcării plugin-urilor</string>
|
||||
<string name="already_voted">Ați votat deja</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Elemente potențial duplicate au fost găsite în biblioteca ta: \n \n%s \n \nÎn ciuda acestui fapt, ai dori să adaugi acest alement, să le înlocuiești pe cele existente, sau să anulezi acțiunea?</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Elemente potențial duplicate au fost găsite în biblioteca ta:
|
||||
\n
|
||||
\n%s
|
||||
\n
|
||||
\nÎn ciuda acestui fapt, ai dori să adaugi acest alement, să le înlocuiești pe cele existente, sau să anulezi acțiunea?</string>
|
||||
<string name="favorite_added">%s a fost adăugat la favoriți/te</string>
|
||||
<string name="favorite_removed">%s a fost eliminat din favoriți/te</string>
|
||||
<string name="action_add_to_favorites">Adaugă la favoriți/te</string>
|
||||
<string name="action_remove_from_favorites">Elimină din favoriți/te</string>
|
||||
<string name="duplicate_message_single" formatted="true">Se pare că un element potențial duplicat deja există în biblioteca ta: \'%s.\' \n \nÎn ciuda aceasta, ai dori să adaugi acest element, să îl înlocuiești pe cel existent, sau să anulezi acțiunea?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Se pare că un element potențial duplicat deja există în biblioteca ta: \'%s.\'
|
||||
\n
|
||||
\nÎn ciuda aceasta, ai dori să adaugi acest element, să îl înlocuiești pe cel existent, sau să anulezi acțiunea?</string>
|
||||
<string name="enter_pin_with_name" formatted="true">Introduce PIN-ul pentru %s</string>
|
||||
<string name="enter_current_pin">Introduce PIN-ul actual</string>
|
||||
<string name="enter_pin">Introduce PIN-ul</string>
|
||||
|
|
@ -600,7 +619,8 @@
|
|||
<string name="reset_btn">Resetați</string>
|
||||
<string name="auto_rotate_video_desc">Activați comutarea automată a orientării ecranului pe baza orientării video</string>
|
||||
<string name="biometric_setting">Blocare cu biometrie</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nrămase</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nrămase</string>
|
||||
<string name="episode_upcoming_format" formatted="true">Următorul în %s</string>
|
||||
<string name="cs3wiki">CloudStream Wiki</string>
|
||||
<string name="next_season_episode_format" formatted="true">Sezonul %1$d Episod %2$d va fi lansat în</string>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@
|
|||
<string name="preview_background_img_des">Предпросмотр фона</string>
|
||||
<string name="player_speed_text_format" formatted="true">Скорость (%.2fx)</string>
|
||||
<string name="rated_format" formatted="true">Оценили: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">Новое обновление найдено! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Новое обновление найдено!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Заполнитель</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="action_remove_from_bookmarks">Убрать</string>
|
||||
|
|
@ -171,8 +172,10 @@
|
|||
<string name="resume">Продолжить</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="go_forward_30">+30</string>
|
||||
<string name="delete_message" formatted="true">Это будет удалено безвозвратно%s \nВы уверены?</string>
|
||||
<string name="resume_time_left" formatted="true">%d мин. \nосталось</string>
|
||||
<string name="delete_message" formatted="true">Это будет удалено безвозвратно%s
|
||||
\nВы уверены?</string>
|
||||
<string name="resume_time_left" formatted="true">%d мин.
|
||||
\nосталось</string>
|
||||
<string name="status_completed">Завершено</string>
|
||||
<string name="year">Год</string>
|
||||
<string name="rating">Рейтинг</string>
|
||||
|
|
@ -408,7 +411,9 @@
|
|||
<string name="trailer">Трейлер</string>
|
||||
<string name="single_plugin_disabled" formatted="true">%s (отключено)</string>
|
||||
<string name="next">Далее</string>
|
||||
<string name="blank_repo_message">В CloudStream по умолчанию не установлены сайты. Вам необходимо установить сайты из репозиториев. \n \nПрисоединяйтесь к нашему Discord-серверу или найдите в интернете.</string>
|
||||
<string name="blank_repo_message">В CloudStream по умолчанию не установлены сайты. Вам необходимо установить сайты из репозиториев.
|
||||
\n
|
||||
\nПрисоединяйтесь к нашему Discord-серверу или найдите в интернете.</string>
|
||||
<string name="error_invalid_data">Недопустимые данные</string>
|
||||
<string name="resolution_and_title">Разрешение и название</string>
|
||||
<string name="previous">Предыдущий</string>
|
||||
|
|
@ -521,7 +526,13 @@
|
|||
<string name="already_voted">Вы уже проголосовали</string>
|
||||
<string name="no_plugins_found_error">Никаких дополнений не обнаружено в источнике</string>
|
||||
<string name="set_default">Поставить обычный</string>
|
||||
<string name="quality_profile_help">Здесь вы можете изменить порядок расположения источников. Если видео имеет более высокий приоритет, оно будет отображаться выше в списке источников. Сумма приоритета источника и приоритета качества составляет приоритет видео. \n \nИсточник А: 3 \nКачество Б: 7 \nБудет иметь общий приоритет видео 10. \n \nПРИМЕЧАНИЕ. Если сумма равна 10 или более, плеер автоматически пропустит загрузку при загрузке этой ссылки!</string>
|
||||
<string name="quality_profile_help">Здесь вы можете изменить порядок расположения источников. Если видео имеет более высокий приоритет, оно будет отображаться выше в списке источников. Сумма приоритета источника и приоритета качества составляет приоритет видео.
|
||||
\n
|
||||
\nИсточник А: 3
|
||||
\nКачество Б: 7
|
||||
\nБудет иметь общий приоритет видео 10.
|
||||
\n
|
||||
\nПРИМЕЧАНИЕ. Если сумма равна 10 или более, плеер автоматически пропустит загрузку при загрузке этой ссылки!</string>
|
||||
<string name="links_reloaded_toast">Ссылки перезагружены</string>
|
||||
<string name="select_an_account">Выберите учётную запись</string>
|
||||
<string name="favorite_removed">%s убрано из любимых</string>
|
||||
|
|
@ -575,7 +586,8 @@
|
|||
<string name="audio_book_singular">Аудиокнига</string>
|
||||
<string name="custom_media_singular">Медиа</string>
|
||||
<string name="biometric_setting_summary">Разблокируйте приложение с помощью отпечатка пальца, Face ID, ПИН-кода, шаблона и пароля.</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nосталось</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nосталось</string>
|
||||
<string name="battery_dialog_title">Отключить оптимизацию батареи</string>
|
||||
<string name="password_pin_authentication_title">Аутентификация по паролю/ПИН-коду</string>
|
||||
<string name="biometric_unsupported">Биометрическая аутентификация на этом устройстве не поддерживается</string>
|
||||
|
|
@ -605,7 +617,9 @@
|
|||
<string name="delete_message_series_only" formatted="true">Вы уверены, что хотите навсегда удалить все серии в данном сериале? \n \n%s</string>
|
||||
<string name="downloads_delete_select">Выберите элементы для удаления</string>
|
||||
<string name="delete_format" formatted="true">Удалить (%1$d | %2$s)</string>
|
||||
<string name="delete_message_multiple" formatted="true">Вы уверены, что хотите навсегда удалить данный объект? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Вы уверены, что хотите навсегда удалить данный объект?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="device_pin_error_message">Невозможно получить ПИН-код устройства, попробуйте локальную аутентификацию</string>
|
||||
<string name="device_pin_url_message">Откройте <b>%s</b> на вашем смартфоне или компьютере и введите данный код</string>
|
||||
<string name="cs3wiki">CloudStream Вики</string>
|
||||
|
|
@ -735,8 +749,4 @@
|
|||
<string name="cancel_all">Отменить всё</string>
|
||||
<string name="download_episode_range">Вы хотите загрузить эпизод %s?</string>
|
||||
<string name="cancel_queue_message">Вы хотите отменить всё запланированные загрузки?</string>
|
||||
<string name="show_player_metadata_overlay">Показывать наложения метаданных проигрывателя</string>
|
||||
<string name="video_singular">Видео</string>
|
||||
<string name="skip_type_preview">Предпросмотр</string>
|
||||
<string name="player_is_live">Прямой эфир</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="new_update_format" formatted="true">Našla sa nová aktualizácia! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">Našla sa nová aktualizácia!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="filler" formatted="true">Výplň</string>
|
||||
<string name="next_episode_time_hour_format" formatted="true">%1$dh %2$dm</string>
|
||||
<string name="next_episode_format" formatted="true">Epizóda %d bude vydaná za</string>
|
||||
|
|
@ -331,8 +332,10 @@
|
|||
<string name="login_format" formatted="true">%1$s %2$s</string>
|
||||
<string name="legal_notice">Vylúčenie zodpovednosti</string>
|
||||
<string name="nsfw">NSFW</string>
|
||||
<string name="delete_message" formatted="true">Týmto sa natrvalo vymaže %s \nSte si istý?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nzostáva</string>
|
||||
<string name="delete_message" formatted="true">Týmto sa natrvalo vymaže %s
|
||||
\nSte si istý?</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nzostáva</string>
|
||||
<string name="status_ongoing">Prebieha</string>
|
||||
<string name="status_completed">Dokončené</string>
|
||||
<string name="emulator_layout">Rozloženie emulátora</string>
|
||||
|
|
@ -358,7 +361,9 @@
|
|||
<string name="delete_repository">Zmazať repozitár</string>
|
||||
<string name="repository_url_hint">URL adresa repozitára</string>
|
||||
<string name="view_public_repositories_button_short">Verejný zoznam</string>
|
||||
<string name="blank_repo_message">CloudStream nemá nainštalované žiadne stránky v predvolenom nastavení. Musíte nainštalovať stránky z repozitára. \n \nPripojte sa k nášmu Discord alebo vyhľadajte online.</string>
|
||||
<string name="blank_repo_message">CloudStream nemá nainštalované žiadne stránky v predvolenom nastavení. Musíte nainštalovať stránky z repozitára.
|
||||
\n
|
||||
\nPripojte sa k nášmu Discord alebo vyhľadajte online.</string>
|
||||
<string name="update_notification_failed">Nepodarilo sa nainštalovať novú verziu aplikácie</string>
|
||||
<string name="download_all_plugins_from_repo">Upozornenie: CloudStream 3 nenesie žiadnu zodpovednosť za používanie rozšírenia tretích strán a neposkytuje žiadnu podporu pre nich!</string>
|
||||
<string name="add_repository">Pridať repozitár</string>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@
|
|||
<string name="duration_format" formatted="true">%d dqq</string>
|
||||
<string name="title_home">Kadinka</string>
|
||||
<string name="rated_format" formatted="true">Qiimaysan: %.1f</string>
|
||||
<string name="new_update_format" formatted="true">App cusub baa soo baxay! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format" formatted="true">App cusub baa soo baxay!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="title_downloads">Soo dejinta</string>
|
||||
<string name="title_search">Raadi</string>
|
||||
<string name="episode_more_options_des">Dookhyo kale</string>
|
||||
|
|
@ -182,9 +183,11 @@
|
|||
<string name="delete_file">Tirtir faylka</string>
|
||||
<string name="resume">Sii wado</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="delete_message" formatted="true">Dhamaantii waa la saari doona %s \nSow ma hubtid?</string>
|
||||
<string name="delete_message" formatted="true">Dhamaantii waa la saari doona %s
|
||||
\nSow ma hubtid?</string>
|
||||
<string name="source_error">Fashil ka yimi xigashada</string>
|
||||
<string name="resume_time_left" formatted="true">%ddq \nAyaa hadhsan</string>
|
||||
<string name="resume_time_left" formatted="true">%ddq
|
||||
\nAyaa hadhsan</string>
|
||||
<string name="status_completed">Dhamaystirmay</string>
|
||||
<string name="year">Sannadka</string>
|
||||
<string name="rating">Qiimaynta</string>
|
||||
|
|
@ -424,7 +427,11 @@
|
|||
<string name="plugins_disabled" formatted="true">Xayiran: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Aan dejinayn: %d</string>
|
||||
<string name="plugins_updated" formatted="true">Waxa la cusbooneysiiyey %d sidkane</string>
|
||||
<string name="blank_repo_message">Ugu horreyn cloudstream ma laha wax websaydyo uu filimaanta kasoo xigto, waxay noqonaysaa inaad adigu rakibato reboositarradooda... \n \nSababtuna waa in mar dhexdaas ah na dacweeyeen shirkadda Sky UK Limited🤮, markaa si aan mar dambe taasi u dhicin anagu kuma rakibi karno... \n \nDiscord naga soo qabo ama internetka ka baadh.</string>
|
||||
<string name="blank_repo_message">Ugu horreyn cloudstream ma laha wax websaydyo uu filimaanta kasoo xigto, waxay noqonaysaa inaad adigu rakibato reboositarradooda...
|
||||
\n
|
||||
\nSababtuna waa in mar dhexdaas ah na dacweeyeen shirkadda Sky UK Limited🤮, markaa si aan mar dambe taasi u dhicin anagu kuma rakibi karno...
|
||||
\n
|
||||
\nDiscord naga soo qabo ama internetka ka baadh.</string>
|
||||
<string name="download_all_plugins_from_repo">Soo deji dhamaan sidkanayaasha reboositarkan?</string>
|
||||
<string name="result_poster_img_des">Boodhka</string>
|
||||
<string name="episode_poster_img_des">Boodhka xalqadda</string>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
<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! \n%1$s -> %2$s</string>
|
||||
<string name="new_update_format">Ny uppdatering hittad!
|
||||
\n%1$s -> %2$s</string>
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="title_home">Hem</string>
|
||||
<string name="title_search">Sök</string>
|
||||
|
|
@ -116,7 +117,8 @@
|
|||
<string name="delete_file">Ta bort nerladdad fil</string>
|
||||
<string name="delete">Ta bort</string>
|
||||
<string name="cancel">Avbryt</string>
|
||||
<string name="delete_message">%s kommer att raderas permanent \nÄr du helt säker?</string>
|
||||
<string name="delete_message">%s kommer att raderas permanent
|
||||
\nÄr du helt säker?</string>
|
||||
<string name="status_ongoing">Pågående</string>
|
||||
<string name="status_completed">Färdig</string>
|
||||
<string name="status">Status</string>
|
||||
|
|
@ -229,7 +231,8 @@
|
|||
<string name="episode_format" formatted="true">%1$d %2$s</string>
|
||||
<string name="season_format">%1$s %2$d%3$s</string>
|
||||
<string name="go_back_30">-30</string>
|
||||
<string name="resume_time_left" formatted="true">%dm \nåterstår</string>
|
||||
<string name="resume_time_left" formatted="true">%dm
|
||||
\nåterstår</string>
|
||||
<string name="nsfw">NSFW</string>
|
||||
<string name="ova_singular">OVA</string>
|
||||
<string name="torrent_singular">Torrent</string>
|
||||
|
|
@ -481,12 +484,16 @@
|
|||
<string name="view_public_repositories_button">Visa community databaser</string>
|
||||
<string name="skip_type_mixed_op">Blandad inledning</string>
|
||||
<string name="skip_type_format" formatted="true">Skippa %s</string>
|
||||
<string name="blank_repo_message">CloudStream har inga webbplatser installerade som standard. Du måste installera webbplatser från arkiv. \n \nGå med i vår Discord eller sök online.</string>
|
||||
<string name="blank_repo_message">CloudStream har inga webbplatser installerade som standard. Du måste installera webbplatser från arkiv.
|
||||
\n
|
||||
\nGå med i vår Discord eller sök online.</string>
|
||||
<string name="select_library">Välj bibliotek</string>
|
||||
<string name="empty_library_no_accounts_message">Ditt bibliotek är tomt :( \nLogga in på ett bibliotekskonto eller lägg till program i ditt lokala bibliotek.</string>
|
||||
<string name="empty_library_no_accounts_message">Ditt bibliotek är tomt :(
|
||||
\nLogga in på ett bibliotekskonto eller lägg till program i ditt lokala bibliotek.</string>
|
||||
<string name="enable_skip_op_from_database_des">Visa hoppa över popups för introduktion/eftertexter</string>
|
||||
<string name="action_remove_from_watched">Ta bort från sett</string>
|
||||
<string name="safe_mode_file">Fil i säkertläge hittades! \nLaddar inte några tillägg vid start tills filen har tagits bort.</string>
|
||||
<string name="safe_mode_file">Fil i säkertläge hittades!
|
||||
\nLaddar inte några tillägg vid start tills filen har tagits bort.</string>
|
||||
<string name="subscription_in_progress_notification">Uppdaterar prenumererade program</string>
|
||||
<string name="subscription_list_name">Prenumererad</string>
|
||||
<string name="action_subscribe">Prenumerera</string>
|
||||
|
|
@ -551,9 +558,21 @@
|
|||
<string name="use_default_account">Använd standard konto</string>
|
||||
<string name="pin">PIN-kod</string>
|
||||
<string name="android_tv_interface_off_seek_settings_summary">Sök mängden som används när spelaren är dold</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Det verkar som om ett potentiellt duplicerat objekt redan finns i ditt bibliotek: \n \n\'%s.\' \n \nVill du lägga till det här objektet ändå, ersätta det befintliga eller avbryta åtgärden?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Det verkar som om ett potentiellt duplicerat objekt redan finns i ditt bibliotek: \'%s.\' \n \nVill du lägga till det här objektet ändå, ersätta det befintliga eller avbryta åtgärden?</string>
|
||||
<string name="quality_profile_help">Här kan du ändra hur källorna ska sorteras, om en video har högre prioritet visas den högre upp i källvalet. Summan av källprioriteten och kvalitetsprioriteten är videoprioriteten. \n \nKälla A: 3 \nKvalitet B: 7 \nKommer att ha en kombinerad videoprioritet på 10. \n \nOBS: Om summan är 10 eller mer kommer spelaren automatiskt att hoppa över laddningen när den länken laddas!</string>
|
||||
<string name="duplicate_message_multiple" formatted="true">Det verkar som om ett potentiellt duplicerat objekt redan finns i ditt bibliotek:
|
||||
\n
|
||||
\n\'%s.\'
|
||||
\n
|
||||
\nVill du lägga till det här objektet ändå, ersätta det befintliga eller avbryta åtgärden?</string>
|
||||
<string name="duplicate_message_single" formatted="true">Det verkar som om ett potentiellt duplicerat objekt redan finns i ditt bibliotek: \'%s.\'
|
||||
\n
|
||||
\nVill du lägga till det här objektet ändå, ersätta det befintliga eller avbryta åtgärden?</string>
|
||||
<string name="quality_profile_help">Här kan du ändra hur källorna ska sorteras, om en video har högre prioritet visas den högre upp i källvalet. Summan av källprioriteten och kvalitetsprioriteten är videoprioriteten.
|
||||
\n
|
||||
\nKälla A: 3
|
||||
\nKvalitet B: 7
|
||||
\nKommer att ha en kombinerad videoprioritet på 10.
|
||||
\n
|
||||
\nOBS: Om summan är 10 eller mer kommer spelaren automatiskt att hoppa över laddningen när den länken laddas!</string>
|
||||
<string name="subscribe_tooltip">Avisering om nytt avsnitt</string>
|
||||
<string name="result_search_tooltip">Sök i andra tillägg</string>
|
||||
<string name="recommendations_tooltip">Visa rekommendationer</string>
|
||||
|
|
@ -568,7 +587,8 @@
|
|||
<string name="biometric_prompt_description">Efter några misslyckade försök stängs prompten. Starta bara om appen för att försöka igen.</string>
|
||||
<string name="favorite">Favorit</string>
|
||||
<string name="unfavorite">Ta bort från favoriter</string>
|
||||
<string name="resume_remaining" formatted="true">%s \nkvarstår</string>
|
||||
<string name="resume_remaining" formatted="true">%s
|
||||
\nkvarstår</string>
|
||||
<string name="toast_copied">kopierad!</string>
|
||||
<string name="repo_copy_label">Lagringsnamn och URL</string>
|
||||
<string name="battery_dialog_message">För att säkerställa oavbrutna nedladdningar och aviseringar för prenumererade tv-program behöver CloudStream tillstånd att köras i bakgrunden. Genom att trycka på OK kommer du få en förfrågningsdialogruta. Tryck då på \'Tillåt\'.\n\nObservera att denna behörighet inte betyder att CS3 kommer att tömma ditt batteri. Den fungerar bara i bakgrunden när det behövs, till exempel när du tar emot aviseringar eller laddar ner videor från officiella tillägg.</string>
|
||||
|
|
@ -597,7 +617,9 @@
|
|||
<string name="auth_locally">Autentisera lokalt</string>
|
||||
<string name="qr_image">QR-kodbild</string>
|
||||
<string name="device_pin_expired_message">PIN-koden har upphört att gälla!</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Är du säker på att du vill radera följande avsnitt permanent i %1$s? \n \n%2$s</string>
|
||||
<string name="delete_message_series_episodes" formatted="true">Är du säker på att du vill radera följande avsnitt permanent i %1$s?
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="preview_seekbar_desc">Aktivera förhandsgranskningsminiatyr i sökfältet</string>
|
||||
<string name="preview_seekbar">Förhandsgranskning av sökfältet</string>
|
||||
<string name="play_from_beginning_img_des">Spela från början</string>
|
||||
|
|
@ -611,9 +633,15 @@
|
|||
<string name="deselect_all">Avmarkera alla</string>
|
||||
<string name="delete_files">Radera Filer</string>
|
||||
<string name="delete_format" formatted="true">Radera (%1$d | %2$s)</string>
|
||||
<string name="delete_message_multiple" formatted="true">Är du säker på att du vill ta bort följande objekt permanent? \n \n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Du kommer också permanent att radera alla avsnitt i följande serie: \n \n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Är du säker på att du permanent vill radera alla avsnitt i följande serie? \n \n%s</string>
|
||||
<string name="delete_message_multiple" formatted="true">Är du säker på att du vill ta bort följande objekt permanent?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_section" formatted="true">Du kommer också permanent att radera alla avsnitt i följande serie:
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_message_series_only" formatted="true">Är du säker på att du permanent vill radera alla avsnitt i följande serie?
|
||||
\n
|
||||
\n%s</string>
|
||||
<string name="delete_plugin">Ta bort insticksprogram</string>
|
||||
<string name="hide_player_control_names">Dölj namnen på spelarens kontroller</string>
|
||||
<string name="device_pin_url_message">Besök <b>%s</b> på din smartphone eller dator och ange koden ovan</string>
|
||||
|
|
@ -632,7 +660,7 @@
|
|||
<string name="torrent_preferred_media">Aktivera torrent i Inställningar/Leverantörer/Föredragen media</string>
|
||||
<string name="encoding_error">Avkodningsfel</string>
|
||||
<string name="player_load_one_subtitle_online">Ladda in första möjliga</string>
|
||||
<string name="dont_show">Visa inte</string>
|
||||
<string name="dont_show">Dölj</string>
|
||||
<string name="subs_edge_size">Kantstorlek</string>
|
||||
<string name="custom">Egen</string>
|
||||
<string name="unsupported_error">Stöds ej</string>
|
||||
|
|
@ -732,7 +760,4 @@
|
|||
<string name="all_subtitles_italic">Gör alla undertexter kursivstila</string>
|
||||
<string name="background_radius">Bakgrundsradie</string>
|
||||
<string name="show_player_metadata_overlay">Visa spelarens metadata överlägg</string>
|
||||
<string name="video_singular">Video</string>
|
||||
<string name="skip_type_preview">Förhandsvisning</string>
|
||||
<string name="player_is_live">Live</string>
|
||||
</resources>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue