From 6cc3bcc1dd7ebeac99d799ae1f8ca6315441fb9d Mon Sep 17 00:00:00 2001 From: LagradOst Date: Thu, 2 Sep 2021 15:19:50 +0200 Subject: [PATCH] locale changes --- .../ui/download/DownloadButtonSetup.kt | 17 ++- .../ui/download/DownloadChildAdapter.kt | 4 +- .../ui/download/DownloadFragment.kt | 13 ++- .../ui/download/DownloadHeaderAdapter.kt | 9 +- .../ui/download/EasyDownloadButton.kt | 6 +- .../cloudstream3/ui/player/PlayerFragment.kt | 69 ++++++----- .../cloudstream3/ui/result/EpisodeAdapter.kt | 2 +- .../cloudstream3/ui/result/ResultFragment.kt | 59 +++++----- .../cloudstream3/ui/search/SearchFragment.kt | 22 ++-- .../ui/search/SearchResultBuilder.kt | 2 +- .../lagradost/cloudstream3/utils/AppUtils.kt | 15 ++- .../utils/VideoDownloadManager.kt | 2 +- .../res/layout/download_child_episode.xml | 2 +- app/src/main/res/layout/fragment_search.xml | 2 +- app/src/main/res/layout/home_result_grid.xml | 4 +- app/src/main/res/layout/result_episode.xml | 2 +- .../main/res/layout/search_result_grid.xml | 4 +- .../layout/search_result_super_compact.xml | 2 +- app/src/main/res/values-gr/strings.xml | 10 +- app/src/main/res/values-nl/strings.xml | 10 +- app/src/main/res/values/array.xml | 18 +-- app/src/main/res/values/strings.xml | 107 +++++++++++++++--- app/src/main/res/xml/settings.xml | 5 + 23 files changed, 244 insertions(+), 142 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt index 15527bc8..928e7b79 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadButtonSetup.kt @@ -32,19 +32,16 @@ object DownloadButtonSetup { } } - builder.setTitle("Delete File") - builder.setMessage( - "This will permanently delete ${ - getNameFull( + builder.setTitle(R.string.delete_file) + .setMessage( + ctx.getString(R.string.delete_message).format(ctx.getNameFull( click.data.name, click.data.episode, click.data.season - ) - }\nAre you sure?" - ) - .setTitle("Delete") - .setPositiveButton("Delete", dialogClickListener) - .setNegativeButton("Cancel", dialogClickListener) + )) + ) + .setPositiveButton(R.string.delete, dialogClickListener) + .setNegativeButton(R.string.cancel, dialogClickListener) .show() } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt index ca946f61..7f9a6307 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.ui.download -import android.annotation.SuppressLint import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -102,7 +101,6 @@ class DownloadChildAdapter( var localCard: VisualDownloadChildCached? = null - @SuppressLint("SetTextI18n") fun bind(card: VisualDownloadChildCached) { localCard = card val d = card.data @@ -117,7 +115,7 @@ class DownloadChildAdapter( progressBar.visibility = View.GONE } - title.text = getNameFull(d.name, d.episode, d.season) + title.text = title.context.getNameFull(d.name, d.episode, d.season) title.isSelected = true // is needed for text repeating downloadButton.setUpButton( diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt index 25c9f4ce..3cd7e04d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadFragment.kt @@ -1,6 +1,5 @@ package com.lagradost.cloudstream3.ui.download -import android.annotation.SuppressLint import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -12,12 +11,12 @@ import androidx.navigation.findNavController import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.lagradost.cloudstream3.R -import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.isMovieType import com.lagradost.cloudstream3.mvvm.observe import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick import com.lagradost.cloudstream3.utils.DOWNLOAD_EPISODE_CACHE import com.lagradost.cloudstream3.utils.DataStore.getFolderName +import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.VideoDownloadManager @@ -56,7 +55,6 @@ class DownloadFragment : Fragment() { super.onDestroy() } - @SuppressLint("SetTextI18n") override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -71,15 +69,18 @@ class DownloadFragment : Fragment() { setList(it) } observe(downloadsViewModel.availableBytes) { - download_free_txt?.text = "Free • ${getBytesAsText(it)}GB" + download_free_txt?.text = + getString(R.string.storage_size_format).format(getString(R.string.free_storage), getBytesAsText(it)) download_free?.setLayoutWidth(it) } observe(downloadsViewModel.usedBytes) { - download_used_txt?.text = "Used • ${getBytesAsText(it)}GB" + download_used_txt?.text = + getString(R.string.storage_size_format).format(getString(R.string.used_storage), getBytesAsText(it)) download_used?.setLayoutWidth(it) } observe(downloadsViewModel.downloadBytes) { - download_app_txt?.text = "App • ${getBytesAsText(it)}GB" + download_app_txt?.text = + getString(R.string.storage_size_format).format(getString(R.string.app_storage), getBytesAsText(it)) download_app?.setLayoutWidth(it) download_storage_appbar?.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt index ea1a4978..e2aced71 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadHeaderAdapter.kt @@ -101,7 +101,6 @@ class DownloadHeaderAdapter( private val normalImage: ImageView = itemView.download_header_goto_child var localCard: VisualDownloadHeaderCached? = null - @SuppressLint("SetTextI18n") fun bind(card: VisualDownloadHeaderCached) { localCard = card val d = card.data @@ -135,7 +134,13 @@ class DownloadHeaderAdapter( normalImage.visibility = View.VISIBLE extraInfo.text = - "${card.totalDownloads} Episode${if (card.totalDownloads == 1) "" else "s"} | ${mbString}MB" + extraInfo.context.getString(R.string.extra_info_format).format( + card.totalDownloads, + if (card.totalDownloads == 1) extraInfo.context.getString(R.string.episode) else extraInfo.context.getString( + R.string.episodes + ), + mbString + ) holder.setOnClickListener { clickCallback.invoke(DownloadHeaderClickEvent(0, d)) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt index 5b8822b9..7941ba04 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/download/EasyDownloadButton.kt @@ -1,7 +1,6 @@ package com.lagradost.cloudstream3.ui.download import android.animation.ObjectAnimator -import android.annotation.SuppressLint import android.view.View import android.view.animation.DecelerateInterpolator import android.widget.ImageView @@ -16,7 +15,7 @@ import com.lagradost.cloudstream3.utils.VideoDownloadManager class EasyDownloadButton : IDisposable { interface IMinimumData { - val id : Int + val id: Int } override fun dispose() { @@ -93,7 +92,6 @@ class EasyDownloadButton : IDisposable { downloadImageChangeCallback.invoke(img) } - @SuppressLint("SetTextI18n") fun fixDownloadedBytes(setCurrentBytes: Long, setTotalBytes: Long, animate: Boolean) { currentBytes = setCurrentBytes totalBytes = setTotalBytes @@ -112,7 +110,7 @@ class EasyDownloadButton : IDisposable { val totalMbString = "%.1f".format(setTotalBytes / 1000000f) textView?.text = - "${currentMbString}MB / ${totalMbString}MB" + textView?.context?.getString(R.string.download_size_format)?.format(currentMbString, totalMbString) progressBar.let { bar -> bar.max = (setTotalBytes / 1000).toInt() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt index eab89b30..996824bc 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerFragment.kt @@ -618,7 +618,6 @@ class PlayerFragment : Fragment() { this.visibility = if (visible) VISIBLE else GONE } - @SuppressLint("SetTextI18n") fun changeSkip(position: Long? = null) { val data = localData @@ -903,7 +902,7 @@ class PlayerFragment : Fragment() { } private fun handlePlayerEvent(event: Int) { - if(!this::exoPlayer.isInitialized) return + if (!this::exoPlayer.isInitialized) return when (event) { PlayerEventType.Play.value -> exoPlayer.play() PlayerEventType.Pause.value -> exoPlayer.pause() @@ -1152,10 +1151,10 @@ class PlayerFragment : Fragment() { } } } - val fastForwardTime = settingsManager.getInt("fast_forward_button_time", 10) - exo_rew_text.text = fastForwardTime.toString() - exo_ffwd_text.text = fastForwardTime.toString() - fun rewnd() { + val fastForwardTime = settingsManager.getInt(getString(R.string.fast_forward_button_time_key), 10) + exo_rew_text.text = getString(R.string.rew_text_regular_format).format(fastForwardTime) + exo_ffwd_text.text = getString(R.string.ffw_text_regular_format).format(fastForwardTime) + fun rewind() { val rotateLeft = AnimationUtils.loadAnimation(context, R.anim.rotate_left) exo_rew.startAnimation(rotateLeft) @@ -1166,19 +1165,21 @@ class PlayerFragment : Fragment() { override fun onAnimationRepeat(animation: Animation?) {} override fun onAnimationEnd(animation: Animation?) { - exo_rew_text.post { exo_rew_text.text = "$fastForwardTime" } + exo_rew_text.post { + exo_rew_text.text = getString(R.string.rew_text_format).format(fastForwardTime) + } } }) exo_rew_text.startAnimation(goLeft) - exo_rew_text.text = "-$fastForwardTime" + exo_rew_text.text = getString(R.string.rew_text_regular_format).format(fastForwardTime) seekTime(fastForwardTime * -1000L) } exo_rew.setOnClickListener { - rewnd() + rewind() } - fun ffwrd() { + fun fastForward() { val rotateRight = AnimationUtils.loadAnimation(context, R.anim.rotate_right) exo_ffwd.startAnimation(rotateRight) @@ -1189,16 +1190,18 @@ class PlayerFragment : Fragment() { override fun onAnimationRepeat(animation: Animation?) {} override fun onAnimationEnd(animation: Animation?) { - exo_ffwd_text.post { exo_ffwd_text.text = "$fastForwardTime" } + exo_ffwd_text.post { + exo_ffwd_text.text = getString(R.string.ffw_text_format).format(fastForwardTime) + } } }) exo_ffwd_text.startAnimation(goRight) - exo_ffwd_text.text = "+$fastForwardTime" + exo_ffwd_text.text = getString(R.string.ffw_text_regular_format).format(fastForwardTime) seekTime(fastForwardTime * 1000L) } exo_ffwd.setOnClickListener { - ffwrd() + fastForward() } overlay_loading_skip_button.setOnClickListener { @@ -1241,13 +1244,13 @@ class PlayerFragment : Fragment() { override fun onDoubleClickRight(clicks: Int) { if (!isLocked) { - ffwrd() + fastForward() } } override fun onDoubleClickLeft(clicks: Int) { if (!isLocked) { - rewnd() + rewind() } } @@ -1285,19 +1288,21 @@ class PlayerFragment : Fragment() { val speedsNumbers = listOf(0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f) val speedIndex = speedsNumbers.indexOf(playbackSpeed) - context?.showDialog(speedsText, speedIndex, "Player Speed", false, { + context?.showDialog(speedsText, speedIndex, getString(R.string.player_speed), false, { activity?.hideSystemUI() }) { index -> playbackSpeed = speedsNumbers[index] requireContext().setKey(PLAYBACK_SPEED_KEY, playbackSpeed) val param = PlaybackParameters(playbackSpeed) exoPlayer.playbackParameters = param - player_speed_text.text = "Speed (${playbackSpeed}x)".replace(".0x", "x") + player_speed_text.text = + getString(R.string.player_speed_text_format).format(playbackSpeed).replace(".0x", "x") } } sources_btt.setOnClickListener { - val isPlaying = exoPlayer.isPlaying + if (!this::exoPlayer.isInitialized) return@setOnClickListener + //val isPlaying = exoPlayer.isPlaying exoPlayer.pause() val currentSubtitles = activeSubtitles @@ -1355,7 +1360,7 @@ class PlayerFragment : Fragment() { sourceDialog.findViewById(R.id.sort_subtitles_holder)?.visibility = GONE } else { val subsArrayAdapter = ArrayAdapter(view.context, R.layout.sort_bottom_single_choice) - subsArrayAdapter.add("No Subtitles") + subsArrayAdapter.add(getString(R.string.no_subtitles)) subsArrayAdapter.addAll(currentSubtitles) subtitleList.adapter = subsArrayAdapter @@ -1464,7 +1469,12 @@ class PlayerFragment : Fragment() { .removeSuffix(".vtt") .removeSuffix(".srt") .removeSuffix(".txt") - list.add(SubtitleFile(realName.ifBlank { "Default" }, file.second.toString())) + list.add( + SubtitleFile( + realName.ifBlank { getString(R.string.default_subtitles) }, + file.second.toString() + ) + ) } } return list @@ -1811,7 +1821,8 @@ class PlayerFragment : Fragment() { player_view.player = exoPlayer // Sets the speed exoPlayer.playbackParameters = PlaybackParameters(playbackSpeed) - player_speed_text?.text = "Speed (${playbackSpeed}x)".replace(".0x", "x") + player_speed_text?.text = + getString(R.string.player_speed_text_format).format(playbackSpeed).replace(".0x", "x") var hName: String? = null var epEpisode: Int? = null @@ -1843,9 +1854,9 @@ class PlayerFragment : Fragment() { video_title?.text = hName + if (isEpisodeBased) if (epSeason == null) - " - Episode $epEpisode" + " - ${getString(R.string.episode)} $epEpisode" else - " \"S${epSeason}:E${epEpisode}\"" + " \"${getString(R.string.season_short)}${epSeason}:${getString(R.string.episode_short)}${epEpisode}\"" else "" /* @@ -1944,26 +1955,26 @@ class PlayerFragment : Fragment() { if (currentUrl?.url != "") { showToast( activity, - "Source error\n" + error.sourceException.message, + "${getString(R.string.source_error)}\n" + error.sourceException.message, LENGTH_SHORT ) tryNextMirror() } } ExoPlaybackException.TYPE_REMOTE -> { - showToast(activity, "Remote error", LENGTH_SHORT) + showToast(activity, getString(R.string.remote_error), LENGTH_SHORT) } ExoPlaybackException.TYPE_RENDERER -> { showToast( activity, - "Renderer error\n" + error.rendererException.message, + "${getString(R.string.render_error)}\n" + error.rendererException.message, LENGTH_SHORT ) } ExoPlaybackException.TYPE_UNEXPECTED -> { showToast( activity, - "Unexpected player error\n" + error.unexpectedException.message, + "${getString(R.string.unexpected_error)}\n" + error.unexpectedException.message, LENGTH_SHORT ) } @@ -1986,7 +1997,7 @@ class PlayerFragment : Fragment() { } //http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 - @SuppressLint("SetTextI18n") + @SuppressLint("ClickableViewAccessibility") private fun initPlayer() { if (isDownloadedFile) { initPlayer(null, uriData.uri.removePrefix("file://").replace("%20", " ")) // FIX FILE PERMISSION @@ -2011,7 +2022,7 @@ class PlayerFragment : Fragment() { initPlayer(getCurrentUrl()) } } else { - showToast(activity, "No Links Found", LENGTH_SHORT) + showToast(activity, R.string.no_links_found_toast, LENGTH_SHORT) } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 2dffeabd..a3006bed 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -139,7 +139,7 @@ class EpisodeAdapter( @SuppressLint("SetTextI18n") fun bind(card: ResultEpisode) { localCard = card - val name = if (card.name == null) "Episode ${card.episode}" else "${card.episode}. ${card.name}" + val name = if (card.name == null) "${episodeText.context.getString(R.string.episode)} ${card.episode}" else "${card.episode}. ${card.name}" episodeText.text = name val displayPos = card.getDisplayPosition() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index c4d10e13..88c6348b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -228,9 +228,9 @@ class ResultFragment : Fragment() { private fun fromIndexToSeasonText(selection: Int?): String { return when (selection) { - null -> "No Season" - -2 -> "No Season" - else -> "Season $selection" + null -> getString(R.string.no_season) + -2 -> getString(R.string.no_season) + else -> "${getString(R.string.season)} $selection" } } @@ -282,7 +282,7 @@ class ResultFragment : Fragment() { media_route_button?.alpha = if (chromecastSupport) 1f else 0.3f if (!chromecastSupport) { media_route_button.setOnClickListener { - showToast(activity, "This provider has no chromecast support", Toast.LENGTH_LONG) + showToast(activity, R.string.no_chomecast_support_toast, Toast.LENGTH_LONG) } } @@ -331,7 +331,11 @@ class ResultFragment : Fragment() { var currentLinks: ArrayList? = null var currentSubs: ArrayList? = null - val showTitle = episodeClick.data.name ?: "Episode ${episodeClick.data.episode}" + val showTitle = + episodeClick.data.name ?: getString(R.string.episode_name_format).format( + getString(R.string.episode), + episodeClick.data.episode + ) suspend fun requireLinks(isCasting: Boolean): Boolean { val currentLinksTemp = @@ -501,7 +505,7 @@ class ResultFragment : Fragment() { subsList.filter { downloadList.contains(SubtitleHelper.fromLanguageToTwoLetters(it.lang)) } .map { ExtractorSubtitleLink(it.lang, it.url, "") } .forEach { link -> - val epName = meta.name ?: "Episode ${meta.episode}" + val epName = meta.name ?: "${context?.getString(R.string.episode)} ${meta.episode}" val fileName = sanitizeFilename(epName + if (downloadList.size > 1) " ${link.name}" else "") val topFolder = "$folder" @@ -593,18 +597,18 @@ class ResultFragment : Fragment() { dialog.show() } ACTION_COPY_LINK -> { - acquireSingeExtractorLink("Copy Link") { link -> + acquireSingeExtractorLink(getString(R.string.episode_action_copy_link)) { link -> val serviceClipboard = (requireContext().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?) ?: return@acquireSingeExtractorLink val clip = ClipData.newPlainText(link.name, link.url) serviceClipboard.setPrimaryClip(clip) - showToast(activity, "Link copied to clipboard", Toast.LENGTH_SHORT) + showToast(activity, R.string.copy_link_toast, Toast.LENGTH_SHORT) } } ACTION_PLAY_EPISODE_IN_BROWSER -> { - acquireSingeExtractorLink("Play in Browser") { link -> + acquireSingeExtractorLink(getString(R.string.episode_action_play_in_browser)) { link -> val i = Intent(ACTION_VIEW) i.data = Uri.parse(link.url) startActivity(i) @@ -612,7 +616,7 @@ class ResultFragment : Fragment() { } ACTION_CHROME_CAST_MIRROR -> { - acquireSingeExtractorLink("Cast Mirror") { link -> + acquireSingeExtractorLink(getString(R.string.episode_action_chomecast_mirror)) { link -> val mirrorIndex = currentLinks?.indexOf(link) ?: -1 startChromecast(if (mirrorIndex == -1) 0 else mirrorIndex) } @@ -707,11 +711,13 @@ class ResultFragment : Fragment() { } ACTION_DOWNLOAD_MIRROR -> { - acquireSingeExtractorLink( - (currentLinks ?: return@main).filter { !it.isM3u8 }, - "Download Mirror" - ) { link -> - startDownload(listOf(link), currentSubs) + currentLinks?.let { links -> + acquireSingeExtractorLink( + links,//(currentLinks ?: return@main).filter { !it.isM3u8 }, + getString(R.string.episode_action_download_mirror) + ) { link -> + startDownload(listOf(link), currentSubs) + } } } } @@ -830,7 +836,8 @@ class ResultFragment : Fragment() { } observe(viewModel.publicEpisodesCount) { count -> - result_episodes_text.text = "$count Episode${if (count == 1) "" else "s"}" + result_episodes_text.text = + "$count ${if (count == 1) getString(R.string.episode) else getString(R.string.episodes)}" } observe(viewModel.id) { @@ -851,7 +858,7 @@ class ResultFragment : Fragment() { } result_vpn?.visibility = if (api.vpnStatus == VPNStatus.None) GONE else VISIBLE - result_bookmark_button.text = "Watching" + //result_bookmark_button.text = getString(R.string.type_watching) currentHeaderName = d.name currentType = d.type @@ -877,29 +884,29 @@ class ResultFragment : Fragment() { startActivity(createChooser(i, d.name)) } - val metadataInfoArray = ArrayList>() + val metadataInfoArray = ArrayList>() if (d is AnimeLoadResponse) { val status = when (d.showStatus) { null -> null - ShowStatus.Ongoing -> "Ongoing" - ShowStatus.Completed -> "Completed" + ShowStatus.Ongoing -> R.string.status_ongoing + ShowStatus.Completed -> R.string.status_completed } if (status != null) { - metadataInfoArray.add(Pair("Status", status)) + metadataInfoArray.add(Pair(R.string.status, getString(status))) } } - if (d.year != null) metadataInfoArray.add(Pair("Year", d.year.toString())) + if (d.year != null) metadataInfoArray.add(Pair(R.string.year, d.year.toString())) val rating = d.rating if (rating != null) metadataInfoArray.add( Pair( - "Rating", + R.string.rating, "%.1f/10.0".format(rating.toFloat() / 10f).replace(",", ".") ) ) val duration = d.duration - if (duration != null) metadataInfoArray.add(Pair("Duration", duration)) + if (duration != null) metadataInfoArray.add(Pair(R.string.duration, duration)) - metadataInfoArray.add(Pair("Site", d.apiName)) + metadataInfoArray.add(Pair(R.string.site, d.apiName)) if (metadataInfoArray.size > 0) { result_metadata.visibility = VISIBLE @@ -929,7 +936,7 @@ class ResultFragment : Fragment() { } result_descript.setOnClickListener { val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext()) - builder.setMessage(d.plot).setTitle("Synopsis") + builder.setMessage(d.plot).setTitle(R.string.synopsis) .show() } result_descript.text = syno diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt index c78ae82a..2b11ef68 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchFragment.kt @@ -103,12 +103,12 @@ class SearchFragment : Fragment() { val searchMagIcon = main_search.findViewById(androidx.appcompat.R.id.search_mag_icon) searchMagIcon.scaleX = 0.65f searchMagIcon.scaleY = 0.65f - search_filter.setOnClickListener { view -> + search_filter.setOnClickListener { searchView -> val apiNamesSetting = activity?.getApiSettings() if (apiNamesSetting != null) { val apiNames = apis.map { it.name } val builder = - AlertDialog.Builder(view.context, R.style.AlertDialogCustom).setView(R.layout.provider_list) + AlertDialog.Builder(searchView.context, R.style.AlertDialogCustom).setView(R.layout.provider_list) val dialog = builder.create() dialog.show() @@ -120,22 +120,22 @@ class SearchFragment : Fragment() { val cancelButton = dialog.findViewById(R.id.cancel_btt)!! // val applyHolder = dialog.findViewById(R.id.apply_btt_holder)!! - val arrayAdapter = ArrayAdapter(view.context, R.layout.sort_bottom_single_choice) + val arrayAdapter = ArrayAdapter(searchView.context, R.layout.sort_bottom_single_choice) arrayAdapter.addAll(apiNames) listView.adapter = arrayAdapter listView.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE val typeChoices = listOf( - Pair("Movies", listOf(TvType.Movie)), - Pair("TvSeries", listOf(TvType.TvSeries)), - Pair("Cartoons", listOf(TvType.Cartoon)), - Pair("Anime", listOf(TvType.Anime, TvType.ONA, TvType.AnimeMovie)), - Pair("Torrent", listOf(TvType.Torrent)), + Pair(R.string.movies, listOf(TvType.Movie)), + Pair(R.string.tv_series, listOf(TvType.TvSeries)), + Pair(R.string.cartoons, listOf(TvType.Cartoon)), + Pair(R.string.anime, listOf(TvType.Anime, TvType.ONA, TvType.AnimeMovie)), + Pair(R.string.torrent, listOf(TvType.Torrent)), ) - val arrayAdapter2 = ArrayAdapter(view.context, R.layout.sort_bottom_single_choice) - arrayAdapter2.addAll(typeChoices.map { it.first }) + val arrayAdapter2 = ArrayAdapter(searchView.context, R.layout.sort_bottom_single_choice) + arrayAdapter2.addAll(typeChoices.map { getString(it.first) }) listView2.adapter = arrayAdapter2 listView2.choiceMode = AbsListView.CHOICE_MODE_MULTIPLE @@ -229,7 +229,7 @@ class SearchFragment : Fragment() { val settingsManagerLocal = PreferenceManager.getDefaultSharedPreferences(activity) val activeTypes = HashSet() - for ((index, name) in typeChoices.withIndex()) { + for ((index, _) in typeChoices.withIndex()) { if (listView2.checkedItemPositions[index]) { activeTypes.addAll(typeChoices[index].second) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt index b8b7bb2a..a45dd11e 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/search/SearchResultBuilder.kt @@ -65,7 +65,7 @@ object SearchResultBuilder { playImg?.visibility = View.VISIBLE if (!card.type.isMovieType()) { - cardText.text = getNameFull(card.name, card.episode, card.season) + cardText.text = cardText.context.getNameFull(card.name, card.episode, card.season) } } is AnimeSearchResponse -> { diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt index b1466f37..a41032d6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/AppUtils.kt @@ -47,23 +47,28 @@ object AppUtils { * | Season 1 - Episode 2 * | Episode 2 * **/ - fun getNameFull(name: String?, episode: Int?, season: Int?): String { + fun Context.getNameFull(name: String?, episode: Int?, season: Int?): String { val rEpisode = if (episode == 0) null else episode val rSeason = if (season == 0) null else season + val seasonName = getString(R.string.season) + val episodeName = getString(R.string.episode) + val seasonNameShort = getString(R.string.season_short) + val episodeNameShort = getString(R.string.episode_short) + if (name != null) { return if (rEpisode != null && rSeason != null) { - "S${rSeason}:E${rEpisode} $name" + "$seasonNameShort${rSeason}:$episodeNameShort${rEpisode} $name" } else if (rEpisode != null) { - "Episode $rEpisode. $name" + "$episodeName $rEpisode. $name" } else { name } } else { if (rEpisode != null && rSeason != null) { - return "Season $rSeason - Episode $rEpisode" + return "$seasonName $rSeason - $episodeName $rEpisode" } else if (rSeason == null) { - return "Episode $rEpisode" + return "$episodeName $rEpisode" } } return "" diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 8ee23bf5..0ce3169f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -1413,7 +1413,7 @@ object VideoDownloadManager { main { showToast( // can be replaced with regular Toast context, - "${pkg.item.ep.mainName}${pkg.item.ep.episode?.let { " Episode $it " } ?: " "}queued", + "${pkg.item.ep.mainName}${pkg.item.ep.episode?.let { " ${context.getString(R.string.episode)} $it " } ?: " "}${context.getString(R.string.queued)}", Toast.LENGTH_SHORT ) } diff --git a/app/src/main/res/layout/download_child_episode.xml b/app/src/main/res/layout/download_child_episode.xml index 20b0b010..2ff4f791 100644 --- a/app/src/main/res/layout/download_child_episode.xml +++ b/app/src/main/res/layout/download_child_episode.xml @@ -31,7 +31,7 @@ android:layout_gravity="center_vertical" android:id="@+id/download_child_episode_play" android:src="@drawable/ic_baseline_play_arrow_24" - android:contentDescription="@string/episode_play_descript"/> + android:contentDescription="@string/episode_play_des"/> + android:contentDescription="@string/change_providers_des"> diff --git a/app/src/main/res/layout/home_result_grid.xml b/app/src/main/res/layout/home_result_grid.xml index 649c3402..465a9e33 100644 --- a/app/src/main/res/layout/home_result_grid.xml +++ b/app/src/main/res/layout/home_result_grid.xml @@ -22,14 +22,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:foreground="?android:attr/selectableItemBackgroundBorderless" - android:contentDescription="@string/search_poster_descript"/> + android:contentDescription="@string/search_poster_des"/> + android:layout_gravity="bottom" android:contentDescription="@string/shadow_des"> + android:contentDescription="@string/episode_play_des"/> + android:contentDescription="@string/search_poster_des"/> + android:layout_gravity="bottom" android:contentDescription="@string/shadow_des"> + tools:ignore="RtlHardcoded" android:contentDescription="@string/search_poster_des"/> Λήψεις Ρυθμίσεις Ψάξε… - Αλλαγή Παροχών + Αλλαγή Παροχών search_providers_list search_type_list grid_format - Πόστερ + Πόστερ Χωρίς δεδομένα - Σκιά - Περισσότερες Επιλογές - Αναπαραγωγή Επισοδείου + Σκιά + Περισσότερες Επιλογές + Αναπαραγωγή Επισοδείου Πίσω Επόμενο Επισόδειο 10 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 8c772bf0..44727b7c 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -6,15 +6,15 @@ Downloads Instellingen Zoeken… - Aanbieders wijzigen + Aanbieders wijzigen search_providers_list search_type_list grid_format - Poster + Poster Geen gegevens - Schaduw - Meer Opties - Aflevering afspelen + Schaduw + Meer Opties + Aflevering afspelen Ga terug Volgende aflevering 10 diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index edbe9ce8..322e014e 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -15,15 +15,15 @@ - Chromecast Episode - Chromecast Mirror - Play In App - Play In VLC - Play In Browser - Copy Link - Auto Download - Download Mirror - Reload Links + @string/episode_action_chomecast_episode + @string/episode_action_chomecast_mirror + @string/episode_action_play_in_app + @string/episode_action_play_in_vlc + @string/episode_action_play_in_browser + @string/episode_action_copy_link + @string/episode_action_auto_download + @string/episode_action_download_mirror + @string/episode_action_reload_links 4 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ef18c75..97201254 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,20 +1,38 @@ + + search_providers_list + app_locale + search_type_list + grid_format + auto_update + prerelease_update + manual_check_update + fast_forward_button_time + + + %d %s | %sMB + %s • %sGB + %sMB / %sMB + %s %s + +%d + -%d + %d + %d + Speed (%fx) + CloudStream Home Search Downloads Settings Search… - Change Providers - search_providers_list - search_type_list - grid_format - Poster + Change Providers + Poster No Data - Shadow - More Options - Play Episode + Shadow + More Options + Play Episode Go back Next episode 10 @@ -55,7 +73,6 @@ Resume Download Pause Download - Sorry, the application crashed. An anonymous bug report will be sent to the developers Disable automatic bug reporting More info Hide @@ -69,7 +86,6 @@ Filter Bookmarks Bookmarks Remove - Play Episode Apply Cancel Player Speed @@ -80,14 +96,11 @@ Window Color Edge Type Subtitle Elevation - Reset to default value Preview Background Font Search using providers Search using types - auto_update - prerelease_update - manual_check_update + benene_count %d Benenes given to devs No Benenes given @@ -106,7 +119,7 @@ Description No Plot Found No Description Found - + Picture-in-picture Continues playback in a miniature player on top of other apps Player resize button @@ -120,7 +133,8 @@ Swipe to change settings Swipe on the left or right side to change brightness or volume Double tap to seek - Tap twice on the right or left side to seek forwards or backwards + Tap twice on the right or left side to seek forwards or backwards + Search Info Advanced Search @@ -137,4 +151,65 @@ Join Discord Give a benene to the devs Given benene + + App Language + + This provider has no chromecast support + "No Links Found" + Link copied to clipboard + Play Episode + Reset to default value + Sorry, the application crashed. An anonymous bug report will be sent to the + developers + + + Season + No Season + Episode + Episodes + S + E + + Delete File + Delete + Cancel + This will permanently delete %s\nAre you sure? + + Ongoing + Completed + Status + Year + Rating + Duration + Site + Synopsis + + queued + No Subtitles + Default + + Free + Used + App + + Movies + TvSeries + Cartoons + Anime + Torrent + + Source error + Remote error + Renderer error + Unexpected player error + + Chromecast Episode + Chromecast Mirror + Play In App + Play In VLC + Play in browser + Copy Link + Auto Download + Download Mirror + Reload Links diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 08209de5..287ae141 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -77,6 +77,11 @@ android:title="@string/info" app:isPreferenceVisible="true" > + +