Merge branch 'libre-tube:master' into master

This commit is contained in:
ձռօռყ_սռĸռօառ 2022-06-21 08:22:36 +05:30 committed by GitHub
commit 401a32c141
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
83 changed files with 1644 additions and 922 deletions

13
.github/checkrun.py vendored Normal file
View File

@ -0,0 +1,13 @@
from json import load
from os import system
f = open('commit.json')
data = load(f)
f.close()
message = data['commit']['message']
if "\n\n" in message:
if message.split("\n\n",1)[-1].split()[0] == "[SILENT]":
system('killall -9 python')

12
.github/compiler.sh vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/bash
cd ~
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install -y make git zlib1g-dev libssl-dev gperf cmake clang-10 libc++-dev libc++abi-dev
git clone --recursive https://github.com/tdlib/telegram-bot-api.git
rm -rf telegram-bot-api/build
mkdir -p telegram-bot-api/build
cd telegram-bot-api/build
CXXFLAGS="-stdlib=libc++" CC=/usr/bin/clang-10 CXX=/usr/bin/clang++-10 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=.. ..
cmake --build . --target install

36
.github/tg.py vendored
View File

@ -1,21 +1,33 @@
import telegram import telegram
from tgconfig import TG_TOKEN from tgconfig import *
from json import load from json import load
import multiprocessing
from os import system
from time import sleep as wait
f = open('commit.json') def deploy():
data = load(f) system(f'~/bot-api --local --api-id={TG_API_ID} --api-hash={TG_API_HASH}')
f.close()
TG_CHAT_ID = "-1001537505605" def bot():
bot = telegram.Bot(TG_TOKEN) wait(10)
f = open('commit.json')
data = load(f)
f.close()
bot.send_photo(TG_CHAT_ID, open('alpha.png', 'rb'), f'''*Libretube {data['sha'][0:7]} // Alpha* bot = telegram.Bot(TG_TOKEN, base_url="http://0.0.0.0:8081/bot")
bot.send_photo(TG_POST_ID, open('alpha.png', 'rb'), f'''*Libretube {data['sha'][0:7]} // Alpha*
{data['commit']['message']} [{data['commit']['message']}]({data['html_url']})
Signed-off-by: {data['commit']['author']['name']} Signed-off-by: {data['commit']['author']['name']}
''', parse_mode=telegram.ParseMode.MARKDOWN) ''', parse_mode=telegram.ParseMode.MARKDOWN)
bot.send_document(TG_CHAT_ID, open('app-arm64-v8a-debug.apk', 'rb')) bot.send_media_group(TG_POST_ID, [telegram.InputMediaDocument(open('app-x86-debug.apk', 'rb')), telegram.InputMediaDocument(open('app-x86_64-debug.apk', 'rb')), telegram.InputMediaDocument(open('app-armeabi-v7a-debug.apk', 'rb')), telegram.InputMediaDocument(open('app-arm64-v8a-debug.apk', 'rb'))])
bot.send_document(TG_CHAT_ID, open('app-armeabi-v7a-debug.apk', 'rb')) system('killall -9 python')
bot.send_document(TG_CHAT_ID, open('app-x86_64-debug.apk', 'rb'))
bot.send_document(TG_CHAT_ID, open('app-x86-debug.apk', 'rb')) if __name__ == '__main__':
multideploy = multiprocessing.Process(target=deploy)
multibot = multiprocessing.Process(target=bot)
multideploy.start()
multibot.start()
multideploy.join()
multibot.join()

32
.github/workflows/api-compiler.yml vendored Normal file
View File

@ -0,0 +1,32 @@
name: Bot API Compiler
on:
workflow_dispatch:
jobs:
debug-builds:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Prepare for Compilation
run: |
git config --global user.name "XelXen"
git config --global user.email "78258352+XelXen@users.noreply.github.com"
git config --global credential.helper store
echo "https://XelXen:${{ secrets.GH_TOKEN }}@github.com" > ~/.git-credentials
- name: Run Script
run: |
chmod 755 .github/compiler.sh
.github/compiler.sh
- name: Binary Archive
run: |
git clone https://github.com/LibreTubeAlpha/Telegram-BotAPI bot-api
rm -rf bot-api/*
mv ~/telegram-bot-api/bin/telegram-bot-api bot-api/exec
cd bot-api
git add -f *
git commit -m "WORKFLOW: BUILD BINARIES"
git push -u

View File

@ -1,4 +1,4 @@
name: Telegram Builder name: Telegram Bot
on: on:
workflow_dispatch: workflow_dispatch:
@ -20,6 +20,13 @@ jobs:
python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
- name: Check for Execution Orders
run: |
cd .github
curl https://api.github.com/repos/${{ github.repository }}/commits/${{ github.sha }} > commit.json
python checkrun.py
cd ..
- name: set up JDK 11 - name: set up JDK 11
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
@ -35,12 +42,17 @@ jobs:
./gradlew assembleDebug ./gradlew assembleDebug
- name: Telegram Bot - name: Telegram Bot
continue-on-error: true
run: | run: |
mv ./app/build/outputs/apk/debug/*.apk .github/ mv ./app/build/outputs/apk/debug/*.apk .github/
cd .github cd .github
curl https://libre-tube.github.io/assets/LibreAlpha.png --output alpha.png curl https://libre-tube.github.io/assets/LibreAlpha.png --output alpha.png
curl https://raw.githubusercontent.com/LibreTubeAlpha/Telegram-BotAPI/main/exec --output ~/bot-api
chmod 755 ~/bot-api
echo "TG_TOKEN = '${{ secrets.TG_TOKEN }}'" > tgconfig.py echo "TG_TOKEN = '${{ secrets.TG_TOKEN }}'" > tgconfig.py
curl https://api.github.com/repos/${{ github.repository }}/commits/${{ github.sha }} > commit.json echo "TG_API_ID = '${{ secrets.TG_API_ID }}'" >> tgconfig.py
echo "TG_POST_ID = '${{ secrets.TG_POST_ID }}'" >> tgconfig.py
echo "TG_API_HASH = '${{ secrets.TG_API_HASH }}'" >> tgconfig.py
python -m pip install --upgrade pip python -m pip install --upgrade pip
pip install python-telegram-bot pip install python-telegram-bot
python tg.py python tg.py

View File

@ -40,7 +40,11 @@
## Contributing ## Contributing
Whether you have ideas, translations, design changes, code cleaning, or real heavy code changes, help is always welcome. The more is done the better it gets! If creating a pr, please make sure to format the code with ktlint before. Whether you have ideas, translations, design changes, code cleaning, or real heavy code changes, help is always welcome.The more is done the better it gets!
If creating a pull request, please make sure to format your code (preferred ktlint) before.
If opening an issue without following the issue template, we will ignore the issue and force close it.
WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY. WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY.

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@ -15,7 +16,7 @@
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.MY" android:theme="@style/Theme.Purple"
android:name=".MyApp" android:name=".MyApp"
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
android:largeHeap="true" android:largeHeap="true"
@ -34,7 +35,8 @@
android:supportsPictureInPicture="true" android:supportsPictureInPicture="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:screenOrientation="userPortrait"> android:screenOrientation="userPortrait"
android:launchMode="singleTop">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />

View File

@ -77,7 +77,8 @@ class BackgroundMode {
DescriptionAdapter( DescriptionAdapter(
response?.title!!, response?.title!!,
response?.uploader!!, response?.uploader!!,
response?.thumbnailUrl!! response?.thumbnailUrl!!,
c
) )
) )
.build() .build()

View File

@ -5,3 +5,4 @@ const val WEBSITE_URL = "https://libre-tube.github.io/"
const val AUTHORS_URL = "https://github.com/libre-tube/LibreTube/graphs/contributors" const val AUTHORS_URL = "https://github.com/libre-tube/LibreTube/graphs/contributors"
const val DONATE_URL = "https://libre-tube.github.io/#donate" const val DONATE_URL = "https://libre-tube.github.io/#donate"
const val CONTRIBUTING_URL = "https://github.com/libre-tube/LibreTube#donate" const val CONTRIBUTING_URL = "https://github.com/libre-tube/LibreTube#donate"
const val PIPED_GITHUB_URL = "https://github.com/TeamPiped/Piped"

View File

@ -113,15 +113,30 @@ class DownloadService : Service() {
"mux" -> { "mux" -> {
audioDir = File(tempDir, "$videoId-audio") audioDir = File(tempDir, "$videoId-audio")
videoDir = File(tempDir, "$videoId-video") videoDir = File(tempDir, "$videoId-video")
downloadId = downloadManagerRequest("Video", "Downloading", videoUrl, videoDir) downloadId = downloadManagerRequest(
getString(R.string.video),
getString(R.string.downloading),
videoUrl,
videoDir
)
} }
"video" -> { "video" -> {
videoDir = File(libretubeDir, "$videoId-video") videoDir = File(libretubeDir, "$videoId-video")
downloadId = downloadManagerRequest("Video", "Downloading", videoUrl, videoDir) downloadId = downloadManagerRequest(
getString(R.string.video),
getString(R.string.downloading),
videoUrl,
videoDir
)
} }
"audio" -> { "audio" -> {
audioDir = File(libretubeDir, "$videoId-audio") audioDir = File(libretubeDir, "$videoId-audio")
downloadId = downloadManagerRequest("Audio", "Downloading", audioUrl, audioDir) downloadId = downloadManagerRequest(
getString(R.string.audio),
getString(R.string.downloading),
audioUrl,
audioDir
)
} }
} }
} catch (e: IllegalArgumentException) { } catch (e: IllegalArgumentException) {
@ -136,7 +151,12 @@ class DownloadService : Service() {
// Checking if the received broadcast is for our enqueued download by matching download id // Checking if the received broadcast is for our enqueued download by matching download id
if (downloadId == id) { if (downloadId == id) {
if (downloadType == "mux") { if (downloadType == "mux") {
downloadManagerRequest("Audio", "Downloading", audioUrl, audioDir) downloadManagerRequest(
getString(R.string.audio),
getString(R.string.downloading),
audioUrl,
audioDir
)
} else { } else {
downloadSucceededNotification() downloadSucceededNotification()
onDestroy() onDestroy()
@ -178,7 +198,7 @@ class DownloadService : Service() {
NotificationCompat.Builder(this@DownloadService, "download_service") NotificationCompat.Builder(this@DownloadService, "download_service")
.setSmallIcon(R.drawable.ic_download) .setSmallIcon(R.drawable.ic_download)
.setContentTitle("LibreTube") .setContentTitle("LibreTube")
.setContentText("Downloading") .setContentText(getString(R.string.downloading))
.setPriority(NotificationCompat.PRIORITY_LOW) .setPriority(NotificationCompat.PRIORITY_LOW)
.setOngoing(true) .setOngoing(true)
.setOnlyAlertOnce(true) .setOnlyAlertOnce(true)
@ -192,7 +212,7 @@ class DownloadService : Service() {
val builder = NotificationCompat.Builder(this@DownloadService, "download_service") val builder = NotificationCompat.Builder(this@DownloadService, "download_service")
.setSmallIcon(R.drawable.ic_download) .setSmallIcon(R.drawable.ic_download)
.setContentTitle(resources.getString(R.string.downloadfailed)) .setContentTitle(resources.getString(R.string.downloadfailed))
.setContentText("failure") .setContentText(getString(R.string.fail))
.setPriority(NotificationCompat.PRIORITY_HIGH) .setPriority(NotificationCompat.PRIORITY_HIGH)
with(NotificationManagerCompat.from(this@DownloadService)) { with(NotificationManagerCompat.from(this@DownloadService)) {
// notificationId is a unique int for each notification that you must define // notificationId is a unique int for each notification that you must define
@ -205,7 +225,7 @@ class DownloadService : Service() {
val builder = NotificationCompat.Builder(this@DownloadService, "download_service") val builder = NotificationCompat.Builder(this@DownloadService, "download_service")
.setSmallIcon(R.drawable.ic_download) .setSmallIcon(R.drawable.ic_download)
.setContentTitle(resources.getString(R.string.success)) .setContentTitle(resources.getString(R.string.success))
.setContentText("success") .setContentText(getString(R.string.fail))
.setPriority(NotificationCompat.PRIORITY_HIGH) .setPriority(NotificationCompat.PRIORITY_HIGH)
with(NotificationManagerCompat.from(this@DownloadService)) { with(NotificationManagerCompat.from(this@DownloadService)) {
// notificationId is a unique int for each notification that you must define // notificationId is a unique int for each notification that you must define

View File

@ -6,6 +6,7 @@ import android.content.Intent
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.content.res.Configuration import android.content.res.Configuration
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
@ -44,8 +45,9 @@ import com.google.android.material.color.DynamicColors
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
val TAG = "MainActivity" val TAG = "MainActivity"
lateinit var bottomNavigationView: BottomNavigationView lateinit var bottomNavigationView: BottomNavigationView
lateinit var toolbar: Toolbar private lateinit var toolbar: Toolbar
lateinit var navController: NavController lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -56,9 +58,9 @@ class MainActivity : AppCompatActivity() {
RetrofitInstance.url = RetrofitInstance.url =
sharedPreferences.getString("selectInstance", "https://pipedapi.kavin.rocks/")!! sharedPreferences.getString("selectInstance", "https://pipedapi.kavin.rocks/")!!
SponsorBlockSettings.sponsorBlockEnabled = SponsorBlockSettings.sponsorBlockEnabled =
sharedPreferences.getBoolean("sb_enabled_key", false) sharedPreferences.getBoolean("sb_enabled_key", true)
SponsorBlockSettings.sponsorNotificationsEnabled = SponsorBlockSettings.sponsorNotificationsEnabled =
sharedPreferences.getBoolean("sb_notifications_key", false) sharedPreferences.getBoolean("sb_notifications_key", true)
SponsorBlockSettings.introEnabled = SponsorBlockSettings.introEnabled =
sharedPreferences.getBoolean("intro_category_key", false) sharedPreferences.getBoolean("intro_category_key", false)
SponsorBlockSettings.selfPromoEnabled = SponsorBlockSettings.selfPromoEnabled =
@ -66,7 +68,7 @@ class MainActivity : AppCompatActivity() {
SponsorBlockSettings.interactionEnabled = SponsorBlockSettings.interactionEnabled =
sharedPreferences.getBoolean("interaction_category_key", false) sharedPreferences.getBoolean("interaction_category_key", false)
SponsorBlockSettings.sponsorsEnabled = SponsorBlockSettings.sponsorsEnabled =
sharedPreferences.getBoolean("sponsors_category_key", false) sharedPreferences.getBoolean("sponsors_category_key", true)
SponsorBlockSettings.outroEnabled = SponsorBlockSettings.outroEnabled =
sharedPreferences.getBoolean("outro_category_key", false) sharedPreferences.getBoolean("outro_category_key", false)
SponsorBlockSettings.fillerEnabled = SponsorBlockSettings.fillerEnabled =
@ -79,12 +81,8 @@ class MainActivity : AppCompatActivity() {
ThemeHelper().updateTheme(this) ThemeHelper().updateTheme(this)
LocaleHelper().updateLanguage(this) LocaleHelper().updateLanguage(this)
val connectivityManager = // show noInternet Activity if no internet available on app startup
this.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager if (!isNetworkAvailable(this)) {
val networkInfo = connectivityManager.activeNetworkInfo
val isConnected = networkInfo != null && networkInfo.isConnected
if (!isConnected) {
setContentView(R.layout.activity_nointernet) setContentView(R.layout.activity_nointernet)
findViewById<Button>(R.id.retry_button).setOnClickListener { findViewById<Button>(R.id.retry_button).setOnClickListener {
recreate() recreate()
@ -101,7 +99,13 @@ class MainActivity : AppCompatActivity() {
navController = findNavController(R.id.fragment) navController = findNavController(R.id.fragment)
bottomNavigationView.setupWithNavController(navController) bottomNavigationView.setupWithNavController(navController)
when (sharedPreferences.getString("default_tab", "home")!!) { // hide the trending page if enabled
val hideTrendingPage = sharedPreferences.getBoolean("hide_trending_page", false)
if (hideTrendingPage) bottomNavigationView.menu.findItem(R.id.home2).isVisible = false
// navigate to the default start tab
val defaultTab = sharedPreferences.getString("default_tab", "home")
when (defaultTab) {
"home" -> navController.navigate(R.id.home2) "home" -> navController.navigate(R.id.home2)
"subscriptions" -> navController.navigate(R.id.subscriptions) "subscriptions" -> navController.navigate(R.id.subscriptions)
"library" -> navController.navigate(R.id.library) "library" -> navController.navigate(R.id.library)
@ -112,17 +116,14 @@ class MainActivity : AppCompatActivity() {
R.id.home2 -> { R.id.home2 -> {
navController.backQueue.clear() navController.backQueue.clear()
navController.navigate(R.id.home2) navController.navigate(R.id.home2)
true
} }
R.id.subscriptions -> { R.id.subscriptions -> {
// navController.backQueue.clear() // navController.backQueue.clear()
navController.navigate(R.id.subscriptions) navController.navigate(R.id.subscriptions)
true
} }
R.id.library -> { R.id.library -> {
// navController.backQueue.clear() // navController.backQueue.clear()
navController.navigate(R.id.library) navController.navigate(R.id.library)
true
} }
} }
false false
@ -142,14 +143,12 @@ class MainActivity : AppCompatActivity() {
// settings activity stuff // settings activity stuff
val intent = Intent(this, SettingsActivity::class.java) val intent = Intent(this, SettingsActivity::class.java)
startActivity(intent) startActivity(intent)
true
} }
toolbar.setOnMenuItemClickListener { toolbar.setOnMenuItemClickListener {
when (it.itemId) { when (it.itemId) {
R.id.action_search -> { R.id.action_search -> {
navController.navigate(R.id.searchFragment) navController.navigate(R.id.searchFragment)
true
} }
} }
false false
@ -157,6 +156,28 @@ class MainActivity : AppCompatActivity() {
} }
} }
private fun isNetworkAvailable(context: Context): Boolean {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val nw = connectivityManager.activeNetwork ?: return false
val actNw = connectivityManager.getNetworkCapabilities(nw) ?: return false
return when {
// WiFi
actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
// Mobile
actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
// Ethernet
actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
// Bluetooth
actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> true
else -> false
}
} else {
return connectivityManager.activeNetworkInfo?.isConnected ?: false
}
}
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
val intentData: Uri? = intent?.data val intentData: Uri? = intent?.data
@ -184,7 +205,7 @@ class MainActivity : AppCompatActivity() {
Log.i(TAG, "URI Type: Playlist") Log.i(TAG, "URI Type: Playlist")
var playlist = data.query!! var playlist = data.query!!
if (playlist.contains("&")) { if (playlist.contains("&")) {
var playlists = playlist.split("&") val playlists = playlist.split("&")
for (v in playlists) { for (v in playlists) {
if (v.contains("list=")) { if (v.contains("list=")) {
playlist = v playlist = v
@ -216,7 +237,7 @@ class MainActivity : AppCompatActivity() {
Log.d("dafaq", data.query!!) Log.d("dafaq", data.query!!)
var watch = data.query!! var watch = data.query!!
if (watch.contains("&")) { if (watch.contains("&")) {
var watches = watch.split("&") val watches = watch.split("&")
for (v in watches) { for (v in watches) {
if (v.contains("v=")) { if (v.contains("v=")) {
watch = v watch = v
@ -224,7 +245,7 @@ class MainActivity : AppCompatActivity() {
} }
} }
} }
var bundle = Bundle() val bundle = Bundle()
bundle.putString("videoId", watch.replace("v=", "")) bundle.putString("videoId", watch.replace("v=", ""))
// for time stamped links // for time stamped links
if (data.query != null && data.query?.contains("t=")!!) { if (data.query != null && data.query?.contains("t=")!!) {
@ -233,8 +254,8 @@ class MainActivity : AppCompatActivity() {
} }
loadWatch(bundle) loadWatch(bundle)
} else { } else {
var watch = data.path!!.replace("/", "") val watch = data.path!!.replace("/", "")
var bundle = Bundle() val bundle = Bundle()
bundle.putString("videoId", watch) bundle.putString("videoId", watch)
// for time stamped links // for time stamped links
if (data.query != null && data.query?.contains("t=")!!) { if (data.query != null && data.query?.contains("t=")!!) {
@ -246,7 +267,7 @@ class MainActivity : AppCompatActivity() {
} }
private fun loadWatch(bundle: Bundle) { private fun loadWatch(bundle: Bundle) {
var frag = PlayerFragment() val frag = PlayerFragment()
frag.arguments = bundle frag.arguments = bundle
supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.remove(PlayerFragment()) .remove(PlayerFragment())
@ -278,11 +299,6 @@ class MainActivity : AppCompatActivity() {
isFullScreen = false isFullScreen = false
} else { } else {
navController.popBackStack() navController.popBackStack()
if (navController.currentBackStackEntry == null &&
(parent as View).id != R.id.settings
) {
super.onBackPressed()
}
} }
} catch (e: Exception) { } catch (e: Exception) {
// try catch to prevent nointernet activity to crash // try catch to prevent nointernet activity to crash

View File

@ -21,7 +21,8 @@ import com.github.libretube.obj.StreamItem
import com.github.libretube.util.RetrofitInstance import com.github.libretube.util.RetrofitInstance
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import java.io.IOException import java.io.IOException
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import retrofit2.HttpException import retrofit2.HttpException
@ -92,7 +93,7 @@ class PlaylistAdapter(
private fun removeFromPlaylist(token: String, position: Int) { private fun removeFromPlaylist(token: String, position: Int) {
fun run() { fun run() {
GlobalScope.launch { CoroutineScope(Dispatchers.IO).launch {
val response = try { val response = try {
RetrofitInstance.api.removeFromPlaylist( RetrofitInstance.api.removeFromPlaylist(
token, token,

View File

@ -13,6 +13,7 @@ import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.MainActivity import com.github.libretube.MainActivity
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.dialogs.PlaylistOptionsDialog
import com.github.libretube.dialogs.VideoOptionsDialog import com.github.libretube.dialogs.VideoOptionsDialog
import com.github.libretube.fragments.PlayerFragment import com.github.libretube.fragments.PlayerFragment
import com.github.libretube.obj.SearchItem import com.github.libretube.obj.SearchItem
@ -153,6 +154,12 @@ class SearchViewHolder(
val bundle = bundleOf("playlist_id" to item.url) val bundle = bundleOf("playlist_id" to item.url)
activity.navController.navigate(R.id.playlistFragment, bundle) activity.navController.navigate(R.id.playlistFragment, bundle)
} }
v.setOnLongClickListener {
val playlistId = item.url!!.replace("/playlist?list=", "")
PlaylistOptionsDialog(playlistId, v.context)
.show(childFragmentManager, "PlaylistOptionsDialog")
true
}
} }
fun bind(searchItem: SearchItem) { fun bind(searchItem: SearchItem) {

View File

@ -2,7 +2,6 @@ package com.github.libretube.dialogs
import android.app.Dialog import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
@ -27,6 +26,9 @@ class CustomInstanceDialog : DialogFragment() {
val instanceNameEditText = view.findViewById<TextInputEditText>(R.id.instanceName) val instanceNameEditText = view.findViewById<TextInputEditText>(R.id.instanceName)
val instanceApiUrlEditText = view.findViewById<TextInputEditText>(R.id.instanceApiUrl) val instanceApiUrlEditText = view.findViewById<TextInputEditText>(R.id.instanceApiUrl)
val instanceFrontendUrlEditText = view
.findViewById<TextInputEditText>(R.id.instanceFrontendUrl)
val addInstanceButton = view.findViewById<Button>(R.id.addInstance) val addInstanceButton = view.findViewById<Button>(R.id.addInstance)
val cancelButton = view.findViewById<Button>(R.id.cancel) val cancelButton = view.findViewById<Button>(R.id.cancel)
cancelButton.setOnClickListener { cancelButton.setOnClickListener {
@ -36,12 +38,15 @@ class CustomInstanceDialog : DialogFragment() {
addInstanceButton.setOnClickListener { addInstanceButton.setOnClickListener {
val instanceName = instanceNameEditText.text.toString() val instanceName = instanceNameEditText.text.toString()
val instanceApiUrl = instanceApiUrlEditText.text.toString() val instanceApiUrl = instanceApiUrlEditText.text.toString()
val instanceFrontendUrl = instanceFrontendUrlEditText.text.toString()
if (instanceName != "" && instanceApiUrl != "") { if (instanceName != "" && instanceApiUrl != "" && instanceFrontendUrl != "") {
try { try {
// check whether the URL is valid, otherwise catch // check whether the URL is valid, otherwise catch
val u = URL(instanceApiUrl).toURI() URL(instanceApiUrl).toURI()
saveCustomInstance(instanceName, instanceApiUrl) URL(instanceFrontendUrl).toURI()
saveCustomInstance(instanceName, instanceApiUrl, instanceFrontendUrl)
activity?.recreate() activity?.recreate()
dismiss() dismiss()
} catch (e: Exception) { } catch (e: Exception) {
@ -72,7 +77,11 @@ class CustomInstanceDialog : DialogFragment() {
} ?: throw IllegalStateException("Activity cannot be null") } ?: throw IllegalStateException("Activity cannot be null")
} }
private fun saveCustomInstance(instanceName: String, instanceApiUrl: String) { private fun saveCustomInstance(
instanceName: String,
instanceApiUrl: String,
instanceFrontendApiUrl: String
) {
val sharedPreferences = PreferenceManager val sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(requireContext()) .getDefaultSharedPreferences(requireContext())
@ -84,7 +93,7 @@ class CustomInstanceDialog : DialogFragment() {
emptyList() emptyList()
} }
// get the urls of the other custom instances // get the api urls of the other custom instances
var customInstancesUrls = try { var customInstancesUrls = try {
sharedPreferences sharedPreferences
.getStringSet("custom_instances_url", HashSet())!!.toList() .getStringSet("custom_instances_url", HashSet())!!.toList()
@ -92,15 +101,24 @@ class CustomInstanceDialog : DialogFragment() {
emptyList() emptyList()
} }
// get the frontend urls of the other custom instances
var customInstancesFrontendUrls = try {
sharedPreferences
.getStringSet("custom_instances_url", HashSet())!!.toList()
} catch (e: Exception) {
emptyList()
}
// append new instance to the list // append new instance to the list
customInstancesNames += instanceName customInstancesNames += instanceName
customInstancesUrls += instanceApiUrl customInstancesUrls += instanceApiUrl
Log.e(TAG, customInstancesNames.toString()) customInstancesFrontendUrls += instanceFrontendApiUrl
// save them to the shared preferences // save them to the shared preferences
sharedPreferences.edit() sharedPreferences.edit()
.putStringSet("custom_instances_name", HashSet(customInstancesNames)) .putStringSet("custom_instances_name", HashSet(customInstancesNames))
.putStringSet("custom_instances_url", HashSet(customInstancesUrls)) .putStringSet("custom_instances_url", HashSet(customInstancesUrls))
.putStringSet("custom_instances_frontend_url", HashSet(customInstancesFrontendUrls))
.apply() .apply()
} }
} }

View File

@ -10,7 +10,6 @@ import android.os.Environment
import android.util.Log import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import android.view.View import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.Button import android.widget.Button
import android.widget.Spinner import android.widget.Spinner
@ -26,18 +25,23 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
class DownloadDialog : DialogFragment() { class DownloadDialog : DialogFragment() {
private val TAG = "DownloadDialog" private val TAG = "DownloadDialog"
var streams: Streams = Streams()
var selectedVideo = 0 private lateinit var streams: Streams
var selectedAudio = 0
var duration = 0
private lateinit var videoId: String private lateinit var videoId: String
private var duration = 0
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let { return activity?.let {
streams = arguments?.getParcelable("streams")!! streams = arguments?.getParcelable("streams")!!
videoId = arguments?.getString("video_id")!! videoId = arguments?.getString("video_id")!!
val mainActivity = activity as MainActivity val mainActivity = activity as MainActivity
Log.e(TAG, "download button clicked!") val builder = MaterialAlertDialogBuilder(it)
// Get the layout inflater
val inflater = requireActivity().layoutInflater
var view: View = inflater.inflate(R.layout.dialog_download, null)
// request storage permissions if not granted yet
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Log.d("myz", "" + Build.VERSION.SDK_INT) Log.d("myz", "" + Build.VERSION.SDK_INT)
if (!Environment.isExternalStorageManager()) { if (!Environment.isExternalStorageManager()) {
@ -70,50 +74,45 @@ class DownloadDialog : DialogFragment() {
) )
} }
} }
var vidName = arrayListOf<String>() var vidName = arrayListOf<String>()
vidName.add("No video")
var vidUrl = arrayListOf<String>() var vidUrl = arrayListOf<String>()
// add empty selection
vidName.add(getString(R.string.no_video))
vidUrl.add("") vidUrl.add("")
// add all available video streams
for (vid in streams.videoStreams!!) { for (vid in streams.videoStreams!!) {
val name = vid.quality + " " + vid.format val name = vid.quality + " " + vid.format
vidName.add(name) vidName.add(name)
vidUrl.add(vid.url!!) vidUrl.add(vid.url!!)
} }
var audioName = arrayListOf<String>() var audioName = arrayListOf<String>()
audioName.add("No audio")
var audioUrl = arrayListOf<String>() var audioUrl = arrayListOf<String>()
// add empty selection
audioName.add(getString(R.string.no_audio))
audioUrl.add("") audioUrl.add("")
// add all available audio streams
for (audio in streams.audioStreams!!) { for (audio in streams.audioStreams!!) {
val name = audio.quality + " " + audio.format val name = audio.quality + " " + audio.format
audioName.add(name) audioName.add(name)
audioUrl.add(audio.url!!) audioUrl.add(audio.url!!)
} }
val builder = MaterialAlertDialogBuilder(it)
// Get the layout inflater
val inflater = requireActivity().layoutInflater
var view: View = inflater.inflate(R.layout.dialog_download, null)
val videoSpinner = view.findViewById<Spinner>(R.id.video_spinner) val videoSpinner = view.findViewById<Spinner>(R.id.video_spinner)
val videoArrayAdapter = ArrayAdapter<String>( val videoArrayAdapter = ArrayAdapter(
requireContext(), requireContext(),
android.R.layout.simple_spinner_item, android.R.layout.simple_spinner_item,
vidName vidName
) )
videoArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) videoArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
videoSpinner.adapter = videoArrayAdapter videoSpinner.adapter = videoArrayAdapter
videoSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { videoSpinner.setSelection(1)
override fun onItemSelected(
parent: AdapterView<*>,
view: View,
position: Int,
id: Long
) {
selectedVideo = position
Log.d(TAG, selectedVideo.toString())
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
val audioSpinner = view.findViewById<Spinner>(R.id.audio_spinner) val audioSpinner = view.findViewById<Spinner>(R.id.audio_spinner)
val audioArrayAdapter = ArrayAdapter( val audioArrayAdapter = ArrayAdapter(
requireContext(), requireContext(),
@ -122,27 +121,17 @@ class DownloadDialog : DialogFragment() {
) )
audioArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) audioArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
audioSpinner.adapter = audioArrayAdapter audioSpinner.adapter = audioArrayAdapter
audioSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { audioSpinner.setSelection(1)
override fun onItemSelected(
parent: AdapterView<*>,
view: View,
position: Int,
id: Long
) {
selectedAudio = position
Log.d(TAG, selectedAudio.toString())
}
override fun onNothingSelected(parent: AdapterView<*>?) {}
}
view.findViewById<Button>(R.id.download).setOnClickListener { view.findViewById<Button>(R.id.download).setOnClickListener {
val selectedAudioUrl = audioUrl[audioSpinner.selectedItemPosition]
val selectedVideoUrl = vidUrl[videoSpinner.selectedItemPosition]
val intent = Intent(context, DownloadService::class.java) val intent = Intent(context, DownloadService::class.java)
intent.putExtra("videoId", videoId) intent.putExtra("videoId", videoId)
intent.putExtra("videoUrl", vidUrl[selectedVideo]) intent.putExtra("videoUrl", selectedVideoUrl)
intent.putExtra("audioUrl", audioUrl[selectedAudio]) intent.putExtra("audioUrl", selectedAudioUrl)
intent.putExtra("duration", duration) intent.putExtra("duration", duration)
// intent.putExtra("command","-y -i ${response.videoStreams[which].url} -i ${response.audioStreams!![0].url} -c copy ${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)}/${videoId}.mkv")
context?.startService(intent) context?.startService(intent)
dismiss() dismiss()
} }

View File

@ -0,0 +1,77 @@
package com.github.libretube.dialogs
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import androidx.fragment.app.DialogFragment
import com.github.libretube.R
import com.github.libretube.obj.PlaylistId
import com.github.libretube.util.RetrofitInstance
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.io.IOException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import retrofit2.HttpException
class PlaylistOptionsDialog(
private val playlistId: String,
context: Context
) : DialogFragment() {
val TAG = "PlaylistOptionsDialog"
private val optionsList = listOf(
context.getString(R.string.clonePlaylist),
context.getString(R.string.share)
)
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = MaterialAlertDialogBuilder(requireContext())
.setNegativeButton(R.string.cancel) { dialog, _ ->
dialog.dismiss()
}
.setAdapter(
ArrayAdapter(
requireContext(),
R.layout.video_options_dialog_item,
optionsList
)
) { _, which ->
when (which) {
// Clone the playlist to the users Piped account
0 -> {
val sharedPref =
context?.getSharedPreferences("token", Context.MODE_PRIVATE)
val token = sharedPref?.getString("token", "")!!
importPlaylist(token, playlistId)
}
// share the playlist
1 -> {
val shareDialog = ShareDialog(playlistId, true)
// using parentFragmentManager is important here
shareDialog.show(parentFragmentManager, "ShareDialog")
}
}
}
return dialog.show()
}
private fun importPlaylist(token: String, playlistId: String) {
fun run() {
CoroutineScope(Dispatchers.IO).launch {
val response = try {
RetrofitInstance.api.importPlaylist(token, PlaylistId(playlistId))
} catch (e: IOException) {
println(e)
return@launch
} catch (e: HttpException) {
return@launch
}
Log.e(TAG, response.toString())
}
}
run()
}
}

View File

@ -7,39 +7,43 @@ import androidx.fragment.app.DialogFragment
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.github.libretube.R import com.github.libretube.R
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.net.URLEncoder
class ShareDialog(private val videoId: String) : DialogFragment() { class ShareDialog(
private val id: String,
private val isPlaylist: Boolean
) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let { return activity?.let {
val sharedPreferences = var shareOptions = arrayOf(
PreferenceManager.getDefaultSharedPreferences(requireContext()) getString(R.string.piped),
val instancePref = sharedPreferences.getString( getString(R.string.youtube)
"selectInstance",
"https://pipedapi.kavin.rocks"
)!!
val instance = "&instance=${URLEncoder.encode(instancePref, "UTF-8")}"
val shareOptions = arrayOf(
context?.getString(R.string.piped),
context?.getString(R.string.instance),
context?.getString(R.string.youtube)
) )
val instanceUrl = getCustomInstanceFrontendUrl()
// add instanceUrl option if custom instance frontend url available
if (instanceUrl != "") shareOptions += getString(R.string.instance)
MaterialAlertDialogBuilder(requireContext()) MaterialAlertDialogBuilder(requireContext())
.setTitle(context?.getString(R.string.share)) .setTitle(context?.getString(R.string.share))
.setItems( .setItems(
shareOptions shareOptions
) { _, id -> ) { _, which ->
val url = when (id) { val host = when (which) {
0 -> "https://piped.kavin.rocks/watch?v=$videoId" 0 -> "https://piped.kavin.rocks"
1 -> "https://piped.kavin.rocks/watch?v=$videoId$instance" 1 -> "https://youtube.com"
2 -> "https://youtu.be/$videoId" // only available for custom instances
else -> "https://piped.kavin.rocks/watch?v=$videoId" else -> instanceUrl
} }
val path = if (!isPlaylist) "/watch?v=$id" else "/playlist?list=$id"
val url = "$host$path"
val intent = Intent() val intent = Intent()
intent.action = Intent.ACTION_SEND intent.apply {
intent.putExtra(Intent.EXTRA_TEXT, url) action = Intent.ACTION_SEND
intent.type = "text/plain" putExtra(Intent.EXTRA_TEXT, url)
type = "text/plain"
}
context?.startActivity( context?.startActivity(
Intent.createChooser(intent, context?.getString(R.string.shareTo)) Intent.createChooser(intent, context?.getString(R.string.shareTo))
) )
@ -47,4 +51,38 @@ class ShareDialog(private val videoId: String) : DialogFragment() {
.show() .show()
} ?: throw IllegalStateException("Activity cannot be null") } ?: throw IllegalStateException("Activity cannot be null")
} }
// get the frontend url if it's a custom instance
private fun getCustomInstanceFrontendUrl(): String {
val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(requireContext())
val instancePref = sharedPreferences.getString(
"selectInstance",
"https://pipedapi.kavin.rocks"
)
// get the api urls of the other custom instances
var customInstancesUrls = try {
sharedPreferences
.getStringSet("custom_instances_url", HashSet())!!.toList()
} catch (e: Exception) {
emptyList()
}
// get the frontend urls of the other custom instances
var customInstancesFrontendUrls = try {
sharedPreferences
.getStringSet("custom_instances_url", HashSet())!!.toList()
} catch (e: Exception) {
emptyList()
}
// return the custom instance frontend url if available
return if (customInstancesUrls.contains(instancePref)) {
val index = customInstancesUrls.indexOf(instancePref)
return customInstancesFrontendUrls[index]
} else {
""
}
}
} }

View File

@ -19,7 +19,7 @@ class VideoOptionsDialog(private val videoId: String, context: Context) : Dialog
/** /**
* List that stores the different menu options. In the future could be add more options here. * List that stores the different menu options. In the future could be add more options here.
*/ */
private val list = listOf( private val optionsList = listOf(
context.getString(R.string.playOnBackground), context.getString(R.string.playOnBackground),
context.getString(R.string.addToPlaylist), context.getString(R.string.addToPlaylist),
context.getString(R.string.share) context.getString(R.string.share)
@ -37,9 +37,9 @@ class VideoOptionsDialog(private val videoId: String, context: Context) : Dialog
ArrayAdapter( ArrayAdapter(
requireContext(), requireContext(),
R.layout.video_options_dialog_item, R.layout.video_options_dialog_item,
list optionsList
) )
) { dialog, which -> ) { _, which ->
// For now, this checks the position of the option with the position that is in the // For now, this checks the position of the option with the position that is in the
// list. I don't like it, but we will do like this for now. // list. I don't like it, but we will do like this for now.
when (which) { when (which) {
@ -66,13 +66,10 @@ class VideoOptionsDialog(private val videoId: String, context: Context) : Dialog
} }
} }
2 -> { 2 -> {
val shareDialog = ShareDialog(videoId) val shareDialog = ShareDialog(videoId, false)
// using parentFragmentManager is important here // using parentFragmentManager is important here
shareDialog.show(parentFragmentManager, "ShareDialog") shareDialog.show(parentFragmentManager, "ShareDialog")
} }
else -> {
dialog.dismiss()
}
} }
} }
.show() .show()

