Merge branch 'recloudstream:master' into master

This commit is contained in:
LikDev-256 2022-10-18 22:36:20 +05:30 committed by GitHub
commit 4287ff038f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 205 additions and 145 deletions

View file

@ -1,8 +1,6 @@
# CloudStream # CloudStream
**⚠️ Warning: By default this app doesn't provide any video sources, you have to install extensions in order to add functionality to the app.** **⚠️ Warning: By default this app doesn't provide any video sources, you have to install extensions in order to add functionality to the app.**
You can find the list of community-maintained extension repositories [here
](https://recloudstream.github.io/repos/)
[![Discord](https://invidget.switchblade.xyz/5Hus6fM)](https://discord.gg/5Hus6fM) [![Discord](https://invidget.switchblade.xyz/5Hus6fM)](https://discord.gg/5Hus6fM)

View file

@ -194,7 +194,7 @@ dependencies {
//implementation 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT' //implementation 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT'
// newpipe yt // newpipe yt
implementation 'com.github.recloudstream:NewPipeExtractor:master-SNAPSHOT' implementation 'com.github.TeamNewPipe:NewPipeExtractor:dev-SNAPSHOT'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
// Library/extensions searching with Levenshtein distance // Library/extensions searching with Levenshtein distance

View file

@ -1,9 +1,16 @@
package com.lagradost.cloudstream3.extractors package com.lagradost.cloudstream3.extractors
import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.annotation.JsonProperty
import com.lagradost.cloudstream3.SubtitleFile
import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.utils.* import com.lagradost.cloudstream3.utils.*
class CineGrabber : GuardareStream() {
override var name = "CineGrabber"
override var mainUrl = "https://cinegrabber.com"
}
open class GuardareStream : ExtractorApi() { open class GuardareStream : ExtractorApi() {
override var name = "Guardare" override var name = "Guardare"
override var mainUrl = "https://guardare.stream" override var mainUrl = "https://guardare.stream"
@ -11,6 +18,7 @@ open class GuardareStream : ExtractorApi() {
data class GuardareJsonData( data class GuardareJsonData(
@JsonProperty("data") val data: List<GuardareData>, @JsonProperty("data") val data: List<GuardareData>,
@JsonProperty("captions") val captions: List<GuardareCaptions?>?,
) )
data class GuardareData( data class GuardareData(
@ -19,10 +27,31 @@ open class GuardareStream : ExtractorApi() {
@JsonProperty("type") val type: String @JsonProperty("type") val type: String
) )
override suspend fun getUrl(url: String, referer: String?): List<ExtractorLink>? {
val response = app.post(url.replace("/v/","/api/source/"), data = mapOf("d" to mainUrl)).text // https://cinegrabber.com/asset/userdata/224879/caption/gqdmzh-71ez76z8/876438.srt
val jsonvideodata = AppUtils.parseJson<GuardareJsonData>(response) data class GuardareCaptions(
return jsonvideodata.data.map { @JsonProperty("id") val id: String,
@JsonProperty("hash") val hash: String,
@JsonProperty("language") val language: String?,
@JsonProperty("extension") val extension: String
) {
fun getUrl(mainUrl: String, userId: String): String {
return "$mainUrl/asset/userdata/$userId/caption/$hash/$id.$extension"
}
}
override suspend fun getUrl(
url: String,
referer: String?,
subtitleCallback: (SubtitleFile) -> Unit,
callback: (ExtractorLink) -> Unit
) {
val response =
app.post(url.replace("/v/", "/api/source/"), data = mapOf("d" to mainUrl)).text
val jsonVideoData = AppUtils.parseJson<GuardareJsonData>(response)
jsonVideoData.data.forEach {
callback.invoke(
ExtractorLink( ExtractorLink(
it.file + ".${it.type}", it.file + ".${it.type}",
this.name, this.name,
@ -31,6 +60,24 @@ open class GuardareStream : ExtractorApi() {
it.label.filter { it.isDigit() }.toInt(), it.label.filter { it.isDigit() }.toInt(),
false false
) )
)
}
if (!jsonVideoData.captions.isNullOrEmpty()){
val iframe = app.get(url)
// var USER_ID = '224879';
val userIdRegex = Regex("""USER_ID.*?(\d+)""")
val userId = userIdRegex.find(iframe.text)?.groupValues?.getOrNull(1) ?: return
jsonVideoData.captions.forEach {
if (it == null) return@forEach
val subUrl = it.getUrl(mainUrl, userId)
subtitleCallback.invoke(
SubtitleFile(
it.language ?: "",
subUrl
)
)
}
} }
} }
} }

View file

@ -23,6 +23,7 @@ import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSnapHelper import androidx.recyclerview.widget.LinearSnapHelper
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.*
@ -280,6 +281,7 @@ class HomeFragment : Fragment() {
val builder = val builder =
BottomSheetDialog(this) BottomSheetDialog(this)
builder.behavior.state = BottomSheetBehavior.STATE_EXPANDED
builder.setContentView(R.layout.home_select_mainpage) builder.setContentView(R.layout.home_select_mainpage)
builder.show() builder.show()
builder.let { dialog -> builder.let { dialog ->

View file

@ -17,6 +17,7 @@ import androidx.fragment.app.activityViewModels
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.*
@ -232,6 +233,7 @@ class SearchFragment : Fragment() {
val builder = val builder =
BottomSheetDialog(ctx) BottomSheetDialog(ctx)
builder.behavior.state = BottomSheetBehavior.STATE_EXPANDED
builder.setContentView(R.layout.home_select_mainpage) builder.setContentView(R.layout.home_select_mainpage)
builder.show() builder.show()
builder.let { dialog -> builder.let { dialog ->

View file

@ -1,27 +1,22 @@
package com.lagradost.cloudstream3.ui.settings.extensions package com.lagradost.cloudstream3.ui.settings.extensions
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.LayoutInflater
import android.widget.SearchView import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.SearchView
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.map
import com.lagradost.cloudstream3.AcraApplication
import com.lagradost.cloudstream3.CommonActivity
import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.mvvm.observe
import com.lagradost.cloudstream3.ui.home.HomeFragment.Companion.getPairList import com.lagradost.cloudstream3.ui.home.HomeFragment.Companion.getPairList
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.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
import com.lagradost.cloudstream3.ui.settings.appLanguages import com.lagradost.cloudstream3.ui.settings.appLanguages
import com.lagradost.cloudstream3.ui.settings.getCurrentLocale
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showMultiDialog
import com.lagradost.cloudstream3.utils.SubtitleHelper import com.lagradost.cloudstream3.utils.SubtitleHelper
import com.lagradost.cloudstream3.utils.UIHelper.toPx import com.lagradost.cloudstream3.utils.UIHelper.toPx
import com.lagradost.cloudstream3.utils.USER_SELECTED_HOMEPAGE_API
import kotlinx.android.synthetic.main.fragment_plugins.* import kotlinx.android.synthetic.main.fragment_plugins.*
const val PLUGINS_BUNDLE_NAME = "name" const val PLUGINS_BUNDLE_NAME = "name"

View file

@ -210,7 +210,7 @@ class PluginsViewModel : ViewModel() {
// Return list to base state if no query // Return list to base state if no query
this.sortedBy { it.plugin.second.name } this.sortedBy { it.plugin.second.name }
} else { } else {
this.sortedBy { -FuzzySearch.ratio(it.plugin.second.name, query) } this.sortedBy { -FuzzySearch.partialRatio(it.plugin.second.name.lowercase(), query.lowercase()) }
} }
} }

View file

@ -283,6 +283,7 @@ val extractorApis: MutableList<ExtractorApi> = arrayListOf(
Userload(), Userload(),
Supervideo(), Supervideo(),
GuardareStream(), GuardareStream(),
CineGrabber(),
// StreamSB.kt works // StreamSB.kt works
// SBPlay(), // SBPlay(),

View file

@ -10,7 +10,7 @@
android:id="@+id/listview1" android:id="@+id/listview1"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:nestedScrollingEnabled="true"
android:layout_rowWeight="1" android:layout_rowWeight="1"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginBottom="60dp" android:layout_marginBottom="60dp"

View file

@ -1,13 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- app:searchHintIcon="@drawable/search_icon"-->
<!-- android:icon="@drawable/search_icon"-->
<item <item
android:id="@+id/search_button" android:id="@+id/search_button"
android:icon="@drawable/search_icon"
android:title="@string/title_search" android:title="@string/title_search"
app:actionViewClass="android.widget.SearchView" android:icon="@drawable/search_icon"
app:searchHintIcon="@drawable/search_icon" android:searchIcon="@drawable/search_icon"
app:showAsAction="ifRoom" /> app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView"
tools:ignore="AppCompatResource" />
<item <item
android:id="@+id/lang_filter" android:id="@+id/lang_filter"
android:icon="@drawable/ic_baseline_language_24" android:icon="@drawable/ic_baseline_language_24"

View file

@ -19,15 +19,15 @@
<string name="next_episode_time_min_format" formatted="true">%dm</string> <string name="next_episode_time_min_format" formatted="true">%dm</string>
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS --> <!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
<string name="result_poster_img_des">海报</string> <string name="result_poster_img_des">封面</string>
<string name="search_poster_img_des">@string/result_poster_img_des</string> <string name="search_poster_img_des">@string/result_poster_img_des</string>
<string name="episode_poster_img_des">剧集海报</string> <string name="episode_poster_img_des">剧集封面</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="episode_play_img_des" translatable="false">@string/play_episode</string> <string name="episode_play_img_des" translatable="false">@string/play_episode</string>
<string name="go_back_img_des">返回</string> <string name="go_back_img_des">返回</string>
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string> <string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
<string name="home_change_provider_img_des">更改内容提供者</string> <string name="home_change_provider_img_des">更改片源</string>
<string name="preview_background_img_des">预览背景</string> <string name="preview_background_img_des">预览背景</string>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT --> <!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
@ -55,7 +55,7 @@
<string name="result_share">分享</string> <string name="result_share">分享</string>
<string name="result_open_in_browser">在浏览器中打开</string> <string name="result_open_in_browser">在浏览器中打开</string>
<string name="skip_loading">跳过加载</string> <string name="skip_loading">跳过加载</string>
<string name="loading">正在加载…</string> <string name="loading">加载</string>
<string name="type_watching">正在观看</string> <string name="type_watching">正在观看</string>
<string name="type_on_hold">暂时搁置</string> <string name="type_on_hold">暂时搁置</string>
@ -77,16 +77,16 @@
<string name="download">下载</string> <string name="download">下载</string>
<string name="downloaded">已下载</string> <string name="downloaded">已下载</string>
<string name="downloading">正在下载</string> <string name="downloading">下载</string>
<string name="download_paused">下载暂停</string> <string name="download_paused">下载暂停</string>
<string name="download_started">下载开始</string> <string name="download_started">下载开始</string>
<string name="download_failed">下载失败</string> <string name="download_failed">下载失败</string>
<string name="download_canceled">下载取消</string> <string name="download_canceled">下载取消</string>
<string name="download_done">下载完毕</string> <string name="download_done">下载完毕</string>
<string name="download_format" translatable="false">%s - %s</string> <string name="download_format" translatable="false">%s - %s</string>
<string name="stream">流媒体</string> <string name="stream">播放</string>
<string name="error_loading_links_toast">加载链接时出</string> <string name="error_loading_links_toast">加载链接错</string>
<string name="download_storage_text">内部存储</string> <string name="download_storage_text">内部存储</string>
<string name="app_dubbed_text">配音</string> <string name="app_dubbed_text">配音</string>
@ -125,33 +125,33 @@
<string name="subs_font">字体</string> <string name="subs_font">字体</string>
<string name="subs_font_size">字体大小</string> <string name="subs_font_size">字体大小</string>
<string name="search_provider_text_providers">内容提供者搜索</string> <string name="search_provider_text_providers">片源搜索</string>
<string name="search_provider_text_types">按类型搜索</string> <string name="search_provider_text_types">按类型搜索</string>
<string name="benene_count_text">给开发者 %d 根香蕉</string> <string name="benene_count_text">给开发者 %d 根香蕉</string>
<string name="benene_count_text_none">不送香蕉</string> <string name="benene_count_text_none">不送香蕉</string>
<string name="subs_auto_select_language">自动选择语言</string> <string name="subs_auto_select_language">自动选择语言</string>
<string name="subs_download_languages">下载语言</string> <string name="subs_download_languages">下载语言</string>
<string name="subs_subtitle_languages">字幕语言</string> <string name="subs_subtitle_languages">字幕语言</string>
<string name="subs_hold_to_reset_to_default">按住重置为默认值</string> <string name="subs_hold_to_reset_to_default">按住重置为默认值</string>
<string name="subs_import_text" formatted="true">将字体置于 %s 导入</string> <string name="subs_import_text" formatted="true">将字体导入到 %s</string>
<string name="continue_watching">继续观看</string> <string name="continue_watching">继续观看</string>
<string name="action_remove_watching">移除</string> <string name="action_remove_watching">移除</string>
<string name="action_open_watching">更多信息</string> <string name="action_open_watching">更多信息</string>
<string name="action_open_play">@string/home_play </string> <string name="action_open_play">@string/home_play </string>
<string name="vpn_might_be_needed">内容提供者可能需要 VPN 才能正常工作</string> <string name="vpn_might_be_needed">片源可能需要 VPN 才能正常使用</string>
<string name="vpn_torrent">内容提供者是一个种子 ,建议使用 VPN</string> <string name="vpn_torrent">片源是种子,建议使用 VPN</string>
<string name="provider_info_meta">站点不提供元数据,如果站点上不存在元数据,视频加载将失败。</string> <string name="provider_info_meta">站点不提供元数据,如果站点上不存在元数据,视频加载将失败。</string>
<string name="torrent_plot">简介</string> <string name="torrent_plot">简介</string>
<string name="normal_no_plot">没有找到简介</string> <string name="normal_no_plot">找到简介</string>
<string name="torrent_no_plot">没有找到简介</string> <string name="torrent_no_plot">找到简介</string>
<string name="show_log_cat">显示日志</string> <string name="show_log_cat">显示日志 🐈</string>
<string name="picture_in_picture">画中画</string> <string name="picture_in_picture">画中画</string>
<string name="picture_in_picture_des">在其他应用之上的迷你播放器中继续播放</string> <string name="picture_in_picture_des">在其他应用之上的迷你播放器中继续播放</string>
@ -162,24 +162,24 @@
<string name="chromecast_subtitles_settings">投屏字幕</string> <string name="chromecast_subtitles_settings">投屏字幕</string>
<string name="chromecast_subtitles_settings_des">投屏字幕设置</string> <string name="chromecast_subtitles_settings_des">投屏字幕设置</string>
<string name="eigengraumode_settings">本征模式</string> <string name="eigengraumode_settings">倍速模式</string>
<string name="eigengraumode_settings_des">在播放器中添加播放速度选项</string> <string name="eigengraumode_settings_des">在播放器中添加播放速度选项</string>
<string name="swipe_to_seek_settings">滑动控制进度</string> <string name="swipe_to_seek_settings">滑动控制进度</string>
<string name="swipe_to_seek_settings_des">向屏幕左侧或右侧滑动来控制播放进度</string> <string name="swipe_to_seek_settings_des">左右滑动控制播放进度</string>
<string name="swipe_to_change_settings">滑动更改设置</string> <string name="swipe_to_change_settings">滑动更改设置</string>
<string name="swipe_to_change_settings_des">在屏幕左侧或右侧滑动来更改亮度或音量</string> <string name="swipe_to_change_settings_des">上下滑动修改亮度或音量</string>
<string name="autoplay_next_settings">自动播放下一集</string> <string name="autoplay_next_settings">自动播放下一集</string>
<string name="autoplay_next_settings_des">当前一集结束时开始下一集</string> <string name="autoplay_next_settings_des">播放完毕后播放下一集</string>
<string name="double_tap_to_seek_settings">双击控制进度</string> <string name="double_tap_to_seek_settings">双击控制进度</string>
<string name="double_tap_to_pause_settings">双击暂停</string> <string name="double_tap_to_pause_settings">双击暂停</string>
<string name="double_tap_to_seek_amount_settings">播放器快进或快退时间</string> <string name="double_tap_to_seek_amount_settings">双击控制进度时间</string>
<string name="double_tap_to_seek_settings_des">屏幕左侧或右侧双击来快进或快退 <string name="double_tap_to_seek_settings_des">左右侧双击快进或快退
</string> </string>
<string name="double_tap_to_pause_settings_des">双击屏幕中间暂停</string> <string name="double_tap_to_pause_settings_des">双击中间暂停</string>
<string name="use_system_brightness_settings">使用系统亮度</string> <string name="use_system_brightness_settings">使用系统亮度</string>
<string name="use_system_brightness_settings_des">在应用播放器中使用系统亮度,而不是黑色遮罩 <string name="use_system_brightness_settings_des">在应用播放器中使用系统亮度替代黑色遮罩
</string> </string>
<string name="episode_sync_settings">更新观看进度</string> <string name="episode_sync_settings">更新观看进度</string>
@ -189,48 +189,49 @@
<string name="backup_settings">备份数据</string> <string name="backup_settings">备份数据</string>
<string name="restore_success">已加载备份文件</string> <string name="restore_success">已加载备份文件</string>
<string name="restore_failed_format" formatted="true">无法从文件 %s 中还原数据</string> <string name="restore_failed_format" formatted="true">无法从 %s 文件中还原数据</string>
<string name="backup_success">成功存数据</string> <string name="backup_success">成功存数据</string>
<string name="backup_failed">缺少存储权限,请重试</string> <string name="backup_failed">缺少存储权限,请重试</string>
<string name="backup_failed_error_format">备份 %s 出错</string> <string name="backup_failed_error_format">备份 %s 出错</string>
<string name="search">搜索</string> <string name="search">搜索</string>
<string name="category_account">账户</string> <string name="category_account">账户</string>
<string name="category_updates">更新备份</string> <string name="category_updates">更新备份</string>
<string name="settings_info">信息</string> <string name="settings_info">信息</string>
<string name="advanced_search">高级搜索</string> <string name="advanced_search">高级搜索</string>
<string name="advanced_search_des">给出按内容提供者分隔的搜索结果</string> <string name="advanced_search_des">按片源分割搜索结果</string>
<string name="bug_report_settings_off">发送关于崩溃的数据</string> <string name="bug_report_settings_off">发送关于崩溃的数据</string>
<string name="bug_report_settings_on">不发送数据</string> <string name="bug_report_settings_on">不发送数据</string>
<string name="show_fillers_settings">为动画显示下一集</string> <string name="show_fillers_settings">显示动画外传</string>
<string name="show_trailers_settings">显示预告片</string> <string name="show_trailers_settings">显示预告片</string>
<string name="kitsu_settings">显示来自 Kitsu 的海报</string> <string name="kitsu_settings">显示来自 Kitsu 的封面</string>
<string name="pref_filter_search_quality">在搜索结果中隐藏选中视频质</string> <string name="pref_filter_search_quality">在搜索结果中隐藏选中视频</string>
<string name="automatic_plugin_updates">自动更新插件</string> <string name="automatic_plugin_updates">自动更新插件</string>
<string name="updates_settings">显示应用更新</string> <string name="updates_settings">显示应用更新</string>
<string name="updates_settings_des">启动时自动搜索更新</string> <string name="updates_settings_des">启动时自动搜索更新</string>
<string name="uprereleases_settings">更新至预览版</string> <string name="uprereleases_settings">更新至预览版</string>
<string name="uprereleases_settings_des">搜索预览版更新,而不是仅搜索完整版本</string> <string name="uprereleases_settings_des">搜索预览版更新替代仅搜索完整版本</string>
<string name="github">Github</string> <string name="github">Github</string>
<string name="lightnovel">由同开发者开发的轻小说应用</string> <string name="lightnovel">同开发者开发的轻小说应用</string>
<string name="anim">由同开发者开发的动漫应用</string> <string name="anim">同开发者开发的动漫应用</string>
<string name="discord">加入 Discord</string> <string name="discord">加入 Discord</string>
<string name="benene">给开发者一根香蕉</string> <string name="benene">给开发者一根香蕉</string>
<string name="benene_des">送香蕉</string> <string name="benene_des">送香蕉</string>
<string name="app_language">应用语言</string> <string name="app_language">应用语言</string>
<string name="no_chromecast_support_toast">内容提供者不支持投屏</string> <string name="no_chromecast_support_toast">片源不支持投屏</string>
<string name="no_links_found_toast">未找到链接</string> <string name="no_links_found_toast">未找到链接</string>
<string name="copy_link_toast">接已复制到剪贴板</string> <string name="copy_link_toast">接已复制到剪贴板</string>
<string name="play_episode_toast">播放剧集</string> <string name="play_episode_toast">播放剧集</string>
<string name="subs_default_reset_toast">重置为默认值</string> <string name="subs_default_reset_toast">重置为默认值</string>
<string name="acra_report_toast">抱歉,应用崩溃了,将向开发人员发送一份匿名错误报告 <string name="acra_report_toast">抱歉,应用崩溃了,将发送一份匿名错误报告给开发者
</string> </string>
<string name="season"></string> <string name="season"></string>
<string name="season_format">%s %d%s</string>
<string name="no_season">无季</string> <string name="no_season">无季</string>
<string name="episode"></string> <string name="episode"></string>
<string name="episodes"></string> <string name="episodes"></string>
@ -247,8 +248,8 @@
<string name="resume">继续</string> <string name="resume">继续</string>
<string name="go_back_30">-30</string> <string name="go_back_30">-30</string>
<string name="go_forward_30">+30</string> <string name="go_forward_30">+30</string>
<string name="delete_message" 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_time_left" formatted="true">剩余 %d 分钟</string>
<string name="status_ongoing">连载中</string> <string name="status_ongoing">连载中</string>
@ -256,11 +257,11 @@
<string name="status">状态</string> <string name="status">状态</string>
<string name="year">年份</string> <string name="year">年份</string>
<string name="rating">评分</string> <string name="rating">评分</string>
<string name="duration">持续时间</string> <string name="duration">时间</string>
<string name="site">网站</string> <string name="site">网站</string>
<string name="synopsis">简介</string> <string name="synopsis">简介</string>
<string name="queued">队列</string> <string name="queued">已加入队列</string>
<string name="no_subtitles">无字幕</string> <string name="no_subtitles">无字幕</string>
<string name="default_subtitles">默认</string> <string name="default_subtitles">默认</string>
@ -270,29 +271,29 @@
<!--plural--> <!--plural-->
<string name="movies">电影</string> <string name="movies">电影</string>
<string name="tv_series"></string> <string name="tv_series">电视</string>
<string name="cartoons">卡通</string> <string name="cartoons">卡通</string>
<string name="anime">动漫</string> <string name="anime">动漫</string>
<string name="torrent">种子</string> <string name="torrent">种子</string>
<string name="documentaries">纪录片</string> <string name="documentaries">纪录片</string>
<string name="ova">原创影像动画</string> <string name="ova">OVA</string>
<string name="asian_drama">亚洲剧</string> <string name="asian_drama">亚洲剧</string>
<string name="livestreams">直播</string> <string name="livestreams">直播</string>
<string name="nsfw">工作场所不宜</string> <string name="nsfw">NSFW</string>
<string name="others">视频</string> <string name="others">其他</string>
<!--singular--> <!--singular-->
<string name="movies_singular">电影</string> <string name="movies_singular">电影</string>
<string name="tv_series_singular"></string> <string name="tv_series_singular">电视</string>
<string name="cartoons_singular">卡通</string> <string name="cartoons_singular">卡通</string>
<string name="anime_singular">动漫</string> <string name="anime_singular">@string/anime</string>
<string name="ova_singular">原创影像动画</string> <string name="ova_singular">@string/ova</string>
<string name="torrent_singular">种子</string> <string name="torrent_singular">种子</string>
<string name="documentaries_singular">纪录片</string> <string name="documentaries_singular">纪录片</string>
<string name="asian_drama_singular">亚洲剧</string> <string name="asian_drama_singular">亚洲剧</string>
<string name="live_singular">直播</string> <string name="live_singular">直播</string>
<string name="nsfw_singular">工作场所不宜</string> <string name="nsfw_singular">NSFW</string>
<string name="other_singular">视频</string> <string name="other_singular">其他</string>
<string name="source_error">来源错误</string> <string name="source_error">来源错误</string>
<string name="remote_error">远程错误</string> <string name="remote_error">远程错误</string>
@ -308,10 +309,10 @@
<string name="episode_action_copy_link">复制链接</string> <string name="episode_action_copy_link">复制链接</string>
<string name="episode_action_auto_download">自动下载</string> <string name="episode_action_auto_download">自动下载</string>
<string name="episode_action_download_mirror">下载镜像</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="episode_action_download_subtitle">下载字幕</string>
<string name="show_hd">标签</string> <string name="show_hd">质标签</string>
<string name="show_dub">配音标签</string> <string name="show_dub">配音标签</string>
<string name="show_sub">字幕标签</string> <string name="show_sub">字幕标签</string>
<string name="show_title">标题</string> <string name="show_title">标题</string>
@ -319,7 +320,7 @@
<string name="show_dub_key" translatable="false">show_dub_key</string> <string name="show_dub_key" translatable="false">show_dub_key</string>
<string name="show_sub_key" translatable="false">show_sub_key</string> <string name="show_sub_key" translatable="false">show_sub_key</string>
<string name="show_title_key" translatable="false">show_title_key</string> <string name="show_title_key" translatable="false">show_title_key</string>
<string name="poster_ui_settings">开关海报上的 UI 元素</string> <string name="poster_ui_settings">封面内容</string>
<string name="no_update_found">未找到更新</string> <string name="no_update_found">未找到更新</string>
<string name="check_for_update">检查更新</string> <string name="check_for_update">检查更新</string>
@ -327,37 +328,37 @@
<string name="video_lock">锁定</string> <string name="video_lock">锁定</string>
<string name="video_aspect_ratio_resize">调整画面</string> <string name="video_aspect_ratio_resize">调整画面</string>
<string name="video_source">来源</string> <string name="video_source">来源</string>
<string name="video_skip_op">跳过片头</string> <string name="video_skip_op">跳过片头</string>
<string name="dont_show_again">不再显示</string> <string name="dont_show_again">不再显示</string>
<string name="skip_update">跳过此更新</string> <string name="skip_update">跳过此更新</string>
<string name="update">更新</string> <string name="update">更新</string>
<string name="watch_quality_pref">首选播放质</string> <string name="watch_quality_pref">首选播放</string>
<string name="limit_title">视频播放器标题最大字符数</string> <string name="limit_title">视频播放器标题最多字符</string>
<string name="limit_title_rez">视频播放器分辨率</string> <string name="limit_title_rez">视频播放器标题</string>
<string name="video_buffer_size_settings">视频缓冲大小</string> <string name="video_buffer_size_settings">视频缓冲大小</string>
<string name="video_buffer_length_settings">视频缓冲</string> <string name="video_buffer_length_settings">视频缓冲长</string>
<string name="video_buffer_disk_settings">磁盘上的视频缓存</string> <string name="video_buffer_disk_settings">视频缓存存储</string>
<string name="video_buffer_clear_settings">清除视频图像缓存</string> <string name="video_buffer_clear_settings">清除视频图像缓存</string>
<string name="video_ram_description">如果设置太高,可能会在内存较低的系统(如 Android TV 设备或旧手机)上导致问题</string> <string name="video_ram_description">设置过高可能导致崩溃。如果您使用如 Android TV 或旧手机此类低内存设备,请勿修改</string>
<string name="video_disk_description">如果将存储空间设置得太高,可能会导致 Android TV 设备等存储空间不足的系统出现问题</string> <string name="video_disk_description">设置过高可能导致如 Android TV 此类低存储空间设备出现系统问题</string>
<string name="dns_pref">DNS over HTTPS</string> <string name="dns_pref">DNS over HTTPS</string>
<string name="dns_pref_summary">用于绕过 ISP 的封锁</string> <string name="dns_pref_summary">防止 DNS 劫持</string>
<string name="add_site_pref">克隆网站</string> <string name="add_site_pref">复制片源</string>
<string name="remove_site_pref">移除网站</string> <string name="remove_site_pref">移除片源</string>
<string name="add_site_summary">添加现有站点具有不同的 URL 的克隆</string> <string name="add_site_summary">添加不同链接的已有片源复制</string>
<string name="download_path_pref">下载路径</string> <string name="download_path_pref">下载路径</string>
<string name="nginx_url_pref">Nginx 服务器 URL</string> <string name="nginx_url_pref">Nginx 服务器链接</string>
<string name="display_subbed_dubbed_settings">显示有配音或字幕的动画</string> <string name="display_subbed_dubbed_settings">显示有配音/字幕的动漫</string>
<string name="resize_fit">适应屏幕</string> <string name="resize_fit">适应</string>
<string name="resize_fill">拉伸</string> <string name="resize_fill">拉伸</string>
<string name="resize_zoom">缩放</string> <string name="resize_zoom">缩放</string>
@ -379,15 +380,15 @@
responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use
CloudStream 3 at your own risk. CloudStream 3 at your own risk.
</string> </string>
<string name="category_general">全局</string> <string name="category_general">通用</string>
<string name="random_button_settings">随机按钮</string> <string name="random_button_settings">随机按钮</string>
<string name="random_button_settings_desc">在主页中显示随机按钮</string> <string name="random_button_settings_desc">在主页中显示随机按钮</string>
<string name="provider_lang_settings">内容提供者语言</string> <string name="provider_lang_settings">片源语言</string>
<string name="app_layout">应用布局</string> <string name="app_layout">应用布局</string>
<string name="preferred_media_settings">首选媒体</string> <string name="preferred_media_settings">首选类型</string>
<string name="enable_nsfw_on_providers">在支持的内容提供者中开启工作场所不宜内容</string> <string name="enable_nsfw_on_providers">在支持的片源中启用 NSFW 内容</string>
<string name="subtitles_encoding">字幕编码</string> <string name="subtitles_encoding">字幕编码</string>
<string name="category_providers">内容提供者</string> <string name="category_providers">片源</string>
<string name="category_ui">布局</string> <string name="category_ui">布局</string>
<string name="automatic">自动</string> <string name="automatic">自动</string>
@ -397,8 +398,8 @@
<string name="primary_color_settings">主题色</string> <string name="primary_color_settings">主题色</string>
<string name="app_theme_settings">应用主题</string> <string name="app_theme_settings">应用主题</string>
<string name="bottom_title_settings">海报标题位置</string> <string name="bottom_title_settings">封面标题位置</string>
<string name="bottom_title_settings_des">将标题置于海报下方</string> <string name="bottom_title_settings_des">将标题移至封面下方</string>
<!-- account stuff --> <!-- account stuff -->
@ -411,7 +412,7 @@
<string name="example_email">邮箱</string> <string name="example_email">邮箱</string>
<string name="example_ip">IP</string> <string name="example_ip">IP</string>
<string name="example_site_name">网站名称</string> <string name="example_site_name">网站名称</string>
<string name="example_site_url">网站 URL</string> <string name="example_site_url">网站链接</string>
<string name="example_lang_name">语言代码 (zh)</string> <string name="example_lang_name">语言代码 (zh)</string>
<!-- <!--
@ -496,34 +497,34 @@
<string name="quality_sdr">SDR</string> <string name="quality_sdr">SDR</string>
<string name="quality_webrip">Web</string> <string name="quality_webrip">Web</string>
<string name="poster_image">海报图像</string> <string name="poster_image">封面图像</string>
<string name="category_player">播放器</string> <string name="category_player">播放器</string>
<string name="resolution_and_title">分辨率标题</string> <string name="resolution_and_title">分辨率标题</string>
<string name="title">标题</string> <string name="title">标题</string>
<string name="resolution">分辨率</string> <string name="resolution">分辨率</string>
<string name="error_invalid_id">无效 ID</string> <string name="error_invalid_id">无效 ID</string>
<string name="error_invalid_data">无效数据</string> <string name="error_invalid_data">无效数据</string>
<string name="error_invalid_url">无效 URL</string> <string name="error_invalid_url">无效链接</string>
<string name="error">错误</string> <string name="error">错误</string>
<string name="subtitles_remove_captions">从字幕中移除隐藏式字幕</string> <string name="subtitles_remove_captions">移除隐藏式字幕</string>
<string name="subtitles_remove_bloat">从字幕中移除广告</string> <string name="subtitles_remove_bloat">移除字幕广告</string>
<string name="subtitles_filter_lang">按首选媒体语言过滤</string> <string name="subtitles_filter_lang">按首选片源语言过滤</string>
<string name="extras">附加</string> <string name="extras">附加</string>
<string name="trailer">预告片</string> <string name="trailer">预告片</string>
<string name="network_adress_example">流媒体链接</string> <string name="network_adress_example">播放链接</string>
<string name="referer">Referer</string> <string name="referer">Referer</string>
<string name="next">下一个</string> <string name="next">下一个</string>
<string name="provider_languages_tip">观看些语言的视频</string> <string name="provider_languages_tip">观看些语言的视频</string>
<string name="previous">上一个</string> <string name="previous">上一个</string>
<string name="skip_setup">跳过设置向导</string> <string name="skip_setup">跳过设置向导</string>
<string name="app_layout_subtext">更改应用程序的外观以适合您的设备</string> <string name="app_layout_subtext">更改为适应您的设备的应用布局</string>
<string name="crash_reporting_title">崩溃报告</string> <string name="crash_reporting_title">崩溃报告</string>
<string name="preferred_media_subtext">想要看什么</string> <string name="preferred_media_subtext">想要看什么</string>
<string name="setup_done">完成</string> <string name="setup_done">完成</string>
<string name="extensions">扩展</string> <string name="extensions">扩展</string>
<string name="add_repository">添加仓库</string> <string name="add_repository">添加仓库</string>
<string name="repository_name_hint">仓库名称</string> <string name="repository_name_hint">仓库名称</string>
<string name="repository_url_hint">仓库 URL</string> <string name="repository_url_hint">仓库链接</string>
<string name="plugin_loaded">插件已加载</string> <string name="plugin_loaded">插件已加载</string>
<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>
@ -534,25 +535,26 @@
<string name="batch_download">批量下载</string> <string name="batch_download">批量下载</string>
<string name="plugin_singular">插件</string> <string name="plugin_singular">插件</string>
<string name="plugin">插件</string> <string name="plugin">插件</string>
<string name="delete_repository_plugins">这也将删除所有仓库插件</string> <string name="delete_repository_plugins">这也将删除所有仓库插件</string>
<string name="delete_repository">删除仓库</string> <string name="delete_repository">删除仓库</string>
<string name="setup_extensions_subtext">下载需用的网站列表</string> <string name="setup_extensions_subtext">下载您所需的片源</string>
<string name="plugins_downloaded" formatted="true">已下载:%d</string> <string name="plugins_downloaded" formatted="true">已下载:%d</string>
<string name="plugins_disabled" formatted="true">已禁用:%d</string> <string name="plugins_disabled" formatted="true">已禁用:%d</string>
<string name="plugins_not_downloaded" formatted="true">未下载:%d</string> <string name="plugins_not_downloaded" formatted="true">未下载:%d</string>
<string name="blank_repo_message">添加仓库以安装网站扩展</string> <string name="plugins_updated" formatted="true">已更新 %d 插件</string>
<string name="blank_repo_message">CloudStream 默认不安装片源。您需要从仓库中安装片源。\n\nBecause of a brainless DMCA takedown by Sky Uk Limited 🤮 we cannot link the repository sites in app.\n\n加入我们的 Discord 获得链接或在网上搜索。</string>
<string name="view_public_repositories_button">查看社区仓库</string> <string name="view_public_repositories_button">查看社区仓库</string>
<string name="view_public_repositories_button_short">公开列表</string> <string name="view_public_repositories_button_short">公开列表</string>
<string name="uppercase_all_subtitles">字幕全大写</string> <string name="uppercase_all_subtitles">字幕全大写</string>
<string name="download_all_plugins_from_repo">从此仓库下载所有插件?</string> <string name="download_all_plugins_from_repo">从此仓库下载所有插件?</string>
<string name="single_plugin_disabled" formatted="true">%s (禁用)</string> <string name="single_plugin_disabled" formatted="true">%s(禁用)</string>
<string name="tracks">轨道</string> <string name="tracks">轨道</string>
<string name="audio_tracks">音频轨道</string> <string name="audio_tracks">音频轨道</string>
<string name="video_tracks">视频轨道</string> <string name="video_tracks">视频轨道</string>
<string name="apply_on_restart">重启生效</string> <string name="apply_on_restart">重启生效</string>
<string name="safe_mode_title">已启动安全模式</string> <string name="safe_mode_title">安全模式已启用</string>
<string name="safe_mode_description">发生了不可恢复的崩溃,已自动禁用所有扩展,因此可以找到并删除导致问题的扩展。</string> <string name="safe_mode_description">发生了不可恢复的崩溃,已自动禁用所有扩展,因此可以找到并删除导致问题的扩展。</string>
<string name="safe_mode_crash_info">查看崩溃信息</string> <string name="safe_mode_crash_info">查看崩溃信息</string>
@ -562,8 +564,17 @@
<string name="extension_status">状态</string> <string name="extension_status">状态</string>
<string name="extension_size">大小</string> <string name="extension_size">大小</string>
<string name="extension_authors">作者</string> <string name="extension_authors">作者</string>
<string name="extension_types">支持</string> <string name="extension_types">类型</string>
<string name="extension_language">语言</string> <string name="extension_language">语言</string>
<string name="extension_install_first">请先安装扩展</string>
<string name="hls_playlist">HLS 播放列表</string> <string name="hls_playlist">HLS 播放列表</string>
<string name="player_pref">首选视频播放器</string>
<string name="player_settings_play_in_app">内部播放器</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_web">投屏</string>
<string name="player_settings_play_in_browser">浏览器</string>
<string name="app_not_found_error">未找到应用</string>
</resources> </resources>