Merge branch 'master' of https://github.com/recloudstream/cloudstream into account-changes

# Conflicts:
#	app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountAdapter.kt
#	app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountDialog.kt
#	app/src/main/java/com/lagradost/cloudstream3/ui/account/AccountSelectActivity.kt
This commit is contained in:
Luna712 2023-11-02 20:31:30 -06:00
commit 6863cde785
24 changed files with 405 additions and 75 deletions

View file

@ -164,8 +164,8 @@ dependencies {
implementation("com.google.android.material:material:1.10.0") implementation("com.google.android.material:material:1.10.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.navigation:navigation-fragment-ktx:2.7.4") implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
implementation("androidx.navigation:navigation-ui-ktx:2.7.4") implementation("androidx.navigation:navigation-ui-ktx:2.7.5")
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")

View file

@ -54,7 +54,6 @@ class AccountAdapter(
} }
} }
is AccountListItemEditingBinding -> binding.apply { is AccountListItemEditingBinding -> binding.apply {
if (account == null) return@apply if (account == null) return@apply

View file

@ -0,0 +1,115 @@
package com.lagradost.cloudstream3.ui.account
import android.content.Context
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.TextView
import androidx.annotation.StringRes
import androidx.appcompat.app.AlertDialog
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.databinding.LockPinDialogBinding
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
object AccountDialog {
// TODO add account creation dialog to allow creating accounts directly from AccountSelectActivity
fun showPinInputDialog(
context: Context,
currentPin: String?,
editAccount: Boolean,
callback: (String?) -> Unit
) {
fun TextView.visibleWithText(@StringRes textRes: Int) {
visibility = View.VISIBLE
setText(textRes)
}
fun View.isVisible() = visibility == View.VISIBLE
val binding = LockPinDialogBinding.inflate(LayoutInflater.from(context))
val isPinSet = currentPin != null
val isNewPin = editAccount && !isPinSet
val isEditPin = editAccount && isPinSet
val titleRes = if (isEditPin) R.string.enter_current_pin else R.string.enter_pin
val dialog = AlertDialog.Builder(context, R.style.AlertDialogCustom)
.setView(binding.root)
.setTitle(titleRes)
.setNegativeButton(R.string.cancel) { _, _ ->
callback.invoke(null)
}
.setOnCancelListener {
callback.invoke(null)
}
.setOnDismissListener {
if (binding.pinEditTextError.isVisible()) {
callback.invoke(null)
}
}
.create()
var isPinValid = false
binding.pinEditText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val enteredPin = s.toString()
val isEnteredPinValid = enteredPin.length == 4
if (isEnteredPinValid) {
if (isPinSet) {
if (enteredPin != currentPin) {
binding.pinEditTextError.visibleWithText(R.string.pin_error_incorrect)
binding.pinEditText.text = null
isPinValid = false
} else {
binding.pinEditTextError.visibility = View.GONE
isPinValid = true
callback.invoke(enteredPin)
dialog.dismissSafe()
}
} else {
binding.pinEditTextError.visibility = View.GONE
isPinValid = true
}
} else if (isNewPin) {
binding.pinEditTextError.visibleWithText(R.string.pin_error_length)
isPinValid = false
}
}
override fun afterTextChanged(s: Editable?) {}
})
// Detect IME_ACTION_DONE
binding.pinEditText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE && isPinValid) {
val enteredPin = binding.pinEditText.text.toString()
callback.invoke(enteredPin)
dialog.dismissSafe()
}
true
}
// We don't want to accidentally have the dialog dismiss when clicking outside of it.
// That is what the cancel button is for.
dialog.setCanceledOnTouchOutside(false)
dialog.show()
// Auto focus on PIN input and show keyboard
binding.pinEditText.requestFocus()
binding.pinEditText.postDelayed({
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(binding.pinEditText, InputMethodManager.SHOW_IMPLICIT)
}, 200)
}
}

View file

@ -27,6 +27,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.lagradost.cloudstream3.APIHolder import com.lagradost.cloudstream3.APIHolder
@ -137,6 +138,10 @@ class LibraryFragment : Fragment() {
binding?.libraryRoot?.findViewById<TextView>(R.id.search_src_text)?.apply { binding?.libraryRoot?.findViewById<TextView>(R.id.search_src_text)?.apply {
tag = "tv_no_focus_tag" tag = "tv_no_focus_tag"
//Expand the Appbar when search bar is focused, fixing scroll up issue
setOnFocusChangeListener { _, _ ->
binding?.searchBar?.setExpanded(true)
}
} }
// Set the color for the search exit icon to the correct theme text color // Set the color for the search exit icon to the correct theme text color
@ -342,6 +347,7 @@ class LibraryFragment : Fragment() {
binding?.apply { binding?.apply {
viewpager.offscreenPageLimit = 2 viewpager.offscreenPageLimit = 2
viewpager.reduceDragSensitivity() viewpager.reduceDragSensitivity()
searchBar.setExpanded(true)
} }
val startLoading = Runnable { val startLoading = Runnable {
@ -441,6 +447,10 @@ class LibraryFragment : Fragment() {
val distance = abs(position - currentItem) val distance = abs(position - currentItem)
hideViewpager(distance) hideViewpager(distance)
} }
//Expand the appBar on tab focus
tab.view.setOnFocusChangeListener { view, b ->
binding?.searchBar?.setExpanded(true)
}
}.attach() }.attach()
} }
} }

View file

@ -1,14 +1,18 @@
package com.lagradost.cloudstream3.ui.library package com.lagradost.cloudstream3.ui.library
import android.os.Build import android.os.Build
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.doOnAttach import androidx.core.view.doOnAttach
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.OnFlingListener import androidx.recyclerview.widget.RecyclerView.OnFlingListener
import com.google.android.material.appbar.AppBarLayout
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.databinding.LibraryViewpagerPageBinding import com.lagradost.cloudstream3.databinding.LibraryViewpagerPageBinding
import com.lagradost.cloudstream3.syncproviders.SyncAPI import com.lagradost.cloudstream3.syncproviders.SyncAPI
import com.lagradost.cloudstream3.ui.search.SearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchClickCallback
import com.lagradost.cloudstream3.ui.settings.SettingsFragment
import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount
class ViewpagerAdapter( class ViewpagerAdapter(
@ -67,6 +71,17 @@ class ViewpagerAdapter(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setOnScrollChangeListener { _, _, scrollY, _, oldScrollY -> setOnScrollChangeListener { _, _, scrollY, _, oldScrollY ->
val diff = scrollY - oldScrollY val diff = scrollY - oldScrollY
//Expand the top Appbar based on scroll direction up/down, simulate phone behavior
if (SettingsFragment.isTvSettings()) {
binding.root.rootView.findViewById<AppBarLayout>(R.id.search_bar)
.apply {
if (diff <= 0)
setExpanded(true)
else
setExpanded(false)
}
}
if (diff == 0) return@setOnScrollChangeListener if (diff == 0) return@setOnScrollChangeListener
scrollCallback.invoke(diff > 0) scrollCallback.invoke(diff > 0)
@ -80,8 +95,6 @@ class ViewpagerAdapter(
} }
} }
} }
} }
} }

View file

@ -30,6 +30,7 @@ import com.lagradost.cloudstream3.syncproviders.OAuth2API
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
@ -248,6 +249,7 @@ class SettingsAccount : PreferenceFragmentCompat() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setUpToolbar(R.string.category_account) setUpToolbar(R.string.category_account)
setPaddingBottom() setPaddingBottom()
setToolBarScrollFlags()
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