View File

@ -18,6 +18,7 @@ import com.github.libretube.R
import com.github.libretube.adapters.PlaylistsAdapter import com.github.libretube.adapters.PlaylistsAdapter
import com.github.libretube.dialogs.CreatePlaylistDialog import com.github.libretube.dialogs.CreatePlaylistDialog
import com.github.libretube.util.RetrofitInstance import com.github.libretube.util.RetrofitInstance
import com.google.android.material.floatingactionbutton.FloatingActionButton
import java.io.IOException import java.io.IOException
import retrofit2.HttpException import retrofit2.HttpException
@ -68,16 +69,7 @@ class Library : Fragment() {
} }
} else { } else {
refreshLayout.isEnabled = false refreshLayout.isEnabled = false
view.findViewById<com.google.android.material.floatingactionbutton view.findViewById<FloatingActionButton>(R.id.create_playlist).visibility = View.GONE
.FloatingActionButton>(R.id.create_playlist).visibility = View.GONE
with(view.findViewById<ImageView>(R.id.boogh2)) {
visibility = View.VISIBLE
setImageResource(R.drawable.ic_login)
}
with(view.findViewById<TextView>(R.id.textLike2)) {
visibility = View.VISIBLE
text = getString(R.string.please_login)
}
} }
} }

View File

