This commit is contained in:
LagradOst 2022-07-30 19:34:10 +02:00
parent c7531faceb
commit a5ee7f712d
3 changed files with 54 additions and 506 deletions

View file

@ -1,4 +1,5 @@
package com.lagradost.cloudstream3.movieproviders package com.lagradost.cloudstream3.movieproviders
import androidx.core.text.parseAsHtml import androidx.core.text.parseAsHtml
import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.*
import com.lagradost.cloudstream3.LoadResponse.Companion.addRating import com.lagradost.cloudstream3.LoadResponse.Companion.addRating
@ -64,7 +65,8 @@ class FilmpertuttiProvider : MainAPI() {
val url = "$mainUrl/?s=$queryformatted" val url = "$mainUrl/?s=$queryformatted"
val doc = app.get(url).document val doc = app.get(url).document
return doc.select("ul.posts > li").map { return doc.select("ul.posts > li").map {
val title = it.selectFirst("div.title")!!.text().substringBeforeLast("(").substringBeforeLast("[") val title = it.selectFirst("div.title")!!.text().substringBeforeLast("(")
.substringBeforeLast("[")
val link = it.selectFirst("a")!!.attr("href") val link = it.selectFirst("a")!!.attr("href")
val image = it.selectFirst("a")!!.attr("data-thumbnail") val image = it.selectFirst("a")!!.attr("data-thumbnail")
val quality = getQualityFromString(it.selectFirst("div.hd")?.text()) val quality = getQualityFromString(it.selectFirst("div.hd")?.text())
@ -88,28 +90,36 @@ class FilmpertuttiProvider : MainAPI() {
val title = document.selectFirst("#content > h1")!!.text().substringBeforeLast("(") val title = document.selectFirst("#content > h1")!!.text().substringBeforeLast("(")
.substringBeforeLast("[") .substringBeforeLast("[")
val description = document.selectFirst("i.fa.fa-file-text-o.fa-fw")?.parent()?.nextSibling()?.toString()?.parseAsHtml().toString() val description =
document.selectFirst("i.fa.fa-file-text-o.fa-fw")?.parent()?.nextSibling()?.toString()
?.parseAsHtml().toString()
val rating = document.selectFirst("div.rating > div.value")?.text() val rating = document.selectFirst("div.rating > div.value")?.text()
val year = val year =
document.selectFirst("#content > h1")?.text()?.substringAfterLast("(")?.filter { it.isDigit() }?.toIntOrNull() ?: document.selectFirst("#content > h1")?.text()?.substringAfterLast("(")
description.substringAfter("trasmessa nel").take(6).filter { it.isDigit() }.toIntOrNull() ?: ?.filter { it.isDigit() }?.toIntOrNull()
(document.selectFirst("i.fa.fa-calendar.fa-fw")?.parent()?.nextSibling() as Element?)?.text()?.substringAfterLast(" ")?.filter { it.isDigit() }?.toIntOrNull() ?: description.substringAfter("trasmessa nel").take(6).filter { it.isDigit() }
.toIntOrNull() ?: (document.selectFirst("i.fa.fa-calendar.fa-fw")?.parent()
?.nextSibling() as Element?)?.text()?.substringAfterLast(" ")
?.filter { it.isDigit() }?.toIntOrNull()
val poster = document.selectFirst("div.meta > div > img")?.attr("data-src") val poster = document.selectFirst("div.meta > div > img")?.attr("data-src")
val trailerurl = document.selectFirst("div.youtube-player")?.attr("data-id")?.let{ urldata-> val trailerurl =
"https://www.youtube.com/watch?v=$urldata" document.selectFirst("div.youtube-player")?.attr("data-id")?.let { urldata ->
} "https://www.youtube.com/watch?v=$urldata"
}
if (type == TvType.TvSeries) { if (type == TvType.TvSeries) {
val episodeList = ArrayList<Episode>() val episodeList = ArrayList<Episode>()
document.select("div.accordion-item").filter{it.selectFirst("#season > ul > li.s_title > span")!!.text().isNotEmpty()}.map { element -> document.select("div.accordion-item").filter { a ->
a.selectFirst("#season > ul > li.s_title > span")!!.text().isNotEmpty()
}.map { element ->
val season = val season =
element.selectFirst("#season > ul > li.s_title > span")!!.text().toInt() element.selectFirst("#season > ul > li.s_title > span")!!.text().toInt()
element.select("div.episode-wrap").map { episode -> element.select("div.episode-wrap").map { episode ->
@ -145,10 +155,12 @@ class FilmpertuttiProvider : MainAPI() {
} else { } else {
val urls0 = document.select("div.embed-player") val urls0 = document.select("div.embed-player")
val urls = if (urls0.isNotEmpty()){ val urls = if (urls0.isNotEmpty()) {
urls0.map { it.attr("data-id") }.toJson() urls0.map { it.attr("data-id") }.toJson()
} } else {
else{ document.select("#info > ul > li ").mapNotNull { it.selectFirst("a")?.attr("href") }.toJson() } document.select("#info > ul > li ").mapNotNull { it.selectFirst("a")?.attr("href") }
.toJson()
}
return newMovieLoadResponse( return newMovieLoadResponse(
title, title,
@ -166,46 +178,49 @@ class FilmpertuttiProvider : MainAPI() {
} }
} }
// to be updated when UnshortenUrl is ready // to be updated when UnshortenUrl is ready
suspend fun unshorten_linkup(uri: String): String { suspend fun unshorten_linkup(uri: String): String {
var r: NiceResponse? = null var r: NiceResponse? = null
var uri = uri var uri = uri
when{ when {
uri.contains("/tv/") -> uri = uri.replace("/tv/", "/tva/") uri.contains("/tv/") -> uri = uri.replace("/tv/", "/tva/")
uri.contains("delta") -> uri = uri.replace("/delta/", "/adelta/") uri.contains("delta") -> uri = uri.replace("/delta/", "/adelta/")
(uri.contains("/ga/") || uri.contains("/ga2/")) -> uri = base64Decode(uri.split('/').last()).trim() (uri.contains("/ga/") || uri.contains("/ga2/")) -> uri =
uri.contains("/speedx/") -> uri = uri.replace("http://linkup.pro/speedx", "http://speedvideo.net") base64Decode(uri.split('/').last()).trim()
uri.contains("/speedx/") -> uri =
uri.replace("http://linkup.pro/speedx", "http://speedvideo.net")
else -> { else -> {
r = app.get(uri, allowRedirects = true) r = app.get(uri, allowRedirects = true)
uri = r.url uri = r.url
val link = val link =
Regex("<iframe[^<>]*src=\\'([^'>]*)\\'[^<>]*>").find(r.text)?.value ?: Regex("<iframe[^<>]*src=\\'([^'>]*)\\'[^<>]*>").find(r.text)?.value
Regex("""action="(?:[^/]+.*?/[^/]+/([a-zA-Z0-9_]+))">""").find(r.text)?.value ?: ?: Regex("""action="(?:[^/]+.*?/[^/]+/([a-zA-Z0-9_]+))">""").find(r.text)?.value
Regex("""href","((.|\\n)*?)"""").findAll(r.text).elementAtOrNull(1)?.groupValues?.get(1) ?: Regex("""href","((.|\\n)*?)"""").findAll(r.text)
.elementAtOrNull(1)?.groupValues?.get(1)
if (link!=null) { if (link != null) {
uri = link uri = link
} }
} }
} }
val short = Regex("""^https?://.*?(https?://.*)""").find(uri)?.value val short = Regex("""^https?://.*?(https?://.*)""").find(uri)?.value
if (short!=null){ if (short != null) {
uri = short uri = short
} }
if (r==null){ if (r == null) {
r = app.get( r = app.get(
uri, uri,
allowRedirects = false) allowRedirects = false
if (r.headers["location"]!= null){ )
if (r.headers["location"] != null) {
uri = r.headers["location"].toString() uri = r.headers["location"].toString()
} }
} }
if (uri.contains("snip.")) { if (uri.contains("snip.")) {
if (uri.contains("out_generator")) { if (uri.contains("out_generator")) {
uri = Regex("url=(.*)\$").find(uri)!!.value uri = Regex("url=(.*)\$").find(uri)!!.value
} } else if (uri.contains("/decode/")) {
else if (uri.contains("/decode/")) {
uri = app.get(uri, allowRedirects = true).url uri = app.get(uri, allowRedirects = true).url
} }
} }
@ -220,16 +235,14 @@ class FilmpertuttiProvider : MainAPI() {
callback: (ExtractorLink) -> Unit callback: (ExtractorLink) -> Unit
): Boolean { ): Boolean {
tryParseJson<List<String>>(data)?.apmap { id -> tryParseJson<List<String>>(data)?.apmap { id ->
if (id.contains("buckler")){ if (id.contains("buckler")) {
val id2 = unshorten_linkup(id).trim().replace("/v/","/e/").replace("/f/","/e/") val id2 = unshorten_linkup(id).trim().replace("/v/", "/e/").replace("/f/", "/e/")
loadExtractor(id2, data, subtitleCallback, callback) loadExtractor(id2, data, subtitleCallback, callback)
} } else if (id.contains("isecure")) {
else if (id.contains("isecure")){
val doc1 = app.get(id).document val doc1 = app.get(id).document
val id2 = doc1.selectFirst("iframe")!!.attr("src") val id2 = doc1.selectFirst("iframe")!!.attr("src")
loadExtractor(id2, data, subtitleCallback, callback) loadExtractor(id2, data, subtitleCallback, callback)
} } else {
else{
loadExtractor(id, data, subtitleCallback, callback) loadExtractor(id, data, subtitleCallback, callback)
} }
} }

View file

@ -5,12 +5,14 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder
import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings import com.lagradost.cloudstream3.APIHolder.getApiDubstatusSettings
import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings import com.lagradost.cloudstream3.APIHolder.getApiProviderLangSettings
import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey
import com.lagradost.cloudstream3.CommonActivity
import com.lagradost.cloudstream3.DubStatus
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.network.initClient
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.setUpToolbar import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.setUpToolbar
@ -55,7 +57,7 @@ val appLanguages = arrayListOf(
Triple("", "Romanian", "ro"), Triple("", "Romanian", "ro"),
Triple("", "Italian", "it"), Triple("", "Italian", "it"),
Triple("", "Chinese", "zh"), Triple("", "Chinese", "zh"),
Triple("", "Indonesian", "id"), Triple("\uD83C\uDDEE\uD83C\uDDE9", "Indonesian", "in"),
Triple("", "Czech", "cs"), Triple("", "Czech", "cs"),
).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top ).sortedBy { it.second } //ye, we go alphabetical, so ppl don't put their lang on top
@ -120,13 +122,13 @@ class SettingsLang : PreferenceFragmentCompat() {
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true
} }
getPref(R.string.locale_key)?.setOnPreferenceClickListener { getPref(R.string.locale_key)?.setOnPreferenceClickListener { pref ->
val tempLangs = appLanguages.toMutableList() val tempLangs = appLanguages.toMutableList()
//if (beneneCount > 100) { //if (beneneCount > 100) {
// tempLangs.add(Triple("\uD83E\uDD8D", "mmmm... monke", "mo")) // tempLangs.add(Triple("\uD83E\uDD8D", "mmmm... monke", "mo"))
//} //}
val current = getCurrentLocale(requireContext()) val current = getCurrentLocale(pref.context)
val languageCodes = tempLangs.map { it.third } val languageCodes = tempLangs.map { (_, _, iso) -> iso }
val languageNames = tempLangs.map { (emoji, name, iso) -> val languageNames = tempLangs.map { (emoji, name, iso) ->
val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" } val flag = emoji.ifBlank { SubtitleHelper.getFlagFromIso(iso) ?: "ERROR" }
"$flag $name" "$flag $name"

View file

@ -1,467 +0,0 @@
<!--https://newbedev.com/concatenate-multiple-strings-in-xml-->
<resources>
<!-- FORMAT MIGHT TRANSLATE, WILL CAUSE CRASH IF APPLIED WRONG -->
<string name="extra_info_format" translatable="false" formatted="true">%d %s | %sMB</string>
<string name="storage_size_format" translatable="false" formatted="true">%s • %sGB</string>
<string name="download_size_format" translatable="false" formatted="true">%sMB / %sMB</string>
<string name="mb_format" translatable="false" formatted="true">%dMB</string>
<string name="episode_name_format" translatable="false" formatted="true">%s %s</string>
<string name="ffw_text_format" translatable="false" formatted="true">+%d</string>
<string name="rew_text_format" translatable="false" formatted="true">-%d</string>
<string name="ffw_text_regular_format" translatable="false" formatted="true">%d</string>
<string name="rew_text_regular_format" translatable="false" formatted="true">%d</string>
<string name="rating_format" translatable="false" formatted="true">%.1f/10.0</string>
<string name="year_format" translatable="false" formatted="true">%d</string>
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
<string name="cast_format" formatted="true">Pemeran: %s</string>
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
<string name="result_poster_img_des">Poster</string>
<string name="search_poster_img_des">@string/result_poster_img_des</string>
<string name="episode_poster_img_des">Episode Poster</string>
<string name="home_main_poster_img_des">Main Poster</string>
<string name="home_next_random_img_des">Next Random</string>
<string name="episode_play_img_des" translatable="false">@string/play_episode</string>
<string name="go_back_img_des">Go back</string>
<string name="change_providers_img_des" translatable="false">@string/home_change_provider_img_des</string>
<string name="home_change_provider_img_des">Change Provider</string>
<string name="preview_background_img_des">Preview Background</string>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
<string name="player_speed_text_format" formatted="true">Kecepatan (%.2fx)</string>
<string name="rated_format" formatted="true">Dinilai: %.1f</string>
<string name="new_update_format" formatted="true">Update baru ditemukan!\n%s -> %s</string>
<string name="filler" formatted="true">Filler</string>
<string name="duration_format" formatted="true">%d mnt</string>
<string name="app_name">CloudStream</string>
<string name="title_home">Beranda</string>
<string name="title_search">Cari</string>
<string name="title_downloads">Download</string>
<string name="title_settings">Pengaturan</string>
<string name="search_hint">Cari…</string>
<string name="search_hint_site" formatted="true">Cari %s…</string>
<string name="no_data">Tidak Ada Data</string>
<string name="episode_more_options_des">Opsi Lanjutan</string>
<string name="next_episode">Episode selanjutnya</string>
<string name="result_plot" translatable="false">@string/synopsis</string>
<string name="result_tags">Genre</string>
<string name="result_share">Bagikan</string>
<string name="result_open_in_browser">Buka Di Browser</string>
<string name="skip_loading">Skip Loading</string>
<string name="loading_chromecast">Loading…</string>
<string name="type_watching">Sedang Menonton</string>
<string name="type_on_hold">Tertahan</string>
<string name="type_completed">Selesai</string>
<string name="type_dropped">Dihentikan</string>
<string name="type_plan_to_watch">Rencana untuk Menonton</string>
<string name="type_none">Tidak Ada</string>
<string name="type_re_watching">Menonton Ulang</string>
<string name="play_movie_button">Putar Movie</string>
<string name="play_torrent_button">Streaming Torrent</string>
<string name="pick_source">Sumber</string>
<string name="pick_subtitle">Subtitle</string>
<string name="reload_error">Coba ulang koneksi…</string>
<string name="go_back">Kembali</string>
<string name="play_episode">Putar Episode</string>
<!--<string name="need_storage">Allow to download episodes</string>-->
<string name="download">Download</string>
<string name="downloaded">Terdownload</string>
<string name="downloading">Sedang Didownload</string>
<string name="download_paused">Download Dijeda</string>
<string name="download_started">Download Dimulai</string>
<string name="download_failed">Download Gagal</string>
<string name="download_canceled">Download Dibatalkan</string>
<string name="download_done">Download Selesai</string>
<string name="download_format" translatable="false">%s - %s</string>
<string name="error_loading_links_toast">Error Memuat Tautan</string>
<string name="download_storage_text">Penyimpanan Internal</string>
<string name="app_dubbed_text">Dub</string>
<string name="app_subbed_text">Sub</string>
<string name="popup_delete_file">Hapus File</string>
<string name="popup_play_file">Putar File</string>
<string name="popup_resume_download">Lanjutkan Download</string>
<string name="popup_pause_download">Jeda Download</string>
<string name="pref_disable_acra">Matikan pelaporan bug otomatis</string>
<string name="home_more_info">Lebih banyak info</string>
<string name="home_expanded_hide">Sembunyikan</string>
<string name="home_play">Putar</string>
<string name="home_info">Info</string>
<string name="filter_bookmarks">Filter Bookmark</string>
<string name="error_bookmarks_text">Bookmark</string>
<string name="action_remove_from_bookmarks">Hapus</string>
<string name="action_add_to_bookmarks">Atur status tontonan</string>
<string name="sort_apply">Terapkan</string>
<string name="sort_cancel">Batalkan</string>
<string name="sort_copy">Salin</string>
<string name="sort_close">Tutup</string>
<string name="sort_clear">Bersihkan</string>
<string name="sort_save">Simpan</string>
<string name="player_speed">Kecepatan Pemutar</string>
<string name="subtitles_settings">Pengaturan Subtitle</string>
<string name="subs_text_color">Warna Teks</string>
<string name="subs_outline_color">Warna Garis Luar</string>
<string name="subs_background_color">Warna Latar Belakang</string>
<string name="subs_window_color">Warna Window</string>
<string name="subs_edge_type">Jenis Tepi</string>
<string name="subs_subtitle_elevation">Ketinggian Subtitle</string>
<string name="subs_font">Font</string>
<string name="subs_font_size">Ukuran Font</string>
<string name="search_provider_text_providers">Cari menggunakan provider</string>
<string name="search_provider_text_types">Cari menggunakan jenis</string>
<string name="benene_count_text">%d Piseng yang diberikan kepada developer</string>
<string name="benene_count_text_none">Tidak ada piseng yang diberikan</string>
<string name="subs_auto_select_language">Pilih Bahasa Otomatis</string>
<string name="subs_download_languages">Download Bahasa</string>
<string name="subs_hold_to_reset_to_default">Tahan untuk mengatur ulang ke default</string>
<string name="subs_import_text" formatted="true">Impor font dengan meletakkan mereka di %s</string>
<string name="continue_watching">Lanjutkan Menonton</string>
<string name="action_remove_watching">Hapus</string>
<string name="action_open_watching">Info lebih lanjut</string>
<string name="action_open_play">@string/home_play </string>
<string name="vpn_might_be_needed">Sebuah VPN mungkin diperlukan agar provider ini bisa bekerja dengan benar</string>
<string name="vpn_torrent">Provider ini adalah sebuah torrent, VPN direkomendasikan</string>
<string name="provider_info_meta">Metadata tidak disediakan oleh situs, loading video akan gagal jika tidak ada di situs.</string>
<string name="torrent_plot">Deskripsi</string>
<string name="normal_no_plot">Tidak Ada Plot Yang Ditemukan</string>
<string name="torrent_no_plot">Tidak Ada Deskripsi Yang Ditemukan</string>
<string name="show_log_cat">Tampilkan logcat 🐈</string>
<string name="picture_in_picture">Picture-in-picture</string>
<string name="picture_in_picture_des">Melanjutkan pemutaran di pemutar mini di atas aplikasi lain</string>
<string name="player_size_settings">Tombol mengubah ukuran pemutar</string>
<string name="player_size_settings_des">Menghapus batasan hitam</string>
<string name="player_subtitles_settings">Subtitle</string>
<string name="player_subtitles_settings_des">Pengaturan subtitle pemutar</string>
<string name="chromecast_subtitles_settings">Subtitle Chromecast</string>
<string name="chromecast_subtitles_settings_des">Pengaturan subtitle Chromecast</string>
<string name="eigengraumode_settings">Mode Eigengravy</string>
<string name="eigengraumode_settings_des">Menambahkan opsi kecepatan di pemutar</string>
<string name="swipe_to_seek_settings">Geser untuk mengubah waktu</string>
<string name="swipe_to_seek_settings_des">Geser ke kiri atau kanan untuk mengontrol waktu di pemutar video</string>
<string name="swipe_to_change_settings">Geser untuk mengubah pengaturan</string>
<string name="swipe_to_change_settings_des">Geser ke sisi kiri atau kanan untuk mengubah pencerahan atau volume</string>
<string name="double_tap_to_seek_settings">Tekan dua kali untuk mengubah waktu</string>
<string name="double_tap_to_pause_settings">Tekan dua kali untuk menjeda</string>
<string name="double_tap_to_seek_amount_settings">Jumlah pengubah waktu pemutar</string>
<string name="double_tap_to_seek_settings_des">Tekan dua kali di sisi kanan atau kiri untuk mengubah waktu ke depan atau ke belakang
</string>
<string name="double_tap_to_pause_settings_des">Tekan di tengah untuk menjeda</string>
<string name="use_system_brightness_settings">Gunakan pencerahan sistem</string>
<string name="use_system_brightness_settings_des">Gunakan pencerahan sistem di pemutar aplikasi dari pada hamparan gelap
</string>
<string name="episode_sync_settings">Update progres tontonan</string>
<string name="episode_sync_settings_des">Sinkronisasikan progres episode saat ini secara otomatis</string>
<string name="restore_settings">Pulihkan data dari cadangan</string>
<string name="killswitch_settings">Download metadata terbaru dari github</string>
<string name="killswitch_settings_des">Jika anda ingin askes dari seluruh provider (bahkan yang sudah rusak) matikan ini</string>
<string name="backup_settings">Cadangkan data</string>
<string name="restore_success">File cadangan termuat</string>
<string name="restore_failed_format" formatted="true">Gagal untuk memulihkan data dari file %s</string>
<string name="backup_success">Data berhasil disimpan</string>
<string name="backup_failed">Izin penyimpanan tidak ditemukan, mohon coba lagi</string>
<string name="backup_failed_error_format">Error saat mencadang %s</string>
<string name="search">Cari</string>
<string name="category_account">Kredit dan akun</string>
<string name="category_updates">Update dan cadangan</string>
<string name="nginx_info_title">Apa itu Nginx ?</string>
<string name="nginx_info_summary">Nginx adalah sebuah software yang dapat digunakan untuk menampilkan file dari server yang anda miliki. Klik untuk melihat panduan pengaturan Nginx</string>
<string name="settings_info">Info</string>
<string name="advanced_search">Pencarian Lanjutan</string>
<string name="advanced_search_des">Memberikan hasil pencarian yang dipisahkan berdasarkan provider</string>
<string name="bug_report_settings_off">Hanya mengirim data saat ngecrash</string>
<string name="bug_report_settings_on">Tidak mengirim data</string>
<string name="show_fillers_settings">Tampilkan episode filler untuk anime</string>
<string name="updates_settings">Tampilkan update aplikasi</string>
<string name="updates_settings_des">Secara otomatis mencari update terbaru saat aplikasi dibuka</string>
<string name="uprereleases_settings">Update ke prarilis</string>
<string name="uprereleases_settings_des">Hanya mencari update prarilis daripada rilis penuh</string>
<string name="github">Github</string>
<string name="lightnovel">Aplikasi novel ringan dari developer yang sama</string>
<string name="anim">Aplikasi anime dari developer yang sama</string>
<string name="discord">Bergabung dengan Discord</string>
<string name="benene">Berikan sebuah piseng kepada developer</string>
<string name="benene_des">Piseng yang diberikan</string>
<string name="app_language">Bahasa Aplikasi</string>
<string name="no_chromecast_support_toast">Provider ini tidak memiliki dukungan Chromecast</string>
<string name="no_links_found_toast">Tidak Ada Tautan Yang Ditemukan</string>
<string name="copy_link_toast">Tautan disalin ke papan klip</string>
<string name="play_episode_toast">Putar Episode</string>
<string name="subs_default_reset_toast">Ulang ke pengaturan default</string>
<string name="acra_report_toast">Maaf, aplikasi ngecrash. Laporan bug anonim akan dikirim ke developer
</string>
<string name="season">Season</string>
<string name="no_season">Tidak Ada Season</string>
<string name="episode">Episode</string>
<string name="episodes">Episode</string>
<string name="season_short">S</string>
<string name="episode_short">E</string>
<string name="no_episodes_found">Episode Tidak Ditemukan</string>
<string name="delete_file">Hapus File</string>
<string name="delete">Hapus</string>
<string name="cancel" translatable="false">@string/sort_cancel</string>
<string name="pause">Jeda</string>
<string name="resume">Lanjutkan</string>
<string name="go_back_30">-30</string>
<string name="go_forward_30">+30</string>
<string name="delete_message" formatted="true">Ini akan secara permanen menghapus %s\nApakah anda yakin?</string>
<string name="resume_time_left" formatted="true">%dm\ntersisa</string>
<string name="status_ongoing">Masih Berlanjut</string>
<string name="status_completed">Tamat</string>
<string name="status">Status</string>
<string name="year">Tahun</string>
<string name="rating">Skor</string>
<string name="duration">Durasi</string>
<string name="site">Situs</string>
<string name="synopsis">Sinopsis</string>
<string name="queued">antri</string>
<string name="no_subtitles">Tidak Ada Subtitle</string>
<string name="default_subtitles">Default</string>
<string name="free_storage">Bebas</string>
<string name="used_storage">Terpakai</string>
<string name="app_storage">Aplikasi</string>
<!--plural-->
<string name="movies">Movie</string>
<string name="tv_series">Seri TV</string>
<string name="cartoons">Kartun</string>
<string name="anime">Anime</string>
<string name="torrent">Torrent</string>
<string name="documentaries">Film Dokumenter</string>
<string name="ova">OVA</string>
<string name="asian_drama">Drama Asia</string>
<!--singular-->
<string name="movies_singular">Movie</string>
<string name="tv_series_singular">Seri</string>
<string name="cartoons_singular">Kartun</string>
<string name="anime_singular">@string/anime</string>
<string name="ova_singular">@string/ova</string>
<string name="torrent_singular">Torrent</string>
<string name="documentaries_singular">Film Dokumenter</string>
<string name="asian_drama_singular">Drama Asia</string>
<string name="source_error">Error sumber</string>
<string name="remote_error">Error jarak jauh</string>
<string name="render_error">Error perender</string>
<string name="unexpected_error">Error pemutar yang tidak terduga</string>
<string name="storage_error">Error mendownload, cek izin penyimpanan</string>
<string name="episode_action_chromecast_episode">Episode Chromecast</string>
<string name="episode_action_chromecast_mirror">Mirror Chromecast</string>
<string name="episode_action_play_in_app">Putar di aplikasi</string>
<string name="episode_action_play_in_vlc">Putar di VLC</string>
<string name="episode_action_play_in_browser">Putar di browser</string>
<string name="episode_action_copy_link">Salin tautan</string>
<string name="episode_action_auto_download">Download otomatis</string>
<string name="episode_action_download_mirror">Download mirror</string>
<string name="episode_action_reload_links">Muat ulang tautan</string>
<string name="episode_action_download_subtitle">Download subtitle</string>
<string name="show_hd">Label kualitas</string>
<string name="show_dub">Label dub</string>
<string name="show_sub">Label sub</string>
<string name="show_title">Judul</string>
<string name="show_hd_key" translatable="false">show_hd_key</string>
<string name="show_dub_key" translatable="false">show_dub_key</string>
<string name="show_sub_key" translatable="false">show_sub_key</string>
<string name="show_title_key" translatable="false">show_title_key</string>
<string name="poster_ui_settings">Aktifkan atau nonaktifkan elemen UI pada poster</string>
<string name="no_update_found">Tidak Ada Update Yang Ditemukan</string>
<string name="check_for_update">Cek Untuk Update</string>
<string name="video_lock">Kunci</string>
<string name="video_aspect_ratio_resize">Ubah Ukuran</string>
<string name="video_source">Sumber</string>
<string name="video_skip_op">Skip OP</string>
<string name="dont_show_again">Jangan tunjukkan lagi</string>
<string name="skip_update">Skip Update ini</string>
<string name="update">Update</string>
<string name="watch_quality_pref">Kualitas tontonan yang lebih diinginkan</string>
<string name="limit_title">Karakter maksimal judul pemutar video</string>
<string name="limit_title_rez">Resolusi pemutar video</string>
<string name="video_buffer_size_settings">Ukuran buffer video</string>
<string name="video_buffer_length_settings">Panjang buffer video</string>
<string name="video_buffer_disk_settings">Cache video di disk</string>
<string name="video_buffer_clear_settings">Membersihkan cache video dan gambar</string>
<string name="video_ram_description">Akan menyebabkan crash acak jika disetel terlalu tinggi. Jangan diubah jika anda memiliki jumlah ram yang rendah seperti TV Android atau ponsel lama</string>
<string name="video_disk_description">Dapat menyebabkan masalah pada sistem dengan ruang penyimpanan yang rendah seperti perangkat Android TV jika anda menyetelnya terlalu tinggi</string>
<string name="dns_pref">DNS melalui HTTPS</string>
<string name="dns_pref_summary">Berguna untuk melewati blok ISP</string>
<string name="download_path_pref">Jalur download</string>
<string name="nginx_url_pref">Url server Nginx</string>
<string name="display_subbed_dubbed_settings">Tampilkan Anime Dub/Sub</string>
<string name="resize_fit">Paskan dengan layar</string>
<string name="resize_fill">Regang</string>
<string name="resize_zoom">Zoom</string>
<string name="legal_notice">Peringatan</string>
<string name="legal_notice_key" translatable="false">legal_notice_key</string>
<string name="legal_notice_text" translatable="false">Any legal issues regarding the content on this application
should be taken up with the actual file hosts and providers themselves as we are not affiliated with them.
In case of copyright infringement, please directly contact the responsible parties or the streaming websites.
The app is purely for educational and personal use.
CloudStream 3 does not host any content on the app, and has no control over what media is put up or taken down.
CloudStream 3 functions like any other search engine, such as Google. CloudStream 3 does not host, upload or
manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient,
user-friendly interface.
It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the
responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use
CloudStream 3 at your own risk.
</string>
<string name="category_general">Umum</string>
<string name="random_button_settings">Tombol Acak</string>
<string name="random_button_settings_desc">Tampilkan tombol acak di Beranda</string>
<string name="provider_lang_settings">Bahasa provider</string>
<string name="app_layout">Tata Letak Aplikasi</string>
<string name="preferred_media_settings">Media yang lebih diinginkan</string>
<string name="category_preferred_media_and_lang">Media dan bahasa yang lebih diinginkan</string>
<string name="category_ui">Antarmuka pengguna</string>
<string name="automatic">Otomatis</string>
<string name="tv_layout">Tata letak TV</string>
<string name="phone_layout">Tata letak HP</string>
<string name="emulator_layout">Tata letak emulator</string>
<string name="primary_color_settings">Warna primer</string>
<string name="app_theme_settings">Tema aplikasi</string>
<string name="bottom_title_settings">Lokasi judul poster</string>
<string name="bottom_title_settings_des">Meletakkan judul di bawah poster</string>
<!-- account stuff -->
<string name="anilist_key" translatable="false">anilist_key</string>
<string name="mal_key" translatable="false">mal_key</string>
<!--
<string name="mal_account_settings" translatable="false">MAL</string>
<string name="anilist_account_settings" translatable="false">AniList</string>
<string name="tmdb_account_settings" translatable="false">TMDB</string>
<string name="imdb_account_settings" translatable="false">IMDB</string>
<string name="kitsu_account_settings" translatable="false">Kitsu</string>
<string name="trakt_account_settings" translatable="false">Trakt</string>
-->
<string name="login_format" formatted="true">%s %s</string>
<string name="account">akun</string>
<string name="logout">Logout</string>
<string name="login">Login</string>
<string name="switch_account">Ganti akun</string>
<string name="add_account">Tambah akun</string>
<string name="add_sync">Tambah pelacak</string>
<string name="added_sync_format" formatted="true">Menambah %s</string>
<string name="upload_sync">Sinkronisasi</string>
<string name="sync_score">Skor</string>
<string name="sync_score_format" formatted="true">%d / 10</string>
<string name="sync_total_episodes_none">/??</string>
<string name="sync_total_episodes_some" formatted="true">/%d</string>
<string name="authenticated_user" formatted="true">%s Diautentikasikan</string>
<string name="authenticated_user_fail" formatted="true">Gagal untuk mengautentikasi ke %s</string>
<!-- ============ -->
<string name="none">Tidak Ada</string>
<string name="normal">Normal</string>
<string name="all">Semua</string>
<string name="max">Maks</string>
<string name="min">Min</string>
<string name="subtitles_none" translatable="false">@string/none</string>
<string name="subtitles_outline">Garis luar</string>
<string name="subtitles_depressed">Depresi</string>
<string name="subtitles_shadow">Bayangan</string>
<string name="subtitles_raised">Menonjol</string>
<string name="subtitle_offset">Sinkronisasi sub</string>
<string name="subtitle_offset_hint">1000ms</string>
<string name="subtitle_offset_title">Penundaan subtitle</string>
<string name="subtitle_offset_extra_hint_later_format">Gunakan ini jika subtitle ditampilkan %dms terlalu cepat</string>
<string name="subtitle_offset_extra_hint_before_format">Gunakan ini jika subtitle ditampilkan %dms terlalu lambat</string>
<string name="subtitle_offset_extra_hint_none_format">Tidak ada penundaan subtitle</string>
<!--
Example text (pangram) can optionally be translated; if you do, include all the letters in the alphabet,
see:
https://en.wikipedia.org/w/index.php?title=Pangram&oldid=225849300
https://en.wikipedia.org/wiki/The_quick_brown_fox_jumps_over_the_lazy_dog
-->
<string name="subtitles_example_text">The quick brown fox jumps over the lazy dog</string>
<string name="recommended">Direkomendasikan</string>
<string name="player_loaded_subtitles" formatted="true">Memuat %s</string>
<string name="player_load_subtitles">Muat dari file</string>
<string name="downloaded_file">File terdownload</string>
<string name="actor_main">Utama</string>
<string name="actor_supporting">Pendukung</string>
<string name="actor_background">Latar Belakang</string>
<string name="home_source">Sumber</string>
<string name="home_random">Acak</string>
<string name="coming_soon">Segera hadir…</string>
<string name="quality_cam">Cam</string>
<string name="quality_cam_rip">Cam</string>
<string name="quality_cam_hd">Cam</string>
<string name="quality_hq">HQ</string>
<string name="quality_hd">HD</string>
<string name="quality_ts">TS</string>
<string name="quality_tc">TC</string>
<string name="quality_blueray">BlueRay</string>
<string name="quality_workprint">WP</string>
<string name="quality_dvd">DVD</string>
<string name="quality_4k">4K</string>
<string name="quality_sd">SD</string>
<string name="quality_uhd">UHD</string>
<string name="quality_hdr">HDR</string>
<string name="quality_sdr">SDR</string>
<string name="quality_webrip">Web</string>
<string name="poster_image">Gambar Poster</string>
<string name="category_player">Pemutar</string>
<string name="resolution_and_title">Resolusi dan judul</string>
<string name="title">Judul</string>
<string name="resolution">Resolusi</string>
</resources>