View file

@ -12,10 +12,12 @@ import android.widget.ImageView
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.core.view.children import androidx.core.view.children
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.appbar.MaterialToolbar
import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.databinding.MainSettingsBinding import com.lagradost.cloudstream3.databinding.MainSettingsBinding
@ -54,7 +56,15 @@ class SettingsFragment : Fragment() {
listView?.setPadding(0, 0, 0, 100.toPx) listView?.setPadding(0, 0, 0, 100.toPx)
} }
} }
fun PreferenceFragmentCompat.setToolBarScrollFlags() {
if (isTvSettings()) {
val settingsAppbar = view?.findViewById<MaterialToolbar>(R.id.settings_toolbar)
settingsAppbar?.updateLayoutParams<AppBarLayout.LayoutParams> {
scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL
}
}
}
fun Fragment?.setUpToolbar(title: String) { fun Fragment?.setUpToolbar(title: String) {
if (this == null) return if (this == null) return
val settingsToolbar = view?.findViewById<MaterialToolbar>(R.id.settings_toolbar) ?: return val settingsToolbar = view?.findViewById<MaterialToolbar>(R.id.settings_toolbar) ?: return

View file

@ -28,6 +28,7 @@ import com.lagradost.cloudstream3.network.initClient
import com.lagradost.cloudstream3.ui.EasterEggMonke import com.lagradost.cloudstream3.ui.EasterEggMonke
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
@ -115,6 +116,7 @@ class SettingsGeneral : PreferenceFragmentCompat() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setUpToolbar(R.string.category_general) setUpToolbar(R.string.category_general)
setPaddingBottom() setPaddingBottom()
setToolBarScrollFlags()
} }
data class CustomSite( data class CustomSite(
@ -192,7 +194,6 @@ class SettingsGeneral : PreferenceFragmentCompat() {
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true
} }
fun showAdd() { fun showAdd() {
val providers = synchronized(allProviders) { allProviders.distinctBy { it.javaClass }.sortedBy { it.name } } val providers = synchronized(allProviders) { allProviders.distinctBy { it.javaClass }.sortedBy { it.name } }
activity?.showDialog( activity?.showDialog(

View file

@ -10,6 +10,7 @@ import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getFolderSize import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getFolderSize
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
import com.lagradost.cloudstream3.ui.subtitles.ChromecastSubtitlesFragment import com.lagradost.cloudstream3.ui.subtitles.ChromecastSubtitlesFragment
import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment
@ -23,6 +24,7 @@ class SettingsPlayer : PreferenceFragmentCompat() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setUpToolbar(R.string.category_player) setUpToolbar(R.string.category_player)
setPaddingBottom() setPaddingBottom()
setToolBarScrollFlags()
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
hideKeyboard() hideKeyboard()

View file

@ -13,6 +13,7 @@ import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey
import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.APIRepository
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStoreHelper
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
@ -25,6 +26,7 @@ class SettingsProviders : PreferenceFragmentCompat() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setUpToolbar(R.string.category_providers) setUpToolbar(R.string.category_providers)
setPaddingBottom() setPaddingBottom()
setToolBarScrollFlags()
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

View file

@ -11,6 +11,7 @@ import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.ui.search.SearchResultBuilder import com.lagradost.cloudstream3.ui.search.SearchResultBuilder
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.updateTv import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.updateTv
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
@ -23,6 +24,7 @@ class SettingsUI : PreferenceFragmentCompat() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setUpToolbar(R.string.category_ui) setUpToolbar(R.string.category_ui)
setPaddingBottom() setPaddingBottom()
setToolBarScrollFlags()
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

View file

@ -22,6 +22,7 @@ import com.lagradost.cloudstream3.network.initClient
import com.lagradost.cloudstream3.services.BackupWorkManager import com.lagradost.cloudstream3.services.BackupWorkManager
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setPaddingBottom
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setToolBarScrollFlags
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
import com.lagradost.cloudstream3.utils.BackupUtils import com.lagradost.cloudstream3.utils.BackupUtils
import com.lagradost.cloudstream3.utils.BackupUtils.restorePrompt import com.lagradost.cloudstream3.utils.BackupUtils.restorePrompt
@ -42,6 +43,7 @@ class SettingsUpdates : PreferenceFragmentCompat() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setUpToolbar(R.string.category_updates) setUpToolbar(R.string.category_updates)
setPaddingBottom() setPaddingBottom()
setToolBarScrollFlags()
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

View file

@ -27,7 +27,8 @@
android:id="@+id/search_status_bar_padding" android:id="@+id/search_status_bar_padding"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal"
app:layout_scrollFlags="scroll|enterAlways">
<ImageView <ImageView
android:id="@+id/provider_selector" android:id="@+id/provider_selector"
@ -108,6 +109,7 @@
</androidx.appcompat.widget.SearchView> </androidx.appcompat.widget.SearchView>
</FrameLayout> </FrameLayout>
</LinearLayout> </LinearLayout>
<com.google.android.material.tabs.TabLayout <com.google.android.material.tabs.TabLayout
android:id="@+id/library_tab_layout" android:id="@+id/library_tab_layout"
style="@style/Theme.Widget.Tabs" style="@style/Theme.Widget.Tabs"
@ -117,7 +119,7 @@
android:nextFocusDown="@id/search_result_root" android:nextFocusDown="@id/search_result_root"
android:background="?attr/primaryGrayBackground" android:background="?attr/primaryGrayBackground"
android:paddingHorizontal="5dp" android:paddingHorizontal="5dp"
app:layout_scrollFlags="noScroll" android:focusable="true"
app:tabGravity="center" app:tabGravity="center"
app:tabIndicator="@drawable/indicator_background" app:tabIndicator="@drawable/indicator_background"
app:tabIndicatorColor="?attr/white" app:tabIndicatorColor="?attr/white"
@ -182,7 +184,6 @@
tools:listitem="@layout/loading_poster_dynamic" /> tools:listitem="@layout/loading_poster_dynamic" />
</com.facebook.shimmer.ShimmerFrameLayout> </com.facebook.shimmer.ShimmerFrameLayout>
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>
<FrameLayout <FrameLayout

View file

@ -12,8 +12,8 @@
<!-- TRANSLATE, BUT DON'T FORGET FORMAT --> <!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
<string name="player_speed_text_format" formatted="true">سرعة (%.2fx)</string> <string name="player_speed_text_format" formatted="true">سرعة (%.2fx)</string>
<string name="rated_format" formatted="true">تقييم: %.1f</string> <string name="rated_format" formatted="true">تقييم: %.1f</string>
<string name="new_update_format" formatted="true">!تم العثور على تحديث جديد <string name="new_update_format" formatted="true">يوجد تحديث جديد!
\n%s -&gt; %s</string> \n%1$s -&gt; %2$s</string>
<string name="duration_format" formatted="true">%d دقيقة</string> <string name="duration_format" formatted="true">%d دقيقة</string>
<string name="app_name">CloudStream</string> <string name="app_name">CloudStream</string>
<string name="play_with_app_name">تشغيل بواسطة CloudStream</string> <string name="play_with_app_name">تشغيل بواسطة CloudStream</string>
@ -319,7 +319,7 @@
<string name="kitsu_account_settings" translatable="false">Kitsu</string> <string name="kitsu_account_settings" translatable="false">Kitsu</string>
<string name="trakt_account_settings" translatable="false">Trakt</string> <string name="trakt_account_settings" translatable="false">Trakt</string>
--> -->
<string name="login_format" formatted="true">%s %s</string> <string name="login_format" formatted="true">%1$s %2$s</string>
<string name="account">حساب</string> <string name="account">حساب</string>
<string name="logout">تسجيل الخروج</string> <string name="logout">تسجيل الخروج</string>
<string name="login">تسجيل الدخول</string> <string name="login">تسجيل الدخول</string>
@ -418,8 +418,8 @@
<string name="plugin_deleted">تم إزالة الإضافة</string> <string name="plugin_deleted">تم إزالة الإضافة</string>
<string name="plugin_load_fail" formatted="true">تعذر التحميل %s</string> <string name="plugin_load_fail" formatted="true">تعذر التحميل %s</string>
<string name="is_adult">18+</string> <string name="is_adult">18+</string>
<string name="batch_download_start_format" formatted="true">بدأ تنزيل %d %s </string> <string name="batch_download_start_format" formatted="true">بدأ تنزيل %1$d %2$s…</string>
<string name="batch_download_finish_format" formatted="true">تم التنزيل %d %s</string> <string name="batch_download_finish_format" formatted="true">تم تنزيل %1$d %2$s</string>
<string name="batch_download_nothing_to_download_format" formatted="true">جميع %s محملة بالفعل</string> <string name="batch_download_nothing_to_download_format" formatted="true">جميع %s محملة بالفعل</string>
<string name="batch_download">تحميل مكثف</string> <string name="batch_download">تحميل مكثف</string>
<string name="plugin_singular">إضافة</string> <string name="plugin_singular">إضافة</string>
@ -461,11 +461,11 @@
<string name="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="cast_format" formatted="true">طاقم العمل: %s</string> <string name="cast_format" formatted="true">طاقم العمل: %s</string>
<string name="next_episode_time_day_format" formatted="true">%d يوم %d ساعة %d دقيقة</string> <string name="next_episode_time_day_format" formatted="true">%1$d يوم %2$d ساعة %3$d دقيقة</string>
<string name="next_episode_time_hour_format" formatted="true">%d ساعة %d دقيقة</string> <string name="next_episode_time_hour_format" formatted="true">%1$d ساعة %2$d دقيقة</string>
<string name="filler" formatted="true">الفيلير</string> <string name="filler" formatted="true">الفيلير</string>
<string name="action_open_play">فتح(تشغيل)</string> <string name="action_open_play">فتح(تشغيل)</string>
<string name="season_format">%s %d%s</string> <string name="season_format">%1$s %2$d%3$s</string>
<string name="plugins_updated" formatted="true">المكونات الإضافية المحدثة %d</string> <string name="plugins_updated" formatted="true">المكونات الإضافية المحدثة %d</string>
<string name="player_settings_play_in_vlc">VLC</string> <string name="player_settings_play_in_vlc">VLC</string>
<string name="player_settings_play_in_mpv">MPV</string> <string name="player_settings_play_in_mpv">MPV</string>
@ -482,7 +482,7 @@
<string name="action_mark_as_watched">علّمه كفيديو تمت مشاهدته</string> <string name="action_mark_as_watched">علّمه كفيديو تمت مشاهدته</string>
<string name="yes">نعم</string> <string name="yes">نعم</string>
<string name="no"></string> <string name="no"></string>
<string name="app_dub_sub_episode_text_format" formatted="true">%s الحلقة %d</string> <string name="app_dub_sub_episode_text_format" formatted="true">%1$s الحلقة %2$d</string>
<string name="next_episode_format" formatted="true">سيتم إصدار الحلقة %d في</string> <string name="next_episode_format" formatted="true">سيتم إصدار الحلقة %d في</string>
<string name="update_notification_failed">تعذر تثبيت الإصدار الجديد من التطبيق</string> <string name="update_notification_failed">تعذر تثبيت الإصدار الجديد من التطبيق</string>
<string name="extension_install_first">تثبيت الإضافة أولا</string> <string name="extension_install_first">تثبيت الإضافة أولا</string>
@ -493,8 +493,8 @@
<string name="update_notification_downloading">‌تنزيل تحديث التطبيق…</string> <string name="update_notification_downloading">‌تنزيل تحديث التطبيق…</string>
<string name="update_notification_installing">‏تثبيت تحديث التطبيق…</string> <string name="update_notification_installing">‏تثبيت تحديث التطبيق…</string>
<string name="next_episode_time_min_format" formatted="true">%d دقيقة</string> <string name="next_episode_time_min_format" formatted="true">%d دقيقة</string>
<string name="episodes_range">%d-%d</string> <string name="episodes_range">%1$d-%2$d</string>
<string name="episode_format" formatted="true">%d %s</string> <string name="episode_format" formatted="true">%1$d %2$s</string>
<string name="confirm_exit_dialog">هل أنت متأكد أنك تريد الخروج؟</string> <string name="confirm_exit_dialog">هل أنت متأكد أنك تريد الخروج؟</string>
<string name="automatic_plugin_download_summary">قم بتثبيت جميع المكونات الإضافية التي لم يتم تثبيتها بعد تلقائيا من المستودعات المضافة.</string> <string name="automatic_plugin_download_summary">قم بتثبيت جميع المكونات الإضافية التي لم يتم تثبيتها بعد تلقائيا من المستودعات المضافة.</string>
<string name="apk_installer_settings">مثبت الحزم</string> <string name="apk_installer_settings">مثبت الحزم</string>
@ -584,4 +584,30 @@
<string name="no_repository_found_error">المستودع لم يتم العثور عليه، تحقق من العنوان اوجرب شبكة افتراضية خاصة(vpn)</string> <string name="no_repository_found_error">المستودع لم يتم العثور عليه، تحقق من العنوان اوجرب شبكة افتراضية خاصة(vpn)</string>
<string name="already_voted">لقد صوتت بالفعل</string> <string name="already_voted">لقد صوتت بالفعل</string>
<string name="backup_frequency">معدل النسخ الإحتياطي</string> <string name="backup_frequency">معدل النسخ الإحتياطي</string>
<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_title">احتمال أن يكون موجود بالفعل</string>
<string name="lock_profile">قفل الحساب</string>
<string name="action_add_to_favorites">اضافة الى المفضلة</string>
<string name="duplicate_replace_all">تبديل الكل</string>
<string name="pin_error_incorrect">رقم PIN غير صحيح. برجاء المحاولة مرة اخرى.</string>
<string name="action_unsubscribe">إلغاء الاشتراك</string>
<string name="pin_error_length">رقم ال PIN يجب ان يكون 4 ارقام</string>
<string name="duplicate_replace">استبدال</string>
<string name="duplicate_add">اضافة</string>
<string name="action_subscribe">إشترك</string>
<string name="action_remove_from_favorites">إزالة من المفضلة</string>
<string name="select_an_account">اختار حساب</string>
<string name="duplicate_message_single">من الظاهر أن \"%1$s\" موجود بالفعل في مكتبتك.
\n
\nهل تريد الاضافة على أي حال مستبدلاً القديم أو إلغاء العملية؟</string>
<string name="enter_pin">ادخال ال PIN</string>
<string name="pin">PIN</string>
<string name="enter_current_pin">أدخل ال PIN الحالي</string>
</resources> </resources>

View file

@ -2,7 +2,7 @@
<resources> <resources>
<!-- KEYS DON'T TRANSLATE --> <!-- KEYS DON'T TRANSLATE -->
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG --> <!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string> <string name="app_dub_sub_episode_text_format" formatted="true">%1$s Ep %2$d</string>
<string name="cast_format" formatted="true">Hrají: %s</string> <string name="cast_format" formatted="true">Hrají: %s</string>
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS --> <!-- 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">Plakát</string> <string name="result_poster_img_des">Plakát</string>
@ -17,7 +17,7 @@
<string name="player_speed_text_format" formatted="true">Rychlost (%.2fx)</string> <string name="player_speed_text_format" formatted="true">Rychlost (%.2fx)</string>
<string name="rated_format" formatted="true">Hodnocení: %.1f</string> <string name="rated_format" formatted="true">Hodnocení: %.1f</string>
<string name="new_update_format" formatted="true">Nalezena nová aktualizace! <string name="new_update_format" formatted="true">Nalezena nová aktualizace!
\n%s -&gt; %s</string> \n%1$s -&gt; %2$s</string>
<string name="filler" formatted="true">Výplň</string> <string name="filler" formatted="true">Výplň</string>
<string name="duration_format" formatted="true">%d min</string> <string name="duration_format" formatted="true">%d min</string>
<string name="app_name">CloudStream</string> <string name="app_name">CloudStream</string>
@ -292,7 +292,7 @@
<string name="kitsu_account_settings" translatable="false">Kitsu</string> <string name="kitsu_account_settings" translatable="false">Kitsu</string>
<string name="trakt_account_settings" translatable="false">Trakt</string> <string name="trakt_account_settings" translatable="false">Trakt</string>
--> -->
<string name="login_format" formatted="true">%s %s</string> <string name="login_format" formatted="true">%1$s %2$s</string>
<string name="account">účet</string> <string name="account">účet</string>
<string name="logout">Odhlásit se</string> <string name="logout">Odhlásit se</string>
<string name="login">Přihlásit se</string> <string name="login">Přihlásit se</string>
@ -410,17 +410,17 @@
<string name="clipboard_too_large">Příliš mnoho textu. Nepodařilo se uložit do schránky.</string> <string name="clipboard_too_large">Příliš mnoho textu. Nepodařilo se uložit do schránky.</string>
<string name="yes">Ano</string> <string name="yes">Ano</string>
<string name="browser">Prohlížeč</string> <string name="browser">Prohlížeč</string>
<string name="episodes_range">%d-%d</string> <string name="episodes_range">%1$d-%2$d</string>
<string name="library">Knihovna</string> <string name="library">Knihovna</string>
<string name="kitsu_settings">Zobrazit plakáty z Kitsu</string> <string name="kitsu_settings">Zobrazit plakáty z Kitsu</string>
<string name="automatic_plugin_download">Automaticky stahovat doplňky</string> <string name="automatic_plugin_download">Automaticky stahovat doplňky</string>
<string name="redo_setup_process">Znovu provést proces nastavení</string> <string name="redo_setup_process">Znovu provést proces nastavení</string>
<string name="apk_installer_settings">Instalátor APK</string> <string name="apk_installer_settings">Instalátor APK</string>
<string name="episode_format" formatted="true">%d %s</string> <string name="episode_format" formatted="true">%1$d %2$s</string>
<string name="apk_installer_settings_des">Některé telefony nepodporují nový instalátor balíčků. Pokud se aktualizace nenainstalují, zkuste použít starší možnost.</string> <string name="apk_installer_settings_des">Některé telefony nepodporují nový instalátor balíčků. Pokud se aktualizace nenainstalují, zkuste použít starší možnost.</string>
<string name="pref_category_cache">Mezipaměť</string> <string name="pref_category_cache">Mezipaměť</string>
<string name="next_episode_format" formatted="true">Epizoda %d bude vydána za</string> <string name="next_episode_format" formatted="true">Epizoda %d bude vydána za</string>
<string name="next_episode_time_hour_format" formatted="true">%dh %dm</string> <string name="next_episode_time_hour_format" formatted="true">%1$dh %2$dm</string>
<string name="play_livestream_button">Přehrát přímý přenos</string> <string name="play_livestream_button">Přehrát přímý přenos</string>
<string name="pref_category_extensions">Rozšíření</string> <string name="pref_category_extensions">Rozšíření</string>
<string name="pref_category_actions">Akce</string> <string name="pref_category_actions">Akce</string>
@ -436,7 +436,7 @@
<string name="preferred_media_subtext">Co chcete vidět</string> <string name="preferred_media_subtext">Co chcete vidět</string>
<string name="plugin_downloaded">Doplněk stažen</string> <string name="plugin_downloaded">Doplněk stažen</string>
<string name="is_adult">18+</string> <string name="is_adult">18+</string>
<string name="batch_download_start_format" formatted="true">Spuštěno stahování %d %s…</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é weby. Stránky je třeba nainstalovat z úložišť. <string name="blank_repo_message">CloudStream nemá ve výchozím nastavení nainstalované žádné weby. Stránky je třeba nainstalovat z úložišť.
\n \n
\nKvůli nesmyslnému podání stížnosti DMCA společností Sky UK Limited 🤮 nemůžeme v aplikaci propojit stránky repozitářů. \nKvůli nesmyslnému podání stížnosti DMCA společností Sky UK Limited 🤮 nemůžeme v aplikaci propojit stránky repozitářů.
@ -505,12 +505,12 @@
<string name="pref_category_app_updates">Aktualizace aplikace</string> <string name="pref_category_app_updates">Aktualizace aplikace</string>
<string name="setup_done">Hotovo</string> <string name="setup_done">Hotovo</string>
<string name="extension_types">Podporováno</string> <string name="extension_types">Podporováno</string>
<string name="season_format">%s %d%s</string> <string name="season_format">%1$s %2$d%3$s</string>
<string name="live_singular">Živý přenos</string> <string name="live_singular">Živý přenos</string>
<string name="nsfw_singular">NSFW</string> <string name="nsfw_singular">NSFW</string>
<string name="extensions">Rozšíření</string> <string name="extensions">Rozšíření</string>
<string name="play_trailer_button">Přehrát trailer</string> <string name="play_trailer_button">Přehrát trailer</string>
<string name="next_episode_time_day_format" formatted="true">%dd %dh %dm</string> <string name="next_episode_time_day_format" formatted="true">%1$dd %2$dh %3$dm</string>
<string name="view_public_repositories_button">Zobrazit komunitní repozitáře</string> <string name="view_public_repositories_button">Zobrazit komunitní repozitáře</string>
<string name="update_started">Aktualizace zahájena</string> <string name="update_started">Aktualizace zahájena</string>
<string name="stream">Stream</string> <string name="stream">Stream</string>
@ -520,7 +520,7 @@
<string name="referer">Referent</string> <string name="referer">Referent</string>
<string name="next">Další</string> <string name="next">Další</string>
<string name="provider_languages_tip">Sledovat videa v těchto jazycích</string> <string name="provider_languages_tip">Sledovat videa v těchto jazycích</string>
<string name="batch_download_finish_format" formatted="true">Staženo %d %s</string> <string name="batch_download_finish_format" formatted="true">Staženo %1$d %2$s</string>
<string name="batch_download_nothing_to_download_format" formatted="true">Všechny %s jsou již staženy</string> <string name="batch_download_nothing_to_download_format" formatted="true">Všechny %s jsou již staženy</string>
<string name="batch_download">Hromadné stahování</string> <string name="batch_download">Hromadné stahování</string>
<string name="plugin_singular">doplněk</string> <string name="plugin_singular">doplněk</string>
@ -575,4 +575,31 @@
<string name="no_plugins_found_error">V repozitáři nebyly nalezeny žádné doplňky</string> <string name="no_plugins_found_error">V repozitáři nebyly nalezeny žádné doplňky</string>
<string name="no_repository_found_error">Repozitář nenalezen, zkontrolujte adresu URL a zkuste použít VPN</string> <string name="no_repository_found_error">Repozitář nenalezen, zkontrolujte adresu URL a zkuste použít VPN</string>
<string name="already_voted">Již jste hlasovali</string> <string name="already_voted">Již jste hlasovali</string>
<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="backup_frequency">Frekvence záloh</string>
<string name="duplicate_title">Nalezena potenciální duplicita</string>
<string name="lock_profile">Zamknout profil</string>
<string name="action_add_to_favorites">Přidat do oblíbených</string>
<string name="duplicate_replace_all">Nahradit vše</string>
<string name="pin_error_incorrect">Nesprávný PIN. Zkuste to prosím znovu.</string>
<string name="action_unsubscribe">Zrušit odběr</string>
<string name="pin_error_length">PIN musí obsahovat 4 znaky</string>
<string name="duplicate_replace">Nahradit</string>
<string name="duplicate_add">Přidat</string>
<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: „%1$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>
</resources> </resources>

View file

@ -4,10 +4,10 @@
<string name="setup_extensions_subtext">Descargue la lista de sitios que quiera utilizar</string> <string name="setup_extensions_subtext">Descargue la lista de sitios que quiera utilizar</string>
<string name="plugins_downloaded" formatted="true">Descargado:%d</string> <string name="plugins_downloaded" formatted="true">Descargado:%d</string>
<string name="downloaded">Descargado</string> <string name="downloaded">Descargado</string>
<string name="batch_download_finish_format" formatted="true">Descargado %d %s</string> <string name="batch_download_finish_format" formatted="true">Descargado %1$d %2$s</string>
<string name="delete_repository">Borrar repositorio</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_format" formatted="true">El episodio %d se lanzará en</string>
<string name="next_episode_time_hour_format" formatted="true">%dh %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="next_episode_time_min_format" formatted="true">%dm</string>
<string name="result_poster_img_des">Poster</string> <string name="result_poster_img_des">Poster</string>
<string name="extensions">Extensiones</string> <string name="extensions">Extensiones</string>
@ -97,12 +97,12 @@
<string name="search_poster_img_des">Poster</string> <string name="search_poster_img_des">Poster</string>
<string name="home_next_random_img_des">Siguiente al azar</string> <string name="home_next_random_img_des">Siguiente al azar</string>
<string name="all_languages_preference">Todos los Idiomas</string> <string name="all_languages_preference">Todos los Idiomas</string>
<string name="go_back_img_des">Volver</string> <string name="go_back_img_des">Regresar</string>
<string name="home_change_provider_img_des">Cambiar proveedor</string> <string name="home_change_provider_img_des">Cambiar proveedor</string>
<string name="preview_background_img_des">Vista previa del fondo</string> <string name="preview_background_img_des">Vista previa del fondo</string>
<string name="rated_format" formatted="true">Nota:%.1f</string> <string name="rated_format" formatted="true">Nota:%.1f</string>
<string name="new_update_format" formatted="true">Nueva actualización encontrada! <string name="new_update_format" formatted="true">¡Nueva actualización encontrada!
\n%s -&gt; %s</string> \n%1$s -&gt; %2$s</string>
<string name="download">Descargar</string> <string name="download">Descargar</string>
<string name="popup_pause_download">Pausar Descarga</string> <string name="popup_pause_download">Pausar Descarga</string>
<string name="subs_font">Formato de fuente</string> <string name="subs_font">Formato de fuente</string>
@ -110,8 +110,8 @@
<string name="subs_font_size">Tamaño de Fuente</string> <string name="subs_font_size">Tamaño de Fuente</string>
<string name="player_speed_text_format" formatted="true">Velocidad (%.2fx)</string> <string name="player_speed_text_format" formatted="true">Velocidad (%.2fx)</string>
<string name="skip_loading">Omitir carga</string> <string name="skip_loading">Omitir carga</string>
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</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">%dd %dh %dm</string> <string name="next_episode_time_day_format" formatted="true">%1$dd %2$dh %3$dm</string>
<string name="cast_format" formatted="true">Elenco %s</string> <string name="cast_format" formatted="true">Elenco %s</string>
<string name="filler" formatted="true">Relleno</string> <string name="filler" formatted="true">Relleno</string>
<string name="duration_format" formatted="true">%d min</string> <string name="duration_format" formatted="true">%d min</string>
@ -145,7 +145,7 @@
<string name="play_torrent_button">Transmitir Torrent</string> <string name="play_torrent_button">Transmitir Torrent</string>
<string name="pick_source">Fuentes</string> <string name="pick_source">Fuentes</string>
<string name="reload_error">Reintentar conexión…</string> <string name="reload_error">Reintentar conexión…</string>
<string name="go_back">Volver</string> <string name="go_back">Regresar</string>
<string name="downloading">Descargando</string> <string name="downloading">Descargando</string>
<string name="download_paused">Descarga pausada</string> <string name="download_paused">Descarga pausada</string>
<string name="download_started">Descarga iniciada</string> <string name="download_started">Descarga iniciada</string>
@ -218,8 +218,8 @@
<string name="play_episode_toast">Reproducir Episodio</string> <string name="play_episode_toast">Reproducir Episodio</string>
<string name="episode">Episodio</string> <string name="episode">Episodio</string>
<string name="episodes">Episodios</string> <string name="episodes">Episodios</string>
<string name="episodes_range">%d-%d</string> <string name="episodes_range">%1$d-%2$d</string>
<string name="episode_format" formatted="true">%d %s</string> <string name="episode_format" formatted="true">%1$d %2$s</string>
<string name="episode_short">E</string> <string name="episode_short">E</string>
<string name="restore_failed_format" formatted="true">Falló la restauración de los datos desde el archivo %s</string> <string name="restore_failed_format" formatted="true">Falló la restauración de los datos desde el archivo %s</string>
<string name="backup_success">Datos guardados</string> <string name="backup_success">Datos guardados</string>
@ -233,7 +233,7 @@
<string name="advanced_search_des">Mostrar los resultados de la búsqueda por proveedor</string> <string name="advanced_search_des">Mostrar los resultados de la búsqueda por proveedor</string>
<string name="bug_report_settings_off">Solo envíar los datos si la App se cierra / falla inesperadamente</string> <string name="bug_report_settings_off">Solo envíar los datos si la App se cierra / falla inesperadamente</string>
<string name="bug_report_settings_on">No enviar datos</string> <string name="bug_report_settings_on">No enviar datos</string>
<string name="show_trailers_settings">Mostrar Trailers (avances)</string> <string name="show_trailers_settings">Mostrar los trailers</string>
<string name="kitsu_settings">Mostrar pósters de Kitsu</string> <string name="kitsu_settings">Mostrar pósters de Kitsu</string>
<string name="uprereleases_settings">Actualizar a las versiones preliminares</string> <string name="uprereleases_settings">Actualizar a las versiones preliminares</string>
<string name="uprereleases_settings_des">Buscar actualizaciones preliminares (beta) en lugar de solo versiones completas (stable releases)</string> <string name="uprereleases_settings_des">Buscar actualizaciones preliminares (beta) en lugar de solo versiones completas (stable releases)</string>
@ -249,7 +249,7 @@
<string name="subs_default_reset_toast">Reiniciar a valores predefinidos</string> <string name="subs_default_reset_toast">Reiniciar a valores predefinidos</string>
<string name="acra_report_toast">Lo sentimos, la aplicación se bloqueó. Se enviará un informe de error anónimo a los desarrolladores</string> <string name="acra_report_toast">Lo sentimos, la aplicación se bloqueó. Se enviará un informe de error anónimo a los desarrolladores</string>
<string name="season">Temporada</string> <string name="season">Temporada</string>
<string name="season_format">%s %d%s</string> <string name="season_format">%1$s %2$d%3$s</string>
<string name="no_season">Ninguna Temporada</string> <string name="no_season">Ninguna Temporada</string>
<string name="season_short">T</string> <string name="season_short">T</string>
<string name="delete_file">Borrar Archivo</string> <string name="delete_file">Borrar Archivo</string>
@ -311,7 +311,7 @@
<string name="switch_account">Cambiar cuenta</string> <string name="switch_account">Cambiar cuenta</string>
<string name="add_account">Añadir cuenta</string> <string name="add_account">Añadir cuenta</string>
<string name="upload_sync">Sincronizar</string> <string name="upload_sync">Sincronizar</string>
<string name="sync_score">Calificación</string> <string name="sync_score">Clasificado</string>
<string name="authenticated_user" formatted="true">%s autenticado</string> <string name="authenticated_user" formatted="true">%s autenticado</string>
<string name="authenticated_user_fail" formatted="true">No se pudo autenticar a %s</string> <string name="authenticated_user_fail" formatted="true">No se pudo autenticar a %s</string>
<string name="recommended">Recomendado</string> <string name="recommended">Recomendado</string>
@ -345,7 +345,7 @@
<string name="primary_color_settings">Color primario</string> <string name="primary_color_settings">Color primario</string>
<string name="app_theme_settings">Tema de la aplicación</string> <string name="app_theme_settings">Tema de la aplicación</string>
<string name="example_email">hola@mundo.com</string> <string name="example_email">hola@mundo.com</string>
<string name="login_format" formatted="true">%s %s</string> <string name="login_format" formatted="true">%1$s %2$s</string>
<string name="all">Todo</string> <string name="all">Todo</string>
<string name="subtitle_offset_hint">1000ms</string> <string name="subtitle_offset_hint">1000ms</string>
<string name="subtitle_offset_extra_hint_none_format">Sin retraso de subtítulos</string> <string name="subtitle_offset_extra_hint_none_format">Sin retraso de subtítulos</string>
@ -448,7 +448,7 @@
<string name="setup_done">Hecho</string> <string name="setup_done">Hecho</string>
<string name="plugin_loaded">Plugin Cargado</string> <string name="plugin_loaded">Plugin Cargado</string>
<string name="is_adult">18+</string> <string name="is_adult">18+</string>
<string name="batch_download_start_format" formatted="true">Iniciada la descarga %d %s…</string> <string name="batch_download_start_format" formatted="true">Comenzó la descarga de %1$d %2$s…</string>
<string name="batch_download">Descarga por lotes</string> <string name="batch_download">Descarga por lotes</string>
<string name="plugin_singular">plugin</string> <string name="plugin_singular">plugin</string>
<string name="plugin">plugins</string> <string name="plugin">plugins</string>
@ -552,4 +552,30 @@
<string name="no_repository_found_error">Repositorio no encontrado, comprueba la URL y prueba la VPN</string> <string name="no_repository_found_error">Repositorio no encontrado, comprueba la URL y prueba la VPN</string>
<string name="already_voted">Ya has votado</string> <string name="already_voted">Ya has votado</string>
<string name="backup_frequency">Frecuencia de la copia de seguridad</string> <string name="backup_frequency">Frecuencia de la copia de seguridad</string>
<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_title">Posible duplicado encontrado</string>
<string name="lock_profile">Perfil de bloqueo</string>
<string name="action_add_to_favorites">Añadido a favoritos</string>
<string name="duplicate_replace_all">Sustituir todo</string>
<string name="pin_error_incorrect">PIN incorrecto. Por favor, inténtelo de nuevo.</string>
<string name="action_unsubscribe">Cancelar la suscripción</string>
<string name="pin_error_length">El PIN debe tener 4 caracteres</string>
<string name="duplicate_replace">Sustituir</string>
<string name="duplicate_add">Añadir</string>
<string name="action_subscribe">Suscríbase</string>
<string name="action_remove_from_favorites">Eliminar de favoritos</string>
<string name="select_an_account">Seleccione una cuenta</string>
<string name="duplicate_message_single">Parece que ya existe un elemento potencialmente duplicado en su biblioteca: \'%s.\'
\n
\n¿Desea añadir este elemento de todos modos, sustituir el existente o cancelar la acción\?</string>
<string name="enter_pin">Introducir el PIN</string>
<string name="pin">PIN</string>
<string name="enter_current_pin">Introduzca el PIN actual</string>
</resources> </resources>

View file

@ -20,7 +20,7 @@
<string name="player_speed_text_format" formatted="true">Velocità (%.2fx)</string> <string name="player_speed_text_format" formatted="true">Velocità (%.2fx)</string>
<string name="rated_format" formatted="true">Valutato: %.1f</string> <string name="rated_format" formatted="true">Valutato: %.1f</string>
<string name="new_update_format" formatted="true">Nuovo aggiornamento trovato! <string name="new_update_format" formatted="true">Nuovo aggiornamento trovato!
\n%s -&gt; %s</string> \n%1$s -&gt; %2$s</string>
<string name="filler" formatted="true">Filler</string> <string name="filler" formatted="true">Filler</string>
<string name="duration_format" formatted="true">%d min</string> <string name="duration_format" formatted="true">%d min</string>
<!-- <string name="app_name">CloudStream</string> --> <!-- <string name="app_name">CloudStream</string> -->
@ -409,8 +409,8 @@
<string name="plugin_deleted">Plugin eliminato</string> <string name="plugin_deleted">Plugin eliminato</string>
<string name="plugin_load_fail" formatted="true">Impossibile caricare %s</string> <string name="plugin_load_fail" formatted="true">Impossibile caricare %s</string>
<string name="is_adult">18+</string> <string name="is_adult">18+</string>
<string name="batch_download_start_format" formatted="true">Download iniziato %d %s…</string> <string name="batch_download_start_format" formatted="true">Download iniziato %1$d %2$s…</string>
<string name="batch_download_finish_format" formatted="true">Scaricato %d %s</string> <string name="batch_download_finish_format" formatted="true">Scaricato %1$d %2$s</string>
<string name="batch_download_nothing_to_download_format" formatted="true">Tutti %s già scaricati</string> <string name="batch_download_nothing_to_download_format" formatted="true">Tutti %s già scaricati</string>
<string name="batch_download">Download in blocco</string> <string name="batch_download">Download in blocco</string>
<string name="plugin_singular">plugin</string> <string name="plugin_singular">plugin</string>
@ -573,4 +573,30 @@
<string name="automatic_plugin_download_mode_title">Seleziona la modalità per filtrare il download dei plugin</string> <string name="automatic_plugin_download_mode_title">Seleziona la modalità per filtrare il download dei plugin</string>
<string name="disable">Disabilita</string> <string name="disable">Disabilita</string>
<string name="already_voted">Hai già votato</string> <string name="already_voted">Hai già votato</string>
<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="backup_frequency">Frequenza di backup</string>
<string name="duplicate_title">Trovato Possibile Duplicato</string>
<string name="action_add_to_favorites">Aggiungi ai preferiti</string>
<string name="duplicate_replace_all">Rimpiazza tutti</string>
<string name="pin_error_incorrect">PIN non corretto. Riprova.</string>
<string name="action_unsubscribe">Disiscriviti</string>
<string name="pin_error_length">Il PIN deve essere almeno di 4 caratteri</string>
<string name="duplicate_replace">Rimpiazza</string>
<string name="duplicate_add">Aggiungi</string>
<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 un oggetto potenziale duplicato sia già presente nella tua libreria: \'%1$s.\'
\n
\nVorresti aggiungere l\'oggetto lo stesso, rimpiazzare l\'esistente, o cancellare l\'azione\?</string>
<string name="enter_pin">Inserisci PIN</string>
<string name="pin">PIN</string>
<string name="enter_current_pin">Inserisci PIN Corrente</string>
</resources> </resources>

View file

@ -9,16 +9,16 @@
<string name="cast_format" formatted="true">Актори: %s</string> <string name="cast_format" formatted="true">Актори: %s</string>
<string name="next_episode_format" formatted="true">Епізод %d вийде через</string> <string name="next_episode_format" formatted="true">Епізод %d вийде через</string>
<string name="result_poster_img_des">Poster</string> <string name="result_poster_img_des">Poster</string>
<string name="app_dub_sub_episode_text_format" formatted="true">%s Еп. %d</string> <string name="app_dub_sub_episode_text_format" formatted="true">%1$s Еп. %2$d</string>
<string name="next_episode_time_day_format" formatted="true">%dд %dгод %dхв</string> <string name="next_episode_time_day_format" formatted="true">%1$dд %2$dгод %3$dхв</string>
<string name="next_episode_time_hour_format" formatted="true">%dгод %dхв</string> <string name="next_episode_time_hour_format" formatted="true">%1$dгод %2$dхв</string>
<string name="next_episode_time_min_format" formatted="true">%dхв</string> <string name="next_episode_time_min_format" formatted="true">%dхв</string>
<string name="home_main_poster_img_des">Головний постер</string> <string name="home_main_poster_img_des">Головний постер</string>
<string name="home_next_random_img_des">Наступний випадковий</string> <string name="home_next_random_img_des">Наступний випадковий</string>
<string name="preview_background_img_des">Попередній перегляд фону</string> <string name="preview_background_img_des">Попередній перегляд фону</string>
<string name="player_speed_text_format" formatted="true">Швидкість (%.2fx)</string> <string name="player_speed_text_format" formatted="true">Швидкість (%.2fx)</string>
<string name="new_update_format" formatted="true">Знайдено нове оновлення! <string name="new_update_format" formatted="true">Знайдено нове оновлення!
\n%s &gt; %s</string> \n%1$s &gt; %2$s</string>
<string name="title_search">Пошук</string> <string name="title_search">Пошук</string>
<string name="title_downloads">Завантаження</string> <string name="title_downloads">Завантаження</string>
<string name="duration_format" formatted="true">%d хв</string> <string name="duration_format" formatted="true">%d хв</string>
@ -167,7 +167,7 @@
<string name="subs_default_reset_toast">Скинути до значення за замовчуванням</string> <string name="subs_default_reset_toast">Скинути до значення за замовчуванням</string>
<string name="no_season">Немає сезону</string> <string name="no_season">Немає сезону</string>
<string name="episodes">епізодів</string> <string name="episodes">епізодів</string>
<string name="episode_format" formatted="true">%d %s</string> <string name="episode_format" formatted="true">%1$d %2$s</string>
<string name="season_short">С</string> <string name="season_short">С</string>
<string name="episode_short">Е</string> <string name="episode_short">Е</string>
<string name="delete_file">Видалити файл</string> <string name="delete_file">Видалити файл</string>
@ -238,9 +238,9 @@
<string name="year">Рік</string> <string name="year">Рік</string>
<string name="go_forward_30">+30</string> <string name="go_forward_30">+30</string>
<string name="acra_report_toast">Вибачте, у застосунку стався збій. Анонімне повідомлення про помилку буде відправлено розробникам</string> <string name="acra_report_toast">Вибачте, у застосунку стався збій. Анонімне повідомлення про помилку буде відправлено розробникам</string>
<string name="season_format">%s %d%s</string> <string name="season_format">%1$s %2$d%3$s</string>
<string name="episode">Епізод</string> <string name="episode">Епізод</string>
<string name="episodes_range">%d-%d</string> <string name="episodes_range">%1$d-%2$d</string>
<string name="no_episodes_found">Епізодів не знайдено</string> <string name="no_episodes_found">Епізодів не знайдено</string>
<string name="pause">Пауза</string> <string name="pause">Пауза</string>
<string name="season">Сезон</string> <string name="season">Сезон</string>
@ -364,7 +364,7 @@
<string name="category_ui">Макет</string> <string name="category_ui">Макет</string>
<string name="category_providers">Постачальники</string> <string name="category_providers">Постачальники</string>
<string name="example_site_url">example.com</string> <string name="example_site_url">example.com</string>
<string name="login_format" formatted="true">%s %s</string> <string name="login_format" formatted="true">%2$s %1$s</string>
<string name="subtitles_depressed">Депресивний</string> <string name="subtitles_depressed">Депресивний</string>
<string name="account">обліковий запис</string> <string name="account">обліковий запис</string>
<string name="create_account">Створити</string> <string name="create_account">Створити</string>
@ -414,8 +414,8 @@
<string name="plugin_loaded">Плагін завантажено</string> <string name="plugin_loaded">Плагін завантажено</string>
<string name="plugin_downloaded">Плагін завантажено</string> <string name="plugin_downloaded">Плагін завантажено</string>
<string name="plugin_load_fail" formatted="true">Не вдалося завантажити %s</string> <string name="plugin_load_fail" formatted="true">Не вдалося завантажити %s</string>
<string name="batch_download_start_format" formatted="true">Почалося завантаження %d %s…</string> <string name="batch_download_start_format" formatted="true">Почалося завантаження %1$d %2$s…</string>
<string name="batch_download_finish_format" formatted="true">Завантажено %d %s</string> <string name="batch_download_finish_format" formatted="true">Завантажено %1$d %2$s</string>
<string name="batch_download_nothing_to_download_format" formatted="true">Всі %s вже завантажено</string> <string name="batch_download_nothing_to_download_format" formatted="true">Всі %s вже завантажено</string>
<string name="batch_download">Завантажити пакети</string> <string name="batch_download">Завантажити пакети</string>
<string name="plugin_singular">плагін</string> <string name="plugin_singular">плагін</string>
@ -499,7 +499,7 @@
<string name="empty_library_no_accounts_message">Ваша бібліотека порожня :( <string name="empty_library_no_accounts_message">Ваша бібліотека порожня :(
\nУвійдіть в обліковий запис бібліотеки або додайте фільми до вашої локальної бібліотеки.</string> \nУвійдіть в обліковий запис бібліотеки або додайте фільми до вашої локальної бібліотеки.</string>
<string name="sort_alphabetical_z">Алфавітом (від Я до А)</string> <string name="sort_alphabetical_z">Алфавітом (від Я до А)</string>
<string name="select_library">Виберіть бібліотеку</string> <string name="select_library">Оберіть бібліотеку</string>
<string name="open_with">Відкрити</string> <string name="open_with">Відкрити</string>
<string name="browser">Браузер</string> <string name="browser">Браузер</string>
<string name="empty_library_logged_in_message">Цей список порожній. Спробуйте перейти до іншого.</string> <string name="empty_library_logged_in_message">Цей список порожній. Спробуйте перейти до іншого.</string>
@ -546,10 +546,36 @@
<string name="qualities">Якості</string> <string name="qualities">Якості</string>
<string name="profile_background_des">Фон профілю</string> <string name="profile_background_des">Фон профілю</string>
<string name="unable_to_inflate">Не вдалося створити UI коректно, це ВАЖЛИВА ПОМИЛКА, про яку слід негайно повідомити %s</string> <string name="unable_to_inflate">Не вдалося створити UI коректно, це ВАЖЛИВА ПОМИЛКА, про яку слід негайно повідомити %s</string>
<string name="automatic_plugin_download_mode_title">Виберіть режим для фільтрації завантаження плагінів</string> <string name="automatic_plugin_download_mode_title">Оберіть режим для фільтрації завантаження плагінів</string>
<string name="disable">Вимкнути</string> <string name="disable">Вимкнути</string>
<string name="no_repository_found_error">Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN</string> <string name="no_repository_found_error">Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN</string>
<string name="no_plugins_found_error">Не знайдено жодних плагінів у репозиторії</string> <string name="no_plugins_found_error">Не знайдено жодних плагінів у репозиторії</string>
<string name="already_voted">Ви вже проголосували</string> <string name="already_voted">Ви вже проголосували</string>
<string name="backup_frequency">Частота резервного копіювання</string> <string name="backup_frequency">Частота резервного копіювання</string>
<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_title">Знайдено потенційний дублікат</string>
<string name="lock_profile">Розблокувати профіль</string>
<string name="action_add_to_favorites">Додати до обраного</string>
<string name="duplicate_replace_all">Замінити усе</string>
<string name="pin_error_incorrect">Неправильний PIN-код. Спробуйте ще раз.</string>
<string name="action_unsubscribe">Відписатись</string>
<string name="pin_error_length">PIN-код повинен складатися з 4 символів</string>
<string name="duplicate_replace">Замінити</string>
<string name="duplicate_add">Додати</string>
<string name="action_subscribe">Підписатись</string>
<string name="action_remove_from_favorites">Вилучити з обраного</string>
<string name="select_an_account">Оберіть обліковий запис</string>
<string name="duplicate_message_single">Виявилося, що у вашій бібліотеці вже є потенційно повторюваний елемент: \'%1$s.\'
\n
\nВсе одно хочете додати цей елемент, замінити наявний чи скасувати дію\?</string>
<string name="enter_pin">Введіть PIN-код</string>
<string name="pin">PIN-код</string>
<string name="enter_current_pin">Введіть поточний PIN-код</string>
</resources> </resources>

View file

@ -409,8 +409,8 @@
<string name="plugin_deleted">Plugin đã xoá</string> <string name="plugin_deleted">Plugin đã xoá</string>
<string name="plugin_load_fail" formatted="true">Không tải được %s</string> <string name="plugin_load_fail" formatted="true">Không tải được %s</string>
<string name="is_adult">18+</string> <string name="is_adult">18+</string>
<string name="batch_download_start_format" formatted="true">Bắt đầu tải %d %s…</string> <string name="batch_download_start_format" formatted="true">Đã bắt đầu tải xuống %1$d %2$s…</string>
<string name="batch_download_finish_format" formatted="true">Tải xuống %d %s thành công</string> <string name="batch_download_finish_format" formatted="true">Đã tải xuống %1$d %2$s</string>
<string name="batch_download_nothing_to_download_format" formatted="true">Toàn bộ %s đã được tải xuống</string> <string name="batch_download_nothing_to_download_format" formatted="true">Toàn bộ %s đã được tải xuống</string>
<string name="batch_download">Tải hàng loạt</string> <string name="batch_download">Tải hàng loạt</string>
<string name="plugin_singular">plugin</string> <string name="plugin_singular">plugin</string>
@ -566,4 +566,31 @@
<string name="no_plugins_found_error">Không tìm thấy plugin</string> <string name="no_plugins_found_error">Không tìm thấy plugin</string>
<string name="unable_to_inflate">Không thể khởi tạo UI, đây là một LỖI LỚN và cần được báo cáo ngay lập tức tới %s</string> <string name="unable_to_inflate">Không thể khởi tạo UI, đây là một LỖI LỚN và cần được báo cáo ngay lập tức tới %s</string>
<string name="automatic_plugin_download_mode_title">Chọn chế độ để lọc plugin tải xuống</string> <string name="automatic_plugin_download_mode_title">Chọn chế độ để lọc plugin tải xuống</string>
<string name="favorite_removed">%s đã loại bỏ khỏi mục yêu thích</string>
<string name="favorites_list_name">Yêu thích</string>
<string name="favorite_added">%s đã thêm vào mục yêu thích</string>
<string name="duplicate_message_multiple" formatted="true">Các mục có thể trùng lặp đã được tìm thấy trong thư viện của bạn:
\n
\n%s
\n
\nBạn vẫn muốn thêm mục này, thay thế những mục hiện có hay hủy hành động\?</string>
<string name="backup_frequency">Tần suất sao lưu</string>
<string name="duplicate_title">Đã tìm thấy bản sao tiềm năng</string>
<string name="lock_profile">Khóa hồ sơ</string>
<string name="action_add_to_favorites">Thêm vào mục yêu thích</string>
<string name="duplicate_replace_all">Thay thế tất cả</string>
<string name="pin_error_incorrect">Mã PIN không chính xác. Vui lòng thử lại.</string>
<string name="action_unsubscribe">Hủy đăng ký</string>
<string name="pin_error_length">Mã PIN phải có 4 ký tự</string>
<string name="duplicate_replace">Thay thế</string>
<string name="duplicate_add">Thêm vào</string>
<string name="action_subscribe">Đăng ký</string>
<string name="action_remove_from_favorites">Loại bỏ khỏi mục yêu thích</string>
<string name="select_an_account">Chọn một tài khoản</string>
<string name="duplicate_message_single">Có vẻ như một mục có khả năng trùng lặp đã tồn tại trong thư viện của bạn: \'%1$s.\'
\n
\nBạn vẫn muốn thêm mục này, thay thế mục hiện có hay hủy hành động\?</string>
<string name="enter_pin">Nhập PIN</string>
<string name="pin">PIN</string>
<string name="enter_current_pin">Nhập mã PIN hiện tại</string>
</resources> </resources>

View file

@ -701,9 +701,9 @@
<string name="duplicate_add">Add</string> <string name="duplicate_add">Add</string>
<string name="duplicate_replace">Replace</string> <string name="duplicate_replace">Replace</string>
<string name="duplicate_replace_all">Replace All</string> <string name="duplicate_replace_all">Replace All</string>
<string name="duplicate_cancel" translatable="false">@string/sort_cancel</string> <string name="duplicate_cancel" translatable="false">@string/cancel</string>
<string name="duplicate_message_single"> <string name="duplicate_message_single" formatted="true">
It appears that a potentially duplicate item already exists in your library: \'%1$s.\' It appears that a potentially duplicate item already exists in your library: \'%s.\'
\n\nWould you like to add this item anyway, replace the existing one, or cancel the action? \n\nWould you like to add this item anyway, replace the existing one, or cancel the action?
</string> </string>

View file

@ -0,0 +1 @@
- ¡Cambios añadidos!

View file

@ -0,0 +1,10 @@
CloudStream-3 te permite ver y descargar películas, series de TV y anime.
La aplicación viene sin ningún tipo de anuncios y análisis y
soporta múltiples tráilers y páginas de películas, y más, por ejemplo
Marcadores
Descargas de subtítulos
Compatible con Chromecast

View file

@ -0,0 +1 @@
Vea y descargue películas, series de televisión y anime.

View file

@ -0,0 +1 @@
CloudStream