@ -10,6 +10,7 @@ import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION.SDK_INT
import android.os.Bundle import android.os.Bundle
import android.os.PowerManager
import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.MediaSessionCompat
import android.text.Html import android.text.Html
import android.text.TextUtils import android.text.TextUtils
@ -27,7 +28,6 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.constraintlayout.motion.widget.MotionLayout import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.view.isVisible import androidx.core.view.isVisible
@ -51,9 +51,9 @@ import com.github.libretube.obj.ChapterSegment
import com.github.libretube.obj.PipedStream import com.github.libretube.obj.PipedStream
import com.github.libretube.obj.Segment import com.github.libretube.obj.Segment
import com.github.libretube.obj.Segments import com.github.libretube.obj.Segments
import com.github.libretube.obj.StreamItem
import com.github.libretube.obj.Streams import com.github.libretube.obj.Streams
import com.github.libretube.obj.Subscribe import com.github.libretube.obj.Subscribe
import com.github.libretube.obj.StreamItem
import com.github.libretube.preferences.SponsorBlockSettings import com.github.libretube.preferences.SponsorBlockSettings
import com.github.libretube.util.CronetHelper import com.github.libretube.util.CronetHelper
import com.github.libretube.util.DescriptionAdapter import com.github.libretube.util.DescriptionAdapter
@ -87,8 +87,6 @@ import com.squareup.picasso.Picasso
import java.io.IOException import java.io.IOException
import java.util.concurrent.Executors import java.util.concurrent.Executors
import kotlin.math.abs import kotlin.math.abs
import kotlinx.coroutines.NonCancellable.isActive
import org.chromium.base.ThreadUtils.runOnUiThread
import org.chromium.net.CronetEngine import org.chromium.net.CronetEngine
import retrofit2.HttpException import retrofit2.HttpException
@ -194,19 +192,12 @@ class PlayerFragment : Fragment() {
val mainMotionLayout = val mainMotionLayout =
mainActivity.findViewById<MotionLayout>(R.id.mainMotionLayout) mainActivity.findViewById<MotionLayout>(R.id.mainMotionLayout)
if (currentId == eId) { if (currentId == eId) {
view.findViewById<ImageButton>(R.id.exo_play_pause).visibility = View.GONE exoPlayerView.hideController()
view.findViewById<ImageButton>(R.id.quality_select).visibility = View.GONE exoPlayerView.useController = false
view.findViewById<ImageButton>(R.id.close_imageButton).visibility = View.GONE
view.findViewById<TextView>(R.id.quality_text).visibility = View.GONE
view.findViewById<ImageButton>(R.id.aspect_ratio_button).visibility = View.GONE
mainMotionLayout.progress = 1.toFloat() mainMotionLayout.progress = 1.toFloat()
} else if (currentId == sId) { } else if (currentId == sId) {
view.findViewById<ImageButton>(R.id.exo_play_pause).visibility = View.VISIBLE exoPlayerView.showController()
view.findViewById<ImageButton>(R.id.quality_select).visibility = View.VISIBLE exoPlayerView.useController = true
view.findViewById<ImageButton>(R.id.close_imageButton).visibility = View.VISIBLE
view.findViewById<TextView>(R.id.quality_text).visibility = View.VISIBLE
view.findViewById<ImageButton>(R.id.aspect_ratio_button)
.visibility = View.VISIBLE
mainMotionLayout.progress = 0.toFloat() mainMotionLayout.progress = 0.toFloat()
} }
} }
@ -253,8 +244,8 @@ class PlayerFragment : Fragment() {
} }
view.findViewById<RelativeLayout>(R.id.player_title_layout).setOnClickListener { view.findViewById<RelativeLayout>(R.id.player_title_layout).setOnClickListener {
val image = view.findViewById<ImageView>(R.id.player_description_arrow) val arrowImageView = view.findViewById<ImageView>(R.id.player_description_arrow)
image.animate().rotationBy(180F).setDuration(100).start() arrowImageView.animate().rotationBy(180F).setDuration(100).start()
if (playerDescription.isVisible) { if (playerDescription.isVisible) {
playerDescription.visibility = View.GONE playerDescription.visibility = View.GONE
} else { } else {
@ -333,6 +324,23 @@ class PlayerFragment : Fragment() {
if (!commentsLoaded!!) fetchComments() if (!commentsLoaded!!) fetchComments()
} }
override fun onPause() {
// pause the player if the screen is turned off
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
val pausePlayerOnScreenOffEnabled = sharedPreferences
.getBoolean("pause_screen_off", false)
// check whether the screen is on
val pm = context?.getSystemService(Context.POWER_SERVICE) as PowerManager
val isScreenOn = pm.isInteractive
// pause player if screen off and setting enabled
if (exoPlayer != null && !isScreenOn && pausePlayerOnScreenOffEnabled) {
exoPlayer.pause()
}
super.onPause()
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
try { try {
@ -556,7 +564,7 @@ class PlayerFragment : Fragment() {
// share button // share button
view.findViewById<LinearLayout>(R.id.relPlayer_share).setOnClickListener { view.findViewById<LinearLayout>(R.id.relPlayer_share).setOnClickListener {
val shareDialog = ShareDialog(videoId!!) val shareDialog = ShareDialog(videoId!!, false)
shareDialog.show(childFragmentManager, "ShareDialog") shareDialog.show(childFragmentManager, "ShareDialog")
} }
// check if livestream // check if livestream
@ -721,11 +729,11 @@ class PlayerFragment : Fragment() {
} }
// create a list of subtitles // create a list of subtitles
val subtitle = mutableListOf<SubtitleConfiguration>() val subtitle = mutableListOf<SubtitleConfiguration>()
if (response.subtitles!!.isNotEmpty()) { response.subtitles!!.forEach {
subtitle.add( subtitle.add(
SubtitleConfiguration.Builder(response.subtitles[0].url!!.toUri()) SubtitleConfiguration.Builder(it.url!!.toUri())
.setMimeType(response.subtitles[0].mimeType!!) // The correct MIME type (required). .setMimeType(it.mimeType!!) // The correct MIME type (required).
.setLanguage(response.subtitles[0].code) // The subtitle language (optional). .setLanguage(it.code) // The subtitle language (optional).
.build() .build()
) )
} }
@ -811,7 +819,9 @@ class PlayerFragment : Fragment() {
private fun createExoPlayer(view: View) { private fun createExoPlayer(view: View) {
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
val playbackSpeed = sharedPreferences.getString("playback_speed", "1F")?.toFloat() val playbackSpeed = sharedPreferences.getString("playback_speed", "1F")?.toFloat()
val bufferingGoal = sharedPreferences.getString("buffering_goal", "50")?.toInt()!! // multiply by thousand: s -> ms
val bufferingGoal = sharedPreferences.getString("buffering_goal", "50")?.toInt()!! * 1000
val seekIncrement = sharedPreferences.getString("seek_increment", "5")?.toLong()!! * 1000
val cronetEngine: CronetEngine = CronetHelper.getCronetEngine() val cronetEngine: CronetEngine = CronetHelper.getCronetEngine()
val cronetDataSourceFactory: CronetDataSource.Factory = val cronetDataSourceFactory: CronetDataSource.Factory =
@ -834,7 +844,7 @@ class PlayerFragment : Fragment() {
.setBackBuffer(1000 * 60 * 3, true) .setBackBuffer(1000 * 60 * 3, true)
.setBufferDurationsMs( .setBufferDurationsMs(
DefaultLoadControl.DEFAULT_MIN_BUFFER_MS, DefaultLoadControl.DEFAULT_MIN_BUFFER_MS,
bufferingGoal * 1000, // buffering goal, s -> ms bufferingGoal,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS, DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS
) )
@ -843,8 +853,8 @@ class PlayerFragment : Fragment() {
exoPlayer = ExoPlayer.Builder(view.context) exoPlayer = ExoPlayer.Builder(view.context)
.setMediaSourceFactory(DefaultMediaSourceFactory(dataSourceFactory)) .setMediaSourceFactory(DefaultMediaSourceFactory(dataSourceFactory))
.setLoadControl(loadControl) .setLoadControl(loadControl)
.setSeekBackIncrementMs(5000) .setSeekBackIncrementMs(seekIncrement)
.setSeekForwardIncrementMs(5000) .setSeekForwardIncrementMs(seekIncrement)
.build() .build()
exoPlayer.setAudioAttributes(audioAttributes, true) exoPlayer.setAudioAttributes(audioAttributes, true)
@ -865,7 +875,7 @@ class PlayerFragment : Fragment() {
playerNotification = PlayerNotificationManager playerNotification = PlayerNotificationManager
.Builder(c, 1, "background_mode") .Builder(c, 1, "background_mode")
.setMediaDescriptionAdapter( .setMediaDescriptionAdapter(
DescriptionAdapter(title, uploader, thumbnailUrl) DescriptionAdapter(title, uploader, thumbnailUrl, requireContext())
) )
.build() .build()
@ -1029,12 +1039,12 @@ class PlayerFragment : Fragment() {
super.onPictureInPictureModeChanged(isInPictureInPictureMode) super.onPictureInPictureModeChanged(isInPictureInPictureMode)
if (isInPictureInPictureMode) { if (isInPictureInPictureMode) {
exoPlayerView.hideController() exoPlayerView.hideController()
exoPlayerView.useController = false
with(motionLayout) { with(motionLayout) {
getConstraintSet(R.id.start).constrainHeight(R.id.player, -1) getConstraintSet(R.id.start).constrainHeight(R.id.player, -1)
enableTransition(R.id.yt_transition, false) enableTransition(R.id.yt_transition, false)
} }
view?.findViewById<ConstraintLayout>(R.id.main_container)?.isClickable = true view?.findViewById<ConstraintLayout>(R.id.main_container)?.isClickable = true
view?.findViewById<LinearLayout>(R.id.linLayout)?.visibility = View.GONE
view?.findViewById<FrameLayout>(R.id.top_bar)?.visibility = View.GONE view?.findViewById<FrameLayout>(R.id.top_bar)?.visibility = View.GONE
val mainActivity = activity as MainActivity val mainActivity = activity as MainActivity
mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
@ -1044,8 +1054,9 @@ class PlayerFragment : Fragment() {
getConstraintSet(R.id.start).constrainHeight(R.id.player, 0) getConstraintSet(R.id.start).constrainHeight(R.id.player, 0)
enableTransition(R.id.yt_transition, true) enableTransition(R.id.yt_transition, true)
} }
exoPlayerView.showController()
exoPlayerView.useController = true
view?.findViewById<ConstraintLayout>(R.id.main_container)?.isClickable = false view?.findViewById<ConstraintLayout>(R.id.main_container)?.isClickable = false
view?.findViewById<LinearLayout>(R.id.linLayout)?.visibility = View.VISIBLE
view?.findViewById<FrameLayout>(R.id.top_bar)?.visibility = View.VISIBLE view?.findViewById<FrameLayout>(R.id.top_bar)?.visibility = View.VISIBLE
} }
} }

View File

@ -6,6 +6,7 @@ import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ProgressBar
import android.widget.ScrollView import android.widget.ScrollView
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@ -19,15 +20,16 @@ import java.io.IOException
import retrofit2.HttpException import retrofit2.HttpException
class PlaylistFragment : Fragment() { class PlaylistFragment : Fragment() {
private var playlist_id: String? = null
private val TAG = "PlaylistFragment" private val TAG = "PlaylistFragment"
private var playlistId: String? = null
var nextPage: String? = null var nextPage: String? = null
var playlistAdapter: PlaylistAdapter? = null var playlistAdapter: PlaylistAdapter? = null
var isLoading = true var isLoading = true
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
arguments?.let { arguments?.let {
playlist_id = it.getString("playlist_id") playlistId = it.getString("playlist_id")
} }
} }
@ -43,11 +45,12 @@ class PlaylistFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
playlist_id = playlist_id!!.replace("/playlist?list=", "") playlistId = playlistId!!.replace("/playlist?list=", "")
view.findViewById<TextView>(R.id.playlist_name).text = playlist_id
val recyclerView = view.findViewById<RecyclerView>(R.id.playlist_recView) val recyclerView = view.findViewById<RecyclerView>(R.id.playlist_recView)
recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.layoutManager = LinearLayoutManager(context)
val progressBar = view.findViewById<ProgressBar>(R.id.playlist_progress)
progressBar.visibility = View.VISIBLE
fetchPlaylist(view) fetchPlaylist(view)
} }
@ -55,7 +58,7 @@ class PlaylistFragment : Fragment() {
fun run() { fun run() {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
val response = try { val response = try {
RetrofitInstance.api.getPlaylist(playlist_id!!) RetrofitInstance.api.getPlaylist(playlistId!!)
} catch (e: IOException) { } catch (e: IOException) {
println(e) println(e)
Log.e(TAG, "IOException, you might not have internet connection") Log.e(TAG, "IOException, you might not have internet connection")
@ -67,10 +70,11 @@ class PlaylistFragment : Fragment() {
nextPage = response.nextpage nextPage = response.nextpage
isLoading = false isLoading = false
runOnUiThread { runOnUiThread {
view.findViewById<ProgressBar>(R.id.playlist_progress).visibility = View.GONE
view.findViewById<TextView>(R.id.playlist_name).text = response.name view.findViewById<TextView>(R.id.playlist_name).text = response.name
view.findViewById<TextView>(R.id.playlist_uploader).text = response.uploader view.findViewById<TextView>(R.id.playlist_uploader).text = response.uploader
view.findViewById<TextView>(R.id.playlist_totVideos).text = view.findViewById<TextView>(R.id.playlist_totVideos).text =
response.videos.toString() + " Videos" getString(R.string.videoCount, response.videos.toString())
val sharedPref2 = val sharedPref2 =
context?.getSharedPreferences("username", Context.MODE_PRIVATE) context?.getSharedPreferences("username", Context.MODE_PRIVATE)
val user = sharedPref2?.getString("username", "") val user = sharedPref2?.getString("username", "")
@ -80,7 +84,7 @@ class PlaylistFragment : Fragment() {
} }
playlistAdapter = PlaylistAdapter( playlistAdapter = PlaylistAdapter(
response.relatedStreams!!.toMutableList(), response.relatedStreams!!.toMutableList(),
playlist_id!!, playlistId!!,
isOwner, isOwner,
requireActivity(), requireActivity(),
childFragmentManager childFragmentManager
@ -112,7 +116,7 @@ class PlaylistFragment : Fragment() {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
val response = try { val response = try {
RetrofitInstance.api.getPlaylistNextPage(playlist_id!!, nextPage!!) RetrofitInstance.api.getPlaylistNextPage(playlistId!!, nextPage!!)
} catch (e: IOException) { } catch (e: IOException) {
println(e) println(e)
Log.e(TAG, "IOException, you might not have internet connection") Log.e(TAG, "IOException, you might not have internet connection")

View File

@ -6,9 +6,6 @@ import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.LinearInterpolator
import android.view.animation.RotateAnimation
import android.widget.ImageView import android.widget.ImageView
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.RelativeLayout import android.widget.RelativeLayout
@ -79,9 +76,13 @@ class Subscriptions : Fragment() {
} }
var toggleSubs = view.findViewById<RelativeLayout>(R.id.toggle_subs) var toggleSubs = view.findViewById<RelativeLayout>(R.id.toggle_subs)
val arrowImageView = view.findViewById<ImageView>(R.id.toggle)
toggleSubs.visibility = View.VISIBLE toggleSubs.visibility = View.VISIBLE
var loadedSubbedChannels = false var loadedSubbedChannels = false
toggleSubs.setOnClickListener { toggleSubs.setOnClickListener {
arrowImageView.animate().rotationBy(180F).setDuration(100).start()
if (!channelRecView.isVisible) { if (!channelRecView.isVisible) {
if (!loadedSubbedChannels) { if (!loadedSubbedChannels) {
channelRecView?.layoutManager = LinearLayoutManager(context) channelRecView?.layoutManager = LinearLayoutManager(context)
@ -90,21 +91,6 @@ class Subscriptions : Fragment() {
} }
channelRecView.visibility = View.VISIBLE channelRecView.visibility = View.VISIBLE
feedRecView.visibility = View.GONE feedRecView.visibility = View.GONE
// toggle button
val rotate = RotateAnimation(
0F,
180F,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f
)
rotate.duration = 100
rotate.interpolator = LinearInterpolator()
rotate.fillAfter = true
val image = view.findViewById<ImageView>(R.id.toggle)
image.startAnimation(rotate)
} else { } else {
channelRecView.visibility = View.GONE channelRecView.visibility = View.GONE
feedRecView.visibility = View.VISIBLE feedRecView.visibility = View.VISIBLE

View File

@ -12,9 +12,9 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.github.libretube.AUTHORS_URL import com.github.libretube.AUTHORS_URL
import com.github.libretube.BuildConfig
import com.github.libretube.CONTRIBUTING_URL import com.github.libretube.CONTRIBUTING_URL
import com.github.libretube.DONATE_URL import com.github.libretube.DONATE_URL
import com.github.libretube.PIPED_GITHUB_URL
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.WEBSITE_URL import com.github.libretube.WEBSITE_URL
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -33,9 +33,6 @@ class AboutFragment : Fragment() {
val topBarText = activity?.findViewById<TextView>(R.id.topBar_textView) val topBarText = activity?.findViewById<TextView>(R.id.topBar_textView)
topBarText?.text = getString(R.string.about) topBarText?.text = getString(R.string.about)
val appVersion = view.findViewById<TextView>(R.id.app_version)
appVersion.text = BuildConfig.VERSION_NAME
val website = view.findViewById<LinearLayout>(R.id.website) val website = view.findViewById<LinearLayout>(R.id.website)
website.setOnClickListener { website.setOnClickListener {
openLinkFromHref(WEBSITE_URL) openLinkFromHref(WEBSITE_URL)
@ -44,6 +41,10 @@ class AboutFragment : Fragment() {
authors.setOnClickListener { authors.setOnClickListener {
openLinkFromHref(AUTHORS_URL) openLinkFromHref(AUTHORS_URL)
} }
val piped = view.findViewById<LinearLayout>(R.id.piped)
piped.setOnClickListener {
openLinkFromHref(PIPED_GITHUB_URL)
}
val donate = view.findViewById<LinearLayout>(R.id.donate) val donate = view.findViewById<LinearLayout>(R.id.donate)
donate.setOnClickListener { donate.setOnClickListener {
openLinkFromHref(DONATE_URL) openLinkFromHref(DONATE_URL)

View File

@ -5,6 +5,7 @@ import android.widget.TextView
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.requireMainActivityRestart import com.github.libretube.requireMainActivityRestart
import com.github.libretube.util.ThemeHelper import com.github.libretube.util.ThemeHelper
@ -42,5 +43,11 @@ class AppearanceSettings : PreferenceFragmentCompat() {
requireMainActivityRestart = true requireMainActivityRestart = true
true true
} }
val hideTrending = findPreference<SwitchPreference>("hide_trending_page")
hideTrending?.setOnPreferenceChangeListener { _, _ ->
requireMainActivityRestart = true
true
}
} }
} }

View File

@ -56,16 +56,16 @@ class MainSettings : PreferenceFragmentCompat() {
true true
} }
val advanced = findPreference<Preference>("advanced") val player = findPreference<Preference>("player")
advanced?.setOnPreferenceClickListener { player?.setOnPreferenceClickListener {
val newFragment = AdvancedSettings() val newFragment = PlayerSettings()
navigateSettings(newFragment) navigateSettings(newFragment)
true true
} }
val about = findPreference<Preference>("about") val advanced = findPreference<Preference>("advanced")
about?.setOnPreferenceClickListener { advanced?.setOnPreferenceClickListener {
val newFragment = AboutFragment() val newFragment = AdvancedSettings()
navigateSettings(newFragment) navigateSettings(newFragment)
true true
} }
@ -76,6 +76,13 @@ class MainSettings : PreferenceFragmentCompat() {
checkUpdate(childFragmentManager) checkUpdate(childFragmentManager)
true true
} }
val about = findPreference<Preference>("about")
about?.setOnPreferenceClickListener {
val newFragment = AboutFragment()
navigateSettings(newFragment)
true
}
} }
private fun navigateSettings(newFragment: Fragment) { private fun navigateSettings(newFragment: Fragment) {

View File

@ -0,0 +1,17 @@
package com.github.libretube.preferences
import android.os.Bundle
import android.widget.TextView
import androidx.preference.PreferenceFragmentCompat
import com.github.libretube.R
class PlayerSettings : PreferenceFragmentCompat() {
val TAG = "PlayerSettings"
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.player_settings, rootKey)
val topBarTextView = activity?.findViewById<TextView>(R.id.topBar_textView)
topBarTextView?.text = getString(R.string.player)
}
}

View File

@ -1,8 +1,11 @@
package com.github.libretube.util package com.github.libretube.util
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import com.github.libretube.MainActivity
import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.ui.PlayerNotificationManager import com.google.android.exoplayer2.ui.PlayerNotificationManager
import java.net.URL import java.net.URL
@ -14,32 +17,58 @@ import java.net.URL
class DescriptionAdapter( class DescriptionAdapter(
private val title: String, private val title: String,
private val channelName: String, private val channelName: String,
private val thumbnailUrl: String private val thumbnailUrl: String,
private val context: Context
) : ) :
PlayerNotificationManager.MediaDescriptionAdapter { PlayerNotificationManager.MediaDescriptionAdapter {
/**
* sets the title of the notification
*/
override fun getCurrentContentTitle(player: Player): CharSequence { override fun getCurrentContentTitle(player: Player): CharSequence {
// return controller.metadata.description.title.toString() // return controller.metadata.description.title.toString()
return title return title
} }
/**
* overrides the action when clicking the notification
*/
override fun createCurrentContentIntent(player: Player): PendingIntent? { override fun createCurrentContentIntent(player: Player): PendingIntent? {
// return controller.sessionActivity // return controller.sessionActivity
return null /**
* starts a new MainActivity Intent when the player notification is clicked
* it doesn't start a completely new MainActivity because the MainActivity's launchMode
* is set to "singleTop" in the AndroidManifest (important!!!)
* that's the only way to launch back into the previous activity (e.g. the player view
*/
val intent = Intent(context, MainActivity::class.java)
return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
} }
/**
* the description of the notification (below the title)
*/
override fun getCurrentContentText(player: Player): CharSequence? { override fun getCurrentContentText(player: Player): CharSequence? {
// return controller.metadata.description.subtitle.toString() // return controller.metadata.description.subtitle.toString()
return channelName return channelName
} }
/**
* return the icon/thumbnail of the video
*/
override fun getCurrentLargeIcon( override fun getCurrentLargeIcon(
player: Player, player: Player,
callback: PlayerNotificationManager.BitmapCallback callback: PlayerNotificationManager.BitmapCallback
): Bitmap? { ): Bitmap? {
lateinit var bitmap: Bitmap lateinit var bitmap: Bitmap
/**
* running on a new thread to prevent a NetworkMainThreadException
*/
val thread = Thread { val thread = Thread {
try { try {
// try to parse the thumbnailUrl to a Bitmap /**
* try to GET the thumbnail from the URL
*/
val inputStream = URL(thumbnailUrl).openStream() val inputStream = URL(thumbnailUrl).openStream()
bitmap = BitmapFactory.decodeStream(inputStream) bitmap = BitmapFactory.decodeStream(inputStream)
} catch (ex: java.lang.Exception) { } catch (ex: java.lang.Exception) {
@ -48,9 +77,14 @@ class DescriptionAdapter(
} }
thread.start() thread.start()
thread.join() thread.join()
// return bitmap if initialized /**
* returns the scaled bitmap if it got fetched successfully
*/
return try { return try {
bitmap val resizedBitmap = Bitmap.createScaledBitmap(
bitmap, 1080, 1080, false
)
resizedBitmap
} catch (e: Exception) { } catch (e: Exception) {
null null
} }

View File

@ -117,6 +117,12 @@ interface PipedApi {
@Body channels: List<String> @Body channels: List<String>
): Message ): Message
@POST("import/playlist")
suspend fun importPlaylist(
@Header("Authorization") token: String,
@Body playlistId: PlaylistId
): Message
@GET("user/playlists") @GET("user/playlists")
suspend fun playlists(@Header("Authorization") token: String): List<Playlists> suspend fun playlists(@Header("Authorization") token: String): List<Playlists>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="300"
android:viewportHeight="300"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M149.99,0C67.16,0 0,67.16 0,150c0,82.84 67.16,150 149.99,150s150,-67.16 150,-150C300,67.16 232.83,0 149.99,0zM110.97,105.36c2.08,-2.08 4.79,-3.11 7.51,-3.11c2.72,0 5.43,1.04 7.51,3.11l13.3,13.3v-3.91V62.48c0,-5.87 4.75,-10.62 10.62,-10.62s10.62,4.75 10.62,10.62v52.26v4.63l4.63,-4.63l9.39,-9.38c2.08,-2.08 4.79,-3.11 7.51,-3.11s5.44,1.04 7.51,3.11c2.55,2.55 3.52,6.08 2.93,9.38c0,0 -0,0 -0,0.01c-0.04,0.24 -0.12,0.47 -0.18,0.7c-0.09,0.37 -0.19,0.73 -0.32,1.08c-0.09,0.24 -0.19,0.47 -0.3,0.7c-0.17,0.37 -0.36,0.73 -0.57,1.08c-0.11,0.19 -0.22,0.37 -0.34,0.55c-0.36,0.52 -0.76,1.03 -1.23,1.5l-15.11,15.11l-16.59,16.59c-2.08,2.08 -4.79,3.11 -7.51,3.11c-0.03,0 -0.05,0 -0.08,0s-0.05,0 -0.08,0c-2.71,0 -5.43,-1.03 -7.51,-3.11l-16.59,-16.59l-15.11,-15.11c-0.47,-0.47 -0.86,-0.97 -1.22,-1.5c-0.13,-0.18 -0.23,-0.37 -0.34,-0.56c-0.21,-0.35 -0.4,-0.7 -0.56,-1.07c-0.11,-0.24 -0.21,-0.47 -0.3,-0.72c-0.13,-0.35 -0.22,-0.7 -0.31,-1.06c-0.06,-0.25 -0.14,-0.49 -0.19,-0.73C107.44,111.44 108.41,107.91 110.97,105.36zM231.57,209.32h-0c0,14.34 -14.06,25.57 -32.01,25.57h-99.13c-17.94,0 -32.01,-11.23 -32.01,-25.57V140.31c0,-12.12 10.06,-21.99 24,-24.76c0.6,5.98 3.22,11.53 7.53,15.83l4.11,4.11h-3.64c-7.26,0 -11.26,3.62 -11.26,4.82v69c0,1.2 3.99,4.82 11.26,4.82h99.14c7.26,0 11.26,-3.62 11.26,-4.82V140.31c0,-1.2 -3.99,-4.82 -11.26,-4.82h-3.12l4.11,-4.11c4.28,-4.28 6.89,-9.79 7.52,-15.73c13.68,2.91 23.5,12.69 23.5,24.66V209.32z" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M12,2c5.523,0 10,4.477 10,10s-4.477,10 -10,10c-1.702,0 -3.305,-0.425 -4.708,-1.175L2,22l1.176,-5.29C2.426,15.306 2,13.703 2,12 2,6.477 6.477,2 12,2zM13,7h-2v7h6v-2h-4L13,7z" />
</vector>

View File

@ -3,9 +3,12 @@
android:height="24dp" android:height="24dp"
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24" android:viewportHeight="24"
android:tint="?attr/colorControlNormal"> android:tint="?android:attr/colorControlNormal">
<path <path
android:fillColor="#FF000000" android:pathData="M9,3h8a2,2 0,0 1,2 2v14a2,2 0,0 1,-2 2H9m6,-9 l-4,-4m4,4 l-4,4m4,-4H5"
android:pathData="M9.325,16.275Q9.05,15.95 9.05,15.537Q9.05,15.125 9.325,14.85L11.175,13H4Q3.575,13 3.288,12.712Q3,12.425 3,12Q3,11.575 3.288,11.287Q3.575,11 4,11H11.175L9.325,9.15Q9.025,8.85 9.025,8.438Q9.025,8.025 9.325,7.725Q9.6,7.425 10.013,7.425Q10.425,7.425 10.7,7.7L14.3,11.3Q14.45,11.45 14.513,11.625Q14.575,11.8 14.575,12Q14.575,12.2 14.513,12.375Q14.45,12.55 14.3,12.7L10.7,16.3Q10.4,16.6 10,16.575Q9.6,16.55 9.325,16.275ZM13,21Q12.575,21 12.288,20.712Q12,20.425 12,20Q12,19.575 12.288,19.288Q12.575,19 13,19H19Q19,19 19,19Q19,19 19,19V5Q19,5 19,5Q19,5 19,5H13Q12.575,5 12.288,4.712Q12,4.425 12,4Q12,3.575 12.288,3.287Q12.575,3 13,3H19Q19.825,3 20.413,3.587Q21,4.175 21,5V19Q21,19.825 20.413,20.413Q19.825,21 19,21Z" /> android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="@android:color/black"
android:strokeLineCap="round" />
</vector> </vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M10,11H4V3a1,1 0,0 1,1 -1h14a1,1 0,0 1,1 1v18a1,1 0,0 1,-1 1H5a1,1 0,0 1,-1 -1v-8h6v3l5,-4 -5,-4v3z" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="300"
android:viewportHeight="300"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M150,0c-82.84,0 -150,67.16 -150,150c0,82.84 67.16,150 150,150c82.84,0 150,-67.17 150,-150C300,67.16 232.85,0 150,0zM134.41,194.54c0,9.5 -7.7,17.2 -17.2,17.2s-17.2,-7.7 -17.2,-17.2V105.46c0,-9.5 7.7,-17.2 17.2,-17.2s17.2,7.7 17.2,17.2V194.54zM198.96,194.54c0,9.5 -7.7,17.2 -17.2,17.2c-9.5,0 -17.2,-7.7 -17.2,-17.2V105.46c0,-9.5 7.7,-17.2 17.2,-17.2s17.2,7.7 17.2,17.2V194.54z" />
</vector>

View File

@ -1,10 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp" android:width="24dp"
android:height="24dp" android:height="24dp"
android:tint="?android:attr/colorControlNormal"
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24" android:viewportHeight="24">
android:tint="?attr/colorControlNormal">
<path <path
android:fillColor="@android:color/black" android:fillColor="@android:color/white"
android:pathData="M8,5v14l11,-7z" /> android:pathData="M8,5v14l11,-7z" />
</vector> </vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="485.74"
android:viewportHeight="485.74"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M242.87,0C108.73,0 0,108.74 0,242.86c0,134.14 108.73,242.88 242.87,242.88c134.14,0 242.86,-108.74 242.86,-242.88C485.74,108.74 377.01,0 242.87,0zM338.41,263.94l-134.36,92.73c-16.78,11.59 -30.58,4.25 -30.58,-16.32V145.38c0,-20.56 13.81,-27.9 30.58,-16.31l134.32,92.73C355.14,233.38 355.18,252.35 338.41,263.94z" />
</vector>

View File

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="32"
android:viewportHeight="32"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#111918"
android:pathData="M20.164,16 L5.098,28.555V3.445ZM12.631,3.445V8.088L22.125,16 12.631,23.912v4.643L27.697,16Z"
android:strokeWidth="1" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M430.87,128.99l11.91,-11.91c6.38,-6.38 6.38,-16.73 0,-23.11c-6.38,-6.38 -16.73,-6.38 -23.11,0l-11.9,11.9c-36.81,-32.03 -83.82,-52.64 -135.43,-56.26V32.68h4.36c9.02,0 16.34,-7.32 16.34,-16.34c0,-9.02 -7.32,-16.34 -16.34,-16.34h-41.4c-9.02,0 -16.34,7.32 -16.34,16.34c0,9.02 7.32,16.34 16.34,16.34h4.36v16.92c-51.62,3.62 -98.62,24.22 -135.43,56.26L92.33,93.97c-6.38,-6.38 -16.73,-6.38 -23.11,0c-6.38,6.38 -6.38,16.73 0,23.11l11.91,11.91c-35.26,40.63 -56.62,93.63 -56.62,151.52C24.51,408.15 128.36,512 256,512s231.49,-103.85 231.49,-231.49C487.49,222.62 466.13,169.62 430.87,128.99zM256,323.54c-23.73,0 -43.03,-19.3 -43.03,-43.03c0,-17.94 11.04,-33.35 26.69,-39.8v-77.31c0,-9.02 7.32,-16.34 16.34,-16.34c9.02,0 16.34,7.32 16.34,16.34v77.31c15.65,6.45 26.69,21.85 26.69,39.8C299.03,304.24 279.73,323.54 256,323.54z" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="60"
android:viewportHeight="60"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M30,0.061c-16.542,0 -30,13.458 -30,30s13.458,29.879 30,29.879s30,-13.337 30,-29.879S46.542,0.061 30,0.061zM32,30.939c0,1.104 -0.896,2 -2,2H14c-1.104,0 -2,-0.896 -2,-2s0.896,-2 2,-2h14v-22c0,-1.104 0.896,-2 2,-2s2,0.896 2,2V30.939z" />
</vector>

View File

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?android:attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/black"
android:pathData="M16.24,7.76C15.07,6.59 13.54,6 12,6v6l-4.24,4.24c2.34,2.34 6.14,2.34 8.49,0 2.34,-2.34 2.34,-6.14 -0.01,-8.48zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="52"
android:viewportHeight="52"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M50.1,30.56a1.16,1.16 0,0 1,-2 0.82L42.73,26 30.32,36.65a3.39,3.39 0,0 1,-4.92 0l-7.49,-8.54L4.57,39.81a1.13,1.13 0,0 1,-1.64 0l-0.59,-0.59a1.13,1.13 0,0 1,0 -1.64L15.46,19.68a3.39,3.39 0,0 1,4.92 0l7.49,7.49 7.61,-8.78 -4.92,-4.45a1.26,1.26 0,0 1,0.82 -2.11H47.76A2.35,2.35 0,0 1,50 14.3Z" />
</vector>

View File

@ -1,11 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp" android:width="24dp"
android:height="24dp" android:height="24dp"
android:viewportWidth="24" android:viewportWidth="300"
android:viewportHeight="24" android:viewportHeight="300"
android:tint="?attr/colorControlNormal"> android:tint="?android:attr/colorControlNormal">
<path <path
android:fillColor="#FF000000" android:fillColor="#FF000000"
android:pathData="M12,16Q11.575,16 11.288,15.712Q11,15.425 11,15V7.85L9.125,9.725Q8.825,10.025 8.425,10.025Q8.025,10.025 7.7,9.7Q7.4,9.4 7.413,8.987Q7.425,8.575 7.7,8.3L11.3,4.7Q11.45,4.55 11.625,4.487Q11.8,4.425 12,4.425Q12.2,4.425 12.375,4.487Q12.55,4.55 12.7,4.7L16.3,8.3Q16.6,8.6 16.587,9.012Q16.575,9.425 16.3,9.7Q16,10 15.588,10.012Q15.175,10.025 14.875,9.725L13,7.85V15Q13,15.425 12.713,15.712Q12.425,16 12,16ZM6,20Q5.175,20 4.588,19.413Q4,18.825 4,18V16Q4,15.575 4.287,15.287Q4.575,15 5,15Q5.425,15 5.713,15.287Q6,15.575 6,16V18Q6,18 6,18Q6,18 6,18H18Q18,18 18,18Q18,18 18,18V16Q18,15.575 18.288,15.287Q18.575,15 19,15Q19.425,15 19.712,15.287Q20,15.575 20,16V18Q20,18.825 19.413,19.413Q18.825,20 18,20Z" /> android:pathData="M150,0C67.16,0 0,67.16 0,150s67.16,150 150,150C232.83,300 300,232.84 300,150C300,67.16 232.83,0 150,0zM110.97,81.48l31.71,-31.71c2.08,-2.08 4.79,-3.11 7.51,-3.11c0.03,0 0.05,0 0.08,0c0.03,0 0.05,0 0.08,0c2.71,0 5.43,1.03 7.51,3.11l31.71,31.71c4.15,4.15 4.15,10.87 0,15.02c-2.07,2.08 -4.79,3.11 -7.51,3.11c-2.72,0 -5.44,-1.04 -7.51,-3.11l-14.02,-14.01v32.26v20.75v3.89c0,5.87 -4.76,10.62 -10.62,10.62c-5.87,0 -10.62,-4.75 -10.62,-10.62v-3.89v-20.75V83.21l-13.3,13.3c-2.08,2.08 -4.79,3.11 -7.51,3.11c-2.72,0 -5.44,-1.04 -7.51,-3.11C106.82,92.36 106.82,85.63 110.97,81.48zM231.58,209.32h-0c0,14.34 -14.06,25.57 -32.01,25.57h-99.13c-17.94,0 -32.01,-11.23 -32.01,-25.57V140.31c0,-14.34 14.06,-25.57 32.01,-25.57h13.39c1.52,0.27 3.08,0.43 4.66,0.43c1.57,0 3.12,-0.16 4.63,-0.43h0.61v20.75h-23.28c-7.26,0 -11.26,3.62 -11.26,4.82v69.01c0,1.2 3.99,4.82 11.26,4.82h99.14c7.26,0 11.26,-3.62 11.26,-4.82V140.31c0,-1.2 -3.99,-4.82 -11.26,-4.82h-23.49v-20.75h1.44c1.48,0.26 2.99,0.43 4.53,0.43c1.58,0 3.13,-0.16 4.66,-0.43h12.86c17.95,0 32.01,11.23 32.01,25.57V209.32z" />
</vector> </vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M395.6,69.8L325.8,0h-58.2l69.8,69.8H395.6zM23.3,0H0v69.8h93.1L23.3,0zM244.4,69.8L174.5,0h-58.2l69.8,69.8H244.4zM418.9,162.9h-93.1l69.8,-69.8h-58.2l-69.8,69.8h-93.1l69.8,-69.8h-58.2l-69.8,69.8H23.3l69.8,-69.8H0v372.4C0,491.1 20.9,512 46.5,512h418.9c25.7,0 46.5,-20.9 46.5,-46.5V93.1h-23.3L418.9,162.9zM186.2,442.2V232.7l186.2,104.7L186.2,442.2zM418.9,0l69.8,69.8H512V0H418.9z" />
</vector>

View File

@ -1,10 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp" android:width="24dp"
android:height="24dp" android:height="24dp"
android:tint="?android:attr/colorControlNormal" android:viewportWidth="28"
android:viewportWidth="24" android:viewportHeight="28"
android:viewportHeight="24"> android:tint="?android:attr/colorControlNormal">
<path <path
android:fillColor="@android:color/white" android:fillColor="#212121"
android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z" /> android:pathData="M5.25,5.5C3.455,5.5 2,6.955 2,8.75V19.25C2,21.045 3.455,22.5 5.25,22.5H14.75C16.545,22.5 18,21.045 18,19.25V8.75C18,6.955 16.545,5.5 14.75,5.5H5.25Z" />
<path
android:fillColor="#212121"
android:pathData="M23.123,20.643L19.5,17.094V10.999L23.112,7.371C23.899,6.58 25.248,7.138 25.248,8.253V19.75C25.248,20.858 23.914,21.418 23.123,20.643Z" />
</vector> </vector>

View File

@ -36,6 +36,6 @@
android:backgroundTint="?attr/colorOnPrimary" android:backgroundTint="?attr/colorOnPrimary"
android:text="@string/unsubscribe" android:text="@string/unsubscribe"
android:textSize="11dp" android:textSize="11dp"
android:textColor="@android:color/white" android:textColor="?android:attr/textColorPrimary"
app:cornerRadius="20dp" /> app:cornerRadius="20dp" />
</RelativeLayout> </RelativeLayout>

View File

@ -23,15 +23,7 @@
<Button <Button
android:id="@+id/addToPlaylist" android:id="@+id/addToPlaylist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp"
android:backgroundTint="@android:color/transparent"
android:padding="8dp"
android:text="@string/addToPlaylist" android:text="@string/addToPlaylist"
android:textColor="?attr/colorPrimary" style="@style/CustomDialogButton" />
android:textSize="14sp" />
</LinearLayout> </LinearLayout>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -15,21 +14,7 @@
android:layout_margin="10dp" android:layout_margin="10dp"
android:textSize="20sp" /> android:textSize="20sp" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout style="@style/CustomDialogTextInputLayout">
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintEnabled="false"
android:layout_marginTop="16dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
app:boxCornerRadiusBottomStart="15dp"
app:boxCornerRadiusBottomEnd="15dp"
app:boxCornerRadiusTopEnd="15dp"
app:boxCornerRadiusTopStart="15dp">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/playlist_name" android:id="@+id/playlist_name"
@ -49,28 +34,13 @@
<Button <Button
android:id="@+id/cancel_button" android:id="@+id/cancel_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancel" android:text="@string/cancel"
android:layout_gravity="right" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginBottom="8dp" />
<Button <Button
android:id="@+id/create_new_playlist" android:id="@+id/create_new_playlist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/createPlaylist" android:text="@string/createPlaylist"
android:layout_gravity="right" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp" />
</LinearLayout> </LinearLayout>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -15,20 +14,7 @@
android:layout_margin="10dp" android:layout_margin="10dp"
android:textSize="20sp" /> android:textSize="20sp" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout style="@style/CustomDialogTextInputLayout">
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintEnabled="false"
android:layout_marginTop="16dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="4dp"
app:boxCornerRadiusBottomStart="15dp"
app:boxCornerRadiusBottomEnd="15dp"
app:boxCornerRadiusTopEnd="15dp"
app:boxCornerRadiusTopStart="15dp">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/instanceName" android:id="@+id/instanceName"
@ -39,22 +25,18 @@
android:padding="12dp" /> android:padding="12dp" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout style="@style/CustomDialogTextInputLayout">
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintEnabled="false"
android:layout_marginTop="16dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
app:boxCornerRadiusBottomStart="15dp" <com.google.android.material.textfield.TextInputEditText
app:boxCornerRadiusBottomEnd="15dp" android:id="@+id/instanceFrontendUrl"
app:boxCornerRadiusTopEnd="15dp" android:layout_width="match_parent"
app:boxCornerRadiusTopStart="15dp" android:layout_height="wrap_content"
android:hint="@string/instance_frontend_url"
android:inputType="text"
android:padding="12dp" />
</com.google.android.material.textfield.TextInputLayout>
> <com.google.android.material.textfield.TextInputLayout style="@style/CustomDialogTextInputLayout">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/instanceApiUrl" android:id="@+id/instanceApiUrl"
@ -73,30 +55,13 @@
<Button <Button
android:id="@+id/cancel" android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancel" android:text="@string/cancel"
android:layout_gravity="end" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginBottom="8dp"
style="?android:attr/buttonBarButtonStyle" />
<Button <Button
android:id="@+id/addInstance" android:id="@+id/addInstance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/addInstance" android:text="@string/addInstance"
android:layout_gravity="end" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
style="?android:attr/buttonBarButtonStyle" />
</LinearLayout> </LinearLayout>

View File

@ -28,15 +28,7 @@
<Button <Button
android:id="@+id/download" android:id="@+id/download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/download" android:text="@string/download"
android:layout_gravity="right" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp" />
</LinearLayout> </LinearLayout>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -15,20 +14,7 @@
android:layout_margin="10dp" android:layout_margin="10dp"
android:textSize="20sp" /> android:textSize="20sp" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout style="@style/CustomDialogTextInputLayout">
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintEnabled="false"
android:layout_marginTop="16dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="4dp"
app:boxCornerRadiusBottomStart="15dp"
app:boxCornerRadiusBottomEnd="15dp"
app:boxCornerRadiusTopEnd="15dp"
app:boxCornerRadiusTopStart="15dp">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/username" android:id="@+id/username"
@ -39,22 +25,7 @@
android:padding="12dp" /> android:padding="12dp" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout style="@style/CustomDialogTextInputLayout">
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintEnabled="false"
android:layout_marginTop="16dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
app:boxCornerRadiusBottomStart="15dp"
app:boxCornerRadiusBottomEnd="15dp"
app:boxCornerRadiusTopEnd="15dp"
app:boxCornerRadiusTopStart="15dp"
>
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/password" android:id="@+id/password"
@ -74,28 +45,13 @@
<Button <Button
android:id="@+id/register" android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/register" android:text="@string/register"
android:layout_gravity="right" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginBottom="8dp" />
<Button <Button
android:id="@+id/login" android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/login" android:text="@string/login"
android:layout_gravity="right" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp" />
</LinearLayout> </LinearLayout>

View File

@ -23,15 +23,7 @@
<Button <Button
android:id="@+id/logout" android:id="@+id/logout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/logout" android:text="@string/logout"
android:layout_gravity="right" style="@style/CustomDialogButton" />
android:backgroundTint="@android:color/transparent"
android:textColor="?attr/colorPrimary"
android:textSize="14sp"
android:padding="8dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp" />
</LinearLayout> </LinearLayout>

View File

@ -113,6 +113,7 @@
android:paddingLeft="@dimen/exo_styled_bottom_bar_time_padding" android:paddingLeft="@dimen/exo_styled_bottom_bar_time_padding"
android:paddingRight="@dimen/exo_styled_bottom_bar_time_padding" android:paddingRight="@dimen/exo_styled_bottom_bar_time_padding"
android:layout_gravity="center_vertical|start" android:layout_gravity="center_vertical|start"
android:layout_marginBottom="10dp"
android:layoutDirection="ltr"> android:layoutDirection="ltr">
<TextView <TextView
@ -132,6 +133,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end" android:layout_gravity="center_vertical|end"
android:layout_marginBottom="10dp"
android:layoutDirection="ltr"> android:layoutDirection="ltr">
<ImageButton <ImageButton
@ -191,13 +193,28 @@
</FrameLayout> </FrameLayout>
<View <LinearLayout
android:id="@id/exo_progress_placeholder" android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="15dp"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:layout_marginBottom="1dp" android:layout_above="@id/exo_basic_controls"
android:background="@color/exo_bottom_bar_background" /> android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_width="match_parent"
android:layout_height="15dp">
<com.google.android.exoplayer2.ui.DefaultTimeBar
android:id="@id/exo_progress"
android:layout_width="match_parent"
android:layout_height="15dp"
app:bar_height="2dp"
app:scrubber_color="?attr/colorOnPrimary"
app:played_color="?attr/colorOnSecondary"
app:scrubber_enabled_size="12dp"
app:scrubber_dragged_size="15dp"
android:background="@color/exo_bottom_bar_background" />
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@id/exo_minimal_controls" android:id="@id/exo_minimal_controls"
@ -225,21 +242,21 @@
android:padding="@dimen/exo_styled_controls_padding" android:padding="@dimen/exo_styled_controls_padding"
android:clipToPadding="false"> android:clipToPadding="false">
<ImageButton <Button
android:id="@id/exo_prev" android:id="@id/exo_rew_with_amount"
style="@style/ExoStyledControls.Button.Center.Previous" /> android:paddingLeft="4dp"
android:paddingRight="4dp"
<include layout="@layout/exo_styled_player_control_rewind_button" /> style="@style/ExoStyledControls.Button.Center.RewWithAmount" />
<ImageButton <ImageButton
android:id="@id/exo_play_pause" android:id="@id/exo_play_pause"
style="@style/ExoStyledControls.Button.Center.PlayPause" /> style="@style/ExoStyledControls.Button.Center.PlayPause" />
<include layout="@layout/exo_styled_player_control_ffwd_button" /> <Button
android:id="@id/exo_ffwd_with_amount"
<ImageButton android:paddingLeft="4dp"
android:id="@id/exo_next" android:paddingRight="4dp"
style="@style/ExoStyledControls.Button.Center.Next" /> style="@style/ExoStyledControls.Button.Center.FfwdWithAmount" />
</LinearLayout> </LinearLayout>

View File

@ -21,26 +21,16 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:text="LibreTube" android:text="LibreTube"
android:textSize="27sp" android:textSize="27sp"
android:textStyle="bold" /> android:textStyle="bold" />
<TextView <View style="@style/HorizontalLine" />
android:id="@+id/app_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:layout_marginBottom="30dp"
android:textSize="18sp" />
<LinearLayout <LinearLayout
android:id="@+id/website" android:id="@+id/website"
android:layout_width="match_parent" style="@style/AboutItem">
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -55,13 +45,11 @@
</LinearLayout> </LinearLayout>
<View style="@style/HorizontalLine" />
<LinearLayout <LinearLayout
android:id="@+id/contributing" android:id="@+id/contributing"
android:layout_width="match_parent" style="@style/AboutItem">
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -76,13 +64,11 @@
</LinearLayout> </LinearLayout>
<View style="@style/HorizontalLine" />
<LinearLayout <LinearLayout
android:id="@+id/authors" android:id="@+id/authors"
android:layout_width="match_parent" style="@style/AboutItem">
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -97,13 +83,30 @@
</LinearLayout> </LinearLayout>
<View style="@style/HorizontalLine" />
<LinearLayout
android:id="@+id/piped"
style="@style/AboutItem">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/piped"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/piped_summary" />
</LinearLayout>
<View style="@style/HorizontalLine" />
<LinearLayout <LinearLayout
android:id="@+id/donate" android:id="@+id/donate"
android:layout_width="match_parent" style="@style/AboutItem">
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -118,13 +121,11 @@
</LinearLayout> </LinearLayout>
<View style="@style/HorizontalLine" />
<LinearLayout <LinearLayout
android:id="@+id/license" android:id="@+id/license"
android:layout_width="match_parent" style="@style/AboutItem">
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp">
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -80,10 +80,10 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:backgroundTint="?attr/colorOnPrimary" android:backgroundTint="?attr/colorOnPrimary"
android:text="@string/subscribe" android:text="@string/subscribe"
android:textColor="@android:color/white" android:textColor="?android:attr/textColorPrimary"
android:textSize="11sp" android:textSize="11sp"
android:drawableLeft="@drawable/ic_bell_small" android:drawableLeft="@drawable/ic_bell_small"
android:drawableTint="@android:color/white" /> android:drawableTint="?android:attr/textColorPrimary" />
</LinearLayout> </LinearLayout>

View File

@ -1,51 +1,64 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".fragments.PlaylistFragment" tools:context=".fragments.PlaylistFragment">
android:id="@+id/playlist_scrollview">
<LinearLayout <ProgressBar
android:orientation="vertical" android:id="@+id/playlist_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone" />
<ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:id="@+id/playlist_scrollview">
<TextView <LinearLayout
android:id="@+id/playlist_name" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent">
android:text=""
android:textSize="24sp"
android:textStyle="bold"
android:padding="8dp" />
<TextView <TextView
android:id="@+id/playlist_uploader" android:id="@+id/playlist_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:textStyle="bold" />
<TextView
android:id="@+id/playlist_totVideos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/playlist_recView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:nestedScrollingEnabled="false" /> android:text=""
</RelativeLayout> android:textSize="24sp"
android:textStyle="bold"
android:padding="8dp" />
</LinearLayout> <TextView
android:id="@+id/playlist_uploader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:textStyle="bold" />
<TextView
android:id="@+id/playlist_totVideos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp" />
</ScrollView> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/playlist_recView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false" />
</RelativeLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>

View File

@ -3,6 +3,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:minHeight="48dp" android:minHeight="42dp"
android:textAlignment="center" android:textAlignment="center"
android:textSize="16sp" /> android:textSize="16sp" />

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="instances">اختر نظير</string> <string name="instances">اختر نظير</string>
<string name="customInstance">أضف نظير مخصص</string> <string name="customInstance">نظير مخصص</string>
<string name="choose_quality_dialog">اختر الجودة:</string> <string name="choose_quality_dialog">الجودة</string>
<string name="registered">تم إنشاء حساب بنجاح! تستطيع الآن أن تشترك بالقنوات التي تريدها.</string> <string name="registered">تم إنشاء حساب بنجاح! تستطيع الآن أن تشترك بالقنوات التي تريدها.</string>
<string name="search_hint">بحث</string> <string name="search_hint">بحث</string>
<string name="unsubscribe">إلغاء الاشتراك</string> <string name="unsubscribe">إلغاء الاشتراك</string>
@ -12,8 +12,8 @@
<string name="password">كلمة المرور</string> <string name="password">كلمة المرور</string>
<string name="cancel">إلغاء</string> <string name="cancel">إلغاء</string>
<string name="loggedIn">تم تسجيل الدخول بنجاح.</string> <string name="loggedIn">تم تسجيل الدخول بنجاح.</string>
<string name="login_first">سجل الدخول وحاول مرة أخرى!</string> <string name="login_first">سجل الدخول وحاول مرة أخرى.</string>
<string name="login_register">تسجيل\\إنشاء حساب</string> <string name="login_register">تسجيل/إنشاء حساب</string>
<string name="please_login">رجاءً سجل دخولك أو أنشئ حساب في الإعدادات أولا!</string> <string name="please_login">رجاءً سجل دخولك أو أنشئ حساب في الإعدادات أولا!</string>
<string name="save">حفظ</string> <string name="save">حفظ</string>
<string name="loggedout">تم تسجيل الخروج بنجاح.</string> <string name="loggedout">تم تسجيل الخروج بنجاح.</string>
@ -25,7 +25,7 @@
<string name="already_logged_in">لقد سجلت دخولك من قبل، تستطيع أن تسجل خروجك إذا أردت.</string> <string name="already_logged_in">لقد سجلت دخولك من قبل، تستطيع أن تسجل خروجك إذا أردت.</string>
<string name="subscribeIsEmpty">اشترك ببعض القنوات أولا.</string> <string name="subscribeIsEmpty">اشترك ببعض القنوات أولا.</string>
<string name="cannotDownload">لم يُقدر على تنزيل هذا البث.</string> <string name="cannotDownload">لم يُقدر على تنزيل هذا البث.</string>
<string name="region">اختر المنطقة</string> <string name="region">المنطقة</string>
<string name="importsuccess">تم الاشتراك</string> <string name="importsuccess">تم الاشتراك</string>
<string name="dlcomplete">تم التنزيل.</string> <string name="dlcomplete">تم التنزيل.</string>
<string name="downloadfailed">فشل التنزيل.</string> <string name="downloadfailed">فشل التنزيل.</string>
@ -33,45 +33,45 @@
<string name="import_from_yt">استيراد الاشتراكات</string> <string name="import_from_yt">استيراد الاشتراكات</string>
<string name="app_theme">سمة التطبيق</string> <string name="app_theme">سمة التطبيق</string>
<string name="empty">لا يمكن لاسم المستخدم وكلمة المرور أن يكونوا فارغين.</string> <string name="empty">لا يمكن لاسم المستخدم وكلمة المرور أن يكونوا فارغين.</string>
<string name="notgmail">هذا ليس حساب الجيميل Gmail الخاص بك.</string> <string name="notgmail">هذا من أجل حساب LibreTube الخاص بك.</string>
<string name="defres">جودة الفيديو الافتراضية</string> <string name="defres">جودة الفيديو الافتراضية</string>
<string name="grid">اختر أعمدة الشبكة</string> <string name="grid">أعمدة الشبكة</string>
<string name="emptyList">لا شيء هنا.</string> <string name="emptyList">لا شيء هنا.</string>
<string name="deletePlaylist">حذف قائمة التشغيل</string> <string name="deletePlaylist">حذف قائمة التشغيل</string>
<string name="areYouSure">هل أنت متأكد من حذف قائمة التشغيل هذه؟</string> <string name="areYouSure">هل أنت متأكد من حذف قائمة التشغيل هذه؟</string>
<string name="createPlaylist">إنشاء قائمة تشغيل</string> <string name="createPlaylist">إنشاء قائمة تشغيل</string>
<string name="playlistCreated">تم إنشاء قائمة التشغيل!</string> <string name="playlistCreated">تم إنشاء قائمة التشغيل.</string>
<string name="playlistName">اسم قائمة التشغيل</string> <string name="playlistName">اسم قائمة التشغيل</string>
<string name="success">نجاح!</string> <string name="success">انتهى.</string>
<string name="fail">فشل ذريع :(</string> <string name="fail">فشل ذريع :(</string>
<string name="dlisinprogress">هناك عملية تنزيل أخرى، رجاء انتظر قليلا ريثما تنتهي.</string> <string name="dlisinprogress">برجاء الانتظار حتى تنتهي كل عمليات التنزيل…</string>
<string name="vlc">فتح باستخدام VLC</string> <string name="vlc">فتح باستخدام VLC</string>
<string name="unknown_error">خطأ في الشبكة.</string> <string name="unknown_error">خطأ في الشبكة.</string>
<string name="server_error">تعرض الخادم لخطأ ما. لما لا تجرب نظير آخر؟</string> <string name="server_error">تعرض الخادم لخطأ ما. لما لا تجرب نظير آخر؟</string>
<string name="error">حدث خطأ ما.</string> <string name="error">حدث خطأ ما.</string>
<string name="addToPlaylist">إضافة إلى قائمة التشغيل</string> <string name="addToPlaylist">إضافة إلى قائمة التشغيل</string>
<string name="about">معلومة</string> <string name="about">حول</string>
<string name="emptyPlaylistName">لا يمكن لاسم قائمة التشغيل أن يكون فارغا</string> <string name="emptyPlaylistName">لا يمكن لاسم قائمة التشغيل أن يكون فارغا</string>
<string name="startpage">الرئيسية</string> <string name="startpage">الرئيسية</string>
<string name="changeLanguage">تغيير اللغة</string> <string name="changeLanguage">اللغة</string>
<string name="systemDefault">افتراضي النظام</string> <string name="systemDefault">النظام</string>
<string name="lightTheme">السمة الفاتحة</string> <string name="lightTheme">الفاتح</string>
<string name="library">المكتبة</string> <string name="library">المكتبة</string>
<string name="import_from_yt_summary">من اليوتيوب او نيوبايب</string> <string name="import_from_yt_summary">من اليوتيوب او نيوبايب</string>
<string name="subscriptions">الاشتراكات</string> <string name="subscriptions">الاشتراكات</string>
<string name="videos">الفيديوهات</string> <string name="videos">الفيديوهات</string>
<string name="systemLanguage">لغة النظام</string> <string name="systemLanguage">النظام</string>
<string name="darkTheme">السمة الداكنة</string> <string name="darkTheme">الداكن</string>
<string name="subscribers">%1$s مشتركين</string> <string name="subscribers">%1$s مشتركين</string>
<string name="noInternet">غير متصل بالإنترنت</string> <string name="noInternet">أتصل بالانترنت أولاً.</string>
<string name="retry">أعد المحاولة</string> <string name="retry">أعد المحاولة</string>
<string name="comments">تعليقات</string> <string name="comments">تعليقات</string>
<string name="settings">إعدادات</string> <string name="settings">الإعدادات</string>
<string name="location">موقع</string> <string name="location">الموقع</string>
<string name="website">موقع إنترنت</string> <string name="website">موقع إنترنت</string>
<string name="videoCount">%1$sفيديوهات</string> <string name="videoCount">%1$sفيديوهات</string>
<string name="instance">سيرفر</string> <string name="instance">سيرفر</string>
<string name="customization">تخصيص</string> <string name="customization">تخصيصات</string>
<string name="history">السجل</string> <string name="history">السجل</string>
<string name="channels">قنوات</string> <string name="channels">قنوات</string>
<string name="all">كل</string> <string name="all">كل</string>
@ -97,23 +97,97 @@
<string name="category_segments">الاجزاء</string> <string name="category_segments">الاجزاء</string>
<string name="category_selfpromo">الترويج غير المدفوع / الذاتي</string> <string name="category_selfpromo">الترويج غير المدفوع / الذاتي</string>
<string name="category_selfpromo_description">على غرار \"الراعي\" باستثناء الترويج غير المدفوع أو الذاتي. يتضمن ذلك أقساما حول البضائع أو التبرعات أو المعلومات حول من تعاونوا معه.</string> <string name="category_selfpromo_description">على غرار \"الراعي\" باستثناء الترويج غير المدفوع أو الذاتي. يتضمن ذلك أقساما حول البضائع أو التبرعات أو المعلومات حول من تعاونوا معه.</string>
<string name="category_interaction">تذكير التفاعل (اشتراك)</string> <string name="category_interaction">تذكير التفاعل (إعجاب واشتراك)</string>
<string name="license">الترخيص</string> <string name="license">الترخيص</string>
<string name="color_accent">لون اللهجة</string> <string name="color_accent">اللون الثانوي</string>
<string name="color_red">أحمر</string> <string name="color_red">أحمر</string>
<string name="color_blue">أزرق</string> <string name="color_blue">أزرق</string>
<string name="color_yellow">أصفر</string> <string name="color_yellow">أصفر</string>
<string name="color_green">أخضر</string> <string name="color_green">أخضر</string>
<string name="color_purple">بنفسجي</string> <string name="color_purple">بنفسجي</string>
<string name="oledTheme">نسق OLED</string> <string name="oledTheme">نسق OLED</string>
<string name="material_you">المواد أنت</string> <string name="material_you">تصميم المواد انت 3</string>
<string name="category_sponsor_description">ترويج مدفوع وإحالات مدفوعة وإعلانات مباشرة. ليس للترويج الذاتي أو الصيحات المجانية لأسباب / منشئي محتوى / مواقع ويب / منتجات يحبونها.</string> <string name="category_sponsor_description">ترويج مدفوع وإحالات مدفوعة وإعلانات مباشرة. ليس للترويج الذاتي أو الصيحات المجانية لأسباب / منشىء المحتوى / مواقع الويب / او منتجات يحبونها.</string>
<string name="category_outro">بطاقات النهاية / الاعتمادات</string> <string name="category_outro">بطاقات النهاية / الاعتمادات</string>
<string name="sponsorblock_notifications">الإشعارات</string> <string name="sponsorblock_notifications">الإشعارات</string>
<string name="app_icon">أيقونة التطبيق</string> <string name="app_icon">أيقونة</string>
<string name="enabled">مفعل</string> <string name="enabled">مفعل</string>
<string name="disabled">معطل</string> <string name="disabled">معطل</string>
<string name="piped">الانابيب</string> <string name="piped">الانابيب</string>
<string name="youtube">يوتيوب</string> <string name="youtube">يوتيوب</string>
<string name="playOnBackground">تشغيل في الخلفية</string> <string name="playOnBackground">تشغيل في الخلفية</string>
<string name="no_replies">هذا التعليق ليس له ردود.</string>
<string name="authors">المؤلفون</string>
<string name="internal_storage">وحدة التخزين الداخلية</string>
<string name="downloads_directory">مجلد التنزيل</string>
<string name="sdcard">بطاقة الذاكرة</string>
<string name="music_directory">مجلد الموسيقى</string>
<string name="views">%1$s مشاهدة</string>
<string name="defaultIcon">الإفتراضي</string>
<string name="website_summary">قم بزيارة الموقع لمزيد من المعلومات حول التطبيق ومميزاته.</string>
<string name="contributing_summary">تقديم الأفكار والترجمات وتغييرات التصميم وتنظيف وكتابة التعليمات البرمجية. كلما تم القيام بالمزيد كلما كان ذلك أفضل!</string>
<string name="update">ابحث عن الإصدار الجديد</string>
<string name="update_summary">انقر لمعرفة ما إذا كان التطبيق محدثا أم لا.</string>
<string name="app_uptodate">يتم حاليا تشغيل أحدث إصدار.</string>
<string name="no_update_available">انت تقوم الان بتشغيل أحدث إصدار.</string>
<string name="download_folder">الاسم</string>
<string name="download_folder_summary">يتم تخزين اسم المجلد الذي تم تنزيله في الوسائط.</string>
<string name="fireIcon">حريق عصري</string>
<string name="torchIcon">الشعلة العصرية</string>
<string name="shapedIcon">شكل سخيف</string>
<string name="flameIcon">اللهب الطائر</string>
<string name="birdIcon">الطيور المعززة</string>
<string name="invalid_url">الرجاء إدخال عنوان URL يعمل</string>
<string name="version">الإصدار %1$s</string>
<string name="about_summary">تعرف على فريق LibreTube وكيف يحدث كل شيء.</string>
<string name="related_streams">المحتويات ذات الصلة</string>
<string name="related_streams_summary">اعرض التدفقات ذات الصلة بجانب ما تشاهده.</string>
<string name="show_chapters">عرض الفصول</string>
<string name="hide_chapters">إخفاء الفصول</string>
<string name="category_filler">حشو لاداع له / او النكات</string>
<string name="category_filler_description">للمشاهد العرضية المضافة فقط للحشو أو الفكاهة غير المطلوبة لفهم المحتوى الرئيسي للفيديو.</string>
<string name="category_music_offtopic">الموسيقى: قسم غير الموسيقى</string>
<string name="category_preview">معاينة / خلاصة</string>
<string name="category_preview_description">بالنسبة للأجزاء التي تعرض بالتفصيل المحتوى القادم في هذا أو مقاطع الفيديو المستقبلية في سلسلتها ، لكن لا تقدم معلومات إضافية. إذا كانت تتضمن مقاطع تظهر هنا فقط ، فمن المحتمل جدًا أن تكون هذه الفئة الخطأ.</string>
<string name="instance_api_url">عنوان URL لمثيل واجهة برمجة التطبيقات</string>
<string name="addInstance">إضافة مثيل</string>
<string name="empty_instance">املأ الاسم وعنوان URL لواجهة برمجة التطبيقات.</string>
<string name="playerVideoFormat">تنسيق الفيديو لمشغل</string>
<string name="category_music_offtopic_description">فقط للاستخدام في مقاطع الفيديو الموسيقية. يجب أن تغطي أجزاء من الفيديو وليس جزءا من الخلطات الرسمية. في النهاية ، يجب أن يشبه الفيديو Spotify أو أي إصدار مختلط آخر قدر الإمكان ، أو يقلل من التحدث أو الانحرافات الأخرى.</string>
<string name="buffering_goal">التحميل المسبق</string>
<string name="buffering_goal_summary">الحد الأقصى لعدد ثواني الفيديو للتخزين المؤقت.</string>
<string name="update_available">الإصدار %1$s متاح</string>
<string name="downloads">التنزيلات</string>
<string name="contributing">المساهمة</string>
<string name="donate">تبرّع</string>
<string name="legacyIcon">الإرث الضائع</string>
<string name="gradientIcon">التدرج اللوني</string>
<string name="instance_summary">الأنابيب ، تسجيل الدخول ، الاشتراكات</string>
<string name="instance_name">اسم المثيل</string>
<string name="clear_customInstances">مسح المثيلات المخصصة</string>
<string name="live">مباشر</string>
<string name="player_autoplay">التشغيل التلقائي</string>
<string name="update_available_text">انتقل إلى الإصدارات على GitHub لتنزيله؟</string>
<string name="appearance">المظهر</string>
<string name="app_behavior">السلوك</string>
<string name="video_format">تنسيق الفيديو</string>
<string name="download_directory">تنزيل إلى</string>
<string name="video_format_summary">تحويل الملفات إذا تم تنزيل كل من الصوت والفيديو.</string>
<string name="download_directory_summary">حيث يتم تخزين الوسائط التي تم تنزيلها.</string>
<string name="advanced">متقدم</string>
<string name="player">المشغل</string>
<string name="license_summary">GPLv3+ هو ترخيص حر متروك للحقوق. الاستخدام والدراسة والتغيير والمشاركة؛ مع الجميع.</string>
<string name="donate_summary">أعط ما يستحقه هذا لك ، إذا استطعت. فريق LibreTube أصغر من تبرعك أو مساعدتك.</string>
<string name="playback_speed">سرعة التشغيل الافتراضية</string>
<string name="appearance_summary">اضبط التطبيق حسب رغبتك.</string>
<string name="authors_summary">تعرف على الجميع.</string>
<string name="advanced_summary">المشغل، التنزيلات، التاريخ</string>
<string name="customInstance_summary">إضافة مثيل مخصص (على مسؤوليتك الخاصة)</string>
<string name="movies_directory">مجلد الأفلام</string>
<string name="shareTo">مشاركة عنوان URL إلى</string>
<string name="no_audio">لا يوجد صوت</string>
<string name="no_video">لا يوجد فيديو</string>
<string name="audio">صوت</string>
<string name="video">فيديو</string>
<string name="downloading">قيد التحميل</string>
</resources> </resources>

View File

@ -40,7 +40,7 @@
<string name="music_playlists">YT Musiqi Pleylistləri</string> <string name="music_playlists">YT Musiqi Pleylistləri</string>
<string name="defaultTab">Defolt Tab</string> <string name="defaultTab">Defolt Tab</string>
<string name="sponsorblock">SponsorBlok</string> <string name="sponsorblock">SponsorBlok</string>
<string name="sponsorblock_summary">https://sponsor.ajay.app API istifadə edir</string> <string name="sponsorblock_summary">https://sponsor.ajay.app API\'sini istifadə edir</string>
<string name="category_intro_description">Həqiqi məzmunu olmayan aralıq. Fasilə, statik çərçivə, təkrarlanan animasiya ola bilər. Məlumat ehtiva edən keçidlər üçün istifadə edilməməlidir.</string> <string name="category_intro_description">Həqiqi məzmunu olmayan aralıq. Fasilə, statik çərçivə, təkrarlanan animasiya ola bilər. Məlumat ehtiva edən keçidlər üçün istifadə edilməməlidir.</string>
<string name="category_outro">Son kartlar və kanal nişanı</string> <string name="category_outro">Son kartlar və kanal nişanı</string>
<string name="category_outro_description">Bitişdən sonra məlumat. Məlumatla nəticə çıxarmaq üçün deyil.</string> <string name="category_outro_description">Bitişdən sonra məlumat. Məlumatla nəticə çıxarmaq üçün deyil.</string>
@ -57,7 +57,7 @@
<string name="retry">Yenidən Cəhd Edin</string> <string name="retry">Yenidən Cəhd Edin</string>
<string name="segment_skipped">Seqment ötürüldü</string> <string name="segment_skipped">Seqment ötürüldü</string>
<string name="sponsorblock_state">ıq</string> <string name="sponsorblock_state">ıq</string>
<string name="category_sponsor_description">Ödənişli reklam, yönləndirmə və birbaşa reklamlar. Özünü tanıtmaq və ya bəyəndikləri səbəblərə/yaradıcılara/veb-saytlara/məhsullara pulsuz çağırışlar üçün deyil.</string> <string name="category_sponsor_description">Ödənişli reklam ,tövsiyələr və birbaşa reklamlar. Səbəblərə, yaradıcılara, vebsaytlara və məhsullara özünü reklam və ya pulsuz orijinal çağırışlar üçün deyil.</string>
<string name="category_interaction">İnteraksiya xatırlatma(bəyən və abunə ol)</string> <string name="category_interaction">İnteraksiya xatırlatma(bəyən və abunə ol)</string>
<string name="category_intro">Fasilə/Giriş Animasiyası</string> <string name="category_intro">Fasilə/Giriş Animasiyası</string>
<string name="login_register">Daxil olun/qeydiyyatdan keçin</string> <string name="login_register">Daxil olun/qeydiyyatdan keçin</string>
@ -68,12 +68,12 @@
<string name="dlcomplete">Endirmə tamamlandı.</string> <string name="dlcomplete">Endirmə tamamlandı.</string>
<string name="dlisinprogress">Bütün endirmələr bitənə qədər gözləyin…</string> <string name="dlisinprogress">Bütün endirmələr bitənə qədər gözləyin…</string>
<string name="downloadfailed">Endirmək alınmadı.</string> <string name="downloadfailed">Endirmək alınmadı.</string>
<string name="vlc">VLC-də Açın</string> <string name="vlc">VLC\'də Açın</string>
<string name="vlcerror">VLC-də açmaq mümkün deyil. O, quraşdırılmamış ola bilər.</string> <string name="vlcerror">VLC\'də açmaq mümkün deyil. O, quraşdırılmamış ola bilər.</string>
<string name="import_from_yt">Abunəlikləri İdxal Edin</string> <string name="import_from_yt">Abunəlikləri İdxal Edin</string>
<string name="import_from_yt_summary">YouTube və ya NewPipe\'dan</string> <string name="import_from_yt_summary">YouTube və ya NewPipe\'dan</string>
<string name="app_theme">Mövzu</string> <string name="app_theme">Mövzu</string>
<string name="server_error">Serverdə problem var. Başqa bir serveri cəhd edə bilərsiniz\?</string> <string name="server_error">Serverdə problem var. Başqasını cəhd edə bilərsiniz\?</string>
<string name="unknown_error">Şəbəkə xətası.</string> <string name="unknown_error">Şəbəkə xətası.</string>
<string name="error">Nəsə xəta baş verdi.</string> <string name="error">Nəsə xəta baş verdi.</string>
<string name="empty">Siz istifadəçi adı və şifrə daxil etməlisiniz.</string> <string name="empty">Siz istifadəçi adı və şifrə daxil etməlisiniz.</string>
@ -92,8 +92,8 @@
<string name="changeLanguage">Dil</string> <string name="changeLanguage">Dil</string>
<string name="systemLanguage">Sistem</string> <string name="systemLanguage">Sistem</string>
<string name="systemDefault">Sistem</string> <string name="systemDefault">Sistem</string>
<string name="lightTheme">ıq mövzu</string> <string name="lightTheme">ıq</string>
<string name="darkTheme">Tünd mövzu</string> <string name="darkTheme">Tünd</string>
<string name="subscribers">%1$s abunəçi</string> <string name="subscribers">%1$s abunəçi</string>
<string name="videoCount">%1$s video</string> <string name="videoCount">%1$s video</string>
<string name="settings">Tənzimləmələr</string> <string name="settings">Tənzimləmələr</string>
@ -103,11 +103,11 @@
<string name="website">Veb Sayt</string> <string name="website">Veb Sayt</string>
<string name="color_accent">Vurğular</string> <string name="color_accent">Vurğular</string>
<string name="color_red">Rahatladıcı qırmızı</string> <string name="color_red">Rahatladıcı qırmızı</string>
<string name="color_blue">Piksel mavisi</string> <string name="color_blue">Xoşbəxt mavi</string>
<string name="color_yellow">Yeeting sarı</string> <string name="color_yellow">Yeeting sarı</string>
<string name="color_green">Möhtəşəm yaşıl</string> <string name="color_green">Möhtəşəm yaşıl</string>
<string name="color_purple">Zövqlü bənövşəyi</string> <string name="color_purple">Zövqlü bənövşəyi</string>
<string name="oledTheme">Qara mövzu</string> <string name="oledTheme">Qara</string>
<string name="material_you">Mistik Material 3</string> <string name="material_you">Mistik Material 3</string>
<string name="sponsorblock_notifications">Bildirişlər</string> <string name="sponsorblock_notifications">Bildirişlər</string>
<string name="enabled">ıq</string> <string name="enabled">ıq</string>
@ -124,7 +124,7 @@
<string name="video_format">Video formatı</string> <string name="video_format">Video formatı</string>
<string name="video_format_summary">Həm səs, həm də video endirilərsə, faylların dönüşdürülməsi.</string> <string name="video_format_summary">Həm səs, həm də video endirilərsə, faylların dönüşdürülməsi.</string>
<string name="download_directory">Bura Endirin</string> <string name="download_directory">Bura Endirin</string>
<string name="download_directory_summary">Endirilmiş media harada saxlanılır.</string> <string name="download_directory_summary">Endirilmiş medianın saxlandığı yer.</string>
<string name="website_summary">Tətbiq və onun xüsusiyyətləri haqqında ətraflı məlumat üçün veb sayta daxil olun.</string> <string name="website_summary">Tətbiq və onun xüsusiyyətləri haqqında ətraflı məlumat üçün veb sayta daxil olun.</string>
<string name="contributing">Töhfə</string> <string name="contributing">Töhfə</string>
<string name="contributing_summary">İdeyalar, tərcümələr, dizayn dəyişiklikləri təmin edin, kodu aydınlaşdırın və yazın. Nə qədər çox etsəniz, bir o qədər yaxşıdır!</string> <string name="contributing_summary">İdeyalar, tərcümələr, dizayn dəyişiklikləri təmin edin, kodu aydınlaşdırın və yazın. Nə qədər çox etsəniz, bir o qədər yaxşıdır!</string>
@ -135,50 +135,66 @@
<string name="app_uptodate">Ən son versiya işlədilir.</string> <string name="app_uptodate">Ən son versiya işlədilir.</string>
<string name="playback_speed">Defolt oynatma sürəti</string> <string name="playback_speed">Defolt oynatma sürəti</string>
<string name="advanced">Qabaqcıl</string> <string name="advanced">Qabaqcıl</string>
<string name="player">Oynadıcı</string> <string name="player">Səs və video</string>
<string name="appearance_summary">Tətbiqi öz zövqünüzə uyğunlaşdırın.</string> <string name="appearance_summary">Tətbiqi öz zövqünüzə uyğunlaşdırın.</string>
<string name="advanced_summary">Oynadıcı, endirmələr, tarixçə</string> <string name="advanced_summary">Endirmələr, tarixçə</string>
<string name="update_summary">Tətbiqin güncəl olub-olmadığını öyrənmək üçün klikləyin.</string> <string name="update_summary">Tətbiqin güncəl olub-olmadığını öyrənmək üçün klikləyin.</string>
<string name="no_update_available">Ən son versiyanı işlədirsiniz.</string> <string name="no_update_available">Ən son versiyanı işlədirsiniz.</string>
<string name="live">Canlı</string> <string name="live">Canlı</string>
<string name="authors">Müəlliflər</string> <string name="authors">Müəlliflər</string>
<string name="authors_summary">Tətbiqi təkmilləşdirməyə kömək edən LibreTube komandası və onun bütün töhfəçiləri ilə tanış olun.</string> <string name="authors_summary">Tətbiqin hazırlanmasında və təkmilləşdirilməsində iştirak edən hər kəslə tanış olun.</string>
<string name="no_replies">Bu şərhə cavab yoxdur.</string> <string name="no_replies">Bu şərhə cavab yoxdur.</string>
<string name="downloads_directory">Endirmə qovluğu</string> <string name="downloads_directory">Endirmə qovluğu</string>
<string name="music_directory">Musiqi qovluğu</string> <string name="music_directory">Musiqi qovluğu</string>
<string name="movies_directory">Film qovluğu</string> <string name="movies_directory">Film qovluğu</string>
<string name="shareTo">URL Paylaşın</string> <string name="shareTo">URL\'ni Paylaşın</string>
<string name="download_folder">Ad</string> <string name="download_folder">Ad</string>
<string name="sdcard">SD kart</string> <string name="sdcard">SD kart</string>
<string name="internal_storage">Daxili yaddaş</string> <string name="internal_storage">Daxili yaddaş</string>
<string name="download_folder_summary">Endirilmiş media qovluğunun adı saxlanılır.</string> <string name="download_folder_summary">Endirilmiş medianın saxlandığı qovluğun adı.</string>
<string name="views">%1$s baxış</string> <string name="views">%1$s baxış</string>
<string name="defaultIcon">Defolt</string> <string name="defaultIcon">Defolt</string>
<string name="legacyIcon">İtmiş miras</string> <string name="legacyIcon">İtmiş miras</string>
<string name="fireIcon">Dəbli yanğın</string> <string name="fireIcon">Dəbli yanğın</string>
<string name="gradientIcon">Glib gradyanı</string> <string name="gradientIcon">Pərgar meyli</string>
<string name="shapedIcon">Axmaq formada</string> <string name="shapedIcon">Axmaq formada</string>
<string name="flameIcon">Uçan alov</string> <string name="flameIcon">Uçan alov</string>
<string name="birdIcon">Gücləndirilmiş quş</string> <string name="birdIcon">Gücləndirilmiş quş</string>
<string name="torchIcon">Dəbli fənər</string> <string name="torchIcon">Dəbli fənər</string>
<string name="instance_name">Server adı</string> <string name="instance_name">Server adı</string>
<string name="instance_api_url">Server API url\'si</string> <string name="instance_api_url">Server API URL\'si</string>
<string name="addInstance">Server Əlavə Edin</string> <string name="addInstance">Server Əlavə Edin</string>
<string name="invalid_url">Lütfən, etibarlı url daxil edin</string> <string name="invalid_url">Zəhmət olmasa, işləyən URL\'ni daxil edin</string>
<string name="customInstance_summary">Fərdi server əlavə edin (riski özünüzə aiddir</string> <string name="customInstance_summary">Fərdi server əlavə edin (riski özünüzə aiddir)</string>
<string name="instance_summary">Piped, giriş, abunəliklər</string> <string name="instance_summary">Piped, giriş, abunəliklər</string>
<string name="empty_instance">Siz adı və API url\'ni doldurmalısınız.</string> <string name="empty_instance">Adı və API URL\'ni daxil edin.</string>
<string name="clear_customInstances">Fərdi serverləri silin</string> <string name="clear_customInstances">Fərdi serverləri silin</string>
<string name="version">Versiya %1$s</string> <string name="version">Versiya %1$s</string>
<string name="about_summary">LibreTube komandası və bunların necə baş verdiyini öyrənin.</string> <string name="about_summary">LibreTube komandası və bunların necə baş verdiyini öyrənin.</string>
<string name="related_streams">Əlaqədar yayımlar</string> <string name="related_streams">Əlaqədar məzmun</string>
<string name="related_streams_summary">Videolara əlaqəli yayımları göstərin.</string> <string name="related_streams_summary">Baxdıqlarınızla yanaşı əlaqəli yayımları göstərin.</string>
<string name="category_filler">Əlaqəsiz/Zarafatlar</string> <string name="category_filler">Əlaqəsiz/Zarafatlar</string>
<string name="show_chapters">Fəsilləri göstərin</string> <string name="show_chapters">Bölmələri göstərin</string>
<string name="category_music_offtopic">Musiqisizlik: Musiqi olmayan bölmə</string> <string name="category_music_offtopic">Musiqi: Musiqisiz Bölmə</string>
<string name="category_preview">Önbaxış/Anons</string> <string name="category_preview">Önbaxış/Anons</string>
<string name="category_preview_description">Eyni seriyanın bu və ya gələcək videolarında nələrin olacağını göstərən, lakin əlavə məlumat təqdim etməyən seqmentlər üçün. Əgər o, yalnız burada görünən klipləri ehtiva edirsə, bu, çox güman ki, düzgün kateqoriya deyil.</string> <string name="category_preview_description">Bu və ya onun seriyasındakı gələcək videolarda qarşıdan gələn məzmunu təfərrüatlandıran, lakin əlavə məlumat təqdim etməyən seqmentlər üçün. Əgər o, yalnız burada görünən klipləri ehtiva edirsə, bu, çox güman ki, yanlış kateqoriyadır.</string>
<string name="hide_chapters">Fəsilləri gizlədin</string> <string name="hide_chapters">Bölmələri gizlədin</string>
<string name="category_filler_description">Bu, videonun əsas məzmununu başa düşmək üçün tələb olunmayan, yalnız doldurucu və ya yumor üçün əlavə edilmiş tangensial səhnələr üçündür.</string> <string name="category_filler_description">Yalnız doldurucu və ya yumor üçün əlavə edilmiş əlaqəsiz səhnələr üçün,videonun əsas məzmununu başa düşmək tələb olunmur.</string>
<string name="category_music_offtopic_description">Bu, yalnız musiqi videolarında istifadə üçündür. O, rəsmi qarışıqların bir hissəsi deyil, videonun hissələrini əhatə etməlidir. Nəhayət, video Spotify və ya hər hansı digər miks versiyasını mümkün qədər yaxından xatırlatmalı və ya danışıq və ya digər diqqəti yayındıran amilləri azaltmalıdır.</string> <string name="category_music_offtopic_description">Yalnız musiqi videolarında istifadə üçün. O, rəsmi qarışıqların bir hissəsi deyil, videonun hissələrini əhatə etməlidir. Sonda video Spotify və ya hər hansı digər qarışıq versiyaya mümkün qədər yaxından bənzəməlidir və ya danışıq və ya digər diqqəti yayındıran amilləri azaltmalıdır.</string>
<string name="playerVideoFormat">Oynadıcı üçün video formatı</string>
<string name="buffering_goal_summary">Maks. bufer üçün video saniyələrin miqdarı.</string>
<string name="buffering_goal">Ön yükləmə</string>
<string name="player_autoplay">Avto-oynatma</string>
<string name="no_video">Video yoxdur</string>
<string name="downloading">Endirilir</string>
<string name="video">Video</string>
<string name="no_audio">Səs yoxdur</string>
<string name="audio">Səs</string>
<string name="hideTrendingPage">Populyar səhifəsini gizlədin</string>
<string name="quality">Keyfiyyət</string>
<string name="behavior">Davranış</string>
<string name="player_summary">Keyfiyyət və oynadıcı davranışı</string>
<string name="seek_increment">Gəlir axtarın</string>
<string name="piped_summary">(Piped) YouTube üçün açıq mənbəli alternativ veb-frontendi, istifadə etdiyimiz API təmin edir. Piped olmasaydı, LibreTube mövcud olmazdı. Onların tərtibatçılarına böyük təşəkkürlər!</string>
<string name="instance_frontend_url">Server üçün URL</string>
</resources> </resources>

View File

@ -56,8 +56,8 @@
<string name="areYouSure">Bist du sicher, dass du die Wiedergabeliste löschen möchtest\?</string> <string name="areYouSure">Bist du sicher, dass du die Wiedergabeliste löschen möchtest\?</string>
<string name="about">Über</string> <string name="about">Über</string>
<string name="systemDefault">System</string> <string name="systemDefault">System</string>
<string name="lightTheme">Helles Farbschema</string> <string name="lightTheme">Hell</string>
<string name="darkTheme">Dunkles Farbschema</string> <string name="darkTheme">Dunkel</string>
<string name="subscribers">%1$s Abonnenten</string> <string name="subscribers">%1$s Abonnenten</string>
<string name="emptyPlaylistName">Der Name der Wiedergabeliste darf nicht leer sein</string> <string name="emptyPlaylistName">Der Name der Wiedergabeliste darf nicht leer sein</string>
<string name="import_from_yt_summary">Von YouTube oder NewPipe</string> <string name="import_from_yt_summary">Von YouTube oder NewPipe</string>
@ -94,7 +94,7 @@
<string name="segment_skipped">Abschnitt übersprungen</string> <string name="segment_skipped">Abschnitt übersprungen</string>
<string name="category_sponsor">Sponsor</string> <string name="category_sponsor">Sponsor</string>
<string name="sponsorblock_state">Ein</string> <string name="sponsorblock_state">Ein</string>
<string name="category_sponsor_description">Bezahlte Werbung, bezahlte Empfehlungen und Direktwerbung. Nicht für Eigenwerbung oder kostenlose Empfehlungen für Anliegen/Ersteller/Websites/Produkte, die sie mögen.</string> <string name="category_sponsor_description">Bezahlte Werbung, bezahlte Verweise und direkte Anzeigen. Nicht für Eigenwerbung oder kostenlose echte Shoutouts für Ursachen, Schöpfer, Websites und Produkte.</string>
<string name="category_selfpromo">Unbezahlte/Selbst Promotion</string> <string name="category_selfpromo">Unbezahlte/Selbst Promotion</string>
<string name="category_interaction">Interaktionserinnerung (mögen und abonnieren)</string> <string name="category_interaction">Interaktionserinnerung (mögen und abonnieren)</string>
<string name="category_outro_description">Infos nach dem Ende. Nicht für Schlussfolgerungen mit Infos.</string> <string name="category_outro_description">Infos nach dem Ende. Nicht für Schlussfolgerungen mit Infos.</string>
@ -166,8 +166,19 @@
<string name="category_preview">Vorschau/Rückblick</string> <string name="category_preview">Vorschau/Rückblick</string>
<string name="hide_chapters">Kapitel ausblenden</string> <string name="hide_chapters">Kapitel ausblenden</string>
<string name="show_chapters">Kapitel anzeigen</string> <string name="show_chapters">Kapitel anzeigen</string>
<string name="buffering_goal">Ziel der Pufferung</string> <string name="buffering_goal">Wird vorgeladen</string>
<string name="buffering_goal_summary">Die Anzahl der Sekunden, die Videos maximal vorgeladen werden.</string> <string name="buffering_goal_summary">Die Anzahl der Sekunden, die Videos maximal vorgeladen werden.</string>
<string name="category_music_offtopic_description">Dies ist nur zur Verwendung in Musikvideos gedacht. Es sollte Teile des Videos abdecken, die nicht Teil der offiziellen Mixe sind. Am Ende sollte das Video der Spotify- oder einer anderen Mix-Version so nahe wie möglich kommen oder das Sprechen oder andere Ablenkungen reduzieren.</string> <string name="category_music_offtopic_description">Nur zur Verwendung in Musikvideos. Es sollte Teile des Videos abdecken, die nicht Teil der offiziellen Abmischungen sind. Am Ende sollte das Video der Spotify- oder einer anderen abgemischten Version so nahe wie möglich kommen oder das Sprechen oder andere Ablenkungen reduzieren.</string>
<string name="playerVideoFormat">Player-Videoformat</string> <string name="playerVideoFormat">Videoformat für Player</string>
<string name="version">Version %1$s</string>
<string name="about_summary">Lernen Sie das Team LibreTube kennen und erfahren Sie, wie das alles abläuft.</string>
<string name="category_preview_description">Für Segmente, die auf kommende Inhalte in diesem oder zukünftigen Videos der Serie hinweisen, aber keine zusätzlichen Informationen liefern. Wenn es Clips enthält, die nur hier erscheinen, ist dies sehr wahrscheinlich die falsche Kategorie.</string>
<string name="player_autoplay">Automatische Wiedergabe</string>
<string name="related_streams_summary">Zeigen Sie verwandte Streams neben dem, was Sie sehen.</string>
<string name="related_streams">Verwandte Inhalte</string>
<string name="no_audio">Kein Ton</string>
<string name="no_video">Kein Video</string>
<string name="audio">Audio</string>
<string name="video">Video</string>
<string name="downloading">Wird heruntergeladen</string>
</resources> </resources>

View File

@ -3,27 +3,27 @@
<string name="unsubscribe">Απεγγραφή</string> <string name="unsubscribe">Απεγγραφή</string>
<string name="username">Όνομα χρήστη</string> <string name="username">Όνομα χρήστη</string>
<string name="password">Κωδικός πρόσβασης</string> <string name="password">Κωδικός πρόσβασης</string>
<string name="login">Σύνδεση</string> <string name="login">Είσοδος</string>
<string name="already_logged_in">Έχετε ήδη συνδεθεί. Μπορείτε να αποσυνδεθείτε από τον λογαριασμό σας.</string> <string name="already_logged_in">Έχετε ήδη συνδεθεί. Μπορείτε να αποσυνδεθείτε από το λογαριασμό σας.</string>
<string name="login_first">Παρακαλώ συνδεθείτε και προσπαθήστε πάλι.</string> <string name="login_first">Παρακαλούμε συνδεθείτε και δοκιμάστε ξανά.</string>
<string name="instances">Επιλογή διακομιστή</string> <string name="instances">Επιλογή ενός διακομιστή</string>
<string name="customInstance">Προσαρμομένος διακομιστής</string> <string name="customInstance">Προσαρμομένος διακομιστής</string>
<string name="region">Περιοχή</string> <string name="region">Περιοχή</string>
<string name="login_register">Σύνδεση/Εγγραφή</string> <string name="login_register">Είσοδος/εγγραφή</string>
<string name="please_login">Παρακαλώ συνδεθείτε ή εγγραφείτε πρώτα στις ρυθμίσεις.</string> <string name="please_login">Παρακαλούμε συνδεθείτε ή εγγραφείτε πρώτα στις ρυθμίσεις.</string>
<string name="cannotDownload">Αποτυχία λήψης αυτού του stream.</string> <string name="cannotDownload">Αποτυχία λήψης αυτού του μέσου.</string>
<string name="dlcomplete">Λήψη επιτυχής.</string> <string name="dlcomplete">Η λήψη ολοκληρώθηκε.</string>
<string name="dlisinprogress">Περιμένετε μέχρι να ολοκληρωθούν όλες οι λήψεις…</string> <string name="dlisinprogress">Παρακαλώ περιμένετε μέχρι να ολοκληρωθούν όλες οι λήψεις…</string>
<string name="downloadfailed">Λήψη ανεπιτυχής.</string> <string name="downloadfailed">Η λήψη απέτυχε.</string>
<string name="vlc">Άνοιγμα στο VLC</string> <string name="vlc">Άνοιγμα στο VLC</string>
<string name="vlcerror">Το βίντεο δεν κατάφερε να ανοίξει στο VLC. Ίσως δεν είναι εγκατεστημένο.</string> <string name="vlcerror">Δεν μπορεί να ανοίξει στο VLC. Μπορεί να μην έχει εγκατασταθεί.</string>
<string name="import_from_yt">Εισαγωγή εγγραφών</string> <string name="import_from_yt">Εισαγωγή εγγραφών</string>
<string name="import_from_yt_summary">Από το YouTube ή το NewPipe</string> <string name="import_from_yt_summary">Από το YouTube ή το NewPipe</string>
<string name="app_theme">Θέμα</string> <string name="app_theme">Θέμα</string>
<string name="server_error">Υπάρχει πρόβλημα με τον διακομιστή. Μήπως να δοκιμάσετε άλλο διακομιστή;</string> <string name="server_error">Υπάρχει πρόβλημα με τον διακομιστή. Μήπως να δοκιμάστε άλλον διακομιστή;</string>
<string name="unknown_error">Πρόβλημα δικτύου.</string> <string name="unknown_error">Σφάλμα δικτύου.</string>
<string name="error">Κάτι πήγε στραβά.</string> <string name="error">Κάτι πήγε στραβά.</string>
<string name="empty">Πρέπει να εισάγετε όνομα χρήστη και κωδικό πρόσβασης.</string> <string name="empty">Πρέπει να εισαγάγετε ένα όνομα χρήστη και έναν κωδικό πρόσβασης.</string>
<string name="deletePlaylist">Διαγραφή λίστας αναπαραγωγής</string> <string name="deletePlaylist">Διαγραφή λίστας αναπαραγωγής</string>
<string name="areYouSure">Διαγραφή της λίστας αναπαραγωγής;</string> <string name="areYouSure">Διαγραφή της λίστας αναπαραγωγής;</string>
<string name="search_hint">Αναζήτηση</string> <string name="search_hint">Αναζήτηση</string>
@ -33,24 +33,24 @@
<string name="createPlaylist">Δημιουργία λίστας αναπαραγωγής</string> <string name="createPlaylist">Δημιουργία λίστας αναπαραγωγής</string>
<string name="playlistCreated">Η λίστα αναπαραγωγής δημιουργήθηκε.</string> <string name="playlistCreated">Η λίστα αναπαραγωγής δημιουργήθηκε.</string>
<string name="playlistName">Όνομα λίστας αναπαραγωγής</string> <string name="playlistName">Όνομα λίστας αναπαραγωγής</string>
<string name="emptyPlaylistName">Το όνομα της λίστας αναπαραγωγής δεν επιτρέπεται να είναι άδειο</string> <string name="emptyPlaylistName">Το όνομα της λίστας αναπαραγωγής δεν μπορεί να είναι κενό</string>
<string name="addToPlaylist">Πρoσθήκη στην λίστα αναπαραγωγής</string> <string name="addToPlaylist">Πρoσθήκη στη λίστα αναπαραγωγής</string>
<string name="success">Ολοκληρώθηκε.</string> <string name="success">Ολοκληρώθηκε.</string>
<string name="fail">Αποτυχία :(</string> <string name="fail">Απέτυχε :(</string>
<string name="about">Σχετικά με</string> <string name="about">Σχετικά με</string>
<string name="share">Κοινοποίηση</string> <string name="share">Κοινοποίηση</string>
<string name="yes">Ναι</string> <string name="yes">Ναι</string>
<string name="choose_quality_dialog">Ποιότητα</string> <string name="choose_quality_dialog">Ποιότητα</string>
<string name="download">Λήψη</string> <string name="download">Λήψη</string>
<string name="registered">Εγγραφή επιτυχής. Τώρα μπορείτε να εγγραφείτε σε κανάλια.</string> <string name="registered">Είστε εγγεγραμμένος. Τώρα μπορείτε να εγγραφείτε σε κανάλια.</string>
<string name="logout">Αποσύνδεση</string> <string name="logout">Αποσύνδεση</string>
<string name="cancel">Ακύρωση</string> <string name="cancel">Ακύρωση</string>
<string name="loggedout">Αποσύνδεση επιτυχής.</string> <string name="loggedout">Αποσυνδεθήκατε.</string>
<string name="loggedIn">Σύνδεση επιτυχής.</string> <string name="loggedIn">Συνδεθήκατε.</string>
<string name="importsuccess">Εγγεγραμμένος</string> <string name="importsuccess">Εγγεγραμμένος</string>
<string name="subscribeIsEmpty">Εγγραφείτε σε μερικά κανάλια πρώτα .</string> <string name="subscribeIsEmpty">Εγγραφείτε πρώτα σε κάποια κανάλια.</string>
<string name="grid">Στήλες πλέγματος</string> <string name="grid">Στήλες πλέγματος</string>
<string name="notgmail">Αυτό είναι για λογαριασμό LibreTube.</string> <string name="notgmail">Αυτό είναι για έναν λογαριασμό LibreTube.</string>
<string name="defres">Προεπιλεγμένη ανάλυση βίντεο</string> <string name="defres">Προεπιλεγμένη ανάλυση βίντεο</string>
<string name="emptyList">Τίποτα εδώ.</string> <string name="emptyList">Τίποτα εδώ.</string>
<string name="startpage">Αρχική σελίδα</string> <string name="startpage">Αρχική σελίδα</string>
@ -59,20 +59,20 @@
<string name="videos">Βίντεο</string> <string name="videos">Βίντεο</string>
<string name="changeLanguage">Γλώσσα</string> <string name="changeLanguage">Γλώσσα</string>
<string name="systemLanguage">Συστήματος</string> <string name="systemLanguage">Συστήματος</string>
<string name="lightTheme">Φωτεινό θέμα</string> <string name="lightTheme">Φωτεινό</string>
<string name="subscribers">%1$s εγγεγραμμένοι</string> <string name="subscribers">%1$s εγγεγραμμένοι</string>
<string name="systemDefault">Συστήματος</string> <string name="systemDefault">Συστήματος</string>
<string name="darkTheme">Σκοτεινό θέμα</string> <string name="darkTheme">Σκοτεινό</string>
<string name="comments">Σχόλια</string> <string name="comments">Σχόλια</string>
<string name="settings">Ρυθμίσεις</string> <string name="settings">Ρυθμίσεις</string>
<string name="customization">Προσαρμογές</string> <string name="customization">Προσαρμογές</string>
<string name="website">Ιστοσελίδα</string> <string name="website">Ιστοσελίδα</string>
<string name="location">Περιοχή</string> <string name="location">Τοποθεσία</string>
<string name="noInternet">Συνδεθείτε πρώτα στο Διαδίκτυο.</string> <string name="noInternet">Συνδεθείτε πρώτα στο Διαδίκτυο.</string>
<string name="retry">Ξαναδοκιμάστε</string> <string name="retry">Προσπαθήστε ξανά</string>
<string name="instance">Διακομιστής</string> <string name="instance">Διακομιστής</string>
<string name="videoCount">%1$s βίντεο</string> <string name="videoCount">%1$s βίντεο</string>
<string name="choose_filter">Επιλογή φίλτρου αναζήτησης</string> <string name="choose_filter">Επιλέξτε φίλτρο αναζήτησης</string>
<string name="channels">Κανάλια</string> <string name="channels">Κανάλια</string>
<string name="all">Όλα</string> <string name="all">Όλα</string>
<string name="playlists">Λίστες αναπαραγωγής</string> <string name="playlists">Λίστες αναπαραγωγής</string>
@ -81,33 +81,33 @@
<string name="search_history">Ιστορικό αναζήτησης</string> <string name="search_history">Ιστορικό αναζήτησης</string>
<string name="clear_history">Εκκαθάριση ιστορικού</string> <string name="clear_history">Εκκαθάριση ιστορικού</string>
<string name="defaultTab">Προεπιλεγμένη καρτέλα</string> <string name="defaultTab">Προεπιλεγμένη καρτέλα</string>
<string name="category_sponsor_description">Προώθηση επί πληρωμή, παραπομπές επί πληρωμή και άμεσες διαφημίσεις. Όχι για προσωπική προώθηση ή δωρεάν διαφήμιση σε σκοπούς/δημιουργούς/ιστοτόπους/προϊόντα που τους αρέσουν.</string> <string name="category_sponsor_description">Πληρωμένη προώθηση, πληρωμένες παραπομπές και άμεσες διαφημίσεις. Όχι για αυτοπροβολή ή δωρεάν γνήσιες αναφορές σε αιτίες, δημιουργούς, ιστότοπους και προϊόντα.</string>
<string name="category_sponsor">Χορηγός</string> <string name="category_sponsor">Χορηγός</string>
<string name="music_songs">YT Music τραγούδια</string> <string name="music_songs">YT Music Τραγούδια</string>
<string name="music_videos">YT Music βίντεο</string> <string name="music_videos">YT Music Βίντεο</string>
<string name="music_albums">YT Music άλμπουμ</string> <string name="music_albums">YT Music Άλμπουμ</string>
<string name="music_playlists">YT Music λίστες αναπαραγωγής</string> <string name="music_playlists">YT Music Λίστες αναπαραγωγής</string>
<string name="sponsorblock">SponsorBlock</string> <string name="sponsorblock">SponsorBlock</string>
<string name="sponsorblock_summary">Χρησιμοποιεί το https://sponsor.ajay.app/ API</string> <string name="sponsorblock_summary">Χρησιμοποιεί το API https://sponsor.ajay.app</string>
<string name="sponsorblock_state">Ενεργοποιημένο</string> <string name="sponsorblock_state">Ενεργοποιημένο</string>
<string name="category_segments">Τμήματα</string> <string name="category_segments">Τμήματα</string>
<string name="segment_skipped">Τμήμα παραλήφθηκε</string> <string name="segment_skipped">Παραλήφθηκε τμήμα</string>
<string name="category_intro">Διάλειμμα/Εισαγωγή</string> <string name="category_intro">Διάλειμμα/Εισαγωγή</string>
<string name="category_selfpromo">Μη-χορηγούμενη/Προσωπική προώθηση</string> <string name="category_selfpromo">Μη αμειβόμενη/αυτοπροώθηση</string>
<string name="category_interaction">Υπενθύμιση αλληλεπίδρασης (Μου αρέσει και εγγραφή)</string> <string name="category_interaction">Υπενθύμιση αλληλεπίδρασης (μου αρέσει και εγγραφή)</string>
<string name="category_selfpromo_description">Παρόμοιο με την επιλογή \"Χορηγός\" αλλά για ενημέρωση μη-χορηγούμενης/προσωπικής προώθησης. Αυτό περιλαμβάνει ενότητες σχετικά με εμπορεύματα, δωρεές ή πληροφορίες σχετικά με όσους συνεργάστηκαν.</string> <string name="category_selfpromo_description">Παρόμοιο με τον \"χορηγό\", αλλά για μη αμειβόμενη/αυτοπροώθηση. Αυτό περιλαμβάνει τμήματα σχετικά με εμπορεύματα, δωρεές ή πληροφορίες σχετικά με το με ποιον συνεργάστηκαν.</string>
<string name="category_outro">Κάρτες τέλους και τίτλοι τέλους</string> <string name="category_outro">Κάρτες τέλους και τίτλοι τέλους</string>
<string name="category_outro_description">Πληροφορίες μετά το τέλος. Όχι για συμπεράσματα με πληροφορίες.</string> <string name="category_outro_description">Πληροφορίες μετά το τέλος. Όχι για συμπεράσματα με πληροφορίες.</string>
<string name="category_intro_description">Ένα χρονικό διάστημα χωρίς πραγματικό περιεχόμενο. Μπορεί να είναι παύση, στατικό καρέ, επαναλαμβανόμενη κινούμενη εικόνα. Δεν πρέπει να χρησιμοποιείται για μεταβάσεις που περιέχουν πληροφορίες.</string> <string name="category_intro_description">Ένα διάστημα χωρίς πραγματικό περιεχόμενο. Θα μπορούσε να είναι μια παύση, ένα στατικό καρέ, μια επαναλαμβανόμενη κίνηση. Δεν πρέπει να χρησιμοποιείται για μεταβάσεις που περιέχουν πληροφορίες.</string>
<string name="category_interaction_description">Όταν υπάρχει μια σύντομη υπενθύμιση για να πατήσετε μου αρέσει, να εγγραφείτε ή να ακολουθήσετε το κανάλι τους στη μέση του περιεχομένου. Εάν είναι μεγάλης διάρκειας ή για κάτι συγκεκριμένο, θα πρέπει να παρατίθεται στην επιλογή \" Μη-χορηγούμενη/Προσωπική προώθηση\".</string> <string name="category_interaction_description">Όταν υπάρχει μια σύντομη υπενθύμιση για να πατήσετε μου αρέσει, να εγγραφείτε ή να ακολουθήσετε το κανάλι στη μέση του περιεχομένου. Αν είναι μακροσκελές ή αφορά κάτι συγκεκριμένο, θα πρέπει να παρατίθεται στην αυτοπροώθηση.</string>
<string name="license">Άδεια</string> <string name="license">Άδεια</string>
<string name="oledTheme">Μαύρο θέμα</string> <string name="oledTheme">Μαύρο</string>
<string name="color_accent">Αποχρώσεις</string> <string name="color_accent">Αποχρώσεις</string>
<string name="color_blue">Pixel μπλε</string> <string name="color_blue">Ευτυχισμένο μπλε</string>
<string name="color_yellow">Κίτρινο που μυρίζει</string> <string name="color_yellow">Κίτρινο που μυρίζει</string>
<string name="color_green">Αυλό πράσινο</string> <string name="color_green">Αυλό πράσινο</string>
<string name="color_purple">Απολαυστικό μωβ</string> <string name="color_purple">Ευχάριστο μοβ</string>
<string name="color_red">Κόκκινη ανάπαυση</string> <string name="color_red">Κόκκινο για ξεκούραση</string>
<string name="material_you">Μυστικό Υλικό 3</string> <string name="material_you">Μυστικό Υλικό 3</string>
<string name="sponsorblock_notifications">Ειδοποιήσεις</string> <string name="sponsorblock_notifications">Ειδοποιήσεις</string>
<string name="app_icon">Εικονίδιο</string> <string name="app_icon">Εικονίδιο</string>
@ -115,73 +115,86 @@
<string name="youtube">YouTube</string> <string name="youtube">YouTube</string>
<string name="enabled">Ενεργοποιημένο</string> <string name="enabled">Ενεργοποιημένο</string>
<string name="disabled">Απενεργοποιημένο</string> <string name="disabled">Απενεργοποιημένο</string>
<string name="playOnBackground">Αναπαραγωγή στο υπόβαθρο</string> <string name="playOnBackground">Αναπαραγωγή στο παρασκήνιο</string>
<string name="update_available">Η έκδοση %1$s είναι διαθέσιμη</string> <string name="update_available">Η έκδοση %1$s είναι διαθέσιμη</string>
<string name="update_available_text">Μετάβαση στις εκδόσεις στο GitHub για να το κατεβάσετε;</string> <string name="update_available_text">Μετάβαση στις εκδόσεις στο GitHub για να το κατεβάσετε;</string>
<string name="appearance">Εμφάνιση</string> <string name="appearance">Εμφάνιση</string>
<string name="app_behavior">Συμπεριφορά</string> <string name="app_behavior">Συμπεριφορά</string>
<string name="downloads">Λήψεις</string> <string name="downloads">Λήψεις</string>
<string name="video_format">Μορφή βίντεο</string> <string name="video_format">Μορφή βίντεο</string>
<string name="video_format_summary">Μετατροπή αρχείων εάν έχει γίνει λήψη και ήχου και βίντεο.</string> <string name="video_format_summary">Μετατροπή των αρχείων σε περίπτωση λήψης ήχου και βίντεο.</string>
<string name="download_directory">Λήψη σε</string> <string name="download_directory">Λήψη σε</string>
<string name="download_directory_summary">Πού αποθηκεύονται τα ληφθέντα μέσα.</string> <string name="download_directory_summary">Πού αποθηκεύονται τα ληφθέντα μέσα.</string>
<string name="website_summary">Επισκεφτείτε τον ιστότοπο για περισσότερες πληροφορίες σχετικά με την εφαρμογή και τις δυνατότητές της.</string> <string name="website_summary">Επισκεφτείτε τον ιστότοπο για περισσότερες πληροφορίες σχετικά με την εφαρμογή και τις δυνατότητές της.</string>
<string name="license_summary">Η GPLv3+ είναι μια άδεια χρήσης που έχει κατοχυρωθεί με δικαιώματα πνευματικής ιδιοκτησίας. Χρήση, μελέτη, αλλαγή και κοινή χρήση. με όλα.</string> <string name="license_summary">Η GPLv3+ είναι μια άδεια χρήσης που έχει κατοχυρωθεί με δικαιώματα πνευματικής ιδιοκτησίας. Χρήση, μελέτη, αλλαγή και κοινή χρήση. με όλα.</string>
<string name="donate">Συνεισφορά</string> <string name="donate">Δωρεά</string>
<string name="update">Ψάξτε για νέα έκδοση</string> <string name="update">Αναζητήστε νέα έκδοση</string>
<string name="update_summary">Πατήστε για να μάθετε εάν η εφαρμογή είναι ενημερωμένη.</string> <string name="update_summary">Πατήστε για να μάθετε αν η εφαρμογή είναι ενημερωμένη.</string>
<string name="no_update_available">Εκτελείτε την πιο πρόσφατη έκδοση.</string> <string name="no_update_available">Εκτελείτε την τελευταία έκδοση.</string>
<string name="contributing">Συμβάλοντας</string> <string name="contributing">Συμβάλοντας</string>
<string name="appearance_summary">Προσαρμόστε την εφαρμογή σύμφωνα με τις προτιμήσεις σας.</string> <string name="appearance_summary">Προσαρμόστε την εφαρμογή σύμφωνα με τις προτιμήσεις σας.</string>
<string name="player">Αναπαραγωγέας</string> <string name="player">Ήχος και βίντεο</string>
<string name="playback_speed">Προκαθορισμένη ταχύτητα αναπαραγωγής</string> <string name="playback_speed">Προεπιλεγμένη ταχύτητα αναπαραγωγής</string>
<string name="contributing_summary">Παρέχετε ιδέες, μεταφράσεις, αλλαγές σχεδίασης, καθαρίστε και γράψτε κώδικα. Όσο περισσότερα γίνονται τόσο καλύτερη γίνεται η εφαρμογή!</string> <string name="contributing_summary">Παρέχετε ιδέες, μεταφράσεις, αλλαγές σχεδίασης, καθαρίστε και γράψτε κώδικα. Όσο περισσότερα γίνονται τόσο καλύτερη γίνεται η εφαρμογή!</string>
<string name="donate_summary">Δώσε αυτό που αξίζει σε σένα, αν μπορείς. Η ομάδα του LibreTube είναι μικρότερη από τη δωρεά ή τη βοήθειά σας.</string> <string name="donate_summary">Δώστε ό,τι αξίζει για εσάς, αν μπορείτε. Η ομάδα του LibreTube είναι μικρότερη από τη δωρεά ή τη βοήθειά σας.</string>
<string name="app_uptodate">Εκτελείται η πιο πρόσφατη έκδοση.</string> <string name="app_uptodate">Εκτελείται η τελευταία έκδοση.</string>
<string name="advanced">Για προχωρημένους</string> <string name="advanced">Για προχωρημένους</string>
<string name="advanced_summary">Αναπαραγωγέας, λήψεις, ιστορικό</string> <string name="advanced_summary">Λήψεις, ιστορικό</string>
<string name="authors">Συγγραφείς</string> <string name="authors">Ομάδα</string>
<string name="authors_summary">Γνωρίστε την ομάδα του LibreTube και όλους τους συνεισφέροντες της που βοηθούν στη βελτίωση της εφαρμογής.</string> <string name="authors_summary">Γνωρίστε όλους όσους συμμετέχουν στην ανάπτυξη και τη βελτίωση της εφαρμογής.</string>
<string name="download_folder">Όνομα</string> <string name="download_folder">Όνομα</string>
<string name="internal_storage">Εσωτερικός χώρος</string> <string name="internal_storage">Εσωτερικός χώρος αποθήκευσης</string>
<string name="sdcard">Κάρτα SD</string> <string name="sdcard">Κάρτα SD</string>
<string name="music_directory">Φάκελος μουσικής</string> <string name="music_directory">Φάκελος μουσικής</string>
<string name="movies_directory">Φάκελος ταινιών</string> <string name="movies_directory">Φάκελος ταινιών</string>
<string name="shareTo">Κοινή χρήση διεύθυνσης URL σε</string> <string name="shareTo">Μοιραστείτε τη διεύθυνση URL σε</string>
<string name="downloads_directory">Φάκελος λήψεων</string> <string name="downloads_directory">Φάκελος λήψεων</string>
<string name="no_replies">Αυτό το σχόλιο δεν έχει απαντήσεις.</string> <string name="no_replies">Αυτό το σχόλιο δεν έχει απαντήσεις.</string>
<string name="download_folder_summary">Το όνομα του φακέλου στον οποίο τα κατεβασμένα μέσα αποθηκεύονται.</string> <string name="download_folder_summary">Το όνομα του φακέλου στον οποίο τα κατεβασμένα μέσα αποθηκεύονται.</string>
<string name="live">Ζωντανά</string> <string name="live">Ζωντανά</string>
<string name="torchIcon">Μοντέρνος πυρσός</string> <string name="torchIcon">Μοντέρνος πυρσός</string>
<string name="fireIcon">Μοδάτη φωτιά</string> <string name="fireIcon">Μοντέρνα φωτιά</string>
<string name="gradientIcon">Κλίση Glib</string> <string name="gradientIcon">Κλίση Glib</string>
<string name="shapedIcon">Ανόητο σχήμα</string> <string name="shapedIcon">Ανόητο σχήμα</string>
<string name="legacyIcon">Χαμένη κληρονομιά</string> <string name="legacyIcon">Χαμένη κληρονομιά</string>
<string name="views">%1$s προβολές</string> <string name="views">%1$s προβολές</string>
<string name="defaultIcon">Προκαθορισμένο</string> <string name="defaultIcon">Προεπιλεγμένο</string>
<string name="flameIcon">Ιπτάμενη φλόγα</string> <string name="flameIcon">Ιπτάμενη φλόγα</string>
<string name="birdIcon">Ενισχυμένο πουλί</string> <string name="birdIcon">Ενισχυμένο πουλί</string>
<string name="clear_customInstances">Εκκαθάριση προσαρμοσμένων διακομιστών</string> <string name="clear_customInstances">Εκκαθάριση προσαρμοσμένων διακομιστών</string>
<string name="customInstance_summary">Προσθήκη προσαρμοσμένου διακομιστή (με δική σας ευθύνη)</string> <string name="customInstance_summary">Προσθέστε έναν προσαρμοσμένο διακομιστή (με δική σας ευθύνη)</string>
<string name="instance_name">Όνομα διακομιστή</string> <string name="instance_name">Όνομα διακομιστή</string>
<string name="instance_summary">Piped, σύνδεση, εγγραφές</string> <string name="instance_summary">Piped, σύνδεση, εγγραφές</string>
<string name="invalid_url">Εισαγάγετε μια έγκυρη διεύθυνση URL</string> <string name="invalid_url">Παρακαλούμε εισάγετε μια διεύθυνση URL που λειτουργεί</string>
<string name="instance_api_url">Σύνδεσμος URL του API του διακομιστή</string> <string name="instance_api_url">Διεύθυνση URL για το API του διακομιστή</string>
<string name="addInstance">Προσθήκη διακομιστή</string> <string name="addInstance">Προσθήκη διακομιστή</string>
<string name="empty_instance">Πρέπει να συμπληρώσετε το όνομα και τη διεύθυνση URL του API.</string> <string name="empty_instance">Συμπληρώστε το όνομα και τη διεύθυνση URL του API.</string>
<string name="about_summary">Γνωρίστε την ομάδα του LibreTube και πώς συμβαίνουν όλα αυτά.</string> <string name="about_summary">Γνωρίστε την ομάδα του LibreTube και πώς συμβαίνουν όλα αυτά.</string>
<string name="version">Έκδοση %1$s</string> <string name="version">Έκδοση %1$s</string>
<string name="related_streams">Σχετικά βίντεο</string> <string name="related_streams">Σχετικό περιεχόμενο</string>
<string name="related_streams_summary">Εμφάνιση σχετικών βίντεο κάτω από το βίντεο.</string> <string name="related_streams_summary">Εμφάνιση σχετικών βίντεο παράλληλα με αυτό που παρακολουθείτε.</string>
<string name="show_chapters">Εμφάνιση κεφαλαίων</string> <string name="show_chapters">Εμφάνιση κεφαλαίων</string>
<string name="hide_chapters">Απόκρυψη κεφαλαίων</string> <string name="hide_chapters">Απόκρυψη κεφαλαίων</string>
<string name="category_filler_description">Αυτό ισχύει για εφαπτομενικές σκηνές που προστίθενται μόνο για πληρωτικό υλικό ή χιούμορ που δεν απαιτούνται για την κατανόηση του κύριου περιεχομένου του βίντεο.</string> <string name="category_filler_description">Για εφαπτόμενες σκηνές που προστίθενται μόνο για γέμισμα ή χιούμορ που δεν απαιτούνται για την κατανόηση του κύριου περιεχομένου του βίντεο.</string>
<string name="category_music_offtopic">Μουσική: Μη-Μουσικό Τμήμα</string> <string name="category_music_offtopic">Μουσική: Μη-Μουσικό Τμήμα</string>
<string name="category_preview">Προεπισκόπηση/Ανακεφαλαίωση</string> <string name="category_preview">Προεπισκόπηση/Ανακεφαλαίωση</string>
<string name="category_filler">Εφαπτομενικό πληρωτικό υλικό/Αστεία</string> <string name="category_filler">Εφαπτομενικό πληρωτικό υλικό/Αστεία</string>
<string name="buffering_goal">Στόχος buffering</string> <string name="buffering_goal">Προφόρτωση</string>
<string name="buffering_goal_summary">Ο αριθμός των δευτερολέπτων που προφορτώνονται τα βίντεο στο μέγιστο.</string> <string name="buffering_goal_summary">Μέγιστη ποσότητα δευτερολέπτων βίντεο για προφόρτωση.</string>
<string name="playerVideoFormat">Μορφή βίντεο αναπαραγωγέα</string> <string name="playerVideoFormat">Μορφή βίντεο για τον αναπαραγωγέα</string>
<string name="category_music_offtopic_description">Αυτό προορίζεται μόνο για χρήση σε μουσικά βίντεο. Θα πρέπει να καλύπτει μέρη του βίντεο που δεν περιλαμβάνονται στις επίσημες μίξεις. Στο τέλος, το βίντεο θα πρέπει να μοιάζει όσο το δυνατόν περισσότερο με την έκδοση του Spotify ή οποιασδήποτε άλλης μίξης, ή θα πρέπει να μειώνει τις ομιλίες ή άλλους περισπασμούς.</string> <string name="category_music_offtopic_description">Μόνο για χρήση σε μουσικά βίντεο. Θα πρέπει να καλύπτει μέρη του βίντεο που δεν περιλαμβάνονται στις επίσημες μίξεις. Στο τέλος, το βίντεο θα πρέπει να μοιάζει όσο το δυνατόν περισσότερο με την έκδοση του Spotify ή οποιαδήποτε άλλη μίξη, ή να μειώνει τις ομιλίες ή άλλους περισπασμούς.</string>
<string name="category_preview_description">Για τμήματα που δείχνουν τι θα ακολουθήσει σε αυτό ή σε μελλοντικά βίντεο της ίδιας σειράς, αλλά δεν παρέχουν πρόσθετες πληροφορίες. Αν περιλαμβάνει αποσπάσματα που εμφανίζονται μόνο εδώ, είναι πολύ πιθανό να μην είναι η σωστή κατηγορία.</string> <string name="category_preview_description">Για τμήματα που περιγράφουν λεπτομερώς το επερχόμενο περιεχόμενο σε αυτό ή σε μελλοντικά βίντεο της σειράς, αλλά δεν παρέχουν πρόσθετες πληροφορίες. Εάν περιλαμβάνει κλιπ που εμφανίζεται μόνο εδώ, είναι πολύ πιθανό να πρόκειται για την λάθος κατηγορία.</string>
<string name="no_audio">Χωρίς ήχο</string>
<string name="no_video">Χωρίς βίντεο</string>
<string name="audio">Ήχος</string>
<string name="video">Βίντεο</string>
<string name="player_autoplay">Αυτόματη αναπαραγωγή</string>
<string name="downloading">Λήψη</string>
<string name="hideTrendingPage">Απόκρυψη σελίδας τάσεων</string>
<string name="instance_frontend_url">Διεύθυνση URL στη σελίδα του διακομιστή</string>
<string name="quality">Ποιότητα</string>
<string name="behavior">Συμπεριφορά</string>
<string name="player_summary">Ποιότητα και συμπεριφορά του αναπαραγωγέα</string>
<string name="seek_increment">Προσάυξηση αναζήτησης</string>
<string name="piped_summary">Το Piped είναι μία εναλλακτική σελίδα ανοικτού κώδικα για το YouTube που παρέχει το API που χρησιμοποιούμε. Χωρίς το Piped, το LibreTube δεν θα υπήρχε. Τεράστιες ευχαριστίες στους προγραμματιστές του!</string>
</resources> </resources>

View File

@ -36,7 +36,7 @@
<string name="error">Algo salió mal.</string> <string name="error">Algo salió mal.</string>
<string name="empty">Tienes que introducir un nombre de usuario y una contraseña.</string> <string name="empty">Tienes que introducir un nombre de usuario y una contraseña.</string>
<string name="notgmail">Esto es para una cuenta de LibreTube.</string> <string name="notgmail">Esto es para una cuenta de LibreTube.</string>
<string name="defres">Resolución de video predeterminada</string> <string name="defres">Resolución de vídeo predeterminada</string>
<string name="grid">Columnas de la cuadrícula</string> <string name="grid">Columnas de la cuadrícula</string>
<string name="emptyList">No hay nada aquí.</string> <string name="emptyList">No hay nada aquí.</string>
<string name="areYouSure">¿Eliminar la lista de reproducción\?</string> <string name="areYouSure">¿Eliminar la lista de reproducción\?</string>
@ -59,12 +59,12 @@
<string name="import_from_yt_summary">Desde YouTube o NewPipe</string> <string name="import_from_yt_summary">Desde YouTube o NewPipe</string>
<string name="changeLanguage">Idioma</string> <string name="changeLanguage">Idioma</string>
<string name="systemLanguage">Sistema</string> <string name="systemLanguage">Sistema</string>
<string name="lightTheme">Tema claro</string> <string name="lightTheme">Claro</string>
<string name="darkTheme">Tema oscuro</string> <string name="darkTheme">Oscuro</string>
<string name="subscribers">%1$s suscriptores</string> <string name="subscribers">%1$s suscriptores</string>
<string name="systemDefault">Sistema</string> <string name="systemDefault">Sistema</string>
<string name="comments">Comentarios</string> <string name="comments">Comentarios</string>
<string name="videoCount">%1$s videos</string> <string name="videoCount">%1$s vídeos</string>
<string name="noInternet">Conéctese primero a Internet.</string> <string name="noInternet">Conéctese primero a Internet.</string>
<string name="retry">Reintentar</string> <string name="retry">Reintentar</string>
<string name="customization">Personalización</string> <string name="customization">Personalización</string>
@ -81,7 +81,7 @@
<string name="search_history">Historial de búsqueda</string> <string name="search_history">Historial de búsqueda</string>
<string name="clear_history">Borrar historial</string> <string name="clear_history">Borrar historial</string>
<string name="music_songs">Canciones musicales de YT</string> <string name="music_songs">Canciones musicales de YT</string>
<string name="music_videos">Videos musicales de YT</string> <string name="music_videos">Vídeos musicales de YT</string>
<string name="music_albums">Álbumes musicales de YT</string> <string name="music_albums">Álbumes musicales de YT</string>
<string name="music_playlists">Playlists de música de YT</string> <string name="music_playlists">Playlists de música de YT</string>
<string name="defaultTab">Pestaña predeterminada</string> <string name="defaultTab">Pestaña predeterminada</string>
@ -89,7 +89,7 @@
<string name="sponsorblock_summary">Utiliza la API de https://sponsor.ajay.app</string> <string name="sponsorblock_summary">Utiliza la API de https://sponsor.ajay.app</string>
<string name="segment_skipped">Segmento omitido</string> <string name="segment_skipped">Segmento omitido</string>
<string name="category_sponsor">Patrocinador</string> <string name="category_sponsor">Patrocinador</string>
<string name="category_sponsor_description">Promoción pagada, referencias pagadas y anuncios directos. No para la autopromoción o los anuncios gratuitos de causas/creadores/sitios web/productos que les gustan.</string> <string name="category_sponsor_description">Promoción pagada, referencias pagadas y anuncios directos. No para la autopromoción o los agradecimientos genuinos y gratuitos a las causas, creadores, sitios web y productos.</string>
<string name="sponsorblock_state">Activado</string> <string name="sponsorblock_state">Activado</string>
<string name="category_segments">Segmentos</string> <string name="category_segments">Segmentos</string>
<string name="category_selfpromo_description">Similar a \"patrocinador\", excepto que no se paga o se hace autopromoción. Esto incluye secciones sobre mercancía, donaciones o información sobre con quién han colaborado.</string> <string name="category_selfpromo_description">Similar a \"patrocinador\", excepto que no se paga o se hace autopromoción. Esto incluye secciones sobre mercancía, donaciones o información sobre con quién han colaborado.</string>
@ -107,7 +107,7 @@
<string name="color_green">Verde</string> <string name="color_green">Verde</string>
<string name="color_blue">Azul</string> <string name="color_blue">Azul</string>
<string name="color_purple">Púrpura</string> <string name="color_purple">Púrpura</string>
<string name="oledTheme">Tema negro</string> <string name="oledTheme">Negro</string>
<string name="material_you">Mystic Material 3</string> <string name="material_you">Mystic Material 3</string>
<string name="app_icon">Icono</string> <string name="app_icon">Icono</string>
<string name="piped">Piped</string> <string name="piped">Piped</string>
@ -123,7 +123,7 @@
<string name="appearance">Apariencia</string> <string name="appearance">Apariencia</string>
<string name="no_replies">Este comentario no tiene respuestas.</string> <string name="no_replies">Este comentario no tiene respuestas.</string>
<string name="authors">Autores</string> <string name="authors">Autores</string>
<string name="authors_summary">Conoce al equipo de LibreTube y a todos los colaboradores que ayudan a mejorar la aplicación.</string> <string name="authors_summary">Conozca a todos.</string>
<string name="internal_storage">Almacenamiento interno</string> <string name="internal_storage">Almacenamiento interno</string>
<string name="sdcard">Tarjeta SD</string> <string name="sdcard">Tarjeta SD</string>
<string name="shareTo">Compartir con</string> <string name="shareTo">Compartir con</string>
@ -141,14 +141,14 @@
<string name="birdIcon">Pájaro</string> <string name="birdIcon">Pájaro</string>
<string name="instance_summary">Piped, sesión y suscripciones</string> <string name="instance_summary">Piped, sesión y suscripciones</string>
<string name="instance_name">Nombre de la instancia</string> <string name="instance_name">Nombre de la instancia</string>
<string name="instance_api_url">URL de la instancia</string> <string name="instance_api_url">URL de la API de la instancia</string>
<string name="empty_instance">Tienes que llenar el nombre y el URL</string> <string name="empty_instance">Introduzca el nombre y la URL de la API.</string>
<string name="clear_customInstances">Eliminar instancias personalizadas</string> <string name="clear_customInstances">Eliminar instancias personalizadas</string>
<string name="invalid_url">Por favor, introduce un URL válido</string> <string name="invalid_url">Por favor, introduzca una URL que funcione</string>
<string name="version">Versión %1$s</string> <string name="version">Versión %1$s</string>
<string name="about_summary">Conoce al equipo de LibreTube y como sucede todo.</string> <string name="about_summary">Conoce al equipo de LibreTube y como sucede todo.</string>
<string name="related_streams">Transmisiones relacionadas</string> <string name="related_streams">Contenido relacionado</string>
<string name="related_streams_summary">Mostrar transmisiones relacionadas con los videos.</string> <string name="related_streams_summary">Mostrar transmisiones relacionadas con lo que ves.</string>
<string name="website_summary">Visita el sitio web para más información de la aplicación y sus características.</string> <string name="website_summary">Visita el sitio web para más información de la aplicación y sus características.</string>
<string name="contributing_summary">Aportar ideas, traducciones, cambios de diseño, limpiar y escribir código. ¡Cuanto más se haga, mejor será!</string> <string name="contributing_summary">Aportar ideas, traducciones, cambios de diseño, limpiar y escribir código. ¡Cuanto más se haga, mejor será!</string>
<string name="license_summary">La GPLv3+ es una licencia libre con copyleft. Utiliza, estudia, cambia y comparte; con todos.</string> <string name="license_summary">La GPLv3+ es una licencia libre con copyleft. Utiliza, estudia, cambia y comparte; con todos.</string>
@ -163,8 +163,8 @@
<string name="torchIcon">Antorcha</string> <string name="torchIcon">Antorcha</string>
<string name="customInstance_summary">Añadir una instancia personalizada (bajo tu propio riesgo)</string> <string name="customInstance_summary">Añadir una instancia personalizada (bajo tu propio riesgo)</string>
<string name="downloads">Descargas</string> <string name="downloads">Descargas</string>
<string name="video_format">Formato de video</string> <string name="video_format">Formato de vídeo</string>
<string name="video_format_summary">Conversión de archivos si se descargan tanto el audio como el video.</string> <string name="video_format_summary">Conversión de archivos si se descargan tanto el audio como el vídeo.</string>
<string name="download_directory">Directorio de descargas</string> <string name="download_directory">Directorio de descargas</string>
<string name="contributing">Contribución</string> <string name="contributing">Contribución</string>
<string name="donate">Donar</string> <string name="donate">Donar</string>
@ -175,6 +175,21 @@
<string name="live">En vivo</string> <string name="live">En vivo</string>
<string name="show_chapters">Mostrar capítulos</string> <string name="show_chapters">Mostrar capítulos</string>
<string name="hide_chapters">Ocultar capítulos</string> <string name="hide_chapters">Ocultar capítulos</string>
<string name="buffering_goal">Objetivo del búfer</string> <string name="buffering_goal">Precarga</string>
<string name="buffering_goal_summary">La cantidad de segundos que los videos se precargan al máximo.</string> <string name="buffering_goal_summary">Cantidad máxima de segundos de vídeo a almacenar en búfer.</string>
<string name="category_filler">Tangente/chistes de relleno</string>
<string name="category_music_offtopic">Música: Sección no musical</string>
<string name="category_preview">Vista previa/Resumen</string>
<string name="category_preview_description">Para los segmentos que detallan los próximos contenidos de este o futuros vídeos de su serie, pero que no proporcionan información adicional. Si incluye clips que sólo aparecen aquí, es muy probable que esta sea la categoría equivocada.</string>
<string name="category_filler_description">Para las escenas tangenciales que se añaden sólo para el relleno o el humor que no es necesario para entender el contenido principal del vídeo.</string>
<string name="playerVideoFormat">Formato de vídeo para el reproductor</string>
<string name="category_music_offtopic_description">Sólo para su uso en vídeos musicales. Debe abarcar partes del vídeo que no formen parte de las mezclas oficiales. Al final, el vídeo debe parecerse lo más posible a la versión de Spotify o a cualquier otra versión mezclada, o reducir las conversaciones u otras distracciones.</string>
<string name="player_autoplay">Reproducción automática</string>
<string name="no_video">Sin vídeo</string>
<string name="downloading">Descargando</string>
<string name="hideTrendingPage">Ocultar página de tendencias</string>
<string name="instance_frontend_url">URL de la interfaz de la instancia</string>
<string name="no_audio">Sin audio</string>
<string name="audio">Audio</string>
<string name="video">Vídeo</string>
</resources> </resources>

View File

@ -184,4 +184,5 @@
<string name="category_music_offtopic_description">Musika-bideoetan bakarrik erabil daiteke. Nahaste ofizialetakoak ez diren bideo-zatiak estaliko ditu. Azkenean, bideoak Spotifyren edo beste edozein nahasketa bertsioren antzekoa izan behar du, edo hitz egitea edo beste entretenimendu batzuk murriztu behar ditu.</string> <string name="category_music_offtopic_description">Musika-bideoetan bakarrik erabil daiteke. Nahaste ofizialetakoak ez diren bideo-zatiak estaliko ditu. Azkenean, bideoak Spotifyren edo beste edozein nahasketa bertsioren antzekoa izan behar du, edo hitz egitea edo beste entretenimendu batzuk murriztu behar ditu.</string>
<string name="buffering_goal">Aurrez kargatzea</string> <string name="buffering_goal">Aurrez kargatzea</string>
<string name="playerVideoFormat">Erreproduzitzailearen bideo formatua</string> <string name="playerVideoFormat">Erreproduzitzailearen bideo formatua</string>
<string name="player_autoplay">Erreprodukzio automatikoa</string>
</resources> </resources>

View File

@ -54,14 +54,14 @@
<string name="emptyPlaylistName">Le nom de la liste de lecture ne peut pas être vide</string> <string name="emptyPlaylistName">Le nom de la liste de lecture ne peut pas être vide</string>
<string name="import_from_yt_summary">Depuis YouTube ou NewPipe</string> <string name="import_from_yt_summary">Depuis YouTube ou NewPipe</string>
<string name="subscriptions">Abonnements</string> <string name="subscriptions">Abonnements</string>
<string name="lightTheme">Thème clair</string> <string name="lightTheme">Clair</string>
<string name="library">Bibliothèque</string> <string name="library">Bibliothèque</string>
<string name="startpage">Accueil</string> <string name="startpage">Accueil</string>
<string name="videos">Vidéos</string> <string name="videos">Vidéos</string>
<string name="changeLanguage">Langue</string> <string name="changeLanguage">Langue</string>
<string name="systemLanguage">Système</string> <string name="systemLanguage">Système</string>
<string name="systemDefault">Système</string> <string name="systemDefault">Système</string>
<string name="darkTheme">Thème sombre</string> <string name="darkTheme">Sombre</string>
<string name="subscribers">%1$s abonnés</string> <string name="subscribers">%1$s abonnés</string>
<string name="comments">Commentaires</string> <string name="comments">Commentaires</string>
<string name="videoCount">%1$s vidéos</string> <string name="videoCount">%1$s vidéos</string>
@ -99,14 +99,14 @@
<string name="category_intro">Animation d\'intro/entracte</string> <string name="category_intro">Animation d\'intro/entracte</string>
<string name="license">Licence</string> <string name="license">Licence</string>
<string name="category_interaction_description">Lorsqu\'il y a un bref rappel pour aimer, s\'abonner ou suivre au milieu du contenu. S\'il est long ou porte sur un sujet spécifique, il doit plutôt s\'agir d\'autopromotion.</string> <string name="category_interaction_description">Lorsqu\'il y a un bref rappel pour aimer, s\'abonner ou suivre au milieu du contenu. S\'il est long ou porte sur un sujet spécifique, il doit plutôt s\'agir d\'autopromotion.</string>
<string name="category_sponsor_description">Promotion payée, références payées et publicités directes. Il ne s\'agit pas d\'autopromotion ou de citation gratuite de causes/créateurs/sites web/produits qu\'ils aiment.</string> <string name="category_sponsor_description">Promotion payée, références payées et publicités directes. Il ne s\'agit pas d\'autopromotion ou d\'une véritable mise en avant gratuite de causes, de créateurs, de sites web et de produits.</string>
<string name="category_interaction">Rappel d\'interaction (par ex. : S\'abonner)</string> <string name="category_interaction">Rappel d\'interaction (par ex. : S\'abonner)</string>
<string name="color_purple">Violet plaisant</string> <string name="color_purple">Violet plaisant</string>
<string name="color_blue">Bleu pixel</string> <string name="color_blue">Bleu béat</string>
<string name="color_accent">Accentuations</string> <string name="color_accent">Accentuations</string>
<string name="color_red">Rouge de repos</string> <string name="color_red">Rouge de repos</string>
<string name="color_yellow">Jaune vif</string> <string name="color_yellow">Jaune vif</string>
<string name="oledTheme">Thème noir</string> <string name="oledTheme">Noir</string>
<string name="material_you">Mystic Material 3</string> <string name="material_you">Mystic Material 3</string>
<string name="color_green">Vert groovy</string> <string name="color_green">Vert groovy</string>
<string name="sponsorblock_notifications">Notifications</string> <string name="sponsorblock_notifications">Notifications</string>
@ -121,7 +121,7 @@
<string name="donate_summary">Si vous aimez l\'application et appréciez notre travail, nous serions heureux de votre don.</string> <string name="donate_summary">Si vous aimez l\'application et appréciez notre travail, nous serions heureux de votre don.</string>
<string name="contributing">Contribution</string> <string name="contributing">Contribution</string>
<string name="donate">Faire un don</string> <string name="donate">Faire un don</string>
<string name="advanced_summary">Lecteur, téléchargements, historique</string> <string name="advanced_summary">Téléchargements, historique</string>
<string name="video_format_summary">Conversion des fichiers si on télécharge à la fois de l\'audio et de la vidéo.</string> <string name="video_format_summary">Conversion des fichiers si on télécharge à la fois de l\'audio et de la vidéo.</string>
<string name="download_directory_summary">Où sont stockés les médias téléchargés.</string> <string name="download_directory_summary">Où sont stockés les médias téléchargés.</string>
<string name="license_summary">La GPLv3+ est une licence libre copylefté. Utilisez, étudiez, modifiez et partagez ; avec tous.</string> <string name="license_summary">La GPLv3+ est une licence libre copylefté. Utilisez, étudiez, modifiez et partagez ; avec tous.</string>
@ -138,12 +138,12 @@
<string name="no_update_available">Vous utilisez la dernière version.</string> <string name="no_update_available">Vous utilisez la dernière version.</string>
<string name="playback_speed">Vitesse de lecture par défaut</string> <string name="playback_speed">Vitesse de lecture par défaut</string>
<string name="advanced">Avancé</string> <string name="advanced">Avancé</string>
<string name="player">Lecteur</string> <string name="player">Audio et vidéo</string>
<string name="appearance_summary">Ajustez l\'application à votre convenance.</string> <string name="appearance_summary">Ajustez l\'application à votre convenance.</string>
<string name="live">En direct</string> <string name="live">En direct</string>
<string name="no_replies">Ce commentaire n\'a pas de réponse.</string> <string name="no_replies">Ce commentaire n\'a pas de réponse.</string>
<string name="authors">Auteurs</string> <string name="authors">Auteurs</string>
<string name="authors_summary">Faites connaissance avec l\'équipe LibreTube et tous ses contributeurs qui aident à améliorer l\'application.</string> <string name="authors_summary">Apprenez à connaître tout le monde.</string>
<string name="sdcard">Carte SD</string> <string name="sdcard">Carte SD</string>
<string name="download_folder_summary">Le nom du dossier dans lequel le média téléchargé est stocké.</string> <string name="download_folder_summary">Le nom du dossier dans lequel le média téléchargé est stocké.</string>
<string name="download_folder">Nom</string> <string name="download_folder">Nom</string>
@ -159,29 +159,41 @@
<string name="birdIcon">Oiseau boosté</string> <string name="birdIcon">Oiseau boosté</string>
<string name="torchIcon">Torche tendance</string> <string name="torchIcon">Torche tendance</string>
<string name="instance_summary">Piped, connexion, abonnements</string> <string name="instance_summary">Piped, connexion, abonnements</string>
<string name="invalid_url">Veuillez entrer une URL valide</string> <string name="invalid_url">Veuillez entrer une URL qui fonctionne</string>
<string name="customInstance_summary">Ajouter une instance personnalisée (à vos risques et périls)</string> <string name="customInstance_summary">Ajouter une instance personnalisée (à vos risques et périls)</string>
<string name="instance_name">Nom de l\'instance</string> <string name="instance_name">Nom de l\'instance</string>
<string name="flameIcon">Flamme volante</string> <string name="flameIcon">Flamme volante</string>
<string name="instance_api_url">URL de l\'API de l\'instance</string> <string name="instance_api_url">URL de l\'API de l\'instance</string>
<string name="clear_customInstances">Effacer les instances personnalisées</string> <string name="clear_customInstances">Effacer les instances personnalisées</string>
<string name="addInstance">Ajouter une instance</string> <string name="addInstance">Ajouter une instance</string>
<string name="empty_instance">Vous devez compléter le nom et l\'URL de l\'API.</string> <string name="empty_instance">Complétez le nom et l\'URL de l\'API.</string>
<string name="shapedIcon">Forme idiote</string> <string name="shapedIcon">Forme idiote</string>
<string name="gradientIcon">Dégradé désinvolte</string> <string name="gradientIcon">Dégradé désinvolte</string>
<string name="version">Version %1$s</string> <string name="version">Version %1$s</string>
<string name="about_summary">Découvrez l\'équipe LibreTube et comment tout cela se passe.</string> <string name="about_summary">Découvrez l\'équipe LibreTube et comment tout cela se passe.</string>
<string name="related_streams">Streams connexes</string> <string name="related_streams">Contenus connexes</string>
<string name="related_streams_summary">Afficher les flux associés aux vidéos.</string> <string name="related_streams_summary">Affichez des flux connexes à côté de ce que vous regardez.</string>
<string name="category_filler">Tangente de remplissage/blagues</string> <string name="category_filler">Tangente de remplissage/blagues</string>
<string name="category_preview">Aperçu / récap</string> <string name="category_preview">Aperçu / récap</string>
<string name="category_filler_description">Il s\'agit de scènes tangentielles ajoutées uniquement à titre de remplissage ou d\'humour et qui ne sont pas nécessaires pour comprendre le contenu principal de la vidéo.</string> <string name="category_filler_description">Pour les scènes tangentielles ajoutées uniquement à titre de remplissage ou d\'humour non nécessaire à la compréhension du contenu principal de la vidéo.</string>
<string name="show_chapters">Afficher les chapitres</string> <string name="show_chapters">Afficher les chapitres</string>
<string name="category_music_offtopic">Musique : section non musicale</string> <string name="category_music_offtopic">Musique : section non musicale</string>
<string name="hide_chapters">Masquer les chapitres</string> <string name="hide_chapters">Masquer les chapitres</string>
<string name="buffering_goal">Objectif de mémoire tampon</string> <string name="buffering_goal">Préchargement</string>
<string name="buffering_goal_summary">Le nombre de secondes pendant lesquelles les vidéos sont préchargées au maximum.</string> <string name="buffering_goal_summary">Nombre maximal de secondes de vidéo à mettre en mémoire tampon.</string>
<string name="category_music_offtopic_description">Ceci est uniquement destiné à être utilisé dans des vidéos musicales. Il doit couvrir les parties de la vidéo qui ne font pas partie des mixages officiels. Au final, la vidéo doit ressembler le plus possible à la version de Spotify ou de tout autre mix, ou doit réduire les bavardages ou autres distractions.</string> <string name="category_music_offtopic_description">Uniquement pour une utilisation dans des vidéos musicales. Elle doit couvrir les parties de la vidéo qui ne font pas partie des mixages officiels. Au final, la vidéo doit ressembler le plus possible à la version Spotify ou à toute autre version mixée, ou réduire les discussions ou autres distractions.</string>
<string name="playerVideoFormat">Format vidéo du lecteur</string> <string name="playerVideoFormat">Format vidéo pour le lecteur</string>
<string name="category_preview_description">Pour les segments qui montrent ce qui est à venir dans cette vidéo ou dans les vidéos futures de la même série, mais qui ne fournissent pas d\'informations supplémentaires. S\'il s\'agit de clips qui n\'apparaissent qu\'ici, il est très probable que cette catégorie ne soit pas la bonne.</string> <string name="category_preview_description">Pour les segments détaillant le contenu à venir de cette vidéo ou des futures vidéos de sa série, mais qui ne fournissent pas d\'informations supplémentaires. Si elle comprend des clips qui n\'apparaissent qu\'ici, il s\'agit très probablement de la mauvaise catégorie.</string>
<string name="player_autoplay">Lecture automatique</string>
<string name="no_audio">Sans audio</string>
<string name="no_video">Sans vidéo</string>
<string name="audio">Audio</string>
<string name="video">Vidéo</string>
<string name="downloading">Téléchargement</string>
<string name="hideTrendingPage">Masquer la page des tendances</string>
<string name="instance_frontend_url">URL vers l\'interface de l\'instance</string>
<string name="quality">Qualité</string>
<string name="behavior">Comportement</string>
<string name="player_summary">Qualité et comportement du lecteur</string>
<string name="seek_increment">Rechercher l\'incrément</string>
</resources> </resources>

View File

@ -61,8 +61,8 @@
<string name="subscriptions">Abbonamenti</string> <string name="subscriptions">Abbonamenti</string>
<string name="changeLanguage">Lingua</string> <string name="changeLanguage">Lingua</string>
<string name="systemLanguage">Sistema</string> <string name="systemLanguage">Sistema</string>
<string name="lightTheme">Tema chiaro</string> <string name="lightTheme">Chiaro</string>
<string name="darkTheme">Tema scuro</string> <string name="darkTheme">Scuro</string>
<string name="comments">Commenti</string> <string name="comments">Commenti</string>
<string name="videoCount">%1$s video</string> <string name="videoCount">%1$s video</string>
<string name="noInternet">Connettiti ad internet prima.</string> <string name="noInternet">Connettiti ad internet prima.</string>
@ -90,7 +90,7 @@
<string name="segment_skipped">Segmento saltato</string> <string name="segment_skipped">Segmento saltato</string>
<string name="sponsorblock_state">Attivo</string> <string name="sponsorblock_state">Attivo</string>
<string name="category_segments">Segmenti</string> <string name="category_segments">Segmenti</string>
<string name="category_sponsor_description">Promozione a pagamento, riferimento a pagamento e pubblicità diretta. Non per l\'autopromozione o per la pubblicità gratuita di cause/creatori/siti web/prodotti di loro gradimento.</string> <string name="category_sponsor_description">Promozione a pagamento, riferimento a pagamento e pubblicità diretta. Non per l\'autopromozione o per genuina pubblicità gratuita di cause, creatori, siti web e prodotti.</string>
<string name="category_selfpromo">Non retribuito/Autopromozione</string> <string name="category_selfpromo">Non retribuito/Autopromozione</string>
<string name="category_selfpromo_description">Simile a sponsor, tranne che per la promozione personale o non retribuita. Sono incluse le sezioni relative al merchandising, alle donazioni o alle informazioni sulle persone con cui hanno collaborato.</string> <string name="category_selfpromo_description">Simile a sponsor, tranne che per la promozione personale o non retribuita. Sono incluse le sezioni relative al merchandising, alle donazioni o alle informazioni sulle persone con cui hanno collaborato.</string>
<string name="category_intro">Intervallo/Animazione</string> <string name="category_intro">Intervallo/Animazione</string>
@ -100,11 +100,11 @@
<string name="license">Licenza</string> <string name="license">Licenza</string>
<string name="color_accent">Accenti</string> <string name="color_accent">Accenti</string>
<string name="color_red">Rosso riposante</string> <string name="color_red">Rosso riposante</string>
<string name="color_blue">Blu pixel</string> <string name="color_blue">Blu beato</string>
<string name="color_yellow">Giallo lanciato</string> <string name="color_yellow">Giallo lanciato</string>
<string name="color_green">Verde groovy</string> <string name="color_green">Verde groovy</string>
<string name="color_purple">Viola piacevole</string> <string name="color_purple">Viola piacevole</string>
<string name="oledTheme">Tema nero</string> <string name="oledTheme">Nero</string>
<string name="clear_history">Cancella la cronologia</string> <string name="clear_history">Cancella la cronologia</string>
<string name="material_you">Mystic Material 3</string> <string name="material_you">Mystic Material 3</string>
<string name="sponsorblock_notifications">Notifiche</string> <string name="sponsorblock_notifications">Notifiche</string>
@ -143,7 +143,7 @@
<string name="live">Dal vivo</string> <string name="live">Dal vivo</string>
<string name="authors">Autori</string> <string name="authors">Autori</string>
<string name="no_replies">Questo commento non ha risposte.</string> <string name="no_replies">Questo commento non ha risposte.</string>
<string name="authors_summary">Conosci il team LibreTube e tutti i suoi collaboratori che contribuiscono a migliorare l\'applicazione.</string> <string name="authors_summary">Fai conoscenza con tutti.</string>
<string name="downloads_directory">Cartella degli scaricamenti</string> <string name="downloads_directory">Cartella degli scaricamenti</string>
<string name="sdcard">Scheda SD</string> <string name="sdcard">Scheda SD</string>
<string name="music_directory">Cartella musicale</string> <string name="music_directory">Cartella musicale</string>
@ -164,24 +164,31 @@
<string name="instance_name">Nome istanza</string> <string name="instance_name">Nome istanza</string>
<string name="addInstance">Aggiungi istanza</string> <string name="addInstance">Aggiungi istanza</string>
<string name="clear_customInstances">Pulisci istanze personalizzate</string> <string name="clear_customInstances">Pulisci istanze personalizzate</string>
<string name="empty_instance">Devi compilare il nome e l\'url API.</string> <string name="empty_instance">Compila il nome e l\'URL dell\'API.</string>
<string name="instance_summary">Piped, accesso, iscrizioni</string> <string name="instance_summary">Piped, accesso, iscrizioni</string>
<string name="customInstance_summary">Aggiungi un\'istanza personalizzata (a tuo rischio)</string> <string name="customInstance_summary">Aggiungi un\'istanza personalizzata (a tuo rischio)</string>
<string name="instance_api_url">URL API dell\'istanza</string> <string name="instance_api_url">URL API dell\'istanza</string>
<string name="invalid_url">Si prega di inserire un URL valido</string> <string name="invalid_url">Si prega di inserire un URL che funzioni</string>
<string name="version">Versione %1$s</string> <string name="version">Versione %1$s</string>
<string name="about_summary">Conosci il team LibreTube e come tutto accade.</string> <string name="about_summary">Conosci il team LibreTube e come tutto accade.</string>
<string name="related_streams_summary">Mostra stream correlati al video.</string> <string name="related_streams_summary">Mostra stream correlati a fianco di ciò che guardi.</string>
<string name="related_streams">Stream correlati</string> <string name="related_streams">Contenuti correlati</string>
<string name="hide_chapters">Nascondi capitoli</string> <string name="hide_chapters">Nascondi capitoli</string>
<string name="show_chapters">Mostra capitoli</string> <string name="show_chapters">Mostra capitoli</string>
<string name="category_filler">Tangente filler/scherzi</string> <string name="category_filler">Tangente filler/scherzi</string>
<string name="category_music_offtopic">Musica: sezione non musicale</string> <string name="category_music_offtopic">Musica: sezione non musicale</string>
<string name="category_filler_description">Questo è per le scene tangenziali aggiunte solo per filler o umorismo che non sono necessari per comprendere il contenuto principale del video.</string> <string name="category_filler_description">Per le scene tangenziali aggiunte solo per filler o umorismo non necessarie per comprendere il contenuto principale del video.</string>
<string name="category_music_offtopic_description">Questo è solo per l\'uso in video musicali. Dovrebbe coprire parti del video non parte di mix ufficiali. Alla fine, il video dovrebbe assomigliare al mix di Spotify o a qualsiasi altra versione il più vicino possibile, o dovrebbe ridurre la conversazione o altre distrazioni.</string> <string name="category_music_offtopic_description">Solo per l\'uso in video musicali. Dovrebbe coprire parti del video non parte di mix ufficiali. Alla fine, il video dovrebbe assomigliare il più vicino possibile alla versione di Spotify o a qualsiasi altra versione mixata, o riducendo la conversazione o altre distrazioni.</string>
<string name="category_preview">Anteprima/riepilogo</string> <string name="category_preview">Anteprima/riepilogo</string>
<string name="category_preview_description">Per i segmenti che mostrano ciò che sta arrivando in questo o futuri video della stessa serie, ma non forniscono ulteriori informazioni. Se include clip che appaiono solo qui, questa probabilmente non è la categoria giusta.</string> <string name="category_preview_description">Per i segmenti che mostrano in dettaglio i prossimi contenuti in questo o futuri video della serie, ma non forniscono ulteriori informazioni. Se include clip che appaiono solo qui, questa probabilmente è la categoria sbagliata.</string>
<string name="buffering_goal">Obiettivo di caricamento</string> <string name="buffering_goal">Precaricamento</string>
<string name="buffering_goal_summary">La quantità di secondi che viene precaricata al massimo nei video.</string> <string name="buffering_goal_summary">La quantità massima di secondi che viene bufferizzata nei video.</string>
<string name="playerVideoFormat">Formato video del lettore</string> <string name="playerVideoFormat">Formato video del lettore</string>
<string name="player_autoplay">Riproduzione automatica</string>
<string name="audio">Con audio</string>
<string name="no_audio">Senza audio</string>
<string name="no_video">Senza video</string>
<string name="video">Con video</string>
<string name="downloading">Scaricando</string>
<string name="hideTrendingPage">Nascondi la pagina Tendenze</string>
</resources> </resources>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="customization">התאמות</string> <string name="customization">התאמות</string>
<string name="color_blue">כחול פיקסלים</string> <string name="color_blue">כחול כובש</string>
<string name="search_hint">חיפוש</string> <string name="search_hint">חיפוש</string>
<string name="videos">סרטונים</string> <string name="videos">סרטונים</string>
<string name="subscribe">רישום</string> <string name="subscribe">רישום</string>
@ -28,7 +28,7 @@
<string name="success">בוצע.</string> <string name="success">בוצע.</string>
<string name="fail">נכשל :(</string> <string name="fail">נכשל :(</string>
<string name="about">על אודות</string> <string name="about">על אודות</string>
<string name="lightTheme">ערכת עיצוב בהירה</string> <string name="lightTheme">בהיר</string>
<string name="subscribers">%1$s מנויים</string> <string name="subscribers">%1$s מנויים</string>
<string name="comments">הערות</string> <string name="comments">הערות</string>
<string name="choose_filter">בחירת מסנן חיפוש</string> <string name="choose_filter">בחירת מסנן חיפוש</string>
@ -44,7 +44,7 @@
<string name="music_albums">אלבומים מ־YT Music</string> <string name="music_albums">אלבומים מ־YT Music</string>
<string name="music_playlists">רשימות נגינה מ־YT Music</string> <string name="music_playlists">רשימות נגינה מ־YT Music</string>
<string name="defaultTab">לשונית ברירת מחדל</string> <string name="defaultTab">לשונית ברירת מחדל</string>
<string name="category_sponsor_description">קידום ממומן, הפניות בתשלום ופרסום ישיר. לא למטרות קידום עצמי או הוקרה של מטרות/יוצרים/אתרים/מוצרים אהובים עליהם.</string> <string name="category_sponsor_description">קידום ממומן, הפניות בתשלום ופרסום ישיר. לא למטרות קידום עצמי או הוקרה כנה של מטרות/יוצרים/אתרים/מוצרים.</string>
<string name="category_interaction">תזכורת אינטראקציה (לייק ומינוי)</string> <string name="category_interaction">תזכורת אינטראקציה (לייק ומינוי)</string>
<string name="category_outro">כרטיסי סיום וקרדיטים</string> <string name="category_outro">כרטיסי סיום וקרדיטים</string>
<string name="category_outro_description">מידע לאחר הסיום. לא למסקנות עם מידע.</string> <string name="category_outro_description">מידע לאחר הסיום. לא למסקנות עם מידע.</string>
@ -54,7 +54,7 @@
<string name="color_yellow">צהוב צורח</string> <string name="color_yellow">צהוב צורח</string>
<string name="color_green">ירוק יוקד</string> <string name="color_green">ירוק יוקד</string>
<string name="color_purple">סגול סובלני</string> <string name="color_purple">סגול סובלני</string>
<string name="oledTheme">ערכת עיצוב שחורה</string> <string name="oledTheme">שחור</string>
<string name="sponsorblock_notifications">התראות</string> <string name="sponsorblock_notifications">התראות</string>
<string name="app_icon">סמל</string> <string name="app_icon">סמל</string>
<string name="enabled">פעיל</string> <string name="enabled">פעיל</string>
@ -69,7 +69,7 @@
<string name="donate">תרומה</string> <string name="donate">תרומה</string>
<string name="license_summary">GPLv3+ הוא רישיון חופשי ומתירני. מותר להשתמש, לחקור, לערוך ולשתף, עם כולם.</string> <string name="license_summary">GPLv3+ הוא רישיון חופשי ומתירני. מותר להשתמש, לחקור, לערוך ולשתף, עם כולם.</string>
<string name="update_summary">לחיצה כאן תבדוק אם היישומון עדכני.</string> <string name="update_summary">לחיצה כאן תבדוק אם היישומון עדכני.</string>
<string name="player">נגן</string> <string name="player">שמע ווידאו</string>
<string name="library">ספרייה</string> <string name="library">ספרייה</string>
<string name="password">סיסמה</string> <string name="password">סיסמה</string>
<string name="register">הרשמה</string> <string name="register">הרשמה</string>
@ -110,7 +110,7 @@
<string name="areYouSure">למחוק את רשימת הנגינה\?</string> <string name="areYouSure">למחוק את רשימת הנגינה\?</string>
<string name="playlistCreated">נוצרה רשימת נגינה.</string> <string name="playlistCreated">נוצרה רשימת נגינה.</string>
<string name="changeLanguage">שפה</string> <string name="changeLanguage">שפה</string>
<string name="darkTheme">ערכת עיצוב כהה</string> <string name="darkTheme">כהה</string>
<string name="instance">עותק</string> <string name="instance">עותק</string>
<string name="videoCount">%1$s סרטונים</string> <string name="videoCount">%1$s סרטונים</string>
<string name="category_interaction_description">כשיש תזכורת קצרה לעשות לייק, להירשם למינוי או לעקוב באמצע התוכן. אם זה ארוך או על משהו מסוים, זה אמור להיות קידום עצמי במקום.</string> <string name="category_interaction_description">כשיש תזכורת קצרה לעשות לייק, להירשם למינוי או לעקוב באמצע התוכן. אם זה ארוך או על משהו מסוים, זה אמור להיות קידום עצמי במקום.</string>
@ -132,7 +132,7 @@
<string name="no_update_available">זאת הגרסה העדכנית ביותר.</string> <string name="no_update_available">זאת הגרסה העדכנית ביותר.</string>
<string name="donate_summary">אפשר להעניק בהתאם לערך שהוא מעניק לך. צוות LibreTube קטן מהתרומה או הסיוע שלך.</string> <string name="donate_summary">אפשר להעניק בהתאם לערך שהוא מעניק לך. צוות LibreTube קטן מהתרומה או הסיוע שלך.</string>
<string name="update">איתור גרסה חדשה</string> <string name="update">איתור גרסה חדשה</string>
<string name="advanced_summary">נגן, הורדות, היסטוריה</string> <string name="advanced_summary">הורדות, היסטוריה</string>
<string name="app_uptodate">היישומון עדכני.</string> <string name="app_uptodate">היישומון עדכני.</string>
<string name="playback_speed">מהירות נגינה כברירת מחדל</string> <string name="playback_speed">מהירות נגינה כברירת מחדל</string>
<string name="advanced">מתקדם</string> <string name="advanced">מתקדם</string>
@ -142,7 +142,7 @@
<string name="category_selfpromo_description">דומה ל„נותן חסות” למעט קידום עצמי ללא תשלום. לרבות סעיפים על אביזרים ממותגים, תרומות או מידע על שיתופי פעולה.</string> <string name="category_selfpromo_description">דומה ל„נותן חסות” למעט קידום עצמי ללא תשלום. לרבות סעיפים על אביזרים ממותגים, תרומות או מידע על שיתופי פעולה.</string>
<string name="category_intro">הפוגה/הנפשת הקדמה</string> <string name="category_intro">הפוגה/הנפשת הקדמה</string>
<string name="authors">יוצרים</string> <string name="authors">יוצרים</string>
<string name="authors_summary">כאן מופיעים אלו שעומדים מאחורי LibreTube לצד אלו שמסייעים בשיפור היישומון.</string> <string name="authors_summary">כאן מופיעים כל מי שמעורב בפיתוח ושיפור היישומון.</string>
<string name="no_replies">להערה זו אין תגובות.</string> <string name="no_replies">להערה זו אין תגובות.</string>
<string name="download_folder_summary">שם התיקייה שבה תאוחסן מדיה שהורדה.</string> <string name="download_folder_summary">שם התיקייה שבה תאוחסן מדיה שהורדה.</string>
<string name="internal_storage">אחסון פנימי</string> <string name="internal_storage">אחסון פנימי</string>
@ -164,23 +164,37 @@
<string name="customInstance_summary">הוספת עותק משלך (על אחריותך)</string> <string name="customInstance_summary">הוספת עותק משלך (על אחריותך)</string>
<string name="instance_name">שם העותק</string> <string name="instance_name">שם העותק</string>
<string name="empty_instance">יש למלא את השם ואת כתובת ה־API.</string> <string name="empty_instance">יש למלא את השם ואת כתובת ה־API.</string>
<string name="invalid_url">נא למלא כתובת תקנית</string> <string name="invalid_url">נא למלא כתובת שעובדת</string>
<string name="version">גרסה %1$s</string> <string name="version">גרסה %1$s</string>
<string name="about_summary">היכרות עם הצוות של LibreTube ואיך הכול התחיל.</string> <string name="about_summary">היכרות עם הצוות של LibreTube ואיך הכול התחיל.</string>
<string name="instance_api_url">כתובת API של העותק</string> <string name="instance_api_url">כתובת ל־API של העותק</string>
<string name="addInstance">הוספת עותק</string> <string name="addInstance">הוספת עותק</string>
<string name="clear_customInstances">מחיקת עותקים אחרים</string> <string name="clear_customInstances">מחיקת עותקים אחרים</string>
<string name="shapedIcon">צורה טיפשית</string> <string name="shapedIcon">צורה טיפשית</string>
<string name="related_streams">תזרימים קשורים</string> <string name="related_streams">תוכן קשור</string>
<string name="related_streams_summary">הצגת תזרימים שקשורים לסרטון.</string> <string name="related_streams_summary">הצגת תזרימים שקשורים לצד הסרטון שמתנגן.</string>
<string name="show_chapters">הצגת פרקים</string> <string name="show_chapters">הצגת פרקים</string>
<string name="hide_chapters">הסתרת פרקים</string> <string name="hide_chapters">הסתרת פרקים</string>
<string name="category_filler">בדיחות/משיקים למילוי</string> <string name="category_filler">בדיחות/משיקים למילוי</string>
<string name="category_filler_description">זה מיועד לסצנות משיקות שנוספו רק כדי להעביר זמן או הומור שאינם נחוצים להבנת התוכן העיקרי של הסרטון.</string> <string name="category_filler_description">מיועד לסצנות משיקות שנוספו רק כדי להעביר זמן או הומור ואינן נחוצות להבנת התוכן העיקרי של הסרטון.</string>
<string name="category_music_offtopic">מוזיקה: קטע לא מוזיקלי</string> <string name="category_music_offtopic">מוזיקה: קטע לא מוזיקלי</string>
<string name="category_preview">תצוגה מקדימה/סיכום</string> <string name="category_preview">תצוגה מקדימה/סיכום</string>
<string name="category_music_offtopic_description">זה מיוחד רק לסרטונים מוזיקליים. הוא אמור לכסות חלקים מהסרטון שאינם חלק מהערבולים הרשמיים. בסוף, הסרטון אמור לחקות את Spotify או כל גרסה מעורבלת אחרת בצורה כמה שיותר נאמנה או לצמצם דיבור או כל הפרעה אחרת.</string> <string name="category_music_offtopic_description">מיועד רק לסרטונים מוזיקליים. הוא אמור לכסות חלקים מהסרטון שאינם חלק מהערבולים הרשמיים. בסוף, הסרטון אמור לחקות את Spotify או כל גרסה מעורבלת אחרת בצורה כמה שיותר נאמנה או לצמצם דיבור או כל הפרעה אחרת.</string>
<string name="category_preview_description">למקטעים שמציגים מה עתיד לקרות בסרטון הזה או בסרטונים העוקבים, אך לא מספק מידע נוסף. אם הוא כולל מקטעים שמופיעים רק כאן, סביר להניח שזאת לא הקטגוריה הנכונה.</string> <string name="category_preview_description">למקטעים שמפרטים על תוכן עתידי בסרטון הזה או בסרטונים העוקבים, אך לא מספק מידע נוסף. אם הוא כולל מקטעים שמופיעים רק כאן, סביר להניח שזאת לא הקטגוריה הנכונה.</string>
<string name="buffering_goal">יעד אגירה</string> <string name="buffering_goal">טעינה טרומית</string>
<string name="buffering_goal_summary">מספר השניות לטעינה מראש של סרטונים לכל היותר.</string> <string name="buffering_goal_summary">כמות השניות המרבית של וידאו שייאגר לזיכרון.</string>
<string name="playerVideoFormat">תצורת הסרטונים לנגן</string>
<string name="no_video">ללא וידאו</string>
<string name="no_audio">ללא שמע</string>
<string name="audio">שמע</string>
<string name="video">וידאו</string>
<string name="downloading">מתבצעת הורדה</string>
<string name="player_autoplay">נגינה אוטומטית</string>
<string name="hideTrendingPage">הסתרת עמוד המובילים</string>
<string name="instance_frontend_url">כתובת למנשק המשתמש של העותק</string>
<string name="player_summary">איכות והתנהגות הנגן</string>
<string name="quality">איכות</string>
<string name="behavior">התנהגות</string>
<string name="seek_increment">הגדלת קפיצה</string>
<string name="piped_summary">Piped הוא חלופה בקוד פתוח למנשק המשתמש של YouTube ומספק את ה־API בו אנו משתמשים. בלי Piped, LibreTube לא היה קיים. אנו מודים למפתחים מקרב לב!</string>
</resources> </resources>

View File

@ -73,7 +73,7 @@
<string name="instance">인스턴스</string> <string name="instance">인스턴스</string>
<string name="website">웹사이트</string> <string name="website">웹사이트</string>
<string name="defaultTab">기본 탭</string> <string name="defaultTab">기본 탭</string>
<string name="category_sponsor_description">유료 프로모션, 유료 추천 및 직접 광고. 자기 홍보나 그들이 좋아하는 원인/제작자/웹사이트/제품에 대한 무료 홍보용이 아닙니다.</string> <string name="category_sponsor_description">유료 프로모션, 유료 추천 및 직접 광고가 해당됩니다. 자기 홍보나 재료/제작자/웹사이트/제품에 대한 공인된 무료 홍보물은 포함되지 않습니다.</string>
<string name="segment_skipped">건너뛴 구간</string> <string name="segment_skipped">건너뛴 구간</string>
<string name="sponsorblock_state">켜기</string> <string name="sponsorblock_state">켜기</string>
<string name="category_segments">구간</string> <string name="category_segments">구간</string>
@ -101,10 +101,10 @@
<string name="category_outro">엔드카드 및 크레딧</string> <string name="category_outro">엔드카드 및 크레딧</string>
<string name="category_outro_description">엔딩 이후의 정보. 정보가 포함된 결론이 아닙니다.</string> <string name="category_outro_description">엔딩 이후의 정보. 정보가 포함된 결론이 아닙니다.</string>
<string name="license">라이선스</string> <string name="license">라이선스</string>
<string name="oledTheme">OLED 테마</string> <string name="oledTheme">검정</string>
<string name="color_accent">액센트</string> <string name="color_accent">액센트</string>
<string name="color_blue">픽셀 블루</string> <string name="color_blue">파란색</string>
<string name="material_you">머터리얼</string> <string name="material_you">미스틱 머터리얼 3</string>
<string name="color_green">초록색</string> <string name="color_green">초록색</string>
<string name="color_red">빨간색</string> <string name="color_red">빨간색</string>
<string name="color_yellow">노란색</string> <string name="color_yellow">노란색</string>
@ -141,7 +141,7 @@
<string name="no_update_available">최신 버전을 실행하고 있습니다.</string> <string name="no_update_available">최신 버전을 실행하고 있습니다.</string>
<string name="playback_speed">기본 재생 속도</string> <string name="playback_speed">기본 재생 속도</string>
<string name="advanced">고급</string> <string name="advanced">고급</string>
<string name="player">플레이어</string> <string name="player">오디오 및 비디오</string>
<string name="advanced_summary">플레이어, 다운로드, 기록</string> <string name="advanced_summary">플레이어, 다운로드, 기록</string>
<string name="live">실시간</string> <string name="live">실시간</string>
<string name="download_folder">이름</string> <string name="download_folder">이름</string>
@ -175,4 +175,11 @@
<string name="buffering_goal_summary">최대 버퍼링할 비디오의 시간(초)입니다.</string> <string name="buffering_goal_summary">최대 버퍼링할 비디오의 시간(초)입니다.</string>
<string name="playerVideoFormat">플레이어의 비디오 형식</string> <string name="playerVideoFormat">플레이어의 비디오 형식</string>
<string name="buffering_goal">사전 로딩</string> <string name="buffering_goal">사전 로딩</string>
<string name="legacyIcon">레거시</string>
<string name="torchIcon">세련된 등불</string>
<string name="fireIcon">멋진 불</string>
<string name="category_filler">사족/농담</string>
<string name="category_filler_description">분량을 채우기 위한 사족 씬이나 동영상의 메인 컨텐츠를 이해하는데 필요하지 않은 유머가 해당됩니다.</string>
<string name="birdIcon">돌진하는 새</string>
<string name="flameIcon">휘날리는 화염</string>
</resources> </resources>

View File

@ -59,8 +59,8 @@
<string name="choose_quality_dialog">Kvalitāte</string> <string name="choose_quality_dialog">Kvalitāte</string>
<string name="subscribeIsEmpty">Vispirms abonējiet dažus kanālus.</string> <string name="subscribeIsEmpty">Vispirms abonējiet dažus kanālus.</string>
<string name="success">Izdarīts.</string> <string name="success">Izdarīts.</string>
<string name="darkTheme">Tumšais motīvs</string> <string name="darkTheme">Tumšs</string>
<string name="lightTheme">Gaišais motīvs</string> <string name="lightTheme">Gaišs</string>
<string name="createPlaylist">Izveidot atskaņošanas sarakstu</string> <string name="createPlaylist">Izveidot atskaņošanas sarakstu</string>
<string name="loggedout">Jūs neesat pierakstījies.</string> <string name="loggedout">Jūs neesat pierakstījies.</string>
<string name="noInternet">Vispirms savienojieties ar internetu.</string> <string name="noInternet">Vispirms savienojieties ar internetu.</string>
@ -91,7 +91,7 @@
<string name="category_outro_description">Informācija pēc video beigām. Nav domāts secinājumiem ar informāciju.</string> <string name="category_outro_description">Informācija pēc video beigām. Nav domāts secinājumiem ar informāciju.</string>
<string name="segment_skipped">Izlaida segmentu</string> <string name="segment_skipped">Izlaida segmentu</string>
<string name="sponsorblock_state">Ieslēgts</string> <string name="sponsorblock_state">Ieslēgts</string>
<string name="category_sponsor_description">Apmaksāta reklāma, apmaksāta pieminēšana un tiešas reklāmas. Ne pašreklamēšanās vai bezmaksas reklāmas veidotājiem/mājaslapām/produktiem, kas viņiem patīk.</string> <string name="category_sponsor_description">Apmaksāta reklāma, apmaksāta pieminēšana un tiešas reklāmas. Nav pašreklāmai vai neapmaksātai reklāmai veidotājiem/mājaslapām/produktiem, kas viņiem patīk.</string>
<string name="category_selfpromo_description">Līdzīgs \"sponsoram\", taču neapmaksātām reklāmām vai pašreklamēšanai. Tas ietver sadaļas par precēm, ziedošanu vai informāciju par to, ar kuru viņi sadarbojās.</string> <string name="category_selfpromo_description">Līdzīgs \"sponsoram\", taču neapmaksātām reklāmām vai pašreklamēšanai. Tas ietver sadaļas par precēm, ziedošanu vai informāciju par to, ar kuru viņi sadarbojās.</string>
<string name="license">Licence</string> <string name="license">Licence</string>
<string name="color_accent">Akcents</string> <string name="color_accent">Akcents</string>
@ -100,7 +100,7 @@
<string name="color_yellow">Dzeltens</string> <string name="color_yellow">Dzeltens</string>
<string name="color_green">Zaļš</string> <string name="color_green">Zaļš</string>
<string name="color_purple">Violets</string> <string name="color_purple">Violets</string>
<string name="oledTheme">Melnais motīvs</string> <string name="oledTheme">Melns</string>
<string name="material_you">Material 3</string> <string name="material_you">Material 3</string>
<string name="category_outro">Beigu ekrāns un titri</string> <string name="category_outro">Beigu ekrāns un titri</string>
<string name="category_intro_description">Brīdis bez īsta satura. Varētu būt pauze, statisks kadrs, atkārtota animācija. Šo nevajadzētu izmantot brīžiem, kas satur informāciju.</string> <string name="category_intro_description">Brīdis bez īsta satura. Varētu būt pauze, statisks kadrs, atkārtota animācija. Šo nevajadzētu izmantot brīžiem, kas satur informāciju.</string>
@ -118,7 +118,7 @@
<string name="playOnBackground">Atskaņot fonā</string> <string name="playOnBackground">Atskaņot fonā</string>
<string name="no_replies">Šim komentāram nav atbilžu.</string> <string name="no_replies">Šim komentāram nav atbilžu.</string>
<string name="authors">Autori</string> <string name="authors">Autori</string>
<string name="authors_summary">Iepazīstieties ar LibreTube komandu un visiem, kas palīdz uzlabot šo aplikāciju.</string> <string name="authors_summary">Iepazīstieties ar visiem.</string>
<string name="download_folder_summary">Nosaukums mapei, kurā tiek saglabāti lejupielādētie faili.</string> <string name="download_folder_summary">Nosaukums mapei, kurā tiek saglabāti lejupielādētie faili.</string>
<string name="download_directory">Lejupielādēt uz</string> <string name="download_directory">Lejupielādēt uz</string>
<string name="download_folder">Nosaukums</string> <string name="download_folder">Nosaukums</string>
@ -162,12 +162,12 @@
<string name="playback_speed">Noklusējuma atskaņošanas ātrums</string> <string name="playback_speed">Noklusējuma atskaņošanas ātrums</string>
<string name="live">Tiešraide</string> <string name="live">Tiešraide</string>
<string name="customInstance_summary">Pievienot pielāgotu instanci (uz jūsu atbildību)</string> <string name="customInstance_summary">Pievienot pielāgotu instanci (uz jūsu atbildību)</string>
<string name="empty_instance">Jums vajag ierakstīt nosaukumu un API URL.</string> <string name="empty_instance">Ierakstiet nosaukumu un API URL.</string>
<string name="clear_customInstances">Notīrīt pielāgotās instances</string> <string name="clear_customInstances">Notīrīt pielāgotās instances</string>
<string name="invalid_url">Lūdzu ievadiet derīgu URL</string> <string name="invalid_url">Lūdzu ievadiet derīgu URL</string>
<string name="show_chapters">Rādīt nodaļas</string> <string name="show_chapters">Rādīt nodaļas</string>
<string name="hide_chapters">Paslēpt nodaļas</string> <string name="hide_chapters">Paslēpt nodaļas</string>
<string name="category_filler_description">Šis ir sprīžiem, kas nav par tēmu vai jokiem, kas nav nepieciešami, lai saprastu video galveno saturu.</string> <string name="category_filler_description">Laika sprīžiem, kas nav par tēmu vai jokiem, kas nav nepieciešami, lai saprastu video galveno saturu.</string>
<string name="category_filler">Ne par tēmu/joki</string> <string name="category_filler">Ne par tēmu/joki</string>
<string name="category_music_offtopic">Mūzika: sprīži bez mūzikas</string> <string name="category_music_offtopic">Mūzika: sprīži bez mūzikas</string>
<string name="category_preview">Priekšskatījums/atkārtojums</string> <string name="category_preview">Priekšskatījums/atkārtojums</string>
@ -177,11 +177,12 @@
<string name="instance_api_url">Instances API URL</string> <string name="instance_api_url">Instances API URL</string>
<string name="addInstance">Pievienot instanci</string> <string name="addInstance">Pievienot instanci</string>
<string name="version">Versija %1$s</string> <string name="version">Versija %1$s</string>
<string name="about_summary">Iepazīstieties ar LibreTube komandu un kā tas viss notiek.</string> <string name="about_summary">Iepazīstieties ar LibreTube komandu un kā šeit viss notiek.</string>
<string name="related_streams">Saistītās tiešraides</string> <string name="related_streams">Saistīts saturs</string>
<string name="related_streams_summary">Rādīt saistītās tiešraides pie video.</string> <string name="related_streams_summary">Rādīt saistītās tiešraides pie tā, ko jūs skatāties.</string>
<string name="buffering_goal">Buferizācijas mērķis</string> <string name="buffering_goal">Iepriekšēja ielādēšana</string>
<string name="buffering_goal_summary">Maksimālais ilgums sekundēs, cik video tiek iepriekš ielādēts.</string> <string name="buffering_goal_summary">Maksimālais ilgums sekundēs, cik video tiek iepriekš ielādēts.</string>
<string name="playerVideoFormat">Atskaņotāja video formāts</string> <string name="playerVideoFormat">Atskaņotāja video formāts</string>
<string name="category_music_offtopic_description">Šis ir tikai priekš mūzikas video. Tas ir laika sprīžiem, kas nav oficiālajā dziesmas versijā. Beigās video vajadzētu būt tik līdzīgam Spotify vai jebkurai citai dziesmas versijai, cik vien iespējams.</string> <string name="category_music_offtopic_description">Tikai priekš mūzikas video. Tas ir laika sprīžiem, kas nav oficiālajā dziesmas versijā. Beigās video vajadzētu būt tik līdzīgam Spotify vai jebkurai citai dziesmas versijai, cik vien iespējams vai ar samazinātu runāšanas daudzumu un uzmanības novēršanu.</string>
<string name="player_autoplay">Automātiski atskaņot</string>
</resources> </resources>

View File

@ -8,8 +8,8 @@
<string name="register">Registrering</string> <string name="register">Registrering</string>
<string name="registered">Registrert. Du kan nå abonnere på de kanalene du ønsker.</string> <string name="registered">Registrert. Du kan nå abonnere på de kanalene du ønsker.</string>
<string name="instances">Velg en instans</string> <string name="instances">Velg en instans</string>
<string name="customInstance">Legg til egendefinert instans</string> <string name="customInstance">Egendefinert instans</string>
<string name="region">Velg en region</string> <string name="region">Region</string>
<string name="login_register">Logg inn/registrer deg</string> <string name="login_register">Logg inn/registrer deg</string>
<string name="dlcomplete">Nedlasting fullført.</string> <string name="dlcomplete">Nedlasting fullført.</string>
<string name="vlc">Åpne i VLC</string> <string name="vlc">Åpne i VLC</string>
@ -122,12 +122,12 @@
<string name="download_directory">Last ned til …</string> <string name="download_directory">Last ned til …</string>
<string name="material_you">Mystisk Materiell 3</string> <string name="material_you">Mystisk Materiell 3</string>
<string name="download_directory_summary">Der nedlastet media lagres.</string> <string name="download_directory_summary">Der nedlastet media lagres.</string>
<string name="contributing_summary">Send inn idéer, oversettelser, designendringer, rens og skriv kode. Dest mer som blir gjort, desto bedre blir det.</string> <string name="contributing_summary">Send inn idéer, oversettelser, designendringer, rens og skriv kode. Desto mer som blir gjort, desto bedre blir det.</string>
<string name="license_summary">GPLv3+ er en gemenfrihetslig lisens. Bruk, studer, endre, og del; med alle.</string> <string name="license_summary">GPLv3+ er en gemenfrihetslig lisens. Bruk, studer, endre, og del; med alle.</string>
<string name="update_summary">Klikk for å finne ut om programmet er av nyeste dato.</string> <string name="update_summary">Klikk for å finne ut om programmet er av nyeste dato.</string>
<string name="app_uptodate">Kjører siste versjon.</string> <string name="app_uptodate">Kjører siste versjon.</string>
<string name="appearance_summary">Tilpass programmet til din smak.</string> <string name="appearance_summary">Tilpass programmet til din smak.</string>
<string name="advanced_summary">Spiller, nedlastninger, historikk</string> <string name="advanced_summary">Nedlastninger, historikk</string>
<string name="fireIcon">Fasjonabel flamme</string> <string name="fireIcon">Fasjonabel flamme</string>
<string name="torchIcon">Finskodd fakkel</string> <string name="torchIcon">Finskodd fakkel</string>
<string name="shapedIcon">Formodentlig formet</string> <string name="shapedIcon">Formodentlig formet</string>
@ -147,7 +147,7 @@
<string name="downloads_directory">Nedlastningsmappe</string> <string name="downloads_directory">Nedlastningsmappe</string>
<string name="birdIcon">Framhevet fugl</string> <string name="birdIcon">Framhevet fugl</string>
<string name="category_selfpromo_description">Ligner på «Sponsor», bortsett fra at det er ubetalt eller selv-promotering. Dette inkluderer segmenter om ting, donasjoner, eller info om samarbeidspartnere.</string> <string name="category_selfpromo_description">Ligner på «Sponsor», bortsett fra at det er ubetalt eller selv-promotering. Dette inkluderer segmenter om ting, donasjoner, eller info om samarbeidspartnere.</string>
<string name="category_sponsor_description">Betalt promosjon, betalt videresending og direkte reklame. Ikke for selvpromotering eller gratis nevning av tiltak/skapere/nettsider/produkter.</string> <string name="category_sponsor_description">Betalt promosjon, betalt videresending og direkte reklame. Ikke for selvpromotering eller sannferdig gratis nevning av tiltak, skapere, nettsider, eller produkter.</string>
<string name="category_interaction_description">Når det er en kort påminnelse om å like, abonnere, eller følge midt i innhold. Hvis det er lagt eller om noe spesifikt bør du heller velge selvpromotering.</string> <string name="category_interaction_description">Når det er en kort påminnelse om å like, abonnere, eller følge midt i innhold. Hvis det er lagt eller om noe spesifikt bør du heller velge selvpromotering.</string>
<string name="category_intro_description">Et intervall uten faktisk innhold. Kan være en pause, et statisk bilde, eller gjentagende animasjon. Skal ikke brukes for overganger som inneholder info.</string> <string name="category_intro_description">Et intervall uten faktisk innhold. Kan være en pause, et statisk bilde, eller gjentagende animasjon. Skal ikke brukes for overganger som inneholder info.</string>
<string name="sponsorblock_notifications">Merknader</string> <string name="sponsorblock_notifications">Merknader</string>
@ -160,7 +160,7 @@
<string name="no_update_available">Du kjører den siste versjonen.</string> <string name="no_update_available">Du kjører den siste versjonen.</string>
<string name="playback_speed">Forvalgt avspillingshastighet</string> <string name="playback_speed">Forvalgt avspillingshastighet</string>
<string name="advanced">Avansert</string> <string name="advanced">Avansert</string>
<string name="player">Spiller</string> <string name="player">Lyd og video</string>
<string name="instance_summary">Piped, innlogging, abonnementer</string> <string name="instance_summary">Piped, innlogging, abonnementer</string>
<string name="customInstance_summary">Legg til en egendefinert instans (på egen risiko)</string> <string name="customInstance_summary">Legg til en egendefinert instans (på egen risiko)</string>
<string name="instance_name">Navn på instans</string> <string name="instance_name">Navn på instans</string>
@ -168,10 +168,10 @@
<string name="addInstance">Legg til instans</string> <string name="addInstance">Legg til instans</string>
<string name="invalid_url">Skriv inn en nettadresse som virker</string> <string name="invalid_url">Skriv inn en nettadresse som virker</string>
<string name="about_summary">Bli kjent med LibreTube-laget og alt som skjer.</string> <string name="about_summary">Bli kjent med LibreTube-laget og alt som skjer.</string>
<string name="empty_instance">Du må fylle inn navnet og API-nettadressen.</string> <string name="empty_instance">Fyll inn navnet og API-nettadressen.</string>
<string name="version">Versjon %1$s</string> <string name="version">Versjon %1$s</string>
<string name="clear_customInstances">Tøm egendefinerte instanser</string> <string name="clear_customInstances">Tøm egendefinerte instanser</string>
<string name="related_streams">Relaterte strømmer</string> <string name="related_streams">Relatert innhold</string>
<string name="related_streams_summary">Vis videoer relatert til det du ser.</string> <string name="related_streams_summary">Vis videoer relatert til det du ser.</string>
<string name="show_chapters">Vis kapitler</string> <string name="show_chapters">Vis kapitler</string>
<string name="hide_chapters">Skjul kapitler</string> <string name="hide_chapters">Skjul kapitler</string>
@ -180,8 +180,21 @@
<string name="category_preview">Forhåndsvining/tilbakeblikk</string> <string name="category_preview">Forhåndsvining/tilbakeblikk</string>
<string name="category_music_offtopic">Musikk: Parti uten musikk</string> <string name="category_music_offtopic">Musikk: Parti uten musikk</string>
<string name="category_filler_description">For avsporinger som kun er lagt til for å fylle tid, eller være morsomme, og ikke er nødvendige for å forstå videoens hovedinnhold.</string> <string name="category_filler_description">For avsporinger som kun er lagt til for å fylle tid, eller være morsomme, og ikke er nødvendige for å forstå videoens hovedinnhold.</string>
<string name="category_music_offtopic_description">Dette er kun i bruk i musikkvideoer. Det bør dekke de delene av videoen som ikke er i den offisielle miksen. Til slutt skal videoen utgjøre det som finnes på Spotify eller annen mikset versjon så nært som mulig, eller redusere snakking og andre distraksjoner.</string> <string name="category_music_offtopic_description">Kun til bruk for musikkvideoer. Det bør dekke de delene av videoen som ikke er i den offisielle miksen. Til slutt skal videoen utgjøre det som finnes på Spotify eller annen mikset versjon så nært som mulig, eller redusere snakking og andre distraksjoner.</string>
<string name="buffering_goal_summary">Maks. antall sekunders forhåndsinnlasting av videoer.</string> <string name="buffering_goal_summary">Maks. antall sekunders mellomlagring av videoer.</string>
<string name="category_preview_description">For segmenter som viser hva som følger i denne eller kommende videoer i serien, men ikke har ytterligere info. Hvis dette inkluderer klipp som kun vises her er det antagelig ikke riktig kategori.</string> <string name="category_preview_description">For segmenter som viser hva som følger i denne eller kommende videoer i serien, men ikke har ytterligere info. Hvis dette inkluderer klipp som kun vises her er det antagelig ikke riktig kategori.</string>
<string name="buffering_goal">Mellomlagringsmål</string> <string name="buffering_goal">Forhåndsinnlasting</string>
<string name="downloading">Laster ned …</string>
<string name="player_autoplay">Spill automatisk</string>
<string name="hideTrendingPage">Ikke vis ting på vei opp</string>
<string name="instance_frontend_url">Nettadresse til instans-skjermflate</string>
<string name="audio">Lyd</string>
<string name="video">Video</string>
<string name="no_audio">Ingen lyd</string>
<string name="no_video">Ingen video</string>
<string name="quality">Kvalitet</string>
<string name="behavior">Oppførsel</string>
<string name="player_summary">Kvalitet og avspilleroppførsel</string>
<string name="seek_increment">Blafringsmengde</string>
<string name="piped_summary">Piped er en fri alternativ grenseflate for YouTube som tilbyr API-et programmet bruker. Uten Piped ville ikke LibreTube eksistert. Stor takk til utviklerne deres.</string>
</resources> </resources>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="login">Zaloguj się</string> <string name="login">Zaloguj się</string>
<string name="region">Wybierz region</string> <string name="region">Region</string>
<string name="yes">Tak</string> <string name="yes">Tak</string>
<string name="download">Pobierz</string> <string name="download">Pobierz</string>
<string name="choose_quality_dialog">Wybierz jakość:</string> <string name="choose_quality_dialog">Jakość</string>
<string name="search_hint">Szukaj</string> <string name="search_hint">Szukaj</string>
<string name="subscribe">Subskrybuj</string> <string name="subscribe">Subskrybuj</string>
<string name="unsubscribe">ODSUBSKRYBUJ</string> <string name="unsubscribe">ODSUBSKRYBUJ</string>
@ -19,10 +19,10 @@
<string name="already_logged_in">Jesteś już zalogowany, możesz się wylogować ze swojego konta.</string> <string name="already_logged_in">Jesteś już zalogowany, możesz się wylogować ze swojego konta.</string>
<string name="login_first">Zaloguj się i spróbuj ponownie!</string> <string name="login_first">Zaloguj się i spróbuj ponownie!</string>
<string name="instances">Wybierz instancję</string> <string name="instances">Wybierz instancję</string>
<string name="customInstance">Dodaj niestandardową instancję</string> <string name="customInstance">Niestandardowa instancja</string>
<string name="login_register">Zaloguj/Zarejestruj się</string> <string name="login_register">Zaloguj/zarejestruj się</string>
<string name="please_login">Najpierw zaloguj lub zarejestruj się przechodząc do ustawień!</string> <string name="please_login">Najpierw zaloguj lub zarejestruj się przechodząc do ustawień!</string>
<string name="importsuccess">Dodano subskrypcję!</string> <string name="importsuccess">Zasubskrybowano</string>
<string name="subscribeIsEmpty">Zasubskrybuj ulubione kanały, aby widzieć tutaj ich najnowsze publikacje!</string> <string name="subscribeIsEmpty">Zasubskrybuj ulubione kanały, aby widzieć tutaj ich najnowsze publikacje!</string>
<string name="dlcomplete">Pobieranie ukończone.</string> <string name="dlcomplete">Pobieranie ukończone.</string>
<string name="dlisinprogress">Pobieranie innego materiału trwa, poczekaj aż proces się zakończy!</string> <string name="dlisinprogress">Pobieranie innego materiału trwa, poczekaj aż proces się zakończy!</string>
@ -35,37 +35,37 @@
<string name="error">Coś poszło nie tak!</string> <string name="error">Coś poszło nie tak!</string>
<string name="notgmail">To nie jest konto gmail!</string> <string name="notgmail">To nie jest konto gmail!</string>
<string name="defres">Domyślna jakość video</string> <string name="defres">Domyślna jakość video</string>
<string name="grid">Wybierz zagęszczenie siatki filmów</string> <string name="grid">Zagęszczenie siatki filmów</string>
<string name="emptyList">Tu jeszcze nic nie ma!</string> <string name="emptyList">Tu jeszcze nic nie ma!</string>
<string name="deletePlaylist">Usuń playlistę</string> <string name="deletePlaylist">Usuń playlistę</string>
<string name="createPlaylist">Utwórz nową playlistę</string> <string name="createPlaylist">Utwórz nową playlistę</string>
<string name="playlistCreated">Utworzono playlistę!</string> <string name="playlistCreated">Utworzono playlistę.</string>
<string name="playlistName">Nazwa playlisty</string> <string name="playlistName">Nazwa playlisty</string>
<string name="success">Udało się!</string> <string name="success">Gotowe.</string>
<string name="fail">Nie powiodło się :(</string> <string name="fail">Nie powiodło się :(</string>
<string name="about">O LibreTube</string> <string name="about">O LibreTube</string>
<string name="registered">Zarejestrowano się pomyślnie! Od teraz masz możliwość subskrybowania kanałów.</string> <string name="registered">Zarejestrowano się pomyślnie! Od teraz masz możliwość subskrybowania kanałów.</string>
<string name="cannotDownload">Niemożliwe jest pobranie tej transmisji!</string> <string name="cannotDownload">Niemożliwe jest pobranie tej transmisji!</string>
<string name="vlc">Otwórz w VLC</string> <string name="vlc">Otwórz w VLC</string>
<string name="empty">Nazwa użytkownika i hasło nie mogą być puste!</string> <string name="empty">Nazwa użytkownika i hasło nie mogą być puste!</string>
<string name="vlcerror">Nie można otworzyć w programie VLC. Sprawdź, czy jest zainstalowany!</string> <string name="vlcerror">Nie można otworzyć w VLC. Aplikacja może być niezainstalowana</string>
<string name="areYouSure">Na pewno chcesz usunąć tę palistę\?</string> <string name="areYouSure">Na pewno chcesz usunąć tę palistę\?</string>
<string name="addToPlaylist">Dodaj do playlisty</string> <string name="addToPlaylist">Dodaj do playlisty</string>
<string name="emptyPlaylistName">Nazwa playlisty nie może być pusta</string> <string name="emptyPlaylistName">Nazwa playlisty nie może być pusta</string>
<string name="import_from_yt_summary">Z YouTube lub NewPipe</string> <string name="import_from_yt_summary">Z YouTube lub NewPipe</string>
<string name="videos">Filmy</string> <string name="videos">Filmy</string>
<string name="changeLanguage">Zmień język</string> <string name="changeLanguage">Język</string>
<string name="systemLanguage">Język systemowy</string> <string name="systemLanguage">System</string>
<string name="systemDefault">Motyw systemu</string> <string name="systemDefault">Systemowy</string>
<string name="lightTheme">Tryb jasny</string> <string name="lightTheme">Jasny</string>
<string name="subscribers">%1$s subskrypcji</string> <string name="subscribers">%1$s subskrypcji</string>
<string name="startpage">Główna</string> <string name="startpage">Główna</string>
<string name="darkTheme">Tryb ciemny</string> <string name="darkTheme">Ciemny</string>
<string name="subscriptions">Subskrypcje</string> <string name="subscriptions">Subskrypcje</string>
<string name="library">Biblioteka</string> <string name="library">Biblioteka</string>
<string name="defaultTab">Strona Główna</string> <string name="defaultTab">Strona Główna</string>
<string name="sponsorblock">Blocker Sponsorów</string> <string name="sponsorblock">SponsorBlock</string>
<string name="sponsorblock_summary">Używa API z https://sponsor.ajay.app/</string> <string name="sponsorblock_summary">Używa API https://sponsor.ajay.app/</string>
<string name="choose_filter">Wybierz filter wyszukiwania</string> <string name="choose_filter">Wybierz filter wyszukiwania</string>
<string name="channels">Kanały</string> <string name="channels">Kanały</string>
<string name="all">Wszystkie</string> <string name="all">Wszystkie</string>
@ -77,11 +77,11 @@
<string name="sponsorblock_state">Włączono</string> <string name="sponsorblock_state">Włączono</string>
<string name="category_selfpromo">Bezpłatna / własna promocja</string> <string name="category_selfpromo">Bezpłatna / własna promocja</string>
<string name="category_segments">Segmenty</string> <string name="category_segments">Segmenty</string>
<string name="category_sponsor">Sponsor</string> <string name="category_sponsor">Lokowanie</string>
<string name="category_sponsor_description">Płatna promocja, płatne polecenia i bezpośrednie reklamy. Nie służy do autopromocji ani niesponsorowanego chwalenia spraw/twórców/stron internetowych/produktów.</string> <string name="category_sponsor_description">Płatna promocja, płatne polecenia i bezpośrednie reklamy. Nie służy do autopromocji ani niesponsorowanego chwalenia spraw/twórców/stron internetowych/produktów.</string>
<string name="segment_skipped">Pominięto segment</string> <string name="segment_skipped">Pominięto segment</string>
<string name="category_selfpromo_description">Podobne do \"sponsora\", z wyjątkiem bezpłatniej lub samo promocji. Obejmuje to sekcje dotyczące towarów, darowizn lub informacji o tym, z kim współpracowali</string> <string name="category_selfpromo_description">Podobne do \"sponsora\", z wyjątkiem bezpłatniej lub samo promocji. Obejmuje to sekcje dotyczące towarów, darowizn lub informacji o tym, z kim współpracowali</string>
<string name="category_interaction">Przypomnienie o interakcji (Subskrybuj)</string> <string name="category_interaction">Przypomnienie o interakcji (o polubieniu, subskrybcji)</string>
<string name="category_interaction_description">Gdy pojawi się krótkie przypomnienie, aby polubić, zasubskrybować, czy zaobserwować w środku treści. Jeśli trwa to długo lub dotyczy czegoś konkretnego, fragment powinien zostać oznaczony jako autopromocja.</string> <string name="category_interaction_description">Gdy pojawi się krótkie przypomnienie, aby polubić, zasubskrybować, czy zaobserwować w środku treści. Jeśli trwa to długo lub dotyczy czegoś konkretnego, fragment powinien zostać oznaczony jako autopromocja.</string>
<string name="category_intro">Przerywnik / Animacja wprowadzająca</string> <string name="category_intro">Przerywnik / Animacja wprowadzająca</string>
<string name="category_intro_description">Przerwa bez faktycznej treści. Może to być pauza, statyczna klatka, powtarzająca się animacja. Nie należy tego używać do efektów przejścia zawierających informacje.</string> <string name="category_intro_description">Przerwa bez faktycznej treści. Może to być pauza, statyczna klatka, powtarzająca się animacja. Nie należy tego używać do efektów przejścia zawierających informacje.</string>
@ -94,17 +94,17 @@
<string name="customization">Dostosowywanie</string> <string name="customization">Dostosowywanie</string>
<string name="website">Strona Internetowa</string> <string name="website">Strona Internetowa</string>
<string name="videoCount">%1$s filmy</string> <string name="videoCount">%1$s filmy</string>
<string name="noInternet">Brak Połączenia z Internetem</string> <string name="noInternet">Wpierw połącz się z internetem.</string>
<string name="retry">Spróbuj Ponownie</string> <string name="retry">Spróbuj Ponownie</string>
<string name="comments">Komentarze</string> <string name="comments">Komentarze</string>
<string name="color_blue">Niebieski</string> <string name="color_blue">Błogi błękit</string>
<string name="color_yellow">Żółty</string> <string name="color_yellow">Żwawa żółć</string>
<string name="color_green">Zielony</string> <string name="color_green">Wdzięczna zieleń</string>
<string name="color_accent">Colory Akcentów</string> <string name="color_accent">Akcenty</string>
<string name="color_red">Czerwony</string> <string name="color_red">Kojąca czerwień</string>
<string name="color_purple">Fioletowy</string> <string name="color_purple">Fantastyczny fiolet</string>
<string name="oledTheme">Motyw OLED</string> <string name="oledTheme">Czarny</string>
<string name="material_you">Material You</string> <string name="material_you">Mystic Material 3</string>
<string name="sponsorblock_notifications">Powiadomienia</string> <string name="sponsorblock_notifications">Powiadomienia</string>
<string name="app_icon">Ikona aplikacji</string> <string name="app_icon">Ikona aplikacji</string>
<string name="youtube">YouTube</string> <string name="youtube">YouTube</string>
@ -133,7 +133,7 @@
<string name="no_update_available">Używasz najnowszej wersji.</string> <string name="no_update_available">Używasz najnowszej wersji.</string>
<string name="appearance_summary">Dostosuj aplikację do swoich potrzeb.</string> <string name="appearance_summary">Dostosuj aplikację do swoich potrzeb.</string>
<string name="advanced_summary">Ustawienia wideo, pobrane i historia</string> <string name="advanced_summary">Ustawienia wideo, pobrane i historia</string>
<string name="authors_summary">Poznaj zespół LibreTube i wszystkich jego wolontariuszy, którzy pomagają ulepszać tę aplikację.</string> <string name="authors_summary">Poznaj wszystkich.</string>
<string name="download_folder">Nazwa</string> <string name="download_folder">Nazwa</string>
<string name="download_folder_summary">Nazwa folderu, w którym zapisywane są pobrane treści.</string> <string name="download_folder_summary">Nazwa folderu, w którym zapisywane są pobrane treści.</string>
<string name="downloads_directory">Folder pobranych</string> <string name="downloads_directory">Folder pobranych</string>
@ -143,8 +143,8 @@
<string name="instance_summary">Piped, logowanie i subskrypcje</string> <string name="instance_summary">Piped, logowanie i subskrypcje</string>
<string name="instance_api_url">Adres url API instancji</string> <string name="instance_api_url">Adres url API instancji</string>
<string name="addInstance">Dodaj instancję</string> <string name="addInstance">Dodaj instancję</string>
<string name="empty_instance">Musisz wpisać nazwę i adres URL interfejsu API.</string> <string name="empty_instance">Wpisz nazwę i adres URL interfejsu API.</string>
<string name="invalid_url">Wprowadź prawidłowy adres url</string> <string name="invalid_url">Wpisz działający adres</string>
<string name="customInstance_summary">Dodaj niestandardową instancję (na własne ryzyko)</string> <string name="customInstance_summary">Dodaj niestandardową instancję (na własne ryzyko)</string>
<string name="website_summary">Odwiedź stronę internetową, aby uzyskać więcej informacji o aplikacji i jej funkcjach.</string> <string name="website_summary">Odwiedź stronę internetową, aby uzyskać więcej informacji o aplikacji i jej funkcjach.</string>
<string name="update">Sprawdź, czy dostępna jest nowsza wersja</string> <string name="update">Sprawdź, czy dostępna jest nowsza wersja</string>
@ -164,8 +164,19 @@
<string name="advanced">Zaawansowane</string> <string name="advanced">Zaawansowane</string>
<string name="player">Ustawienia video</string> <string name="player">Ustawienia video</string>
<string name="live">Na Żywo</string> <string name="live">Na Żywo</string>
<string name="related_streams">Powiązane rekomendacje</string> <string name="related_streams">Sugerowane treści</string>
<string name="hide_chapters">Ukryj rozdziały</string> <string name="hide_chapters">Ukryj rozdziały</string>
<string name="show_chapters">Pokaż rozdziały</string> <string name="show_chapters">Pokaż rozdziały</string>
<string name="related_streams_summary">Proponuj powiązane do oglądanego filmu treści.</string> <string name="related_streams_summary">Proponuj powiązane do oglądanego filmu treści.</string>
<string name="legacyIcon">Zaginione dziedzictwo</string>
<string name="fireIcon">Zniewalający żar</string>
<string name="category_filler">Przerywniki/Żarty</string>
<string name="category_filler_description">Za sceny poboczne dodane tylko jako wypełniacz lub w ramach humor,u które nie są potrzebne do zrozumienia głównej treści filmu.</string>
<string name="category_music_offtopic">Muzyka: Sekcja bez muzyki</string>
<string name="category_music_offtopic_description">Tylko do użytku w teledyskach. Obejmuje fragmenty teledysku, które nie są częścią oficjalnego mixu. Teledysk powinien jak najbardziej przypominać wersję Spotify lub inną zmiksowaną wersję, lub ograniczyć ilość rozmów i innych elementów rozpraszających uwagę.</string>
<string name="category_preview">Zajawka/Skrót</string>
<string name="category_preview_description">Segmenty zapowiadające ten lub przyszłe filmy z danej serii, ale nie dostarczające dodatkowych informacji. Jeśli zawiera klipy niepojawiające się nigdzie indziej, najprawdopodobniej jest to niewłaściwa kategoria.</string>
<string name="buffering_goal">Wstępne ładowanie</string>
<string name="buffering_goal_summary">Maks. liczba sekund filmu do zbuforowania.</string>
<string name="playerVideoFormat">Format wideo odtwarzacza</string>
</resources> </resources>

View File

@ -14,8 +14,8 @@
<string name="loggedout">Saiu com sucesso.</string> <string name="loggedout">Saiu com sucesso.</string>
<string name="already_logged_in">Você já está logado, você pode sair da sua conta.</string> <string name="already_logged_in">Você já está logado, você pode sair da sua conta.</string>
<string name="instances">Escolha uma instância</string> <string name="instances">Escolha uma instância</string>
<string name="customInstance">Adicionar uma instância personalizada</string> <string name="customInstance">Instância personalizada</string>
<string name="login_register">Entrar/Registrar</string> <string name="login_register">Entrar/registrar</string>
<string name="please_login">Por favor, faça login ou registre-se nas configurações primeiro!</string> <string name="please_login">Por favor, faça login ou registre-se nas configurações primeiro!</string>
<string name="subscribeIsEmpty">Inscreva-se em alguns canais primeiro.</string> <string name="subscribeIsEmpty">Inscreva-se em alguns canais primeiro.</string>
<string name="cannotDownload">Não é possível baixar este stream.</string> <string name="cannotDownload">Não é possível baixar este stream.</string>
@ -29,52 +29,52 @@
<string name="unknown_error">Erro de rede.</string> <string name="unknown_error">Erro de rede.</string>
<string name="error">Algo deu errado.</string> <string name="error">Algo deu errado.</string>
<string name="empty">Você precisa colocar um nome de usuário e senha.</string> <string name="empty">Você precisa colocar um nome de usuário e senha.</string>
<string name="notgmail">Esta não é sua conta do Gmail.</string> <string name="notgmail">Isto é para uma conta LibreTube.</string>
<string name="defres">Resolução de vídeo padrão</string> <string name="defres">Resolução de vídeo padrão</string>
<string name="grid">Escolha as colunas da grade</string> <string name="grid">Colunas de grade</string>
<string name="emptyList">Não há nada aqui.</string> <string name="emptyList">Não há nada aqui.</string>
<string name="deletePlaylist">Excluir playlist</string> <string name="deletePlaylist">Excluir playlist</string>
<string name="createPlaylist">Criar playlist</string> <string name="createPlaylist">Criar playlist</string>
<string name="playlistCreated">Playlist criada!</string> <string name="playlistCreated">Playlist criada.</string>
<string name="playlistName">Nome da playlist</string> <string name="playlistName">Nome da playlist</string>
<string name="addToPlaylist">Adicionar à Playlist</string> <string name="addToPlaylist">Adicionar à playlist</string>
<string name="success">Sucesso!</string> <string name="success">Feito.</string>
<string name="fail">Falhou :(</string> <string name="fail">Falhou :(</string>
<string name="about">Sobre</string> <string name="about">Sobre</string>
<string name="choose_quality_dialog">Qualidade</string> <string name="choose_quality_dialog">Qualidade</string>
<string name="subscribe">Inscrever-se</string> <string name="subscribe">Inscrever-se</string>
<string name="dlisinprogress">Outro download já está em andamento, por favor aguarde até que seja concluído.</string> <string name="dlisinprogress">Aguarde até que todos os downloads sejam concluídos…</string>
<string name="username">Nome do usuário</string> <string name="username">Nome do usuário</string>
<string name="registered">Registrado com sucesso! Agora você pode se inscrever nos canais que deseja.</string> <string name="registered">Registrado com sucesso! Agora você pode se inscrever nos canais que deseja.</string>
<string name="login_first">Por favor, faça o login e tente novamente!</string> <string name="login_first">Por favor, faça o login e tente novamente.</string>
<string name="cancel">Cancelar</string> <string name="cancel">Cancelar</string>
<string name="region">Escolha uma região</string> <string name="region">Região</string>
<string name="importsuccess">Inscrito</string> <string name="importsuccess">Inscrito</string>
<string name="areYouSure">Tem certeza de que deseja excluir esta playlist\?</string> <string name="areYouSure">Tem certeza de que deseja excluir esta playlist\?</string>
<string name="emptyPlaylistName">O nome da playlist não pode estar vazio</string> <string name="emptyPlaylistName">O nome da playlist não pode estar vazio</string>
<string name="subscriptions">Inscrições</string> <string name="subscriptions">Inscrições</string>
<string name="videos">Vídeos</string> <string name="videos">Vídeos</string>
<string name="changeLanguage">Mudar idioma</string> <string name="changeLanguage">Linguagem</string>
<string name="systemLanguage">Idioma do sistema</string> <string name="systemLanguage">Sistema</string>
<string name="systemDefault">Padrão do sistema</string> <string name="systemDefault">Sistema</string>
<string name="lightTheme">Tema claro</string> <string name="lightTheme">Claro</string>
<string name="darkTheme">Tema escuro</string> <string name="darkTheme">Escuro</string>
<string name="import_from_yt_summary">Do YouTube ou NewPipe</string> <string name="import_from_yt_summary">Do YouTube ou NewPipe</string>
<string name="subscribers">%1$s inscritos</string> <string name="subscribers">%1$s inscritos</string>
<string name="library">Biblioteca</string> <string name="library">Biblioteca</string>
<string name="startpage">Início</string> <string name="startpage">Início</string>
<string name="customization">Personalização</string> <string name="customization">Ajustes</string>
<string name="settings">Configurações</string> <string name="settings">Configurações</string>
<string name="videoCount">%1$s vídeos</string> <string name="videoCount">%1$s vídeos</string>
<string name="location">Localização</string> <string name="location">Localização</string>
<string name="instance">Instância</string> <string name="instance">Instância</string>
<string name="website">Sítio Web</string> <string name="website">Sítio Web</string>
<string name="comments">Comentários</string> <string name="comments">Comentários</string>
<string name="noInternet">Sem ligação à Internet</string> <string name="noInternet">Conecte-se à Internet primeiro.</string>
<string name="retry">Tente novamente</string> <string name="retry">Tente novamente</string>
<string name="defaultTab">Aba padrão</string> <string name="defaultTab">Aba padrão</string>
<string name="sponsorblock">SponsorBlock</string> <string name="sponsorblock">SponsorBlock</string>
<string name="sponsorblock_summary">Utiliza a API de https://sponsor.ajay.app/</string> <string name="sponsorblock_summary">Usa a API https://sponsor.ajay.app</string>
<string name="channels">Canais</string> <string name="channels">Canais</string>
<string name="choose_filter">Escolher filtro de pesquisa</string> <string name="choose_filter">Escolher filtro de pesquisa</string>
<string name="clear_history">Limpar histórico</string> <string name="clear_history">Limpar histórico</string>
@ -91,29 +91,96 @@
<string name="sponsorblock_state">Habilitado</string> <string name="sponsorblock_state">Habilitado</string>
<string name="category_segments">Segmentos</string> <string name="category_segments">Segmentos</string>
<string name="category_sponsor">Patrocinador</string> <string name="category_sponsor">Patrocinador</string>
<string name="category_sponsor_description">Promoção paga, referências pagas e publicidade directa. Não funciona para auto-promoção, anúncios gratuitos a causas/criadores/websites ou produtos que eles gostam.</string> <string name="category_sponsor_description">Promoção paga, referências pagas e anúncios diretos. Não para autopromoção ou mensagens genuínas gratuitas para causas, criadores, sites e produtos.</string>
<string name="category_intro">Interrupção/Introdução</string> <string name="category_intro">Interrupção/Introdução</string>
<string name="category_intro_description">Um intervalo sem conteúdo. Pode ser uma pausa, imagem estática ou uma animação que se repete. Isto não deve ser utilizado para transições que contém informação.</string> <string name="category_intro_description">Um intervalo sem conteúdo real. Pode ser uma pausa, quadro estático, animação repetida. Não deve ser usado para transições contendo informações.</string>
<string name="category_outro">Telas finais/Créditos</string> <string name="category_outro">Telas finais/Créditos</string>
<string name="license">Licença</string> <string name="license">Licença</string>
<string name="category_selfpromo">Não paga/Auto-promoção</string> <string name="category_selfpromo">Não paga/Auto-promoção</string>
<string name="category_selfpromo_description">Similar a \" patrocinador\", excepto para promoção não paga ou auto-promoção. Isto inclui seções sobre mercadorias, doações, ou informação sobre com quem colaboraram.</string> <string name="category_selfpromo_description">Semelhante a \"patrocinador\", exceto para promoção não paga ou autopromoção. Isso inclui seções sobre mercadorias, doações ou informações sobre com quem eles colaboraram.</string>
<string name="category_interaction">Lembrete de interação (Inscrever-se)</string> <string name="category_interaction">Lembrete de interação (curtir e se inscrever)</string>
<string name="category_interaction_description">Quando tem um breve lembrete para gostar, se inscrever ou segui-los no meio do conteúdo. Se for muito longo ou sobre algo específico, deve, em vez disso, estar sob auto-promoção.</string> <string name="category_interaction_description">Quando há um pequeno lembrete para curtir, se inscrever ou seguir no meio do conteúdo. Se for longo ou sobre algo específico, deve ser autopromoção.</string>
<string name="category_outro_description">Créditos ou quando as telas finais do YouTube aparecem.</string> <string name="category_outro_description">Informações após o final. Não para conclusões com informações.</string>
<string name="color_accent">Cor de realce</string> <string name="color_accent">Cor de realce</string>
<string name="color_red">Vermelho</string> <string name="color_red">Vermelho</string>
<string name="color_blue">Azul Pixel</string> <string name="color_blue">Azul Pixel</string>
<string name="color_yellow">Amarelo</string> <string name="color_yellow">Amarelo</string>
<string name="color_green">Verde</string> <string name="color_green">Verde</string>
<string name="color_purple">Roxo</string> <string name="color_purple">Roxo</string>
<string name="oledTheme">Tema OLED</string> <string name="oledTheme">Preto</string>
<string name="material_you">Material You</string> <string name="material_you">Material Místico 3</string>
<string name="app_icon">Ícone do aplicativo</string> <string name="app_icon">Ícone</string>
<string name="sponsorblock_notifications">Notificações</string> <string name="sponsorblock_notifications">Notificações</string>
<string name="enabled">Habilitado</string> <string name="enabled">Habilitado</string>
<string name="piped">Canalizado</string> <string name="piped">Canalizado</string>
<string name="youtube">YouTube</string> <string name="youtube">YouTube</string>
<string name="playOnBackground">Reproduzir em segundo plano</string> <string name="playOnBackground">Reproduzir em segundo plano</string>
<string name="disabled">Desabilitado</string> <string name="disabled">Desabilitado</string>
<string name="authors">Autores</string>
<string name="authors_summary">Conheça todos.</string>
<string name="internal_storage">Armazenamento interno</string>
<string name="sdcard">SD card</string>
<string name="defaultIcon">Padrão</string>
<string name="views">%1$s visualizações</string>
<string name="update_available_text">Ir para lançamentos no GitHub para baixá-lo\?</string>
<string name="download_directory_summary">Onde a mídia baixada é armazenada.</string>
<string name="license_summary">A GPLv3+ é uma licença livre com copyleft. Use, estude, mude e compartilhe; com tudo.</string>
<string name="donate_summary">Dê o que isso vale para você, se puder. O Team LibreTube é menor do que sua doação ou ajuda.</string>
<string name="contributing_summary">Forneça ideias, traduções, alterações de design, limpe e escreva código. Quanto mais for feito, melhor fica!</string>
<string name="app_uptodate">Executando a versão mais recente.</string>
<string name="no_update_available">Você está executando a versão mais recente.</string>
<string name="fireIcon">Fogo na moda</string>
<string name="shapedIcon">Forma boba</string>
<string name="gradientIcon">Gradiente liso</string>
<string name="torchIcon">Lanterna da moda</string>
<string name="customInstance_summary">Adicione uma instância personalizada (por sua conta e risco)</string>
<string name="version">Versão %1$s</string>
<string name="category_filler">Filler Tangente/Piadas</string>
<string name="category_music_offtopic">Música: Seção Não-Música</string>
<string name="category_music_offtopic_description">Apenas para uso em vídeos de música. Deve abranger partes do vídeo que não fazem parte de mixagens oficiais. No final, o vídeo deve se assemelhar ao Spotify ou qualquer outra versão mista o mais próximo possível, ou reduzir a fala ou outras distrações.</string>
<string name="category_preview">Visualizar/Recapitular</string>
<string name="appearance">Aparência</string>
<string name="app_behavior">Comportamento</string>
<string name="downloads">Downloads</string>
<string name="video_format">Formato de vídeo</string>
<string name="video_format_summary">Conversão de arquivos se o áudio e o vídeo forem baixados.</string>
<string name="website_summary">Visite o site para obter mais informações sobre o aplicativo e seus recursos.</string>
<string name="update">Procure uma nova versão</string>
<string name="update_summary">Clique para saber se o aplicativo está atualizado.</string>
<string name="playback_speed">Velocidade de reprodução padrão</string>
<string name="advanced">Avançado</string>
<string name="player">Áudio e vídeo</string>
<string name="appearance_summary">Ajuste o aplicativo ao seu gosto.</string>
<string name="no_replies">Este comentário não tem respostas.</string>
<string name="download_folder">Nome</string>
<string name="birdIcon">Pássaro impulsionado</string>
<string name="download_folder_summary">O nome da pasta onde a mídia baixada está armazenada.</string>
<string name="downloads_directory">Pasta de download</string>
<string name="music_directory">Pasta de música</string>
<string name="movies_directory">Pasta de música</string>
<string name="shareTo">Compartilhar URL para</string>
<string name="legacyIcon">Legado perdido</string>
<string name="flameIcon">Chama voadora</string>
<string name="instance_summary">Canalizado, login, assinaturas</string>
<string name="instance_name">Nome da instância</string>
<string name="instance_api_url">URL para API de instância</string>
<string name="addInstance">Adicionar instância</string>
<string name="empty_instance">Preencha o nome e o URL da API.</string>
<string name="clear_customInstances">Limpar instâncias personalizadas</string>
<string name="invalid_url">Insira um URL que funcione</string>
<string name="about_summary">Conheça a equipe LibreTube e como tudo acontece.</string>
<string name="related_streams">Conteúdo Relacionado</string>
<string name="show_chapters">Mostrar capítulos</string>
<string name="category_filler_description">Para cenas tangenciais adicionadas apenas para preenchimento ou humor não é necessário entender o conteúdo principal do vídeo.</string>
<string name="category_preview_description">Para segmentos que detalham o conteúdo futuro neste ou em futuros vídeos da série, mas não forneça informações adicionais. Se incluir clipes que só aparecem aqui, provavelmente é a categoria errada.</string>
<string name="buffering_goal">Pré-carregamento</string>
<string name="buffering_goal_summary">Máx. quantidade de segundos de vídeo para buffer.</string>
<string name="playerVideoFormat">Formato de vídeo para player</string>
<string name="update_available">A versão %1$s está disponível</string>
<string name="contributing">Contribuindo</string>
<string name="donate">Doar</string>
<string name="advanced_summary">Downloads, histórico</string>
<string name="player_summary">Qualidade e comportamento do player</string>
<string name="hide_chapters">Ocultar capítulos</string>
<string name="related_streams_summary">Mostre streams relacionados ao lado do que você assiste.</string>
</resources> </resources>

View File

@ -22,7 +22,7 @@
<string name="instances">Выберите экземпляр</string> <string name="instances">Выберите экземпляр</string>
<string name="customInstance">Пользовательский экземпляр</string> <string name="customInstance">Пользовательский экземпляр</string>
<string name="region">Регион</string> <string name="region">Регион</string>
<string name="login_register">Войти/Зарегистрироваться</string> <string name="login_register">Войти/зарегистрироваться</string>
<string name="please_login">Пожалуйста, сначала войдите или зарегистрируйтесь в настройках.</string> <string name="please_login">Пожалуйста, сначала войдите или зарегистрируйтесь в настройках.</string>
<string name="importsuccess">Подписан</string> <string name="importsuccess">Подписан</string>
<string name="subscribeIsEmpty">Сначала подпишитесь на некоторые каналы.</string> <string name="subscribeIsEmpty">Сначала подпишитесь на некоторые каналы.</string>
@ -57,8 +57,8 @@
<string name="changeLanguage">Язык</string> <string name="changeLanguage">Язык</string>
<string name="systemLanguage">Системный</string> <string name="systemLanguage">Системный</string>
<string name="systemDefault">Системная</string> <string name="systemDefault">Системная</string>
<string name="lightTheme">Светлая тема</string> <string name="lightTheme">Светлая</string>
<string name="darkTheme">Тёмная тема</string> <string name="darkTheme">Тёмная</string>
<string name="subscribers">%1$s подписчиков</string> <string name="subscribers">%1$s подписчиков</string>
<string name="startpage">Домашняя</string> <string name="startpage">Домашняя</string>
<string name="import_from_yt_summary">Из YouTube или NewPipe</string> <string name="import_from_yt_summary">Из YouTube или NewPipe</string>
@ -82,7 +82,7 @@
<string name="history">История</string> <string name="history">История</string>
<string name="search_history">История поиска</string> <string name="search_history">История поиска</string>
<string name="sponsorblock">SponsorBlock</string> <string name="sponsorblock">SponsorBlock</string>
<string name="sponsorblock_summary">Использует API с https://sponsor.ajay.app/</string> <string name="sponsorblock_summary">Использует API сервиса https://sponsor.ajay.app/</string>
<string name="segment_skipped">Пропущен сегмент</string> <string name="segment_skipped">Пропущен сегмент</string>
<string name="sponsorblock_state">Вкл</string> <string name="sponsorblock_state">Вкл</string>
<string name="category_interaction">Напоминание о взаимодействии (как подписка)</string> <string name="category_interaction">Напоминание о взаимодействии (как подписка)</string>
@ -90,7 +90,7 @@
<string name="category_outro">Конечная заставка и титры</string> <string name="category_outro">Конечная заставка и титры</string>
<string name="category_segments">Сегменты</string> <string name="category_segments">Сегменты</string>
<string name="category_sponsor">Спонсор</string> <string name="category_sponsor">Спонсор</string>
<string name="category_sponsor_description">Платное продвижение, рефералы и прямая реклама. Не для саморекламы или благодарности причинам/создателям/сайтам/продуктам, которые им нравятся.</string> <string name="category_sponsor_description">Платное продвижение, рефералы и навязчивая реклама. Не является саморекламой или бесплатным отзывом о сервиса/авторах/веб-сайтах/продуктах, которые автору нравятся.</string>
<string name="music_playlists">Плейлисты из YT Music</string> <string name="music_playlists">Плейлисты из YT Music</string>
<string name="music_songs">Песни из YT Music</string> <string name="music_songs">Песни из YT Music</string>
<string name="music_videos">Видео из YT Music</string> <string name="music_videos">Видео из YT Music</string>
@ -99,15 +99,15 @@
<string name="category_intro_description">Интервал без фактического контента. Это может быть пауза, статичный кадр, повторяющаяся анимация. Не должно использоваться для переходов, содержащих информацию.</string> <string name="category_intro_description">Интервал без фактического контента. Это может быть пауза, статичный кадр, повторяющаяся анимация. Не должно использоваться для переходов, содержащих информацию.</string>
<string name="category_outro_description">Когда появляется концовка. Не для выводов с информацией.</string> <string name="category_outro_description">Когда появляется концовка. Не для выводов с информацией.</string>
<string name="category_selfpromo">Неоплачиваемый/Самореклама</string> <string name="category_selfpromo">Неоплачиваемый/Самореклама</string>
<string name="category_selfpromo_description">Аналогично «спонсору», за исключением бесплатных или саморекламируемых. Сюда входят разделы о товарах, пожертвованиях или информации о том, с кем они сотрудничали.</string> <string name="category_selfpromo_description">Аналогично «спонсорам», за исключением бесплатной рекламы или саморекламы. Сюда входят части о товарах, пожертвованиях или информации о том, с кем они сотрудничали.</string>
<string name="license">Лицензия</string> <string name="license">Лицензия</string>
<string name="color_accent">Акцентны</string> <string name="color_accent">Акцентны</string>
<string name="color_red">Крутой красный</string> <string name="color_red">Крутой красный</string>
<string name="color_blue">Сияющий синий</string> <string name="color_blue">Синий Pixel</string>
<string name="color_yellow">Желейный жёлтый</string> <string name="color_yellow">Желейный жёлтый</string>
<string name="color_green">Заводной зелёный</string> <string name="color_green">Заводной зелёный</string>
<string name="color_purple">Приятный пурпурный</string> <string name="color_purple">Приятный пурпурный</string>
<string name="oledTheme">Чёрная тема</string> <string name="oledTheme">OLED-тема</string>
<string name="material_you">Мистический Material 3</string> <string name="material_you">Мистический Material 3</string>
<string name="app_icon">Значок</string> <string name="app_icon">Значок</string>
<string name="sponsorblock_notifications">Уведомления</string> <string name="sponsorblock_notifications">Уведомления</string>
@ -132,7 +132,7 @@
<string name="gradientIcon">Гладкий градиент</string> <string name="gradientIcon">Гладкий градиент</string>
<string name="update_available_text">Перейти к выпускам на GitHub, чтобы загрузить его\?</string> <string name="update_available_text">Перейти к выпускам на GitHub, чтобы загрузить его\?</string>
<string name="app_behavior">Поведение</string> <string name="app_behavior">Поведение</string>
<string name="authors_summary">Познакомьтесь с командой LibreTube и всеми ее участниками, помогающими улучшить приложение.</string> <string name="authors_summary">Познакомьтесь со всеми.</string>
<string name="download_folder_summary">Имя папки, в которой хранится загруженные медиафайлы.</string> <string name="download_folder_summary">Имя папки, в которой хранится загруженные медиафайлы.</string>
<string name="birdIcon">Прикольная птица</string> <string name="birdIcon">Прикольная птица</string>
<string name="fireIcon">Огненный огонь</string> <string name="fireIcon">Огненный огонь</string>
@ -144,24 +144,24 @@
<string name="category_filler">Тангенс наполнения/шутки</string> <string name="category_filler">Тангенс наполнения/шутки</string>
<string name="category_music_offtopic">Музыка: Немузыкальная секция</string> <string name="category_music_offtopic">Музыка: Немузыкальная секция</string>
<string name="category_preview">Предварительный просмотр/резюме</string> <string name="category_preview">Предварительный просмотр/резюме</string>
<string name="category_preview_description">Для сегментов, которые показывают, что будет в этом или будущих видео той же серии, но не предоставляют дополнительную информацию. Если он включает в себя клипы, которые появляются только здесь, скорее всего, это не та категория.</string> <string name="category_preview_description">Для сегментов, подробно описывающих предстоящий контент в этом или будущих видео этой серии, но не предоставляющих дополнительную информацию. Если он включает в себя клипы, которые появляются только здесь, скорее всего, это неправильная категория.</string>
<string name="appearance">Внешний вид</string> <string name="appearance">Внешний вид</string>
<string name="no_replies">Этот комментарий не имеет ответов.</string> <string name="no_replies">Этот комментарий не имеет ответов.</string>
<string name="customInstance_summary">Добавьте пользовательский экземпляр (на свой страх и риск)</string> <string name="customInstance_summary">Добавьте пользовательский экземпляр (на свой страх и риск)</string>
<string name="addInstance">Добавить экземпляр</string> <string name="addInstance">Добавить экземпляр</string>
<string name="empty_instance">Вы должны заполнить имя и URL-адрес API.</string> <string name="empty_instance">Заполните имя и URL-адрес API.</string>
<string name="related_streams">Связанные потоки</string> <string name="related_streams">Связанный контент</string>
<string name="show_chapters">Показать главы</string> <string name="show_chapters">Показать главы</string>
<string name="hide_chapters">Скрыть главы</string> <string name="hide_chapters">Скрыть главы</string>
<string name="category_music_offtopic_description">Это только для использования в музыкальных клипах. Он должен охватывать части видео, не являющиеся частью официальных миксов. В конце концов, видео должно быть максимально похоже на версию Spotify или любую другую микс-версию, или должно быть меньше разговоров и других отвлекающих факторов.</string> <string name="category_music_offtopic_description">Только для использования в музыкальных клипах. Он должен охватывать части видео, не являющиеся частью официальных миксов. В конечном итоге, видео должно быть максимально похоже на версию Spotify или любую другую микс-версию, или должно быть меньше разговоров и других отвлекающих факторов.</string>
<string name="category_filler_description">Это для тангенциальных сцен, добавленных только для наполнения или юмора, которые не требуются для понимания основного содержания видео.</string> <string name="category_filler_description">Для пустых сцен, которые были добавлены только для заполнения контентом или юмор который не требуется для понимания основного контента видео.</string>
<string name="instance_name">Имя экземпляра</string> <string name="instance_name">Имя экземпляра</string>
<string name="instance_api_url">URL-адрес API экземпляра</string> <string name="instance_api_url">URL-адрес API экземпляра</string>
<string name="buffering_goal_summary">Максимальное количество секунд для пред-загрузки видео.</string> <string name="buffering_goal_summary">Макс. количество секунд видео для буферизации.</string>
<string name="clear_customInstances">Очистить пользовательские экземпляры</string> <string name="clear_customInstances">Очистить пользовательские экземпляры</string>
<string name="related_streams_summary">Показать потоки, связанные с видео.</string> <string name="related_streams_summary">Показывать связанные потоки с тем, что вы смотрите.</string>
<string name="invalid_url">Пожалуйста, введите корректный url</string> <string name="invalid_url">Пожалуйста, введите рабочий URL</string>
<string name="buffering_goal">Цель буферизации</string> <string name="buffering_goal">Предварительная загрузка</string>
<string name="downloads">Загрузки</string> <string name="downloads">Загрузки</string>
<string name="video_format">Формат видео</string> <string name="video_format">Формат видео</string>
<string name="video_format_summary">Преобразование файлов, если и аудио, и видео загружены.</string> <string name="video_format_summary">Преобразование файлов, если и аудио, и видео загружены.</string>
@ -183,4 +183,12 @@
<string name="appearance_summary">Настройте приложение по своему вкусу.</string> <string name="appearance_summary">Настройте приложение по своему вкусу.</string>
<string name="advanced_summary">Плеер, загрузки, история</string> <string name="advanced_summary">Плеер, загрузки, история</string>
<string name="live">В прямом эфире</string> <string name="live">В прямом эфире</string>
<string name="playerVideoFormat">Формат видео для плеера</string>
<string name="audio">Аудио</string>
<string name="video">Видео</string>
<string name="downloading">Загрузка</string>
<string name="player_autoplay">Автовоспроизведение</string>
<string name="hideTrendingPage">Скрыть вкладку \"тренды\"</string>
<string name="no_video">Нет видео</string>
<string name="no_audio">Нет звука</string>
</resources> </resources>

View File

@ -48,7 +48,7 @@
<string name="about">Hakkında</string> <string name="about">Hakkında</string>
<string name="vlcerror">VLC\'de açılamıyor. Kurulmamış olabilir.</string> <string name="vlcerror">VLC\'de açılamıyor. Kurulmamış olabilir.</string>
<string name="instances">Erişim Aracı Seç</string> <string name="instances">Erişim Aracı Seç</string>
<string name="customInstance">Dilediğiniz bir erişim aracısını ekleyin</string> <string name="customInstance">Özel erişim aracı</string>
<string name="server_error">Sunucu bir engelle karşılaştı, başka bir erişim aracını deneyebilir misiniz\?</string> <string name="server_error">Sunucu bir engelle karşılaştı, başka bir erişim aracını deneyebilir misiniz\?</string>
<string name="grid">Ağ sütunları</string> <string name="grid">Ağ sütunları</string>
<string name="import_from_yt_summary">YouTube veya NewPipe\'tan</string> <string name="import_from_yt_summary">YouTube veya NewPipe\'tan</string>
@ -56,9 +56,9 @@
<string name="subscriptions">Abonelikler</string> <string name="subscriptions">Abonelikler</string>
<string name="library">Kütüphane</string> <string name="library">Kütüphane</string>
<string name="systemDefault">Sistem</string> <string name="systemDefault">Sistem</string>
<string name="darkTheme">Tamamen karanlık</string> <string name="darkTheme">Koyu</string>
<string name="subscribers">%1$s Abone</string> <string name="subscribers">%1$s Abone</string>
<string name="lightTheme">Parlak işık</string> <string name="lightTheme">ık</string>
<string name="videos">Videolar</string> <string name="videos">Videolar</string>
<string name="startpage">Ana Sayfa</string> <string name="startpage">Ana Sayfa</string>
<string name="changeLanguage">Dil</string> <string name="changeLanguage">Dil</string>
@ -74,7 +74,7 @@
<string name="website">İnternet Sitesi</string> <string name="website">İnternet Sitesi</string>
<string name="defaultTab">Varsayılan Sekme</string> <string name="defaultTab">Varsayılan Sekme</string>
<string name="choose_filter">Arama filtresi seç</string> <string name="choose_filter">Arama filtresi seç</string>
<string name="category_outro_description">Kanal ikonları veya YouTube video kartları göründüğünde. Bilgi ile sonuçlar için değil.</string> <string name="category_outro_description">Sonunu takip eden bilgi. Bilgi içeren sonuçlar için değil.</string>
<string name="sponsorblock_state">ık</string> <string name="sponsorblock_state">ık</string>
<string name="clear_history">Geçmişi Temizle</string> <string name="clear_history">Geçmişi Temizle</string>
<string name="sponsorblock">SponsorBlok</string> <string name="sponsorblock">SponsorBlok</string>
@ -88,89 +88,105 @@
<string name="category_segments">Bölümler</string> <string name="category_segments">Bölümler</string>
<string name="category_sponsor">Bağışçı</string> <string name="category_sponsor">Bağışçı</string>
<string name="segment_skipped">Bölüm atlandı</string> <string name="segment_skipped">Bölüm atlandı</string>
<string name="category_sponsor_description">Ücretli promosyon, ücretli yönlendirmeler ve reklamlar içindir. Kendini veya sevdikleri nedenleri/üreticileri/internet sitelerini/ürünleri tanıtmak için değildir.</string> <string name="category_sponsor_description">Ücretli promosyon, yönlendirmeler ve doğrudan reklamlar. Kendi reklamını yapmak veya amaçlara, yaratıcılara, internet sitelerine ve ürünlere ücretsiz hakiki duyurular için değil.</string>
<string name="category_selfpromo">Ödenmemiş/Kendini Tanıtmak</string> <string name="category_selfpromo">Ödenmemiş/Kendini Tanıtmak</string>
<string name="category_interaction">Etkileşim Hatırlatıcısı (Abone Ol)</string> <string name="category_interaction">Etkileşim hatırlatıcısı (beğen ve abone ol)</string>
<string name="category_intro">Ara Verme/Giriş Animasyonu</string> <string name="category_intro">Ara Verme/Giriş Animasyonu</string>
<string name="category_intro_description">Gerçek içerik olmayan bir bölge. Duraklatma, durağan bir bölüm, tekrarlayan animasyon olabilir. Bu, bilgi içeren geçişler için kullanılmamalıdır.</string> <string name="category_intro_description">Gerçek içeriği olmayan bir aralık. Duraklatma, statik kare, yinelenen animasyon olabilir. Bilgi içeren geçişler için kullanılmamalıdır.</string>
<string name="category_interaction_description">İçeriğin ortasında beğenmek, abone olmak veya takip etmek için kısa bir hatırlatma olduğunda işe yarar. Uzunsa ya da belirli bir şey hakkında ise, bunun yerine \"kendini tanıtım\" altında olmalıdır.</string> <string name="category_interaction_description">İçeriğin ortasında beğenmek, abone olmak veya takip etmek için kısa bir hatırlatma olduğunda. Uzun veya belirli bir şey hakkındaysa, bunun yerine kendini tanıtmalıdır.</string>
<string name="category_selfpromo_description">Ücretsiz veya kendini tanıtım dışında \"bağışçı\" ile benzer. Bu, mallar, bağışlar veya kiminle işbirliği yaptığına dair bilgilerle ilgili bölümleri içerir.</string> <string name="category_selfpromo_description">Ücretsiz veya kendini tanıtım dışında \"bağışçı\" ile benzer. Bu, mallar, bağışlar veya kiminle işbirliği yaptığına dair bilgilerle ilgili bölümleri içerir.</string>
<string name="category_outro">Video Kartları/Kanal İkonu</string> <string name="category_outro">Bitiş kartları ve kanal simgesi</string>
<string name="music_songs">YT Müzik Şarkıları</string> <string name="music_songs">YT Müzik Şarkıları</string>
<string name="music_albums">YT Müzik Albümleri</string> <string name="music_albums">YT Müzik Albümleri</string>
<string name="music_videos">YT Müzik Videoları</string> <string name="music_videos">YT Müzik Videoları</string>
<string name="music_playlists">YT Müzik Oynatma Listeleri</string> <string name="music_playlists">YT Müzik Oynatma Listeleri</string>
<string name="license">Lisans</string> <string name="license">Lisans</string>
<string name="color_accent">Vurgu Rengi</string> <string name="color_accent">Vurgular</string>
<string name="oledTheme">OLED Tema</string> <string name="oledTheme">Siyah</string>
<string name="material_you">Kendi Tasarımı</string> <string name="material_you">Mistik Malzeme 3</string>
<string name="color_green">Yeşil</string> <string name="color_green">Harika yeşil</string>
<string name="color_purple">Mor</string> <string name="color_purple">Keyifli mor</string>
<string name="color_yellow">Sarı</string> <string name="color_yellow">Yeeting sarı</string>
<string name="color_blue">Piksel Mavisi</string> <string name="color_blue">Mutlu mavi</string>
<string name="color_red">Kırmızı</string> <string name="color_red">Rahatlatıcı kırmızı</string>
<string name="sponsorblock_notifications">Bildirimler</string> <string name="sponsorblock_notifications">Bildirimler</string>
<string name="enabled">Etkinleştirildi</string> <string name="enabled">ık</string>
<string name="disabled">Devre dışı bırakıldı</string> <string name="disabled">Kapalı</string>
<string name="app_icon">Uygulama Simgesi</string> <string name="app_icon">Simge</string>
<string name="piped">Piped</string> <string name="piped">Piped</string>
<string name="youtube">YouTube</string> <string name="youtube">YouTube</string>
<string name="playOnBackground">Arka Planda Oynat</string> <string name="playOnBackground">Arka planda oynat</string>
<string name="update_available">%1$s Sürümü Mevcut</string> <string name="update_available">%1$s Sürümü Mevcut</string>
<string name="update_available_text">Yeni bir güncelleme mevcut. GitHub\'daki güncelleme sayfasına yönlendirilmek için tamam\'a tıklayın.</string> <string name="update_available_text">İndirmek için GitHub\'daki sürümlere git\?</string>
<string name="appearance">Görünüm</string> <string name="appearance">Görünüm</string>
<string name="app_behavior">Uygulama Davranışı</string> <string name="app_behavior">Davranış</string>
<string name="downloads">İndirilenler</string> <string name="downloads">İndirilenler</string>
<string name="video_format">Video formatı</string> <string name="video_format">Video formatı</string>
<string name="video_format_summary">İndirilen videoların dönüştürüldüğü video formatı (yalnızca hem ses hem de video indirilirse geçerlidir).</string> <string name="video_format_summary">Hem ses, hem de video indirilirse dosyaların dönüştürülmesi.</string>
<string name="download_directory">İndirme konumu</string> <string name="download_directory">Buraya İndir</string>
<string name="download_directory_summary">İndirdiğiniz medyanın depolandığı konum.</string> <string name="download_directory_summary">İndirilen medyanın depolandığı yer.</string>
<string name="contributing">Katkı</string> <string name="contributing">Katkı</string>
<string name="license_summary">GNU Genel Kamu Lisansı, yazılım ve diğer çalışma türleri için ücretsiz, genel bir lisanstır.</string> <string name="license_summary">GPLv3+, telif hakkıyla korunan bir bedava lisansdır. Kullanın, inceleyin, değiştirin ve paylaşın;herkesle.</string>
<string name="donate">Bağış Yapın</string> <string name="donate">Bağış Yapın</string>
<string name="donate_summary">Uygulamayı beğenirseniz ve çalışmalarımızı takdir ederseniz, bağış yapmanızdan memnuniyet duyarız.</string> <string name="donate_summary">Yapabiliyorsan, bunun senin için değeri ne ise onu ver.LibreTube ekipi, bağışınız veya yardımınızdan daha küçüktür.</string>
<string name="website_summary">Uygulama ve özellikleri hakkında daha fazla bilgi edinmek için web sitemizi ziyaret edin.</string> <string name="website_summary">Uygulama ve özellikleri hakkında daha fazla bilgi için internet sitesini ziyaret edin.</string>
<string name="contributing_summary">Fikirleriniz, çevirileriniz, tasarım değişiklikleriniz, kod temizlemeniz veya gerçek ağır kod değişiklikleriniz olsun, yardım her zaman memnuniyetle karşılanır. Ne kadar çok yapılırsa o kadar iyi olur!</string> <string name="contributing_summary">Fikirler, çeviriler, tasarım değişiklikleri sağlayın, kodu temizleyin ve yazın. Ne kadar çok yapılırsa o kadar iyi olur!</string>
<string name="update_summary">Yeni bir uygulama güncellemesi olup-olmadığını kontrol etmek için burayı tıklayın.</string> <string name="update_summary">Uygulamanın güncel olup-olmadığını öğrenmek için tıklayın.</string>
<string name="app_uptodate">Uygulama Güncel</string> <string name="app_uptodate">En son sürümü çalıştırıyor.</string>
<string name="no_update_available">Şu anda yeni bir güncelleme mevcut değil. Bizi izlemeye devam edin!</string> <string name="no_update_available">En son sürümü çalıştırıyorsunuz.</string>
<string name="playback_speed">Varsayılan oynatma hızı</string> <string name="playback_speed">Varsayılan oynatma hızı</string>
<string name="advanced">Gelişmiş</string> <string name="advanced">Gelişmiş</string>
<string name="player">Oynatıcı</string> <string name="player">Ses ve video</string>
<string name="appearance_summary">Uygulamanın istediğiniz gibi görünmesini sağlayın.</string> <string name="appearance_summary">Uygulamayı zevkinize göre ayarlayın.</string>
<string name="advanced_summary">Oynatıcı, İndirilenler, Geçmiş</string> <string name="advanced_summary">İndirilenler, geçmiş</string>
<string name="update">Uygulama Güncellenmesi</string> <string name="update">Yeni sürümü arayın</string>
<string name="live">Canlı</string> <string name="live">Canlı</string>
<string name="no_replies">Bu yoruma cevap yok.</string> <string name="no_replies">Bu yoruma cevap yok.</string>
<string name="authors">Yazarlar</string> <string name="authors">Yazarlar</string>
<string name="authors_summary">LibreTube Ekipinin arkasında kimin olduğunu ve sihri kimin yapdığını öğrenin.</string> <string name="authors_summary">Uygulamayı geliştirmeye ve iyileştirmeye dahil olan herkesi tanıyın.</string>
<string name="internal_storage">Dahili depolama</string> <string name="internal_storage">Dahili depolama</string>
<string name="download_folder_summary">İndirilen medya adı ile bir klasörde saklanır.</string> <string name="download_folder_summary">İndirilen medyanın saklandığı klasörün adı.</string>
<string name="movies_directory">Filmler dizini</string> <string name="movies_directory">Filmler klasörü</string>
<string name="shareTo">URL\'yi Paylaşın:</string> <string name="shareTo">URL\'yi şununla paylaş:</string>
<string name="download_folder">Dizin adı</string> <string name="download_folder">Ad</string>
<string name="downloads_directory">İndirilenler dizini</string> <string name="downloads_directory">İndirme klasörü</string>
<string name="sdcard">Hafıza kartı</string> <string name="sdcard">Hafıza kartı</string>
<string name="music_directory">Müzik dizini</string> <string name="music_directory">Müzik klasörü</string>
<string name="defaultIcon">Varsayılan</string> <string name="defaultIcon">Varsayılan</string>
<string name="gradientIcon">Gradyan</string> <string name="gradientIcon">Pergar eğilimi</string>
<string name="fireIcon">Yangın</string> <string name="fireIcon">Moda ateş</string>
<string name="torchIcon">El Feneri</string> <string name="torchIcon">Şık fener</string>
<string name="birdIcon">K</string> <string name="birdIcon">Güçlendirilmiş k</string>
<string name="legacyIcon">Eski</string> <string name="legacyIcon">Kayıp miras</string>
<string name="views">%1$s görüntüleme</string> <string name="views">%1$s görüntüleme</string>
<string name="shapedIcon">Şekilli</string> <string name="shapedIcon">Aptal şekilli</string>
<string name="flameIcon">Alev</string> <string name="flameIcon">Uçan alev</string>
<string name="instance_summary">Piped, giriş, abonelikler</string> <string name="instance_summary">Piped, giriş, abonelikler</string>
<string name="addInstance">Oluşum ekle</string> <string name="addInstance">Oluşum ekle</string>
<string name="clear_customInstances">Özel oluşumları temizle</string> <string name="clear_customInstances">Özel oluşumları temizle</string>
<string name="instance_api_url">Oluşumun API bağlantısı</string> <string name="instance_api_url">Erişim aracı API\'sinin URL\'si</string>
<string name="customInstance_summary">Özel bir oluşum ekleyin (riski size ait olmak üzere)</string> <string name="customInstance_summary">Özel bir oluşum ekleyin (riski size ait olmak üzere)</string>
<string name="empty_instance">Adı ve API bağlantısını doldurmanız gerekir.</string> <string name="empty_instance">Adı ve API URL\'sini girin.</string>
<string name="instance_name">Oluşumun adı</string> <string name="instance_name">Oluşumun adı</string>
<string name="invalid_url">Lütfen geçerli bir URL girin</string> <string name="invalid_url">Lütfen, çalışan bir URL girin</string>
<string name="version">Sürüm %1$s</string> <string name="version">Sürüm %1$s</string>
<string name="about_summary">LibreTube ekibini tanıyın ve tüm bunların nasıl gerçekleştiğini öğrenin.</string> <string name="about_summary">LibreTube ekibini tanıyın ve tüm bunların nasıl gerçekleştiğini öğrenin.</string>
<string name="show_chapters">Bölümleri göster</string> <string name="show_chapters">Bölümleri göster</string>
<string name="hide_chapters">Bölümleri gizle</string> <string name="hide_chapters">Bölümleri gizle</string>
<string name="category_filler">Alakasız/Şakalar</string>
<string name="category_filler_description">Videonun ana içeriğini anlamak için gerekli olmayan yalnızca dolgu veya mizah için eklenen teğet sahneler için.</string>
<string name="category_music_offtopic">Müzik: Müzik Dışı Bölüm</string>
<string name="category_music_offtopic_description">Sadece müzik videolarında kullanım içindir. Resmi mikslerin değil videonun bazı kısımlarını kapsamalıdır. Sonuç olarak, video Spotify\'a veya diğer karışık versiyonlara mümkün olduğunca yakın olmalı veya konuşmayı ve diğer dikkat dağıtıcı unsurları azaltmalıdır.</string>
<string name="category_preview">Önizleme/Özet</string>
<string name="category_preview_description">Bu veya serisindeki gelecekteki videolarda gelecek içeriği detaylandıran, ancak ek bilgi sağlamayan segmentler için. Yalnızca burada görünen klipleri içeriyorsa, bu büyük olasılıkla yanlış kategoridir.</string>
<string name="related_streams">İlgili içerik</string>
<string name="related_streams_summary">İzlediklerinizin yanında ilgili akışları gösterin.</string>
<string name="buffering_goal">Ön yükleme</string>
<string name="buffering_goal_summary">Maks. arabelleğe alınacak videonun saniye miktarı.</string>
<string name="playerVideoFormat">Oynatıcı için video formatı</string>
<string name="no_audio">Ses yok</string>
<string name="no_video">Video yok</string>
<string name="audio">Ses</string>
<string name="video">Video</string>
<string name="downloading">İndiriliyor</string>
</resources> </resources>

View File

@ -77,7 +77,7 @@
<string name="category_outro_description">Thông tin sau phần kết. Không phải cho kết luận với thông tin.</string> <string name="category_outro_description">Thông tin sau phần kết. Không phải cho kết luận với thông tin.</string>
<string name="license">Giấy phép</string> <string name="license">Giấy phép</string>
<string name="color_accent">Giọng điệu</string> <string name="color_accent">Giọng điệu</string>
<string name="color_blue">Màu xanh dương pixel</string> <string name="color_blue">Màu xanh dương hạnh phúc</string>
<string name="color_yellow">Màu vàng yeeting</string> <string name="color_yellow">Màu vàng yeeting</string>
<string name="color_green">Màu xanh lá vui vẻ</string> <string name="color_green">Màu xanh lá vui vẻ</string>
<string name="color_red">Màu đỏ resting</string> <string name="color_red">Màu đỏ resting</string>
@ -122,15 +122,15 @@
<string name="no_update_available">Bạn đang sử dụng phiên bản mới nhất của ứng dụng.</string> <string name="no_update_available">Bạn đang sử dụng phiên bản mới nhất của ứng dụng.</string>
<string name="download_folder_summary">Tên của thư mục phương tiện đã tải xuống được lưu trữ trong.</string> <string name="download_folder_summary">Tên của thư mục phương tiện đã tải xuống được lưu trữ trong.</string>
<string name="instance_summary">Piped, đăng nhập, kênh đăng kí</string> <string name="instance_summary">Piped, đăng nhập, kênh đăng kí</string>
<string name="invalid_url">Hãy nhập một cái url hợp lệ</string> <string name="invalid_url">Hãy nhập một URL mà hoạt đông được</string>
<string name="darkTheme">Giao diện tối</string> <string name="darkTheme">Tối</string>
<string name="oledTheme">Chủ đề màu tối dành cho màn hình OLED</string> <string name="oledTheme">Đen</string>
<string name="lightTheme">Giao diện sáng</string> <string name="lightTheme">Sáng</string>
<string name="category_filler_description">Điều này chỉ dành cho các cảnh tiếp theo được thêm vào để bổ sung hoặc hài hước không bắt buộc để hiểu nội dung chính của video.</string> <string name="category_filler_description">Dành cho các cảnh tiếp theo được thêm vào để bổ sung hoặc hài hước không bắt buộc để hiểu nội dung chính của video.</string>
<string name="category_music_offtopic">Âm nhạc: Phần không có nhạc</string> <string name="category_music_offtopic">Âm nhạc: Phần không có nhạc</string>
<string name="category_filler">Filler Tangent / Trò đùa</string> <string name="category_filler">Filler Tangent / Trò đùa</string>
<string name="category_preview">Xem trước/Tóm tắt</string> <string name="category_preview">Xem trước/Tóm tắt</string>
<string name="category_preview_description">Cho các phân đoạn mà thể hiện điều sắp diễn ra hay ở videos tới ở trong cùng một series, nhưng không có cung cấp thông tin thêm. Nếu nó bao gồm các clips mà chỉ xuất hiện ở đây thì có thể không phải là một phân loại thích hợp.</string> <string name="category_preview_description">Cho các phân đoạn mà thể hiện điều sắp diễn ra hay ở videos tới ở trong cùng series đó, nhưng không có cung cấp thông tin thêm. Nếu nó bao gồm các clips mà chỉ xuất hiện ở đây thì có thể không phải là một phân loại thích hợp.</string>
<string name="material_you">Mystic Material 3</string> <string name="material_you">Mystic Material 3</string>
<string name="app_icon">Biểu tượng app</string> <string name="app_icon">Biểu tượng app</string>
<string name="enabled">Kích hoạt</string> <string name="enabled">Kích hoạt</string>
@ -154,27 +154,27 @@
<string name="category_segments">Phân đoạn</string> <string name="category_segments">Phân đoạn</string>
<string name="category_sponsor_description">Quảng cáo có trả tiền, giới thiệu có trả tiền và quảng cáo trực tiếp. Không phải để tự quảng cáo hoặc gửi lời cảm ơn miễn phí tới các hoạt động chính nghĩa / người sáng tạo / trang web / sản phẩm mà họ thích.</string> <string name="category_sponsor_description">Quảng cáo có trả tiền, giới thiệu có trả tiền và quảng cáo trực tiếp. Không phải để tự quảng cáo hoặc gửi lời cảm ơn miễn phí tới các hoạt động chính nghĩa / người sáng tạo / trang web / sản phẩm mà họ thích.</string>
<string name="category_intro_description">Khoảng thời gian không có chứa nội dung của video. Có thể là tạm dừng, khung tĩnh, hoạt ảnh lặp lại. Không nên được sử dụng cho các phân cảnh chuyển có chứa thông tin.</string> <string name="category_intro_description">Khoảng thời gian không có chứa nội dung của video. Có thể là tạm dừng, khung tĩnh, hoạt ảnh lặp lại. Không nên được sử dụng cho các phân cảnh chuyển có chứa thông tin.</string>
<string name="category_music_offtopic_description">Phân loại này chỉ sử dụng cho các video ca nhạc. Nó phải bao gồm các phần của video không phải là một phần của bản phối chính thức. Chung quy lại, video phải giống với Spotify hoặc bất kỳ phiên bản phối nào khác càng giống càng tốt, hoặc phải giảm nói chuyện hoặc các yếu tố gây xao nhãng khác.</string> <string name="category_music_offtopic_description">Chỉ sử dụng cho các video ca nhạc. Nó phải bao gồm các phần của video không phải là một phần của bản phối chính thức. Chung quy lại, video phải giống với Spotify hoặc bất kỳ phiên bản phối nào khác càng giống càng tốt, hoặc giảm nói chuyện hoặc các yếu tố gây xao nhãng khác.</string>
<string name="website_summary">Truy cập trang web để biết thêm thông tin về ứng dụng và các tính năng của nó.</string> <string name="website_summary">Truy cập trang web để biết thêm thông tin về ứng dụng và các tính năng của nó.</string>
<string name="download_directory_summary">Nơi mà những file phương tiện đã được tải xuống được lưu trữ.</string> <string name="download_directory_summary">Nơi mà những file phương tiện đã được tải xuống được lưu trữ.</string>
<string name="download_directory">Tải xuống tới</string> <string name="download_directory">Tải xuống tới</string>
<string name="contributing_summary">Cung cấp ý tưởng, bản dịch, những thay đổi thiết kế, làm sạch và viết mã. Càng làm nhiều thì càng tốt!</string> <string name="contributing_summary">Cung cấp ý tưởng, bản dịch, những thay đổi thiết kế, làm sạch và viết mã. Càng làm nhiều thì càng tốt!</string>
<string name="license_summary">GPLv3 + là một giấy phép viết tắt được copyleft. Sử dụng, nghiên cứu, thay đổi và chia sẻ; với tất cả.</string> <string name="license_summary">GPLv3 + là một giấy phép viết tắt được copyleft. Sử dụng, nghiên cứu, thay đổi và chia sẻ; với tất cả.</string>
<string name="donate_summary">Hãy cho đi những gì xứng đáng với bạn, nếu bạn có thể. Team LibreTube nhỏ hơn khoản đóng góp hoặc trợ giúp của bạn.</string> <string name="donate_summary">Hãy cho đi những gì xứng đáng với bạn, nếu bạn có thể. Team LibreTube nhỏ hơn khoản đóng góp hoặc trợ giúp của bạn.</string>
<string name="authors_summary">Tìm hiểu về nhóm LibreTube và tất cả những người đóng góp giúp cải thiện ứng dụng.</string> <string name="authors_summary">Tìm hiểu về mọi người tham gia vào dự án này.</string>
<string name="sdcard">Thẻ SD</string> <string name="sdcard">Thẻ SD</string>
<string name="buffering_goal">Mục tiêu buffering</string> <string name="buffering_goal">Tải trước</string>
<string name="hide_chapters">Ẩn chương</string> <string name="hide_chapters">Ẩn chương</string>
<string name="shareTo">Chia sẻ URL tới</string> <string name="shareTo">Chia sẻ URL tới</string>
<string name="legacyIcon"></string> <string name="legacyIcon"></string>
<string name="gradientIcon">Kiểu gradient</string> <string name="gradientIcon">Kiểu gradient</string>
<string name="flameIcon">Ngọn lửa bay</string> <string name="flameIcon">Ngọn lửa bay</string>
<string name="instance_api_url">API URL của server</string> <string name="instance_api_url">URL thành API của server</string>
<string name="downloads_directory">Thư mục lưu trữ</string> <string name="downloads_directory">Thư mục lưu trữ</string>
<string name="clear_customInstances">Xóa server tùy chỉnh</string> <string name="clear_customInstances">Xóa server tùy chỉnh</string>
<string name="fireIcon">Ngọn lửa thời trang</string> <string name="fireIcon">Ngọn lửa thời trang</string>
<string name="empty_instance">Bạn phải điền tên và API URL của server vào.</string> <string name="empty_instance">Điền tên và API URL của server vào.</string>
<string name="related_streams_summary">Hiển thị các luồng liên quan đến video.</string> <string name="related_streams_summary">Hiển thị các luồng bên cạnh những gì mà bạn xem.</string>
<string name="show_chapters">Hiện thị chương</string> <string name="show_chapters">Hiện thị chương</string>
<string name="torchIcon">Ngọn đuốc thời thượng</string> <string name="torchIcon">Ngọn đuốc thời thượng</string>
<string name="shapedIcon">Hình dạng ngớ ngẩn</string> <string name="shapedIcon">Hình dạng ngớ ngẩn</string>
@ -182,6 +182,6 @@
<string name="birdIcon">Chim</string> <string name="birdIcon">Chim</string>
<string name="instance_name">Tên server</string> <string name="instance_name">Tên server</string>
<string name="about_summary">Tìm hiểu về nhóm LibreTube và cách mà tất cả diễn ra.</string> <string name="about_summary">Tìm hiểu về nhóm LibreTube và cách mà tất cả diễn ra.</string>
<string name="related_streams">Các luồng liên quan</string> <string name="related_streams">Các nội dung liên quan</string>
<string name="playerVideoFormat">Định dạng trình phát video</string> <string name="playerVideoFormat">Định dạng video cho trình phát</string>
</resources> </resources>

View File

@ -92,7 +92,7 @@
<string name="all">所有</string> <string name="all">所有</string>
<string name="playlists">播放列表</string> <string name="playlists">播放列表</string>
<string name="segment_skipped">跳过的片段</string> <string name="segment_skipped">跳过的片段</string>
<string name="category_sponsor_description">有偿推广、有偿推荐和直接广告。不是自我宣传或无偿发自内心的赞美创造者、网站和产品。</string> <string name="category_sponsor_description">有偿推广、有偿推荐和直接广告。不是自我宣传或无偿发自内心的赞美动机、创造者、网站和产品。</string>
<string name="category_selfpromo">无偿/自我推广</string> <string name="category_selfpromo">无偿/自我推广</string>
<string name="category_selfpromo_description">除了无偿或自我宣传,与 \"赞助商 \"类似。这包括有关商品、捐赠或与谁合作的信息。</string> <string name="category_selfpromo_description">除了无偿或自我宣传,与 \"赞助商 \"类似。这包括有关商品、捐赠或与谁合作的信息。</string>
<string name="sponsorblock">SponsorBlock</string> <string name="sponsorblock">SponsorBlock</string>

View File

@ -635,6 +635,7 @@
<item>1.25x</item> <item>1.25x</item>
<item>1.5x</item> <item>1.5x</item>
<item>2x</item> <item>2x</item>
<item>4x</item>
</string-array> </string-array>
<string-array name="playbackSpeedValues"> <string-array name="playbackSpeedValues">
<item>0.25F</item> <item>0.25F</item>
@ -644,6 +645,7 @@
<item>1.25F</item> <item>1.25F</item>
<item>1.5F</item> <item>1.5F</item>
<item>2F</item> <item>2F</item>
<item>4F</item>
</string-array> </string-array>
<string-array name="downloadLocation"> <string-array name="downloadLocation">
@ -660,6 +662,13 @@
</string-array> </string-array>
<string-array name="bufferingGoal"> <string-array name="bufferingGoal">
<item>50s</item>
<item>100s</item>
<item>200s</item>
<item>300s</item>
<item>450s</item>
</string-array>
<string-array name="bufferingGoalValues">
<item>50</item> <item>50</item>
<item>100</item> <item>100</item>
<item>200</item> <item>200</item>
@ -672,4 +681,17 @@
<item>MPEG_4</item> <item>MPEG_4</item>
</string-array> </string-array>
<string-array name="seekIncrement">
<item>5s</item>
<item>10s</item>
<item>20s</item>
<item>30s</item>
</string-array>
<string-array name="seekIncrementValues">
<item>5</item>
<item>10</item>
<item>20</item>
<item>30</item>
</string-array>
</resources> </resources>

View File

@ -143,13 +143,13 @@
<string name="no_update_available">You are running the latest version.</string> <string name="no_update_available">You are running the latest version.</string>
<string name="playback_speed">Default playback speed</string> <string name="playback_speed">Default playback speed</string>
<string name="advanced">Advanced</string> <string name="advanced">Advanced</string>
<string name="player">Player</string> <string name="player">Audio and video</string>
<string name="appearance_summary">Adjust the app to your liking.</string> <string name="appearance_summary">Adjust the app to your liking.</string>
<string name="advanced_summary">Player, downloads, history</string> <string name="advanced_summary">Downloads, history</string>
<string name="live">Live</string> <string name="live">Live</string>
<string name="no_replies">This comment has no replies.</string> <string name="no_replies">This comment has no replies.</string>
<string name="authors">Authors</string> <string name="authors">Authors</string>
<string name="authors_summary">Get to know everyone.</string> <string name="authors_summary">Get to know everyone who is involved in developing and improving the app.</string>
<string name="download_folder">Name</string> <string name="download_folder">Name</string>
<string name="download_folder_summary">The name of the folder downloaded media is stored in.</string> <string name="download_folder_summary">The name of the folder downloaded media is stored in.</string>
<string name="internal_storage">Internal storage</string> <string name="internal_storage">Internal storage</string>
@ -184,5 +184,21 @@
<string name="buffering_goal">Preloading</string> <string name="buffering_goal">Preloading</string>
<string name="buffering_goal_summary">Max. amount of seconds of video to buffer.</string> <string name="buffering_goal_summary">Max. amount of seconds of video to buffer.</string>
<string name="playerVideoFormat">Video format for player</string> <string name="playerVideoFormat">Video format for player</string>
<string name="no_audio">No audio</string>
<string name="no_video">No video</string>
<string name="audio">Audio</string>
<string name="video">Video</string>
<string name="downloading">Downloading</string>
<string name="player_autoplay">Autoplay</string> <string name="player_autoplay">Autoplay</string>
<string name="hideTrendingPage">Hide trending page</string>
<string name="instance_frontend_url">URL to instance frontend</string>
<string name="quality">Quality</string>
<string name="behavior">Behavior</string>
<string name="player_summary">Quality and player behavior</string>
<string name="seek_increment">Seek increment</string>
<string name="piped_summary">Piped is an open-source alternative web-frontend for YouTube provides the API we use. Without Piped, LibreTube wouldn\'t exist. Huge thanks to their devs!</string>
<string name="pauseOnScreenOff">Autopause</string>
<string name="pauseOnScreenOff_summary">Pause the player when the screen is turned off.</string>
<string name="autoplay_summary">Automatically play the next video when the current is finished.</string>
<string name="clonePlaylist">Clone playlist</string>
</resources> </resources>

View File

@ -23,4 +23,52 @@
</style> </style>
<style name="AboutItem">
<item name="android:orientation">vertical</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:paddingLeft">20dp</item>
<item name="android:paddingRight">20dp</item>
<item name="android:paddingTop">15dp</item>
<item name="android:paddingBottom">15dp</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
<style name="HorizontalLine">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">0.8dp</item>
<item name="android:background">@android:color/darker_gray</item>
</style>
<style name="CustomDialogButton">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">right</item>
<item name="android:layout_marginRight">16dp</item>
<item name="android:layout_marginBottom">8dp</item>
<item name="android:padding">8dp</item>
<item name="android:textSize">14sp</item>
<item name="android:backgroundTint">@android:color/transparent</item>
<item name="android:textColor">?attr/colorPrimary</item>
</style>
<style name="CustomDialogTextInputLayout" parent="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="hintEnabled">false</item>
<item name="android:layout_marginLeft">10dp</item>
<item name="android:layout_marginRight">10dp</item>
<item name="android:layout_marginTop">16dp</item>
<item name="android:layout_marginBottom">4dp</item>
<item name="boxCornerRadiusBottomStart">15dp</item>
<item name="boxCornerRadiusBottomEnd">15dp</item>
<item name="boxCornerRadiusTopEnd">15dp</item>
<item name="boxCornerRadiusTopStart">15dp</item>
</style>
</resources> </resources>

View File

@ -2,53 +2,6 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" <PreferenceScreen 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">
<PreferenceCategory app:title="@string/player">
<ListPreference
android:icon="@drawable/ic_hd"
app:defaultValue=""
app:entries="@array/defres"
app:entryValues="@array/defresValue"
app:key="default_res"
app:title="@string/defres"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:icon="@drawable/ic_hd"
app:defaultValue="WEBM"
app:entries="@array/playerVideoFormats"
app:entryValues="@array/playerVideoFormats"
app:key="player_video_format"
app:title="@string/playerVideoFormat"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:icon="@drawable/ic_play"
app:defaultValue="1F"
app:entries="@array/playbackSpeed"
app:entryValues="@array/playbackSpeedValues"
app:key="playback_speed"
app:title="@string/playback_speed"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:icon="@drawable/ic_timelapse"
app:defaultValue="50"
app:entries="@array/bufferingGoal"
app:entryValues="@array/bufferingGoal"
app:key="buffering_goal"
app:summary="@string/buffering_goal_summary"
app:title="@string/buffering_goal" />
<SwitchPreferenceCompat
android:icon="@drawable/ic_play"
app:key="autoplay"
app:title="@string/player_autoplay"
android:summaryOff="@string/disabled"
android:summaryOn="@string/enabled" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/downloads"> <PreferenceCategory app:title="@string/downloads">
<ListPreference <ListPreference
@ -64,7 +17,7 @@
android:defaultValue="downloads" android:defaultValue="downloads"
android:entries="@array/downloadLocation" android:entries="@array/downloadLocation"
android:entryValues="@array/downloadLocationValues" android:entryValues="@array/downloadLocationValues"
app:icon="@drawable/ic_download" app:icon="@drawable/ic_download_filled"
app:key="download_location" app:key="download_location"
app:summary="@string/download_directory_summary" app:summary="@string/download_directory_summary"
app:title="@string/download_directory" /> app:title="@string/download_directory" />
@ -82,7 +35,7 @@
<SwitchPreference <SwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:icon="@drawable/ic_history" android:icon="@drawable/ic_history_filled"
app:key="search_history_toggle" app:key="search_history_toggle"
app:title="@string/search_history" /> app:title="@string/search_history" />

View File

@ -15,7 +15,7 @@
<ListPreference <ListPreference
android:icon="@drawable/ic_color" android:icon="@drawable/ic_color"
app:defaultValue="red" app:defaultValue="purple"
app:entries="@array/accents" app:entries="@array/accents"
app:entryValues="@array/accentsValue" app:entryValues="@array/accentsValue"
app:key="accent_color" app:key="accent_color"
@ -44,6 +44,13 @@
app:title="@string/defaultTab" app:title="@string/defaultTab"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true" />
<SwitchPreference
android:icon="@drawable/ic_trending"
app:defaultValue="false"
app:key="hide_trending_page"
app:title="@string/hideTrendingPage"
app:useSimpleSummaryProvider="true" />
<ListPreference <ListPreference
android:icon="@drawable/ic_grid" android:icon="@drawable/ic_grid"
app:defaultValue="@integer/grid_items" app:defaultValue="@integer/grid_items"

View File

@ -24,7 +24,7 @@
android:icon="@drawable/ic_trash" /> android:icon="@drawable/ic_trash" />
<Preference <Preference
android:icon="@drawable/ic_login" android:icon="@drawable/ic_login_filled"
android:summary="@string/notgmail" android:summary="@string/notgmail"
app:key="login_register" app:key="login_register"
app:title="@string/login_register" /> app:title="@string/login_register" />

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory app:title="@string/quality">
<ListPreference
android:icon="@drawable/ic_hd"
app:defaultValue=""
app:entries="@array/defres"
app:entryValues="@array/defresValue"
app:key="default_res"
app:title="@string/defres"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:icon="@drawable/ic_video"
app:defaultValue="WEBM"
app:entries="@array/playerVideoFormats"
app:entryValues="@array/playerVideoFormats"
app:key="player_video_format"
app:title="@string/playerVideoFormat"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/behavior">
<ListPreference
android:icon="@drawable/ic_speed"
app:defaultValue="1F"
app:entries="@array/playbackSpeed"
app:entryValues="@array/playbackSpeedValues"
app:key="playback_speed"
app:title="@string/playback_speed"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:icon="@drawable/ic_skip"
app:defaultValue="5"
app:entries="@array/seekIncrement"
app:entryValues="@array/seekIncrementValues"
app:key="seek_increment"
app:title="@string/seek_increment"
app:useSimpleSummaryProvider="true" />
<ListPreference
android:icon="@drawable/ic_time"
app:defaultValue="50"
app:entries="@array/bufferingGoal"
app:entryValues="@array/bufferingGoalValues"
app:key="buffering_goal"
app:summary="@string/buffering_goal_summary"
app:title="@string/buffering_goal" />
<SwitchPreferenceCompat
android:icon="@drawable/ic_play_filled"
app:key="autoplay"
app:title="@string/player_autoplay"
android:summary="@string/autoplay_summary" />
<SwitchPreferenceCompat
android:icon="@drawable/ic_pause_filled"
app:key="pause_screen_off"
app:title="@string/pauseOnScreenOff"
android:summary="@string/pauseOnScreenOff_summary" />
</PreferenceCategory>
</PreferenceScreen>

View File

@ -44,6 +44,12 @@
app:summary="@string/sponsorblock_summary" app:summary="@string/sponsorblock_summary"
app:title="@string/sponsorblock" /> app:title="@string/sponsorblock" />
<Preference
android:icon="@drawable/ic_video"
app:key="player"
app:summary="@string/player_summary"
app:title="@string/player" />
<Preference <Preference
android:icon="@drawable/ic_list" android:icon="@drawable/ic_list"
app:key="advanced" app:key="advanced"
@ -54,18 +60,18 @@
<PreferenceCategory> <PreferenceCategory>
<Preference
android:icon="@drawable/ic_info"
app:key="about"
app:summary="@string/about_summary"
app:title="@string/about" />
<Preference <Preference
android:icon="@drawable/ic_update" android:icon="@drawable/ic_update"
app:key="update" app:key="update"
app:summary="@string/update_summary" app:summary="@string/update_summary"
app:title="App version" /> app:title="App version" />
<Preference
android:icon="@drawable/ic_info"
app:key="about"
app:summary="@string/about_summary"
app:title="@string/about" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View File

@ -6,20 +6,23 @@
app:key="sb_enabled_key" app:key="sb_enabled_key"
app:title="@string/sponsorblock" app:title="@string/sponsorblock"
android:summaryOff="@string/disabled" android:summaryOff="@string/disabled"
android:summaryOn="@string/enabled" /> android:summaryOn="@string/enabled"
app:defaultValue="true" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
app:key="sb_notifications_key" app:key="sb_notifications_key"
app:title="@string/sponsorblock_notifications" app:title="@string/sponsorblock_notifications"
android:summaryOff="@string/disabled" android:summaryOff="@string/disabled"
android:summaryOn="@string/enabled" /> android:summaryOn="@string/enabled"
app:defaultValue="true" />
<PreferenceCategory app:title="@string/category_segments"> <PreferenceCategory app:title="@string/category_segments">
<SwitchPreferenceCompat <SwitchPreferenceCompat
app:key="sponsors_category_key" app:key="sponsors_category_key"
app:title="@string/category_sponsor" app:title="@string/category_sponsor"
app:summary="@string/category_sponsor_description" /> app:summary="@string/category_sponsor_description"
app:defaultValue="true" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
app:key="selfpromo_category_key" app:key="selfpromo_category_key"