1
0
mirror of https://github.com/TeamNewPipe/NewPipe.git synced 2024-11-22 02:53:09 +01:00

Merge pull request #6840 from TeamNewPipe/release_0.21.9

Release 0.21.9
This commit is contained in:
Tobi 2021-08-22 22:21:36 +02:00 committed by GitHub
commit 94b4c76749
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
160 changed files with 3679 additions and 1525 deletions

View File

@ -39,6 +39,10 @@ You'll see *exactly* what is sent, be able to add **your comments**, and then se
* Create PRs that cover only **one specific issue/solution/bug**. Do not create PRs that are huge monoliths and could have been split into multiple independent contributions.
* NewPipe uses [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor) to fetch data from services. If you need to change something there, you must test your changes in NewPipe. Telling NewPipe to use your extractor version can be accomplished by editing the `app/build.gradle` file: the comments under the "NewPipe libraries" section of `dependencies` will help you out.
### Kotlin in NewPipe
* NewPipe will remain mostly Java for time being
* Contributions containing a simple conversion from Java to Kotlin should be avoided. Conversions to Kotlin should only be done if Kotlin actually brings improvements like bug fixes or better performance which are not, or only with much more effort, implementable in Java. The core team sees Java as an easier to learn and generally well adopted programming language.
### Creating a Pull Request (PR)
* Make changes on a **separate branch** with a meaningful name, not on the _master_ branch or the _dev_ branch. This is commonly known as *feature branch workflow*. You may then send your changes as a pull request (PR) on GitHub.

View File

@ -5,10 +5,20 @@ on:
branches:
- dev
- master
paths-ignore:
- 'README*.md'
- 'fastlane/**'
- 'assets/**'
- '.github/**/*.md'
push:
branches:
- dev
- master
paths-ignore:
- 'README*.md'
- 'fastlane/**'
- 'assets/**'
- '.github/**/*.md'
jobs:
build-and-test-jvm:
@ -34,6 +44,9 @@ jobs:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Check if kotlin files are formatted correctly
run: ./gradlew runKtlint
- name: Build debug APK and run jvm tests
run: ./gradlew assembleDebug lintDebug testDebugUnitTest --stacktrace
@ -44,35 +57,36 @@ jobs:
name: app
path: app/build/outputs/apk/debug/*.apk
# Disabled until emulator works again. see https://github.com/TeamNewPipe/NewPipe/pull/6560
# test-android:
# macos has hardware acceleration. See android-emulator-runner action
# runs-on: macos-latest
# strategy:
# matrix:
# api-level 19 is min sdk, but throws errors related to desugaring
# api-level: [21, 29]
# steps:
# - uses: actions/checkout@v2
#
# - name: set up JDK 8
# uses: actions/setup-java@v2
# with:
# java-version: 8
# distribution: "adopt"
#
# - name: Cache Gradle dependencies
# uses: actions/cache@v2
# with:
# path: ~/.gradle/caches
# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
# restore-keys: ${{ runner.os }}-gradle
#
# - name: Run android tests
# uses: reactivecircus/android-emulator-runner@v2
# with:
# api-level: ${{ matrix.api-level }}
# script: ./gradlew connectedCheck
test-android:
# macos has hardware acceleration. See android-emulator-runner action
runs-on: macos-latest
strategy:
matrix:
# api-level 19 is min sdk, but throws errors related to desugaring
api-level: [ 21, 29 ]
steps:
- uses: actions/checkout@v2
- name: set up JDK 8
uses: actions/setup-java@v2
with:
java-version: 8
distribution: "adopt"
- name: Cache Gradle dependencies
uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Run android tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api-level }}
# workaround to emulator bug: https://github.com/ReactiveCircus/android-emulator-runner/issues/160
emulator-build: 7425822
script: ./gradlew connectedCheck
# sonar:
# runs-on: ubuntu-latest

View File

@ -9,16 +9,16 @@ apply plugin: 'kotlin-kapt'
apply plugin: 'checkstyle'
android {
compileSdkVersion 29
buildToolsVersion '29.0.3'
compileSdkVersion 30
buildToolsVersion '30.0.3'
defaultConfig {
applicationId "org.schabi.newpipe"
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 29
versionCode 974
versionName "0.21.8"
versionCode 975
versionName "0.21.9"
multiDexEnabled true
@ -101,17 +101,17 @@ android {
ext {
checkstyleVersion = '8.38'
androidxLifecycleVersion = '2.2.0'
androidxLifecycleVersion = '2.3.1'
androidxRoomVersion = '2.3.0'
icepickVersion = '3.2.0'
exoPlayerVersion = '2.12.3'
googleAutoServiceVersion = '1.0-rc7'
googleAutoServiceVersion = '1.0'
groupieVersion = '2.8.1'
markwonVersion = '4.6.0'
markwonVersion = '4.6.2'
leakCanaryVersion = '2.5'
stethoVersion = '1.5.1'
stethoVersion = '1.6.0'
mockitoVersion = '3.6.0'
}
@ -121,7 +121,7 @@ configurations {
}
checkstyle {
configDir rootProject.file(".")
getConfigDirectory().set(rootProject.file("."))
ignoreFailures false
showViolations true
toolVersion = checkstyleVersion
@ -140,8 +140,8 @@ task runCheckstyle(type: Checkstyle) {
showViolations true
reports {
xml.enabled true
html.enabled true
xml.getRequired().set(true)
html.getRequired().set(true)
}
}
@ -151,7 +151,7 @@ def inputFiles = project.fileTree(dir: "src", include: "**/*.kt")
task runKtlint(type: JavaExec) {
inputs.files(inputFiles)
outputs.dir(outputDir)
main = "com.pinterest.ktlint.Main"
getMainClass().set("com.pinterest.ktlint.Main")
classpath = configurations.ktlint
args "src/**/*.kt"
}
@ -159,7 +159,7 @@ task runKtlint(type: JavaExec) {
task formatKtlint(type: JavaExec) {
inputs.files(inputFiles)
outputs.dir(outputDir)
main = "com.pinterest.ktlint.Main"
getMainClass().set("com.pinterest.ktlint.Main")
classpath = configurations.ktlint
args "-F", "src/**/*.kt"
}
@ -186,7 +186,7 @@ dependencies {
// name and the commit hash with the commit hash of the (pushed) commit you want to test
// This works thanks to JitPack: https://jitpack.io/
implementation 'com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751'
implementation 'com.github.TeamNewPipe:NewPipeExtractor:v0.21.8'
implementation 'com.github.TeamNewPipe:NewPipeExtractor:v0.21.9'
/** Checkstyle **/
checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}"
@ -196,16 +196,16 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}"
/** AndroidX **/
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.fragment:fragment-ktx:1.3.5'
implementation 'androidx.fragment:fragment-ktx:1.3.6'
implementation "androidx.lifecycle:lifecycle-livedata:${androidxLifecycleVersion}"
implementation "androidx.lifecycle:lifecycle-viewmodel:${androidxLifecycleVersion}"
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'androidx.media:media:1.2.1'
implementation 'androidx.media:media:1.3.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
@ -237,8 +237,8 @@ dependencies {
kapt "com.google.auto.service:auto-service:${googleAutoServiceVersion}"
// Manager for complex RecyclerView layouts
implementation "com.xwray:groupie:${groupieVersion}"
implementation "com.xwray:groupie-viewbinding:${groupieVersion}"
implementation "com.github.lisawray.groupie:groupie:${groupieVersion}"
implementation "com.github.lisawray.groupie:groupie-viewbinding:${groupieVersion}"
// Circular ImageView
implementation "de.hdodenhof:circleimageview:3.1.0"

View File

@ -0,0 +1,85 @@
package org.schabi.newpipe.local.playlist
import androidx.room.Room
import androidx.test.core.app.ApplicationProvider
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.Timeout
import org.schabi.newpipe.database.AppDatabase
import org.schabi.newpipe.database.stream.model.StreamEntity
import org.schabi.newpipe.extractor.stream.StreamType
import org.schabi.newpipe.testUtil.TrampolineSchedulerRule
import java.util.concurrent.TimeUnit
class LocalPlaylistManagerTest {
private lateinit var manager: LocalPlaylistManager
private lateinit var database: AppDatabase
@get:Rule
val trampolineScheduler = TrampolineSchedulerRule()
@get:Rule
val timeout = Timeout(10, TimeUnit.SECONDS)
@Before
fun setup() {
database = Room.inMemoryDatabaseBuilder(
ApplicationProvider.getApplicationContext(),
AppDatabase::class.java
)
.allowMainThreadQueries()
.build()
manager = LocalPlaylistManager(database)
}
@After
fun cleanUp() {
database.close()
}
@Test
fun createPlaylist() {
val stream = StreamEntity(
serviceId = 1, url = "https://newpipe.net/", title = "title",
streamType = StreamType.VIDEO_STREAM, duration = 1, uploader = "uploader"
)
val result = manager.createPlaylist("name", listOf(stream))
// This should not behave like this.
// Currently list of all stream ids is returned instead of playlist id
result.test().await().assertValue(listOf(1L))
}
@Test
fun createPlaylist_emptyPlaylistMustReturnEmpty() {
val result = manager.createPlaylist("name", emptyList())
// This should not behave like this.
// It should throw an error because currently the result is null
result.test().await().assertComplete()
manager.playlists.test().awaitCount(1).assertValue(emptyList())
}
@Test()
fun createPlaylist_nonExistentStreamsAreUpserted() {
val stream = StreamEntity(
serviceId = 1, url = "https://newpipe.net/", title = "title",
streamType = StreamType.VIDEO_STREAM, duration = 1, uploader = "uploader"
)
database.streamDAO().insert(stream)
val upserted = StreamEntity(
serviceId = 1, url = "https://newpipe.net/2", title = "title2",
streamType = StreamType.VIDEO_STREAM, duration = 1, uploader = "uploader"
)
val result = manager.createPlaylist("name", listOf(stream, upserted))
result.test().await().assertComplete()
database.streamDAO().all.test().awaitCount(1).assertValue(listOf(stream, upserted))
}
}

View File

@ -0,0 +1,37 @@
package org.schabi.newpipe.testUtil
import io.reactivex.rxjava3.android.plugins.RxAndroidPlugins
import io.reactivex.rxjava3.plugins.RxJavaPlugins
import io.reactivex.rxjava3.schedulers.Schedulers
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
/**
* Always run on [Schedulers.trampoline].
* This executes the task in the current thread in FIFO manner.
* This ensures that tasks are run quickly inside the tests
* and not scheduled away to another thread for later execution
*/
class TrampolineSchedulerRule : TestRule {
private val scheduler = Schedulers.trampoline()
override fun apply(base: Statement, description: Description): Statement =
object : Statement() {
override fun evaluate() {
try {
RxJavaPlugins.setComputationSchedulerHandler { scheduler }
RxJavaPlugins.setIoSchedulerHandler { scheduler }
RxJavaPlugins.setNewThreadSchedulerHandler { scheduler }
RxJavaPlugins.setSingleSchedulerHandler { scheduler }
RxAndroidPlugins.setInitMainThreadSchedulerHandler { scheduler }
base.evaluate()
} finally {
RxJavaPlugins.reset()
RxAndroidPlugins.reset()
}
}
}
}

View File

@ -1,14 +1,13 @@
package org.schabi.newpipe;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationChannelCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.multidex.MultiDexApplication;
import androidx.preference.PreferenceManager;
@ -233,38 +232,31 @@ public class App extends MultiDexApplication {
}
private void initNotificationChannels() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
return;
}
// Keep the importance below DEFAULT to avoid making noise on every notification update for
// the main and update channels
final NotificationChannelCompat mainChannel = new NotificationChannelCompat
.Builder(getString(R.string.notification_channel_id),
NotificationManagerCompat.IMPORTANCE_LOW)
.setName(getString(R.string.notification_channel_name))
.setDescription(getString(R.string.notification_channel_description))
.build();
String id = getString(R.string.notification_channel_id);
String name = getString(R.string.notification_channel_name);
String description = getString(R.string.notification_channel_description);
final NotificationChannelCompat appUpdateChannel = new NotificationChannelCompat
.Builder(getString(R.string.app_update_notification_channel_id),
NotificationManagerCompat.IMPORTANCE_LOW)
.setName(getString(R.string.app_update_notification_channel_name))
.setDescription(getString(R.string.app_update_notification_channel_description))
.build();
// Keep this below DEFAULT to avoid making noise on every notification update for the main
// and update channels
int importance = NotificationManager.IMPORTANCE_LOW;
final NotificationChannelCompat hashChannel = new NotificationChannelCompat
.Builder(getString(R.string.hash_channel_id),
NotificationManagerCompat.IMPORTANCE_HIGH)
.setName(getString(R.string.hash_channel_name))
.setDescription(getString(R.string.hash_channel_description))
.build();
final NotificationChannel mainChannel = new NotificationChannel(id, name, importance);
mainChannel.setDescription(description);
id = getString(R.string.app_update_notification_channel_id);
name = getString(R.string.app_update_notification_channel_name);
description = getString(R.string.app_update_notification_channel_description);
final NotificationChannel appUpdateChannel = new NotificationChannel(id, name, importance);
appUpdateChannel.setDescription(description);
id = getString(R.string.hash_channel_id);
name = getString(R.string.hash_channel_name);
description = getString(R.string.hash_channel_description);
importance = NotificationManager.IMPORTANCE_HIGH;
final NotificationChannel hashChannel = new NotificationChannel(id, name, importance);
hashChannel.setDescription(description);
final NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannels(Arrays.asList(mainChannel,
final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.createNotificationChannelsCompat(Arrays.asList(mainChannel,
appUpdateChannel, hashChannel));
}

View File

@ -402,7 +402,7 @@ public class MainActivity extends AppCompatActivity {
new Handler(Looper.getMainLooper()).postDelayed(() -> {
getSupportFragmentManager().popBackStack(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
recreate();
ActivityCompat.recreate(MainActivity.this);
}, 300);
}
@ -823,7 +823,7 @@ public class MainActivity extends AppCompatActivity {
return;
}
if (PlayerHolder.isPlayerOpen()) {
if (PlayerHolder.getInstance().isPlayerOpen()) {
// if the player is already open, no need for a broadcast receiver
openMiniPlayerIfMissing();
} else {

View File

@ -453,7 +453,7 @@ public class RouterActivity extends AppCompatActivity {
returnList.add(showInfo);
returnList.add(videoPlayer);
} else {
final MainPlayer.PlayerType playerType = PlayerHolder.getType();
final MainPlayer.PlayerType playerType = PlayerHolder.getInstance().getType();
if (capabilities.contains(VIDEO)
&& PlayerHelper.isAutoplayAllowedByUser(context)
&& playerType == null || playerType == MainPlayer.PlayerType.VIDEO) {

View File

@ -11,8 +11,6 @@ import org.schabi.newpipe.R
import org.schabi.newpipe.about.LicenseFragmentHelper.showLicense
import org.schabi.newpipe.databinding.FragmentLicensesBinding
import org.schabi.newpipe.databinding.ItemSoftwareComponentBinding
import java.util.Arrays
import java.util.Objects
/**
* Fragment containing the software licenses.
@ -24,16 +22,10 @@ class LicenseFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
softwareComponents =
arguments?.getParcelableArray(ARG_COMPONENTS) as Array<SoftwareComponent>
if (savedInstanceState != null) {
val license = savedInstanceState.getSerializable(LICENSE_KEY)
if (license != null) {
activeLicense = license as License?
}
}
softwareComponents = arguments?.getParcelableArray(ARG_COMPONENTS) as Array<SoftwareComponent>
activeLicense = savedInstanceState?.getSerializable(LICENSE_KEY) as? License
// Sort components by name
Arrays.sort(softwareComponents, Comparator.comparing(SoftwareComponent::name))
softwareComponents.sortBy { it.name }
}
override fun onDestroy() {
@ -74,19 +66,13 @@ class LicenseFragment : Fragment() {
binding.licensesSoftwareComponents.addView(root)
registerForContextMenu(root)
}
if (activeLicense != null) {
compositeDisposable.add(
showLicense(activity, activeLicense!!)
)
}
activeLicense?.let { compositeDisposable.add(showLicense(activity, it)) }
return binding.root
}
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
if (activeLicense != null) {
savedInstanceState.putSerializable(LICENSE_KEY, activeLicense)
}
activeLicense?.let { savedInstanceState.putSerializable(LICENSE_KEY, it) }
}
companion object {
@ -94,8 +80,7 @@ class LicenseFragment : Fragment() {
private const val LICENSE_KEY = "ACTIVE_LICENSE"
fun newInstance(softwareComponents: Array<SoftwareComponent>): LicenseFragment {
val fragment = LicenseFragment()
fragment.arguments =
bundleOf(ARG_COMPONENTS to Objects.requireNonNull(softwareComponents))
fragment.arguments = bundleOf(ARG_COMPONENTS to softwareComponents)
return fragment
}
}

View File

@ -162,6 +162,9 @@ public class ReCaptchaActivity extends AppCompatActivity {
setResult(RESULT_OK);
}
// Navigate to blank page (unloads youtube to prevent background playback)
recaptchaBinding.reCaptchaWebView.loadUrl("about:blank");
final Intent intent = new Intent(this, org.schabi.newpipe.MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, intent);

View File

@ -151,8 +151,6 @@ public class DescriptionFragment extends BaseFragment {
addMetadataItem(inflater, layout, false,
R.string.metadata_category, streamInfo.getCategory());
addTagsMetadataItem(inflater, layout);
addMetadataItem(inflater, layout, false,
R.string.metadata_licence, streamInfo.getLicence());
@ -174,6 +172,8 @@ public class DescriptionFragment extends BaseFragment {
R.string.metadata_host, streamInfo.getHost());
addMetadataItem(inflater, layout, true,
R.string.metadata_thumbnail_url, streamInfo.getThumbnailUrl());
addTagsMetadataItem(inflater, layout);
}
private void addMetadataItem(final LayoutInflater inflater,

View File

@ -201,6 +201,7 @@ public final class VideoDetailFragment
@Nullable
private MainPlayer playerService;
private Player player;
private PlayerHolder playerHolder = PlayerHolder.getInstance();
/*//////////////////////////////////////////////////////////////////////////
// Service management
@ -304,7 +305,8 @@ public final class VideoDetailFragment
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container,
final Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_video_detail, container, false);
binding = FragmentVideoDetailBinding.inflate(inflater, container, false);
return binding.getRoot();
}
@Override
@ -355,14 +357,13 @@ public final class VideoDetailFragment
@Override
public void onDestroy() {
super.onDestroy();
binding = null;
// Stop the service when user leaves the app with double back press
// if video player is selected. Otherwise unbind
if (activity.isFinishing() && player != null && player.videoPlayerSelected()) {
PlayerHolder.stopService(App.getApp());
if (activity.isFinishing() && isPlayerAvailable() && player.videoPlayerSelected()) {
playerHolder.stopService();
} else {
PlayerHolder.removeListener();
playerHolder.setListener(null);
}
PreferenceManager.getDefaultSharedPreferences(activity)
@ -388,6 +389,12 @@ public final class VideoDetailFragment
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@ -512,7 +519,7 @@ public final class VideoDetailFragment
openVideoPlayer();
}
setOverlayPlayPauseImage(player != null && player.isPlaying());
setOverlayPlayPauseImage(isPlayerAvailable() && player.isPlaying());
break;
case R.id.overlay_close_button:
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
@ -586,10 +593,9 @@ public final class VideoDetailFragment
// Init
//////////////////////////////////////////////////////////////////////////*/
@Override
@Override // called from onViewCreated in {@link BaseFragment#onViewCreated}
protected void initViews(final View rootView, final Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
binding = FragmentVideoDetailBinding.bind(rootView);
pageAdapter = new TabAdapter(getChildFragmentManager());
binding.viewPager.setAdapter(pageAdapter);
@ -655,10 +661,10 @@ public final class VideoDetailFragment
});
setupBottomPlayer();
if (!PlayerHolder.bound) {
if (!playerHolder.bound) {
setHeightThumbnail();
} else {
PlayerHolder.startService(App.getApp(), false, this);
playerHolder.startService(false, this);
}
}
@ -721,7 +727,7 @@ public final class VideoDetailFragment
@Override
public boolean onKeyDown(final int keyCode) {
return player != null && player.onKeyDown(keyCode);
return isPlayerAvailable() && player.onKeyDown(keyCode);
}
@Override
@ -731,7 +737,7 @@ public final class VideoDetailFragment
}
// If we are in fullscreen mode just exit from it via first back press
if (player != null && player.isFullscreen()) {
if (isPlayerAvailable() && player.isFullscreen()) {
if (!DeviceUtils.isTablet(activity)) {
player.pause();
}
@ -741,7 +747,7 @@ public final class VideoDetailFragment
}
// If we have something in history of played items we replay it here
if (player != null
if (isPlayerAvailable()
&& player.getPlayQueue() != null
&& player.videoPlayerSelected()
&& player.getPlayQueue().previous()) {
@ -778,7 +784,7 @@ public final class VideoDetailFragment
final PlayQueueItem playQueueItem = item.getPlayQueue().getItem();
// Update title, url, uploader from the last item in the stack (it's current now)
final boolean isPlayerStopped = player == null || player.isStopped();
final boolean isPlayerStopped = !isPlayerAvailable() || player.isStopped();
if (playQueueItem != null && isPlayerStopped) {
updateOverlayData(playQueueItem.getTitle(),
playQueueItem.getUploader(), playQueueItem.getThumbnailUrl());
@ -806,8 +812,8 @@ public final class VideoDetailFragment
@Nullable final String newUrl,
@NonNull final String newTitle,
@Nullable final PlayQueue newQueue) {
if (player != null && newQueue != null && playQueue != null
&& !Objects.equals(newQueue.getItem(), playQueue.getItem())) {
if (isPlayerAvailable() && newQueue != null && playQueue != null
&& playQueue.getItem() != null && !playQueue.getItem().getUrl().equals(newUrl)) {
// Preloading can be disabled since playback is surely being replaced.
player.disablePreloadingOfCurrentTrack();
}
@ -982,7 +988,7 @@ public final class VideoDetailFragment
.replace(R.id.relatedItemsLayout, RelatedItemsFragment.getInstance(info))
.commitAllowingStateLoss();
binding.relatedItemsLayout.setVisibility(
player != null && player.isFullscreen() ? View.GONE : View.VISIBLE);
isPlayerAvailable() && player.isFullscreen() ? View.GONE : View.VISIBLE);
}
}
@ -1059,6 +1065,14 @@ public final class VideoDetailFragment
// Play Utils
//////////////////////////////////////////////////////////////////////////*/
private void toggleFullscreenIfInFullscreenMode() {
// If a user watched video inside fullscreen mode and than chose another player
// return to non-fullscreen mode
if (isPlayerAvailable() && player.isFullscreen()) {
player.toggleFullscreen();
}
}
private void openBackgroundPlayer(final boolean append) {
final AudioStream audioStream = currentInfo.getAudioStreams()
.get(ListHelper.getDefaultAudioFormat(activity, currentInfo.getAudioStreams()));
@ -1067,11 +1081,7 @@ public final class VideoDetailFragment
.getDefaultSharedPreferences(activity)
.getBoolean(activity.getString(R.string.use_external_audio_player_key), false);
// If a user watched video inside fullscreen mode and than chose another player
// return to non-fullscreen mode
if (player != null && player.isFullscreen()) {
player.toggleFullscreen();
}
toggleFullscreenIfInFullscreenMode();
if (!useExternalAudioPlayer) {
openNormalBackgroundPlayer(append);
@ -1087,15 +1097,11 @@ public final class VideoDetailFragment
}
// See UI changes while remote playQueue changes
if (player == null) {
PlayerHolder.startService(App.getApp(), false, this);
if (!isPlayerAvailable()) {
playerHolder.startService(false, this);
}
// If a user watched video inside fullscreen mode and than chose another player
// return to non-fullscreen mode
if (player != null && player.isFullscreen()) {
player.toggleFullscreen();
}
toggleFullscreenIfInFullscreenMode();
final PlayQueue queue = setupPlayQueueForIntent(append);
if (append) {
@ -1117,8 +1123,8 @@ public final class VideoDetailFragment
private void openNormalBackgroundPlayer(final boolean append) {
// See UI changes while remote playQueue changes
if (player == null) {
PlayerHolder.startService(App.getApp(), false, this);
if (!isPlayerAvailable()) {
playerHolder.startService(false, this);
}
final PlayQueue queue = setupPlayQueueForIntent(append);
@ -1131,8 +1137,8 @@ public final class VideoDetailFragment
}
private void openMainPlayer() {
if (playerService == null) {
PlayerHolder.startService(App.getApp(), autoPlayEnabled, this);
if (!isPlayerServiceAvailable()) {
playerHolder.startService(autoPlayEnabled, this);
return;
}
if (currentInfo == null) {
@ -1150,11 +1156,11 @@ public final class VideoDetailFragment
final Intent playerIntent = NavigationHelper
.getPlayerIntent(requireContext(), MainPlayer.class, queue, true, autoPlayEnabled);
activity.startService(playerIntent);
ContextCompat.startForegroundService(activity, playerIntent);
}
private void hideMainPlayer() {
if (playerService == null
if (!isPlayerServiceAvailable()
|| playerService.getView() == null
|| !player.videoPlayerSelected()) {
return;
@ -1211,13 +1217,13 @@ public final class VideoDetailFragment
private boolean isAutoplayEnabled() {
return autoPlayEnabled
&& !isExternalPlayerEnabled()
&& (player == null || player.videoPlayerSelected())
&& (!isPlayerAvailable() || player.videoPlayerSelected())
&& bottomSheetState != BottomSheetBehavior.STATE_HIDDEN
&& PlayerHelper.isAutoplayAllowedByUser(requireContext());
}
private void addVideoPlayerView() {
if (player == null || getView() == null) {
if (!isPlayerAvailable() || getView() == null) {
return;
}
@ -1277,7 +1283,7 @@ public final class VideoDetailFragment
final boolean isPortrait = metrics.heightPixels > metrics.widthPixels;
requireView().getViewTreeObserver().removeOnPreDrawListener(preDrawListener);
if (player != null && player.isFullscreen()) {
if (isPlayerAvailable() && player.isFullscreen()) {
final int height = (isInMultiWindow()
? requireView()
: activity.getWindow().getDecorView()).getHeight();
@ -1300,7 +1306,7 @@ public final class VideoDetailFragment
new FrameLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT, newHeight));
binding.detailThumbnailImageView.setMinimumHeight(newHeight);
if (player != null) {
if (isPlayerAvailable()) {
final int maxHeight = (int) (metrics.heightPixels * MAX_PLAYER_HEIGHT);
player.getSurfaceView()
.setHeights(newHeight, player.isFullscreen() ? newHeight : maxHeight);
@ -1368,9 +1374,9 @@ public final class VideoDetailFragment
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
// Rebound to the service if it was closed via notification or mini player
if (!PlayerHolder.bound) {
PlayerHolder.startService(
App.getApp(), false, VideoDetailFragment.this);
if (!playerHolder.bound) {
playerHolder.startService(
false, VideoDetailFragment.this);
}
break;
}
@ -1389,13 +1395,12 @@ public final class VideoDetailFragment
//////////////////////////////////////////////////////////////////////////*/
private void restoreDefaultOrientation() {
if (player == null || !player.videoPlayerSelected() || activity == null) {
if (!isPlayerAvailable() || !player.videoPlayerSelected() || activity == null) {
return;
}
if (player != null && player.isFullscreen()) {
player.toggleFullscreen();
}
toggleFullscreenIfInFullscreenMode();
// This will show systemUI and pause the player.
// User can tap on Play button and video will be in fullscreen mode again
// Note for tablet: trying to avoid orientation changes since it's not easy
@ -1435,7 +1440,7 @@ public final class VideoDetailFragment
if (binding.relatedItemsLayout != null) {
if (showRelatedItems) {
binding.relatedItemsLayout.setVisibility(
player != null && player.isFullscreen() ? View.GONE : View.INVISIBLE);
isPlayerAvailable() && player.isFullscreen() ? View.GONE : View.INVISIBLE);
} else {
binding.relatedItemsLayout.setVisibility(View.GONE);
}
@ -1549,7 +1554,7 @@ public final class VideoDetailFragment
showMetaInfoInTextView(info.getMetaInfo(), binding.detailMetaInfoTextView,
binding.detailMetaInfoSeparator, disposables);
if (player == null || player.isStopped()) {
if (!isPlayerAvailable() || player.isStopped()) {
updateOverlayData(info.getName(), info.getUploaderName(), info.getThumbnailUrl());
}
@ -1812,9 +1817,7 @@ public final class VideoDetailFragment
if (error.type == ExoPlaybackException.TYPE_SOURCE
|| error.type == ExoPlaybackException.TYPE_UNEXPECTED) {
// Properly exit from fullscreen
if (playerService != null && player.isFullscreen()) {
player.toggleFullscreen();
}
toggleFullscreenIfInFullscreenMode();
hideMainPlayer();
}
}
@ -1832,7 +1835,9 @@ public final class VideoDetailFragment
@Override
public void onFullscreenStateChanged(final boolean fullscreen) {
setupBrightness();
if (playerService.getView() == null || player.getParentActivity() == null) {
if (!isPlayerAndPlayerServiceAvailable()
|| playerService.getView() == null
|| player.getParentActivity() == null) {
return;
}
@ -1955,7 +1960,7 @@ public final class VideoDetailFragment
activity.getWindow().getDecorView().setSystemUiVisibility(visibility);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
&& (isInMultiWindow() || (player != null && player.isFullscreen()))) {
&& (isInMultiWindow() || (isPlayerAvailable() && player.isFullscreen()))) {
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
activity.getWindow().setNavigationBarColor(Color.TRANSPARENT);
}
@ -1964,7 +1969,7 @@ public final class VideoDetailFragment
// Listener implementation
public void hideSystemUiIfNeeded() {
if (player != null
if (isPlayerAvailable()
&& player.isFullscreen()
&& bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
hideSystemUi();
@ -1972,7 +1977,7 @@ public final class VideoDetailFragment
}
private boolean playerIsNotStopped() {
return player != null && !player.isStopped();
return isPlayerAvailable() && !player.isStopped();
}
private void restoreDefaultBrightness() {
@ -1993,7 +1998,7 @@ public final class VideoDetailFragment
}
final WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
if (player == null
if (!isPlayerAvailable()
|| !player.videoPlayerSelected()
|| !player.isFullscreen()
|| bottomSheetState != BottomSheetBehavior.STATE_EXPANDED) {
@ -2059,7 +2064,7 @@ public final class VideoDetailFragment
}
private void replaceQueueIfUserConfirms(final Runnable onAllow) {
@Nullable final PlayQueue activeQueue = player == null ? null : player.getPlayQueue();
@Nullable final PlayQueue activeQueue = isPlayerAvailable() ? player.getPlayQueue() : null;
// Player will have STATE_IDLE when a user pressed back button
if (isClearingQueueConfirmationRequired(activity)
@ -2115,7 +2120,7 @@ public final class VideoDetailFragment
if (currentWorker != null) {
currentWorker.dispose();
}
PlayerHolder.stopService(App.getApp());
playerHolder.stopService();
setInitialData(0, null, "", null);
currentInfo = null;
updateOverlayData(null, null, null);
@ -2219,7 +2224,7 @@ public final class VideoDetailFragment
hideSystemUiIfNeeded();
// Conditions when the player should be expanded to fullscreen
if (isLandscape()
&& player != null
&& isPlayerAvailable()
&& player.isPlaying()
&& !player.isFullscreen()
&& !DeviceUtils.isTablet(activity)
@ -2236,17 +2241,17 @@ public final class VideoDetailFragment
// Re-enable clicks
setOverlayElementsClickable(true);
if (player != null) {
if (isPlayerAvailable()) {
player.closeItemsList();
}
setOverlayLook(binding.appBarLayout, behavior, 0);
break;
case BottomSheetBehavior.STATE_DRAGGING:
case BottomSheetBehavior.STATE_SETTLING:
if (player != null && player.isFullscreen()) {
if (isPlayerAvailable() && player.isFullscreen()) {
showSystemUi();
}
if (player != null && player.isControlsVisible()) {
if (isPlayerAvailable() && player.isControlsVisible()) {
player.hideControls(0, 0);
}
break;
@ -2310,4 +2315,17 @@ public final class VideoDetailFragment
binding.overlayPlayPauseButton.setClickable(enable);
binding.overlayCloseButton.setClickable(enable);
}
// helpers to check the state of player and playerService
boolean isPlayerAvailable() {
return (player != null);
}
boolean isPlayerServiceAvailable() {
return (playerService != null);
}
boolean isPlayerAndPlayerServiceAvailable() {
return (player != null && playerService != null);
}
}

View File

@ -353,7 +353,7 @@ public abstract class BaseListFragment<I, N> extends BaseStateFragment<I>
final List<StreamDialogEntry> entries = new ArrayList<>();
if (PlayerHolder.getType() != null) {
if (PlayerHolder.getInstance().getType() != null) {
entries.add(StreamDialogEntry.enqueue);
}
if (item.getStreamType() == StreamType.AUDIO_STREAM) {

View File

@ -6,6 +6,7 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -24,6 +25,8 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable;
public class CommentsFragment extends BaseListInfoFragment<CommentsInfo> {
private final CompositeDisposable disposables = new CompositeDisposable();
private TextView emptyStateDesc;
public static CommentsFragment getInstance(final int serviceId, final String url,
final String name) {
final CommentsFragment instance = new CommentsFragment();
@ -35,6 +38,13 @@ public class CommentsFragment extends BaseListInfoFragment<CommentsInfo> {
super(UserAction.REQUESTED_COMMENTS);
}
@Override
protected void initViews(final View rootView, final Bundle savedInstanceState) {
super.initViews(rootView, savedInstanceState);
emptyStateDesc = rootView.findViewById(R.id.empty_state_desc);
}
/*//////////////////////////////////////////////////////////////////////////
// LifeCycle
//////////////////////////////////////////////////////////////////////////*/
@ -73,6 +83,12 @@ public class CommentsFragment extends BaseListInfoFragment<CommentsInfo> {
@Override
public void handleResult(@NonNull final CommentsInfo result) {
super.handleResult(result);
emptyStateDesc.setText(
result.isCommentsDisabled()
? R.string.comments_are_disabled
: R.string.no_comments);
ViewUtils.slideUp(requireView(), 120, 150, 0.06f);
disposables.clear();
}

View File

@ -144,7 +144,7 @@ public class PlaylistFragment extends BaseListInfoFragment<PlaylistInfo> {
final ArrayList<StreamDialogEntry> entries = new ArrayList<>();
if (PlayerHolder.getType() != null) {
if (PlayerHolder.getInstance().getType() != null) {
entries.add(StreamDialogEntry.enqueue);
}
if (item.getStreamType() == StreamType.AUDIO_STREAM) {

View File

@ -1,6 +1,8 @@
package org.schabi.newpipe.info_list.holder;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import org.schabi.newpipe.R;
@ -31,11 +33,13 @@ import org.schabi.newpipe.local.history.HistoryRecordManager;
public class CommentsInfoItemHolder extends CommentsMiniInfoItemHolder {
public final TextView itemTitleView;
private final ImageView itemHeartView;
public CommentsInfoItemHolder(final InfoItemBuilder infoItemBuilder, final ViewGroup parent) {
super(infoItemBuilder, R.layout.list_comments_item, parent);
itemTitleView = itemView.findViewById(R.id.itemTitleView);
itemHeartView = itemView.findViewById(R.id.detail_heart_image_view);
}
@Override
@ -49,5 +53,7 @@ public class CommentsInfoItemHolder extends CommentsMiniInfoItemHolder {
final CommentsInfoItem item = (CommentsInfoItem) infoItem;
itemTitleView.setText(item.getUploaderName());
itemHeartView.setVisibility(item.isHeartedByUploader() ? View.VISIBLE : View.GONE);
}
}

View File

@ -2,11 +2,11 @@ package org.schabi.newpipe.local.bookmark;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.InputType;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -22,6 +22,7 @@ import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.playlist.PlaylistLocalItem;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
import org.schabi.newpipe.databinding.DialogEditTextBinding;
import org.schabi.newpipe.error.ErrorInfo;
import org.schabi.newpipe.error.UserAction;
import org.schabi.newpipe.local.BaseLocalListFragment;
@ -255,14 +256,18 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
}
private void showLocalDialog(final PlaylistMetadataEntry selectedItem) {
final View dialogView = View.inflate(getContext(), R.layout.dialog_bookmark, null);
final EditText editText = dialogView.findViewById(R.id.playlist_name_edit_text);
editText.setText(selectedItem.name);
final DialogEditTextBinding dialogBinding
= DialogEditTextBinding.inflate(getLayoutInflater());
dialogBinding.dialogEditText.setHint(R.string.name);
dialogBinding.dialogEditText.setInputType(InputType.TYPE_CLASS_TEXT);
dialogBinding.dialogEditText.setText(selectedItem.name);
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setView(dialogView)
builder.setView(dialogBinding.getRoot())
.setPositiveButton(R.string.rename_playlist, (dialog, which) ->
changeLocalPlaylistName(selectedItem.uid, editText.getText().toString()))
changeLocalPlaylistName(
selectedItem.uid,
dialogBinding.dialogEditText.getText().toString()))
.setNegativeButton(R.string.cancel, null)
.setNeutralButton(R.string.delete, (dialog, which) -> {
showDeleteDialog(selectedItem.name,

View File

@ -2,8 +2,7 @@ package org.schabi.newpipe.local.dialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.text.InputType;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -13,6 +12,7 @@ import androidx.appcompat.app.AlertDialog;
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.databinding.DialogEditTextBinding;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
import java.util.List;
@ -43,16 +43,18 @@ public final class PlaylistCreationDialog extends PlaylistDialog {
return super.onCreateDialog(savedInstanceState);
}
final View dialogView = View.inflate(getContext(), R.layout.dialog_playlist_name, null);
final EditText nameInput = dialogView.findViewById(R.id.playlist_name);
final DialogEditTextBinding dialogBinding
= DialogEditTextBinding.inflate(getLayoutInflater());
dialogBinding.dialogEditText.setHint(R.string.name);
dialogBinding.dialogEditText.setInputType(InputType.TYPE_CLASS_TEXT);
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext())
.setTitle(R.string.create_playlist)
.setView(dialogView)
.setView(dialogBinding.getRoot())
.setCancelable(true)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.create, (dialogInterface, i) -> {
final String name = nameInput.getText().toString();
final String name = dialogBinding.dialogEditText.getText().toString();
final LocalPlaylistManager playlistManager =
new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext()));
final Toast successToast = Toast.makeText(getActivity(),

View File

@ -73,7 +73,7 @@ import org.schabi.newpipe.player.helper.PlayerHolder
import org.schabi.newpipe.util.Localization
import org.schabi.newpipe.util.NavigationHelper
import org.schabi.newpipe.util.StreamDialogEntry
import org.schabi.newpipe.util.ThemeHelper.getGridSpanCount
import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountStreams
import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout
import java.time.OffsetDateTime
import java.util.ArrayList
@ -96,6 +96,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
private var onSettingsChangeListener: SharedPreferences.OnSharedPreferenceChangeListener? = null
private var updateListViewModeOnResume = false
private var isRefreshing = false
init {
setHasOptionsMenu(true)
@ -160,20 +161,12 @@ class FeedFragment : BaseStateFragment<FeedState>() {
fun setupListViewMode() {
// does everything needed to setup the layouts for grid or list modes
groupAdapter.spanCount = if (shouldUseGridLayout(context)) getGridSpanCount(context) else 1
groupAdapter.spanCount = if (shouldUseGridLayout(context)) getGridSpanCountStreams(context) else 1
feedBinding.itemsList.layoutManager = GridLayoutManager(requireContext(), groupAdapter.spanCount).apply {
spanSizeLookup = groupAdapter.spanSizeLookup
}
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (!isVisibleToUser && view != null) {
updateRelativeTimeViews()
}
}
override fun initListeners() {
super.initListeners()
feedBinding.refreshRootView.setOnClickListener { reloadContent() }
@ -267,6 +260,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
feedBinding.refreshRootView.animate(false, 0)
feedBinding.loadingProgressText.animate(true, 200)
feedBinding.swipeRefreshLayout.isRefreshing = true
isRefreshing = true
}
override fun hideLoading() {
@ -275,6 +269,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
feedBinding.refreshRootView.animate(true, 200)
feedBinding.loadingProgressText.animate(false, 0)
feedBinding.swipeRefreshLayout.isRefreshing = false
isRefreshing = false
}
override fun showEmptyState() {
@ -301,6 +296,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
feedBinding.refreshRootView.animate(false, 0)
feedBinding.loadingProgressText.animate(false, 0)
feedBinding.swipeRefreshLayout.isRefreshing = false
isRefreshing = false
}
private fun handleProgressState(progressState: FeedState.ProgressState) {
@ -330,7 +326,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
if (context == null || context.resources == null || activity == null) return
val entries = ArrayList<StreamDialogEntry>()
if (PlayerHolder.getType() != null) {
if (PlayerHolder.getInstance().getType() != null) {
entries.add(StreamDialogEntry.enqueue)
}
if (item.streamType == StreamType.AUDIO_STREAM) {
@ -354,6 +350,19 @@ class FeedFragment : BaseStateFragment<FeedState>() {
)
}
// show "mark as watched" only when watch history is enabled
val isWatchHistoryEnabled = PreferenceManager
.getDefaultSharedPreferences(context)
.getBoolean(getString(R.string.enable_watch_history_key), false)
if (item.streamType != StreamType.AUDIO_LIVE_STREAM &&
item.streamType != StreamType.LIVE_STREAM &&
isWatchHistoryEnabled
) {
entries.add(
StreamDialogEntry.mark_as_watched
)
}
StreamDialogEntry.setEnabledEntries(entries)
InfoItemDialog(activity, item, StreamDialogEntry.getCommands(context)) { _, which ->
StreamDialogEntry.clickOn(which, this, item)
@ -362,7 +371,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
private val listenerStreamItem = object : OnItemClickListener, OnItemLongClickListener {
override fun onItemClick(item: Item<*>, view: View) {
if (item is StreamItem) {
if (item is StreamItem && !isRefreshing) {
val stream = item.streamWithState.stream
NavigationHelper.openVideoDetailFragment(
requireContext(), fm,
@ -372,7 +381,7 @@ class FeedFragment : BaseStateFragment<FeedState>() {
}
override fun onItemLongClick(item: Item<*>, view: View): Boolean {
if (item is StreamItem) {
if (item is StreamItem && !isRefreshing) {
showStreamDialog(item.streamWithState.stream.toStreamInfoItem())
return true
}

View File

@ -28,6 +28,7 @@ import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.AppDatabase;
import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.feed.dao.FeedDAO;
import org.schabi.newpipe.database.history.dao.SearchHistoryDAO;
import org.schabi.newpipe.database.history.dao.StreamHistoryDAO;
import org.schabi.newpipe.database.history.model.SearchHistoryEntry;
@ -42,7 +43,10 @@ import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.local.feed.FeedViewModel;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import org.schabi.newpipe.util.ExtractorHelper;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
@ -81,6 +85,68 @@ public class HistoryRecordManager {
// Watch History
///////////////////////////////////////////////////////
/**
* Marks a stream item as watched such that it is hidden from the feed if watched videos are
* hidden. Adds a history entry and updates the stream progress to 100%.
*
* @see FeedDAO#getLiveOrNotPlayedStreams
* @see FeedViewModel#togglePlayedItems
* @param info the item to mark as watched
* @return a Maybe containing the ID of the item if successful
*/
public Maybe<Long> markAsWatched(final StreamInfoItem info) {
if (!isStreamHistoryEnabled()) {
return Maybe.empty();
}
final OffsetDateTime currentTime = OffsetDateTime.now(ZoneOffset.UTC);
return Maybe.fromCallable(() -> database.runInTransaction(() -> {
final long streamId;
final long duration;
// Duration will not exist if the item was loaded with fast mode, so fetch it if empty
if (info.getDuration() < 0) {
final StreamInfo completeInfo = ExtractorHelper.getStreamInfo(
info.getServiceId(),
info.getUrl(),
false
)
.subscribeOn(Schedulers.io())
.blockingGet();
duration = completeInfo.getDuration();
streamId = streamTable.upsert(new StreamEntity(completeInfo));
} else {
duration = info.getDuration();
streamId = streamTable.upsert(new StreamEntity(info));
}
// Update the stream progress to the full duration of the video
final List<StreamStateEntity> states = streamStateTable.getState(streamId)
.blockingFirst();
if (!states.isEmpty()) {
final StreamStateEntity entity = states.get(0);
entity.setProgressMillis(duration * 1000);
streamStateTable.update(entity);
} else {
final StreamStateEntity entity = new StreamStateEntity(
streamId,
duration * 1000
);
streamStateTable.insert(entity);
}
// Add a history entry
final StreamHistoryEntity latestEntry = streamHistoryTable.getLatestEntry(streamId);
if (latestEntry != null) {
streamHistoryTable.delete(latestEntry);
latestEntry.setAccessDate(currentTime);
latestEntry.setRepeatCount(latestEntry.getRepeatCount() + 1);
return streamHistoryTable.insert(latestEntry);
} else {
return streamHistoryTable.insert(new StreamHistoryEntity(streamId, currentTime));
}
})).subscribeOn(Schedulers.io());
}
public Maybe<Long> onViewed(final StreamInfo info) {
if (!isStreamHistoryEnabled()) {
return Maybe.empty();

View File

@ -340,7 +340,7 @@ public class StatisticsPlaylistFragment
final ArrayList<StreamDialogEntry> entries = new ArrayList<>();
if (PlayerHolder.getType() != null) {
if (PlayerHolder.getInstance().getType() != null) {
entries.add(StreamDialogEntry.enqueue);
}
if (infoItem.getStreamType() == StreamType.AUDIO_STREAM) {

View File

@ -5,6 +5,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@ -13,7 +14,6 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -32,6 +32,7 @@ import org.schabi.newpipe.database.history.model.StreamHistoryEntry;
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.databinding.DialogEditTextBinding;
import org.schabi.newpipe.databinding.LocalPlaylistHeaderBinding;
import org.schabi.newpipe.databinding.PlaylistControlBinding;
import org.schabi.newpipe.error.ErrorInfo;
@ -526,18 +527,20 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
return;
}
final View dialogView = View.inflate(getContext(), R.layout.dialog_playlist_name, null);
final EditText nameEdit = dialogView.findViewById(R.id.playlist_name);
nameEdit.setText(name);
nameEdit.setSelection(nameEdit.getText().length());
final DialogEditTextBinding dialogBinding
= DialogEditTextBinding.inflate(getLayoutInflater());
dialogBinding.dialogEditText.setHint(R.string.name);
dialogBinding.dialogEditText.setInputType(InputType.TYPE_CLASS_TEXT);
dialogBinding.dialogEditText.setSelection(dialogBinding.dialogEditText.getText().length());
dialogBinding.dialogEditText.setText(name);
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext())
.setTitle(R.string.rename_playlist)
.setView(dialogView)
.setView(dialogBinding.getRoot())
.setCancelable(true)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.rename, (dialogInterface, i) ->
changePlaylistName(nameEdit.getText().toString()));
changePlaylistName(dialogBinding.dialogEditText.getText().toString()));
dialogBuilder.show();
}
@ -750,7 +753,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
final ArrayList<StreamDialogEntry> entries = new ArrayList<>();
if (PlayerHolder.getType() != null) {
if (PlayerHolder.getInstance().getType() != null) {
entries.add(StreamDialogEntry.enqueue);
}
if (infoItem.getStreamType() == StreamType.AUDIO_STREAM) {

View File

@ -58,7 +58,7 @@ import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService
import org.schabi.newpipe.streams.io.StoredFileHelper
import org.schabi.newpipe.util.NavigationHelper
import org.schabi.newpipe.util.OnClickGesture
import org.schabi.newpipe.util.ThemeHelper.getGridSpanCount
import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountChannels
import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout
import org.schabi.newpipe.util.external_communication.ShareUtils
import java.text.SimpleDateFormat
@ -110,13 +110,6 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
setupInitialLayout()
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (activity != null && isVisibleToUser) {
setTitle(activity.getString(R.string.tab_subscriptions))
}
}
override fun onAttach(context: Context) {
super.onAttach(context)
subscriptionManager = SubscriptionManager(requireContext())
@ -154,11 +147,8 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
val supportActionBar = activity.supportActionBar
if (supportActionBar != null) {
supportActionBar.setDisplayShowTitleEnabled(true)
setTitle(getString(R.string.tab_subscriptions))
}
activity.supportActionBar?.setDisplayShowTitleEnabled(true)
activity.supportActionBar?.setTitle(R.string.tab_subscriptions)
}
private fun setupBroadcastReceiver() {
@ -277,7 +267,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
super.initViews(rootView, savedInstanceState)
_binding = FragmentSubscriptionBinding.bind(rootView)
groupAdapter.spanCount = if (shouldUseGridLayout(context)) getGridSpanCount(context) else 1
groupAdapter.spanCount = if (shouldUseGridLayout(context)) getGridSpanCountChannels(context) else 1
binding.itemsList.layoutManager = GridLayoutManager(requireContext(), groupAdapter.spanCount).apply {
spanSizeLookup = groupAdapter.spanSizeLookup
}

View File

@ -178,7 +178,10 @@ public final class MainPlayer extends Service {
if (DEBUG) {
Log.d(TAG, "destroy() called");
}
cleanup();
}
private void cleanup() {
if (player != null) {
// Exit from fullscreen when user closes the player via notification
if (player.isFullscreen()) {
@ -191,9 +194,14 @@ public final class MainPlayer extends Service {
player.stopActivityBinding();
player.removePopupFromView();
player.destroy();
}
player = null;
}
}
public void stopService() {
NotificationUtil.getInstance().cancelNotificationAndStopForeground(this);
cleanup();
stopSelf();
}

View File

@ -1,5 +1,9 @@
package org.schabi.newpipe.player;
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@ -40,15 +44,12 @@ import org.schabi.newpipe.player.playqueue.PlayQueueItemTouchCallback;
import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.ThemeHelper;
import java.util.Collections;
import java.util.List;
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText;
public final class PlayQueueActivity extends AppCompatActivity
implements PlayerEventListener, SeekBar.OnSeekBarChangeListener,
View.OnClickListener, PlaybackParameterDialog.Callback {
@ -83,7 +84,7 @@ public final class PlayQueueActivity extends AppCompatActivity
protected void onCreate(final Bundle savedInstanceState) {
assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState);
ThemeHelper.setTheme(this);
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
queueControlBinding = ActivityPlayerQueueControlBinding.inflate(getLayoutInflater());
setContentView(queueControlBinding.getRoot());

View File

@ -27,12 +27,13 @@ import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
@ -54,8 +55,10 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.core.content.ContextCompat;
import androidx.core.view.DisplayCutoutCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.GestureDetectorCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
@ -112,6 +115,7 @@ import org.schabi.newpipe.player.playback.CustomTrackSelector;
import org.schabi.newpipe.player.playback.MediaSourceManager;
import org.schabi.newpipe.player.playback.PlaybackListener;
import org.schabi.newpipe.player.playback.PlayerMediaSession;
import org.schabi.newpipe.player.playback.SurfaceHolderCallback;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.PlayQueueAdapter;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
@ -121,12 +125,14 @@ import org.schabi.newpipe.player.playqueue.PlayQueueItemTouchCallback;
import org.schabi.newpipe.player.resolver.AudioPlaybackResolver;
import org.schabi.newpipe.player.resolver.MediaSourceTag;
import org.schabi.newpipe.player.resolver.VideoPlaybackResolver;
import org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper;
import org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHolder;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.external_communication.KoreUtils;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.SerializedCache;
import org.schabi.newpipe.util.external_communication.KoreUtils;
import org.schabi.newpipe.util.external_communication.ShareUtils;
import org.schabi.newpipe.views.ExpandableSurfaceView;
@ -267,6 +273,7 @@ public final class Player implements
private SimpleExoPlayer simpleExoPlayer;
private AudioReactor audioReactor;
private MediaSessionManager mediaSessionManager;
@Nullable private SurfaceHolderCallback surfaceHolderCallback;
@NonNull private final CustomTrackSelector trackSelector;
@NonNull private final LoadController loadController;
@ -353,7 +360,7 @@ public final class Player implements
private static final float MAX_GESTURE_LENGTH = 0.75f;
private int maxGestureLength; // scaled
private GestureDetector gestureDetector;
private GestureDetectorCompat gestureDetector;
/*//////////////////////////////////////////////////////////////////////////
// Listeners and disposables
@ -376,6 +383,8 @@ public final class Player implements
@NonNull private final SharedPreferences prefs;
@NonNull private final HistoryRecordManager recordManager;
@NonNull private final SeekbarPreviewThumbnailHolder seekbarPreviewThumbnailHolder =
new SeekbarPreviewThumbnailHolder();
/*//////////////////////////////////////////////////////////////////////////
@ -489,7 +498,7 @@ public final class Player implements
registerBroadcastReceiver();
// Setup video view
simpleExoPlayer.setVideoSurfaceView(binding.surfaceView);
setupVideoSurface();
simpleExoPlayer.addVideoListener(this);
// Setup subtitle view
@ -517,7 +526,7 @@ public final class Player implements
binding.playbackLiveSync.setOnClickListener(this);
final PlayerGestureListener listener = new PlayerGestureListener(this, service);
gestureDetector = new GestureDetector(context, listener);
gestureDetector = new GestureDetectorCompat(context, listener);
binding.getRoot().setOnTouchListener(listener);
binding.queueButton.setOnClickListener(this);
@ -552,10 +561,9 @@ public final class Player implements
binding.getRoot().addOnLayoutChangeListener(this::onLayoutChange);
ViewCompat.setOnApplyWindowInsetsListener(binding.itemsListPanel, (view, windowInsets) -> {
final DisplayCutoutCompat cutout = windowInsets.getDisplayCutout();
if (cutout != null) {
view.setPadding(cutout.getSafeInsetLeft(), cutout.getSafeInsetTop(),
cutout.getSafeInsetRight(), cutout.getSafeInsetBottom());
final Insets cutout = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout());
if (!cutout.equals(Insets.NONE)) {
view.setPadding(cutout.left, cutout.top, cutout.right, cutout.bottom);
}
return windowInsets;
});
@ -772,8 +780,12 @@ public final class Player implements
if (DEBUG) {
Log.d(TAG, "destroyPlayer() called");
}
cleanupVideoSurface();
if (!exoPlayerIsNull()) {
simpleExoPlayer.removeListener(this);
simpleExoPlayer.removeVideoListener(this);
simpleExoPlayer.stop();
simpleExoPlayer.release();
}
@ -857,7 +869,7 @@ public final class Player implements
Log.d(TAG, "onPlaybackShutdown() called");
}
// destroys the service, which in turn will destroy the player
service.onDestroy();
service.stopService();
}
public void smoothStopPlayer() {
@ -1097,7 +1109,7 @@ public final class Player implements
pause();
break;
case ACTION_CLOSE:
service.onDestroy();
service.stopService();
break;
case ACTION_PLAY_PAUSE:
playPause();
@ -1498,7 +1510,7 @@ public final class Player implements
Objects.requireNonNull(windowManager)
.removeView(closeOverlayBinding.getRoot());
closeOverlayBinding = null;
service.onDestroy();
service.stopService();
}
}).start();
}
@ -1669,12 +1681,67 @@ public final class Player implements
@Override // seekbar listener
public void onProgressChanged(final SeekBar seekBar, final int progress,
final boolean fromUser) {
if (DEBUG && fromUser) {
// Currently we don't need method execution when fromUser is false
if (!fromUser) {
return;
}
if (DEBUG) {
Log.d(TAG, "onProgressChanged() called with: "
+ "seekBar = [" + seekBar + "], progress = [" + progress + "]");
}
if (fromUser) {
binding.currentDisplaySeek.setText(getTimeString(progress));
binding.currentDisplaySeek.setText(getTimeString(progress));
// Seekbar Preview Thumbnail
SeekbarPreviewThumbnailHelper
.tryResizeAndSetSeekbarPreviewThumbnail(
getContext(),
seekbarPreviewThumbnailHolder.getBitmapAt(progress),
binding.currentSeekbarPreviewThumbnail,
binding.subtitleView::getWidth);
adjustSeekbarPreviewContainer();
}
private void adjustSeekbarPreviewContainer() {
try {
// Should only be required when an error occurred before
// and the layout was positioned in the center
binding.bottomSeekbarPreviewLayout.setGravity(Gravity.NO_GRAVITY);
// Calculate the current left position of seekbar progress in px
// More info: https://stackoverflow.com/q/20493577
final int currentSeekbarLeft =
binding.playbackSeekBar.getLeft()
+ binding.playbackSeekBar.getPaddingLeft()
+ binding.playbackSeekBar.getThumb().getBounds().left;
// Calculate the (unchecked) left position of the container
final int uncheckedContainerLeft =
currentSeekbarLeft - (binding.seekbarPreviewContainer.getWidth() / 2);
// Fix the position so it's within the boundaries
final int checkedContainerLeft =
Math.max(
Math.min(
uncheckedContainerLeft,
// Max left
binding.playbackWindowRoot.getWidth()
- binding.seekbarPreviewContainer.getWidth()
),
0 // Min left
);
// See also: https://stackoverflow.com/a/23249734
final LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(
binding.seekbarPreviewContainer.getLayoutParams());
params.setMarginStart(checkedContainerLeft);
binding.seekbarPreviewContainer.setLayoutParams(params);
} catch (final Exception ex) {
Log.e(TAG, "Failed to adjust seekbarPreviewContainer", ex);
// Fallback - position in the middle
binding.bottomSeekbarPreviewLayout.setGravity(Gravity.CENTER);
}
}
@ -1695,6 +1762,8 @@ public final class Player implements
showControls(0);
animate(binding.currentDisplaySeek, true, DEFAULT_CONTROLS_DURATION,
AnimationType.SCALE_AND_ALPHA);
animate(binding.currentSeekbarPreviewThumbnail, true, DEFAULT_CONTROLS_DURATION,
AnimationType.SCALE_AND_ALPHA);
}
@Override // seekbar listener
@ -1710,6 +1779,7 @@ public final class Player implements
binding.playbackCurrentTime.setText(getTimeString(seekBar.getProgress()));
animate(binding.currentDisplaySeek, false, 200, AnimationType.SCALE_AND_ALPHA);
animate(binding.currentSeekbarPreviewThumbnail, false, 200, AnimationType.SCALE_AND_ALPHA);
if (currentState == STATE_PAUSED_SEEK) {
changeState(STATE_BUFFERING);
@ -2859,6 +2929,10 @@ public final class Player implements
binding.titleTextView.setText(tag.getMetadata().getName());
binding.channelTextView.setText(tag.getMetadata().getUploaderName());
this.seekbarPreviewThumbnailHolder.resetFrom(
this.getContext(),
tag.getMetadata().getPreviewFrames());
NotificationUtil.getInstance().createNotificationIfNeededAndUpdate(this, false);
notifyMetadataUpdateToListeners();
@ -4125,7 +4199,7 @@ public final class Player implements
return audioReactor;
}
public GestureDetector getGestureDetector() {
public GestureDetectorCompat getGestureDetector() {
return gestureDetector;
}
@ -4223,6 +4297,39 @@ public final class Player implements
public PlayQueueAdapter getPlayQueueAdapter() {
return playQueueAdapter;
}
//endregion
/*//////////////////////////////////////////////////////////////////////////
// SurfaceHolderCallback helpers
//////////////////////////////////////////////////////////////////////////*/
//region SurfaceHolderCallback helpers
private void setupVideoSurface() {
// make sure there is nothing left over from previous calls
cleanupVideoSurface();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // >=API23
surfaceHolderCallback = new SurfaceHolderCallback(context, simpleExoPlayer);
binding.surfaceView.getHolder().addCallback(surfaceHolderCallback);
final Surface surface = binding.surfaceView.getHolder().getSurface();
// initially set the surface manually otherwise
// onRenderedFirstFrame() will not be called
simpleExoPlayer.setVideoSurface(surface);
} else {
simpleExoPlayer.setVideoSurfaceView(binding.surfaceView);
}
}
private void cleanupVideoSurface() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // >=API23
if (surfaceHolderCallback != null) {
if (binding != null) {
binding.surfaceView.getHolder().removeCallback(surfaceHolderCallback);
}
surfaceHolderCallback.release();
surfaceHolderCallback = null;
}
}
}
//endregion SurfaceHolderCallback helpers
}

View File

@ -8,6 +8,7 @@ import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.PlaybackParameters;
@ -22,18 +23,27 @@ import org.schabi.newpipe.player.event.PlayerServiceExtendedEventListener;
import org.schabi.newpipe.player.playqueue.PlayQueue;
public final class PlayerHolder {
private PlayerHolder() {
}
private static final boolean DEBUG = MainActivity.DEBUG;
private static final String TAG = "PlayerHolder";
private static PlayerHolder instance;
public static synchronized PlayerHolder getInstance() {
if (PlayerHolder.instance == null) {
PlayerHolder.instance = new PlayerHolder();
}
return PlayerHolder.instance;
}
private static PlayerServiceExtendedEventListener listener;
private final boolean DEBUG = MainActivity.DEBUG;
private final String TAG = PlayerHolder.class.getSimpleName();
private static ServiceConnection serviceConnection;
public static boolean bound;
private static MainPlayer playerService;
private static Player player;
private PlayerServiceExtendedEventListener listener;
private final PlayerServiceConnection serviceConnection = new PlayerServiceConnection();
public boolean bound;
private MainPlayer playerService;
private Player player;
/**
* Returns the current {@link MainPlayer.PlayerType} of the {@link MainPlayer} service,
@ -42,26 +52,31 @@ public final class PlayerHolder {
* @return Current PlayerType
*/
@Nullable
public static MainPlayer.PlayerType getType() {
public MainPlayer.PlayerType getType() {
if (player == null) {
return null;
}
return player.getPlayerType();
}
public static boolean isPlaying() {
public boolean isPlaying() {
if (player == null) {
return false;
}
return player.isPlaying();
}
public static boolean isPlayerOpen() {
public boolean isPlayerOpen() {
return player != null;
}
public static void setListener(final PlayerServiceExtendedEventListener newListener) {
public void setListener(@Nullable final PlayerServiceExtendedEventListener newListener) {
listener = newListener;
if (listener == null) {
return;
}
// Force reload data from service
if (player != null) {
listener.onServiceConnected(player, playerService, false);
@ -69,14 +84,15 @@ public final class PlayerHolder {
}
}
public static void removeListener() {
listener = null;
// helper to handle context in common place as using the same
// context to bind/unbind a service is crucial
private Context getCommonContext() {
return App.getApp();
}
public static void startService(final Context context,
final boolean playAfterConnect,
final PlayerServiceExtendedEventListener newListener) {
public void startService(final boolean playAfterConnect,
final PlayerServiceExtendedEventListener newListener) {
final Context context = getCommonContext();
setListener(newListener);
if (bound) {
return;
@ -85,58 +101,65 @@ public final class PlayerHolder {
// and NullPointerExceptions inside the service because the service will be
// bound twice. Prevent it with unbinding first
unbind(context);
context.startService(new Intent(context, MainPlayer.class));
serviceConnection = getServiceConnection(context, playAfterConnect);
ContextCompat.startForegroundService(context, new Intent(context, MainPlayer.class));
serviceConnection.doPlayAfterConnect(playAfterConnect);
bind(context);
}
public static void stopService(final Context context) {
public void stopService() {
final Context context = getCommonContext();
unbind(context);
context.stopService(new Intent(context, MainPlayer.class));
}
private static ServiceConnection getServiceConnection(final Context context,
final boolean playAfterConnect) {
return new ServiceConnection() {
@Override
public void onServiceDisconnected(final ComponentName compName) {
if (DEBUG) {
Log.d(TAG, "Player service is disconnected");
}
class PlayerServiceConnection implements ServiceConnection {
unbind(context);
private boolean playAfterConnect = false;
public void doPlayAfterConnect(final boolean playAfterConnection) {
this.playAfterConnect = playAfterConnection;
}
@Override
public void onServiceDisconnected(final ComponentName compName) {
if (DEBUG) {
Log.d(TAG, "Player service is disconnected");
}
@Override
public void onServiceConnected(final ComponentName compName, final IBinder service) {
if (DEBUG) {
Log.d(TAG, "Player service is connected");
}
final MainPlayer.LocalBinder localBinder = (MainPlayer.LocalBinder) service;
final Context context = getCommonContext();
unbind(context);
}
playerService = localBinder.getService();
player = localBinder.getPlayer();
if (listener != null) {
listener.onServiceConnected(player, playerService, playAfterConnect);
}
startPlayerListener();
@Override
public void onServiceConnected(final ComponentName compName, final IBinder service) {
if (DEBUG) {
Log.d(TAG, "Player service is connected");
}
};
}
final MainPlayer.LocalBinder localBinder = (MainPlayer.LocalBinder) service;
private static void bind(final Context context) {
playerService = localBinder.getService();
player = localBinder.getPlayer();
if (listener != null) {
listener.onServiceConnected(player, playerService, playAfterConnect);
}
startPlayerListener();
}
};
private void bind(final Context context) {
if (DEBUG) {
Log.d(TAG, "bind() called");
}
final Intent serviceIntent = new Intent(context, MainPlayer.class);
bound = context.bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
bound = context.bindService(serviceIntent, serviceConnection,
Context.BIND_AUTO_CREATE);
if (!bound) {
context.unbindService(serviceConnection);
}
}
private static void unbind(final Context context) {
private void unbind(final Context context) {
if (DEBUG) {
Log.d(TAG, "unbind() called");
}
@ -153,21 +176,19 @@ public final class PlayerHolder {
}
}
private static void startPlayerListener() {
private void startPlayerListener() {
if (player != null) {
player.setFragmentListener(INNER_LISTENER);
player.setFragmentListener(internalListener);
}
}
private static void stopPlayerListener() {
private void stopPlayerListener() {
if (player != null) {
player.removeFragmentListener(INNER_LISTENER);
player.removeFragmentListener(internalListener);
}
}
private static final PlayerServiceEventListener INNER_LISTENER =
private final PlayerServiceEventListener internalListener =
new PlayerServiceEventListener() {
@Override
public void onFullscreenStateChanged(final boolean fullscreen) {
@ -242,7 +263,7 @@ public final class PlayerHolder {
if (listener != null) {
listener.onServiceStopped();
}
unbind(App.getApp());
unbind(getCommonContext());
}
};
}

View File

@ -0,0 +1,62 @@
package org.schabi.newpipe.player.playback;
import android.content.Context;
import android.view.SurfaceHolder;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.video.DummySurface;
/**
* Prevent error message: 'Unrecoverable player error occurred'
* In case of rotation some users see this kind of an error which is preventable
* having a Callback that handles the lifecycle of the surface.
* <p>
* How?: In case we are no longer able to write to the surface eg. through rotation/putting in
* background we set set a DummySurface. Although it it works on API >= 23 only.
* Result: we get a little video interruption (audio is still fine) but we won't get the
* 'Unrecoverable player error occurred' error message.
* <p>
* This implementation is based on:
* 'ExoPlayer stuck in buffering after re-adding the surface view a few time #2703'
* <p>
* -> exoplayer fix suggestion link
* https://github.com/google/ExoPlayer/issues/2703#issuecomment-300599981
*/
public final class SurfaceHolderCallback implements SurfaceHolder.Callback {
private final Context context;
private final SimpleExoPlayer player;
private DummySurface dummySurface;
public SurfaceHolderCallback(final Context context, final SimpleExoPlayer player) {
this.context = context;
this.player = player;
}
@Override
public void surfaceCreated(final SurfaceHolder holder) {
player.setVideoSurface(holder.getSurface());
}
@Override
public void surfaceChanged(final SurfaceHolder holder,
final int format,
final int width,
final int height) {
}
@Override
public void surfaceDestroyed(final SurfaceHolder holder) {
if (dummySurface == null) {
dummySurface = DummySurface.newInstanceV17(context, false);
}
player.setVideoSurface(dummySurface);
}
public void release() {
if (dummySurface != null) {
dummySurface.release();
dummySurface = null;
}
}
}

View File

@ -64,20 +64,6 @@ public class PlayQueueItem implements Serializable {
this.recoveryPosition = RECOVERY_UNSET;
}
@Override
public boolean equals(final Object o) {
if (o instanceof PlayQueueItem) {
return url.equals(((PlayQueueItem) o).url);
} else {
return false;
}
}
@Override
public int hashCode() {
return url.hashCode();
}
@NonNull
public String getTitle() {
return title;

View File

@ -0,0 +1,108 @@
package org.schabi.newpipe.player.seekbarpreview;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.preference.PreferenceManager;
import org.schabi.newpipe.R;
import org.schabi.newpipe.util.DeviceUtils;
import java.lang.annotation.Retention;
import java.util.Objects;
import java.util.Optional;
import java.util.function.IntSupplier;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import static org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper.SeekbarPreviewThumbnailType.HIGH_QUALITY;
import static org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper.SeekbarPreviewThumbnailType.LOW_QUALITY;
import static org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper.SeekbarPreviewThumbnailType.NONE;
/**
* Helper for the seekbar preview.
*/
public final class SeekbarPreviewThumbnailHelper {
// This has to be <= 23 chars on devices running Android 7 or lower (API <= 25)
// or it fails with an IllegalArgumentException
// https://stackoverflow.com/a/54744028
public static final String TAG = "SeekbarPrevThumbHelper";
private SeekbarPreviewThumbnailHelper() {
// No impl pls
}
@Retention(SOURCE)
@IntDef({HIGH_QUALITY, LOW_QUALITY,
NONE})
public @interface SeekbarPreviewThumbnailType {
int HIGH_QUALITY = 0;
int LOW_QUALITY = 1;
int NONE = 2;
}
////////////////////////////////////////////////////////////////////////////
// Settings Resolution
///////////////////////////////////////////////////////////////////////////
@SeekbarPreviewThumbnailType
public static int getSeekbarPreviewThumbnailType(@NonNull final Context context) {
final String type = PreferenceManager.getDefaultSharedPreferences(context).getString(
context.getString(R.string.seekbar_preview_thumbnail_key), "");
if (type.equals(context.getString(R.string.seekbar_preview_thumbnail_none))) {
return NONE;
} else if (type.equals(context.getString(R.string.seekbar_preview_thumbnail_low_quality))) {
return LOW_QUALITY;
} else {
return HIGH_QUALITY; // default
}
}
public static void tryResizeAndSetSeekbarPreviewThumbnail(
@NonNull final Context context,
@NonNull final Optional<Bitmap> optPreviewThumbnail,
@NonNull final ImageView currentSeekbarPreviewThumbnail,
@NonNull final IntSupplier baseViewWidthSupplier) {
if (!optPreviewThumbnail.isPresent()) {
currentSeekbarPreviewThumbnail.setVisibility(View.GONE);
return;
}
currentSeekbarPreviewThumbnail.setVisibility(View.VISIBLE);
final Bitmap srcBitmap = optPreviewThumbnail.get();
// Resize original bitmap
try {
Objects.requireNonNull(srcBitmap);
final int srcWidth = srcBitmap.getWidth() > 0 ? srcBitmap.getWidth() : 1;
final int newWidth = Math.max(
Math.min(
// Use 1/4 of the width for the preview
Math.round(baseViewWidthSupplier.getAsInt() / 4f),
// Scaling more than that factor looks really pixelated -> max
Math.round(srcWidth * 2.5f)
),
// Min width = 10dp
DeviceUtils.dpToPx(10, context)
);
final float scaleFactor = (float) newWidth / srcWidth;
final int newHeight = (int) (srcBitmap.getHeight() * scaleFactor);
currentSeekbarPreviewThumbnail.setImageBitmap(
Bitmap.createScaledBitmap(srcBitmap, newWidth, newHeight, true));
} catch (final Exception ex) {
Log.e(TAG, "Failed to resize and set seekbar preview thumbnail", ex);
currentSeekbarPreviewThumbnail.setVisibility(View.GONE);
} finally {
srcBitmap.recycle();
}
}
}

View File

@ -0,0 +1,252 @@
package org.schabi.newpipe.player.seekbarpreview;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import androidx.annotation.NonNull;
import com.google.common.base.Stopwatch;
import com.nostra13.universalimageloader.core.ImageLoader;
import org.schabi.newpipe.extractor.stream.Frameset;
import org.schabi.newpipe.util.ImageDisplayConstants;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import static org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper.SeekbarPreviewThumbnailType;
public class SeekbarPreviewThumbnailHolder {
// This has to be <= 23 chars on devices running Android 7 or lower (API <= 25)
// or it fails with an IllegalArgumentException
// https://stackoverflow.com/a/54744028
public static final String TAG = "SeekbarPrevThumbHolder";
// Key = Position of the picture in milliseconds
// Supplier = Supplies the bitmap for that position
private final Map<Integer, Supplier<Bitmap>> seekbarPreviewData = new ConcurrentHashMap<>();
// This ensures that if the reset is still undergoing
// and another reset starts, only the last reset is processed
private UUID currentUpdateRequestIdentifier = UUID.randomUUID();
public synchronized void resetFrom(
@NonNull final Context context,
final List<Frameset> framesets) {
final int seekbarPreviewType =
SeekbarPreviewThumbnailHelper.getSeekbarPreviewThumbnailType(context);
final UUID updateRequestIdentifier = UUID.randomUUID();
this.currentUpdateRequestIdentifier = updateRequestIdentifier;
final ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(() -> {
try {
resetFromAsync(seekbarPreviewType, framesets, updateRequestIdentifier);
} catch (final Exception ex) {
Log.e(TAG, "Failed to execute async", ex);
}
});
// ensure that the executorService stops/destroys it's threads
// after the task is finished
executorService.shutdown();
}
private void resetFromAsync(
final int seekbarPreviewType,
final List<Frameset> framesets,
final UUID updateRequestIdentifier) {
Log.d(TAG, "Clearing seekbarPreviewData");
seekbarPreviewData.clear();
if (seekbarPreviewType == SeekbarPreviewThumbnailType.NONE) {
Log.d(TAG, "Not processing seekbarPreviewData due to settings");
return;
}
final Frameset frameset = getFrameSetForType(framesets, seekbarPreviewType);
if (frameset == null) {
Log.d(TAG, "No frameset was found to fill seekbarPreviewData");
return;
}
Log.d(TAG, "Frameset quality info: "
+ "[width=" + frameset.getFrameWidth()
+ ", heigh=" + frameset.getFrameHeight() + "]");
// Abort method execution if we are not the latest request
if (!isRequestIdentifierCurrent(updateRequestIdentifier)) {
return;
}
generateDataFrom(frameset, updateRequestIdentifier);
}
private Frameset getFrameSetForType(
final List<Frameset> framesets,
final int seekbarPreviewType) {
if (seekbarPreviewType == SeekbarPreviewThumbnailType.HIGH_QUALITY) {
Log.d(TAG, "Strategy for seekbarPreviewData: high quality");
return framesets.stream()
.max(Comparator.comparingInt(fs -> fs.getFrameHeight() * fs.getFrameWidth()))
.orElse(null);
} else {
Log.d(TAG, "Strategy for seekbarPreviewData: low quality");
return framesets.stream()
.min(Comparator.comparingInt(fs -> fs.getFrameHeight() * fs.getFrameWidth()))
.orElse(null);
}
}
private void generateDataFrom(
final Frameset frameset,
final UUID updateRequestIdentifier) {
Log.d(TAG, "Starting generation of seekbarPreviewData");
final Stopwatch sw = Log.isLoggable(TAG, Log.DEBUG) ? Stopwatch.createStarted() : null;
int currentPosMs = 0;
int pos = 1;
final int frameCountPerUrl = frameset.getFramesPerPageX() * frameset.getFramesPerPageY();
// Process each url in the frameset
for (final String url : frameset.getUrls()) {
// get the bitmap
final Bitmap srcBitMap = getBitMapFrom(url);
// The data is not added directly to "seekbarPreviewData" due to
// concurrency and checks for "updateRequestIdentifier"
final Map<Integer, Supplier<Bitmap>> generatedDataForUrl = new HashMap<>();
// The bitmap consists of several images, which we process here
// foreach frame in the returned bitmap
for (int i = 0; i < frameCountPerUrl; i++) {
// Frames outside the video length are skipped
if (pos > frameset.getTotalCount()) {
break;
}
// Get the bounds where the frame is found
final int[] bounds = frameset.getFrameBoundsAt(currentPosMs);
generatedDataForUrl.put(currentPosMs, () -> {
// It can happen, that the original bitmap could not be downloaded
// In such a case - we don't want a NullPointer - simply return null
if (srcBitMap == null) {
return null;
}
// Cut out the corresponding bitmap form the "srcBitMap"
return Bitmap.createBitmap(srcBitMap, bounds[1], bounds[2],
frameset.getFrameWidth(), frameset.getFrameHeight());
});
currentPosMs += frameset.getDurationPerFrame();
pos++;
}
// Check if we are still the latest request
// If not abort method execution
if (isRequestIdentifierCurrent(updateRequestIdentifier)) {
seekbarPreviewData.putAll(generatedDataForUrl);
} else {
Log.d(TAG, "Aborted of generation of seekbarPreviewData");
break;
}
}
if (sw != null) {
Log.d(TAG, "Generation of seekbarPreviewData took " + sw.stop().toString());
}
}
private Bitmap getBitMapFrom(final String url) {
if (url == null) {
Log.w(TAG, "url is null; This should never happen");
return null;
}
final Stopwatch sw = Log.isLoggable(TAG, Log.DEBUG) ? Stopwatch.createStarted() : null;
try {
final SyncImageLoadingListener syncImageLoadingListener =
new SyncImageLoadingListener();
Log.d(TAG, "Downloading bitmap for seekbarPreview from '" + url + "'");
// Ensure that everything is running
ImageLoader.getInstance().resume();
// Load the image
// Impl-Note:
// Ensure that your are not running on the main-Thread this will otherwise hang
ImageLoader.getInstance().loadImage(
url,
ImageDisplayConstants.DISPLAY_SEEKBAR_PREVIEW_OPTIONS,
syncImageLoadingListener);
// Get the bitmap within the timeout
final Bitmap bitmap =
syncImageLoadingListener.waitForBitmapOrThrow(30, TimeUnit.SECONDS);
if (sw != null) {
Log.d(TAG,
"Download of bitmap for seekbarPreview from '" + url
+ "' took " + sw.stop().toString());
}
return bitmap;
} catch (final Exception ex) {
Log.w(TAG,
"Failed to get bitmap for seekbarPreview from url='" + url
+ "' in time",
ex);
return null;
}
}
private boolean isRequestIdentifierCurrent(final UUID requestIdentifier) {
return this.currentUpdateRequestIdentifier.equals(requestIdentifier);
}
public Optional<Bitmap> getBitmapAt(final int positionInMs) {
// Check if the BitmapData is empty
if (seekbarPreviewData.isEmpty()) {
return Optional.empty();
}
// Get the closest frame to the requested position
final int closestIndexPosition =
seekbarPreviewData.keySet().stream()
.min(Comparator.comparingInt(i -> Math.abs(i - positionInMs)))
.orElse(-1);
// this should never happen, because
// it indicates that "seekbarPreviewData" is empty which was already checked
if (closestIndexPosition == -1) {
return Optional.empty();
}
try {
// Get the bitmap for the position (executes the supplier)
return Optional.ofNullable(seekbarPreviewData.get(closestIndexPosition).get());
} catch (final Exception ex) {
// If there is an error, log it and return Optional.empty
Log.w(TAG, "Unable to get seekbar preview", ex);
return Optional.empty();
}
}
}

View File

@ -0,0 +1,87 @@
package org.schabi.newpipe.player.seekbarpreview;
import android.graphics.Bitmap;
import android.view.View;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
/**
* Listener for synchronously downloading of an image/bitmap.
*/
public class SyncImageLoadingListener extends SimpleImageLoadingListener {
private final CountDownLatch countDownLatch = new CountDownLatch(1);
private Bitmap bitmap;
private boolean cancelled = false;
private FailReason failReason = null;
@SuppressWarnings("checkstyle:HiddenField")
@Override
public void onLoadingFailed(
final String imageUri,
final View view,
final FailReason failReason) {
this.failReason = failReason;
countDownLatch.countDown();
}
@Override
public void onLoadingComplete(
final String imageUri,
final View view,
final Bitmap loadedImage) {
bitmap = loadedImage;
countDownLatch.countDown();
}
@Override
public void onLoadingCancelled(final String imageUri, final View view) {
cancelled = true;
countDownLatch.countDown();
}
public Bitmap waitForBitmapOrThrow(final long timeout, final TimeUnit timeUnit)
throws InterruptedException, TimeoutException {
// Wait for the download to finish
if (!countDownLatch.await(timeout, timeUnit)) {
throw new TimeoutException("Couldn't get the image in time");
}
if (isCancelled()) {
throw new CancellationException("Download of image was cancelled");
}
if (getFailReason() != null) {
throw new RuntimeException("Failed to download image" + getFailReason().getType(),
getFailReason().getCause());
}
if (getBitmap() == null) {
throw new NullPointerException("Bitmap is null");
}
return getBitmap();
}
public Bitmap getBitmap() {
return bitmap;
}
public boolean isCancelled() {
return cancelled;
}
public FailReason getFailReason() {
return failReason;
}
}

View File

@ -12,7 +12,6 @@ import android.widget.Toast;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;
import androidx.preference.Preference;
@ -33,6 +32,7 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ZipHelper;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
@ -43,7 +43,8 @@ import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
public class ContentSettingsFragment extends BasePreferenceFragment {
private static final String ZIP_MIME_TYPE = "application/zip";
private static final SimpleDateFormat EXPORT_DATE_FORMAT
private final SimpleDateFormat exportDateFormat
= new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US);
private ContentSettingsManager manager;
@ -52,7 +53,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
private String thumbnailLoadToggleKey;
private String youtubeRestrictedModeEnabledKey;
@Nullable private Uri lastImportExportDataUri = null;
private Localization initialSelectedLocalization;
private ContentCountry initialSelectedContentCountry;
private String initialLanguage;
@ -86,7 +86,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
requestExportPathLauncher.launch(
StoredFileHelper.getNewPicker(requireContext(),
"NewPipeData-" + EXPORT_DATE_FORMAT.format(new Date()) + ".zip",
"NewPipeData-" + exportDateFormat.format(new Date()) + ".zip",
ZIP_MIME_TYPE, getImportExportDataUri()));
return true;
});
@ -162,19 +162,21 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
private void requestExportPathResult(final ActivityResult result) {
assureCorrectAppLanguage(getContext());
if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) {
lastImportExportDataUri = result.getData().getData(); // will be saved only on success
// will be saved only on success
final Uri lastExportDataUri = result.getData().getData();
final StoredFileHelper file
= new StoredFileHelper(getContext(), result.getData().getData(), ZIP_MIME_TYPE);
exportDatabase(file);
exportDatabase(file, lastExportDataUri);
}
}
private void requestImportPathResult(final ActivityResult result) {
assureCorrectAppLanguage(getContext());
if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) {
lastImportExportDataUri = result.getData().getData(); // will be saved only on success
// will be saved only on success
final Uri lastImportDataUri = result.getData().getData();
final StoredFileHelper file
= new StoredFileHelper(getContext(), result.getData().getData(), ZIP_MIME_TYPE);
@ -182,7 +184,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
new AlertDialog.Builder(requireActivity())
.setMessage(R.string.override_current_data)
.setPositiveButton(R.string.finish, (d, id) ->
importDatabase(file))
importDatabase(file, lastImportDataUri))
.setNegativeButton(R.string.cancel, (d, id) ->
d.cancel())
.create()
@ -190,33 +192,33 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
}
}
private void exportDatabase(final StoredFileHelper file) {
private void exportDatabase(final StoredFileHelper file, final Uri exportDataUri) {
try {
//checkpoint before export
NewPipeDatabase.checkpoint();
final SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(requireContext());
.getDefaultSharedPreferences(requireContext());
manager.exportDatabase(preferences, file);
saveLastImportExportDataUri(false); // save export path only on success
saveLastImportExportDataUri(exportDataUri); // save export path only on success
Toast.makeText(getContext(), R.string.export_complete_toast, Toast.LENGTH_SHORT).show();
} catch (final Exception e) {
ErrorActivity.reportUiErrorInSnackbar(this, "Exporting database", e);
}
}
private void importDatabase(final StoredFileHelper file) {
private void importDatabase(final StoredFileHelper file, final Uri importDataUri) {
// check if file is supported
if (!ZipHelper.isValidZipFile(file)) {
Toast.makeText(getContext(), R.string.no_valid_zip_file, Toast.LENGTH_SHORT)
.show();
.show();
return;
}
try {
if (!manager.ensureDbDirectoryExists()) {
throw new Exception("Could not create databases dir");
throw new IOException("Could not create databases dir");
}
if (!manager.extractDb(file)) {
@ -231,17 +233,17 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
alert.setNegativeButton(android.R.string.no, (dialog, which) -> {
dialog.dismiss();
finishImport();
finishImport(importDataUri);
});
alert.setPositiveButton(getString(R.string.finish), (dialog, which) -> {
dialog.dismiss();
manager.loadSharedPreferences(PreferenceManager
.getDefaultSharedPreferences(requireContext()));
finishImport();
.getDefaultSharedPreferences(requireContext()));
finishImport(importDataUri);
});
alert.show();
} else {
finishImport();
finishImport(importDataUri);
}
} catch (final Exception e) {
ErrorActivity.reportUiErrorInSnackbar(this, "Importing database", e);
@ -250,10 +252,12 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
/**
* Save import path and restart system.
*
* @param importDataUri The import path to save
*/
private void finishImport() {
// save import path only on success; save immediately because app is about to exit
saveLastImportExportDataUri(true);
private void finishImport(final Uri importDataUri) {
// save import path only on success
saveLastImportExportDataUri(importDataUri);
// restart app to properly load db
NavigationHelper.restartApp(requireActivity());
}
@ -263,16 +267,9 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
return isBlank(path) ? null : Uri.parse(path);
}
private void saveLastImportExportDataUri(final boolean immediately) {
if (lastImportExportDataUri != null) {
final SharedPreferences.Editor editor = defaultPreferences.edit()
.putString(importExportDataPathKey, lastImportExportDataUri.toString());
if (immediately) {
// noinspection ApplySharedPref
editor.commit(); // app about to be restarted, commit immediately
} else {
editor.apply();
}
}
private void saveLastImportExportDataUri(final Uri importExportDataUri) {
final SharedPreferences.Editor editor = defaultPreferences.edit()
.putString(importExportDataPathKey, importExportDataUri.toString());
editor.apply();
}
}

View File

@ -12,7 +12,6 @@ import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RadioButton;
@ -35,6 +34,7 @@ import com.grack.nanojson.JsonStringWriter;
import com.grack.nanojson.JsonWriter;
import org.schabi.newpipe.R;
import org.schabi.newpipe.databinding.DialogEditTextBinding;
import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.util.PeertubeHelper;
@ -207,20 +207,22 @@ public class PeertubeInstanceListFragment extends Fragment {
}
private void showAddItemDialog(final Context c) {
final EditText urlET = new EditText(c);
urlET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
urlET.setHint(R.string.peertube_instance_add_help);
final AlertDialog dialog = new AlertDialog.Builder(c)
final DialogEditTextBinding dialogBinding
= DialogEditTextBinding.inflate(getLayoutInflater());
dialogBinding.dialogEditText.setInputType(
InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
dialogBinding.dialogEditText.setHint(R.string.peertube_instance_add_help);
new AlertDialog.Builder(c)
.setTitle(R.string.peertube_instance_add_title)
.setIcon(R.drawable.place_holder_peertube)
.setView(dialogBinding.getRoot())
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.finish, (dialog1, which) -> {
final String url = urlET.getText().toString();
final String url = dialogBinding.dialogEditText.getText().toString();
addInstance(url);
})
.create();
dialog.setView(urlET, 50, 0, 50, 0);
dialog.show();
.show();
}
private void addInstance(final String url) {

View File

@ -8,6 +8,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -15,6 +16,7 @@ import androidx.documentfile.provider.DocumentFile;
import com.nononsenseapps.filepicker.Utils;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.settings.NewPipeSettings;
import org.schabi.newpipe.util.FilePickerActivityHelper;
@ -27,6 +29,9 @@ import us.shandian.giga.io.FileStream;
import us.shandian.giga.io.FileStreamSAF;
public class StoredFileHelper implements Serializable {
private static final boolean DEBUG = MainActivity.DEBUG;
private static final String TAG = StoredFileHelper.class.getSimpleName();
private static final long serialVersionUID = 0L;
public static final String DEFAULT_MIME = "application/octet-stream";
@ -285,7 +290,13 @@ public class StoredFileHelper implements Serializable {
}
public boolean existsAsFile() {
if (source == null) {
if (source == null || (docFile == null && ioFile == null)) {
if (DEBUG) {
Log.d(TAG, "existsAsFile called but something is null: source = ["
+ (source == null ? "null => storage is invalid" : source)
+ "], docFile = [" + (docFile == null ? "null" : docFile)
+ "], ioFile = [" + (ioFile == null ? "null" : ioFile) + "]");
}
return false;
}

View File

@ -56,5 +56,10 @@ public final class ImageDisplayConstants {
.showImageOnFail(R.drawable.dummy_thumbnail_playlist)
.build();
public static final DisplayImageOptions DISPLAY_SEEKBAR_PREVIEW_OPTIONS =
new DisplayImageOptions.Builder()
.cloneFrom(BASE_DISPLAY_IMAGE_OPTIONS)
.build();
private ImageDisplayConstants() { }
}

View File

@ -350,13 +350,13 @@ public final class NavigationHelper {
final boolean switchingPlayers) {
final boolean autoPlay;
@Nullable final MainPlayer.PlayerType playerType = PlayerHolder.getType();
@Nullable final MainPlayer.PlayerType playerType = PlayerHolder.getInstance().getType();
if (playerType == null) {
// no player open
autoPlay = PlayerHelper.isAutoplayAllowedByUser(context);
} else if (switchingPlayers) {
// switching player to main player
autoPlay = PlayerHolder.isPlaying(); // keep play/pause state
autoPlay = PlayerHolder.getInstance().isPlaying(); // keep play/pause state
} else if (playerType == MainPlayer.PlayerType.VIDEO) {
// opening new stream while already playing in main player
autoPlay = PlayerHelper.isAutoplayAllowedByUser(context);

View File

@ -9,6 +9,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
import org.schabi.newpipe.local.dialog.PlaylistCreationDialog;
import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.player.MainPlayer;
import org.schabi.newpipe.player.helper.PlayerHolder;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
@ -18,6 +19,8 @@ import org.schabi.newpipe.util.external_communication.ShareUtils;
import java.util.Collections;
import java.util.List;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import static org.schabi.newpipe.player.MainPlayer.PlayerType.AUDIO;
import static org.schabi.newpipe.player.MainPlayer.PlayerType.POPUP;
@ -39,7 +42,7 @@ public enum StreamDialogEntry {
* Info: Add this entry within showStreamDialog.
*/
enqueue(R.string.enqueue_stream, (fragment, item) -> {
final MainPlayer.PlayerType type = PlayerHolder.getType();
final MainPlayer.PlayerType type = PlayerHolder.getInstance().getType();
if (type == AUDIO) {
NavigationHelper.enqueueOnBackgroundPlayer(fragment.getContext(),
@ -92,9 +95,17 @@ public enum StreamDialogEntry {
item.getThumbnailUrl())),
open_in_browser(R.string.open_in_browser, (fragment, item) ->
ShareUtils.openUrlInBrowser(fragment.getContext(), item.getUrl()));
ShareUtils.openUrlInBrowser(fragment.getContext(), item.getUrl())),
mark_as_watched(R.string.mark_as_watched, (fragment, item) -> {
new HistoryRecordManager(fragment.getContext())
.markAsWatched(item)
.onErrorComplete()
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
});
///////////////
// variables //
///////////////

View File

@ -324,17 +324,40 @@ public final class ThemeHelper {
}
/**
* Calculates the number of grid items that can fit horizontally on the screen. The width of a
* grid item is obtained from the thumbnail width plus the right and left paddings.
* Calculates the number of grid channel info items that can fit horizontally on the screen.
*
* @param context the context to use
* @return the span count of grid channel info items
*/
public static int getGridSpanCountChannels(final Context context) {
return getGridSpanCount(context,
context.getResources().getDimensionPixelSize(R.dimen.channel_item_grid_min_width));
}
/**
* Calculates the number of grid stream info items that can fit horizontally on the screen. The
* width of a grid stream info item is obtained from the thumbnail width plus the right and left
* paddings.
*
* @param context the context to use
* @return the span count of grid stream info items
*/
public static int getGridSpanCountStreams(final Context context) {
final Resources res = context.getResources();
return getGridSpanCount(context,
res.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width)
+ res.getDimensionPixelSize(R.dimen.video_item_search_padding) * 2);
}
/**
* Calculates the number of grid items that can fit horizontally on the screen based on the
* minimum width.
*
* @param context the context to use
* @param minWidth the minimum width of items in the grid
* @return the span count of grid list items
*/
public static int getGridSpanCount(final Context context) {
final Resources res = context.getResources();
final int minWidth
= res.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width)
+ res.getDimensionPixelSize(R.dimen.video_item_search_padding) * 2;
return Math.max(1, res.getDisplayMetrics().widthPixels / minWidth);
public static int getGridSpanCount(final Context context, final int minWidth) {
return Math.max(1, context.getResources().getDisplayMetrics().widthPixels / minWidth);
}
}

View File

@ -664,7 +664,7 @@ public class DownloadMission extends Mission {
* @return {@code true}, if storage is invalid and cannot be used
*/
public boolean hasInvalidStorage() {
return errCode == ERROR_PROGRESS_LOST || storage == null || storage.isInvalid() || !storage.existsAsFile();
return errCode == ERROR_PROGRESS_LOST || storage == null || !storage.existsAsFile();
}
/**

View File

@ -149,7 +149,7 @@ public class DownloadManager {
if (sub.getName().equals(".tmp")) continue;
DownloadMission mis = Utility.readFromFile(sub);
if (mis == null || mis.isFinished()) {
if (mis == null || mis.isFinished() || mis.hasInvalidStorage()) {
//noinspection ResultOfMethodCallIgnored
sub.delete();
continue;

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FF5252"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#E53935"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/>
</vector>

View File

@ -103,8 +103,8 @@
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_close"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded" />
<LinearLayout
@ -189,8 +189,8 @@
android:paddingBottom="3dp"
android:scaleType="fitCenter"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_list"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded"
tools:visibility="visible" />
@ -208,8 +208,8 @@
android:paddingBottom="3dp"
android:scaleType="fitCenter"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_format_list_numbered"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded"
tools:visibility="visible" />
@ -222,8 +222,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_expand_more"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded" />
</LinearLayout>
@ -287,8 +287,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_cast"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -302,8 +302,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_language"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -317,8 +317,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_share"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -331,8 +331,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_volume_off"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -345,8 +345,8 @@
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitCenter"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_fullscreen"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded"
tools:visibility="visible" />
@ -354,6 +354,50 @@
</LinearLayout>
<LinearLayout
android:id="@+id/bottomSeekbarPreviewLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/bottomControls"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/seekbarPreviewContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="12dp">
<TextView
android:id="@+id/currentDisplaySeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#60000000"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="2dp"
android:textColor="@android:color/white"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:text="1:06:29"
tools:visibility="visible" />
<ImageView
android:id="@+id/currentSeekbarPreviewThumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:visibility="gone"
app:srcCompat="@drawable/dummy_thumbnail"
tools:visibility="visible" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/bottomControls"
android:layout_width="match_parent"
@ -685,24 +729,6 @@
tools:src="@drawable/ic_brightness_high" />
</RelativeLayout>
<TextView
android:id="@+id/currentDisplaySeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginBottom="58dp"
android:background="#64000000"
android:paddingLeft="30dp"
android:paddingTop="10dp"
android:paddingRight="30dp"
android:paddingBottom="10dp"
android:textColor="@android:color/white"
android:textSize="26sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:text="1:06:29"
tools:visibility="visible" />
</RelativeLayout>
</RelativeLayout>

View File

@ -72,7 +72,7 @@
android:textColor="?attr/colorAccent" />
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp">

View File

@ -2,8 +2,10 @@
<!-- This is used to inflate a chip with a Material theme, otherwise it would crash -->
<!-- Theme.MaterialComponents.DayNight is used to guarantee auto day/night switching -->
<com.google.android.material.chip.Chip xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/Theme.MaterialComponents.DayNight.Bridge"
app:chipMinTouchTargetSize="40dp"
tools:text="I'm a correctly themed chip!" />

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/playlist_name_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:hint="@string/name"
android:importantForAutofill="no"
android:inputType="text"
android:maxLines="1" />
</LinearLayout>

View File

@ -8,14 +8,11 @@
android:paddingRight="@dimen/video_item_search_padding">
<EditText
android:id="@+id/playlist_name"
android:id="@+id/dialogEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="6dp"
android:hint="@string/name"
android:inputType="text"
android:maxLines="1"
android:saveEnabled="true" />
android:maxLines="1" />
</RelativeLayout>

View File

@ -41,6 +41,7 @@
tools:ignore="HardcodedText,UnusedAttribute" />
<TextView
android:id="@+id/empty_state_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"

View File

@ -20,7 +20,7 @@
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_height="match_parent"
android:layout_below="@id/main_tab_layout" />
</RelativeLayout>

View File

@ -602,8 +602,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.9"
android:background="?attr/windowBackground"
android:theme="@style/ContrastTintTheme">
android:background="?attr/windowBackground">
<ImageButton
android:id="@+id/overlay_thumbnail"
@ -628,6 +627,7 @@
android:focusable="true"
android:gravity="center_vertical"
android:orientation="vertical"
android:theme="@style/ContrastTintTheme"
tools:ignore="RtlHardcoded">
<TextView
@ -667,6 +667,7 @@
android:gravity="center_vertical"
android:paddingLeft="@dimen/video_item_search_padding"
android:paddingRight="@dimen/video_item_search_padding"
android:theme="@style/ContrastTintTheme"
tools:ignore="RtlHardcoded">
<ImageButton

View File

@ -4,26 +4,17 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="6dp">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.30" />
android:paddingVertical="6dp">
<TextView
android:id="@+id/metadata_type_view"
android:layout_width="0dp"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:gravity="center_vertical|end"
android:textAllCaps="true"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Licence" />
@ -35,7 +26,7 @@
android:layout_marginStart="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintStart_toEndOf="@+id/metadata_type_view"
app:layout_constraintTop_toTopOf="parent"
tools:text="Description Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum." />

View File

@ -2,45 +2,30 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.30" />
android:layout_height="match_parent"
android:fadeScrollbars="false">
<TextView
android:id="@+id/metadata_type_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_vertical|end"
android:layout_marginTop="8dp"
android:gravity="center"
android:text="@string/metadata_tags"
android:textAllCaps="true"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<HorizontalScrollView
android:layout_width="0dp"
<com.google.android.material.chip.ChipGroup
android:id="@+id/metadata_tags_chips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="-8dp"
android:layout_marginBottom="-8dp"
android:fadeScrollbars="false"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/metadata_type_view" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/metadata_tags_chips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.MaterialComponents.Chip"
app:singleLine="true" />
</HorizontalScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -71,6 +71,18 @@
tools:ignore="RtlHardcoded"
tools:text="12M" />
<ImageView
android:id="@+id/detail_heart_image_view"
android:layout_width="@dimen/video_item_detail_heart_image_size"
android:layout_height="@dimen/video_item_detail_heart_image_size"
android:layout_below="@id/itemCommentContentView"
android:layout_marginLeft="@dimen/video_item_detail_heart_margin"
android:layout_toRightOf="@+id/detail_thumbs_up_count_view"
android:contentDescription="@string/detail_heart_img_view_description"
android:visibility="gone"
tools:visibility="visible"
app:srcCompat="@drawable/ic_heart" />
<!--we can uncomment below code if we need dislike button and count in future-->
@ -105,7 +117,7 @@
android:layout_height="wrap_content"
android:layout_below="@id/itemCommentContentView"
android:layout_marginLeft="12dp"
android:layout_toRightOf="@id/detail_thumbs_up_count_view"
android:layout_toRightOf="@id/detail_heart_image_view"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="@dimen/video_item_search_upload_date_text_size"

View File

@ -1,6 +1,6 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include

View File

@ -101,8 +101,8 @@
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_close"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded" />
<LinearLayout
@ -191,8 +191,8 @@
android:paddingBottom="3dp"
android:scaleType="fitCenter"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_list"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -209,8 +209,8 @@
android:paddingBottom="3dp"
android:scaleType="fitCenter"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_format_list_numbered"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -222,8 +222,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_expand_more"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded" />
</LinearLayout>
@ -286,8 +286,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_cast"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -301,8 +301,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_language"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -316,8 +316,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_share"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -330,8 +330,8 @@
android:focusable="true"
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitXY"
app:tint="@color/white"
app:srcCompat="@drawable/ic_volume_off"
app:tint="@color/white"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatImageButton
@ -344,8 +344,8 @@
android:padding="@dimen/player_main_buttons_padding"
android:scaleType="fitCenter"
android:visibility="gone"
app:tint="@color/white"
app:srcCompat="@drawable/ic_fullscreen"
app:tint="@color/white"
tools:ignore="ContentDescription,RtlHardcoded"
tools:visibility="visible" />
@ -353,6 +353,50 @@
</LinearLayout>
<LinearLayout
android:id="@+id/bottomSeekbarPreviewLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/bottomControls"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/seekbarPreviewContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="12dp">
<TextView
android:id="@+id/currentDisplaySeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#60000000"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="2dp"
android:textColor="@android:color/white"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:text="1:06:29"
tools:visibility="visible" />
<ImageView
android:id="@+id/currentSeekbarPreviewThumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:visibility="gone"
app:srcCompat="@drawable/dummy_thumbnail"
tools:visibility="visible" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/bottomControls"
android:layout_width="match_parent"
@ -681,24 +725,6 @@
tools:src="@drawable/ic_brightness" />
</RelativeLayout>
<TextView
android:id="@+id/currentDisplaySeek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginBottom="58dp"
android:background="#64000000"
android:paddingLeft="30dp"
android:paddingTop="10dp"
android:paddingRight="30dp"
android:paddingBottom="10dp"
android:textColor="@android:color/white"
android:textSize="26sp"
android:textStyle="bold"
android:visibility="gone"
tools:ignore="RtlHardcoded"
tools:text="1:06:29"
tools:visibility="visible" />
</RelativeLayout>
</RelativeLayout>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/channel_header_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -8,25 +8,28 @@
<TextView
android:id="@+id/next_stream_title"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/autoplay_switch"
android:layout_marginLeft="12dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/exo_controls_next_description"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="12sp"
tools:ignore="RtlHardcoded" />
android:textSize="13sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/autoplay_switch"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Switch
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/autoplay_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:paddingRight="5dp"
android:switchPadding="5dp"
android:layout_marginEnd="16dp"
android:text="@string/auto_queue_toggle"
android:textColor="@android:color/tab_indicator_text"
android:textSize="12sp" />
android:textSize="13sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -55,7 +55,7 @@
<string name="general_error">خطأ</string>
<string name="parsing_error">تعذر تحليل الموقع</string>
<string name="youtube_signature_deobfuscation_error">تعذر فك تشفير توقيع رابط الفيديو</string>
<string name="main_bg_subtitle">اضغط على ايقونة البحث للبدء.</string>
<string name="main_bg_subtitle">اضغط على عدسة المكبرة للبدء.</string>
<string name="subscribe_button_title">اشتراك</string>
<string name="subscribed_button_title">مشترك</string>
<string name="tab_main">الرئيسية</string>
@ -750,5 +750,12 @@
<string name="off">إيقاف</string>
<string name="on">تشغيل</string>
<string name="tablet_mode_title">وضع الجهاز اللوحي</string>
<string name="feed_toggle_show_played_items">إظهار العناصر التي تم تشغيلها</string>
<string name="feed_toggle_show_played_items">إظهار العناصر التي تمت مشاهدتها</string>
<string name="comments_are_disabled">تم تعطيل التعليقات</string>
<string name="dont_show">لا تظهر</string>
<string name="low_quality_smaller">جودة منخفضة (أصغر)</string>
<string name="high_quality_larger">جودة عالية (أكبر)</string>
<string name="seekbar_preview_thumbnail_title">معاينة مصغرة على شريط التمرير</string>
<string name="mark_as_watched">علّمه كفيديو تمت مشاهدته</string>
<string name="detail_heart_img_view_description">اعجب بها منشئ المحتوى</string>
</resources>

View File

@ -37,7 +37,7 @@
<string name="later">稍后</string>
<string name="network_error">网络错误</string>
<plurals name="videos">
<item quantity="other">%s 视频</item>
<item quantity="other">%s 视频</item>
</plurals>
<string name="disabled">禁用</string>
<string name="controls_background_title">后台播放</string>
@ -106,7 +106,7 @@
<string name="msg_exists">文件已存在</string>
<string name="msg_running_detail">点击了解详情</string>
<string name="msg_wait">请稍候…</string>
<string name="msg_copied">复制至剪贴板</string>
<string name="msg_copied">已复制到剪贴板</string>
<string name="controls_popup_title">悬浮窗播放</string>
<string name="title_activity_about">关于 NewPipe</string>
<string name="action_settings">设置</string>
@ -126,7 +126,7 @@
<string name="search_no_results">没有结果</string>
<string name="no_subscribers">无人订阅</string>
<plurals name="subscribers">
<item quantity="other">%s 人订阅</item>
<item quantity="other">%s 位订阅者</item>
</plurals>
<string name="no_videos">无视频</string>
<string name="detail_drag_description">拖动以重新排序</string>
@ -259,20 +259,20 @@
<string name="no_channel_subscribed_yet">尚未订阅频道</string>
<string name="select_a_kiosk">选择一个时下流行页</string>
<string name="kiosk">『时下流行』</string>
<string name="trending">趋势</string>
<string name="trending">时下流行</string>
<string name="top_50">前 50</string>
<string name="new_and_hot">最新与热门</string>
<string name="show_hold_to_append_title">显示“长按添加”说明</string>
<string name="show_hold_to_append_summary">在视频详情页中,长按背景播放或悬浮窗播放按钮时显示提示</string>
<string name="background_player_append">已加入后台播放播放列</string>
<string name="popup_playing_append">已加入悬浮窗播放列</string>
<string name="show_hold_to_append_summary">在视频详情页中,长按后台播放或悬浮窗播放按钮时显示提示</string>
<string name="background_player_append">已加入后台播放播放</string>
<string name="popup_playing_append">已加入悬浮窗播放</string>
<string name="player_stream_failure">无法播放此串流</string>
<string name="player_unrecoverable_failure">发生无法处理的播放器错误</string>
<string name="player_recoverable_failure">播放器错误 自动恢复</string>
<string name="play_queue_remove">移除</string>
<string name="play_queue_stream_detail">详情</string>
<string name="play_queue_audio_settings">音频设置</string>
<string name="hold_to_append">长按加入播放列</string>
<string name="hold_to_append">长按加入播放</string>
<string name="unknown_content">[未知]</string>
<string name="start_here_on_main">开始在此处开始播放</string>
<string name="start_here_on_background">开始后台播放</string>
@ -340,8 +340,8 @@
<string name="enable_disposed_exceptions_summary">强制报告处理后的未送达的 Activity 或 Fragment 生命周期之外的 Rx 异常</string>
<string name="use_inexact_seek_title">使用快速寻址(不精确)</string>
<string name="use_inexact_seek_summary">快速寻址定位允许播放器以较低精确度为代价换取更快的寻址定位速度。此功能不适用于以 5、15 或 25 秒为隔的寻址定位</string>
<string name="auto_queue_title">自动将“接下来”视频加入播放列</string>
<string name="auto_queue_summary">播放完(非循环)列中的最后一个视频后,自动将一个相关视频添加到当前播放列</string>
<string name="auto_queue_title">自动将“接下来”视频加入播放</string>
<string name="auto_queue_summary">播放完(非循环)列中的最后一个视频后,自动将一个相关视频添加到当前播放</string>
<string name="invalid_directory">没有该文件夹</string>
<string name="invalid_source">无相似文件/内容源</string>
<string name="invalid_file">文件不存在,或缺少读写文件权限</string>
@ -603,12 +603,12 @@
<string name="never">从不</string>
<string name="wifi_only">仅在 Wi-Fi 下</string>
<string name="autoplay_summary">视频开始播放后,自动定位到上次播放时的位置 — %s</string>
<string name="title_activity_play_queue">播放列</string>
<string name="title_activity_play_queue">播放</string>
<string name="unsupported_url_dialog_message">无法识别此 URL。是否用其他应用打开\?</string>
<string name="auto_queue_toggle">自动加入播放列</string>
<string name="clear_queue_confirmation_description">当前播放列将被替换</string>
<string name="clear_queue_confirmation_summary">从一个播放器切换到另一个播放器后,你的播放列可能会被替换</string>
<string name="clear_queue_confirmation_title">清空播放列前再次确认</string>
<string name="auto_queue_toggle">自动加入播放</string>
<string name="clear_queue_confirmation_description">当前播放列将被替换</string>
<string name="clear_queue_confirmation_summary">从一个播放器切换到另一个播放器后,你的播放列可能会被替换</string>
<string name="clear_queue_confirmation_title">清空播放列前再次确认</string>
<string name="notification_action_nothing"></string>
<string name="notification_action_buffering">正在缓冲</string>
<string name="notification_action_shuffle">随机播放</string>
@ -624,8 +624,8 @@
<string name="notification_scale_to_square_image_title">强制缩放缩略图至 1:1 比例</string>
<string name="settings_category_notification_title">通知</string>
<string name="show_memory_leaks">显示内存泄漏</string>
<string name="enqueued">已加入队列</string>
<string name="enqueue_stream">加入队列</string>
<string name="enqueued">已加入播放队列</string>
<string name="enqueue_stream">加入播放队列</string>
<string name="clear_cookie_summary">清空与本地存储的 reCAPTCHA 验证码有关的 cookie</string>
<string name="recaptcha_cookies_cleared">reCAPTCHA cookie 已被清空</string>
<string name="clear_cookie_title">清空 reCAPTCHA cookie</string>
@ -698,8 +698,14 @@
<string name="downloads_storage_ask_summary_no_saf_notice">你会被问到在哪里保存每个下载</string>
<string name="no_dir_yet">尚未设置下载文件夹,现在选择默认下载文件夹</string>
<string name="tablet_mode_title">平板模式</string>
<string name="feed_toggle_show_played_items">显示已播放的项目</string>
<string name="item_in_history">历史条目</string>
<string name="feed_toggle_show_played_items">显示已观看的项目</string>
<string name="off">关闭</string>
<string name="on">开启</string>
<string name="comments_are_disabled">评论功能已禁用</string>
<string name="seekbar_preview_thumbnail_title">进度条缩略图预览</string>
<string name="dont_show">不显示</string>
<string name="low_quality_smaller">低品质(较小)</string>
<string name="high_quality_larger">高品质(较大)</string>
<string name="detail_heart_img_view_description">被创作者喜爱</string>
<string name="mark_as_watched">标记为已观看</string>
</resources>

View File

@ -1,25 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_bg_subtitle">Докоснете търсачката, за да започнете</string>
<string name="main_bg_subtitle">Докоснете лупата, за да започнете</string>
<string name="view_count_text">%1$s гледания</string>
<string name="upload_date_text">Публикувано на %1$s</string>
<string name="no_player_found">Не е намерен стрийм плейър. Желаете ли да инсталирате VLC?</string>
<string name="install">Инсталирай</string>
<string name="cancel">Отмени</string>
<string name="open_in_browser">Отвори в браузър</string>
<string name="open_in_popup_mode">Отвори в прозорец</string>
<string name="share">Сподели</string>
<string name="download">Изтегли</string>
<string name="search">Търси</string>
<string name="no_player_found">Не е намерен стрийм плейър. Инсталиране на VLC\?</string>
<string name="install">Инсталиране</string>
<string name="cancel">Отмяна</string>
<string name="open_in_browser">Отваряне в браузър</string>
<string name="open_in_popup_mode">Отваряне в прозорец</string>
<string name="share">Споделяне</string>
<string name="download">Изтегляне</string>
<string name="search">Търсене</string>
<string name="settings">Настройки</string>
<string name="did_you_mean">Може би имахте предвид „%1$s“\?</string>
<string name="share_dialog_title">Сподели с</string>
<string name="choose_browser">Избери браузър</string>
<string name="share_dialog_title">Споделяне с</string>
<string name="choose_browser">Избиране на браузър</string>
<string name="screen_rotation">ориентация</string>
<string name="use_external_video_player_title">Използвай външен видео плейър</string>
<string name="use_external_video_player_title">Използване на външен видео плейър</string>
<string name="use_external_video_player_summary">Премахва аудиото при някои резолюции</string>
<string name="use_external_audio_player_title">Използвай външен аудио плейър</string>
<string name="popup_mode_share_menu_title">NewPipe в прозорец</string>
<string name="use_external_audio_player_title">Използване на външен аудио плейър</string>
<string name="popup_mode_share_menu_title">Режим на прозорец</string>
<string name="subscribe_button_title">Абониране</string>
<string name="subscribed_button_title">Абониран</string>
<string name="channel_unsubscribed">Премахнат абонамент за канала</string>
@ -27,11 +27,11 @@
<string name="subscription_update_failed">Неуспешно обновление на абонамента</string>
<string name="tab_subscriptions">Абонаменти</string>
<string name="fragment_feed_title">Обновления</string>
<string name="controls_background_title">Във фонов режим</string>
<string name="controls_background_title">Фонов режим</string>
<string name="controls_popup_title">В прозорец</string>
<string name="download_path_title">Директория за изтегляне на видео</string>
<string name="download_path_summary">Папка за съхранение на изтеглените видеота</string>
<string name="download_path_dialog_title">Въведете път за съхранение на изтеглените видеота</string>
<string name="download_path_summary">Папка за съхранение на изтеглените клипове</string>
<string name="download_path_dialog_title">Въведете път за съхранение на изтеглените клипове</string>
<string name="download_path_audio_title">Директория за изтегляне на аудио</string>
<string name="download_path_audio_summary">Папка за съхранение на изтеглено аудио</string>
<string name="download_path_audio_dialog_title">Въведете папка за изтегляния на аудио файлове</string>
@ -42,7 +42,7 @@
<string name="show_higher_resolutions_title">Покажи по-високи резолюции</string>
<string name="show_higher_resolutions_summary">Само някои устройства могат да възпроизвеждат 2K/4K видео</string>
<string name="play_with_kodi_title">Въпроизвеждане с Kodi</string>
<string name="kore_not_found">Приложението „Kore“ не е намерено. Желаете ли да го инсталирате?</string>
<string name="kore_not_found">Инсталиране на липсващото приложение \"Kore\"\?</string>
<string name="show_play_with_kodi_title">Покажи „Възпроизвеждане с Kodi“</string>
<string name="show_play_with_kodi_summary">Показване на опция за възпроизвеждане на видео чрез „Kodi media center“</string>
<string name="play_audio">Аудио</string>
@ -62,7 +62,7 @@
<string name="enable_search_history_summary">Съхранявай заявките за търсене локално</string>
<string name="enable_watch_history_title">История на гледане</string>
<string name="enable_watch_history_summary">Запаметявай кои видеота са гледани</string>
<string name="resume_on_audio_focus_gain_title">Възобнови при връщане на фокус</string>
<string name="resume_on_audio_focus_gain_title">Възобновяване</string>
<string name="resume_on_audio_focus_gain_summary">Продължавай възпроизвеждането след прекъсване (например телефонно обаждане)</string>
<string name="download_dialog_title">Изтегли</string>
<string name="show_next_and_similar_title">Показвай „следващ“ и „подобни“</string>
@ -182,11 +182,11 @@
<string name="tab_licenses">Лицензи</string>
<string name="app_description">Безплатно и леко поточно предаване за Android.</string>
<string name="view_on_github">Виж в GitHub</string>
<string name="controls_download_desc">Изтегли стрийм файл</string>
<string name="controls_download_desc">Изтегляне на стрийм файл</string>
<string name="show_info">Покажи инфо</string>
<string name="tab_main">Главен</string>
<string name="tab_main">Главна</string>
<string name="tab_bookmarks">Отметнати плейлисти</string>
<string name="controls_add_to_playlist_title">Добави към</string>
<string name="controls_add_to_playlist_title">Добавяне към</string>
<string name="use_inexact_seek_title">Използвай бързо, но неточно превъртане</string>
<string name="use_inexact_seek_summary">Неточното превъртане позволява на плейъра да превърта кадри по-бързо, с намалена прецизност</string>
<string name="download_thumbnail_title">Зареждай миниатюри</string>
@ -399,7 +399,7 @@
<string name="file_deleted">Файлът е изтрит</string>
<string name="events">Събития</string>
<string name="show_comments_title">Показвай коментари</string>
<string name="show_comments_summary">Деактивиране за скриване на коментарите</string>
<string name="show_comments_summary">Изключване за скриване на коментарите</string>
<string name="autoplay_title">Автоматично пускане</string>
<string name="tab_new">Нов раздел</string>
<string name="tab_choose">Избери раздел</string>
@ -419,4 +419,14 @@
</plurals>
<string name="no_one_watching">Няма зрители</string>
<string name="clear_playback_states_summary">Изтрива всички позиции на възпроизвеждане</string>
<string name="unsupported_url_dialog_message">URL адресът не можа да бъде разпознат. Да се отвори ли с друго приложение\?</string>
<string name="show_description_title">Показване на описание</string>
<string name="night_theme_title">Нощна тема</string>
<string name="notification_colorize_title">Оцветяване на известие</string>
<string name="notification_action_nothing">Нищо</string>
<string name="notification_action_shuffle">Разбъркване</string>
<string name="notification_action_repeat">Повторение</string>
<string name="open_with">Отваряне с</string>
<string name="notification_scale_to_square_image_title">Миниатюра 1:1</string>
<string name="download_choose_new_path">Променете папките за изтегляне за да има резултат</string>
</resources>

View File

@ -397,4 +397,16 @@
<string name="website_encouragement">আরও তথ্য এবং খবরের জন্য নিউপাইপ ওয়েবসাইট দেখো।</string>
<string name="open_with">দিয়ে খুলো</string>
<string name="comments_tab_description">মতামত</string>
<string name="off">বন্ধ</string>
<string name="on">চালু</string>
<string name="tablet_mode_title">ট্যাবলেট মোড</string>
<string name="open_website_license">সক্রিয় ওয়েবসাইট</string>
<string name="metadata_privacy_private">গোপন</string>
<string name="metadata_privacy_unlisted">নথিভুক্ত নয়</string>
<string name="metadata_support">সহায়তা</string>
<string name="metadata_category">প্রকারভেদ</string>
<string name="metadata_privacy_internal">অভ্যন্তরীন</string>
<string name="metadata_language">ভাষা</string>
<string name="metadata_age_limit">বয়স সীমা</string>
<string name="main_page_content">প্রধান পাতার উপাদান সমূহ</string>
</resources>

File diff suppressed because it is too large Load Diff

View File

@ -680,7 +680,7 @@
<string name="youtube_music_premium_content">Toto video je dostupné jen členům YouTube Music Premium, a tak je NewPipe nemůže stáhnout ani přehrát.</string>
<string name="private_content">Tento obsah je soukromý, a tak jej NewPipe nemůže stáhnout ani přehrát.</string>
<string name="soundcloud_go_plus_content">Toto je stopa SoundCloud Go+, přinejmenším ve Vaší zemi, a tak ji NewPipe nemůže stáhnout ani přehrát.</string>
<string name="georestricted_content">Tento obsah není ve Vaší zemi k dispozici.</string>
<string name="georestricted_content">Tento obsah není ve vaší zemi dostupný.</string>
<string name="show_channel_details">Zobrazit podrobnosti kanálu</string>
<string name="recaptcha_solve">Vyřešit</string>
<string name="restricted_video_no_stream">Toto video je věkově omezeno.
@ -721,4 +721,11 @@
<string name="on">Zapnuto</string>
<string name="tablet_mode_title">Režim tabletu</string>
<string name="feed_toggle_show_played_items">Ukázat přehrané položky</string>
<string name="dont_show">Nezobrazovat</string>
<string name="low_quality_smaller">Nízká kvalita (menší)</string>
<string name="high_quality_larger">Vysoká kvalita (větší)</string>
<string name="seekbar_preview_thumbnail_title">Náhled miniatur na vyhledávací liště</string>
<string name="comments_are_disabled">Komentáře jsou vypnuty</string>
<string name="detail_heart_img_view_description">Srdíčko od tvůrce</string>
<string name="mark_as_watched">Označit jako zhlédnuté</string>
</resources>

View File

@ -2,7 +2,7 @@
<resources>
<string name="view_count_text">%1$s Aufrufe</string>
<string name="upload_date_text">Veröffentlicht am %1$s</string>
<string name="no_player_found">Kein Stream-Player gefunden. VLC installieren\?</string>
<string name="no_player_found">Kein Stream-Player gefunden. Möchtest du VLC installieren\?</string>
<string name="install">Installieren</string>
<string name="cancel">Abbrechen</string>
<string name="open_in_browser">Im Browser öffnen</string>
@ -422,6 +422,10 @@
<string name="grid">Raster</string>
<string name="auto">Automatisch</string>
<string name="switch_view">Ansicht wechseln</string>
<string name="seekbar_preview_thumbnail_title">Vorschaubild der Suchleiste</string>
<string name="high_quality_larger">Hohe Qualität (größer)</string>
<string name="low_quality_smaller">Niedrige Qualität (kleiner)</string>
<string name="dont_show">Nicht anzeigen</string>
<string name="app_update_notification_content_title">Eine NewPipe-Aktualisierung ist verfügbar!</string>
<string name="app_update_notification_content_text">Zum Herunterladen antippen</string>
<string name="missions_header_finished">Fertig</string>
@ -462,6 +466,7 @@
<string name="show_comments_summary">Ausschalten, um Kommentare auszublenden</string>
<string name="autoplay_title">Automatische Wiedergabe</string>
<string name="no_comments">Keine Kommentare</string>
<string name="comments_are_disabled">Kommentare sind deaktiviert</string>
<string name="error_unable_to_load_comments">Kommentare konnten nicht geladen werden</string>
<string name="close">Schließen</string>
<string name="enable_playback_resume_title">Wiedergabe fortsetzen</string>
@ -685,7 +690,7 @@
<string name="metadata_age_limit">Altersbeschränkung</string>
<string name="metadata_privacy">Sichtbarkeit</string>
<string name="metadata_licence">Lizenz</string>
<string name="metadata_tags">Tags</string>
<string name="metadata_tags">Schlagwörter</string>
<string name="metadata_category">Kategorie</string>
<string name="metadata_privacy_unlisted">Nicht gelistet</string>
<string name="metadata_thumbnail_url">Vorschaubild-URL</string>
@ -710,5 +715,7 @@
<string name="on">An</string>
<string name="tablet_mode_title">Tablet-Modus</string>
<string name="off">Aus</string>
<string name="feed_toggle_show_played_items">Abgespielte Elemente anzeigen</string>
<string name="feed_toggle_show_played_items">Angesehene Elemente anzeigen</string>
<string name="mark_as_watched">Als gesehen markieren</string>
<string name="detail_heart_img_view_description"></string>
</resources>

View File

@ -107,8 +107,8 @@
<string name="default_popup_resolution_title">Προεπιλεγμένη ανάλυση αναδυόμενου παραθύρου</string>
<string name="show_higher_resolutions_title">Εμφάνιση υψηλότερων αναλύσεων</string>
<string name="default_video_format_title">Προεπιλεγμένη μορφή βίντεο</string>
<string name="popup_remember_size_pos_title">Ενθύμιση ιδιοτήτωναναδυόμενου παραθύρου</string>
<string name="popup_remember_size_pos_summary">Ενθύμιση του τελευταίου μεγέθους και θέσης του παραθύρου</string>
<string name="popup_remember_size_pos_title">Ενθύμηση ιδιοτήτων αναδυόμενου παραθύρου</string>
<string name="popup_remember_size_pos_summary">Ενθύμηση του τελευταίου μεγέθους και θέσης του παραθύρου</string>
<string name="use_inexact_seek_title">Χρήση γρήγορης ανακριβούς αναζήτησης</string>
<string name="use_inexact_seek_summary">Η μην ακριβής αναζήτηση επιτρέπει στην εφαρμογή να αναζητεί θέσεις στο βίντεο γρηγορότερα με μειωμένη ακρίβεια. Δε λειτουργεί για διαστήματα των 5, 15 ή 25 δευτερολέπτων</string>
<string name="download_thumbnail_title">Φόρτωση μικρογραφιών</string>
@ -711,5 +711,11 @@
<string name="on">Ενεργό</string>
<string name="tablet_mode_title">Κατάσταση tablet</string>
<string name="feed_toggle_show_played_items">Εμφάνιση αναπαραχθέντων</string>
<string name="item_in_history">Στο Ιστορικό</string>
<string name="comments_are_disabled">Τα σχόλια είναι απενεργοποιημένα</string>
<string name="dont_show">Απόκρυψη</string>
<string name="low_quality_smaller">Χαμηλή ποιότητα (μικρότερο)</string>
<string name="high_quality_larger">Υψηλή ποιότητα (μεγαλύτερο)</string>
<string name="seekbar_preview_thumbnail_title">Προεπισκόπηση στην μπάρα αναζήτησης</string>
<string name="mark_as_watched">Σήμανση ως αναπαραχθέν</string>
<string name="detail_heart_img_view_description">Επισημάνθηκε από τον δημιουργό</string>
</resources>

View File

@ -463,7 +463,7 @@
<string name="permission_denied">Ago rifuzita kaŭze de la sistemon</string>
<string name="download_failed">Elŝuto fiaskis!</string>
<string name="download_finished">Elŝuto finita</string>
<string name="download_finished_more">%s elĝutoj finitaj</string>
<string name="download_finished_more">%s elŝutoj finitaj</string>
<string name="generate_unique_name">Generu unikan nomon</string>
<string name="overwrite">Anstataŭigi</string>
<string name="download_already_running">Estas elŝuto en progreso kun ĉi tiu nomo</string>
@ -588,4 +588,28 @@
<string name="notification_colorize_title">farbi sciigon</string>
<string name="notification_action_buffering">Alŝuto</string>
<string name="notification_scale_to_square_image_title">Skali bildeton ĝis 1:1 proportio</string>
<string name="off">Malŝatita</string>
<string name="on">Ŝaltita</string>
<string name="metadata_tags">Etikedoj</string>
<string name="download_has_started">Elŝutado komenciĝis</string>
<string name="service_provides_reason">%s donas tiun kialon:</string>
<string name="georestricted_content">Tiu enaĵo ne disponeblas en via lando.</string>
<string name="recent">Freŝaj</string>
<string name="video_detail_by">De %s</string>
<string name="channel_created_by">Kreita de %s</string>
<string name="open_website_license">Malfermi retejon</string>
<string name="metadata_privacy_internal">Interna</string>
<string name="metadata_privacy_unlisted">Nelistita</string>
<string name="metadata_privacy_private">Privata</string>
<string name="metadata_privacy_public">Publika</string>
<string name="metadata_language">Lingvo</string>
<string name="metadata_age_limit">Limo de aĝo</string>
<string name="metadata_category">Kategorio</string>
<string name="dont_show">Ne montri</string>
<string name="low_quality_smaller">Malalta kvalito (malpli larĝa)</string>
<string name="high_quality_larger">Alta kvalito (pli larĝa)</string>
<string name="never">Neniam</string>
<string name="description_tab_description">Priskribo</string>
<string name="comments_tab_description">Komentoj</string>
<string name="show_description_title">Montri priskribon</string>
</resources>

View File

@ -629,7 +629,7 @@
<string name="notification_action_buffering">Almacenar en memoria (búfer)</string>
<string name="notification_action_repeat">Repetir</string>
<string name="notification_actions_at_most_three">¡Puedes seleccionar como máximo tres acciones para mostrar en la notificación compacta!</string>
<string name="notification_actions_summary">Edita cada acción de la notificación pulsando sobre ella a continuación. Selecciona hasta tres de ellas para mostrarlas en la notificación compacta usando las casillas de verificación a la derecha</string>
<string name="notification_actions_summary">Edita cada acción de la notificación pulsando sobre ella. Selecciona hasta tres de ellas para mostrarlas en la notificación compacta usando las casillas de verificación a la derecha</string>
<string name="notification_action_4_title">Botón de quinta acción</string>
<string name="notification_action_3_title">Botón de cuarta acción</string>
<string name="notification_action_2_title">Botón de tercera acción</string>
@ -649,7 +649,7 @@
<string name="show_thumbnail_summary">Usar miniatura como fondo de pantalla de bloqueo y notificaciones</string>
<string name="show_thumbnail_title">Mostrar vista previa</string>
<string name="show_meta_info_summary">Desactivar para ocultar información adicional sobre el creador o contenido de la transmisión</string>
<string name="show_description_summary">Desactivar para ocultar la descripción del vídeo y la información adicional</string>
<string name="show_description_summary">Desactivar para ocultar la descripción del vídeo e información adicional</string>
<string name="no_app_to_open_intent">Ninguna aplicación en tu dispositivo puede abrir esto</string>
<string name="chapters">Capítulos</string>
<string name="recent">Recientes</string>
@ -674,7 +674,7 @@
<string name="download_has_started">La descarga ha comenzado</string>
<string name="recaptcha_solve">Resolver</string>
<string name="select_night_theme_toast">Puedes seleccionar tu tema nocturno favorito a continuación</string>
<string name="night_theme_title">Tema nocturno</string>
<string name="night_theme_title">Tema de Noche</string>
<string name="night_theme_summary">Selecciona tu tema nocturno favorito — %s</string>
<string name="auto_device_theme_title">Automático (tema del dispositivo)</string>
<string name="show_channel_details">Mostrar detalles del canal</string>
@ -713,5 +713,12 @@
<string name="off">Apagado</string>
<string name="on">Encendido</string>
<string name="tablet_mode_title">Modo tableta</string>
<string name="feed_toggle_show_played_items">Mostrar elementos reproducidos</string>
<string name="feed_toggle_show_played_items">Mostrar elementos vistos</string>
<string name="dont_show">No mostrar</string>
<string name="low_quality_smaller">Baja calidad (más pequeño)</string>
<string name="high_quality_larger">Alta calidad (más grande)</string>
<string name="seekbar_preview_thumbnail_title">Miniatura en barra de desplazamiento</string>
<string name="comments_are_disabled">Los comentarios están deshabilitados</string>
<string name="detail_heart_img_view_description">Valorado por el creador</string>
<string name="mark_as_watched">Marcar como visto</string>
</resources>

View File

@ -133,11 +133,11 @@
<string name="clear_views_history_title">Puhasta vaatamiste ajalugu</string>
<string name="clear_views_history_summary">Kustutab vaadatud voogude ajaloo ja taasesituse asukohad</string>
<string name="delete_view_history_alert">Kas kustutada kogu vaatamiste ajalugu\?</string>
<string name="watch_history_deleted">Vaatamiste ajalugu kustutati.</string>
<string name="watch_history_deleted">Vaatamiste ajalugu kustutati</string>
<string name="clear_search_history_title">Kustuta otsinguajalugu</string>
<string name="clear_search_history_summary">Kustutab otsisõnade ajaloo</string>
<string name="delete_search_history_alert">Kas kustutada kogu otsinguajalugu\?</string>
<string name="search_history_deleted">Otsinguajalugu kustutati.</string>
<string name="search_history_deleted">Otsinguajalugu kustutati</string>
<string name="general_error">Viga</string>
<string name="network_error">Võrgu viga</string>
<string name="could_not_load_thumbnails">Kõiki pisipilte ei õnnestunud laadida</string>
@ -488,7 +488,7 @@
<string name="notification_action_shuffle">Aja segi</string>
<string name="notification_action_repeat">Korda</string>
<string name="notification_actions_at_most_three">Sa saad valida kuni kolm tegevust, mida kuvatakse lühiteavituses!</string>
<string name="notification_actions_summary">Muuda iga teavituse tegevusi sellel toksates. Kuni kolm, mida kuvatakse lühiteavituses, saad valida märkekastidega paremalt.</string>
<string name="notification_actions_summary">Muuda iga teavituse tegevusi sellel toksates. Vali märkekastides paremal kuni kolm teavitust, mida kuvada lühiteates</string>
<string name="notification_action_4_title">Viies tegevusnupp</string>
<string name="notification_action_3_title">Neljas tegevusnupp</string>
<string name="notification_action_2_title">Kolmas tegevusnupp</string>
@ -533,7 +533,7 @@
<string name="hash_channel_description">Teavitused video räsimise edenemise kohta</string>
<string name="youtube_restricted_mode_enabled_title">Võta kasutusele YouTube\'i „Piiratud režiim“</string>
<string name="missing_file">Faili asukoht on muutunud või on ta kustutatud</string>
<string name="watch_history_states_deleted">Taasesituste asukohad on kustutatud.</string>
<string name="watch_history_states_deleted">Taasesituste asukohad on kustutatud</string>
<string name="help">Abiteave</string>
<string name="delete_playback_states_alert">Kas kustutame kõik taasesituste asukohad\?</string>
<string name="clear_playback_states_summary">Kustutab kõik taasesituse käigus salvestatud asukohad</string>
@ -569,7 +569,7 @@
<string name="enqueue_stream">Lisa esitusjärjekorda</string>
<string name="recently_added">Hiljuti lisatud</string>
<string name="local">Kohalikud</string>
<string name="localization_changes_requires_app_restart">Keele muutus jõustub rakenduse uuesti käivitamisel.</string>
<string name="localization_changes_requires_app_restart">Keele muutus jõustub rakenduse uuesti käivitamisel</string>
<string name="error_unable_to_load_comments">Kommentaaride laadimine ei õnnestunud</string>
<string name="no_playlist_bookmarked_yet">Esitusloendi järjehoidjaid veel pole</string>
<string name="select_a_playlist">Vali esitusloend</string>
@ -673,4 +673,49 @@
<string name="playlist_page_summary">Esitusloendite vaade</string>
<string name="downloads_storage_use_saf_summary">„Storage Access Framework“-i ehk süsteemse kaustavalija kasutamisel saad andmeid salvestada ka välisele SD-kaardile</string>
<string name="downloads_storage_use_saf_title">Kasuta süsteemset kaustavalijat (SAF)</string>
<string name="recovering">taastatakse</string>
<string name="dont_show">Ära kuva</string>
<string name="low_quality_smaller">Madalam kvaliteet (väiksem)</string>
<string name="high_quality_larger">Parem kvaliteet (suurem)</string>
<string name="seekbar_preview_thumbnail_title">Otsinguriba pisipildivaates</string>
<string name="show_original_time_ago_summary">Teenuste algne tekstid on nähtavad voo elementides</string>
<string name="show_original_time_ago_title">Kuva elementide algupärane aeg</string>
<string name="comments_are_disabled">Kommentaarid on välja lülitatud</string>
<string name="error_report_open_github_notice">Palun kontrolli kas sinu kogetud krahhi käsitlev vearaport on juba olemas. Luues korduvraporteid võtad meilt aega, mida saaksime kulutada tegelike vigade parandamiseks.</string>
<string name="peertube_instance_add_exists">Instants on juba olemas</string>
<string name="peertube_instance_add_fail">Instantsi valideerimine nurjus</string>
<string name="feed_use_dedicated_fetch_method_summary">Saadaval mõnedes teenustes. See on tavaliselt palju kiirem, kuid võib tagastada piiratud koguse elemente ja sageli osalise informatsiooni (nt. puudub kestus, elemendi tüüp, laiv olek)</string>
<string name="description_select_note">Sa saad nüüd valida kirjelduse tekstist. Pane tähele, et valikurežiimis võib leht vilkuda ja lingid ei pruugi olla klõpsatavd.</string>
<string name="video_detail_by">Autor: %s</string>
<string name="feed_toggle_show_played_items">Kuva vaadatud üksused</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Keela kiire režiim</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Luba kiire režiim</string>
<string name="feed_use_dedicated_fetch_method_title">Hangi võimalusel spetsiaalsest voost</string>
<string name="feed_load_error_fast_unknown">Kiirvoo režiim ei paku selle kohta täiendavat teavet.</string>
<string name="feed_load_error_terminated">Autori konto on lõpetatud.
\nTulevikus ei saa NewPipe seda voogu laadida.
\nKas soovid tühistada selle kanali tellimuse\?</string>
<string name="feed_load_error_account_info">Voo \'%s\' laadimine nurjus.</string>
<string name="feed_load_error">Via voo laadimisel</string>
<string name="feed_update_threshold_option_always_update">Värskenda alati</string>
<string name="feed_update_threshold_summary">Aeg pärast viimast värskendust, mille möödudes loetakse tellimus aegunuks — %s</string>
<string name="feed_update_threshold_title">Voo värskendamise künnis</string>
<string name="settings_category_feed_title">Voog</string>
<string name="choose_instance_prompt">Vali eksemplar</string>
<string name="downloads_storage_use_saf_summary_api_29">Android 10st alates on toetatud ainult salvestusjuurdepääsu raamistik \'Storage Access Framework\'</string>
<string name="downloads_storage_use_saf_summary_api_19">Android KitKat ja vanemad versioonid ei toeta salvestusjuurdepääsu raamistikku \'Storage Access Framework\'</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Sinult küsitakse iga kord, kuhu alla laadimine salvestada</string>
<string name="detail_heart_img_view_description">Südamlik autor</string>
<string name="feed_use_dedicated_fetch_method_help_text">Kas sinu meelest on voo laadimine aeglane\? Sel juhul proovi lubada kiire laadimine (seda saad muuta seadetes või vajutades allolevat nuppu).
\n
\nNewPipe pakub kahte voo laadimise strateegiat:
\n• Tellitud kanali täielik, kuid aeglane hankimine.
\n• Teenuse spetsiaalse lõpp-punkti kasutamine, mis on kiire, kuid tavaliselt mittetäielik.
\n
\nErinevus nende kahe vahel seisneb selles, et kiirel puudub tavaliselt teave, näiteks üksuse pikkus või tüüp (ei saa eristada reaalajas videoid tavalistest) ja see võib tagastada vähem üksusi.
\n
\nYouTube on näide teenusest, mis pakub seda kiirmeetodit oma RSS-vooga.
\n
\nNii et valik taandub sellele, mida eelistad: kiirus või täpne teave.</string>
<string name="mark_as_watched">Märgi vaadatuks</string>
</resources>

View File

@ -690,7 +690,7 @@
<string name="metadata_category">Kategoria</string>
<string name="description_select_disable">Desgaitu bideo deskripzioaren testua hautatzea</string>
<string name="description_select_enable">Bideo deskripzioaren testua hautatzea gaitu</string>
<string name="description_select_note">Orian bideo deskripzioaren barruan testua hautatu dezakezu. Agian hautatzen duzun bitartean, horrialdea keinu egin dezake eta linkak klikatzeko aukera galdu daiteke.</string>
<string name="description_select_note">Orain, testua aukeratu dezakezu deskribapenaren barruan. Kontuan izan orriak begiak kliskatu ditzakeela eta estekak ez direla klikagarriak izango hautaketa moduan dagoen bitartean.</string>
<string name="feed_load_error_terminated">Egilearen kontua itxi da.
\nNewPipe-k ezingo du etorkizunean jario hau kargatu.
\nKanal honetatik harpidetza kendu nahi duzu\?</string>
@ -711,4 +711,9 @@
<string name="metadata_privacy_unlisted">Zerrendatu gabea</string>
<string name="metadata_host">Ostalaria</string>
<string name="metadata_support">Laguntza</string>
<string name="dont_show">Ez da agertzen</string>
<string name="low_quality_smaller">Kalitate txikia (txikiagoa)</string>
<string name="high_quality_larger">Kalitate handia (handiagoa)</string>
<string name="seekbar_preview_thumbnail_title">Seekbarren miniaturen aurrebista</string>
<string name="comments_are_disabled">Iruzkinak desaktibatuta daude</string>
</resources>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_bg_subtitle">برای شروع، «جست‌وجو» را بزنید</string>
<string name="main_bg_subtitle">برای شروع، ذره‌بین را بزنید.</string>
<string name="view_count_text">%1$s مشاهده ها</string>
<string name="upload_date_text">منتشر شده در %1$s</string>
<string name="no_player_found">هیچ پخش‌کنندهٔ جریانی پیدا نشد. مایلید وی‌ال‌سی نصب شود؟</string>
@ -44,7 +44,7 @@
<string name="settings_category_other_title">دیگر</string>
<string name="background_player_playing_toast">در حال پخش در پس‌زمینه</string>
<string name="content">محتوا</string>
<string name="show_age_restricted_content_title">محتوای محدود شده بر اساس سن</string>
<string name="show_age_restricted_content_title">نمایش محتوای محدود شده بر اساس سن</string>
<string name="duration_live">زنده</string>
<string name="downloads">بارگیری‌ها</string>
<string name="downloads_title">بارگیری‌ها</string>
@ -149,7 +149,7 @@
<string name="import_data_title">وارد کردن پایگاه‌داده</string>
<string name="export_data_title">صادرکردن</string>
<string name="import_data_summary">تاریخچه و اشتراک‌های شما بازنویسی خواهند شد</string>
<string name="export_data_summary">صادرکردن تاریخچه، اشتراک‌ها و سیاهه‌های پخش</string>
<string name="export_data_summary">برون‌ریزی پیشینه، اشتراک‌ها، سیاهه‌های پخش و تنظیمات</string>
<string name="clear_views_history_title">پاک‌کردن تاریخچه ویدئوهای دیده‌شده</string>
<string name="import_export_title">وارد/صادر کردن</string>
<string name="import_title">وارد کردن</string>
@ -166,11 +166,11 @@
<string name="minimize_on_exit_none_description">هیچ</string>
<string name="best_resolution">بهترین وضوح</string>
<string name="delete_view_history_alert">تمام تاریخچه نمایش پاک شود؟</string>
<string name="watch_history_deleted">تاریخچه نمایش پاک شد.</string>
<string name="watch_history_deleted">پیشینهٔ مشاهده حذف شد</string>
<string name="clear_search_history_title">پاک‌کردن تاریخچه جستجو</string>
<string name="clear_search_history_summary">تاریخچه کلیدواژه‌های جستجو را پاک می‌کند</string>
<string name="delete_search_history_alert">تمام تاریخچه جستجو پاک شود؟</string>
<string name="search_history_deleted">تاریخچه جستجو پاک شد.</string>
<string name="search_history_deleted">پیشینهٔ جست‌جو حذف شد</string>
<string name="could_not_load_image">ناتوانی در بارگذاری تصویر</string>
<string name="player_stream_failure">ناتوانی در پخش این جریان</string>
<string name="invalid_url_toast">نشانی نامعتبر</string>
@ -266,8 +266,8 @@
<string name="delete_playlist">پاک‌کردن</string>
<string name="rename_playlist">تغییر نام</string>
<string name="name">نام</string>
<string name="append_playlist">افزودن به فهرست پخش</string>
<string name="set_as_playlist_thumbnail">استفاده به عنوان تصویر فهرست پخش</string>
<string name="append_playlist">افزودن به سیاههٔ پخش</string>
<string name="set_as_playlist_thumbnail">تنظیم برای تصویر سیاههٔ پخش</string>
<string name="delete_playlist_prompt">این فهرست پخش پاک شود؟</string>
<string name="playlist_creation_success">فهرست پخش ایجاد شد</string>
<string name="playlist_add_stream_success">به فهرست پخش افزوده شد</string>
@ -331,7 +331,7 @@
<string name="resume_on_audio_focus_gain_title">پخش ادامه یابد</string>
<string name="enable_search_history_summary">ذخیره محلی نتایج جستجو</string>
<string name="auto_queue_summary">صف پخش در حال پایان (بدون تکرار) را با افزودن یک جریان مرتبط ادامه دهید</string>
<string name="download_thumbnail_summary">برای جلوگیری از بارگیری تصاویر بندانگشتی و ذخیره فضای ذخیره‌سازی و مصرف داده، خاموش کنید. تغییرات باعث پاک شدن حافظه نهان تصاویر روی حافظه می‌شود.</string>
<string name="download_thumbnail_summary">برای پیش‌گیری از بار کردن بندانگشتی‌ها و ذخیرهٔ داده و فضای ذخیره، خاموش کنید. تغییرات، انبارهٔ تصاویر روی حافظه و دیسک را پاک می‌کند</string>
<string name="enable_playback_resume_title">ادامه پخش</string>
<string name="enable_playback_resume_summary">بازگرداندن آخرین موقعیت پخش</string>
<string name="enable_playback_state_lists_title">موقعیت در فهرست‌ها</string>
@ -350,7 +350,7 @@
<string name="brightness_gesture_control_summary">از اشارات برای کنترل روشنایی استفاده شود</string>
<string name="undo">بازگردانی</string>
<string name="background_player_append">در صف پخش کننده پس‌زمینه قرار گرفت</string>
<string name="info_labels">چه:\\nدرخواست:\\nزبان محتوا:\\nکشور محتوا:\\nزبان برنامه:\\nخدمت:\\nزمان GM\\nبسته:T:\\nنگارش:\\nنگارش س.ع:</string>
<string name="info_labels">چه:\\nدرخواست:\\nزبان محتوا:\\nکشور محتوا:\\nزبان کاره:\\nخدمت:\\nزمان GMT\\nبسته:T:\\nنگارش:\\nنگارش س.ع:</string>
<string name="title_activity_recaptcha">چالش ری‌کپچا</string>
<string name="recaptcha_request_toast">نیاز به چالش ری‌کپچا است</string>
<string name="msg_popup_permission">این مجوز مورد نیاز است
@ -392,7 +392,7 @@
<string name="invalid_file">پرونده موجود نیست و یا مجوز خواندن یا نوشتن روی آن وجود ندارد</string>
<string name="import_file_title">وارد کردن پرونده</string>
<string name="previous_export">صادرکردن قبلی</string>
<string name="import_youtube_instructions">وارد کردن اشتراک‌های یوتیوب با بارگیری پرونده صادرشده:
<string name="import_youtube_instructions">درون‌ریزی اشتراک‌های یوتوب از بیرون‌بری گوگل:
\n
\n۱. به این نشانی بروید: %1$s
\n۲. در صورت نیاز، وارد شوید
@ -413,7 +413,7 @@
<string name="unhook_checkbox">قطع پیوند (ممکن است باعث انحراف شود)</string>
<string name="preferred_open_action_settings_title">ترجیح کنش «باز کردن»</string>
<string name="preferred_open_action_settings_summary">کنش پیش‌فرض در زمان باز کردن محتوا — %s</string>
<string name="caption_setting_description">سبک پس‌زمینه و اندازه متن توضیحات پخش‌کننده را تغییر بده. برای تاثیرگذاری، نیازمند بازراه‌اندازی برنامه است.</string>
<string name="caption_setting_description">تغییر سبک پس‌زمینه و اندازه متن توضیحات پخش‌کننده. برای تأثیر، نیازمند آغاز دوبارهٔ کاره است</string>
<string name="clear_views_history_summary">پاک کردن تاریخچه جریان‌های پخش شه و موقعیت‌های پخش</string>
<string name="app_license">نیوپایپ، یک نرم‌افزار آزاد کپی‌لِفت است: شما می‌توانید از آن استفاده، آن را بررسی کرده و به دیگران بدهید و اگر مایل باشید، بهترش کنید. به طور خاص، شما می‌توانید آن را تحت پروانه عمومی همگانی گنو نسخه ۳ و یا در صورت تمایل بالاتر، که توسط بنیاد نرم‌افزار آزاد منتشر شده تغییر داده و بازنشر دهید.</string>
<string name="privacy_policy_encouragement">حریم شخصی شما برای پروژه نیویایپ بسیاری جدی است. در نتیجه، این برنامه هیچ اطلاعاتی را بدون رضایت شما گردآوری نمی‌کند.
@ -452,7 +452,7 @@
<string name="pause_downloads_on_mobile_desc">این ویژگی زمانی که ارتباط را به داده همراه تغییر می‌دهید مفید است هرچند برخی بارگیری‌ها نمی‌توانند تعلیق شوند</string>
<string name="conferences">کنفرانس‌ها</string>
<string name="close">بستن</string>
<string name="watch_history_states_deleted">موقعیت‌های پخش حذف شدند.</string>
<string name="watch_history_states_deleted">موقعیت‌های پخش حذف شدند</string>
<string name="missing_file">پزونده حذف یا جابجا شده است</string>
<string name="overwrite_unrelated_warning">پرونده‌ای با همین نام وجود دارد</string>
<string name="overwrite_finished_warning">یک پرونده بارگیری شده با همین نام وجود دارد</string>
@ -469,7 +469,7 @@
<string name="pause_downloads">مکث بارگیری‌ها</string>
<string name="downloads_storage_ask_title">محل بارگیری را سوال کن</string>
<string name="downloads_storage_ask_summary">برای هر بارگیری از شما پرسیده خواهد شد که کجا ذخیره شود</string>
<string name="downloads_storage_use_saf_title">استفاده از SAF</string>
<string name="downloads_storage_use_saf_title">استفاده از شاخه‌بردار سامانه (SAF)</string>
<string name="downloads_storage_use_saf_summary">«چارچوب دسترسی حافظه» اجازه دخیره بارگیری‌ها در کارت SD خارجی را می‌دهد.
\nبرخی دستگاه‌ها با این قابلیت سازگاری ندارند</string>
<string name="clear_playback_states_title">حذف موقعیت‌های پخش</string>
@ -545,7 +545,7 @@
<string name="most_liked">مورد پسندترین‌ها</string>
<string name="recently_added">اخیرا اضافه شده</string>
<string name="local">محلی</string>
<string name="localization_changes_requires_app_restart">زبان، با راه‌اندازی مجدد برنامه تغییر خواهد یافت.</string>
<string name="localization_changes_requires_app_restart">با آغاز دوبارهٔ کاره، زبان تغییر خواهد کرد</string>
<string name="default_kiosk_page_summary">کیوسک پیش‌فرض</string>
<string name="recaptcha_done_button">انجام شد</string>
<string name="subtitle_activity_recaptcha">وقتی انجام شد، «Done» یا «انجام شد» را بفشارید</string>
@ -567,7 +567,7 @@
<string name="artists">هنرمندان</string>
<string name="albums">آلبوم‌ها</string>
<string name="songs">موسیقی‌ها</string>
<string name="youtube_restricted_mode_enabled_title">حالت محدودیت یوتیوب</string>
<string name="youtube_restricted_mode_enabled_title">روشن کردن «حالت محدود» یوتوب</string>
<string name="search_showing_result_for">نمایش نتایج برای: %s</string>
<string name="error_report_open_issue_button_text">گزارش روی گیت‌هاب</string>
<string name="error_report_open_github_notice">لطفا بررسی کنید که آیا گفتگویی درباره مشکل‌تان از قبل وجود دارد یا خیر. ایجاد گزارش تکراری، وقتی را از ما می‌گیرد که ما می‌توانستیم صرف رفع مشکلات واقعی کنیم.</string>
@ -595,7 +595,7 @@
\nیوتیوب نمونه‌ای از یک خدمت است که چنین روش سریعی را از طریق خوراک RSS ارائه می‌دهد.
\n
\nدر نتیجه انتخاب به این بر می‌گردد که کدام یک برای‌تان ترجیح داشته باشد: سرعیت یا اطلاعات دقیق.</string>
<string name="feed_use_dedicated_fetch_method_summary">در برخی خدمات دردسترس است، معمولا سریع‌تر است اما ممکن است مواردی محدودتر و اغلب با اطلاعات ناقص (مثلا بدون طول زمان، نوع مورد و یا وضعیت زنده بود) ارائه دهد.</string>
<string name="feed_use_dedicated_fetch_method_summary">در برخی خدمات دردسترس است، معمولا خیلی سریع‌تر است، ولی ممکن است مواردی محدودتر و اغلب با اطلاعات ناقص (مثلا بدون طول زمان، نوع مورد و یا وضعیت زنده بود) ارائه دهد</string>
<string name="feed_use_dedicated_fetch_method_title">دریافت از خوراک اختصاصی هر زمان که در دسترس باشد</string>
<string name="feed_update_threshold_option_always_update">همواره به‌روز شود</string>
<string name="feed_update_threshold_summary">مدت زمان سپری شده پس از آخرین به‌روزرسانی پیش از آن که یک اشتراک، قدیمی به حساب بیاید — %s</string>
@ -619,7 +619,7 @@
<string name="notification_action_shuffle">تصادفی</string>
<string name="notification_action_repeat">تکرار</string>
<string name="notification_actions_at_most_three">حداکثر تا سه کنش را می‌توانید برای نمایش در اعلان فشرده انتخاب کنید!</string>
<string name="notification_actions_summary">هر کنش اعلان را با لمس کردنش‌شان ویرایش کنید. نهایتا تا سه مورد را برای نمایش در اعلان فشرده انتخاب کنید.</string>
<string name="notification_actions_summary">هر کنش آگاهی را با لمس کردنش ویرایش کنید. با استفاده از جعبه‌های تیک، تا سه کنش را برای نمایش در آگاهی فشرده بگزینید</string>
<string name="notification_action_4_title">پنجمین دکمه کنشی</string>
<string name="notification_action_3_title">چهارمین دکمه کنشی</string>
<string name="notification_action_2_title">سومین دکمه کنشی</string>
@ -627,4 +627,54 @@
<string name="notification_action_0_title">اولین دکمه کنشی</string>
<string name="notification_scale_to_square_image_summary">تصویر بندانگشتی ویدیو که در اعلان نمایش می‌یابد، از نسبت ۱۶:۹ به ۱:۱ تغییر اندازه پیدا کند (ممکن است منجر به اعوجاج شود)</string>
<string name="notification_scale_to_square_image_title">تغییر مقیاس تصویر بندانگشتی به نسبت ۱:۱</string>
<string name="low_quality_smaller">کیفیت پایین (کوچک‌تر)</string>
<string name="high_quality_larger">کیفیت بالا (بزرگ‌تر)</string>
<string name="comments_are_disabled">نظرها از کار افتاده‌اند</string>
<string name="feed_toggle_show_played_items">نمایش موارد دیده‌شده</string>
<string name="feed_load_error">خطا در بار کردن خوراک</string>
<string name="disable_media_tunneling_title">از کار انداختن تونل‌زنی رسانه</string>
<string name="show_channel_details">نمایش جزییات کانال</string>
<string name="download_has_started">بارگیری آغاز شد</string>
<string name="auto_device_theme_title">خودکار (زمینهٔ افزاره)</string>
<string name="crash_the_app">فروپاشی‌کاره</string>
<string name="show_meta_info_title">نمایش فرااطلاعات</string>
<string name="hash_channel_name">آگاهی درهم ریزی ویدیو</string>
<string name="show_memory_leaks">نمایش نشت‌های حافظه</string>
<string name="clear_cookie_title">پاک‌سازی کوکی‌های ری‌کپچا</string>
<string name="dont_show">نشان ندادن</string>
<string name="tablet_mode_title">حالت رایانک</string>
<string name="open_website_license">گشودن پایگاه وب</string>
<string name="account_terminated">حساب از بین رفت</string>
<string name="metadata_thumbnail_url">نشانی بندانگشتی</string>
<string name="metadata_age_limit">کرانهٔ عمر</string>
<string name="related_items_tab_description">موارد مرتبط</string>
<string name="show_description_title">نمایش شرح</string>
<string name="msg_calculating_hash">محاسبهٔ درهم ریزی</string>
<string name="show_thumbnail_title">نمایش بندانگشتی‌ها</string>
<string name="off">خاموش</string>
<string name="on">روشن</string>
<string name="metadata_privacy_internal">درونی</string>
<string name="metadata_privacy_private">خصوصی</string>
<string name="metadata_privacy_unlisted">فهرست نشده</string>
<string name="metadata_privacy_public">عمومی</string>
<string name="metadata_host">میزبان</string>
<string name="metadata_support">پشتیبانی</string>
<string name="metadata_language">زبان</string>
<string name="metadata_privacy">محرمانگی</string>
<string name="metadata_licence">پروانه</string>
<string name="metadata_tags">برچسب‌ها</string>
<string name="metadata_category">دسته</string>
<string name="radio">رادیو</string>
<string name="featured">معرفی‌شده</string>
<string name="recaptcha_solve">حل</string>
<string name="chapters">بخش‌ها</string>
<string name="description_tab_description">شرح</string>
<string name="comments_tab_description">نظرها</string>
<string name="recent">به تازگی</string>
<string name="enqueued">در صف شد</string>
<string name="enqueue_stream">صف کردن</string>
<string name="night_theme_title">زمینهٔ شب</string>
<string name="notification_colorize_title">رنگی کردن آگاهی</string>
<string name="open_with">گشودن با</string>
<string name="mark_as_watched">نشانه به عنوان دیده‌شده</string>
</resources>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_bg_subtitle">Napauta hakua aloittaaksesi</string>
<string name="main_bg_subtitle">Napauta suurennuslasia aloittaaksesi.</string>
<string name="view_count_text">%1$s näyttökertaa</string>
<string name="upload_date_text">Julkaistu %1$s</string>
<string name="no_player_found">Ei löytynyt suoratoistosoitinta. Asennetaanko VLC\?</string>
@ -246,9 +246,9 @@
<string name="tab_bookmarks">Soittolistakirjanmerkit</string>
<string name="controls_add_to_playlist_title">Lisää soittolistaan</string>
<string name="use_inexact_seek_title">Käytä nopeampaa epätarkkaa pikakelausta</string>
<string name="use_inexact_seek_summary">Epätarkka kelaus mahdollistaa videon kelauksen nopeammin huonommalla tarkkuudella. Kelaaminen 5, 15 tai 25 sekuntia ei toimi tämän kanssa.</string>
<string name="use_inexact_seek_summary">Epätarkka kelaus mahdollistaa videon kelauksen nopeammin huonommalla tarkkuudella. Kelaaminen 5, 15 tai 25 sekunnin erissä ei toimi tämän kanssa.</string>
<string name="download_thumbnail_title">Lataa esikatselukuvat</string>
<string name="download_thumbnail_summary">Poista käytöstä estääksesi esikatselukuvien lataus säästääksesi dataa ja muistinkäyttöä. Asetuksen muuttaminen poistaa sekä muistissa että levyllä olevan kuvavälimuistin.</string>
<string name="download_thumbnail_summary">Poista käytöstä estääksesi esikatselukuvien lataus. Tämä säästää dataa ja vähentää muistin käyttöä. Asetuksen muuttaminen poistaa muistissa ja levyllä olevan kuvavälimuistin.</string>
<string name="thumbnail_cache_wipe_complete_notice">Kuvavälimuisti tyhjennetty</string>
<string name="metadata_cache_wipe_title">Poista tallennettu metatieto</string>
<string name="metadata_cache_wipe_summary">Poista kaikki tallennettu sivutieto</string>
@ -275,11 +275,11 @@
<string name="clear_views_history_title">Poista katseluhistoria</string>
<string name="clear_views_history_summary">Poistaa toistohistorian ja toistokohdat</string>
<string name="delete_view_history_alert">Poista koko katseluhistoria\?</string>
<string name="watch_history_deleted">Katseluhistoria onnistuneesti poistettu.</string>
<string name="watch_history_deleted">Katseluhistoria poistettu.</string>
<string name="clear_search_history_title">Poista hakuhistoria</string>
<string name="clear_search_history_summary">Poistaa historian haetuista videoista</string>
<string name="delete_search_history_alert">Poista koko hakuhistoria\?</string>
<string name="search_history_deleted">Hakuhistoria onnistuneesti poistettu.</string>
<string name="search_history_deleted">Hakuhistoria poistettu</string>
<string name="external_player_unsupported_link_type">Ulkoiset soittimet eivät tue tämänkaltaisia linkkejä</string>
<string name="invalid_url_toast">Viallinen osoite</string>
<string name="video_streams_empty">Suoratoistovideoita ei löytynyt</string>
@ -403,7 +403,7 @@
<string name="recently_added">Hiljattain lisätyt</string>
<string name="local">Paikalliset</string>
<string name="most_liked">Pidetyimmät</string>
<string name="localization_changes_requires_app_restart">Kieli vaihtuu, kun sovellus uudelleenkäynnistetään.</string>
<string name="localization_changes_requires_app_restart">Kieli vaihtuu, kun sovellus uudelleenkäynnistetään</string>
<string name="error_unable_to_load_comments">Kommentteja ei voitu ladata</string>
<string name="selection">Valinta</string>
<string name="main_page_content_summary">Mitkä välilehdet näytetään pääsivulla</string>
@ -462,7 +462,7 @@
<string name="volume_gesture_control_summary">Käytä eleitä ohjataksesi soittimen äänenvoimakkuutta</string>
<string name="volume_gesture_control_title">Äänenvoimakkuuden eleohjaus</string>
<string name="show_comments_summary">Poista käytöstä piilottaaksesi kommentit</string>
<string name="watch_history_states_deleted">Toistokohdat poistettu.</string>
<string name="watch_history_states_deleted">Toistokohdat poistettu</string>
<string name="delete_playback_states_alert">Poistetaanko kaikki toistokohdat\?</string>
<string name="clear_playback_states_summary">Poistaa kaikki toistokohdat</string>
<string name="clear_playback_states_title">Poista toistokohdat</string>
@ -541,10 +541,10 @@
<string name="systems_language">Järjestelmän oletus</string>
<string name="app_language_title">Sovelluksen kieli</string>
<string name="choose_instance_prompt">Valitse instanssi</string>
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' sallii lataukset ulkoiselle SD-kortille.
\nJotkin laitteet eivät ole yhteensopivia</string>
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' sallii lataukset ulkoiselle SD-kortille.</string>
<string name="downloads_storage_use_saf_title">Ota SAF käyttöön</string>
<string name="downloads_storage_ask_summary">Jokaisen latauksen kohde kysytään</string>
<string name="downloads_storage_ask_summary">Jokaisen latauksen kohde kysytään.
\nSalli SAF, jos haluat ladata ulkoiselle SD-kortille.</string>
<string name="downloads_storage_ask_title">Kysy mihin ladataan</string>
<string name="start_downloads">Aloita lataukset</string>
<string name="enable_queue_limit_desc">Salli vain yksi lataus kerrallaan</string>
@ -646,7 +646,7 @@
<string name="show_thumbnail_summary">Käytä esikatselukuvaa lukitusruudun ja ilmoitusten taustakuvana</string>
<string name="show_thumbnail_title">Näytä esikatselukuva</string>
<string name="msg_calculating_hash">Lasketaan</string>
<string name="show_meta_info_summary">Poista käytöstä piilotakseen metatiedot suoratoiston luojasta, sen sisällöstä tai hakupyynnöstä.</string>
<string name="show_meta_info_summary">Poista käytöstä piilottaaksesi metatiedot suoratoiston luojasta, sisällöstä tai hakupyynnöstä.</string>
<string name="show_meta_info_title">Näytä metatieto</string>
<string name="recent">Viimeisimmät</string>
<string name="show_description_title">Näytä kuvaus</string>
@ -675,4 +675,47 @@
<string name="restricted_video_no_stream">Tämä video on ikärajoitettu.
\nYouTuben uusien ikärajoitusperiaatteiden mukaisesti NewPipella ei ole pääsyä videoon eikä sitä voida toistaa.</string>
<string name="night_theme_title">Yöteema</string>
<string name="metadata_thumbnail_url">Pienoiskuvakkeen osoite</string>
<string name="description_select_disable">Poista käytöstä tekstinvalinta kuvauskentän sisältä</string>
<string name="description_select_note">Voit nyt valita tekstin kuvauskentän sisältä. Huomioithan, että valintatilan aikana sivu voi vilkkua ja linkit eivät ehkä ole klikattavia.</string>
<string name="service_provides_reason">%s tuo tämän syyn:</string>
<string name="seekbar_preview_thumbnail_title">Säätövivun kuvakkeen esikatselu</string>
<string name="disable_media_tunneling_summary">Poista median tunnelointi käytöstä, jos havaitset mustan näyttöruudun tai änkytystä videon toistossa</string>
<string name="disable_media_tunneling_title">Poista median tunnelointi käytöstä</string>
<string name="feed_load_error_fast_unknown">Nopea syötetila ei tarjoa enempää tietoa tästä.</string>
<string name="downloads_storage_use_saf_summary_api_29">\'Storage Access Framework\' on tuettu vain Android 10:stä alkaen.</string>
<string name="off">Pois päältä</string>
<string name="on">Päällä</string>
<string name="tablet_mode_title">Tablettitila</string>
<string name="open_website_license">Avaa verkkosivu</string>
<string name="detail_heart_img_view_description">Tekijän tykkäämä</string>
<string name="metadata_privacy_internal">Sisäinen</string>
<string name="metadata_privacy_private">Yksityinen</string>
<string name="metadata_privacy_unlisted">Listaamaton</string>
<string name="metadata_privacy_public">Julkinen</string>
<string name="metadata_host">Ylläpitäjä</string>
<string name="metadata_support">Tuki</string>
<string name="metadata_language">Kieli</string>
<string name="metadata_age_limit">Ikäraja</string>
<string name="metadata_privacy">Julkisuusaste</string>
<string name="metadata_licence">Lisenssi</string>
<string name="metadata_tags">Avainsanat</string>
<string name="metadata_category">Kategoria</string>
<string name="description_select_enable">Salli tekstin valinta kuvauksessa</string>
<string name="account_terminated">Tili suljettu</string>
<string name="feed_toggle_show_played_items">Näytä katsotut kohteet</string>
<string name="feed_load_error_terminated">Tekijän käyttäjätili on suljettu.
\nNewPipe ei pysty lataamaan tätä syötettä tulevaisuudessa.
\nHaluatko poistaa kanavan tilauksesta\?</string>
<string name="feed_load_error_account_info">Ei voitu ladata syötettä hakusanalle \'%s\'.</string>
<string name="feed_load_error">Virhe syötteen lataamisessa</string>
<string name="downloads_storage_use_saf_summary_api_19">\'Storage Access Framework\' ei ole tuettu Android KitKatissa tai vanhemmissa versioissa</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Sinulta kysytään joka kerta, minne tiedosto ladataan.</string>
<string name="dont_show">Älä näytä</string>
<string name="low_quality_smaller">Matala laatu (pienempi)</string>
<string name="high_quality_larger">Korkea laatu (suurempi)</string>
<string name="show_channel_details">Näytä kanavan lisätiedot</string>
<string name="no_dir_yet">Latauskansiota ei vielä asetettu, valitse ensin oletuslatauskansio</string>
<string name="comments_are_disabled">Kommentit poistettu käytöstä</string>
<string name="mark_as_watched">Merkitse katsotuksi</string>
</resources>

View File

@ -172,14 +172,14 @@
<string name="enable_watch_history_title">Voir lhistorique</string>
<string name="title_activity_history">Historique</string>
<string name="title_history_search">Recherché</string>
<string name="title_history_view">Vue</string>
<string name="title_history_view">Visionnées</string>
<string name="history_disabled">Lhistorique est désactivé</string>
<string name="action_history">Historique</string>
<string name="history_empty">Lhistorique est vide</string>
<string name="history_cleared">Historique supprimé</string>
<string name="notification_channel_name">Notification NewPipe</string>
<string name="undo">Annuler</string>
<string name="enable_watch_history_summary">Garde un suivi des vidéos vues</string>
<string name="enable_watch_history_summary">Historiser les vidéos visionnées</string>
<string name="resume_on_audio_focus_gain_title">Reprendre la lecture</string>
<string name="settings_category_player_title">Lecteur</string>
<string name="settings_category_player_behavior_title">Comportement</string>
@ -594,11 +594,11 @@
<string name="restricted_video">Cette vidéo dispose dune limite dâge.
\n
\nActivez « %1$s» dans les paramètres si vous voulez la voir.</string>
<string name="remove_watched">Supprimer les vidéos vues</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Oui, et des vidéos partiellement regardées</string>
<string name="remove_watched_popup_warning">Les vidéos qui ont été regardées avant et après avoir été ajoutées à la liste de lecture seront supprimées.
\nÊtes-vous sûr(e)\? Cest irréversible!</string>
<string name="remove_watched_popup_title">Supprimer les vidéos regardées \?</string>
<string name="remove_watched">Supprimer les vidéos visionnées</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Oui ainsi que les vidéos partiellement visionnées</string>
<string name="remove_watched_popup_warning">Les vidéos qui ont été visionnées avant et après avoir été ajoutées à la liste de lecture seront supprimées.
\nÊtes-vous certain(e) \? Cette action est irréversible!</string>
<string name="remove_watched_popup_title">Supprimer les vidéos visionnées \?</string>
<string name="detail_sub_channel_thumbnail_view_description">Miniature de l\'avatar de la chaine</string>
<string name="video_detail_by">De %s</string>
<string name="channel_created_by">Créé par %s</string>
@ -697,7 +697,7 @@
<string name="metadata_category">Catégorie</string>
<string name="description_select_note">Vous pouvez maintenant sélectionner du texte à l\'intérieur de la description. Notez que la page peut scintiller et que les liens peuvent ne pas être cliquables en mode sélection.</string>
<string name="service_provides_reason">%s indique le motif :</string>
<string name="no_dir_yet">Aucun dossier de téléchargement n\'est défini pour le moment, sélectionnez le dossier de téléchargement par défaut.</string>
<string name="no_dir_yet">Aucun dossier de téléchargement n\'est défini pour le moment, sélectionnez le dossier de téléchargement par défaut</string>
<string name="open_website_license">Ouvrir le site web</string>
<string name="account_terminated">Compte résilié</string>
<string name="feed_load_error_account_info">Impossible de charger le flux \'%s\'.</string>
@ -706,12 +706,18 @@
<string name="off">Inactif</string>
<string name="on">Actif</string>
<string name="tablet_mode_title">Mode tablette</string>
<string name="feed_toggle_show_played_items">Afficher les éléments vus</string>
<string name="feed_toggle_show_played_items">Afficher les éléments visionnés</string>
<string name="feed_load_error_terminated">Le compte de l\'auteur a été résilié.
\nNewPipe ne sera plus en mesure de charger ce flux à l\'avenir.
\nSouhaitez-vous vous désabonner de cette chaîne \?</string>
<string name="downloads_storage_use_saf_summary_api_29">A partir d\'Android 10, seule l«Infrastructure daccès au stockage» est prise en charge.</string>
<string name="downloads_storage_use_saf_summary_api_29">A partir d\'Android 10, seule « l\'Infrastructure daccès au stockage  » est prise en charge</string>
<string name="downloads_storage_use_saf_summary_api_19">L«Infrastructure daccès au stockage» n\'est pas prise en charge par Android KitKat et les versions antérieures</string>
<string name="item_in_history">En historique</string>
<string name="feed_load_error_fast_unknown">Le mode d\'alimentation rapide ne fournit pas plus d\'informations à ce sujet.</string>
<string name="comments_are_disabled">Les commentaires sont désactivés</string>
<string name="dont_show">Ne pas afficher</string>
<string name="low_quality_smaller">Faible qualité (plus petit)</string>
<string name="high_quality_larger">Haute qualité (plus grand)</string>
<string name="seekbar_preview_thumbnail_title">Prévisualisation de la barre de progression sur la miniature</string>
<string name="mark_as_watched">Marquer comme visionné</string>
<string name="detail_heart_img_view_description">Apprécié par le créateur</string>
</resources>

View File

@ -61,9 +61,9 @@
<string name="popup_remember_size_pos_title">Lembrar o tamaño e a posición do «popup»</string>
<string name="popup_remember_size_pos_summary">Lembrar o tamaño e a posición anteriores do «popup»</string>
<string name="use_inexact_seek_title">Usar un salto inexacto mais inexacto</string>
<string name="use_inexact_seek_summary">Busca incorrecta permite ao xogador buscar posicións máis rápidas con precisión reducida. A busca de 5, 15 ou 25 segundos non funciona con isto.</string>
<string name="use_inexact_seek_summary">A busca inexacta permite ao reprodutor procurar posicións máis rápidas con precisión reducida. A busca de 5, 15 ou 25 segundos non funciona con isto</string>
<string name="download_thumbnail_title">Carregar miniaturas</string>
<string name="download_thumbnail_summary">Desactíveo para evitar a carga de miniaturas e poupar datos e memoria. Modificar esta opción limpa a caché de imaxes da memoria e do disco.</string>
<string name="download_thumbnail_summary">Desactíveo para evitar a carga de miniaturas e poupar datos e memoria. Modificar esta opción limpa a caché de imaxes da memoria e do disco</string>
<string name="thumbnail_cache_wipe_complete_notice">A caché de imaxes foi limpada</string>
<string name="metadata_cache_wipe_title">Os metadatos da caché foron eliminados</string>
<string name="metadata_cache_wipe_summary">Eliminar todos os datos de páxinas en caché</string>
@ -138,11 +138,11 @@
<string name="clear_views_history_title">Limpar historial de reproducións</string>
<string name="clear_views_history_summary">Elimina o historial de transmisións reproducidas e as posicións da reprodución</string>
<string name="delete_view_history_alert">Eliminar todo o historial de reproducións\?</string>
<string name="watch_history_deleted">O historial de reproducións foi eliminado.</string>
<string name="watch_history_deleted">O historial de reproducións foi eliminado</string>
<string name="clear_search_history_title">Limpar o historial de procura</string>
<string name="clear_search_history_summary">Elimina o historial de termos procurados</string>
<string name="delete_search_history_alert">Eliminar todo o historial de procura\?</string>
<string name="search_history_deleted">O historial de procuras foi eliminado.</string>
<string name="search_history_deleted">O historial de procuras foi eliminado</string>
<string name="general_error">Erro</string>
<string name="network_error">Erro de rede</string>
<string name="could_not_load_thumbnails">Non foi posíbel carregar todas as miniaturas</string>
@ -343,7 +343,7 @@
<string name="resize_zoom">Zoom</string>
<string name="caption_auto_generated">Xerado automaticamente</string>
<string name="caption_setting_title">Lenda</string>
<string name="caption_setting_description">Modificar a escala de texto da lenda e os estilos de segundo plano do reprodutor. Para ter efecto, é preciso reiniciar o aplicativo.</string>
<string name="caption_setting_description">Modificar a escala de texto da lenda e os estilos de segundo plano do reprodutor. Para ter efecto, é preciso reiniciar o aplicativo</string>
<string name="enable_leak_canary_summary">A monitorización de fugas de memoria pode facer que o aplicativo deixe de responder cando hai vertedura da pila</string>
<string name="enable_disposed_exceptions_title">Informar de erros fóra do ciclo de vida</string>
<string name="enable_disposed_exceptions_summary">Forzar a comunicación de excepcións Rx non entregábeis fóra do ciclo de vida do fragmento ou actividade após o descarte</string>
@ -357,11 +357,14 @@
<string name="previous_export">Exportación anterior</string>
<string name="subscriptions_import_unsuccessful">Non foi posíbel importar as subscricións</string>
<string name="subscriptions_export_unsuccessful">Non foi posíbel exportar as subscricións</string>
<string name="import_youtube_instructions">Pode importar as súas subscricións de YouTube descarregando o ficheiro de exportacións:
<string name="import_youtube_instructions">Pode importar as súas subscricións de YouTube do Google takeout:
\n
\n1. Acceda ao URL %1$s
\n2. Inicie a sesión cando lle for solicitado
\n3. Ha comezar unha descarga (a do ficheiro de exportación)</string>
\n3. Faga click en \"Todos os datos incluídos\", logo en \"Desmarcar todo\", escolla só \"subscricións\", e prema \"OK\"
\n4. Pulse en \"Próximo paso\" e escolla \"Crear exportación\"
\n5. Faga click no botón de \"Decarregar\" despois de que apareza e
\n6. Do arquivo zip decarregado extraia o .json (normalmente en \"YouTube e YouTube Music/subscricións/subscricións.json\") e impórteo aquí.</string>
<string name="import_soundcloud_instructions">Pode importar un perfil do SoundCloud escribindo o URL ou o seu ID:
\n
\n1. Active o «modo desktop» nun navegador da Internet (o sitio non está dispoñíbel para dispositivos móbiles)
@ -415,7 +418,7 @@
\nDe modo que a elección redúcese ao que prefires: velocidade ou información precisa.</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Desactivar o modo rápido</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Activa o modo rápido</string>
<string name="feed_use_dedicated_fetch_method_summary">Dispoñible nalgúns servizos, normalmente é moito máis rápido pero pode devolver unha cantidade limitada de elementos e moitas veces información incompleta (por exemplo, sen duración, tipo de elemento, sen estado en directo).</string>
<string name="feed_use_dedicated_fetch_method_summary">Dispoñible nalgúns servizos, normalmente é moito máis rápido pero pode devolver unha cantidade limitada de elementos e moitas veces información incompleta (por exemplo, sen duración, tipo de elemento, sen estado en directo)</string>
<string name="feed_use_dedicated_fetch_method_title">Obtén unha transmisión dedicada cando estea dispoñible</string>
<string name="feed_update_threshold_option_always_update">Sempre actualizado</string>
<string name="feed_update_threshold_summary">Tempo despois da última actualización antes de que se subscriba unha subscrición - %s</string>
@ -461,10 +464,10 @@
<string name="systems_language">Sistema predeterminado</string>
<string name="app_language_title">Lingua do aplicativo</string>
<string name="choose_instance_prompt">Elixir unha instancia</string>
<string name="downloads_storage_use_saf_summary">O \'Framework Access Framework\' permite a descarga a unha tarxeta SD externa.
\nAlgúns dispositivos son incompatibles</string>
<string name="downloads_storage_use_saf_summary">O \'Framework Access Framework\' permite a descarga a unha tarxeta SD externa</string>
<string name="downloads_storage_use_saf_title">Usar SAF</string>
<string name="downloads_storage_ask_summary">Preguntaralle onde gardar cada descarga</string>
<string name="downloads_storage_ask_summary">Preguntaralle onde gardar cada descarga.
\nPermita o Sistema de Escolla de Cartafois (SAF) se desexar descarregar para un SD externo</string>
<string name="downloads_storage_ask_title">Pregunta onde se descarga</string>
<string name="pause_downloads">Parar as descagas</string>
<string name="start_downloads">Comezar as descargas</string>
@ -534,7 +537,7 @@
<string name="conferences">Conferencias</string>
<string name="most_liked">O que ten mais gústames</string>
<string name="recently_added">Engadiuse recentemente</string>
<string name="localization_changes_requires_app_restart">O idioma cambiará unha vez que se reinicie o aplicativo.</string>
<string name="localization_changes_requires_app_restart">O idioma cambiará unha vez que se reinicie o aplicativo</string>
<string name="error_unable_to_load_comments">Non se puideron cargar os comentarios</string>
<string name="no_playlist_bookmarked_yet">Aínda non hai marcadores nesta lista de reprodución</string>
<string name="select_a_playlist">Seleccionar unha lista de reprodución</string>
@ -569,7 +572,7 @@
<string name="download_to_sdcard_error_message">Non é posible descargar na tarxeta SD externa. Restaurar a localización do cartafol de descarga\?</string>
<string name="download_to_sdcard_error_title">Non hai dispoñible almacenamento externo</string>
<string name="help">Axuda</string>
<string name="watch_history_states_deleted">Elimináronse as posicións de reprodución.</string>
<string name="watch_history_states_deleted">Elimináronse as posicións de reprodución</string>
<string name="delete_playback_states_alert">Eliminas todas as posicións de reprodución\?</string>
<string name="clear_playback_states_summary">Elimina todas as posicións de reprodución</string>
<string name="clear_playback_states_title">Elimina as posicións de reprodución</string>
@ -631,9 +634,9 @@
<string name="metadata_licence">Licenza</string>
<string name="metadata_tags">Etiquetas</string>
<string name="metadata_category">Categoría</string>
<string name="description_select_disable">Desabilitar a selección do texto da descripción</string>
<string name="description_select_enable">Habilitar a selección do texto na descripción</string>
<string name="description_select_note">Agora podes seleccionar o texto na descripción. Teña en conta que a páxina pode cintilar e as ligazóns poden non ser clicábeis no modo selección.</string>
<string name="description_select_disable">Deshabilitar a selección do texto da descrición</string>
<string name="description_select_enable">Habilitar a selección do texto na descrición</string>
<string name="description_select_note">Agora podes seleccionar o texto na descrición. Teña en conta que a páxina pode cintilar e as ligazóns poden non ser clicábeis no modo selección.</string>
<string name="auto_device_theme_title">Automático (Tema do dispositivo)</string>
<string name="radio">Radio</string>
<string name="service_provides_reason">%s dá este motivo:</string>
@ -652,7 +655,7 @@
<string name="show_channel_details">Mostrar detalles da canle</string>
<string name="title_activity_play_queue">Reproducir cola</string>
<string name="recaptcha_solve">Resolver</string>
<string name="description_tab_description">Descripción</string>
<string name="description_tab_description">Descrición</string>
<string name="comments_tab_description">Comentarios</string>
<string name="clear_cookie_summary">Borrar as cookies que NewPipe garda cando resolve un reCAPTCHA</string>
<string name="recaptcha_cookies_cleared">As cookies reCAPTCHA foron borradas</string>
@ -664,10 +667,33 @@
<string name="settings_category_notification_title">Notificación</string>
<string name="unsupported_url_dialog_message">URL non recoñecido. Abrir con outra aplicación\?</string>
<string name="show_meta_info_title">Mostrar metainformación</string>
<string name="show_description_summary">Desactíveo para ocultar a descripción do vídeo e a información adicional</string>
<string name="show_description_title">Ver descripción</string>
<string name="show_description_summary">Desactíveo para ocultar a descrición do vídeo e a información adicional</string>
<string name="show_description_title">Ver descrición</string>
<string name="clear_queue_confirmation_title">Pedir confirmación antes de baleirar unha cola</string>
<string name="night_theme_title">Tema Escuro</string>
<string name="notification_action_nothing">Nada</string>
<string name="open_with">Abrir con</string>
<string name="metadata_privacy_unlisted">Non listado</string>
<string name="select_night_theme_toast">Pode seleccionar o seu tema escuro favorito abaixo</string>
<string name="night_theme_summary">Seleccione o seu tema escuro favorito — %s</string>
<string name="youtube_music_premium_content">Este vídeo só está disponíbel para membros de YouTube Music Premium, polo que non pode ser transmitido nin descarregado polo NewPipe.</string>
<string name="private_content">Este contido é privado, polo que non pode ser transmitido nin descarregado polo NewPipe.</string>
<string name="no_app_to_open_intent">Non posúe ningunha aplicación para abrir isto</string>
<string name="show_thumbnail_summary">Usar miniaturas para a pantalla de bloqueo e para as notificacións</string>
<string name="feed_toggle_show_played_items">Mostrar elementos reproducidos</string>
<string name="comments_are_disabled">Os comentarios está desactivados</string>
<string name="show_age_restricted_content_summary">Mostrar contido potencialmente non apto para menores porque ten unha limitación de idade (como +18)</string>
<string name="notification_colorize_title">Definir cor da notificación</string>
<string name="on">Prendido</string>
<string name="metadata_host">Provedor</string>
<string name="featured">Destacado</string>
<string name="paid_content">Este contido só está dispoñíbel para usuarios que pagaran por el, así que non pode ser transmitido ou decarregado por NewPipe.</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Será preguntado onde desexa gardar cada descarga</string>
<string name="dont_show">Non mostrar</string>
<string name="low_quality_smaller">Baixa calidade (máis pequeno)</string>
<string name="high_quality_larger">Alta calidade (maior)</string>
<string name="show_memory_leaks">Mostrar perdas de memoria</string>
<string name="show_meta_info_summary">Desactivar para ocultar información adicional sobre o creador da emisión, do contido, ou da petición de procura</string>
<string name="notification_colorize_summary">Permitir a Android personalizar a cor da notificación conforme a cor principal da miniatura (esta opción non está dispoñíbel en todos os dispositivos)</string>
<string name="mark_as_watched">Marcar como visto</string>
</resources>

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="black_theme_title">કાળું</string>
<string name="dark_theme_title">અંધારિયું</string>
<string name="light_theme_title">પ્રકાશ</string>
<string name="night_theme_title">નાઇટ થીમ</string>
<string name="theme_title">થીમ</string>
<string name="default_video_format_title">ડિફોલ્ટ વિડિઓ ફોર્મેટ</string>
<string name="default_audio_format_title">ડિફોલ્ટ ઓડિયો ફોર્મેટ</string>
<string name="play_audio">ઓડિયો</string>
<string name="notification_colorize_summary">થંબનેલના મુખ્ય રંગ અનુસાર, Android ને સૂચનાના રંગને કસ્ટમાઇઝ કરો (નોંધો કે આ બધા ઉપકરણો પર ઉપલબ્ધ નથી)</string>
<string name="notification_colorize_title">સૂચનાને રંગીન બનાવો</string>
<string name="notification_action_nothing">કાંઈ નહીં</string>
<string name="notification_action_buffering">બફરિંગ</string>
<string name="notification_action_shuffle">શફલ</string>
<string name="notification_action_repeat">પુનરાવર્તન કરો</string>
<string name="notification_actions_at_most_three">તમે કોમ્પેક્ટ સૂચનામાં બતાવવા માટે ઓછામાં ઓછી ત્રણ ક્રિયાઓ પસંદ કરી શકો છો!</string>
<string name="notification_actions_summary">નીચેની દરેક સૂચના ક્રિયાને તેના પર ટેપ કરીને સંપાદિત કરો. જમણી બાજુના ચેકબોક્સેસનો ઉપયોગ કરીને કોમ્પેક્ટ સૂચનામાં બતાવવા માટે તેમાંથી ત્રણ સુધી પસંદ કરો</string>
<string name="notification_action_4_title">પાંચમો ક્રિયા બટન</string>
<string name="notification_action_3_title">ચોથું ક્રિયા બટન</string>
<string name="notification_action_2_title">ત્રીજી ક્રિયા બટન</string>
<string name="notification_action_1_title">બીજું ક્રિયા બટન</string>
<string name="notification_action_0_title">પ્રથમ ક્રિયા બટન</string>
<string name="notification_scale_to_square_image_summary">સૂચનામાં 16: 9 થી 1: 1 અસ્પેક્ટ રેશિયોમાં બતાવેલ વિડિઓ થંબનેલને સ્કેલ કરો (વિકૃતિ રજૂ કરી શકે છે)</string>
<string name="notification_scale_to_square_image_title">સ્કેલ થંબનેલથી 1: 1 પાસા રેશિયો</string>
<string name="show_play_with_kodi_summary">કોડી મીડિયા સેન્ટર દ્વારા વિડિઓ ચલાવવાનો વિકલ્પ દર્શાવો</string>
<string name="kore_not_found">અનુપસ્થિત Kore એપ્લિકેશન ઇન્સ્ટોલ કરીએ\?</string>
<string name="show_higher_resolutions_summary">ફક્ત થોડા ઉપકરણો 2K / 4K વિડિઓઝ ચલાવી શકે છે</string>
<string name="show_higher_resolutions_title">ઉચ્ચ રીઝોલ્યુશન બતાવો</string>
<string name="default_popup_resolution_title">ડિફોલ્ટ પોપઅપ રીઝોલ્યુશન</string>
<string name="default_resolution_title">ડિફોલ્ટ રીઝોલ્યુશન</string>
<string name="autoplay_by_calling_app_summary">જ્યારે બીજી એપ્લિકેશનથી ન્યૂ પાઇપ કહેવામાં આવે ત્યારે વિડિઓ ચલાવે છે</string>
<string name="autoplay_by_calling_app_title">ઓટોપ્લે</string>
<string name="download_choose_new_path">અસર માટે ડાઉનલોડ ફોલ્ડર્સ બદલો</string>
<string name="download_path_audio_dialog_title">ઓડિયો ફાઇલો માટે ડાઉનલોડ ફોલ્ડર પસંદ કરો</string>
<string name="download_path_audio_summary">ડાઉનલોડ કરેલી ઓડિયો ફાઇલો અહીં સંગ્રહિત છે</string>
<string name="download_path_audio_title">ઓડિયો ડાઉનલોડ ફોલ્ડર</string>
<string name="download_path_dialog_title">વિડિઓ ફાઇલો માટે ડાઉનલોડ ફોલ્ડર પસંદ કરો</string>
<string name="download_path_summary">ડાઉનલોડ કરેલી વિડિઓ ફાઇલો અહીં સંગ્રહિત છે</string>
<string name="download_path_title">વિડિઓ ડાઉનલોડ ફોલ્ડર</string>
<string name="controls_add_to_playlist_title">માં ઉમેરો</string>
<string name="controls_popup_title">પોપઅપ</string>
<string name="controls_background_title">પૃષ્ઠભૂમિ</string>
<string name="tab_choose">ટેબ પસંદ કરો</string>
<string name="tab_new">નવું ટેબ</string>
<string name="tab_bookmarks">બુકમાર્ક કરેલ પ્લેલિસ્ટ્સ</string>
<string name="tab_subscriptions">સબ્સ્ક્રિપ્શન્સ</string>
<string name="tab_main">મુખ્ય</string>
<string name="show_info">માહિતી બતાવો</string>
<string name="subscription_update_failed">સબ્સ્ક્રિપ્શન અપડેટ કરી શકાયું નથી</string>
<string name="subscription_change_failed">સબ્સ્ક્રિપ્શન બદલી શકાયું નહીં</string>
<string name="channel_unsubscribed">ચેનલ અનસબ્સ્ક્રાઇબ કર્યું</string>
<string name="unsubscribe">અનસબ્સ્ક્રાઇબ કરો</string>
<string name="subscribed_button_title">સબ્સ્ક્રાઇબ કર્યું</string>
<string name="subscribe_button_title">સબ્સ્ક્રાઇબ કરો</string>
<string name="popup_mode_share_menu_title">પોપઅપ મોડ</string>
<string name="use_external_audio_player_title">બાહ્ય ઓડિયો પ્લેયરનો ઉપયોગ કરો</string>
<string name="use_external_video_player_summary">કેટલાક ઠરાવો પર ઓડિયો દૂર કરે છે</string>
<string name="use_external_video_player_title">બાહ્ય વિડિઓ પ્લેયરનો ઉપયોગ કરો</string>
<string name="screen_rotation">પરિભ્રમણ</string>
<string name="choose_browser">બ્રાઉઝર પસંદ કરો</string>
<string name="share_dialog_title">સાથે શેર કરો</string>
<string name="search_showing_result_for">%s માટે પરિણામો બતાવી રહ્યું છે</string>
<string name="did_you_mean">શું તમારો મતલબ %1$s છે\?</string>
<string name="settings">સેટિંગ્સ</string>
<string name="search">શોધો</string>
<string name="controls_download_desc">સ્ટ્રીમ ફાઇલ ડાઉનલોડ કરો</string>
<string name="download">ડાઉનલોડ કરો</string>
<string name="share">શેર કરો</string>
<string name="open_with">સાથે ખોલો</string>
<string name="open_in_popup_mode">પોપઅપ મોડમાં ખોલો</string>
<string name="open_in_browser">બ્રાઉઝરમાં ખોલો</string>
<string name="cancel">રદ કરો</string>
<string name="install">સ્થાપિત કરો</string>
<string name="no_player_found_toast">કોઈ સ્ટ્રીમ પ્લેયર મળ્યો નથી (તમે તેને ચલાવવા માટે VLC ઇન્સ્ટોલ કરી શકો છો).</string>
<string name="no_player_found">કોઈ સ્ટ્રીમ પ્લેયર મળ્યો નથી. વીએલસી સ્થાપિત કરીએ\?</string>
<string name="upload_date_text">%1$s પર પ્રકાશિત</string>
<string name="view_count_text">%1$s દૃશ્યો</string>
<string name="main_bg_subtitle">પ્રારંભ કરવા માટે વિપુલ - દર્શક કાચને ટેપ કરો.</string>
</resources>

View File

@ -730,5 +730,12 @@
<string name="off">כבוי</string>
<string name="on">פעיל</string>
<string name="tablet_mode_title">מצב מחשב לוח</string>
<string name="feed_toggle_show_played_items">הצגת פריטים שנוגנו</string>
<string name="feed_toggle_show_played_items">הצגת פריטים שנצפו</string>
<string name="comments_are_disabled">תגובות מושבתות</string>
<string name="dont_show">לא להציג</string>
<string name="low_quality_smaller">איכות נמוכה (קטן יותר)</string>
<string name="high_quality_larger">איכות גבוהה (גדול יותר)</string>
<string name="seekbar_preview_thumbnail_title">תמונה מוקטנת בסרגל הנגינה</string>
<string name="detail_heart_img_view_description">סומן בלב על ידי היוצר</string>
<string name="mark_as_watched">סימון כנצפה</string>
</resources>

View File

@ -51,7 +51,7 @@
<string name="item_deleted">Item हटा दिया गया है</string>
<string name="trending">फ़िलहाल चर्चा में है</string>
<string name="play_queue_audio_settings">ऑडियो सेटिंग</string>
<string name="main_bg_subtitle">शुरू करने के लिए \"सर्च\" बटन दबाएं</string>
<string name="main_bg_subtitle">आरंभ करने के लिए आवर्धक कांच पर टैप करें।</string>
<string name="cancel">कैंसल करे</string>
<string name="did_you_mean">क्या आप का मतलब \"%1$s\" था\?</string>
<string name="share_dialog_title">के साथ शेयर करे</string>
@ -539,14 +539,14 @@
<string name="auto_queue_toggle">ऑटोमैटिकली कतार करे</string>
<string name="clear_queue_confirmation_title">कतार को मिटाने से पहले सत्यापन के लिए पूछें</string>
<string name="seek_duration_title">तलाश अवधि फास्ट-फ़ॉरवर्ड /- रिवाइंड करे</string>
<string name="notification_colorize_summary">एंड्रॉइड को थंबनेल में मुख्य रंग के अनुसार अधिसूचना के रंग को अनुकूलित करने दें (ध्यान दें कि यह सभी फोन पर उपलब्ध नहीं है)</string>
<string name="notification_colorize_summary">एंड्रॉइड को थंबनेल में मुख्य रंग के अनुसार अधिसूचना रंग को अनुकूलित करें (ध्यान दें कि यह सभी उपकरणों पर उपलब्ध नहीं है)</string>
<string name="notification_colorize_title">नोटीफिकेशन को रंगीन करें</string>
<string name="notification_action_nothing">कुछ नहीं</string>
<string name="notification_action_buffering">बफरिंग</string>
<string name="notification_action_shuffle">Shuffle करे</string>
<string name="notification_action_repeat">दोहराएं</string>
<string name="notification_actions_at_most_three">आप कॉम्पैक्ट नोटिफिकेशन में दिखाए जाने वाले ऑप्शन्स में से अधिकतम 3 को चुन सकते है !</string>
<string name="notification_actions_summary">प्रत्येक नोटिफिकेशन को संपादित करने के लिए उस पर क्लिक करें। दाईं तरफ के चेकबॉक्स का इस्तेमाल करके नोटिफिकेशन में दिखाए जाने वाले अधिकतम 3 ऑप्शंस को चुना जा सकता है।</string>
<string name="notification_actions_summary">नीचे दी गई प्रत्येक अधिसूचना क्रिया को उस पर टैप करके संपादित करें। दाईं ओर चेकबॉक्स का उपयोग करके उनमें से अधिकतम तीन का चयन करें जिन्हें कॉम्पैक्ट अधिसूचना में दिखाया जाना है</string>
<string name="notification_action_4_title">पांचवा एक्शन बटन</string>
<string name="notification_action_3_title">चौथा एक्शन बटन</string>
<string name="notification_action_2_title">तीसरा एक्शन बटन</string>
@ -615,4 +615,13 @@
<string name="peertube_instance_url_title">पियरट्यूब उदाहरण</string>
<string name="featured">विशेष रुप से प्रदर्शित</string>
<string name="night_theme_title">रात्रि थीम</string>
<string name="msg_calculating_hash">हैश की गणना</string>
<string name="copy_for_github">स्वरूपित रिपोर्ट कॉपी करें</string>
<string name="clear_cookie_summary">कुकी साफ़ करें जिसे न्यूपाइप आपके द्वारा रीकैप्चा हल करने पर संग्रहीत करता है</string>
<string name="peertube_instance_add_exists">उदाहरण पहले से मौजूद है</string>
<string name="peertube_instance_add_fail">उदाहरण मान्य नहीं किया जा सका</string>
<string name="peertube_instance_add_help">उदाहरण URL दर्ज करें</string>
<string name="peertube_instance_add_title">उदाहरण जोड़ें</string>
<string name="peertube_instance_url_help">%s . पर अपनी पसंद के उदाहरण ढूँढ़ें</string>
<string name="peertube_instance_url_summary">अपने पसंदीदा PeerTube उदाहरण चुनें</string>
</resources>

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_bg_subtitle">Za početak dodirnite \"Lupo\"</string>
<string name="main_bg_subtitle">Za početak dodirnite povećalo.</string>
<string name="view_count_text">%1$s pregleda</string>
<string name="upload_date_text">Objavljeno %1$s</string>
<string name="no_player_found">Reproduktor za stream nije pronađen. Instalirati VLC\?</string>
<string name="install">Instaliraj</string>
<string name="cancel">Poništi</string>
<string name="cancel">Odustani</string>
<string name="open_in_browser">Otvori u pregledniku</string>
<string name="open_in_popup_mode">Otvori skočni prozor</string>
<string name="share">Podijeli</string>
@ -13,8 +13,8 @@
<string name="search">Pretraživanje</string>
<string name="settings">Postavke</string>
<string name="did_you_mean">Jeste li mislili „%1$s”\?</string>
<string name="share_dialog_title">Podijeli putem</string>
<string name="choose_browser">Izaberi pretraživač</string>
<string name="share_dialog_title">Podijeli pomoću</string>
<string name="choose_browser">Izaberi preglednik</string>
<string name="screen_rotation">rotacija</string>
<string name="use_external_video_player_title">Koristi vanjski reproduktor videozapisa</string>
<string name="use_external_video_player_summary">Uklanja zvuk pri nekim rezolucijama</string>
@ -31,18 +31,18 @@
<string name="controls_background_title">Pozadina</string>
<string name="controls_popup_title">Skočni prozor</string>
<string name="download_path_title">Mapa za preuzimanje videozapisa</string>
<string name="download_path_summary">Ovdje se spremaju preuzete video datoteke</string>
<string name="download_path_dialog_title">Odaberi mapu za preuzimanje video datoteka</string>
<string name="download_path_summary">Preuzeti videozapisi spremaju se ovdje</string>
<string name="download_path_dialog_title">Odaberi mapu za preuzimanje videozapisa</string>
<string name="download_path_audio_title">Mapa za preuzimanje zvuka</string>
<string name="download_path_audio_summary">Preuzete audio datoteke se spremaju ovdje</string>
<string name="download_path_audio_dialog_title">Odaberi mapu za preuzimanje audio datoteka</string>
<string name="download_path_audio_summary">Preuzete audio-datoteke spremaju se ovdje</string>
<string name="download_path_audio_dialog_title">Odaberi mapu za preuzimanje audio-datoteka</string>
<string name="autoplay_by_calling_app_title">Automatska reprodukcija</string>
<string name="autoplay_by_calling_app_summary">Reproducira videozapis kad se NewPipe pozove iz jedne druge aplikacije</string>
<string name="default_resolution_title">Standardna rezolucija</string>
<string name="default_popup_resolution_title">Standardna rezolucija skočnog prozora</string>
<string name="show_higher_resolutions_title">Prikaži više rezolucije</string>
<string name="show_higher_resolutions_summary">Samo neki uređaji podržavaju reprodukciju 2K/4K videozapisa</string>
<string name="play_with_kodi_title">Reproduciraj sa Kodijem</string>
<string name="play_with_kodi_title">Reproduciraj s Kodijem</string>
<string name="kore_not_found">Kore aplikacija nije pronađena. Želite li ju instalirati?</string>
<string name="show_play_with_kodi_title">Prikaži opciju \"Reproduciraj putem Kodija\"</string>
<string name="show_play_with_kodi_summary">Prikaži opciju za reproduciranje videozapisa putem Kodija</string>
@ -108,7 +108,7 @@
<string name="error_snackbar_action">Prijavi</string>
<string name="what_device_headline">Informacije:</string>
<string name="what_happened_headline">Što se dogodilo:</string>
<string name="info_labels">Što:\\nZahtijev:\\nJezik sadržaja:\\nZemlja sadržaja:\\nJezik programa:\\nUsluga:\\nGMT vrijeme:\\nPaket:\\nVerzija:\\nVerzija OS-a:</string>
<string name="info_labels">Što:\\nZahtjev:\\nJezik sadržaja:\\nZemlja sadržaja:\\nJezik aplikacije:\\nUsluga:\\nGMT vrijeme:\\nPaket:\\nVerzija:\\nVerzija OS-a:</string>
<string name="your_comment">Vaš komentar (na engleskom):</string>
<string name="error_details_headline">Detalji:</string>
<string name="list_thumbnail_view_description">Sličica pregleda videozapisa</string>
@ -164,7 +164,7 @@
<string name="copyright" formatted="true">© %1$s od %2$s pod %3$s</string>
<string name="error_unable_to_load_license">Nije moguće učitati licencu</string>
<string name="action_open_website">Otvori stranicu</string>
<string name="tab_about">O</string>
<string name="tab_about">O aplikaciji</string>
<string name="tab_contributors">Doprinositelji</string>
<string name="tab_licenses">Licence</string>
<string name="app_description">Besplatna i mala YouTube aplikacija za Android.</string>
@ -270,7 +270,7 @@
<string name="enable_leak_canary_summary">Monitoring curenja memorije može uzrokovati greške u radu aplikacije prilikom odlaganje gomile</string>
<string name="enable_disposed_exceptions_title">Izvijesti o krajevima životnog ciklusa</string>
<string name="show_info">Prikaži informacije</string>
<string name="tab_bookmarks">Zabilježene playliste</string>
<string name="tab_bookmarks">Zabilježeni popisi</string>
<string name="controls_add_to_playlist_title">Dodaj u</string>
<string name="download_thumbnail_title">Učitaj slike</string>
<string name="thumbnail_cache_wipe_complete_notice">Slikovna predmemorija obrisana</string>
@ -293,10 +293,10 @@
<string name="clear_views_history_title">Izbriši povijest gledanja</string>
<string name="clear_views_history_summary">Briše povijest reproduciranih streamova i pozicije reprodukcije</string>
<string name="delete_view_history_alert">Izbrisati cijelu povijest gledanja\?</string>
<string name="watch_history_deleted">Povijest gledanja je izbrisana.</string>
<string name="watch_history_deleted">Povijest gledanja je izbrisana</string>
<string name="clear_search_history_title">Izbriši povijest pretraživanja</string>
<string name="delete_search_history_alert">Izbrisati cijelu povijest pretraživanja\?</string>
<string name="search_history_deleted">Povijest pretraživanja je izbrisana.</string>
<string name="search_history_deleted">Povijest pretraživanja je izbrisana</string>
<string name="invalid_url_toast">Neispravan URL</string>
<string name="invalid_directory">Nema takve mape</string>
<string name="file_name_empty_error">Naziv datoteke ne može biti prazan</string>
@ -333,14 +333,14 @@
<string name="previous_export">Prethodni izvoz</string>
<string name="subscriptions_import_unsuccessful">Nije bilo moguće uvesti pretplate</string>
<string name="subscriptions_export_unsuccessful">Nije bilo moguće izvesti pretplate</string>
<string name="import_youtube_instructions">Uvezite YouTube pretplatnike preuzimanjem izvozne datoteke Google-a:
<string name="import_youtube_instructions">Uvezite pretplate na YouTubu pomoću Google Takeouta:
\n
\n1. Idite na ovaj URL: %1$s
\n2. Prijavite se
\n3. Kliknite \"Uključeni svi podaci\", zatim \"Poništi odabir svih\", a zatim odaberite samo \"pretplate\" i kliknite \"U redu\"
\n4. Kliknite na \"Nastavi\", a zatim \"Stvori izvoz\"
\n5. Kliknite na \"Preuzmi\"
\n6. Preuzmite zip datoteku i izvucite json datoteku (pod \"YouTube and YouTube Music/subscriptions/subscriptions.json\") pa uvezite je ovdje</string>
\n6. Preuzmite zip datoteku i izvucite json datoteku (pod \"YouTube and YouTube Music/subscriptions/subscriptions.json\") pa uvezite je ovdje.</string>
<string name="import_soundcloud_instructions_hint">vašID, soundcloud.com/vašID</string>
<string name="import_network_expensive_warning">Uzmite u obzir da ova operacija može uzrokovat veliku potrošnju prometa.
\n
@ -354,10 +354,10 @@
<string name="limit_data_usage_none_description">Bez ograničenja</string>
<string name="limit_mobile_data_usage_title">Ograniči rezoluciju tijekom korištenja mobilnih podataka</string>
<string name="minimize_on_exit_none_description">Nijedan</string>
<string name="no_player_found_toast">Reproduktor za stream nije pronađen (možete instalirati VLC za reprodukciju).</string>
<string name="no_player_found_toast">Reproduktor za stream nije pronađen (možeš instalirati VLC za reprodukciju).</string>
<string name="controls_download_desc">Preuzmi datoteku streama</string>
<string name="use_inexact_seek_title">Koristi brzo netočno premotavanje</string>
<string name="use_inexact_seek_summary">Netočno premotavanje omogućava reproduktoru da premota brže uz manju točnost. Premotavanje od 5, 15 ili 25 sekundi s ovime nije moguće.</string>
<string name="use_inexact_seek_summary">Netočno premotavanje omogućava reproduktoru da premota brže uz manju točnost. Premotavanje od 5, 15 ili 25 sekundi s ovime nije moguće</string>
<string name="unsubscribe">Otkaži pretplatu</string>
<string name="tab_new">Nova kartica</string>
<string name="tab_choose">Odaberi karticu</string>
@ -377,7 +377,7 @@
<string name="download_failed">Preuzimanje nije uspjelo</string>
<string name="download_finished">Preuzimanje je gotovo</string>
<string name="show_error">Prikaži pogrešku</string>
<string name="download_thumbnail_summary">Isključi, kako bi se spriječilo učitavanje sličica, spremanje podataka i korištenje memorije. Promjene prazne radnu i trajnu predmemoriju slika.</string>
<string name="download_thumbnail_summary">Isključi za sprječavanje učitavanja sličica, čime se štede podatci i memorija. Promjena postavke čisti predmemoriju u radnoj memoriji i u pohrani</string>
<string name="metadata_cache_wipe_summary">Izbriši sve podatke web-stranica iz predmemorije</string>
<string name="metadata_cache_wipe_complete_notice">Metapodaci su izbrisani</string>
<string name="auto_queue_title">Automatski dodaj sljedeći stream u popisa izvođenja</string>
@ -408,7 +408,7 @@
<string name="preferred_open_action_settings_title">Preferirana \'otvori\' akcija</string>
<string name="preferred_open_action_settings_summary">Zadana radnja pri otvaranju sadržaja — %s</string>
<string name="caption_setting_title">Titlovi</string>
<string name="caption_setting_description">Izmijenite skalu teksta naslova player-a i pozadinske stilove. Potrebno je ponovno pokretanje aplikacije kako bi stupilo na snagu.</string>
<string name="caption_setting_description">Izmijeni skalu podnaslova i pozadinske stilove reproduktora. Potrebno je ponovno pokretanje aplikacije kako bi stupilo na snagu</string>
<string name="enable_disposed_exceptions_summary">Prisilno izvješćivanje o greškama Rx-a koje se ne mogu isporučiti izvan \'fragmenta\' ili životnog ciklusa aktivnosti nakon odlaganja</string>
<string name="import_soundcloud_instructions">Uvezite SoundCloud profil tako da upišete URL ili svoj ID:
\n
@ -439,7 +439,7 @@
<string name="overwrite_finished_warning">Preuzeta datoteka s tim nazivom već postoji</string>
<string name="download_already_running">Datoteka s ovim nazivom se već preuzima</string>
<string name="label_code">Kod</string>
<string name="error_path_creation">Nije moguće stvoriti odredišnu mapu</string>
<string name="error_path_creation">Odredišna mapa ne može biti stvorena</string>
<string name="error_file_creation">Datoteka se ne može stvoriti</string>
<string name="error_permission_denied">Sustav je odbio dozvolu</string>
<string name="error_ssl_exception">Nije moguće uspostaviti sigurnu vezu</string>
@ -470,7 +470,7 @@
<string name="enable_playback_state_lists_title">Pozicije na popisima</string>
<string name="enable_playback_state_lists_summary">Prikaži poziciju reprodukcije na listi</string>
<string name="settings_category_clear_data_title">Obriši podatke</string>
<string name="watch_history_states_deleted">Pozicije reprodukcije su izbrisane.</string>
<string name="watch_history_states_deleted">Pozicije reprodukcije su izbrisane</string>
<string name="missing_file">Datoteka je premještena ili izbrisana</string>
<string name="download_already_pending">Datoteka s ovim nazivom već čeka na preuzimanje</string>
<string name="error_timeout">Vrijeme povezanosti je isteklo</string>
@ -483,7 +483,7 @@
<string name="delete_playback_states_alert">Izbrisati sve pozicije reprodukcije\?</string>
<string name="no_one_watching">Nitko ne gleda</string>
<string name="no_one_listening">Nitko ne sluša</string>
<string name="localization_changes_requires_app_restart">Jezik će se promjeniti nakon ponovnog pokretanja aplikacije.</string>
<string name="localization_changes_requires_app_restart">Jezik će se promjeniti nakon ponovnog pokretanja aplikacije</string>
<string name="default_kiosk_page_summary">Zadani Kiosk</string>
<string name="peertube_instance_add_https_only">Podržani su samo HTTP URL-ovi</string>
<string name="local">Lokalno</string>
@ -519,7 +519,7 @@
<string name="settings_category_notification_title">Obavijest</string>
<string name="never">Nikada</string>
<string name="enable_queue_limit">Ograniči popis preuzimanja</string>
<string name="downloads_storage_use_saf_title">Koristi SAF</string>
<string name="downloads_storage_use_saf_title">Koristi birač mapa sustava (SAF)</string>
<string name="remove_watched">Ukloni pregledano</string>
<string name="remove_watched_popup_title">Ukloni pogledane videozapise\?</string>
<plurals name="seconds">
@ -550,7 +550,7 @@
<string name="notification_action_2_title">Gumb treće radnje</string>
<string name="notification_action_1_title">Gumb druge radnje</string>
<string name="notification_action_0_title">Gumb prve radnje</string>
<string name="download_choose_new_path">Promijenite mape za preuzimanje kako bi stupile na snagu</string>
<string name="download_choose_new_path">Promijeni mape za preuzimanje kako bi stupilo na snagu</string>
<string name="search_showing_result_for">Prikazuju se rezultati za: %s</string>
<string name="unsupported_url_dialog_message">Nije moguće prepoznati URL. Želite li otvoriti u drugoj aplikaciji\?</string>
<string name="notification_scale_to_square_image_title">Smanjiti omjer minijatura na 1:1</string>
@ -568,7 +568,7 @@
<item quantity="few">%s slušatelja</item>
<item quantity="other">%s slušatelja</item>
</plurals>
<string name="overwrite_failed">nije moguće prepisati datoteku</string>
<string name="overwrite_failed">datoteka ne može biti prepisana</string>
<string name="notification_scale_to_square_image_summary">Promijeni omjer prikazane minijature videa u obavijesti iz 16:9 na 1:1 (može prouzročiti izobličenja)</string>
<string name="notification_actions_at_most_three">U kompaktnom prikazu obavijesti mogu se odabrati najviše 3 radnje!</string>
<string name="video_detail_by">Od %s</string>
@ -589,7 +589,8 @@
<string name="feed_groups_header_title">Grupe kanala</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Da, i djelomično pogledane videozapise</string>
<string name="choose_instance_prompt">Odaberi primjerak</string>
<string name="downloads_storage_ask_summary">Program će te pitati kamo spremati preuzimanja</string>
<string name="downloads_storage_ask_summary">Aplikacija će te pitati kamo spremati preuzimanja.
\nOmogući birač mapa sustava (SAF), ako želiš preuzimati na vanjsku SD karticu</string>
<string name="error_download_resource_gone">Nije moguće obnoviti ovo preuzimanje</string>
<string name="error_progress_lost">Napredak je izgubljen, jer je datoteka izbrisana</string>
<string name="error_postprocessing_stopped">NewPipe se zatvorio tijekom rada s datotekom</string>
@ -630,7 +631,7 @@
<string name="notification_action_shuffle">Promiješaj</string>
<string name="notification_action_repeat">Ponovi</string>
<string name="error_report_open_github_notice">Provjeri je li tvoj problem već postoji. Dupla pojava problema krade nam vrijeme koje bismo mogli utrošiti na ispravljanje same greške.</string>
<string name="notification_actions_summary">Za uređivanje obavijesti radnji, dodirni ih. Označi do tri radnje za kompaktni prikaz obavijesti.</string>
<string name="notification_actions_summary">Za uređivanje radnji u obavijestima, dodirni ih. Označi do tri radnje za prikaz u kompaktnoj obavijesti koristeći oznake na desnoj strani</string>
<string name="new_seek_duration_toast">Zbog ograničenja ExoPlayera, trajanje traženja postavljeno je na %d s</string>
<string name="notification_colorize_summary">Neka Android prilagodi boju obavijesti prema glavnoj boji minijature (ovo nije dostupno na svim uređajima)</string>
<string name="notification_colorize_title">Oboji obavijest</string>
@ -640,10 +641,9 @@
<string name="show_thumbnail_summary">Prikaži minijaturu kao pozadinu pri zaključanom ekranu i unutar obavijesti</string>
<string name="show_thumbnail_title">Prikaži minijaturu</string>
<string name="show_original_time_ago_title">Prikaži izvorno vrijeme elemenata</string>
<string name="downloads_storage_use_saf_summary">„Okvir za pristup spremištu” omogućuje preuzimanje na SD karticu.
\nNeki uređaji nisu kompatibilni</string>
<string name="downloads_storage_use_saf_summary">„Okvir za pristup spremištu” omogućuje preuzimanje na SD karticu</string>
<string name="show_original_time_ago_summary">Izvorni tekstovi usluga bit će vidljivi u elementima prijenosa</string>
<string name="feed_use_dedicated_fetch_method_summary">Dostupno je u nekim uslugama. Obično je puno brže, ali može vratiti ograničenu količinu predmeta i često nepotpune podatke (npr. bez trajanja, vrste predmeta, bez stanja uživo).</string>
<string name="feed_use_dedicated_fetch_method_summary">Dostupno je u nekim uslugama. Obično je puno brže, ali može dohvatiti ograničenu količinu stavki i često nepotpune podatke (npr. bez trajanja, vrste stavke, bez stanja uživo)</string>
<string name="feed_use_dedicated_fetch_method_help_text">Mislite li da je učitavanje feeda prespor\? Ako je to slučaj, pokušajte omogućiti brzo učitavanje (možete ga promijeniti u postavkama ili pritiskom na donji gumb).
\n
\nNewPipe nudi dvije strategije ulaganja feeda:
@ -659,7 +659,7 @@
<string name="hash_channel_name">Obavijest šifriranja videa</string>
<string name="hash_channel_description">Obavijesti o napretku šifriranja videa</string>
<string name="recent">Nedavni</string>
<string name="show_meta_info_summary">Isključi za skrivanje polja metapodataka s dodatnim podacima o autoru streama, sadržaju streama ili zahtjevu za pretraživanje.</string>
<string name="show_meta_info_summary">Isključi za skrivanje polja metapodataka s dodatnim podacima o autoru streama, sadržaju streama ili zahtjevu za pretraživanje</string>
<string name="show_meta_info_title">Prikaži metapodatke</string>
<string name="related_items_tab_description">Slični videozapisi</string>
<string name="no_app_to_open_intent">Nijedna aplikacija na vašem uređaju ne može to otvoriti</string>
@ -668,7 +668,7 @@
<string name="comments_tab_description">Komentari</string>
<string name="show_description_summary">Isključi za skrivanje opisa videozapisa i dodatnih informacija</string>
<string name="show_description_title">Prikaži opis</string>
<string name="open_with">Otvorite uz pomoć aplikacije</string>
<string name="open_with">Otvori pomoću</string>
<string name="soundcloud_go_plus_content">Ovo je SoundCloud Go+ snimka (barem u tvojoj zemlji), stoga ga NewPipe ne može emitirati ili preuzeti.</string>
<string name="restricted_video_no_stream">Ovaj je video dobno ograničen.
\nZbog novih YouTube pravila za videa s dobnim ograničenjem, NewPipe ne može pristupiti nijednoj vlastitoj video emisiji i stoga je ne može reproducirati.</string>
@ -688,4 +688,44 @@
<string name="show_channel_details">Prikaži detalje kanala</string>
<string name="disable_media_tunneling_summary">Iskljuci medija tuneling ako dobivate crni ekran kada gledate video</string>
<string name="disable_media_tunneling_title">Iskljuci medija tuneling</string>
<string name="off">Isklj.</string>
<string name="on">Uklj.</string>
<string name="tablet_mode_title">Način rada na tabletu</string>
<string name="open_website_license">Otvori stranicu</string>
<string name="detail_heart_img_view_description">Srce autora</string>
<string name="metadata_privacy_private">Privatno</string>
<string name="metadata_privacy_unlisted">Nenavedeno</string>
<string name="metadata_privacy_public">Javno</string>
<string name="metadata_thumbnail_url">URL minijature</string>
<string name="metadata_host">Poslužitelj</string>
<string name="metadata_support">Podrška</string>
<string name="metadata_language">Jezik</string>
<string name="metadata_age_limit">Dobna granica</string>
<string name="metadata_licence">Licenca</string>
<string name="metadata_tags">Oznake</string>
<string name="metadata_category">Kategorija</string>
<string name="description_select_disable">Onemogućite odabir teksta u opisu</string>
<string name="description_select_enable">Omogućite odabir teksta u opisu</string>
<string name="account_terminated">Račun ukinut</string>
<string name="feed_toggle_show_played_items">Prikaži pogledane stavke</string>
<string name="feed_load_error_terminated">Autorov račun je ukinut.
\nNewPipe ubuduće neće moći učitavati ovaj feed.
\nŽelite li otkazati pretplatu na ovaj kanal\?</string>
<string name="feed_load_error_account_info">Nije moguće učitati feed za \'%s\'.</string>
<string name="feed_load_error">Pogreška pri učitavanju feeda</string>
<string name="downloads_storage_use_saf_summary_api_29">Počevši od Androida 10, podržan je samo \'Storage Access Framework\'</string>
<string name="downloads_storage_use_saf_summary_api_19">„Storage Access Framework“ nije podržan na Androidu KitKat i starijim</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Od vas će se tražiti gdje spremiti svako preuzimanje</string>
<string name="dont_show">Ne prikazuj</string>
<string name="low_quality_smaller">Niska kvaliteta (manji)</string>
<string name="high_quality_larger">Visoka kvaliteta (veća)</string>
<string name="seekbar_preview_thumbnail_title">Pregled sličica trake za pretraživanje</string>
<string name="no_dir_yet">Mapa za preuzimanje još nije postavljena, odaberite zadanu mapu za preuzimanje</string>
<string name="comments_are_disabled">Komentari su onemogućeni</string>
<string name="mark_as_watched">Označi kao pogledano</string>
<string name="feed_load_error_fast_unknown">Način rada brzog feeda ne pruža više informacija o ovome.</string>
<string name="metadata_privacy_internal">Interno</string>
<string name="metadata_privacy">Privatnost</string>
<string name="description_select_note">Sada možeš odabrati tekst u opisu. Napomena: stranica će možda treperiti i možda nećeš moći kliknuti poveznice u načinu rada za odabir teksta.</string>
<string name="service_provides_reason">%s daje ovaj razlog:</string>
</resources>

View File

@ -41,7 +41,7 @@
<string name="dark_theme_title">Sötét</string>
<string name="light_theme_title">Világos</string>
<string name="theme_title">Téma</string>
<string name="download_path_audio_title">Hangfájlok letöltési helye</string>
<string name="download_path_audio_title">Hangfájlok letöltési mappája</string>
<string name="download_path_audio_summary">A letöltött hangfájlok itt találhatóak</string>
<string name="detail_likes_img_view_description">Tetszik</string>
<string name="detail_dislikes_img_view_description">Nem tetszik</string>
@ -75,7 +75,7 @@
<string name="user_report">Felhasználói jelentés</string>
<string name="video">Videó</string>
<string name="audio">Audio</string>
<string name="main_bg_subtitle">A kezdéshez koppints a \"Keresés\"-re</string>
<string name="main_bg_subtitle">A kezdéshez koppints a \"Keresés\"-re.</string>
<string name="could_not_load_thumbnails">Nem sikerült az összes előnézeti kép betöltése</string>
<string name="parsing_error">Nem sikerült a weblap betöltése</string>
<string name="light_parsing_error">Nem sikerült a weblap teljes betöltése</string>
@ -155,7 +155,7 @@
<string name="unknown_content">[Ismeretlen]</string>
<string name="import_data_title">Adatbázis importálása</string>
<string name="export_data_title">Adatbázis exportálása</string>
<string name="import_data_summary">Felülírja a jelenlegi előzményeket, feliratkozásokat, lejátszási listákat és (opcionálisan) a beállításokat</string>
<string name="import_data_summary">Felülírja a jelenlegi előzményeket, feliratkozásokat, lejátszási listákat és (választható) beállításokat</string>
<string name="export_data_summary">Előzmények, feliratkozások, lejátszási listák és beállítások exportálása</string>
<string name="could_not_load_image">Kép betöltése sikertelen</string>
<string name="app_ui_crash">Alkalmazás/Kezelő felület összeomlott</string>
@ -187,7 +187,7 @@
<string name="switch_to_background">Folytatás a háttérben</string>
<string name="switch_to_popup">Folytatás felugró ablakban</string>
<string name="clear_views_history_title">Megtekintési előzmények törlése</string>
<string name="clear_views_history_summary">Eltávolítja a megtekintési előzményeket és a visszajátszás helyét</string>
<string name="clear_views_history_summary">Eltávolítja a megtekintési előzményeket és a lejátszási pozíciókat</string>
<string name="delete_view_history_alert">Törlöd az összes megtekintési előzményt\?</string>
<string name="watch_history_deleted">Megtekintési előzmények törölve.</string>
<string name="clear_search_history_title">Keresési előzmények törlése</string>
@ -332,11 +332,14 @@
<string name="previous_export">Előző exportálás</string>
<string name="subscriptions_import_unsuccessful">Sikertelen a feliratkozások importálása</string>
<string name="subscriptions_export_unsuccessful">Sikertelen a feliratkozások exportálása</string>
<string name="import_youtube_instructions">Importálja YouTube feliratkozásait az export fájl letöltésével:
<string name="import_youtube_instructions">YouTube feliratkozások importálása Google takeout-ból:
\n
\n1. Navigáljon erre az oldalra: %1$s
\n2. Jelentkezzen be
\n3. Ekkor az export fájl letöltése megkezdődik</string>
\n1. Navigálj erre az oldalra: %1$s
\n2. Jelentkezz be
\n3. Kattints a \"All data included/Minden adat\"-ra, majd a \"Deselect all/MInden kijelölés megszüntetése\" gombra, majd válaszd ki a \"subscriptions/feliratkozások\" és kattints az \"OK\"-ra
\n4. Kattints a \"Next step/Következő lépés\", majd az \"Create export/Export létrehozása\" gombra
\n5. Kattints a \"Download/Letöltés\" gombra, mikor megjelenik, majd
\n6. A letöltött zip fájlból csomagold ki a .json fájlt (általában: \"YouTube and YouTube Music/subscriptions/subscriptions.json\"), majd importáld itt.</string>
<string name="import_soundcloud_instructions">Importálja SoundCloud profilját az URL vagy az azonosítójának begépelésével:
\n
\n1. Az oldal mobileszközökön nem elérhető, így „asztali böngésző mód” szükséges
@ -363,7 +366,7 @@
<string name="resume_on_audio_focus_gain_title">Lejátszás folytatása</string>
<string name="show_hold_to_append_title">Mutassa a \"Tartsa lenyomva a hozzáadáshoz\" tippet</string>
<string name="background_player_append">Várólistához adva a háttérben</string>
<string name="toggle_orientation">Elforgatás</string>
<string name="toggle_orientation">Kijelzőforgatás állítása</string>
<string name="unsubscribe">Leiratkozás</string>
<string name="tab_new">Új fül</string>
<string name="tab_choose">Válassz fület</string>
@ -377,9 +380,9 @@
<string name="enqueue">Sor</string>
<string name="overwrite_failed">a fájl nem írható felül</string>
<string name="seek_duration_title">Az előre- és visszatekerés időtartama</string>
<string name="enable_playback_resume_summary">Legutóbbi lejátszási pozíció visszaállítása</string>
<string name="enable_playback_resume_summary">Utolsó lejátszási pozíció visszaállítása</string>
<string name="enable_playback_resume_title">Lejátszás folytatása</string>
<string name="download_choose_new_path">Változtasd meg a letöltési helyet, hogy érvénybe lépjen</string>
<string name="download_choose_new_path">Az érvénybe lépéshez változtassa meg a letöltési helyet</string>
<string name="app_update_notification_channel_description">Jelentés új NewPipe verzióról</string>
<string name="app_update_notification_channel_name">Alkalmazás-frissítés jelzése</string>
<string name="file_deleted">File törölve</string>
@ -467,7 +470,7 @@
<string name="open_with">Megnyitás ezzel</string>
<string name="unsupported_url_dialog_message">Az URL-t nem lehetett felismerni. Megnyitás másik alkalmazással\?</string>
<string name="auto_queue_toggle">Automatikus sorba állítás</string>
<string name="show_description_summary">Kapcsold ki a videó leírásának és további adatainak elrejtéséhez</string>
<string name="show_description_summary">"Kikapcsolása elrejti a videó leírását és a kapcsolódó információt"</string>
<string name="restore_defaults_confirmation">Vissza akarod állítani az alapértelmezéseket\?</string>
<string name="restricted_video_no_stream">Ez a videó korhatáros.
\nÚj, korhatáros videókkal kapcsolatos YouTube irányelvek miatt a NewPipe nem férhet hozzá a videóhoz, így nem tudja lejátszani.</string>
@ -555,7 +558,7 @@
<string name="clear_queue_confirmation_description">A jelenleg aktív lejátszási sor le lesz cserélve</string>
<string name="clear_queue_confirmation_title">Kérjen megerősítést a lejátszási sor törlése előtt</string>
<string name="night_theme_title">Éjszakai téma</string>
<string name="updates_setting_description">Értesítsen, ha egy új verziója érhető el az alkalmazásnak</string>
<string name="updates_setting_description">Értesítés az alkalmazás frissítéséhez, amikor egy új verzió érhető el</string>
<string name="updates_setting_title">Frissítések</string>
<string name="notification_colorize_summary">Az Android igazítsa az értesítés színét a bélyegkép meghatározó színéhez (nem minden eszközön elérhető)</string>
<string name="notification_actions_at_most_three">Legfeljebb három választható művelet jeleníthető meg a kompakt értesítésben!</string>
@ -632,4 +635,5 @@
<string name="msg_calculating_hash">Hash számítása</string>
<string name="related_items_tab_description">Összefüggő elemek</string>
<string name="error_report_open_github_notice">Kérlek ellenőrizd, hogy egy hiba, ami az összeomlásodat írja le, létezik-e már. Ha duplikált jegyet adsz be, időt veszel el tőlünk amit arra tudnánk fordítani, hogy kijavítsuk magát a bugot.</string>
<string name="minimize_on_exit_title">Lekicsinyítés alkalmazás váltáskor</string>
</resources>

View File

@ -700,6 +700,11 @@
<string name="off">Nonaktif</string>
<string name="on">Aktif</string>
<string name="tablet_mode_title">Mode tablet</string>
<string name="feed_toggle_show_played_items">Tampilkan item yang telah diputar</string>
<string name="item_in_history">Dalam Riwayat</string>
<string name="feed_toggle_show_played_items">Tampilkan item yang sudah ditonton</string>
<string name="dont_show">Jangan tampilkan</string>
<string name="low_quality_smaller">Kualitas rendah (lebih kecil)</string>
<string name="high_quality_larger">Kualitas tinggi (lebih besar)</string>
<string name="comments_are_disabled">Komentar dinonaktifkan</string>
<string name="seekbar_preview_thumbnail_title">Pratinjau thumbnail bilah laju</string>
<string name="mark_as_watched">Tandai ditonton</string>
</resources>

View File

@ -102,7 +102,7 @@
<string name="no_available_dir">Seleziona una cartella per i file scaricati</string>
<string name="could_not_load_image">Impossibile caricare l\'immagine</string>
<string name="app_ui_crash">L\'app/UI si è interrotta</string>
<string name="info_labels">Cosa:\\nRichiesta:\\nLingua Contenuti:\\nPaese Contenuti\\nLingua App:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO:</string>
<string name="info_labels">Cosa:\\nRichiesta:\\nLingua contenuti:\\nPaese contenuti\\nLingua app:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO:</string>
<string name="title_activity_recaptcha">Risoluzione reCAPTCHA</string>
<string name="black_theme_title">Nero</string>
<string name="all">Tutto</string>
@ -383,7 +383,7 @@
<string name="limit_data_usage_none_description">Nessun limite</string>
<string name="limit_mobile_data_usage_title">Limita risoluzione su reti mobili</string>
<string name="skip_silence_checkbox">Avanzamento veloce durante il silenzio</string>
<string name="playback_step">Step</string>
<string name="playback_step">Passo</string>
<string name="playback_reset">Reset</string>
<string name="minimize_on_exit_title">Comportamento al cambio di app</string>
<string name="minimize_on_exit_summary">Azione da eseguire cambiando app dal lettore video principale — %s</string>
@ -593,7 +593,7 @@
\nAttivare «%1$s» nelle Impostazioni per poterlo vedere.</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Sì, anche quelli visualizzati parzialmente</string>
<string name="remove_watched_popup_warning">I video che sono stati visti prima e dopo essere stati aggiunti alla playlist verranno rimossi.
\nL\'azione è irreversibile. Procedere\?</string>
\nProcedere\? L\'azione è irreversibile!</string>
<string name="remove_watched_popup_title">Rimuovere i video già visti\?</string>
<string name="remove_watched">Rimuovi elementi visti</string>
<string name="youtube_restricted_mode_enabled_title">Attiva la \"Modalità con restrizioni\" di YouTube</string>
@ -625,7 +625,7 @@
<string name="notification_action_2_title">Azione pulsante 3</string>
<string name="notification_action_1_title">Azione pulsante 2</string>
<string name="notification_action_0_title">Azione pulsante 1</string>
<string name="notification_action_buffering">Buffering</string>
<string name="notification_action_buffering">Buffer in corso</string>
<string name="notification_actions_at_most_three">Nella notifica compatta è possibile visualizzare al massimo 3 azioni!</string>
<string name="notification_action_shuffle">Casuale</string>
<string name="settings_category_notification_title">Notifica</string>
@ -649,7 +649,7 @@
<string name="hash_channel_name">Notifica Hash Video</string>
<string name="hash_channel_description">Notifiche per lo stato di avanzamento dell\'hashing video</string>
<string name="recent">Recente</string>
<string name="show_meta_info_summary">Disattiva per nascondere i riquadri con informazioni aggiuntive sul contenuto, sul suo creatore o su una richiesta di ricerca</string>
<string name="show_meta_info_summary">Disattiva per nascondere i riquadri con informazioni aggiuntive sul contenuto, sul suo autore o su una richiesta di ricerca</string>
<string name="show_meta_info_title">Mostra meta-informazioni</string>
<string name="related_items_tab_description">Contenuti correlati</string>
<string name="chapters">Capitoli</string>
@ -710,5 +710,12 @@
<string name="off">Disattivata</string>
<string name="on">Attiva</string>
<string name="tablet_mode_title">Modalità tablet</string>
<string name="feed_toggle_show_played_items">Mostra elementi riprodotti</string>
<string name="feed_toggle_show_played_items">Mostra elementi visti</string>
<string name="dont_show">Non mostrare</string>
<string name="low_quality_smaller">Qualità bassa (più piccola)</string>
<string name="high_quality_larger">Qualità alta (più grande)</string>
<string name="seekbar_preview_thumbnail_title">Anteprima sulla barra di avanzamento</string>
<string name="comments_are_disabled">Commenti disattivati</string>
<string name="detail_heart_img_view_description">Apprezzato dall\'autore</string>
<string name="mark_as_watched">Segna come visto</string>
</resources>

View File

@ -699,4 +699,12 @@
<string name="off">オフ</string>
<string name="on">オン</string>
<string name="tablet_mode_title">タブレットモード</string>
<string name="service_provides_reason">%s がこの理由を提示:</string>
<string name="feed_toggle_show_played_items">視聴したアイテムを表示</string>
<string name="dont_show">表示しない</string>
<string name="low_quality_smaller">低品質 (小)</string>
<string name="high_quality_larger">高品質 (大)</string>
<string name="seekbar_preview_thumbnail_title">シークバーのサムネイルプレビュー</string>
<string name="comments_are_disabled">コメントは無効です</string>
<string name="mark_as_watched">視聴済みとしてマーク</string>
</resources>

View File

@ -580,4 +580,5 @@
<string name="permission_display_over_apps">다른 앱 위에 표시되는 권한 부여</string>
<string name="show_meta_info_title">메타 정보 표시</string>
<string name="notification_colorize_title">색상화된 알림</string>
<string name="clear_queue_confirmation_description">활성화된 플레이어 대기열이 교체됩니다.</string>
</resources>

View File

@ -20,8 +20,8 @@
<string name="use_external_video_player_summary">Kai kurios raiškos nepalaiko garso, kai ši parinktis įgalinta</string>
<string name="use_external_audio_player_title">Naudoti išorinį audio grotuvą</string>
<string name="popup_mode_share_menu_title">iššokančio lango rėžimas</string>
<string name="controls_background_title">Fonas</string>
<string name="controls_popup_title">Išokantis langelis</string>
<string name="controls_background_title">Groti fone</string>
<string name="controls_popup_title">Groti iššokančiame lange</string>
<string name="download_path_title">Vaizdo įrašų parsisiuntimo aplankas</string>
<string name="download_path_summary">Vieta parsisiųstų vaizdo įrašų laikymui</string>
<string name="download_path_dialog_title">Pasirinkite parsiuntimo aplankalą vaizdo įrašams</string>
@ -39,8 +39,8 @@
<string name="show_play_with_kodi_title">Rodyti \"Peržiūra su Kodi\" pasirinkimą</string>
<string name="show_play_with_kodi_summary">Rodyti pasirinkimą peržiūrėti vaizdo įrašus per Kodi mediacentrą</string>
<string name="play_audio">Garso įrašas</string>
<string name="default_audio_format_title">Numatytasos garso formatas</string>
<string name="default_video_format_title">Numatytasos vaizdo formatas</string>
<string name="default_audio_format_title">Numatytasis garso formatas</string>
<string name="default_video_format_title">Numatytasis vaizdo formatas</string>
<string name="theme_title">Tema</string>
<string name="light_theme_title">Šviesi</string>
<string name="dark_theme_title">Tamsi</string>
@ -54,7 +54,7 @@
<string name="download_dialog_title">Atsisiųsti</string>
<string name="show_next_and_similar_title">Rodyti „kitus” ir „panašius” vaizdo įrašus</string>
<string name="unsupported_url">URL nepalaikoma</string>
<string name="content_language_title">Numatytoji tūrinio kalba</string>
<string name="content_language_title">Numatytoji turinio kalba</string>
<string name="settings_category_video_audio_title">Vaizdas ir garsas</string>
<string name="settings_category_popup_title">Iššokantis langas</string>
<string name="settings_category_appearance_title">Išvaizda</string>
@ -187,7 +187,7 @@
</plurals>
<string name="no_videos">Nėra vaizdo įrašų</string>
<string name="view">Groti</string>
<string name="settings_category_downloads_title">Parsisiųsti</string>
<string name="settings_category_downloads_title">Parsisiuntimai</string>
<string name="settings_file_charset_title">Leidžiami simboliai bylų varduose</string>
<string name="settings_file_replacement_character_summary">Neleistini simboliai yra pakeičiami šia reikšme</string>
<string name="settings_file_replacement_character_title">Pakaitinis simbolis</string>
@ -248,7 +248,7 @@
<string name="show_info">Rodyti informaciją</string>
<string name="tab_bookmarks">Pažymėti grojaraščiai</string>
<string name="controls_add_to_playlist_title">Pridėti į</string>
<string name="default_content_country_title">Numatyta tūrinio šalis</string>
<string name="default_content_country_title">Numatyta turinio šalis</string>
<string name="service_title">Paslauga</string>
<string name="settings_category_debug_title">Šalinti riktus</string>
<string name="always">Visada</string>
@ -711,7 +711,7 @@
<string name="description_select_note">Dabar apraše galite pasirinkti tekstą aprašyme. Atminkite, kad puslapis gali mirgėti, o nuorodos gali būti nespustelėjamos, kai veikia pasirinkimo režimas.</string>
<string name="service_provides_reason">%s pateikia šią priežastį:</string>
<string name="account_terminated">Paskyra anuliuota</string>
<string name="feed_toggle_show_played_items">Rodyti grojamus elementus</string>
<string name="feed_toggle_show_played_items">Rodyti peržiūrėtus elementus</string>
<string name="feed_load_error_fast_unknown">Greito srauto režimas nesuteikia daugiau informacijos apie tai.</string>
<string name="feed_load_error_terminated">Autoriaus paskyra anuliuota.
\n„NewPipe“ negalės įkelti šio kanalo ateityje.
@ -721,4 +721,11 @@
<string name="downloads_storage_use_saf_summary_api_19">\'Storage Access Framework\' nėra palaikomas Android KitKat ir žemesnėse versijose</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Jūsų bus paklausta, kur išsaugoti kiekvieną atsiuntimą</string>
<string name="no_dir_yet">Atsiuntimo aplankas dar nenustatytas, pasirinkite numatytąjį atsiuntimų aplanką dabar</string>
<string name="comments_are_disabled">Komentarai yra išjungti</string>
<string name="low_quality_smaller">Žema kokybė (mažesnės)</string>
<string name="high_quality_larger">Aukšta kokybė (didesnės)</string>
<string name="seekbar_preview_thumbnail_title">Miniatiūrų peržiūra naudojant slinkties juostą</string>
<string name="dont_show">Nerodyti</string>
<string name="detail_heart_img_view_description">Širdelė nuo kurėjo</string>
<string name="mark_as_watched">Pažymėti kaip peržiūrėtą</string>
</resources>

View File

@ -613,7 +613,7 @@
<string name="no_player_found">Netika atrasts video atskaņotājs. Instalēt VLC\?</string>
<string name="upload_date_text">Publicēts %1$s</string>
<string name="view_count_text">%1$s skatījumi</string>
<string name="main_bg_subtitle">Nospiediet \"Meklēt\", lai sāktu</string>
<string name="main_bg_subtitle">Nospiediet \"Meklēt\", lai sāktu.</string>
<string name="notification_colorize_title">Iekrāsot notifikāciju</string>
<string name="notification_action_nothing">Nekas</string>
<string name="notification_action_buffering">Lādējas</string>
@ -686,4 +686,18 @@
<string name="restricted_video_no_stream">Šis video ir ierobežots ar vecumu.
\nŅemot vērā jauno YouTube politiku ar vecuma ierobežotiem videoklipiem, Newpipe nevar piekļūt šim videoklipam.</string>
<string name="night_theme_title">Nakts Motīvs</string>
<string name="off">Izslēgts</string>
<string name="on">Ieslēgts</string>
<string name="metadata_privacy_private">Privāts</string>
<string name="metadata_privacy_public">Publisks</string>
<string name="metadata_support">Atbalsts</string>
<string name="metadata_language">Valoda</string>
<string name="metadata_age_limit">Vecuma ierobežojums</string>
<string name="metadata_licence">Licence</string>
<string name="metadata_tags">Tagi</string>
<string name="metadata_category">Kategorija</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Jums tiks jautāts, kur saglabāt katru lejupielādi</string>
<string name="dont_show">Nerādīt</string>
<string name="account_terminated">Konts ir pārtraukts</string>
<string name="comments_are_disabled">Komentāri ir atspējoti</string>
</resources>

View File

@ -678,4 +678,42 @@
<string name="show_channel_details">Vis kanaldetaljer</string>
<string name="disable_media_tunneling_summary">Skru av media-tunnelering hvis du opplever svart skjerm eller videohakking</string>
<string name="disable_media_tunneling_title">Skru av media-tunnelering</string>
<string name="description_select_note">Du kan nå velge tekst inne i beskrivelsen. Merk at siden kan flimre og lenker er kanskje ikke klikkbare i utvalgsmodus.</string>
<string name="feed_load_error_fast_unknown">Raskt modus for informasjonskanal tilbyr ikke mer info om dette.</string>
<string name="feed_load_error_terminated">Skaperens konto har blitt terminert.
\nNewPipe vil ikke kunne laste inn denne informasjonskanalen i fremtiden.
\nØnsker du å oppheve ditt abonnement på denne kanalen\?</string>
<string name="description_select_disable">Skru av valgt av tekst i beskrivelsen</string>
<string name="description_select_enable">Skru på valg av tekst i beskrivelsen</string>
<string name="service_provides_reason">%s oppgav denne grunnen:</string>
<string name="account_terminated">Konto terminert</string>
<string name="feed_toggle_show_played_items">Vis avspilte elementer</string>
<string name="feed_load_error_account_info">Kunne ikke laste inn informasjonskanal for «%s».</string>
<string name="feed_load_error">Kunne ikke laste inn informasjonskanal</string>
<string name="downloads_storage_use_saf_summary_api_29">Fra Android 10 er kun «lagringstilgangsrammeverk» støttet</string>
<string name="downloads_storage_use_saf_summary_api_19">«Lagringstilgangsrammeverket» støttes ikke på Android KitKat og tidligere.</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Du vil bli spurt om hvor du vil lagre hver nedlastning</string>
<string name="seekbar_preview_thumbnail_title">Miniatyrbildeforhåndsvisning</string>
<string name="no_dir_yet">Ingen nedlastingsmappe valgt. Velg forvalgt nedlastingsmappe nå.</string>
<string name="off">Av</string>
<string name="on"></string>
<string name="tablet_mode_title">Nettbrett-modus</string>
<string name="open_website_license">Åpne nettside</string>
<string name="metadata_privacy_internal">Intern</string>
<string name="metadata_privacy_private">Privat</string>
<string name="metadata_privacy_unlisted">Ulistet</string>
<string name="metadata_privacy_public">Offentlig</string>
<string name="metadata_thumbnail_url">Miniatyrbilde-nettadresse</string>
<string name="metadata_host">Tjener</string>
<string name="metadata_support">Støtte</string>
<string name="metadata_language">Språk</string>
<string name="metadata_age_limit">Aldersgrense</string>
<string name="metadata_privacy">Personvern</string>
<string name="metadata_licence">Lisens</string>
<string name="metadata_tags">Etiketter</string>
<string name="metadata_category">Kategori</string>
<string name="dont_show">Ikke vis</string>
<string name="low_quality_smaller">Lav kvalitet (mindre)</string>
<string name="high_quality_larger">Høy kvalitet (større)</string>
<string name="comments_are_disabled">Kommentarer er avskrudd</string>
</resources>

View File

@ -28,7 +28,7 @@
<string name="default_resolution_title">Domyślna rozdzielczość</string>
<string name="play_with_kodi_title">Odtwórz w Kodi</string>
<string name="kore_not_found">Zainstalować brakującą aplikację Kore\?</string>
<string name="show_play_with_kodi_title">Pokaż opcję „Odtwórz z Kodi”</string>
<string name="show_play_with_kodi_title">Pokazuj opcję „Odtwórz z Kodi”</string>
<string name="show_play_with_kodi_summary">Wyświetl opcję odtwarzania wideo przez centrum multimedialne Kodi</string>
<string name="play_audio">Dźwięk</string>
<string name="default_audio_format_title">Domyślny format audio</string>
@ -36,7 +36,7 @@
<string name="dark_theme_title">Ciemny</string>
<string name="light_theme_title">Jasny</string>
<string name="download_dialog_title">Pobierz</string>
<string name="show_next_and_similar_title">Pokaż następne i powiązane wideo</string>
<string name="show_next_and_similar_title">Pokazuj następne i powiązane wideo</string>
<string name="unsupported_url">Nieobsługiwany adres URL</string>
<string name="content_language_title">Domyślny język treści</string>
<string name="settings_category_video_audio_title">Wideo i audio</string>
@ -44,7 +44,7 @@
<string name="settings_category_other_title">Inne</string>
<string name="background_player_playing_toast">Odtwarzanie w tle</string>
<string name="content">Zawartość</string>
<string name="show_age_restricted_content_title">Pokaż treści z ograniczeniem wiekowym</string>
<string name="show_age_restricted_content_title">Pokazuj treści z ograniczeniami wiekowymi</string>
<string name="duration_live">Na żywo</string>
<string name="downloads">Pobrane</string>
<string name="downloads_title">Pobrane</string>
@ -53,8 +53,8 @@
<string name="network_error">Błąd sieci</string>
<string name="could_not_load_thumbnails">Nie można załadować wszystkich miniatur</string>
<string name="youtube_signature_deobfuscation_error">Nie udało się odszyfrować sygnatury URL wideo</string>
<string name="parsing_error">Nie można przetworzyć strony</string>
<string name="light_parsing_error">Nie można przetworzyć całości strony</string>
<string name="parsing_error">Nie można przetworzyć strony internetowej</string>
<string name="light_parsing_error">Nie można przetworzyć strony internetowej w całości</string>
<string name="content_not_available">Zawartość niedostępna</string>
<string name="could_not_setup_download_menu">Nie można ustawić menu pobierania</string>
<string name="live_streams_not_supported">Transmisje na żywo nie są jeszcze obsługiwane</string>
@ -103,7 +103,7 @@
<string name="app_ui_crash">Awaria aplikacji/interfejsu</string>
<string name="use_tor_summary">(Eksperymentalne) Wymuś pobieranie przez Tora w celu zwiększenia prywatności (strumieniowanie wideo nie jest jeszcze obsługiwane).</string>
<string name="start">Rozpocznij</string>
<string name="title_activity_recaptcha">Wyzwanie reCAPTCHA</string>
<string name="title_activity_recaptcha">Zadanie reCAPTCHA</string>
<string name="recaptcha_request_toast">Zażądano rozwiązania reCAPTCHA</string>
<string name="use_external_video_player_summary">Usuwa dźwięk w niektórych rozdzielczościach</string>
<string name="controls_background_title">W tle</string>
@ -112,7 +112,7 @@
<string name="show_higher_resolutions_summary">Tylko niektóre urządzenia mogą odtwarzać wideo w 2K/4K</string>
<string name="default_video_format_title">Domyślny format wideo</string>
<string name="black_theme_title">Czarny</string>
<string name="popup_remember_size_pos_title">Zapamiętaj właściwości trybu okienkowego</string>
<string name="popup_remember_size_pos_title">Pamiętaj właściwości trybu okienkowego</string>
<string name="popup_remember_size_pos_summary">Zapamiętaj ostatni rozmiar i pozycję trybu okienkowego</string>
<string name="player_gesture_controls_title">Sterowanie odtwarzaczem za pomocą gestów</string>
<string name="player_gesture_controls_summary">Użyj gestów, aby sterować jasnością i głośnością odtwarzacza</string>
@ -120,7 +120,7 @@
<string name="show_search_suggestions_summary">Pokazuj podpowiedzi podczas wyszukiwania</string>
<string name="settings_category_popup_title">Tryb okienkowy</string>
<string name="popup_playing_toast">Odtwarzanie w trybie okienkowym</string>
<string name="all">Wszystko</string>
<string name="all">Wszystkie</string>
<string name="channel">Kanał</string>
<string name="yes">Tak</string>
<string name="later">Później</string>
@ -169,7 +169,7 @@
<string name="enable_search_history_summary">Przechowuj lokalnie historię wyszukiwania</string>
<string name="enable_watch_history_title">Historia oglądania</string>
<string name="enable_watch_history_summary">Śledź obejrzane wideo</string>
<string name="resume_on_audio_focus_gain_title">Wznów odtwarzanie</string>
<string name="resume_on_audio_focus_gain_title">Wznawiaj odtwarzanie</string>
<string name="resume_on_audio_focus_gain_summary">Kontynuuj odtwarzanie po przerwaniu (np. po rozmowie telefonicznej)</string>
<string name="notification_channel_name">Powiadomienia NewPipe</string>
<string name="notification_channel_description">Powiadomienia dla NewPipe przy odtwarzaniu w tle i w trybie okienkowym</string>
@ -188,7 +188,7 @@
<string name="undo">Cofnij</string>
<string name="search_no_results">Brak wyników</string>
<string name="no_views">Brak wyświetleń</string>
<string name="show_hold_to_append_title">Pokaż poradę „Przytrzymaj, aby dodać”</string>
<string name="show_hold_to_append_title">Pokazuj poradę „Przytrzymaj, aby dodać”</string>
<string name="show_hold_to_append_summary">Pokaż wskazówkę po naciśnięciu tła lub wyskakującego przycisku „Szczegóły” w odtwarzaczu</string>
<string name="background_player_append">Zakolejkowane do odtwarzacza w tle</string>
<string name="popup_playing_append">Zakolejkowane do odtwarzacza w trybie okienkowym</string>
@ -222,20 +222,20 @@
<string name="donation_title">Dotacja</string>
<string name="donation_encouragement">NewPipe jest rozwijany przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić Ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment, aby wesprzeć programistów i sprawić, by program był jeszcze lepszy, delektując się filiżanką kawy.</string>
<string name="give_back">Wspomóż</string>
<string name="website_title">Witryna</string>
<string name="website_title">Strona internetowa</string>
<string name="website_encouragement">By otrzymać więcej informacji oraz najnowsze wiadomości o NewPipe, odwiedź naszą stronę.</string>
<string name="item_deleted">Pozycja usunięta</string>
<string name="delete_item_search_history">Czy chcesz usunąć tę pozycję z historii wyszukiwania?</string>
<string name="main_page_content">Zawartość strony głównej</string>
<string name="blank_page_summary">Pusta strona</string>
<string name="kiosk_page_summary">Strona „kiosku</string>
<string name="kiosk_page_summary">Strona „Odkrywaj</string>
<string name="subscription_page_summary">Strona subskrypcji</string>
<string name="feed_page_summary">Strona kanału</string>
<string name="channel_page_summary">Strona kanału</string>
<string name="select_a_channel">Wybierz kanał</string>
<string name="no_channel_subscribed_yet">Nie masz jeszcze subskrypcji kanałów</string>
<string name="select_a_kiosk">Wybierz „kiosk</string>
<string name="kiosk">Kiosk</string>
<string name="select_a_kiosk">Wybierz kartę „Odkrywaj</string>
<string name="kiosk">Odkrywaj</string>
<string name="trending">Na czasie</string>
<string name="top_50">50 najlepszych</string>
<string name="new_and_hot">Nowe i popularne</string>
@ -259,7 +259,7 @@
<string name="audio_streams_empty">Nie znaleziono strumieni audio</string>
<string name="video_player">Odtwarzacz wideo</string>
<string name="background_player">Odtwarzacz w tle</string>
<string name="preferred_player_fetcher_notification_title">Informacje</string>
<string name="preferred_player_fetcher_notification_title">Uzyskiwanie informacji</string>
<string name="preferred_player_fetcher_notification_message">Ładowanie żądanej zawartości</string>
<string name="controls_download_desc">Pobierz plik strumienia</string>
<string name="show_info">Pokaż informacje</string>
@ -276,21 +276,21 @@
<string name="create">Utwórz</string>
<string name="delete_one">Usuń bieżący</string>
<string name="delete_all">Usuń wszystkie</string>
<string name="dismiss">Cofnij</string>
<string name="dismiss">Odrzuć</string>
<string name="rename">Zmień nazwę</string>
<string name="delete_stream_history_prompt">Czy chcesz usunąć tę pozycję z historii oglądania\?</string>
<string name="delete_all_history_prompt">Czy na pewno usunąć wszystkie pozycje z historii?</string>
<string name="title_last_played">Ostatnio odtwarzane</string>
<string name="title_most_played">Najczęściej odtwarzane</string>
<string name="export_complete_toast">Eksportowanie</string>
<string name="import_complete_toast">Importowanie</string>
<string name="no_valid_zip_file">Niepoprawne archiwum ZIP</string>
<string name="export_complete_toast">Wyeksportowano</string>
<string name="import_complete_toast">Zaimportowano</string>
<string name="no_valid_zip_file">Nieprawidłowy plik ZIP</string>
<string name="could_not_import_all_files">Ostrzeżenie: Nie udało się zaimportować wszystkich plików.</string>
<string name="override_current_data">Nadpisuje obecne ustawienia.</string>
<string name="override_current_data">Zastąpi to obecne ustawienia.</string>
<string name="drawer_open">Otwórz menu</string>
<string name="drawer_close">Zamknij menu</string>
<string name="drawer_header_action_paceholder_text">Niebawem coś tutaj się pojawi</string>
<string name="popup_player">Odtwarzacz w okienku</string>
<string name="popup_player">Odtwarzacz w trybie okienkowym</string>
<string name="always_ask_open_action">Zawsze pytaj</string>
<string name="create_playlist">Nowa playlista</string>
<string name="delete_playlist">Usuń</string>
@ -311,10 +311,10 @@
<string name="resize_zoom">Powiększ</string>
<string name="caption_auto_generated">Wygenerowane automatycznie</string>
<string name="enable_leak_canary_summary">Monitorowanie wycieków pamięci może powodować niestabilność aplikacji podczas zrzutu pamięci</string>
<string name="enable_disposed_exceptions_title">Zgłaszanie błędów poza cyklem życia</string>
<string name="enable_disposed_exceptions_summary">Wymusza raportowanie niedostarczonych wyjątków Rx poza cyklem życia fragmentu lub aktywności</string>
<string name="use_inexact_seek_title">Użyj szybkiego niedokładnego wyszukiwania</string>
<string name="use_inexact_seek_summary">Niedokładne wyszukiwanie pozwala szybciej szukać pozycji z mniejszą precyzją. Szukanie przez 5, 15 lub 25 sekund nie działa w tym przypadku</string>
<string name="enable_disposed_exceptions_title">Zgłoś błędy spoza cyklu życia</string>
<string name="enable_disposed_exceptions_summary">Wymuś raportowanie niedostarczonych wyjątków Rx poza cyklem życia fragmentu lub aktywności</string>
<string name="use_inexact_seek_title">Użyj szybkiego, niedokładnego przewijania</string>
<string name="use_inexact_seek_summary">Niedokładne przewijanie umożliwia szybsze przewijanie ze zmniejszoną dokładnością. Przewijanie o 5, 15 lub 25 sekund nie działa w tym przypadku</string>
<string name="download_thumbnail_title">Wczytuj miniatury</string>
<string name="download_thumbnail_summary">Wyłącz, aby nie wczytywać miniatur, oszczędzając dane i zużycie pamięci. Zmiana tej opcji czyści pamięć podręczną obrazów</string>
<string name="thumbnail_cache_wipe_complete_notice">Wyczyszczono pamięć podręczną miniatur</string>
@ -324,9 +324,9 @@
<string name="auto_queue_title">Automatyczne kolejkowanie następnego strumienia</string>
<string name="auto_queue_summary">Gdy kończy się kolejka odtwarzania, dodaj do niej kolejną powiązaną pozycję</string>
<string name="file">Plik</string>
<string name="invalid_directory">Nie ma takiego folderu</string>
<string name="invalid_source">Nie ma takiego źródła plików/treści</string>
<string name="invalid_file">Plik nie istnieje lub brakuje mu uprawnień do odczytu lub zapisu</string>
<string name="invalid_directory">Brak takiego folderu</string>
<string name="invalid_source">Brak takiego źródła pliku/zawartości</string>
<string name="invalid_file">Plik nie istnieje albo brakuje uprawnień do jego odczytu lub zapisu</string>
<string name="file_name_empty_error">Nazwa pliku nie może być pusta</string>
<string name="error_occurred_detail">Wystąpił błąd: %1$s</string>
<string name="import_export_title">Importuj/eksportuj</string>
@ -337,15 +337,15 @@
<string name="export_ongoing">Eksportowanie…</string>
<string name="import_file_title">Importuj z pliku</string>
<string name="previous_export">Poprzedni eksport</string>
<string name="subscriptions_import_unsuccessful">Import subskrypcji nie powiódł się</string>
<string name="subscriptions_export_unsuccessful">Eksport subskrypcji nie powiódł się</string>
<string name="import_youtube_instructions">Importowanie subskrypcji YouTube z Google Takeout:
<string name="subscriptions_import_unsuccessful">Nie udało się zaimportować subskrypcji</string>
<string name="subscriptions_export_unsuccessful">Nie udało się wyeksportować subskrypcji</string>
<string name="import_youtube_instructions">Zaimportuj subskrypcje YouTube z Google Takeout:
\n
\n1. Przejdź do tego adresu URL: %1$s.
\n2. Zaloguj się, gdy zostaniesz o to poproszony.
\n3. Kliknij „Wybrano wszystkie dane z YouTube”, następnie „Odznacz wszystkie”, potem zaznacz tylko „subskrypcje” i kliknij „OK”.
\n4. Kliknij „Następny krok”, a następnie na „Utwórz eksport”.
\n5. Kliknij przycisk „Pobierz”, gdy się pojawi.
\n2. Zaloguj się, gdy zostaniesz o to poproszony(-na).
\n3. Naciśnij „Wybrano wszystkie dane z YouTube”, następnie „Odznacz wszystkie”, potem zaznacz tylko „subskrypcje” i naciśnij „OK”.
\n4. Naciśnij „Następny krok”, a następnie „Utwórz eksport”.
\n5. Naciśnij przycisk „Pobierz”, gdy się pojawi.
\n6. Z pobranego archiwum ZIP wypakuj plik subskrypcje.json (powinien on znajdować się w katalogu „YouTube i YouTube Music/subskrypcje”) i zaimportuj go tutaj.</string>
<string name="import_network_expensive_warning">Ta operacja może wygenerować duże użycie danych.
\n
@ -359,15 +359,15 @@
\n
\n1. Włącz opcję „Wersja na komputery” w przeglądarce internetowej (strona nie jest dostępna dla urządzeń mobilnych).
\n2. Przejdź do tego adresu URL: %1$s.
\n3. Zaloguj się, gdy zostaniesz o to poproszony.
\n4. Skopiuj adres URL profilu, na który zostałeś przekierowany.</string>
\n3. Zaloguj się, gdy zostaniesz o to poproszony(-na).
\n4. Skopiuj adres URL profilu, na który zostałeś(-aś) przekierowany(-na).</string>
<string name="no_streams_available_download">Brak strumieni do pobrania</string>
<string name="preferred_open_action_settings_title">Preferowana akcja „otwórz”</string>
<string name="preferred_open_action_settings_summary">Domyślna akcja podczas otwierania zawartości - %s</string>
<string name="caption_setting_title">Napisy</string>
<string name="caption_setting_description">Zmodyfikuj skalę tekstu napisów i style tła. Wymaga ponownego uruchomienia aplikacji</string>
<string name="caption_setting_description">Zmodyfikuj rozmiar tekstu napisów odtwarzacza i style tła. Wymaga ponownego uruchomienia aplikacji, aby zmiany zostały uwzględnione</string>
<string name="clear_views_history_title">Wyczyść historię oglądania</string>
<string name="clear_views_history_summary">Usuwa historię odtwarzanych strumieni i pozycje odtwarzania</string>
<string name="clear_views_history_summary">Usuwa historię odtworzonych strumieni i pozycje odtwarzania</string>
<string name="delete_view_history_alert">Usunąć całą historię oglądania\?</string>
<string name="watch_history_deleted">Usunięto historię oglądania</string>
<string name="clear_search_history_title">Wyczyść historię wyszukiwania</string>
@ -375,19 +375,19 @@
<string name="delete_search_history_alert">Usunąć całą historię wyszukiwania\?</string>
<string name="search_history_deleted">Usunięto historię wyszukiwania</string>
<string name="one_item_deleted">Usunięto jedną pozycję.</string>
<string name="toast_no_player">Nie zainstalowano aplikacji do odtworzenia tego pliku</string>
<string name="app_license">NewPipe jest wolnym i bezpłatnym oprogramowaniem: Możesz używać, udostępniać i ulepszać je do woli. W szczególności możesz redystrybuować i/lub modyfikować go zgodnie z warunkami GNU General Public License opublikowanej przez Free Software Fundation w wersji 3, albo (według twojego wyboru) jakąkolwiek późniejszą wersją.</string>
<string name="toast_no_player">Brak zainstalowanej aplikacji do odtworzenia tego pliku</string>
<string name="app_license">NewPipe jest wolnym i bezpłatnym oprogramowaniem: Możesz używać, udostępniać i ulepszać je do woli. W szczególności możesz je redystrybuować i/lub modyfikować zgodnie z warunkami GNU General Public License opublikowanej przez Free Software Fundation w wersji 3 albo (według Twojego wyboru) jakąkolwiek późniejszą wersją.</string>
<string name="import_settings">Czy chcesz zaimportować również ustawienia?</string>
<string name="privacy_policy_title">Polityka prywatności NewPipe</string>
<string name="privacy_policy_encouragement">Projekt NewPipe bardzo poważnie traktuje Twoją prywatność. Dlatego aplikacja nie gromadzi żadnych danych bez Twojej zgody.
\nPolityka prywatności programu NewPipe szczegółowo wyjaśnia, jakie dane są zbierane i przesyłane, kiedy wysyłasz raport o błędach aplikacji.</string>
<string name="privacy_policy_encouragement">Projekt NewPipe bardzo poważnie traktuje Twoją prywatność, dlatego aplikacja nie gromadzi żadnych danych bez Twojej zgody.
\nPolityka prywatności NewPipe szczegółowo wyjaśnia, jakie dane są zbierane i przesyłane, kiedy wysyłasz raport o awarii aplikacji.</string>
<string name="read_privacy_policy">Przeczytaj politykę prywatności</string>
<string name="start_accept_privacy_policy">Ze względu na wprowadzenie Ogólnego Rozporządzenia o ochronie danych (RODO), chcielibyśmy zwrócić Twoją uwagę na politykę prywatności NewPipe. Pros przeczytać ją uważnie.
\nMusisz ją zaakceptować, aby przesyłać raporty o błędach.</string>
<string name="start_accept_privacy_policy">Ze względu na wprowadzenie Ogólnego rozporządzenia o ochronie danych (RODO), chcielibyśmy zwrócić Twoją uwagę na politykę prywatności NewPipe. Prosimy przeczytać ją uważnie.
\nMusisz ją zaakceptować, aby przesyłać nam raporty o błędach.</string>
<string name="accept">Akceptuj</string>
<string name="decline">Odrzuć</string>
<string name="limit_data_usage_none_description">Bez limitu</string>
<string name="limit_mobile_data_usage_title">Limit przy użyciu danych mobilnych</string>
<string name="limit_mobile_data_usage_title">Ogranicz rozdzielczość przy danych mobilnych</string>
<string name="channels">Kanały</string>
<string name="playlists">Playlisty</string>
<string name="tracks">Utwory</string>
@ -395,11 +395,11 @@
<string name="skip_silence_checkbox">Przewiń do przodu podczas ciszy</string>
<string name="playback_step">Krok</string>
<string name="playback_reset">Zresetuj</string>
<string name="minimize_on_exit_title">Zminimalizuj podczas przełączenia aplikacji</string>
<string name="minimize_on_exit_title">Minimalizuj przy przełączaniu aplikacji</string>
<string name="minimize_on_exit_summary">Akcja po przejściu do innej aplikacji z głównego odtwarzacza wideo — %s</string>
<string name="minimize_on_exit_none_description">Brak</string>
<string name="minimize_on_exit_background_description">Zminimalizuj do odtwarzania w tle</string>
<string name="minimize_on_exit_popup_description">Zminimalizuj do odtwarzania w okienku</string>
<string name="minimize_on_exit_background_description">Zminimalizuj do odtwarzacza w tle</string>
<string name="minimize_on_exit_popup_description">Zminimalizuj do odtwarzacza w trybie okienkowym</string>
<string name="unsubscribe">Odsubskrybuj</string>
<string name="tab_new">Nowa karta</string>
<string name="tab_choose">Wybierz kartę</string>
@ -408,19 +408,19 @@
<string name="brightness_gesture_control_title">Kontrola jasności gestami</string>
<string name="brightness_gesture_control_summary">Użyj gestów do sterowania jasnością odtwarzacza</string>
<string name="settings_category_updates_title">Aktualizacje</string>
<string name="file_deleted">Plik został usunięty</string>
<string name="file_deleted">Plik usunięty</string>
<string name="app_update_notification_channel_name">Powiadomienie o aktualizacji aplikacji</string>
<string name="app_update_notification_channel_description">Powiadomienia o nowej wersji NewPipe</string>
<string name="download_to_sdcard_error_title">Pamięć zewnętrzna jest niedostępna</string>
<string name="download_to_sdcard_error_message">Pobieranie na zewnętrzną kartę SD nie jest możliwe. Zresetować lokalizację folderu pobierania\?</string>
<string name="saved_tabs_invalid_json">Nie można odczytać zapisanych kart, więc będzie używana domyślna</string>
<string name="download_to_sdcard_error_title">Pamięć zewnętrzna niedostępna</string>
<string name="download_to_sdcard_error_message">Pobieranie na kartę SD nie jest możliwe. Zresetować lokalizację folderu zapisywania\?</string>
<string name="saved_tabs_invalid_json">Nie można odczytać zapisanych kart, więc będą używane domyślne</string>
<string name="restore_defaults">Przywróć domyślne</string>
<string name="restore_defaults_confirmation">Czy chcesz przywrócić ustawienia domyślne\?</string>
<string name="subscribers_count_not_available">Subskrybent jest niedostępny</string>
<string name="subscribers_count_not_available">Liczba subskrybentów jest niedostępna</string>
<string name="main_page_content_summary">Karty wyświetlane na stronie głównej</string>
<string name="selection">Wybierz</string>
<string name="selection">Wybór</string>
<string name="updates_setting_title">Aktualizacje</string>
<string name="updates_setting_description">Pokaż powiadomienie, aby monitować aktualizację aplikacji, gdy dostępna jest nowa wersja</string>
<string name="updates_setting_description">Pokazuj powiadomienie zachęcające do pobrania aktualizacji aplikacji, gdy jest dostępna nowa wersja</string>
<string name="list_view_mode">Tryb widoku listy</string>
<string name="list">Lista</string>
<string name="grid">Siatka</string>
@ -428,7 +428,7 @@
<string name="switch_view">Przełącz widok</string>
<string name="app_update_notification_content_title">Dostępna jest aktualizacja NewPipe!</string>
<string name="app_update_notification_content_text">Naciśnij, aby pobrać</string>
<string name="missions_header_finished">Gotowe</string>
<string name="missions_header_finished">Zakończone</string>
<string name="paused">wstrzymane</string>
<string name="queued">w kolejce</string>
<string name="post_processing">przetwarzanie końcowe</string>
@ -436,17 +436,17 @@
<string name="permission_denied">Akcja odrzucona przez system</string>
<string name="download_failed">Pobieranie nie powiodło się</string>
<string name="download_finished">Pobieranie zakończone</string>
<string name="download_finished_more">%s pobieranie zostało zakończone</string>
<string name="download_finished_more">%s ukończonych pobrań</string>
<string name="generate_unique_name">Wygeneruj unikalną nazwę</string>
<string name="overwrite">Zastąp</string>
<string name="overwrite">Nadpisz</string>
<string name="overwrite_finished_warning">Pobrany plik o tej nazwie już istnieje</string>
<string name="download_already_running">Trwa pobieranie z tą nazwą</string>
<string name="download_already_running">Trwa już pobieranie pliku o tej samej nazwie</string>
<string name="show_error">Pokaż błąd</string>
<string name="label_code">Kod</string>
<string name="error_file_creation">Nie można utworzyć pliku</string>
<string name="error_path_creation">Nie można utworzyć folderu docelowego</string>
<string name="error_permission_denied">Odmowa dostępu do systemu</string>
<string name="error_ssl_exception">Nie można nawiązać bezpiecznego połączenia</string>
<string name="error_permission_denied">Odmowa dostępu przez system</string>
<string name="error_ssl_exception">Nie udało się nawiązać bezpiecznego połączenia</string>
<string name="error_unknown_host">Nie można znaleźć serwera</string>
<string name="error_connect_host">Nie można połączyć się z serwerem</string>
<string name="error_http_no_content">Serwer nie wysyła danych</string>
@ -454,49 +454,49 @@
<string name="error_http_not_found">Nie znaleziono</string>
<string name="error_postprocessing_failed">Przetwarzanie końcowe nie powiodło się</string>
<string name="stop">Zatrzymaj</string>
<string name="max_retry_msg">Maksymalna liczba powtórzeń</string>
<string name="max_retry_msg">Maksymalna liczba ponownych prób</string>
<string name="max_retry_desc">Maksymalna liczba prób przed anulowaniem pobierania</string>
<string name="pause_downloads_on_mobile">Przerwij przy ograniczonym transferze</string>
<string name="pause_downloads_on_mobile_desc">Pomocne przy przełączaniu na dane mobilne, ale niektóre transfery nie mogą być wstrzymywane</string>
<string name="events">Zdarzenia</string>
<string name="pause_downloads_on_mobile">Przerwij przy sieciach z ograniczonym transferem</string>
<string name="pause_downloads_on_mobile_desc">Pomocne przy przełączaniu na dane mobilne, chociaż niektóre pobierania nie mogą być wstrzymywane</string>
<string name="events">Wydarzenia</string>
<string name="conferences">Konferencje</string>
<string name="missions_header_pending">Oczekuje</string>
<string name="show_comments_title">Pokaż komentarze</string>
<string name="missions_header_pending">Oczekujące</string>
<string name="show_comments_title">Pokazuj komentarze</string>
<string name="show_comments_summary">Wyłącz, aby ukryć komentarze</string>
<string name="autoplay_title">Automatyczne odtwarzanie</string>
<string name="no_comments">Brak komentarzy</string>
<string name="error_unable_to_load_comments">Nie można załadować komentarzy</string>
<string name="close">Zamknij</string>
<string name="enable_playback_resume_title">Wznawiaj odtwarzanie</string>
<string name="enable_playback_resume_summary">Przywróć ostatnią odtwarzaną pozycję</string>
<string name="enable_playback_state_lists_title">Pozycje na listach</string>
<string name="enable_playback_resume_summary">Przywracaj odtwarzanie od ostatniej pozycji</string>
<string name="enable_playback_state_lists_title">Pozycje odtwarzania na listach</string>
<string name="enable_playback_state_lists_summary">Pokaż wskaźniki pozycji odtwarzania na listach</string>
<string name="settings_category_clear_data_title">Wyczyść dane</string>
<string name="watch_history_states_deleted">Pozycja odtwarzania usunięta</string>
<string name="missing_file">Plik usunięty lub przeniesiony</string>
<string name="watch_history_states_deleted">Pozycje odtwarzania usunięte</string>
<string name="missing_file">Plik usunięty albo przeniesiony</string>
<string name="overwrite_unrelated_warning">Plik z tą nazwą już istnieje</string>
<string name="overwrite_failed">nie można nadpisać pliku</string>
<string name="download_already_pending">Pobieranie pliku z tą nazwą jest już w kolejce</string>
<string name="download_already_pending">Plik o tej samej nazwie oczekuje na pobranie</string>
<string name="error_postprocessing_stopped">NewPipe został zamknięty podczas pracy nad plikiem</string>
<string name="error_insufficient_storage">Brak miejsca na urządzeniu</string>
<string name="error_progress_lost">Postęp został utracony ze wzgledu na usunięcie pliku</string>
<string name="error_progress_lost">Utracono postęp, ponieważ plik został usunięty</string>
<string name="confirm_prompt">Czy chcesz wyczyścić historię pobierania lub usunąć wszystkie pobrane pliki\?</string>
<string name="enable_queue_limit">Ogranicz kolejkę pobierania</string>
<string name="enable_queue_limit_desc">Tylko jedno pobieranie będzie realizowane jednocześnie</string>
<string name="enable_queue_limit_desc">Tylko jedno pobieranie zostanie uruchomione w tym samym czasie</string>
<string name="start_downloads">Rozpocznij pobieranie</string>
<string name="pause_downloads">Wstrzymaj pobieranie</string>
<string name="downloads_storage_ask_title">Pytaj, gdzie pobrać</string>
<string name="downloads_storage_ask_summary">Zostaniesz zapytany, gdzie zapisać każdy pobrany plik.
<string name="downloads_storage_ask_summary">Zostaniesz zapytany(-na), gdzie zapisać każdy pobrany plik.
\nWłącz systemowy selektor folderów (SAF), jeśli chcesz pobierać pliki na kartę SD</string>
<string name="error_timeout">Połączenie uległo przedawnieniu</string>
<string name="downloads_storage_use_saf_title">Użyj systemowego selektora folderów (SAF)</string>
<string name="error_timeout">Minął czas połączenia</string>
<string name="downloads_storage_use_saf_title">Używaj systemowego selektora folderów (SAF)</string>
<string name="downloads_storage_use_saf_summary">Systemowy selektor folderów (SAF) umożliwia pobieranie na kartę SD</string>
<string name="clear_playback_states_title">Usuń pozycje odtwarzania</string>
<string name="clear_playback_states_summary">Usuwa wszystkie pozycje odtwarzania</string>
<string name="delete_playback_states_alert">Usunąć wszystkie pozycje odtwarzania\?</string>
<string name="download_choose_new_path">Zmień foldery zapisywania, aby zmiany zostały uwzględnione</string>
<string name="drawer_header_description">Przełączanie usługi, aktualnie wybranej:</string>
<string name="default_kiosk_page_summary">Domyślny Kiosk</string>
<string name="drawer_header_description">Przełącz usługę, aktualnie wybrana:</string>
<string name="default_kiosk_page_summary">Domyślna karta „Odkrywaj”</string>
<string name="no_one_watching">Nikt nie ogląda</string>
<plurals name="watching">
<item quantity="one">%s oglądający</item>
@ -512,27 +512,27 @@
</plurals>
<string name="localization_changes_requires_app_restart">Język zmieni się po ponownym uruchomieniu aplikacji</string>
<string name="seek_duration_title">Wielkość skoku przy przewijaniu</string>
<string name="peertube_instance_url_title">Wystąpienia PeerTube</string>
<string name="peertube_instance_url_summary">Wybierz swoje ulubione instancje PeerTube</string>
<string name="peertube_instance_url_help">Znajdź wystąpienia, które lubisz na %s</string>
<string name="peertube_instance_add_title">Dodaj instancję</string>
<string name="peertube_instance_add_help">Wprowadź adres URL instancji</string>
<string name="peertube_instance_add_fail">Nie można sprawdzić poprawności instancji</string>
<string name="peertube_instance_add_https_only">Obsługiwane są tylko adresy URL HTTPS</string>
<string name="peertube_instance_add_exists">Instancja już istnieje</string>
<string name="local">Lokalny</string>
<string name="peertube_instance_url_title">Serwery PeerTube</string>
<string name="peertube_instance_url_summary">Wybierz swoje ulubione serwery PeerTube</string>
<string name="peertube_instance_url_help">Znajdź serwery, które lubisz, na %s</string>
<string name="peertube_instance_add_title">Dodaj serwer</string>
<string name="peertube_instance_add_help">Wprowadź adres URL serwera</string>
<string name="peertube_instance_add_fail">Nie udało się sprawdzić poprawności serwera</string>
<string name="peertube_instance_add_https_only">Obsługiwane są tylko adresy HTTPS</string>
<string name="peertube_instance_add_exists">Serwer już istnieje</string>
<string name="local">Lokalne</string>
<string name="recently_added">Ostatnio dodane</string>
<string name="most_liked">Ulubione</string>
<string name="most_liked">Najbardziej lubiane</string>
<string name="playlist_no_uploader">Wygenerowana automatycznie (nie znaleziono przesyłającego)</string>
<string name="recovering">odzyskiwanie</string>
<string name="error_download_resource_gone">Nie można odzyskać tego pobrania</string>
<string name="choose_instance_prompt">Wybierz instancję</string>
<string name="choose_instance_prompt">Wybierz serwer</string>
<string name="clear_download_history">Wyczyść historię pobierania</string>
<string name="delete_downloaded_files">Usuń pobrane pliki</string>
<string name="deleted_downloads">Usunięte %1$d pobrania</string>
<string name="permission_display_over_apps">Zezwól na wyświetlanie w innych aplikacjach</string>
<string name="permission_display_over_apps">Udziel uprawnienia do wyświetlania nad innymi aplikacjami</string>
<string name="app_language_title">Język aplikacji</string>
<string name="systems_language">Domyślny systemu</string>
<string name="systems_language">Domyślny systemowy</string>
<string name="subtitle_activity_recaptcha">Po rozwiązaniu naciśnij „Gotowe”</string>
<string name="recaptcha_done_button">Gotowe</string>
<string name="videos_string">Wideo</string>
@ -541,14 +541,14 @@
<item quantity="few">%d sekundy</item>
<item quantity="many">%d sekund</item>
</plurals>
<string name="new_seek_duration_toast">Ze względu na ograniczenia ExoPlayer, czas trwania wyszukiwania został ustawiony na %d sekund</string>
<string name="new_seek_duration_toast">Ze względu na ograniczenia odtwarzacza ExoPlayer, wielkość skoku przewijania została ustawiona na %d sekund</string>
<string name="mute">Wycisz</string>
<string name="unmute">Wyłącz wyciszenie</string>
<string name="feed_use_dedicated_fetch_method_help_text">Czy uważasz, że ładowanie kanałów jest zbyt powolne\? Jeśli tak, spróbuj włączyć szybkie ładowanie (możesz je zmienić w ustawieniach lub naciskając przycisk poniżej).
\n
\nNewPipe oferuje dwie strategie ładowania kanału:
\n• Pobieranie całego kanału subskrypcji, który jest powolny, ale kompletny.
\n• Korzystanie z dedykowanego punktu końcowego usługi, który jest szybki, ale zwykle nie jest kompletny.
\n• Pobieranie całego kanału subskrypcji, co jest powolne, ale kompletne.
\n• Korzystanie z dedykowanego punktu końcowego usługi, co jest szybkie, ale zwykle nie jest kompletne.
\n
\nRóżnica między nimi polega na tym, że w szybkim zwykle brakuje pewnych informacji, takich jak czas trwania lub typ pozycji (nie można odróżnić wideo na żywo od zwykłych) i może zwrócić mniej pozycji.
\n
@ -558,24 +558,25 @@
<string name="feed_use_dedicated_fetch_method_disable_button">Wyłącz tryb szybki</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Włącz tryb szybki</string>
<string name="feed_use_dedicated_fetch_method_summary">Dostępne w niektórych usługach. Jest zwykle znacznie szybsze, ale może zwrócić ograniczoną liczbę pozycji i często niekompletne informacje (np. brak czasu trwania, typu pozycji, statusu na żywo)</string>
<string name="feed_use_dedicated_fetch_method_title">Pobierz z dedykowanego kanału, jeśli jest dostępny</string>
<string name="feed_use_dedicated_fetch_method_title">Pobieraj z dedykowanego kanału, jeśli dostępny</string>
<string name="feed_update_threshold_option_always_update">Zawsze aktualizuj</string>
<string name="feed_update_threshold_summary">Czas po ostatniej aktualizacji, zanim subskrypcja zostanie uznana za nieaktualną — %s</string>
<string name="feed_update_threshold_summary">Czas od ostatniej aktualizacji, zanim subskrypcja zostanie uznana za nieaktualną — %s</string>
<string name="feed_update_threshold_title">Próg aktualizacji kanału</string>
<string name="settings_category_feed_title">Kanał</string>
<string name="feed_create_new_group_button_title">Nowy</string>
<string name="feed_create_new_group_button_title">Nowa</string>
<string name="feed_group_dialog_delete_message">Czy chcesz usunąć tę grupę\?</string>
<string name="feed_group_dialog_empty_name">Pusta nazwa grupy</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">wybrany %d</item>
<item quantity="few">wybrano %d</item>
<item quantity="many">wybrano %d</item>
<item quantity="one">%d wybrana</item>
<item quantity="few">%d wybrane</item>
<item quantity="many">%d wybranych</item>
<item quantity="other">%d wybranych</item>
</plurals>
<string name="feed_group_dialog_empty_selection">Nie wybrano żadnej subskrypcji</string>
<string name="feed_group_dialog_select_subscriptions">Wybierz subskrypcje</string>
<string name="feed_processing_message">Przetwarzam plik danych</string>
<string name="feed_processing_message">Przetwarzanie danych kanału</string>
<string name="feed_notification_loading">Ładowanie kanału…</string>
<string name="feed_subscription_not_loaded_count">Nie uruchamia się: %d</string>
<string name="feed_subscription_not_loaded_count">Nie załadowano: %d</string>
<string name="feed_oldest_subscription_update">Ostatnia aktualizacja kanału: %s</string>
<string name="feed_groups_header_title">Grupy kanałów</string>
<plurals name="days">
@ -596,7 +597,7 @@
<string name="help">Pomoc</string>
<string name="content_not_supported">Ta treść nie jest jeszcze obsługiwana przez NewPipe.
\n
\nMam nadzieję, że będzie obsługiwana w przyszłej wersji.</string>
\nMiejmy nadzieję, że będzie obsługiwana w przyszłej wersji.</string>
<string name="infinite_videos">∞ wideo</string>
<string name="more_than_100_videos">100+ wideo</string>
<string name="artists">Artyści</string>
@ -607,33 +608,33 @@
\nWłącz „%1$s” w ustawieniach, jeśli chcesz je zobaczyć.</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Tak, i częściowo obejrzane wideo</string>
<string name="remove_watched_popup_warning">Wideo, które zostały obejrzane przed i po dodaniu do playlisty, zostaną usunięte.
\nJesteś pewien\? Tego nie da się cofnąć!</string>
\nCzy na pewno\? Tego nie da się cofnąć!</string>
<string name="remove_watched_popup_title">Usunąć obejrzane wideo\?</string>
<string name="remove_watched">Usuń obejrzane</string>
<string name="show_original_time_ago_summary">Oryginalne teksty z usług będą widoczne w strumieniowanych pozycjach</string>
<string name="show_original_time_ago_title">Pokaż oryginalny czas</string>
<string name="youtube_restricted_mode_enabled_title">Włącz tryb ograniczonego dostępu YouTube\'a</string>
<string name="video_detail_by">Przez %s</string>
<string name="channel_created_by">Utworzone przez %s</string>
<string name="channel_created_by">Utworzony przez %s</string>
<string name="detail_sub_channel_thumbnail_view_description">Miniatura awatara kanału</string>
<string name="feed_group_show_only_ungrouped_subscriptions">Pokaż tylko niezgrupowane subskrypcje</string>
<string name="feed_group_show_only_ungrouped_subscriptions">Pokaż tylko niezgrupowane</string>
<string name="playlist_page_summary">Strona playlisty</string>
<string name="no_playlist_bookmarked_yet">Nie masz jeszcze ulubionych playlist</string>
<string name="select_a_playlist">Wybierz playlistę</string>
<string name="error_report_open_github_notice">Sprawdź, czy problem dotyczący Twojej awarii już istnieje. Tworząc zduplikowane wpisy, zajmujesz nam czas, który możemy poświęcić na naprawienie rzeczywistego błędu.</string>
<string name="error_report_open_github_notice">Sprawdź, czy problem dotyczący Twojej awarii już istnieje. Tworząc zduplikowane zgłoszenia, zajmujesz nam czas, który możemy poświęcić na naprawienie istniejącego błędu.</string>
<string name="error_report_open_issue_button_text">Zgłoś na GitHubie</string>
<string name="copy_for_github">Skopiuj sformatowany raport</string>
<string name="search_showing_result_for">Wyświetlono wyniki dla: %s</string>
<string name="search_showing_result_for">Wyświetlanie wyników dla: %s</string>
<string name="never">Nigdy</string>
<string name="wifi_only">Tylko przez Wi-Fi</string>
<string name="autoplay_summary">Rozpocznij odtwarzanie automatycznie — %s</string>
<string name="autoplay_summary">Rozpoczynaj odtwarzanie automatycznie — %s</string>
<string name="title_activity_play_queue">Kolejka odtwarzania</string>
<string name="unsupported_url_dialog_message">Nie udało się rozpoznać adresu URL. Otworzyć w innej aplikacji\?</string>
<string name="unsupported_url_dialog_message">Nie udało się rozpoznać adresu URL. Otworzyć za pomocą innej aplikacji\?</string>
<string name="auto_queue_toggle">Automatyczna kolejka</string>
<string name="clear_queue_confirmation_description">Kolejka aktywnego odtwarzacza zostanie zastąpiona</string>
<string name="clear_queue_confirmation_summary">Przejście z jednego odtwarzacza na inny może zastąpić kolejkę</string>
<string name="clear_queue_confirmation_title">Poproś o potwierdzenie przed wyczyszczeniem kolejki</string>
<string name="settings_category_notification_title">Powiadomienia</string>
<string name="settings_category_notification_title">Powiadomienie</string>
<string name="notification_action_nothing">Nic</string>
<string name="notification_action_buffering">Buforowanie</string>
<string name="notification_action_shuffle">Losuj</string>
@ -645,9 +646,9 @@
<string name="notification_action_2_title">Przycisk trzeciej akcji</string>
<string name="notification_action_1_title">Przycisk drugiej akcji</string>
<string name="notification_action_0_title">Przycisk pierwszej akcji</string>
<string name="notification_scale_to_square_image_summary">Skaluj miniatury wideo wyświetlane w powiadomieniach z proporcji 16:9 do 1:1 (może powodować zniekształcenia)</string>
<string name="notification_scale_to_square_image_title">Skaluj miniatury do proporcji 1:1</string>
<string name="enqueued">Dodane do kolejki</string>
<string name="notification_scale_to_square_image_summary">Skaluj miniaturę wideo wyświetlaną w powiadomieniu z proporcji 16:9 do 1:1 (może powodować zniekształcenia)</string>
<string name="notification_scale_to_square_image_title">Skaluj miniaturę do proporcji 1:1</string>
<string name="enqueued">Dodano do kolejki</string>
<string name="enqueue_stream">Dodaj do kolejki</string>
<string name="show_memory_leaks">Pokaż wycieki pamięci</string>
<string name="clear_cookie_summary">Wyczyść ciasteczka, które NewPipe przechowuje po rozwiązaniu reCAPTCHA</string>
@ -658,18 +659,18 @@
<string name="notification_colorize_summary">Niech Android dostosuje kolor powiadomienia zgodnie z głównym kolorem na miniaturze (nie jest to dostępne na wszystkich urządzeniach)</string>
<string name="notification_colorize_title">Zabarwiaj powiadomienia</string>
<string name="show_thumbnail_summary">Używaj miniatury zarówno jako tła ekranu blokady, jak i powiadomień</string>
<string name="show_thumbnail_title">Pokaż miniaturę</string>
<string name="show_thumbnail_title">Pokazuj miniaturę</string>
<string name="recent">Ostatnie</string>
<string name="msg_calculating_hash">Obliczanie skrótu</string>
<string name="hash_channel_description">Powiadomienia o postępie tworzenia skrótów wideo</string>
<string name="hash_channel_name">Powiadomienie o obliczaniu skrótu wideo</string>
<string name="show_meta_info_summary">Wyłącz, aby ukryć pola z dodatkowymi informacjami o twórcy strumienia, zawartości strumienia lub żądaniu wyszukiwania</string>
<string name="show_meta_info_title">Pokaż metadane</string>
<string name="show_meta_info_title">Pokazuj metadane</string>
<string name="chapters">Rozdziały</string>
<string name="description_tab_description">Opis</string>
<string name="comments_tab_description">Komentarze</string>
<string name="show_description_summary">Wyłącz, aby ukryć opis wideo i dodatkowe informacje</string>
<string name="show_description_title">Pokaż opis</string>
<string name="show_description_title">Pokazuj opis</string>
<string name="open_with">Otwórz za pomocą</string>
<string name="no_app_to_open_intent">Żadna aplikacja na Twoim urządzeniu nie może tego otworzyć</string>
<string name="related_items_tab_description">Powiązane pozycje</string>
@ -679,7 +680,7 @@
<string name="private_content">Ta zawartość jest prywatna, więc nie może być strumieniowana ani pobierana przez NewPipe.</string>
<string name="georestricted_content">Ta treść nie jest dostępna w Twoim kraju.</string>
<string name="restricted_video_no_stream">To wideo ma ograniczenia wiekowe.
\nZe względu na nowe zasady YouTube z ograniczeniem wiekowym, NewPipe nie ma dostępu do żadnego z jego strumieni wideo i dlatego nie jest w stanie go odtworzyć.</string>
\nZe względu na nowe zasady YouTube odnośnie ograniczeń wiekowych, NewPipe nie ma dostępu do żadnego z jego strumieni wideo i dlatego nie jest w stanie go odtworzyć.</string>
<string name="soundcloud_go_plus_content">To jest utwór SoundCloud Go+ (przynajmniej w Twoim kraju). Nie może on być strumieniowany lub pobierany przez NewPipe.</string>
<string name="radio">Radio</string>
<string name="featured">Polecane</string>
@ -690,7 +691,7 @@
<string name="auto_device_theme_title">Automatyczny (motyw urządzenia)</string>
<string name="night_theme_title">Motyw nocny</string>
<string name="show_channel_details">Pokaż szczegóły kanału</string>
<string name="disable_media_tunneling_summary">Wyłącz tunelowanie multimediów jeśli zaobserwowałeś czarny ekran bądź brak płynności odtwarzania wideo</string>
<string name="disable_media_tunneling_summary">Wyłącz tunelowanie multimediów, jeśli zaobserwowałeś czarny ekran bądź brak płynności odtwarzania wideo</string>
<string name="disable_media_tunneling_title">Wyłącz tunelowanie multimediów</string>
<string name="metadata_age_limit">Ograniczenie wieku</string>
<string name="description_select_disable">Wyłącz zaznaczanie tekstu w opisie</string>
@ -707,22 +708,29 @@
<string name="metadata_tags">Tagi</string>
<string name="metadata_category">Kategoria</string>
<string name="open_website_license">Otwórz stronę</string>
<string name="description_select_note">Teraz możesz zaznaczyć tekst wewnątrz opisu. Pamiętaj, że strona może migotać, a łącza mogą nie być klikane w trybie zaznaczenia.</string>
<string name="description_select_note">Teraz możesz zaznaczyć tekst wewnątrz opisu. Pamiętaj, że strona może migotać, a łącza mogą nie być klikane w trybie zaznaczania.</string>
<string name="service_provides_reason">%s podaje ten powód:</string>
<string name="account_terminated">Konto zamknięte</string>
<string name="feed_load_error_fast_unknown">Tryb szybkiego kanału informacyjnego nie zawiera więcej informacji na ten temat.</string>
<string name="feed_load_error_fast_unknown">Tryb szybki dla ładowania kanału nie dostarcza więcej informacji na ten temat.</string>
<string name="feed_load_error_terminated">Konto autora zostało zawieszone.
\nNewPipe nie będzie w stanie załadować tego kanału w przyszłości.
\nCzy chcesz anulować subskrypcję tego kanału\?</string>
<string name="feed_load_error_account_info">Nie można załadować danych dla\' %s\'.</string>
<string name="feed_load_error_account_info">Nie udało się załadować kanału dla „%s”.</string>
<string name="downloads_storage_use_saf_summary_api_29">Począwszy od systemu Android 10, obsługiwany jest tylko systemowy selektor folderów (SAF)</string>
<string name="downloads_storage_use_saf_summary_api_19">Systemowy selektor folderów (SAF) nie jest obsługiwany przez system Android KitKat i niższy</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Zostaniesz zapytany, gdzie zapisać każde pobieranie</string>
<string name="no_dir_yet">Nie ustawiono jeszcze folderu pobierania, wybierz teraz domyślny folder pobierania</string>
<string name="feed_load_error">Błąd podczas ładowania kanałów</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Zostaniesz zapytany(-na), gdzie zapisać każdy pobierany plik</string>
<string name="no_dir_yet">Nie ustawiono jeszcze folderu zapisywania, wybierz domyślny teraz</string>
<string name="feed_load_error">Błąd podczas ładowania kanału</string>
<string name="metadata_privacy_unlisted">Niepubliczny</string>
<string name="feed_toggle_show_played_items">Pokaż odtwarzane pozycje</string>
<string name="feed_toggle_show_played_items">Pokaż obejrzane pozycje</string>
<string name="off">Wyłączony</string>
<string name="on">Włączony</string>
<string name="tablet_mode_title">Tryb tabletu</string>
<string name="comments_are_disabled">Komentarze są wyłączone</string>
<string name="low_quality_smaller">Niska jakość (mniejszy)</string>
<string name="high_quality_larger">Wysoka jakość (większy)</string>
<string name="seekbar_preview_thumbnail_title">Podgląd miniatury na pasku przewijania</string>
<string name="dont_show">Nie pokazuj</string>
<string name="detail_heart_img_view_description">Serduszko od twórcy</string>
<string name="mark_as_watched">Oznacz jako obejrzane</string>
</resources>

View File

@ -710,5 +710,12 @@
<string name="off">Desligado</string>
<string name="on">Ligado</string>
<string name="tablet_mode_title">Modo tablet</string>
<string name="feed_toggle_show_played_items">Mostrar itens reproduzidos</string>
<string name="feed_toggle_show_played_items">Mostrar itens vistos</string>
<string name="dont_show">Não mostrar</string>
<string name="low_quality_smaller">Baixa qualidade (menor)</string>
<string name="high_quality_larger">Alta qualidade (maior)</string>
<string name="seekbar_preview_thumbnail_title">Pré visualização da miniatura da barra de busca</string>
<string name="comments_are_disabled">Comentários estão desabilitados</string>
<string name="mark_as_watched">Marcar como visto</string>
<string name="detail_heart_img_view_description">Curtido pelo criador</string>
</resources>

View File

@ -108,7 +108,7 @@
<string name="error_connect_host">Não foi possível ligar ao servidor</string>
<string name="show_play_with_kodi_summary">Mostrar uma opção para reproduzir o vídeo no Kodi</string>
<string name="list_view_mode">Modo de exibição</string>
<string name="use_inexact_seek_summary">A pesquisa inexata permite que esta seja mais rápida mas reduz a precisão. Procurar por 5, 15 ou 25 segundos não funciona corretamente.</string>
<string name="use_inexact_seek_summary">A pesquisa inexata permite que esta seja mais rápida mas reduz a precisão. Procurar por 5, 15 ou 25 segundos não funciona corretamente</string>
<string name="permission_display_over_apps">Permitir sobreposição a outras aplicações</string>
<string name="autoplay_by_calling_app_title">Reprodução automática</string>
<string name="export_to">Exportar para</string>
@ -155,7 +155,7 @@
<string name="show_higher_resolutions_title">Mostrar resoluções mais altas</string>
<string name="no_subscribers">Sem subscritores</string>
<string name="use_external_audio_player_title">Utilizar reprodutor de áudio externo</string>
<string name="download_thumbnail_summary">Desative para parar o carregamento de miniaturas, poupar dados e utilização da memória. As alterações limpam a cache de imagens do disco e da memória.</string>
<string name="download_thumbnail_summary">Desative para parar o carregamento de miniaturas, poupar dados e utilização da memória. As alterações limpam a cache de imagens do disco e da memória</string>
<string name="did_you_mean">Será que queria dizer \"%1$s\"\?</string>
<string name="updates_setting_description">Mostrar uma notificação para pedir a atualização da aplicação se existir uma nova versão</string>
<string name="enqueue">Fila</string>
@ -296,8 +296,7 @@
<string name="restore_defaults_confirmation">Deseja repor as predefinições\?</string>
<string name="external_player_unsupported_link_type">Os reprodutores externos não suportam este tipo de hiperligações</string>
<string name="rename">Mudar nome</string>
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' permite descargas para um cartão SD externo.
\nAlguns dipositivos não são compatíveis</string>
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' permite descargas para um cartão SD externo</string>
<string name="seek_duration_title">Duração da pesquisa de avanço/recuo rápido</string>
<string name="channel">Canal</string>
<string name="missing_file">Ficheiro movido ou eliminado</string>
@ -326,7 +325,7 @@
<item quantity="other">%d minutos</item>
</plurals>
<string name="missions_header_finished">Terminada</string>
<string name="watch_history_deleted">Histórico de vídeos apagado.</string>
<string name="watch_history_deleted">Histórico de vídeos apagado</string>
<string name="no_player_found">Não tem um reprodutor de vídeo. Instalar VLC\?</string>
<string name="show_comments_summary">Desative para ocultar comentários</string>
<string name="limit_mobile_data_usage_title">Limitar resolução se em dados móveis</string>
@ -417,7 +416,7 @@
<string name="export_ongoing">A exportar…</string>
<string name="most_liked">Mais apreciados</string>
<string name="title_history_view">Visualizado</string>
<string name="downloads_storage_use_saf_title">Utilizar SAF</string>
<string name="downloads_storage_use_saf_title">Utilizar a escolha de pastas do sistema (SAF)</string>
<string name="play_queue_stream_detail">Detalhes</string>
<string name="network_error">Erro de rede</string>
<string name="enable_search_history_title">Histórico de pesquisa</string>
@ -447,7 +446,7 @@
<string name="rename_playlist">Mudar nome</string>
<string name="feed_group_dialog_empty_selection">Nenhuma subscrição selecionada</string>
<string name="enable_watch_history_summary">Manter histórico dos vídeos visualizados</string>
<string name="search_history_deleted">Histórico de pesquisa removido.</string>
<string name="search_history_deleted">Histórico de pesquisa removido</string>
<string name="clear_search_history_title">Limpar histórico de pesquisas</string>
<string name="msg_error">Erro</string>
<string name="popup_remember_size_pos_title">Lembrar propriedades de popup</string>
@ -509,8 +508,8 @@
<string name="detail_sub_channel_thumbnail_view_description">Miniatura do avatar do canal</string>
<string name="view_count_text">%1$s visualizações</string>
<string name="popup_player">Reprodutor \'popup\'</string>
<string name="feed_use_dedicated_fetch_method_summary">Disponível em alguns serviços, é geralmente muito mais rápido, mas pode devolver uma quantidade limitada de itens e muitas vezes informações incompletas (por exemplo, sem duração, tipo de item, sem estado ativo).</string>
<string name="watch_history_states_deleted">Posições de reprodução removidas.</string>
<string name="feed_use_dedicated_fetch_method_summary">Disponível em alguns serviços, é geralmente muito mais rápido, mas pode devolver uma quantidade limitada de itens e muitas vezes informações incompletas (por exemplo, sem duração, tipo de item, sem estado ativo)</string>
<string name="watch_history_states_deleted">Posições de reprodução removidas</string>
<string name="downloads_storage_ask_title">Perguntar localização</string>
<string name="report_error">Reportar um erro</string>
<string name="show_info">Mostrar informação</string>
@ -541,7 +540,8 @@
<string name="metadata_cache_wipe_complete_notice">Meta-dados em cache limpos</string>
<string name="show_hold_to_append_summary">Mostrar dica ao premir em segundo plano ou no botão \"Detalhes:\" da janela popup</string>
<string name="no_player_found_toast">Não foi encontrado um reprodutor (pode instalar VLC para reproduzir).</string>
<string name="downloads_storage_ask_summary">Sempre que descarregar um ficheiro, terá que indicar o local para o guardar</string>
<string name="downloads_storage_ask_summary">Ser-lhe-á perguntado onde guardar cada descarga.
\nAtive o seletor de pastas do sistema (SAF) se quiser descarregar para um cartão SD externo</string>
<string name="show_play_with_kodi_title">Mostrar opção \"Reproduzir no Kodi\"</string>
<string name="delete_playlist">Eliminar</string>
<string name="search_no_results">Sem resultados</string>
@ -592,12 +592,12 @@
<string name="background_player">Reprodutor em segundo plano</string>
<string name="view">Reproduzir</string>
<string name="show_error">Mostrar erro</string>
<string name="caption_setting_description">Modificar escala de legendas e estilo de fundo. Tem que reiniciar a aplicação para aplicar as alterações.</string>
<string name="caption_setting_description">Modificar escala de legendas e estilo de fundo. Tem que reiniciar a aplicação para aplicar as alterações</string>
<string name="permission_denied">Ação recusada pelo sistema</string>
<string name="songs">Músicas</string>
<string name="action_about">Acerca</string>
<string name="background_player_append">Na fila do reprodutor em segundo plano</string>
<string name="localization_changes_requires_app_restart">O idioma será alterado assim que reiniciar a aplicação.</string>
<string name="localization_changes_requires_app_restart">O idioma será alterado assim que reiniciar a aplicação</string>
<string name="peertube_instance_add_title">Adicionar instância</string>
<string name="tracks">Faixas</string>
<string name="play_with_kodi_title">Reproduzir no Kodi</string>
@ -621,11 +621,11 @@
<string name="clear_queue_confirmation_title">Pedir confirmação antes de limpar uma fila</string>
<string name="popup_remember_size_pos_summary">Lembrar do último tamanho e posição do popup</string>
<string name="notification_action_nothing">Nada</string>
<string name="notification_action_buffering">Processamento…</string>
<string name="notification_action_buffering">A carregar</string>
<string name="notification_action_shuffle">Baralhar</string>
<string name="notification_action_repeat">Repetir</string>
<string name="notification_actions_at_most_three">Pode selecionar, no máximo, três ações para mostrar na notificação compacta!</string>
<string name="notification_actions_summary">Edite cada ação de notificação abaixo tocando nela. Selecione até três delas para serem mostrados na notificação compacta usando as caixas de seleção à direita.</string>
<string name="notification_actions_summary">Edite cada ação de notificação abaixo tocando nela. Selecione até três delas para serem mostrados na notificação compacta usando as caixas de seleção à direita</string>
<string name="notification_action_4_title">Quinto botão de ação</string>
<string name="notification_action_3_title">Quarto botão de ação</string>
<string name="notification_action_2_title">Terceiro botão de ação</string>
@ -649,7 +649,7 @@
<string name="msg_calculating_hash">A calcular \'hash\'</string>
<string name="hash_channel_description">Notificar sobre o progresso das \'hash\' de vídeos</string>
<string name="hash_channel_name">Notificação \'hash\' do vídeo</string>
<string name="show_meta_info_summary">Desative para ocultar as caixas com informações adicionais acerca do criador, do conteúdo ou de um pedido de pesquisa.</string>
<string name="show_meta_info_summary">Desative para ocultar as caixas com informações adicionais acerca do criador, do conteúdo ou de um pedido de pesquisa</string>
<string name="show_meta_info_title">Mostrar meta-informação</string>
<string name="no_app_to_open_intent">Não possui qualquer aplicação para abrir este ficheiro</string>
<string name="chapters">Capítulos</string>
@ -678,4 +678,44 @@
<string name="show_channel_details">Mostrar detalhes do canal</string>
<string name="disable_media_tunneling_summary">Desative esta opção se estiverem a ocorrer erros de ecrã escuro ou paragens durante a reprodução</string>
<string name="disable_media_tunneling_title">Desativar túnel multimédia</string>
<string name="off">Desligado</string>
<string name="on">Ligado</string>
<string name="tablet_mode_title">Modo tablet</string>
<string name="open_website_license">Abrir site de web</string>
<string name="detail_heart_img_view_description">Entusiasmado pelo criador</string>
<string name="metadata_privacy_internal">Interno</string>
<string name="metadata_privacy_private">Privado</string>
<string name="metadata_privacy_unlisted">Não listado</string>
<string name="metadata_privacy_public">Público</string>
<string name="metadata_thumbnail_url">URL da miniatura</string>
<string name="metadata_host">Servidor</string>
<string name="metadata_support">Apoio</string>
<string name="metadata_language">Idioma</string>
<string name="metadata_age_limit">Limite de idade</string>
<string name="metadata_privacy">Privacidade</string>
<string name="metadata_licence">Licença</string>
<string name="metadata_tags">Marcadores</string>
<string name="metadata_category">Categoria</string>
<string name="description_select_disable">Desativar seleção de texto na descrição</string>
<string name="description_select_enable">Ativar seleção de texto na descrição</string>
<string name="description_select_note">Agora pode selecionar o texto na descrição. Note que a página pode cintilar e as ligações podem não ser clicáveis enquanto estiver no modo de seleção.</string>
<string name="service_provides_reason">%s fornece este motivo:</string>
<string name="account_terminated">Conta encerrada</string>
<string name="feed_toggle_show_played_items">Mostrar itens vistos</string>
<string name="feed_load_error_fast_unknown">O modo de feed rápido não fornece mais informações sobre isto.</string>
<string name="feed_load_error_terminated">A conta do autor foi encerrada.
\nNewPipe não será capaz de carregar este feed no futuro.
\nQuer cancelar a inscrição deste canal\?</string>
<string name="feed_load_error_account_info">Não foi possível carregar o feed para \'%s\'.</string>
<string name="feed_load_error">Erro ao carregar o feed</string>
<string name="downloads_storage_use_saf_summary_api_29">A partir do Android 10, apenas o \'Storage Access Framework\' é compatível</string>
<string name="downloads_storage_use_saf_summary_api_19">O \'Storage Access Framework\' não é compatível com Android KitKat e versões anteriores</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Sempre que descarregar um ficheiro, terá que indicar o local para o guardar</string>
<string name="dont_show">Não mostrar</string>
<string name="low_quality_smaller">Baixa qualidade (menor)</string>
<string name="high_quality_larger">Alta qualidade (maior)</string>
<string name="seekbar_preview_thumbnail_title">Pré visualização da miniatura da barra de busca</string>
<string name="no_dir_yet">Ainda sem pasta de descarregas definida, escolha agora a pasta de descarregas padrão</string>
<string name="comments_are_disabled">Comentários estão desativados</string>
<string name="mark_as_watched">Marcar como visto</string>
</resources>

View File

@ -348,11 +348,11 @@
<string name="users">Utilizadores</string>
<string name="clear_views_history_summary">Remove o histórico dos vídeos reproduzidos e as posições de reprodução</string>
<string name="delete_view_history_alert">Remover todo o histórico de visualizações\?</string>
<string name="watch_history_deleted">Histórico de vídeos apagado.</string>
<string name="watch_history_deleted">Histórico de vídeos apagado</string>
<string name="clear_search_history_title">Limpar histórico de pesquisas</string>
<string name="clear_search_history_summary">Remove o histórico de pesquisas</string>
<string name="delete_search_history_alert">Remover todo o histórico de pesquisas\?</string>
<string name="search_history_deleted">Histórico de pesquisa removido.</string>
<string name="search_history_deleted">Histórico de pesquisa removido</string>
<string name="one_item_deleted">1 item eliminado.</string>
<string name="toast_no_player">Não existe uma aplicação para reproduzir este ficheiro</string>
<string name="donation_encouragement">NewPipe é desenvolvido por voluntários que utilizam o seu tempo livre para nos proporcionar a melhor experiência. Retribua para ajudar os programadores a tornarem NewPipe ainda melhor.</string>
@ -466,7 +466,7 @@
<string name="enable_playback_state_lists_title">Posições nas listas</string>
<string name="enable_playback_state_lists_summary">Mostrar indicadores de posição de reprodução em listas</string>
<string name="settings_category_clear_data_title">Limpar dados</string>
<string name="watch_history_states_deleted">Posições de reprodução removidas.</string>
<string name="watch_history_states_deleted">Posições de reprodução removidas</string>
<string name="missing_file">Ficheiro movido ou eliminado</string>
<string name="overwrite_unrelated_warning">Já existe um ficheiro com este nome</string>
<string name="overwrite_failed">não é possível sobrescrever o ficheiro</string>
@ -501,7 +501,7 @@
<item quantity="one">%s ouvinte</item>
<item quantity="other">%s ouvintes</item>
</plurals>
<string name="localization_changes_requires_app_restart">O idioma será alterado assim que reiniciar a aplicação.</string>
<string name="localization_changes_requires_app_restart">O idioma será alterado assim que reiniciar a app</string>
<string name="seek_duration_title">Duração da pesquisa de avanço/recuo rápido</string>
<string name="peertube_instance_url_title">Instâncias PeerTube</string>
<string name="peertube_instance_url_summary">Defina as suas instâncias favoritas PeerTube</string>
@ -619,7 +619,7 @@
<string name="autoplay_summary">Iniciar reprodução automaticamente — %s</string>
<string name="title_activity_play_queue">Reproduzir fila</string>
<string name="never">Nunca</string>
<string name="notification_action_buffering">Processamento…</string>
<string name="notification_action_buffering">A carregar</string>
<string name="clear_queue_confirmation_description">A fila do reprodutor ativo será substituída</string>
<string name="unsupported_url_dialog_message">URL não reconhecido. Abrir com outra aplicação\?</string>
<string name="auto_queue_toggle">Colocar na fila automaticamente</string>
@ -629,7 +629,7 @@
<string name="notification_action_nothing">Nada</string>
<string name="clear_queue_confirmation_summary">Mudar de um reprodutor para outro pode substituir a sua fila</string>
<string name="clear_queue_confirmation_title">Pedir confirmação antes de limpar uma fila</string>
<string name="notification_actions_summary">Edite cada ação de notificação abaixo tocando nela. Selecione até três delas para serem mostrados na notificação compacta usando as caixas de seleção à direita.</string>
<string name="notification_actions_summary">Edite cada ação de notificação abaixo tocando nela. Selecione até três delas para serem mostrados na notificação compacta a usar as caixas de seleção à direita</string>
<string name="notification_actions_at_most_three">Pode selecionar, no máximo, três ações para mostrar na notificação compacta!</string>
<string name="notification_action_repeat">Repetir</string>
<string name="notification_action_4_title">Quinto botão de ação</string>
@ -682,7 +682,7 @@
<string name="no_dir_yet">Ainda sem pasta de descarregas definida, escolha agora a pasta de descarregas padrão</string>
<string name="service_provides_reason">%s fornece este motivo:</string>
<string name="account_terminated">Conta encerrada</string>
<string name="feed_toggle_show_played_items">Mostrar itens reproduzidos</string>
<string name="feed_toggle_show_played_items">Mostrar itens vistos</string>
<string name="feed_load_error_fast_unknown">O modo de feed rápido não fornece mais informações sobre isto.</string>
<string name="feed_load_error_terminated">A conta do autor foi encerrada.
\nNewPipe não será capaz de carregar este feed no futuro.
@ -691,4 +691,31 @@
<string name="feed_load_error">Erro ao carregar o feed</string>
<string name="downloads_storage_use_saf_summary_api_29">A partir do Android 10, apenas o \'Storage Access Framework\' é compatível</string>
<string name="downloads_storage_use_saf_summary_api_19">O \'Storage Access Framework\' não é compatível com Android KitKat e versões anteriores</string>
<string name="seekbar_preview_thumbnail_title">Pré-visualização da miniatura da barra de busca</string>
<string name="mark_as_watched">Marcar como visto</string>
<string name="off">Desligado</string>
<string name="on">Ligado</string>
<string name="tablet_mode_title">Modo tablet</string>
<string name="open_website_license">Abrir site de web</string>
<string name="detail_heart_img_view_description">Entusiasmado pelo criador</string>
<string name="metadata_privacy_internal">Interno</string>
<string name="metadata_privacy_private">Privado</string>
<string name="metadata_privacy_unlisted">Não listado</string>
<string name="metadata_privacy_public">Público</string>
<string name="metadata_thumbnail_url">URL da miniatura</string>
<string name="metadata_host">Servidor</string>
<string name="metadata_support">Apoio</string>
<string name="metadata_language">Idioma</string>
<string name="metadata_age_limit">Limite de idade</string>
<string name="metadata_privacy">Privacidade</string>
<string name="metadata_licence">Licença</string>
<string name="metadata_tags">Marcadores</string>
<string name="metadata_category">Categoria</string>
<string name="description_select_disable">Desativar seleção de texto na descrição</string>
<string name="description_select_enable">Ativar seleção de texto na descrição</string>
<string name="description_select_note">Agora pode selecionar o texto na descrição. Note que a página pode cintilar e as ligações podem não ser clicáveis enquanto estiver no modo de seleção.</string>
<string name="dont_show">Não mostrar</string>
<string name="low_quality_smaller">Baixa qualidade (menor)</string>
<string name="high_quality_larger">Alta qualidade (maior)</string>
<string name="comments_are_disabled">Comentários estão desativados</string>
</resources>

View File

@ -59,7 +59,7 @@
<string name="use_tor_title">Folosește Tor</string>
<string name="use_tor_summary">(Experimental) Forțează descărcarea traficului prin Tor pentru intimitate crescută (transmiterea în flux a videoclipurilor nu este deocamdată suportată).</string>
<string name="err_dir_create">Nu s-a putut crea directorul de descărcare \'%1$s\'</string>
<string name="main_bg_subtitle">Apăsați căutare pentru a începe</string>
<string name="main_bg_subtitle">Apăsați pe lupă pentru a începe</string>
<string name="autoplay_by_calling_app_title">Redare automată</string>
<string name="autoplay_by_calling_app_summary">Redă un videoclip atunci când NewPipe este deschis din altă aplicație</string>
<string name="duration_live">În direct</string>

View File

@ -723,4 +723,11 @@
<string name="on">Включить</string>
<string name="tablet_mode_title">Режим планшета</string>
<string name="feed_toggle_show_played_items">Показать проигранные</string>
<string name="comments_are_disabled">Комментарии отключены</string>
<string name="dont_show">Не показывать</string>
<string name="low_quality_smaller">Низкое качество (меньше)</string>
<string name="high_quality_larger">Высокое качество (крупнее)</string>
<string name="seekbar_preview_thumbnail_title">Миниатюра над полосой прокрутки</string>
<string name="detail_heart_img_view_description">Автору видео понравилось это</string>
<string name="mark_as_watched">Пометить как проигранные</string>
</resources>

View File

@ -710,5 +710,12 @@
<string name="off">Istudadu</string>
<string name="on">Allutu</string>
<string name="tablet_mode_title">Modalidade tauledda</string>
<string name="feed_toggle_show_played_items">Ammustra sos elementos riproduidos</string>
<string name="feed_toggle_show_played_items">Ammustra sos elementos pompiados</string>
<string name="dont_show">No ammustres</string>
<string name="low_quality_smaller">Calidade bassa (prus minore)</string>
<string name="high_quality_larger">Calidade arta (prus manna)</string>
<string name="seekbar_preview_thumbnail_title">Antiprima in sa barra de avantzamentu</string>
<string name="comments_are_disabled">Sos cummentos sunt disabilitados</string>
<string name="detail_heart_img_view_description">Su creadore b\'at postu unu coro</string>
<string name="mark_as_watched">Marca comente pompiadu</string>
</resources>

View File

@ -7,36 +7,36 @@
<string name="theme_title">Nashqada</string>
<string name="default_video_format_title">Nooca muuqaalka</string>
<string name="default_audio_format_title">Nooca dhagaysiga</string>
<string name="notification_colorize_summary">Android-ka hakuu badalo midabka ogaysiiska galka waxa daaran asagoo kusalaynaya midabka galka shayga daaran (aaladahoo dhan looma wada heli karo nidaamkan)</string>
<string name="notification_colorize_summary">Androidka hakuu baddalo midabka ogaysiiska galka waxa daaran asagoo kusalaynaya midabka galka shayga daaran (aalladahoo dhan looma wada heli karo nidaamkan)</string>
<string name="notification_colorize_title">Midabbee ogaysiiska</string>
<string name="notification_action_buffering">Soo Kicinaya</string>
<string name="notification_action_shuffle">isku qas</string>
<string name="notification_action_repeat">Ku celi</string>
<string name="notification_actions_at_most_three">Ugu badnaan waxad dooran kartaa sadex shay iney ka muuqdaan ogaysiiska yar!</string>
<string name="notification_actions_summary">Wax ka badal hawsha ogaysiiska adigoo dushooda ku dhufanaya. Dooro ilaa sadex kamida si ay uga muuqdaan ogaysiiska yar adigoo saxaya santuuqa dhanka midig kaga yaala</string>
<string name="notification_actions_summary">Wax ka baddal hawsha ogaysiiska adigoo dushooda ku dhufanaya. Dooro ilaa sadex kamida si ay uga muuqdaan ogaysiiska yar adigoo saxaya santuuqa dhanka midig kaga yaala</string>
<string name="notification_action_4_title">Batoonka hawsha shanaad</string>
<string name="notification_action_3_title">Batoonka hawsha afraad</string>
<string name="notification_action_2_title">Batoonka hawsha sadexaad</string>
<string name="notification_action_1_title">Batoonka hawsha labaad</string>
<string name="notification_action_0_title">Batoonka hawsha koowaad</string>
<string name="notification_scale_to_square_image_summary">La ekaysii galka muuqaalka xaga ogaysiisyada ka muuqda cabirka 1:1 ayadoo laga soo badalayo 16:9 (wuxuu keeni karaa shucaac)</string>
<string name="notification_scale_to_square_image_summary">La ekaysii galka muuqaalka xaga ogaysiisyada ka muuqda cabirka 1:1 ayadoo laga soo baddalayo 16:9 (wuxuu keeni karaa shucaac)</string>
<string name="notification_scale_to_square_image_title">Galka la ekaysii cabirka 1:1</string>
<string name="show_play_with_kodi_summary">Soo bandhig istikhyaar ah in muuqaalka lagu furo xarunta madadaalada Kodi</string>
<string name="show_play_with_kodi_title">Soodhig istikhyaarka \"Kufur Kodi\"</string>
<string name="kore_not_found">Kushub app-ka maqan ee Kore\?</string>
<string name="play_with_kodi_title">Kufur Kodi</string>
<string name="show_higher_resolutions_summary">Aaladaha qaar kaliya ayaa furi kara muuqaalada 2K/4K ga ah</string>
<string name="show_play_with_kodi_title">Soodhig istikhyaarka \"Ku fur Kodi\"</string>
<string name="kore_not_found">Kushub appka maqan ee Kore\?</string>
<string name="play_with_kodi_title">Ku fur Kodi</string>
<string name="show_higher_resolutions_summary">Aalladaha qaar kaliya ayaa furi kara muuqaalada 2K/4K ga ah</string>
<string name="show_higher_resolutions_title">Tus tayooyinka kasii sareeeya</string>
<string name="default_popup_resolution_title">Tayada muuqaalka daaqada</string>
<string name="default_resolution_title">Tayada muuqaalka</string>
<string name="autoplay_by_calling_app_summary">Wuxuu daaraa muuqaal marka NewPipe laga soo furo app kale</string>
<string name="download_choose_new_path">Badal khaanadaha waxa lasoo dajiyo si uu u hirgalo waxaad badashay</string>
<string name="download_choose_new_path">Baddal khaanadaha waxa lasoo dajiyo si uu u hirgalo waxaad baddashay</string>
<string name="download_path_audio_dialog_title">Dooro khaanada dhagaysiga lasoo dajiyo</string>
<string name="download_path_dialog_title">Dooro khaanada muuqaalada lasoo dajiyo</string>
<string name="download_path_audio_summary">Dhagaysiyada lasoo dajiyay halkan ayaa lagu kaydiyaa</string>
<string name="download_path_summary">Muuqaalada lasoo dajiyo halkan ayaa lagu kaydiyaa</string>
<string name="download_path_audio_title">Khaanada dhagaysiga lasoo dajiyo</string>
<string name="download_path_title">Khaanada muuqaalada lasoo dajiyo</string>
<string name="download_path_audio_title">Khaanada dajinta dhagaysiga</string>
<string name="download_path_title">Khaanada dajinta muuqaalada</string>
<string name="controls_add_to_playlist_title">Ku Dar</string>
<string name="controls_popup_title">Daaqad</string>
<string name="controls_background_title">Xaga Dambe</string>
@ -47,7 +47,7 @@
<string name="tab_main">Guud</string>
<string name="show_info">Faahfaahinta</string>
<string name="subscription_update_failed">Lama cusbooneysiin karo rukunka</string>
<string name="subscription_change_failed">Lama badali karo rukunka</string>
<string name="subscription_change_failed">Lama baddali karo rukunka</string>
<string name="channel_unsubscribed">Kanaalka waad iskajoojisay</string>
<string name="unsubscribe">Iskajooji Rukunka</string>
<string name="subscribed_button_title">Rukuntay</string>
@ -56,15 +56,15 @@
<string name="use_external_audio_player_title">Isticmaal dhagaysi daare dibada ah</string>
<string name="use_external_video_player_summary">Codka ayuu ka saaraa tayada muuqaalada qaar</string>
<string name="use_external_video_player_title">Isticmaal muuqaal daare dibada ah</string>
<string name="choose_browser">Dooro browser-ka</string>
<string name="choose_browser">Dooro browserka</string>
<string name="share_dialog_title">La wadaag</string>
<string name="search_showing_result_for">Kutusaya natiijooyinka: %s</string>
<string name="did_you_mean">Ma waxaad ka waday \"%1$s\"\?</string>
<string name="settings">Fadhiga</string>
<string name="controls_download_desc">Daji midka socda</string>
<string name="share">La wadaag</string>
<string name="open_in_popup_mode">Kufur qaabka daaqada</string>
<string name="open_in_browser">Kufur browser-ka</string>
<string name="open_in_popup_mode">Ku fur qaabka daaqada</string>
<string name="open_in_browser">Ku fur browserka</string>
<string name="cancel">Ka noqo</string>
<string name="install">Ku shub</string>
<string name="no_player_found_toast">Wax fura lama helin shaygan. (waxaad Ku shuban kartaa VLC si aad u furto).</string>
@ -79,7 +79,7 @@
<string name="download_finished">Dajintii way dhamaystirantay</string>
<string name="download_failed">Dajintii ma guulaysan</string>
<string name="permission_denied">Hawshan waxaa diiday aalada</string>
<string name="recovering">Kasoo kabanaya</string>
<string name="recovering">kasoo kabanaya</string>
<string name="queued">la horay</string>
<string name="paused">la qabtay</string>
<string name="missions_header_pending">Socda</string>
@ -87,7 +87,7 @@
<string name="app_update_notification_content_text">Ku dhufo si aad u dajiso</string>
<string name="app_update_notification_content_title">Nooc cusub oo NewPipe ah ayaa diyaar ah!</string>
<string name="switch_view">Baddal Qaabka</string>
<string name="list_view_mode">Qaabka soobandhiga</string>
<string name="list_view_mode">Qaabka soobandhigga</string>
<string name="never">Marna</string>
<string name="wifi_only">WiFi-ga kaliya</string>
<string name="minimize_on_exit_title">Yaree marka app kale loo gudbo</string>
@ -106,20 +106,20 @@
<string name="export_to">U gudbi</string>
<string name="import_from">Kasoo gali</string>
<string name="import_title">Soo gali</string>
<string name="import_export_title">Soo gali/Dibada ugudbi</string>
<string name="import_export_title">Soo gali/gudbi</string>
<string name="show_original_time_ago_summary">Qoraaladii asal ahaan adeegyada la socday (wakhtigii kasoo wareegay) way ka muuqan doonaan waxyaabaha aad furanayso</string>
<string name="show_original_time_ago_title">Tus wakhtigii asalka ahaa</string>
<string name="enable_disposed_exceptions_summary">Ku khasab warinta ka reebitaanada aan la fulin karin ee \'Rx\' ka ee dibada qayb ama wakhtiga hawsha kadib marka la iska dhaafo</string>
<string name="enable_disposed_exceptions_title">Warinta khaladyada hore</string>
<string name="show_memory_leaks">Tus ciladaha kaydka</string>
<string name="enable_leak_canary_summary">Dabagalka cillada kaydka waxay sababi kartaa inuu app-ku istaago marka \'heap dump\' la samaynayo</string>
<string name="caption_setting_description">Wax kabadal cabirka xarfaha qoraal-hooseedka iyo midabkooda xaga dambe. App-ka waa in dib loo soo bilaabaa si ay u hirgasho</string>
<string name="caption_setting_description">Wax ka baddal cabirka xarfaha qoraal-hooseedka iyo midabkooda xaga dambe. Appka waa in dib loo soo bilaabaa si ay u hirgasho</string>
<string name="resize_zoom">Soo dhawee</string>
<string name="resize_fill">Ku buuxi</string>
<string name="caption_none">Qoraal-hooseed la\'aan</string>
<string name="playlist_no_uploader">isa-sameeyay (soosaare lama helin)</string>
<string name="playlist_delete_failure">Xulka lama saari karo.</string>
<string name="playlist_thumbnail_change_success">Galkii xulka waa la badalay.</string>
<string name="playlist_thumbnail_change_success">Galkii xulka waa la baddalay.</string>
<string name="playlist_add_stream_success">La xulay</string>
<string name="playlist_creation_success">Xulka waa la sameeyay</string>
<string name="delete_playlist_prompt">Saar xulkan\?</string>
@ -128,10 +128,10 @@
<string name="set_as_playlist_thumbnail">Ku fadhiisi galka xulka</string>
<string name="unmute">Ka hadalsii</string>
<string name="append_playlist">Ku dar xul</string>
<string name="rename_playlist">Magaca kabadal</string>
<string name="rename_playlist">Magaca ka baddal</string>
<string name="delete_playlist">Saar</string>
<string name="create_playlist">Xul Cusub</string>
<string name="preferred_player_fetcher_notification_message">Sookicinaya shayga la codsaday</string>
<string name="preferred_player_fetcher_notification_message">Soo kicinaya shayga la codsaday</string>
<string name="preferred_player_fetcher_notification_title">Helaya xogta…</string>
<string name="always_ask_open_action">Waydii marwalba</string>
<string name="background_player">Gadaal ku daare</string>
@ -156,13 +156,13 @@
<string name="new_and_hot">Cusub oo Shiddan</string>
<string name="top_50">50ka Sare</string>
<string name="kiosk">Bandhig</string>
<string name="localization_changes_requires_app_restart">Luuqadu waxay isbadali doontaa marka app-ka dib loo soo kiciyo</string>
<string name="error_unable_to_load_comments">Faalooyinka lama soodhigi karo</string>
<string name="localization_changes_requires_app_restart">Luuqadu waxay isbaddali doontaa marka appka dib loo soo kiciyo</string>
<string name="error_unable_to_load_comments">Faallooyinka lama soo kicin karo</string>
<string name="import_settings">Inaad sidoo kale fadhiga soo galiso ma rabtaa\?</string>
<string name="override_current_data">Tani waxay badali fadhiga siduu kuu yahay hadda.</string>
<string name="override_current_data">Tani waxay baddali fadhiga siduu kuu yahay hadda.</string>
<string name="could_not_import_all_files">Digniin: Lama soowada galin karo faylashoo dhan.</string>
<string name="no_valid_zip_file">Shay ZIP ah oo sax ah majiro</string>
<string name="import_complete_toast">Lasoo Galiyay</string>
<string name="import_complete_toast">Lasoogaliyay</string>
<string name="export_complete_toast">La Gudbiyay</string>
<string name="select_a_kiosk">Dooro Bandhig</string>
<string name="no_playlist_bookmarked_yet">Wax xul ah wali lama calaamadsanin</string>
@ -170,13 +170,13 @@
<string name="no_channel_subscribed_yet">Wax kanaal ah wali lama rukuman</string>
<string name="select_a_channel">Dooro kanaal</string>
<string name="channel_page_summary">Boga Kanaalka</string>
<string name="feed_page_summary">Boga Bandhiga</string>
<string name="feed_page_summary">Boga Bandhigga</string>
<string name="subscription_page_summary">Boga Rukunka</string>
<string name="default_kiosk_page_summary">Bandhiga siduu ahaa</string>
<string name="kiosk_page_summary">Boga Bandhiga</string>
<string name="default_kiosk_page_summary">Bandhigga siduu ahaa</string>
<string name="kiosk_page_summary">Bogga Bandhigga</string>
<string name="blank_page_summary">Bog Madhan</string>
<string name="main_page_content_summary">Daaqadaha la soobandhigo boga guud</string>
<string name="main_page_content">Boga guud waxa ka muuqda</string>
<string name="main_page_content_summary">Daaqadaha lasoobandhigo bogga guud</string>
<string name="main_page_content">Bogga guud</string>
<string name="title_most_played">Badanaa La Daawado</string>
<string name="title_last_played">U Dambeeyay ee La Daawaday</string>
<string name="delete_all_history_prompt">Ma hubtaa inaad ka saari rabto wax walba kaydka wixii hore\?</string>
@ -190,7 +190,7 @@
<string name="title_history_view">La Daawaday</string>
<string name="title_history_search">La Raadiyay</string>
<string name="read_full_license">Akhri laysinka</string>
<string name="app_license">NewPipe waa barnaamij bilaash ah oo aan lahayn xuquuqda daabacaada: Waad isticmaali kartaa, waad wadaagi kartaa waadna hormarin kartaa hadaad rabto. Gaar ahaan waad sii daabici kartaa ama wax baad ka badali kartaa ayadoo la raacayo shuruudaha sharciga guud ee GNU sida ay soosaareen Ururka Barnaamijyada Bilaashka ah, soosaarista 3aad ee laysinka, ama (hadaad doonto) nooc walba oo kasii dambeeyay laysinkii 3aad.</string>
<string name="app_license">NewPipe waa barnaamij bilaash ah oo aan lahayn xuquuqda daabacaada: Waad isticmaali kartaa, waad wadaagi kartaa waadna hormarin kartaa hadaad rabto. Gaar ahaan waad sii daabici kartaa ama wax baad ka baddali kartaa ayadoo la raacayo shuruudaha sharciga guud ee GNU sida ay soosaareen Ururka Barnaamijyada Bilaashka ah, soosaarista 3aad ee laysinka, ama (hadaad doonto) nooc walba oo kasii dambeeyay laysinkii 3aad.</string>
<string name="privacy_policy_title">Siyaasada Sirdhawrka NewPipe</string>
<string name="app_license_title">Laysanka NewPipe</string>
<string name="read_privacy_policy">Akhri siyaasada sirdhawrka</string>
@ -202,9 +202,9 @@
<string name="donation_encouragement">NewPipe waxaa sameeyay dad iskood isku xilqaamay oo wakhtiga ay xorta yihiin qayb kamid ah ku kharash gareeya inay kuu keenaan wax markaad isticmaalayso aad ku qanacdo. U fidi taageero sameeyaasha appka si ay NewPipe xataa sidan oga sii fiicneeyaan.</string>
<string name="donation_title">Ugu Deeq</string>
<string name="view_on_github">Xaga GitHub fur</string>
<string name="contribution_encouragement">Hadaad hayso fikrado; rogid, qaab badal, nadiifin koodh, ama koodhka ood si wayn wax oga badashaa—caawinta marwalba waa lasoo dhawaynayaa. Waxbadan hadii la qabto waxbadan ayaa fiicnaan!</string>
<string name="contribution_encouragement">Hadaad hayso fikrado; rogid, qaab baddal, nadiifin koodh, ama koodhka ood si wayn wax oga badashaa—caawinta marwalba waa lasoo dhawaynayaa. Waxbadan hadii la qabto waxbadan ayaa fiicnaan!</string>
<string name="contribution_title">Kusoo Kordhin</string>
<string name="app_description">App bilaash ah oo fudud looguna talagalay in Android-ka wax loogu daawado.</string>
<string name="app_description">App bilaash ah oo fudud looguna talagalay in Androidka wax loogu daawado.</string>
<string name="tab_licenses">Laysimada</string>
<string name="tab_contributors">Dadka wax kusoo kordhiyay NewPipe</string>
<string name="tab_about">Kusaabsan NewPipe</string>
@ -218,10 +218,10 @@
<string name="toast_no_player">Shaygan app fura kuuguma jiro</string>
<string name="charset_most_special_characters">Xarfaha gaarka ah kuwa ugu badan</string>
<string name="charset_letters_and_digits">Xarfaha iyo godadka</string>
<string name="settings_file_replacement_character_title">Xarafka lagu badalayo</string>
<string name="settings_file_replacement_character_summary">Xarfaha aan la taageerin waxaa lagu badali midkan</string>
<string name="settings_file_replacement_character_title">Xarafka lagu baddalayo</string>
<string name="settings_file_replacement_character_summary">Xarfaha aan la taageerin waxaa lagu bdadali midkan</string>
<string name="settings_file_charset_title">Xarafyada magaca shayga loo ogol yahay</string>
<string name="settings_category_downloads_title">Soodajinta</string>
<string name="settings_category_downloads_title">Dajinta</string>
<string name="recaptcha_done_button">Dhameeyay</string>
<string name="recaptcha_request_toast">Tijaabada reCAPTCHA ayaa la codsaday</string>
<string name="subtitle_activity_recaptcha">Taabo \"Dhameeyay\" ✅ markaad xaliso</string>
@ -232,7 +232,7 @@
<string name="no_available_dir">Fadlan khaanada wax lagu dajin doono hadhawto xaga fadhiga kasoo dooro</string>
<string name="msg_copied">Dhakada ayaa lagu qabtay</string>
<string name="msg_wait">Fadlan sug…</string>
<string name="msg_calculating_hash">Xisaabinaya badalka</string>
<string name="msg_calculating_hash">Xisaabinaya baddalka</string>
<string name="msg_running_detail">Faahfaahinta kusii dhufo</string>
<string name="msg_running">NewPipe wuu dajinayaa</string>
<string name="msg_url_malform">Tixraac khaldan ama khad baan jirin</string>
@ -243,7 +243,7 @@
<string name="msg_name">Magaca shayga</string>
<string name="finish">Hagaag</string>
<string name="add">Hawl cusub</string>
<string name="rename">Magaca kabadal</string>
<string name="rename">Magaca ka baddal</string>
<string name="dismiss">Iska dhaaf</string>
<string name="checksum">Xaqiijiyaha</string>
<string name="delete_all">Wada Saar</string>
@ -253,7 +253,7 @@
<string name="view">Daar</string>
<string name="pause">Qabo</string>
<string name="start">Bilow</string>
<string name="no_comments">faalooyin ma jiraan</string>
<string name="no_comments">faallooyin ma jiraan</string>
<plurals name="videos">
<item quantity="one">%s muuqaal</item>
<item quantity="other">%s muuqaal</item>
@ -286,12 +286,12 @@
<string name="short_billion">B</string>
<string name="short_thousand">K</string>
<string name="short_million">M</string>
<string name="storage_permission_denied">U ogolow app-ka kaydka aaalada marka hore</string>
<string name="retry">Kuceli</string>
<string name="storage_permission_denied">U ogolow appka kaydka aallada marka hore</string>
<string name="retry">ku celi</string>
<string name="audio">Dhagaysi</string>
<string name="video">Muuqaal</string>
<string name="info_dir_created">Waa la sameeyay galka soodajinta ee \'%1$s\'</string>
<string name="err_dir_create">Lama samayn karo galka soodajinta ee \'%1$s\'</string>
<string name="info_dir_created">Waa la sameeyay khaanada dajinta ee \'%1$s\'</string>
<string name="err_dir_create">Lama samayn karo khaanada dajinta ee \'%1$s\'</string>
<string name="detail_drag_description">Farta ku jiid si aad ukala hormariso</string>
<string name="empty_subscription_feed_subtitle">meel madhan</string>
<string name="search_no_results">natiijo lama helin</string>
@ -303,10 +303,10 @@
<string name="detail_likes_img_view_description">inta ka heshay</string>
<string name="detail_uploader_thumbnail_view_description">Sawirka u saaran soosaareha</string>
<string name="detail_thumbnail_view_description">Daar muuqaalka, intuu socdo:</string>
<string name="info_labels">Shayga:\\nCodsiga:\\nLuuqada Shayga:\\nWadanka Shayga:\\nLuuqada App-ka:\\nAdeega:\\nWakhtiga oo GMT ah:\\nXidhmada:\\nTirsiga App-ka:\\nTirsiga Nooca Barnaamijka:</string>
<string name="info_labels">Shayga:\\nCodsiga:\\nLuuqada Shayga:\\nWadanka Shayga:\\nLuuqada Appka:\\nAdeega:\\nWakhtiga oo GMT ah:\\nXidhmada:\\nTirsiga Appka:\\nTirsiga Nooca Barnaamijka:</string>
<string name="list_thumbnail_view_description">Galka muuqaal tusaha</string>
<string name="error_details_headline">Faahfaahin:</string>
<string name="your_comment">Faaladaada (oo Ingiriis ah):</string>
<string name="your_comment">Faalladaada (oo Ingiriis ah):</string>
<string name="what_happened_headline">Waxa dhacay:</string>
<string name="what_device_headline">Xogta:</string>
<string name="error_snackbar_action">Wari</string>
@ -316,14 +316,14 @@
<string name="copy_for_github">Koobiyee warka oo diyaarsan</string>
<string name="error_report_button_text">Khaladkan email ahaan ku warceli</string>
<string name="sorry_string">Waan ka xunahay, sidaa inay dhacdo ma ahayn.</string>
<string name="permission_display_over_apps">U ogolow app-ka inuu dul fuulo applicationada kale</string>
<string name="permission_display_over_apps">U ogolow appka inuu dul fuulo applicationada kale</string>
<string name="restore_defaults_confirmation">Ma rabtaa inaad sidii hore kuceliso\?</string>
<string name="restore_defaults">Dib ugu celi sidii hore</string>
<string name="saved_tabs_invalid_json">Lama akhrin karo daaqadihii la kaydiyay, …isticmaalaya kuwii app-ku kusoo baxay</string>
<string name="no_streams_available_download">Wax la dajiyo lama heli karo</string>
<string name="error_occurred_detail">Khalad ayaa ka dhacay: %1$s</string>
<string name="file_name_empty_error">Magaca shayga ma madhnaan karo</string>
<string name="invalid_file">Shaygani ma jiro ama ogolaansho looma haysto in wax laga badalo ama la furo</string>
<string name="invalid_file">Shaygani ma jiro ama ogolaansho looma haysto in wax laga baddalo ama la furo</string>
<string name="invalid_source">Shaygan/tixraaca shayga lama heli karo</string>
<string name="invalid_directory">khaanadan ma jirto</string>
<string name="missing_file">Shaygan waa la guuriyay ama waa la tirtiray</string>
@ -331,18 +331,18 @@
<string name="video_streams_empty">Muuqaalo la daawado lama helin</string>
<string name="invalid_url_toast">Tixraac khaldan</string>
<string name="external_player_unsupported_link_type">Daareyaasha dibada ah linkiyda noocan ah ma furaan</string>
<string name="player_recoverable_failure">Kasoo kabanaya khaladkii xaga daareha kadhacay</string>
<string name="player_unrecoverable_failure">Khalad xaga daareha ah oon la sixi karin ayaa dhacay</string>
<string name="player_stream_failure">Shaygan lama daari karo</string>
<string name="app_ui_crash">App-ka/UI-ga ayaa khalkhalay</string>
<string name="player_recoverable_failure">kasoo kabanaya khaladkii xaga daareha kadhacay</string>
<string name="player_unrecoverable_failure">khalad xaga daareha ah oon la sixi karin ayaa dhacay</string>
<string name="player_stream_failure">shaygan lama daari karo</string>
<string name="app_ui_crash">Appka/UI ga ayaa khalkhalay</string>
<string name="could_not_load_image">Sawirka lama soo kicin karo</string>
<string name="could_not_get_stream">Wax la daawado lama heli karo</string>
<string name="live_streams_not_supported">Muuqaalada tooska ah wali lama taageerin</string>
<string name="could_not_setup_download_menu">Lama soo kicin karo meeshii soodajinta</string>
<string name="content_not_available">Shaygan lama heli karo</string>
<string name="could_not_setup_download_menu">Lama soo kicin karo tusmada dajinta</string>
<string name="content_not_available">shaygan lama heli karo</string>
<string name="light_parsing_error">Website-ka si buuxda looma furi karo</string>
<string name="parsing_error">Lama furi karo website-ka</string>
<string name="youtube_signature_deobfuscation_error">Lama badali karo sixiixa tixraaca muuqaalka</string>
<string name="youtube_signature_deobfuscation_error">Lama baddali karo sixiixa tixraaca muuqaalka</string>
<string name="could_not_load_thumbnails">Lama soo wada kicin karo galalkoo dhan</string>
<string name="network_error">khalad xaga khadka ah</string>
<string name="download_to_sdcard_error_message">Ku dajinta kaydka dibadda (mimoriga) suurtogal ma aha. Dib u fadhiisi khaanada wax lagu dajiyo\?</string>
@ -367,8 +367,8 @@
<string name="playlist">Xul</string>
<string name="channels">Kanaalo</string>
<string name="channel">Kanaal</string>
<string name="downloads_title">Soodajinta</string>
<string name="downloads">Soodajinta</string>
<string name="downloads_title">Dajinta</string>
<string name="downloads">Dajinta</string>
<string name="duration_live">Toos</string>
<string name="undo">Soo celi</string>
<string name="refresh">Cusboonaysii</string>
@ -384,20 +384,20 @@
<string name="clear_views_history_title">Nadiifi kaydka wixii ladaawaday</string>
<string name="clear_cookie_summary">Nadiifi kaydka uu NewPipe kaydiyo markaad xaliso reCAPTCHA</string>
<string name="export_data_summary">Dibadda u gudbi kaydka wixii la daawaday, rukunka, xulalka iyo fadhiga</string>
<string name="import_data_summary">Wuxuu badalaa kaydka waxaad daawatay, rukunka, xulalka iyo (hadaad doorato) fadhiga</string>
<string name="import_data_summary">Wuxuu baddalaa kaydka waxaad daawatay, rukunka, xulalka iyo (hadaad doorato) fadhiga</string>
<string name="recaptcha_cookies_cleared">Kaydkii reCAPTCHA waa la nadiifiyay</string>
<string name="clear_cookie_title">Nadiifi kaydka reCAPTCHA</string>
<string name="export_data_title">Gudbi xog diyaarsan</string>
<string name="import_data_title">Soo gali xog kaydsan</string>
<string name="switch_to_main">U badal Sida Caadiga ah</string>
<string name="switch_to_main">U baddal Sida Caadiga ah</string>
<string name="switch_to_popup">U baddal qaabka Daaqada</string>
<string name="switch_to_background">U Baddal Xaga Dambe</string>
<string name="toggle_orientation">Fur Qaabka (Jiif/Joog)</string>
<string name="unknown_content">[Garanwaa]</string>
<string name="hash_channel_name">Ogaysiiska badalida Muuqaalka</string>
<string name="hash_channel_description">Ogaysiisyada heerka uu marayo badalida muuqaalka</string>
<string name="hash_channel_name">Ogaysiiska baddalida Muuqaalka</string>
<string name="hash_channel_description">Ogaysiisyada heerka uu marayo baddalida muuqaalka</string>
<string name="app_update_notification_channel_description">Ogaysiisyada nooca cusub ee NewPipe</string>
<string name="app_update_notification_channel_name">Ogaysiiska Cusbonaysiinta app-ka</string>
<string name="app_update_notification_channel_name">Ogaysiiska Cusbonaysiinta appka</string>
<string name="notification_channel_description">Ogaysiisyada NewPipe markuu gadaal iyo xaga daaqada wax ka daarayo</string>
<string name="notification_channel_name">Ogaysiisyada NewPipe</string>
<string name="just_once">Markan uun</string>
@ -445,7 +445,7 @@
<string name="unsupported_url">Tixraac aan la furi karin</string>
<string name="show_hold_to_append_summary">Tus sharaxaada marka la riixayo batoonka xaga dambe ama midka daaqada ee ku yaala xaga \"Faahfaahinta:\" muuqaalka</string>
<string name="show_hold_to_append_title">Tus sharaxaada \"Farta ku hay si aad iskugu darto\"</string>
<string name="show_next_and_similar_title">Muuqaalada \'Ka xiga\' iyo \'Kuwa Lamidka ah\'</string>
<string name="show_next_and_similar_title">Muuqaalada \'Xiga\' iyo \'La xidhiidha\'</string>
<string name="autoplay_title">isdaarida</string>
<string name="download_dialog_title">Daji</string>
<string name="resume_on_audio_focus_gain_summary">Sii wad wixii daaraa marka la dhabqiyo kadib (tusaale marka wicitaan kusoo galo)</string>
@ -455,9 +455,9 @@
<string name="enable_playback_state_lists_summary">Tus meelaha waxa daaran meeshuu marayo tilmaamaya ee xaga liistada</string>
<string name="enable_playback_state_lists_title">Meelaha ay marayeen (xaga liistada)</string>
<string name="enable_playback_resume_summary">Kasii wad meeshii hore</string>
<string name="enable_playback_resume_title">Sii wad wixii daarnaa</string>
<string name="enable_playback_resume_title">Sii wad daarrida</string>
<string name="enable_watch_history_title">Wixii la daawaday</string>
<string name="enable_search_history_summary">Ku kaydi wixii la raadiyay aalada</string>
<string name="enable_search_history_summary">Ku kaydi wixii la raadiyay aallada</string>
<string name="enable_search_history_title">Wixii laraadiyay</string>
<string name="show_search_suggestions_summary">Tus soojeedino marka wax la raadinayo</string>
<string name="show_search_suggestions_title">Soojeedinada raadinta</string>
@ -474,12 +474,12 @@
<string name="metadata_cache_wipe_summary">Tirtir waxyaabaha K/G ah ee boga website-ka</string>
<string name="metadata_cache_wipe_title">Tirtir faahfaahinada yaryar</string>
<string name="thumbnail_cache_wipe_complete_notice">kaydkii kumeelgaadhka ahaa ee sawirka waa la tirtiray</string>
<string name="download_thumbnail_summary">Xidh si aad u joojiso soo bandhiga galka muuqaalada, adigoo yaraynaya isticmalka khadka iyo maskaxda aalada. Wax kabadalkan wuxuu nadiifin doonaa waxa kaydka hore iyo ka caadiga ah kumeelgaadh ahaan ugu jira</string>
<string name="show_comments_summary">Xidh si aad u qariso faalooyinka</string>
<string name="show_comments_title">Tus faalooyinka</string>
<string name="download_thumbnail_summary">Xidh si aad u joojiso soo bandhiga galka muuqaalada, adigoo yaraynaya isticmalka khadka iyo maskaxda aalada. Wax ka baddalkan wuxuu nadiifin doonaa waxa kaydka hore iyo ka caadiga ah kumeelgaadh ahaan ugu jira</string>
<string name="show_comments_summary">Xidh si aad uqariso faallooyinka</string>
<string name="show_comments_title">Tus faallooyinka</string>
<string name="download_thumbnail_title">Soodhig galalka</string>
<string name="clear_queue_confirmation_description">Hormada daareha hadda wax shidaya waa la badali doonaa</string>
<string name="clear_queue_confirmation_summary">Kala badalka daareha waxay badali kartaa hormada sidaas darteed waydii in la xaqiijiyo intaan hormada la tirtirin</string>
<string name="clear_queue_confirmation_description">Hormada daareha hadda wax shidaya waa la baddali doonaa</string>
<string name="clear_queue_confirmation_summary">Kala baddalka daareha waxay badali kartaa hormada sidaas darteed waydii in la xaqiijiyo intaan hormada la tirtirin</string>
<string name="clear_queue_confirmation_title">Xaqiijinta tirtirka hormada</string>
<string name="seek_duration_title">Wakhtiga horay udhaafinta/dibucelinta</string>
<string name="black_theme_title">Mugdi</string>
@ -506,17 +506,17 @@
<string name="autoplay_summary">Daaridda si iskeed ah u bilow — %s</string>
<string name="feed_subscription_not_loaded_count">Lama soo kicinin: %d</string>
<string name="download_already_pending">Waxaa jirta dajin hormada ku jirta oo magacan leh</string>
<string name="max_retry_desc">Tirada dib iskugu dayida sixida soodajinta intaan la iska daynin dajinta</string>
<string name="max_retry_desc">Tirada dib iskugu dayida sixida dajinta intaan la iska daynin</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d ayaa la calaamadiyay</item>
<item quantity="other">%d ayaa la calaamadiyay</item>
</plurals>
<string name="enqueue">Hormada gali</string>
<string name="recent">Ugu Dambeeyay</string>
<string name="settings_category_feed_title">Bandhiga</string>
<string name="settings_category_feed_title">Bandhigga</string>
<string name="error_http_no_content">Martigaliyahu wax masoo dirin</string>
<string name="label_code">Tirsi</string>
<string name="post_processing">Habaynaya</string>
<string name="post_processing">habaynaya</string>
<string name="list">Si taxan</string>
<string name="playback_tempo">Teembada</string>
<string name="enqueue_stream">Hormo gali</string>
@ -530,7 +530,7 @@
<string name="content_not_supported">Shaygan wali NewPipe ma taageerin.
\n
\nMustaqbalka in la taageero ayaa la rajaynayaa.</string>
<string name="feed_use_dedicated_fetch_method_help_text">Sookicinta bandhigu aad miyuu u daahayaa\? Haday saas tahay, iskuday furashada qaabka dagdaga ah (waxaad ka badali kartaa xaga fadhiga ama adoo riixaya batoonka hoose).
<string name="feed_use_dedicated_fetch_method_help_text">Soo kicinta bandhiggu aad miyuu u daahayaa\? Haday saas tahay, iskuday furashada qaabka dagdaga ah (waxaad ka baddali kartaa xaga fadhiga ama adoo riixaya batoonka hoose).
\n
\nNewPipe wuxuu leeyahay laba qaab oo uu bandhiga usoo furo:
\n• Soo kicinta dhamaan rukunka kanaalka, taasoo ah mid culus laakiin dhamaystiran.
@ -546,15 +546,15 @@
<string name="feed_use_dedicated_fetch_method_summary">Laga heli karo adeegyada qaar, inta badana wuu ka dagdag badanyahay laakiin wuu ka natiijooyin yar yahay inta badana xogtu ma dhamaystirna (tusaale intuu shaygu soconayo ma tusayo, nooca shayga sidoo kale, mana sheegayo inuu muuqaalku toos yahay)</string>
<string name="feed_use_dedicated_fetch_method_title">Qaabka dagdaga ah</string>
<string name="feed_update_threshold_option_always_update">Marwalba cusboonaysii</string>
<string name="feed_update_threshold_summary">Wakhtiga cusboonaysiinta udambaysa ee bandhiga, ka hor intaan rukunka laga sooqaadin mid duug ah — %s</string>
<string name="feed_update_threshold_summary">Wakhtiga cusboonaysiinta udambaysa ee bandhigga, ka hor intaan rukunka laga sooqaadin mid duug ah — %s</string>
<string name="feed_update_threshold_title">Xadka cusboonaysiinta</string>
<string name="feed_group_show_only_ungrouped_subscriptions">Rukumada aan kooxaysnayn kaliya</string>
<string name="feed_group_show_only_ungrouped_subscriptions">Rukummada aan kooxaysnayn kaliya</string>
<string name="feed_group_dialog_delete_message">Ma rabtaa inaad kooxdan saarto\?</string>
<string name="feed_group_dialog_empty_name">Magac kooxeed madhan</string>
<string name="feed_group_dialog_empty_selection">Wax rukun ah lama dooran</string>
<string name="feed_group_dialog_select_subscriptions">Dooro rukumada</string>
<string name="feed_processing_message">Habaynaya bandhiga…</string>
<string name="feed_notification_loading">Sookicinaya bandhiga…</string>
<string name="feed_group_dialog_select_subscriptions">Dooro rukummada</string>
<string name="feed_processing_message">Habaynaya bandhigga…</string>
<string name="feed_notification_loading">Soo kicinaya bandhigga…</string>
<string name="feed_oldest_subscription_update">La cusboonaysiiyay: %s</string>
<string name="feed_groups_header_title">Kooxaha kanaalka</string>
<plurals name="days">
@ -579,19 +579,19 @@
\nMa hubtaa\? Arrinkan dib looma soocelin karo!</string>
<string name="remove_watched_popup_title">Saar muuqaalada la daawaday\?</string>
<string name="remove_watched">Saar kuwa la daawaday</string>
<string name="systems_language">Aaladu say tahay</string>
<string name="app_language_title">Luuqada App-ka</string>
<string name="systems_language">Aaladu saytahay</string>
<string name="app_language_title">Luuqada Appka</string>
<string name="choose_instance_prompt">Dooro qayb</string>
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' loosoo gaabiyo SAF wuxuu suurto galiyaa in mimoriga wax lagu dajiyo</string>
<string name="downloads_storage_use_saf_title">Maamulaha faylasha ee aallada (SAF)</string>
<string name="downloads_storage_ask_summary">Shay walba meesha lagu kaydin doono ayaa lagu waydiin.
\nSoo fur maamulaha faylasha aallada (SAF) hadaad rabto inaad ku dajiso mimoriga</string>
<string name="downloads_storage_ask_title">Waydii meesha lagu dajinayo</string>
<string name="pause_downloads">Qabo soodajimaha</string>
<string name="start_downloads">Bilow dajinta</string>
<string name="pause_downloads">Wada qabo dajinta</string>
<string name="start_downloads">Wada bilow dajinta</string>
<string name="enable_queue_limit_desc">Hal soodajin ayaa markiiba socon</string>
<string name="enable_queue_limit">Xadid hormada dajinta</string>
<string name="pause_downloads_on_mobile_desc">Tani waxay muhiim tahay marka khadka la isticmaalayo midka SIM-ka loo badalo ayadoo la qabanayo dajinta socota inkastooo soodajimaha qaar aan lajoojin karin</string>
<string name="pause_downloads_on_mobile_desc">Tani waxay muhiim tahay marka khadka la isticmaalayo midka SIM-ka loo baddalo ayadoo la qabanayo dajinta socota inkastooo soodajimaha qaar aan lajoojin karin</string>
<string name="pause_downloads_on_mobile">Dhabqinta dajinta (khadka xadidan)</string>
<string name="max_retry_msg">Xadka dib-isugudayida</string>
<string name="deleted_downloads">Waxaa la saaray %1$d shay</string>
@ -609,23 +609,23 @@
<string name="error_connect_host">Kuma xidhi karo martigaliyaha</string>
<string name="error_unknown_host">Lama heli karo martigaliyaha</string>
<string name="error_ssl_exception">Lama samayn karo iskuxidh amni ah</string>
<string name="error_permission_denied">Ogolaanshihii waxaa diiday aalada</string>
<string name="error_permission_denied">Ogolaanshihii waxaa diiday aallada</string>
<string name="error_path_creation">khaanadii la rabay lama samayn karo</string>
<string name="error_file_creation">Faylka lama samayn karo</string>
<string name="show_error">Tus khaladka</string>
<string name="download_already_running">Waxaa jirta dajin socota oo magacan leh</string>
<string name="overwrite_failed">Faylka laguma badali karo</string>
<string name="overwrite_failed">Faylka laguma baddali karo</string>
<string name="overwrite_finished_warning">Shay horay loo soo dajiyay oo magacan leh ayaa jira</string>
<string name="minimize_on_exit_popup_description">U gudbi xaga daaqada</string>
<string name="minimize_on_exit_background_description">U gudbi xaga dambe</string>
<string name="minimize_on_exit_summary">Waxa la samayn doono marka app kale loo gudbayo ayadoo muuqaal caadi u daaran yahay — %s</string>
<string name="updates_setting_description">Ogaysiis soo bandhig doonaya inaad app-ka cusboonaysiiso marka mid cusub soo baxo</string>
<string name="updates_setting_description">Ogaysiis soo bandhig doonaya inaad appka cusboonaysiiso marka mid cusub soo baxo</string>
<string name="limit_mobile_data_usage_title">Xadid tayada (khadka SIM-ka)</string>
<string name="accept">Aqbal</string>
<string name="start_accept_privacy_policy">Si loogu hogaansamo Maaraynta Xog Dhawrka Guud ee heer Yurub (GDPR), waxaan halkan kugu xusuusinaynaa siyaasada sirdhawrka NewPipe. Fadlan si taxadar leh u akhriso.
\nWaana inaad aqbashaa si [hadii aad damacdo] aad cilad app-ka ah warcelin nooga soo dirto.</string>
\nWaana inaad aqbashaa si [hadii aad damacdo] aad cilad appka ah warcelin nooga soo dirto.</string>
<string name="playback_pitch">Dheelitirka codka</string>
<string name="unhook_checkbox">Ka fur (sababi kara isbadal)</string>
<string name="unhook_checkbox">Ka fur (sababi kara isdbadal)</string>
<string name="import_network_expensive_warning">Hawlgalkan wuxuu noqon karaa mid khad badan isticmaala.
\n
\nMa rabtaa inaad sii wado\?</string>
@ -638,10 +638,10 @@
<string name="import_youtube_instructions">Soo gali rukumada YouTube-ka:
\n
\n1. Booqo tixraacan: %1$s
\n2. Gali akoonkaaga marka lagu waydiiyo
\n3. Kusii dhufo \"Xogtoo dhan kudar\", kadibna \"Ha calaamdin dhamaan\" kadibna dooro kaliya \"Rukunka\" oo \"OK\" dheh
\n2. Gali akoonkaaga marka lagu waydiiyo
\n3. Kusii dhufo \"Xogtoo dhan ku dar\", kadibna \"Ha calaamdin dhamaan\" kadibna dooro kaliya \"Rukunka\" oo \"OK\" dheh
\n4. Ku dhufo \"Talaabada xigta\" kadibna \"Samee gudbin\"
\n5. Ku dhufo batoonka \"Daji\" kadib markuu soo muuqdo
\n5. Ku dhufo batoonka \"Daji\" kadib markuu soo muuqdo
\n6. Zip-ka lasoo dajiyay kala furfur faylka .jason (badanaa wuxuu hoos tagaa \" \"YouTube and YouTube Music/subscriptions/subscriptions.json\") kadibna xagan soo gali.</string>
<string name="caption_setting_title">Qoraal-hooseed</string>
<string name="caption_auto_generated">isa-sameeyay</string>
@ -665,14 +665,14 @@
<string name="private_content">Shaygan waa khaas, sidaa darteed NewPipe laguma daawan karo lagumana dajin karo.</string>
<string name="soundcloud_go_plus_content">Shaygan waa SoundCloud Go+, ama ugu yaraan wadankaaga ayuu ka yahay, sidaa darteed NewPipe laguma daawan/dagsan karo.</string>
<string name="georestricted_content">Shaygan wadanka aad joogto looma heli karo.</string>
<string name="crash_the_app">Khalkhali app-ka</string>
<string name="crash_the_app">Khalkhali appka</string>
<string name="recaptcha_solve">Xalli</string>
<string name="restricted_video_no_stream">Muuqaalkan da\'da qofka ayuu ku xidhan yahay.
\nAyadooy ugu wacantahay talaabooyin cusub oo YouTube uu ku qaaday muuqaalada da\'da ku xidhan, NewPipe ma furi karo muuqaalkan.</string>
<string name="download_has_started">Dajintii way bilaabatay</string>
<string name="select_night_theme_toast">Hoos ayaad ka dooran kartaa nashqada habaynkii ee aad door-biday</string>
<string name="night_theme_summary">Dooro nashqada habaynkii ee aad doorbiday — %s</string>
<string name="auto_device_theme_title">ismaamulaya (raacaya aalada)</string>
<string name="auto_device_theme_title">ismaamulaya (raacaya aallada)</string>
<string name="night_theme_title">Nashqada Habaynka</string>
<string name="show_channel_details">Faahfaahinta kanaalka</string>
<string name="off">Xidhan</string>
@ -697,12 +697,12 @@
<string name="description_select_note">Hadda waad dooran kartaa qoraalka ku dhexjira faahfaahinta. Ogow markaad caalamdinayso qoraalka boggu wuu boodboodi karaa tixraacyadana waxay noqon karaan kuwo aan lagu dhufan karin.</string>
<string name="service_provides_reason">%s wuxuu sheegayaa sababtan:</string>
<string name="account_terminated">Akoonka waa lajoojiyay</string>
<string name="feed_toggle_show_played_items">Tus kuwa ladaaray</string>
<string name="feed_toggle_show_played_items">Tus kuwa ladaawaday</string>
<string name="feed_load_error_fast_unknown">Nidaamka dagdaga ah faahfaahin dheeraad ah uma hayo shaygan.</string>
<string name="feed_load_error_terminated">Akoonka soosaaraha waa la joojiyay.
\nNewPipe ma awoodi doono inuu sookiciyo bandhigan mustaqbalka.
\nNewPipe ma awoodi doono inuu soo kiciyo bandhiggan mustaqbalka.
\nMa iska joojin rabtaa rukunka kanaalkan\?</string>
<string name="feed_load_error_account_info">Lama sookicin karo bandhiga: \'%s\'.</string>
<string name="feed_load_error_account_info">Lama soo kicin karo bandhigga: \'%s\'.</string>
<string name="feed_load_error">Khalad ayaa ka dhacay sookicintii</string>
<string name="downloads_storage_use_saf_summary_api_29">Laga bilaabo Android 10 kaliya waxaa la isticmaali \'SAF\'</string>
<string name="downloads_storage_use_saf_summary_api_19">\'SAF\' kuma shaqeeyo Android KitKat iyo wixii ka hooseeya</string>
@ -711,4 +711,11 @@
<string name="disable_media_tunneling_title">Xidh kala-leexinta</string>
<string name="no_dir_yet">Wali lama fadhiisin khaanadii dajinta, dooro khaanada wax lagu dajin doono hadda</string>
<string name="use_inexact_seek_summary">Dhaaf-dhaafinta dagdaga ah ee waxa daaran, si buuxda oo sax ah wax uma dhaafiso balse waxay u sahashaa muuqaal daareha inuu u dhaaf dhaafiyo si dagdag ah. Nidaamkan 5, 15 ama 25 ilbiriqsi wax looma dhaafin karo</string>
<string name="dont_show">Hatusin</string>
<string name="low_quality_smaller">Tayo hoose (ka yar)</string>
<string name="high_quality_larger">Tayo sare (ka wayn)</string>
<string name="seekbar_preview_thumbnail_title">Tusmada dhaafdhaafinta</string>
<string name="comments_are_disabled">Fallooyinka waa laxidhay</string>
<string name="detail_heart_img_view_description">Kahelay soosaaraha</string>
<string name="mark_as_watched">Ucalaamadi in ladaawaday</string>
</resources>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_bg_subtitle">Shtyp \"Kërko\" për të filluar</string>
<string name="main_bg_subtitle">Shtyp mbi lupën zmadhuese për të filluar.</string>
<string name="view_count_text">%1$s shikime</string>
<string name="upload_date_text">Publikuar më %1$s</string>
<string name="install">Instalo</string>
@ -71,10 +71,10 @@
<string name="systems_language">E parazgjedhura e sistemit</string>
<string name="app_language_title">Gjuha e aplikacionit</string>
<string name="choose_instance_prompt">Zgjidhni një instancë</string>
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' lejon shkarkime në një kartë SD të jashtme.
\nDisa pajisje janë të papajtueshme</string>
<string name="downloads_storage_use_saf_title">Përdor SAF</string>
<string name="downloads_storage_ask_summary">Ju do të pyeteni se ku duhet ruajtur çdo shkarkim</string>
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' lejon shkarkime në një kartë SD të jashtme</string>
<string name="downloads_storage_use_saf_title">Përdor zgjedhësin e direktorisë së sistemit (SAF)</string>
<string name="downloads_storage_ask_summary">Ju do të pyeteni se ku duhet ruajtur çdo shkarkim
\nAktivizoni zgjedhësin e direktorisë së sistemit (SAF) nëse doni t\'i shkarkoni në një kartë SD të jashtme</string>
<string name="downloads_storage_ask_title">Pyet se ku duhet shkarkuar</string>
<string name="pause_downloads">Ndërprit shkarkimet</string>
<string name="start_downloads">Nis shkarkimet</string>
@ -161,11 +161,14 @@
\n2. Shkoni tek kjo URL: %1$s
\n3. Hyni kur t\'ju kërkohet
\n4. Kopjoni URL e profilit drejt të cilit u ridrejtuat.</string>
<string name="import_youtube_instructions">Importoni abonimet nga YouTube duke shkarkuar skedarin e importuar:
\n
\n1. Shkoni tek kjo URL: %1$s
\n2. Hyni kur t\'ju kërkohet
\n3. Një shkarkim duhet të nisë (ky është skedari i eksportuar)</string>
<string name="import_youtube_instructions">Importoni abonimet nga YouTube përmes Google Takeout:
\n
\n1. Shkoni tek kjo URL: %1$s
\n2. Hyni kur t\'ju kërkohet
\n3. Klikoni në \"All data included\", më pas në \"Deselect all\", dhe më pas zgjidhni vetëm \"subscriptions\" dhe klikoni \"OK\"
\n4. Klikoni në \"Next step\" dhe më pas në \"Create export\"
\n5. Klikoni në butonin \"Download\" pasi të shfaqet dhe
\n6. Nga skedari zip i shkarkuar, ekstraktoni skedarin .json (zakonisht ndodhet tek \"YouTube and YouTube Music/subscriptions/subscriptions.json\") dhe importojeni atë këtu.</string>
<string name="subscriptions_export_unsuccessful">Nuk arritën të eksportohen abonimet</string>
<string name="subscriptions_import_unsuccessful">Nuk arritën të importohen abonimet</string>
<string name="previous_export">Eksportimi i kaluar</string>
@ -178,7 +181,7 @@
<string name="import_export_title">Importo/eksporto</string>
<string name="enable_disposed_exceptions_title">Raporto gabimet e jashtë-ciklit-të-jetës</string>
<string name="enable_leak_canary_summary">Monitorimi i rrjedhjeve të memorjes mund të bëjë aplikacionin të mos reagojë kur bëhet zbrazja e memorjes heap</string>
<string name="caption_setting_description">Modifikoni shkallën e tekstit të titrave dhe llojet e sfondeve të luajtësit. Kërkon një rinisje të aplikacionit që të aplikohen ndryshimet.</string>
<string name="caption_setting_description">Modifikoni shkallën e tekstit të titrave dhe llojet e sfondeve të luajtësit. Kërkon një rinisje të aplikacionit që të aplikohen ndryshimet</string>
<string name="caption_setting_title">Titrat</string>
<string name="caption_auto_generated">E gjeneruar automatikisht</string>
<string name="resize_zoom">Afroje</string>
@ -193,10 +196,10 @@
<string name="delete_playlist_prompt">Të fshihet kjo listë luajtjeje\?</string>
<string name="unbookmark_playlist">Hiq Shenjuesin</string>
<string name="bookmark_playlist">Shenjoje Listën e Luajtjes</string>
<string name="set_as_playlist_thumbnail">Vendose si Pamjen Statike të Listës së Luajtjes</string>
<string name="set_as_playlist_thumbnail">Vendose si pamjen statike të listës së luajtjes</string>
<string name="unmute">Me zë</string>
<string name="mute">Pa zë</string>
<string name="append_playlist">Shto në Listën e Luajtjes</string>
<string name="append_playlist">Shto në listën e luajtjes</string>
<string name="name">Emri</string>
<string name="rename_playlist">Riemërto</string>
<string name="delete_playlist">Fshij</string>
@ -227,7 +230,7 @@
<string name="top_50">Top 50</string>
<string name="trending">E trendit</string>
<string name="kiosk">Kioskë</string>
<string name="localization_changes_requires_app_restart">Gjuha do të ndryshojë sapo aplikacioni të riniset.</string>
<string name="localization_changes_requires_app_restart">Gjuha do të ndryshojë sapo aplikacioni të riniset</string>
<string name="error_unable_to_load_comments">Nuk mundën të ngarkohen komentet</string>
<string name="import_settings">A dëshironi që të importoni dhe aranzhimet gjithashtu\?</string>
<string name="override_current_data">Kjo do të mbishkruajë strukturimin tuaj të tanishëm.</string>
@ -416,7 +419,7 @@
<item quantity="other">%s dëgjues</item>
</plurals>
<plurals name="watching">
<item quantity="one">%s duke parë</item>
<item quantity="one">%s duke e parë</item>
<item quantity="other">%s duke parë</item>
</plurals>
<string name="settings_category_popup_title">Popup</string>
@ -440,7 +443,7 @@
\nShpresojmë se do të mbështetet në një version të ardhshëm.</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Çaktivizo</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Aktivizo modalitetin e shpejtë</string>
<string name="feed_use_dedicated_fetch_method_summary">E disponueshme në disa shërbime, zakonisht është shumë më e shpejtë por mund të kthejë një numër të limituar objektesh dhe shpesh informacion të paplotë (psh. pa kohëzgjatje, lloj objekti, status në kohë reale).</string>
<string name="feed_use_dedicated_fetch_method_summary">E disponueshme në disa shërbime, zakonisht është shumë më e shpejtë por mund të kthejë një numër të limituar objektesh dhe shpesh informacion të paplotë (psh. pa kohëzgjatje, lloj objekti, status në kohë reale)</string>
<string name="feed_use_dedicated_fetch_method_title">Merr nga një listë e dedikuar kur është e mundur</string>
<string name="feed_update_threshold_option_always_update">Përditëso gjithnjë</string>
<string name="feed_update_threshold_summary">Koha pas një përditësimi të fundit para se një abonim të konsiderohet i vjetëruar — %s</string>
@ -470,20 +473,20 @@
<string name="download_to_sdcard_error_title">Magazina e jashtme u padisponueshme</string>
<string name="general_error">Gabim</string>
<string name="help">Ndihmë</string>
<string name="search_history_deleted">Historiku i kërkimeve u fshi.</string>
<string name="search_history_deleted">Historiku i kërkimeve u fshi</string>
<string name="delete_search_history_alert">Doni të fshini të gjithë historikun e kërkimeve\?</string>
<string name="clear_search_history_summary">Fshin historikun e fjalëve kyçe të kërkuara</string>
<string name="clear_search_history_title">Fshini historikun e kërkimeve</string>
<string name="watch_history_states_deleted">Pozicionet e luajtjeve u fshinë.</string>
<string name="watch_history_states_deleted">Pozicionet e luajtjeve u fshinë</string>
<string name="delete_playback_states_alert">Doni të fshini të gjitha pozicionet e luajtjeve\?</string>
<string name="clear_playback_states_summary">Fshini të gjitha pozicionet e luajtjeve</string>
<string name="clear_playback_states_title">Fshini pozicionin e luajtjes</string>
<string name="watch_history_deleted">Historiku i videove të luajtura u fshi.</string>
<string name="watch_history_deleted">Historiku i videove të luajtura u fshi</string>
<string name="delete_view_history_alert">Doni të fshini të gjithë historikun e videove të luajtura\?</string>
<string name="clear_views_history_summary">Fshin historikun e stream-ave të luajtura dhe pozicioneve të luajtjes</string>
<string name="clear_views_history_title">Pastro historinë e videove të luajtura</string>
<string name="export_data_summary">Eksporto historikun, abonimet dhe listat e videove</string>
<string name="import_data_summary">Mbishkruan historinë dhe abonimet tuaja të tanishme</string>
<string name="export_data_summary">Eksporto historikun, abonimet, listat e luajtjes dhe mundësimet</string>
<string name="import_data_summary">Mbishkruan historinë, abonimet tuaja të tanishme, listat e luajtjes dhe mundësimet (opsionale)</string>
<string name="export_data_title">Eksporto databazën</string>
<string name="import_data_title">Importo databazën</string>
<string name="switch_to_main">Kaloje në Qendrore</string>
@ -560,12 +563,12 @@
<string name="metadata_cache_wipe_complete_notice">Depoja e të dhënave meta u boshatis</string>
<string name="metadata_cache_wipe_summary">Boshatis depon e të gjitha të dhënave të faqeve të internetit</string>
<string name="metadata_cache_wipe_title">Boshatis depon e të dhënave meta</string>
<string name="download_thumbnail_summary">Fikeni për të ndaluar shfaqjen e pamjeve statike, duke kursyer internet dhe memorje. Ndryshimet boshatisin depon e imazheve në memorje dhe në disk.</string>
<string name="download_thumbnail_summary">Fikeni për të ndaluar shfaqjen e pamjeve statike, duke kursyer internet dhe memorje. Ndryshimet boshatisin depon e imazheve në memorje dhe në disk</string>
<string name="thumbnail_cache_wipe_complete_notice">Depoja e imazheve u boshatis</string>
<string name="show_comments_summary">Fikeni për të fshehur komentet</string>
<string name="show_comments_title">Shfaq komentet</string>
<string name="seek_duration_title">Kohëzgjatja e kërkimit me shtytje-përpara/-pas</string>
<string name="use_inexact_seek_summary">Kërkuesi i pasaktë e lejon luajtësin që të kërkojë pozicionet më shpejt më saktësi të reduktuar. Kërkimi për 5, 15 ose 25 sekonda nuk punon me këtë.</string>
<string name="use_inexact_seek_summary">Kërkuesi i pasaktë e lejon luajtësin që të kërkojë pozicionet më shpejt më saktësi të reduktuar. Kërkimi për 5, 15 ose 25 sekonda nuk punon me këtë</string>
<string name="use_inexact_seek_title">Përdor kërkuesin e pasaktë por të shpejtë</string>
<string name="popup_remember_size_pos_summary">Mbaj mend madhësinë e fundit dhe pozicionin e popup</string>
<string name="popup_remember_size_pos_title">Mbaj mend popup</string>
@ -608,7 +611,7 @@
<string name="copy_for_github">Kopjo raportin e formatuar</string>
<string name="search_showing_result_for">Duke shfaqur rezultatet për: %s</string>
<string name="wifi_only">Vetëm në Wi-Fi</string>
<string name="notification_actions_summary">Redakto çdo veprim njoftimi më poshtë duke shtypur mbi të. Zgjidhni deri në tre prej tyre që të shfaqen në njoftimin kompakt duke përdorur kutitë në të djathtë.</string>
<string name="notification_actions_summary">Redakto çdo veprim njoftimi më poshtë duke shtypur mbi të. Zgjidhni deri në tre prej tyre që të shfaqen në njoftimin kompakt duke përdorur kutitë në të djathtë</string>
<string name="never">Kurrë</string>
<string name="autoplay_summary">Nise luajtjen automatikisht — %s</string>
<string name="title_activity_play_queue">Lista e luajtjes</string>
@ -649,4 +652,70 @@
<string name="show_description_title">Shfaq përshkrimin</string>
<string name="notification_colorize_summary">Lejoje Android që të modifikojë ngjyrën e njoftimit bazuar tek ngjyra kryesore në pamjen miniaturë (mbani mend që kjo nuk është e disponueshme në të gjitha pajisjet)</string>
<string name="open_with">Hape me</string>
<string name="clear_cookie_summary">Pastroni biskotat që NewPipe ruan kur zgjidhni një reCAPTCHA</string>
<string name="youtube_restricted_mode_enabled_summary">YouTube ofron një \"Modalitet të Kufizuar\" që fsheh përmbajtje vetëm për të rritur</string>
<string name="show_age_restricted_content_summary">Shfaq përmbajtje ndoshta të papërshtatshme për fëmijë sepse ka një kufi moshe (si 18+)</string>
<string name="featured">E përzgjedhur</string>
<string name="paid_content">Kjo përmbajtje është e disponueshme vetëm për përdoruesit që kanë paguar, kështu që nuk mund të luhet apo shkarkohet nga NewPipe.</string>
<string name="youtube_music_premium_content">Kjo video është e disponueshme vetëm për anëtarët e YouTube Music Premium, kështu që nuk mund të luhet apo shkarkohet nga NewPipe.</string>
<string name="soundcloud_go_plus_content">Ky është një skedar SoundCloud Go+, të paktën në shtetin tuaj, kështu që nuk mund të luhet apo shkarkohet nga NewPipe.</string>
<string name="show_meta_info_summary">Fikeni për të fshehur kutitë e të dhënave meta me information ekstra rreth krijuesit të stream, përmbajtjen e stream dhe kërkimit</string>
<string name="off">Fikur</string>
<string name="on">Ndezur</string>
<string name="tablet_mode_title">Modaliteti tablet</string>
<string name="open_website_license">Hap faqen e internetit</string>
<string name="metadata_privacy_internal">E brendshme</string>
<string name="metadata_privacy_private">Private</string>
<string name="metadata_privacy_unlisted">E palistuar</string>
<string name="metadata_privacy_public">Publike</string>
<string name="metadata_thumbnail_url">URL e pamjes statike</string>
<string name="metadata_host">Mundësuesi</string>
<string name="metadata_support">Mbështetje</string>
<string name="metadata_language">Gjuha</string>
<string name="metadata_age_limit">Limiti i moshës</string>
<string name="metadata_privacy">Privatësia</string>
<string name="metadata_licence">Licensa</string>
<string name="metadata_tags">Etiketat</string>
<string name="metadata_category">Kategoria</string>
<string name="description_select_disable">Ç\'aktivizo selektimin e tekstit në përshkrim</string>
<string name="description_select_enable">Aktivizo selektimin e tekstit në përshkrim</string>
<string name="description_select_note">Ju tani mund të selektoni tekst brenda përshkrimit. Faqja mund të dridhet dhe ndërlidhjet mund të mos jenë të klikueshme në modalitetin e selektimit.</string>
<string name="download_has_started">Shkarkimi ka filluar</string>
<string name="select_night_theme_toast">Ju mund të zgjidhni temën tuaj të preferuar të natës më poshtë</string>
<string name="night_theme_summary">Zgjidhni temën tuaj të preferuar të natës - %s</string>
<string name="auto_device_theme_title">Automatike (tema e pajisjes)</string>
<string name="radio">Radio</string>
<string name="service_provides_reason">%s e jep këtë arsye:</string>
<string name="account_terminated">Llogaria është mbyllur</string>
<string name="private_content">Kjo përmbajtje është private, kështu që nuk mund të luhet apo shkarkohet nga NewPipe.</string>
<string name="georestricted_content">Kjo përmbajtje nuk është e disponueshme në shtetin tuaj.</string>
<string name="show_thumbnail_summary">Përdor pamje statike për sfondin e ekranit të kyçur si dhe për njoftimet</string>
<string name="feed_toggle_show_played_items">Shfaq objektet e para</string>
<string name="feed_load_error_fast_unknown">Modaliteti i feed-it të shpejtë nuk mundëson më tepër informacion mbi këtë.</string>
<string name="feed_load_error_terminated">Llogaria e autorit është bllokuar.
\nNewPipe nuk do mund ta ngarkojë këtë feed në të ardhmen.
\nA doni të ç\'abonoheni nga ky kanal\?</string>
<string name="feed_load_error_account_info">Nuk u arrit të ngarkohej feed-i për \'%s\'.</string>
<string name="feed_load_error">Gabim gjatë ngarkimit të feed-it</string>
<string name="downloads_storage_use_saf_summary_api_29">Duke nisur nga Android 10 vetëm \'Storage Access Framework\' është i mbështetur</string>
<string name="downloads_storage_use_saf_summary_api_19">\'Storage Access Framework\' nuk është e mbështetur në Android KitKat dhe më poshtë</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Ju do të pyeteni se ku doni të ruani çdo shkarkim</string>
<string name="crash_the_app">Rrëzoje aplikacionin manualisht</string>
<string name="disable_media_tunneling_summary">Ç\'aktivizo tunelin e medias nëse po hasni një ekran të zi apo ngecje gjatë luajtjes së një videoje</string>
<string name="disable_media_tunneling_title">Ç\'aktivizo tunelin e medias</string>
<string name="enqueued">E futur në radhë</string>
<string name="enqueue_stream">Fute në radhë</string>
<string name="show_channel_details">Shfaq detajet e kanalit</string>
<string name="recaptcha_solve">Zgjidh</string>
<string name="no_dir_yet">Nuk ka ende një skedar të zgjedhur të shkarkimeve, zgjidheni skedarin e paravendosur tani</string>
<string name="restricted_video_no_stream">Kjo video është e kufizuar në moshë.
\nPër shkak të politikave të reja të YouTube në lidhje me videot e kufizuara në moshë, NewPipe nuk mund të aksesojë asnjë nga videot dhe nuk mund t\'i luajë ato.</string>
<string name="night_theme_title">Tema e natës</string>
<string name="detail_heart_img_view_description">E pëlqyer nga krijuesi</string>
<string name="dont_show">Mos shfaq</string>
<string name="low_quality_smaller">Cilësi e ulët (më e vogël)</string>
<string name="high_quality_larger">Cilësi e lartë (më e madhe)</string>
<string name="seekbar_preview_thumbnail_title">Parapamje e pamjes miniaturë të lëvizësit të kohës</string>
<string name="comments_are_disabled">Komentet janë të ç\'aktivizuara</string>
<string name="mark_as_watched">Shëno si të parë</string>
</resources>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_bg_subtitle">Tryck på förstoringsglaset för att komma igång</string>
<string name="main_bg_subtitle">Tryck på förstoringsglaset för att komma igång.</string>
<string name="upload_date_text">Publicerad den %1$s</string>
<string name="no_player_found">Ingen strömspelare hittades. Vill du installera VLC?</string>
<string name="install">Installera</string>
@ -8,7 +8,7 @@
<string name="open_in_browser">Öppna i webbläsare</string>
<string name="open_in_popup_mode">Öppna i popup-läge</string>
<string name="share">Dela</string>
<string name="download">Ladda ner</string>
<string name="download">Hämta</string>
<string name="search">Sök</string>
<string name="settings">Inställningar</string>
<string name="did_you_mean">Menade du: %1$s\?</string>
@ -21,12 +21,12 @@
<string name="popup_mode_share_menu_title">Popup-läge</string>
<string name="controls_background_title">Bakgrund</string>
<string name="controls_popup_title">Extrafönster</string>
<string name="download_path_title">Mapp för nerladdning av video</string>
<string name="download_path_summary">Nedladdade videofiler lagras här</string>
<string name="download_path_dialog_title">Välj nedladdningsmappen för videofiler</string>
<string name="download_path_audio_title">Sökväg för nerladdning av ljud</string>
<string name="download_path_audio_summary">Nedladdade ljudfiler lagras här</string>
<string name="download_path_audio_dialog_title">Välj nedladdningsmapp för ljudfiler</string>
<string name="download_path_title">Mapp för hämtning av video</string>
<string name="download_path_summary">Hämtade videofiler lagras här</string>
<string name="download_path_dialog_title">Välj hämtningsmappen för videofiler</string>
<string name="download_path_audio_title">Mapp för hämtning av ljud</string>
<string name="download_path_audio_summary">Hämtade ljudfiler lagras här</string>
<string name="download_path_audio_dialog_title">Välj hämtningsmapp för ljudfiler</string>
<string name="autoplay_by_calling_app_summary">Spelar automatiskt upp videon när NewPipe öppnas av en annan app</string>
<string name="default_resolution_title">Standardupplösning</string>
<string name="default_popup_resolution_title">Standardupplösning för popup</string>
@ -49,21 +49,21 @@
<string name="player_gesture_controls_summary">Använd gester för att kontrollera spelarens ljusstyrka och volym</string>
<string name="show_search_suggestions_title">Sökförslag</string>
<string name="show_search_suggestions_summary">Visa förslag i samband med sökning</string>
<string name="download_dialog_title">Ladda ned</string>
<string name="download_dialog_title">Hämta</string>
<string name="show_next_and_similar_title">Visa \'Nästa\' och \'Liknande\' videor</string>
<string name="unsupported_url">Webbadressen stöds inte</string>
<string name="content_language_title">Standard innehållsspråk</string>
<string name="settings_category_video_audio_title">Video &amp; Ljud</string>
<string name="settings_category_video_audio_title">Video och ljud</string>
<string name="settings_category_popup_title">Popup-ruta</string>
<string name="settings_category_appearance_title">Utseende</string>
<string name="settings_category_other_title">Andra</string>
<string name="background_player_playing_toast">Spelar upp i bakgrunden</string>
<string name="popup_playing_toast">Spelar upp i popup-läge</string>
<string name="content">Innehåll</string>
<string name="show_age_restricted_content_title">Åldersbegränsat innehåll</string>
<string name="show_age_restricted_content_title">Visa åldersbegränsat innehåll</string>
<string name="duration_live">Live</string>
<string name="downloads">Nedladdningar</string>
<string name="downloads_title">Nedladdningar</string>
<string name="downloads">Hämtningar</string>
<string name="downloads_title">Hämtningar</string>
<string name="error_report_title">Felrapport</string>
<string name="all">Alla</string>
<string name="channel">Kanal</string>
@ -76,16 +76,16 @@
<string name="best_resolution">Bästa upplösningen</string>
<string name="general_error">Fel</string>
<string name="network_error">Nätverksfel</string>
<string name="could_not_load_thumbnails">Kunde inte ladda alla miniatyrbilder</string>
<string name="could_not_load_thumbnails">Det gick inte att läsa in alla miniatyrbilder</string>
<string name="parsing_error">Det gick inte att analysera webbplatsen</string>
<string name="light_parsing_error">Det gick inte att analysera webbplatsen helt</string>
<string name="content_not_available">Innehållet är inte tillgängligt</string>
<string name="could_not_setup_download_menu">Kunde inte ställa in nedladdningsmenyn</string>
<string name="could_not_setup_download_menu">Det gick inte att ställa in hämtningsmenyn</string>
<string name="live_streams_not_supported">Direktsändningar stöds inte än</string>
<string name="could_not_load_image">Kunde inte ladda Bild</string>
<string name="could_not_load_image">Det gick inte att läsa in bilden</string>
<string name="app_ui_crash">App/Användargränssnittet kraschade</string>
<string name="sorry_string">Oj, det där skulle inte ha hänt.</string>
<string name="error_snackbar_message">Tyvärr så inträffade det några fel.</string>
<string name="error_snackbar_message">Tyvärr gick någonting fel.</string>
<string name="error_snackbar_action">Rapportera</string>
<string name="what_device_headline">Info:</string>
<string name="what_happened_headline">Vad som skedde:</string>
@ -109,20 +109,20 @@
<string name="enable_search_history_summary">Spara sökfrågor lokalt</string>
<string name="enable_watch_history_title">Visningshistorik</string>
<string name="enable_watch_history_summary">Håll koll på videor som du tittat på</string>
<string name="resume_on_audio_focus_gain_title">Återuppta spelning</string>
<string name="resume_on_audio_focus_gain_summary">Fortsätta spela efter avbrott (t.ex. telefonsamtal)</string>
<string name="show_hold_to_append_title">Visa \"Håll för att lägga till\" tips</string>
<string name="resume_on_audio_focus_gain_title">Återuppta uppspelning</string>
<string name="resume_on_audio_focus_gain_summary">Fortsätt uppspelning efter avbrott (t.ex. telefonsamtal)</string>
<string name="show_hold_to_append_title">Visa \"Håll för att lägga till\"-tips</string>
<string name="show_hold_to_append_summary">Visa tips när bakgrunds- eller popup-knappen trycks på sidan för videodetaljer</string>
<string name="settings_category_player_title">Spelare</string>
<string name="settings_category_player_behavior_title">Beteende</string>
<string name="settings_category_history_title">Historik &amp; cacheminne</string>
<string name="settings_category_history_title">Historik och cacheminne</string>
<string name="background_player_append">Tillagd till bakgrunds-spelar kön</string>
<string name="popup_playing_append">Tillagd till popup-spelar kön</string>
<string name="playlist">Spellista</string>
<string name="undo">Ångra</string>
<string name="play_all">Spela Alla</string>
<string name="notification_channel_name">NewPipe Avisering</string>
<string name="notification_channel_description">Aviseringar för NewPipe bakgrunds och popup-spelare</string>
<string name="play_all">Spela alla</string>
<string name="notification_channel_name">NewPipe-avisering</string>
<string name="notification_channel_description">Aviseringar för NewPipes bakgrunds- och popup-spelare</string>
<string name="unknown_content">[Okänd]</string>
<string name="youtube_signature_deobfuscation_error">Kunde inte dekryptera video URL signatur</string>
<string name="could_not_get_stream">Kunde inte hitta någon ström</string>
@ -133,13 +133,13 @@
<string name="info_labels">Vad:\\nBegäran:\\nInnehållsspråk:\\nInnehållsland:\\nApp-språk:\\nTjänst:\\nGMT-tid:\\nPaket:\\nVersion:\\nOS-version:</string>
<string name="list_thumbnail_view_description">Videons miniatyrbild</string>
<string name="detail_thumbnail_view_description">Spela video, längd:</string>
<string name="detail_uploader_thumbnail_view_description">Uppladdarens avatar miniatyrbild</string>
<string name="use_tor_summary">(Experimentellt) Tvinga nedladdningstrafiken via Tor för ökad integritet (videostreaming stöds inte än).</string>
<string name="detail_uploader_thumbnail_view_description">Uppladdarens avatar-miniatyrbild</string>
<string name="use_tor_summary">(Experimentellt) Tvinga hämtningstrafiken genom Tor för ökad integritet (videoströmning stöds inte ännu).</string>
<string name="user_report">Användarrapport</string>
<string name="search_no_results">Inga resultat</string>
<string name="empty_subscription_feed_subtitle">Här va\' det tomt</string>
<string name="err_dir_create">Kunde inte skapa nedladdnings katalog \'%1$s\'</string>
<string name="info_dir_created">Skapa nedladdnings katalog \'%1$s\'</string>
<string name="err_dir_create">Det gick inte att skapa hämtningsmappen \"%1$s\"</string>
<string name="info_dir_created">Skapa hämtningsmappen \"%1$s\"</string>
<string name="video">Video</string>
<string name="audio">Ljud</string>
<string name="retry">Försök igen</string>
@ -160,7 +160,7 @@
<string name="no_videos">Inga videor</string>
<plurals name="videos">
<item quantity="one">%s video</item>
<item quantity="other">%s videos</item>
<item quantity="other">%s videor</item>
</plurals>
<string name="start">Start</string>
<string name="pause">Pausa</string>
@ -168,23 +168,23 @@
<string name="delete">Ta bort</string>
<string name="checksum">Kontrollsumma</string>
<string name="add">Nytt uppdrag</string>
<string name="finish">Ok</string>
<string name="finish">Okej</string>
<string name="msg_name">Filnamn</string>
<string name="msg_threads">Trådar</string>
<string name="msg_error">Fel</string>
<string name="msg_server_unsupported">Servern stöds inte</string>
<string name="msg_exists">Filen finns redan</string>
<string name="msg_url_malform">Felaktig webbadress eller Internet inte tillgängligt</string>
<string name="msg_running">NewPipe nedladdning</string>
<string name="msg_running">NewPipe-hämtning</string>
<string name="msg_running_detail">Tryck för detaljer</string>
<string name="msg_wait">Vänta…</string>
<string name="msg_copied">Kopierat till urklipp</string>
<string name="no_available_dir">Ange en hämtningsmapp senare i inställningar</string>
<string name="no_available_dir">Ange en hämtningsmapp senare i inställningarna</string>
<string name="msg_popup_permission">Denna tillåtelse behövs för att
\nöppna i popup-läge</string>
<string name="title_activity_recaptcha">reCAPTCHA utmaning</string>
<string name="recaptcha_request_toast">reCAPTCHA utmaning begärd</string>
<string name="settings_category_downloads_title">Nedladdning</string>
<string name="settings_category_downloads_title">Hämta</string>
<string name="settings_file_charset_title">Tillåtna tecken i filnamn</string>
<string name="settings_file_replacement_character_summary">Ogiltiga tecken ersätts med detta värde</string>
<string name="settings_file_replacement_character_title">Ersättningstecknet</string>
@ -195,7 +195,7 @@
<string name="action_about">Om</string>
<string name="title_licenses">Tredjepartslicenser</string>
<string name="copyright" formatted="true">© %1$s av %2$s under %3$s</string>
<string name="error_unable_to_load_license">Kunde inte ladda licens</string>
<string name="error_unable_to_load_license">Det gick inte att läsa in licensen</string>
<string name="action_open_website">Öppna webbplats</string>
<string name="tab_about">Om</string>
<string name="tab_contributors">Medverkande</string>
@ -209,7 +209,7 @@
<string name="title_activity_history">Historik</string>
<string name="title_history_search">Sökt</string>
<string name="title_history_view">Tittade</string>
<string name="history_disabled">Historik är inaktiverat</string>
<string name="history_disabled">Historik är inaktiverad</string>
<string name="action_history">Historik</string>
<string name="history_empty">Historiken är tom</string>
<string name="history_cleared">Historiken har rensats</string>
@ -227,7 +227,7 @@
<string name="kiosk">Kiosk</string>
<string name="trending">Trend</string>
<string name="top_50">Topp 50</string>
<string name="new_and_hot">Aktuellt</string>
<string name="new_and_hot">Nytt och populärt</string>
<string name="play_queue_remove">Ta bort</string>
<string name="play_queue_stream_detail">Detaljer</string>
<string name="play_queue_audio_settings">Ljudinställningar</string>
@ -241,12 +241,12 @@
<string name="website_title">Webbplats</string>
<string name="website_encouragement">För att få mer information och de senaste nyheterna om NewPipe, besök vår webbplats.</string>
<string name="show_info">Visa info</string>
<string name="tab_bookmarks">Bokmärkta Spellistor</string>
<string name="tab_bookmarks">Bokmärkta spellistor</string>
<string name="controls_add_to_playlist_title">Lägg till i</string>
<string name="use_inexact_seek_title">Använd snabb icke-exakt sökning</string>
<string name="download_thumbnail_title">Ladda tumnaglar</string>
<string name="download_thumbnail_summary">Stäng av för att hindra laddning av miniatyrbilder, spara data och minnesanvändning. Förändringar kommer att rensa cache-minnet.</string>
<string name="thumbnail_cache_wipe_complete_notice">Bild cacheminnet rensad</string>
<string name="download_thumbnail_title">Läs in miniatyrbilder</string>
<string name="download_thumbnail_summary">Stäng av för att förhindra att miniatyrbilder läses in, vilket sparar data- och minnesanvändning. Ändringarna rensar både bildcacheminnet i minnet och på disken</string>
<string name="thumbnail_cache_wipe_complete_notice">Cacheminnet för bilder rensat</string>
<string name="service_title">Tjänst</string>
<string name="settings_category_debug_title">Debug</string>
<string name="always">Alltid</string>
@ -255,8 +255,8 @@
<string name="toggle_orientation">Växla orienteringen</string>
<string name="metadata_cache_wipe_title">Rensa metadatan i cacheminnet</string>
<string name="no_player_found_toast">Ingen strömspelare hittades (du kan installera VLC för att spela upp).</string>
<string name="controls_download_desc">Ladda ned sändning</string>
<string name="use_inexact_seek_summary">Inexakt sökning ger möjligheten att sökning snabbare med mindre precision. Att hoppa 5, 15 eller 25 sekunder fungerar inte med detta val.</string>
<string name="controls_download_desc">Hämta strömfil</string>
<string name="use_inexact_seek_summary">Inexakt sökning gör det möjligt att söka snabbare med mindre precision. Att hoppa 5, 15 eller 25 sekunder fungerar inte med detta val</string>
<string name="metadata_cache_wipe_summary">Ta bort alla cachade webbsidor</string>
<string name="metadata_cache_wipe_complete_notice">Metadata cache rensad</string>
<string name="auto_queue_title">Köa nästa ström automatiskt</string>
@ -271,16 +271,16 @@
<string name="switch_to_main">Växla till main</string>
<string name="import_data_title">Importera databas</string>
<string name="export_data_title">Exportera databas</string>
<string name="import_data_summary">Skriver över din nuvarande historik och prenumerationer</string>
<string name="export_data_summary">Exportera historik, prenumerationer och spellistor</string>
<string name="import_data_summary">Skriver över din nuvarande historik, prenumerationer, spellistor och (valbart) inställningar</string>
<string name="export_data_summary">Exportera historik, prenumerationer, spellistor och inställningar</string>
<string name="clear_views_history_title">Rensa visningshistorik</string>
<string name="clear_views_history_summary">Tar bort historiken för spelade videoklipp och uppspelningspositioner</string>
<string name="delete_view_history_alert">Ta bort hela visningshistoriken\?</string>
<string name="watch_history_deleted">Visningshistorik borttagen.</string>
<string name="watch_history_deleted">Visningshistorik borttagen</string>
<string name="clear_search_history_title">Rensa sökhistorik</string>
<string name="clear_search_history_summary">Tar bort historiken för sökta nyckelord</string>
<string name="delete_search_history_alert">Ta bort hela sökhistoriken\?</string>
<string name="search_history_deleted">Sökhistorik borttagen.</string>
<string name="search_history_deleted">Sökhistorik borttagen</string>
<string name="external_player_unsupported_link_type">Externa spelare stöder inte dessa typer av länkar</string>
<string name="invalid_url_toast">Ogiltig URL</string>
<string name="video_streams_empty">Inga videoströmmar hittades</string>
@ -290,7 +290,7 @@
<string name="invalid_file">Filen finns inte eller behörighet att läsa eller skriva till den saknas</string>
<string name="file_name_empty_error">Filnamnet får inte vara tomt</string>
<string name="error_occurred_detail">Ett fel uppstod: %1$s</string>
<string name="no_streams_available_download">Inga strömmar är tillgängliga för nedladdning</string>
<string name="no_streams_available_download">Inga strömmar tillgängliga för hämtning</string>
<string name="detail_drag_description">Dra för att ändra ordning</string>
<string name="create">Skapa</string>
<string name="delete_one">Ta bort en</string>
@ -300,7 +300,8 @@
<string name="one_item_deleted">1 objekt borttaget.</string>
<string name="toast_no_player">Ingen app installerad för att spela upp filen</string>
<string name="privacy_policy_title">NewPipes Sekretesspolicy</string>
<string name="privacy_policy_encouragement">NewPipe projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. NewPipes Sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport.</string>
<string name="privacy_policy_encouragement">NewPipe-projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande.
\nNewPipes sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport.</string>
<string name="read_privacy_policy">Läs sekretesspolicy</string>
<string name="app_license">NewPipe är copyleft fri programvara: Du kan använda, studera, dela och förbättra den som du vill. Specifikt kan du distribuera och/eller modifiera det under villkoren för GNU General Public License som publicerats av Free Software Foundation, antingen version 3 av licensen, eller (om du så önskar) en senare version.</string>
<string name="delete_stream_history_prompt">Vill du ta bort det här föremålet från visningshistoriken?</string>
@ -323,18 +324,18 @@
<string name="popup_player">Popup-spelare</string>
<string name="always_ask_open_action">Fråga alltid</string>
<string name="preferred_player_fetcher_notification_title">Hämtar information…</string>
<string name="preferred_player_fetcher_notification_message">Laddar begärt innehåll</string>
<string name="preferred_player_fetcher_notification_message">Läser in begärt innehåll</string>
<string name="create_playlist">Ny spellista</string>
<string name="delete_playlist">Radera</string>
<string name="rename_playlist">Byt namn</string>
<string name="name">Namn</string>
<string name="append_playlist">Lägg till i spellistan</string>
<string name="append_playlist">Lägg till i spellista</string>
<string name="set_as_playlist_thumbnail">Använd som spellistans miniatyrbild</string>
<string name="bookmark_playlist">Bokmärk spellistan</string>
<string name="unbookmark_playlist">Ta bort bokmärke</string>
<string name="delete_playlist_prompt">Ta bort spellista\?</string>
<string name="playlist_creation_success">Spellistan skapades</string>
<string name="playlist_add_stream_success">Tillagad i spellistan</string>
<string name="playlist_add_stream_success">Tillagd i spellistan</string>
<string name="playlist_thumbnail_change_success">Spellistans miniatyrbild förändrades.</string>
<string name="playlist_delete_failure">Kunde inte ta bort spellistan.</string>
<string name="caption_none">Ingen textning</string>
@ -343,7 +344,7 @@
<string name="resize_zoom">Zoom</string>
<string name="caption_auto_generated">Autogenererade</string>
<string name="caption_setting_title">Textning</string>
<string name="caption_setting_description">Ändra spelarens textskala och bakgrundsstil. Kräver att appen startar om för att träder i kraft.</string>
<string name="caption_setting_description">Ändra spelarens textskala och bakgrundsstil. Kräver omstart av appen för att träda i kraft</string>
<string name="enable_leak_canary_summary">Minnesläcka övervakning kan orsaka att appen inte svarar under heap dumpning</string>
<string name="enable_disposed_exceptions_title">Rapportera out-of-lifecycle fel</string>
<string name="enable_disposed_exceptions_summary">Tvinga rapportering av otillåtna Rx-undantag utanför fragment eller aktivitetslivscykel efter uppstädning</string>
@ -357,29 +358,33 @@
<string name="previous_export">Föregående export</string>
<string name="subscriptions_import_unsuccessful">Kunde inte importera prenumerationer</string>
<string name="subscriptions_export_unsuccessful">kunde inte exportera prenumerationer</string>
<string name="import_youtube_instructions">Importera YouTube-prenumerationer genom att hämta export-filen:
<string name="import_youtube_instructions">Importera YouTube-prenumerationer från Google takeout:
\n
\n1. Gå till följande webbadress: %1$s
\n2. Logga in när du blir tillfrågad
\n3. En nedladdning ska starta (det är export-filen)</string>
<string name="import_soundcloud_instructions">Importera en SoundCloud profil genom att skriva in webbadressen eller ditt ID:
\n3. Klicka på \"All YouTube-data tas med\", sen på \"Avmarkera alla\", välj sen bara \"prenumerationer\" och klicka på \"OK\"
\n4. Klicka på \"Nästa steg\" och sen på \"Skapa export\"
\n5. Klicka på \"Hämta\"-knappen när den kommer fram och
\n6. Från den nedladdade takeout-zip-filen, packa upp .json-filen (vanligtvis under \"YouTube och YouTube Musik/prenumerationer/prenumerationer.json\") och importera den hit.</string>
<string name="import_soundcloud_instructions">Importera en SoundCloud-profil genom att skriva in webbadressen eller ditt ID:
\n
\n1. Aktivera \"skrivbordsläge\" i en webbläsare (sidan är inte tillgänglig för mobila enheter)
\n2. Gå till följande webbadress: %1$s
\n3. Logga in när du blir tillfrågad
\n4. Kopiera profilens webbadress som du blev omdirigerad till.</string>
<string name="import_soundcloud_instructions_hint">dittID, soundcloud.com/dittid</string>
<string name="import_network_expensive_warning">Tänk på att operationer kan vara nätverks intensiv.
<string name="import_network_expensive_warning">Tänk på att denna operation kan vara nätverksintensiv.
\n
\nVill du fortsätta?</string>
<string name="playback_speed_control">Uppspelningshastighet Kontroller</string>
\nVill du fortsätta\?</string>
<string name="playback_speed_control">Kontroller för uppspelningshastighet</string>
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Tonhöjd</string>
<string name="unhook_checkbox">Avlänka (kan orsaka förvrängning)</string>
<string name="skip_silence_checkbox">Snabbspola vid frånvaro av ljud</string>
<string name="playback_step">Steg</string>
<string name="playback_reset">Återställ</string>
<string name="start_accept_privacy_policy">För att uppfylla den Europeiska dataskyddsförordningen (GDPR), uppmärksammar vi NewPipes sekretesspolicy. Läs den noggrant. Du måste acceptera det om du vill skicka felrapporten.</string>
<string name="start_accept_privacy_policy">För att uppfylla den Europeiska dataskyddsförordningen (GDPR) uppmärksammar vi er härmed på NewPipes sekretesspolicy. Var god läs den noggrant.
\nDu måste acceptera den för att kunna skicka felrapporten.</string>
<string name="accept">Acceptera</string>
<string name="decline">Avböj</string>
<string name="limit_data_usage_none_description">Ingen gräns</string>
@ -398,86 +403,86 @@
<string name="brightness_gesture_control_summary">Använd gester för att justera ljusstyrkan</string>
<string name="settings_category_updates_title">Uppdateringar</string>
<string name="file_deleted">Fil raderad</string>
<string name="app_update_notification_channel_name">Appuppdateringsnotifikation</string>
<string name="app_update_notification_channel_description">Notifikationer för nya NewPipe versioner</string>
<string name="app_update_notification_channel_name">Avisering för appuppdatering</string>
<string name="app_update_notification_channel_description">Aviseringar för nya NewPipe-versioner</string>
<string name="download_to_sdcard_error_title">Extern lagring otillgänglig</string>
<string name="saved_tabs_invalid_json">Fel vid läsning av sparade flikar, använder standard flikar</string>
<string name="restore_defaults">Återställ default</string>
<string name="saved_tabs_invalid_json">Fel vid läsning av sparade flikar, använder standardflikar</string>
<string name="restore_defaults">Återställ till standardvärden</string>
<string name="restore_defaults_confirmation">Vill du återställa till standard\?</string>
<string name="subscribers_count_not_available">Antalet prenumeranter är otillgängligt</string>
<string name="main_page_content_summary">Vilka flikar visas på Huvudsidan</string>
<string name="main_page_content_summary">Vilka flikar som visas på huvudsidan</string>
<string name="selection">Markering</string>
<string name="updates_setting_title">Uppdateringar</string>
<string name="updates_setting_description">Visa notifikation för att uppdatera appen när en ny version finns tillgänglig</string>
<string name="updates_setting_description">Visa avisering för att uppdatera appen när en ny version finns tillgänglig</string>
<string name="list_view_mode">Listvy</string>
<string name="list">Lista</string>
<string name="grid">Rutnät</string>
<string name="auto">Auto</string>
<string name="auto">Automatiskt</string>
<string name="switch_view">Växla vy</string>
<string name="app_update_notification_content_title">NewPipe uppdatering tillgänglig!</string>
<string name="app_update_notification_content_text">Tryck för att ladda ned</string>
<string name="app_update_notification_content_title">En NewPipe-uppdatering är tillgänglig!</string>
<string name="app_update_notification_content_text">Tryck för att hämta</string>
<string name="missions_header_finished">Färdig</string>
<string name="paused">pausad</string>
<string name="queued">köad</string>
<string name="post_processing">efterbehandling</string>
<string name="enqueue"></string>
<string name="permission_denied">Åtgärd som nekas av systemet</string>
<string name="download_failed">Nedladdningen misslyckades</string>
<string name="download_finished">Nedladdningen är färdig</string>
<string name="download_finished_more">%s nedladdningar är färdiga</string>
<string name="permission_denied">Åtgärden nekas av systemet</string>
<string name="download_failed">Hämtningen misslyckades</string>
<string name="download_finished">Hämtningen är färdig</string>
<string name="download_finished_more">%s hämtningar är färdiga</string>
<string name="generate_unique_name">Generera unikt namn</string>
<string name="overwrite">Skriv över</string>
<string name="download_already_running">Det finns en pågående nedladdning med det här namnet</string>
<string name="download_already_running">Det finns en pågående hämtning med det här namnet</string>
<string name="show_error">Visa fel</string>
<string name="label_code">Kod</string>
<string name="error_ssl_exception">Kunde inte fastställa en säker anslutning</string>
<string name="error_unknown_host">Kunde inte hitta servern</string>
<string name="error_connect_host">Kunde inte ansluta till servern</string>
<string name="error_http_no_content">Servern skickar ingen data</string>
<string name="error_http_unsupported_range">Servern accepterar inte flertrådade nedladdningar, försök igen med @string/msg_threads = 1</string>
<string name="error_http_unsupported_range">Servern accepterar inte flertrådade hämtningar, försök igen med @string/msg_threads = 1</string>
<string name="error_http_not_found">Hittades inte</string>
<string name="error_postprocessing_failed">Efterbehandling misslyckades</string>
<string name="stop">Stanna</string>
<string name="max_retry_msg">Max försök</string>
<string name="max_retry_desc">Max antal försök tills nedladdning avbryts</string>
<string name="max_retry_desc">Maximalt antal försök innan hämtningen avbryts</string>
<string name="events">Händelser</string>
<string name="conferences">Konferenser</string>
<string name="show_comments_title">Visa kommentarer</string>
<string name="show_comments_summary">Inaktivera för att inte visa kommentarer</string>
<string name="show_comments_summary">Inaktivera för att dölja kommentarer</string>
<string name="enable_playback_resume_title">Återuppta uppspelning</string>
<string name="enable_playback_resume_summary">Återställ den senaste uppspelningspositionen</string>
<string name="enable_playback_state_lists_title">Positioner i listor</string>
<string name="download_choose_new_path">Ändra nedladdningsmapp för att träda i kraft</string>
<string name="download_choose_new_path">Ändra hämtningsmapp för att det ska träda i kraft</string>
<string name="autoplay_title">Spela automatiskt</string>
<string name="settings_category_clear_data_title">Töm data</string>
<string name="seek_duration_title">Snabbspola -framåt/-bakåt</string>
<string name="enable_playback_state_lists_summary">Visa positionindikationer i listor</string>
<string name="clear_playback_states_title">Radera uppspelningspositioner</string>
<string name="settings_category_clear_data_title">Rensa data</string>
<string name="seek_duration_title">Snabbspola framåt/-bakåt sökvaraktighet</string>
<string name="enable_playback_state_lists_summary">Visa indikatorer för uppspelningsposition i listor</string>
<string name="clear_playback_states_title">Ta bort uppspelningspositioner</string>
<string name="peertube_instance_url_title">PeerTube-instanser</string>
<string name="peertube_instance_url_summary">Välj din favorit PeerTube-instans</string>
<string name="peertube_instance_url_help">Hitta instanser du gillar på %s</string>
<string name="peertube_instance_url_summary">Välj dina favoritpeertube-instanser</string>
<string name="peertube_instance_url_help">Hitta de instanser du gillar på %s</string>
<string name="peertube_instance_add_title">Lägg till instans</string>
<string name="peertube_instance_add_help">Fyll i instans-URL</string>
<string name="peertube_instance_add_fail">Kunde inte validera instans</string>
<string name="peertube_instance_add_https_only">Enbart HTTPS-URL stöds</string>
<string name="peertube_instance_add_help">Ange i instans-URL</string>
<string name="peertube_instance_add_fail">Det gick inte att validera instansen</string>
<string name="peertube_instance_add_https_only">Endast HTTPS-URL:er stöds</string>
<string name="peertube_instance_add_exists">Instansen finns redan</string>
<string name="videos_string">Videos</string>
<string name="videos_string">Videor</string>
<string name="help">Hjälp</string>
<string name="delete_playback_states_alert">Ta bort alla uppspelningspositioner\?</string>
<string name="clear_playback_states_summary">Tar bort alla uppspelnings positioner</string>
<string name="clear_playback_states_summary">Tar bort alla uppspelningspositioner</string>
<string name="missing_file">Filen har flyttats eller tagits bort</string>
<string name="download_to_sdcard_error_message">Det går inte att ladda ner till externt SD-kort. Återställa nedladdningsmapp\?</string>
<string name="watch_history_states_deleted">Uppspelningspositionerna har tagits bort.</string>
<string name="download_to_sdcard_error_message">Hämtning till externt SD-kort är inte möjligt. Återställ hämtningsmappens plats\?</string>
<string name="watch_history_states_deleted">Uppspelningspositionerna har tagits bort</string>
<string name="artists">Artister</string>
<string name="albums">Album</string>
<string name="songs">Låtar</string>
<string name="restricted_video">Denna video är åldersbegränsad.
<string name="restricted_video">Denna video har en åldersgräns.
\n
\nOm du vill visa den aktiverar du \"%1$s\" i inställningarna.</string>
<string name="no_comments">Inga kommentarer</string>
<string name="subtitle_activity_recaptcha">Tryck på \"Klar\" när det är löst</string>
<string name="infinite_videos">∞ videos</string>
<string name="more_than_100_videos">100+ videos</string>
<string name="infinite_videos">∞ videor</string>
<string name="more_than_100_videos">100+ videor</string>
<plurals name="listening">
<item quantity="one">%s lyssnare</item>
<item quantity="other">%s lyssnare</item>
@ -488,14 +493,14 @@
</plurals>
<string name="no_one_watching">Ingen tittar</string>
<string name="drawer_header_description">Växla tjänst, för närvarande vald:</string>
<string name="permission_display_over_apps">Ge tillåtelse att visa över andra appar</string>
<string name="permission_display_over_apps">Ge behörighet att visa över andra appar</string>
<string name="no_one_listening">Ingen lyssnar</string>
<string name="default_kiosk_page_summary">Standardkiosk</string>
<string name="error_path_creation">Destinationsmappen kan inte skapas</string>
<string name="error_file_creation">Det går inte att skapa filen</string>
<string name="download_already_pending">Det finns en pågående nedladdning med det här namnet</string>
<string name="download_already_pending">Det finns en pågående hämtning med det här namnet</string>
<string name="overwrite_failed">kan inte skriva över filen</string>
<string name="overwrite_finished_warning">Det finns redan en nedladdad fil med det här namnet</string>
<string name="overwrite_finished_warning">Det finns redan en hämtad fil med det här namnet</string>
<string name="overwrite_unrelated_warning">En fil med det här namnet finns redan</string>
<string name="recovering">återställer</string>
<string name="missions_header_pending">Väntande</string>
@ -508,12 +513,12 @@
<string name="recently_added">Nyligen tillagd</string>
<string name="local">Lokala</string>
<string name="recaptcha_done_button">Klar</string>
<string name="youtube_restricted_mode_enabled_title">YouTube begränsat läge</string>
<string name="localization_changes_requires_app_restart">Språket ändras när appen har startats om.</string>
<string name="error_unable_to_load_comments">Det gick inte att ladda kommentarer</string>
<string name="youtube_restricted_mode_enabled_title">Slå på YouTubes \"Begränsat läge\"</string>
<string name="localization_changes_requires_app_restart">Språket ändras när appen startas om</string>
<string name="error_unable_to_load_comments">Det gick inte att läsa in kommentarerna</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Inaktivera snabbläge</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Aktivera snabbläge</string>
<string name="feed_use_dedicated_fetch_method_summary">Tillgängligt i vissa tjänster det är vanligtvis mycket snabbare men kan returnera en begränsad mängd artiklar och ofta ofullständig information (t.ex. ingen varaktighet, objekttyp, ingen live-status).</string>
<string name="feed_use_dedicated_fetch_method_summary">Det är tillgängligt i vissa tjänster och är vanligtvis mycket snabbare, men kan returnera en begränsad mängd objekt och ofta ofullständig information (t.ex. ingen speltid, objekttyp, ingen live-status)</string>
<string name="feed_use_dedicated_fetch_method_title">Hämta från dedikerat flöde när det finns tillgängligt</string>
<string name="feed_update_threshold_option_always_update">Uppdatera alltid</string>
<string name="feed_update_threshold_summary">Tid efter senaste uppdatering innan en prenumeration anses vara föråldrad — %s</string>
@ -529,8 +534,8 @@
<string name="feed_group_dialog_empty_selection">Ingen prenumeration vald</string>
<string name="feed_group_dialog_select_subscriptions">Välj prenumerationer</string>
<string name="feed_processing_message">Bearbetar flöde …</string>
<string name="feed_notification_loading">Läser in flöde </string>
<string name="feed_subscription_not_loaded_count">Ej laddad: %d</string>
<string name="feed_notification_loading">Läser in flödet</string>
<string name="feed_subscription_not_loaded_count">Inte inläst: %d</string>
<string name="feed_oldest_subscription_update">Flödet senast uppdaterat: %s</string>
<string name="feed_groups_header_title">Kanalgrupper</string>
<plurals name="days">
@ -558,30 +563,30 @@
<string name="systems_language">Systems standard</string>
<string name="app_language_title">Appspråk</string>
<string name="choose_instance_prompt">Välj en instans</string>
<string name="downloads_storage_use_saf_summary">\"Storage Access Framework\" tillåter nedladdningar till ett externt SD-kort.
\nVissa enheter är inkompatibla</string>
<string name="downloads_storage_use_saf_title">Använd SAF</string>
<string name="downloads_storage_ask_summary">Du blir frågad var du vill spara varje nedladdning</string>
<string name="downloads_storage_ask_title">Fråga var du ska ladda ner</string>
<string name="pause_downloads">Pausa nedladdningar</string>
<string name="start_downloads">Starta nedladdningar</string>
<string name="enable_queue_limit_desc">En nedladdning körs samtidigt</string>
<string name="enable_queue_limit">Begränsa nedladdningskön</string>
<string name="downloads_storage_use_saf_summary">\"Storage Access Framework\" möjliggör hämtningar till ett externt SD-kort</string>
<string name="downloads_storage_use_saf_title">Använd systemmappväljaren (SAF)</string>
<string name="downloads_storage_ask_summary">Du kommer att bli tillfrågad var du vill spara varje hämtning.
\nAktivera systemmappväljaren (SAF) om du vill hämta till ett externt SD-kort</string>
<string name="downloads_storage_ask_title">Fråga vart du ska hämta</string>
<string name="pause_downloads">Pausa hämtningar</string>
<string name="start_downloads">Starta hämtningar</string>
<string name="enable_queue_limit_desc">En hämtning körs samtidigt</string>
<string name="enable_queue_limit">Begränsa hämtningskön</string>
<string name="close">Stäng ner</string>
<string name="pause_downloads_on_mobile_desc">Användbart när du byter till mobildata, även om vissa nedladdningar inte kan avbrytas</string>
<string name="pause_downloads_on_mobile">Avbryt i en uppmätt nätverk</string>
<string name="deleted_downloads">Rensa %1$d nedladdningarna</string>
<string name="delete_downloaded_files">Radera nedladdade filer</string>
<string name="confirm_prompt">Vill du rensa din nedladdningshistorik eller radera alla nerladdade filer\?</string>
<string name="clear_download_history">Rensa nedladdningshistorik</string>
<string name="error_download_resource_gone">Kunde inte återfinna nedladdningen</string>
<string name="pause_downloads_on_mobile_desc">Användbart vid byte till mobildata, även om vissa hämtningar inte kan avbrytas</string>
<string name="pause_downloads_on_mobile">Avbryt på uppmätta nätverk</string>
<string name="deleted_downloads">Tog bort %1$d hämtningar</string>
<string name="delete_downloaded_files">Ta bort hämtade filer</string>
<string name="confirm_prompt">Vill du rensa din hämtningshistorik eller ta bort alla hämtade filer\?</string>
<string name="clear_download_history">Rensa hämtningshistorik</string>
<string name="error_download_resource_gone">Kan inte återställa den här hämtningen</string>
<string name="error_timeout">Anslutnings avbrott</string>
<string name="error_progress_lost">Framsteg förlorat, För att filen blev borttagen</string>
<string name="error_insufficient_storage">Inget utrymme kvar på enhet</string>
<string name="error_postprocessing_stopped">NewPipe stängdes under arbete med en fil</string>
<string name="error_permission_denied">Tillåtelse nekat av systemet</string>
<string name="error_report_open_github_notice">Vänligen kontrollera om en felrapport som tar upp din krasch redan finns. Att skapa ärenden när en felrapport redan finns, tar av den tid som vi annars kunde ha ägnat åt att fixa den faktiska buggen.</string>
<string name="error_report_open_issue_button_text">Rapportera fel på GitHub</string>
<string name="error_report_open_issue_button_text">Rapportera på GitHub</string>
<string name="copy_for_github">Kopiera formaterad felrapport</string>
<string name="search_showing_result_for">Visar resultat för: %s</string>
<string name="select_a_playlist">Välj en spellista</string>
@ -589,28 +594,127 @@
<string name="channel_created_by">Skapad av %s</string>
<string name="no_playlist_bookmarked_yet">Ingen spellista bokmärkt än</string>
<string name="feed_group_show_only_ungrouped_subscriptions">Visa endast prenumerationer som inte grupperats</string>
<string name="notification_scale_to_square_image_title">Skala tumnagel till 1:1 ratio</string>
<string name="wifi_only">Endast Wi-Fi</string>
<string name="notification_scale_to_square_image_summary">Skala videominiatyrbilden som visast i underrättelsen frän 16:9 till 1:1 aspekt (kan orsaka snedvridningar)</string>
<string name="autoplay_summary">Starta avspelning automatiskt—%s</string>
<string name="title_activity_play_queue">Spel </string>
<string name="settings_category_notification_title">Underrättelse</string>
<string name="unsupported_url_dialog_message">Kunde inte igenkänna URL. Öppna med annat program\?</string>
<string name="auto_queue_toggle">Legg i kö automatiskt</string>
<string name="clear_queue_confirmation_description">Den aktiva spelaren vill ersättas</string>
<string name="clear_queue_confirmation_summary">Att byta frän en spelare till en annan kan ersätta din kö</string>
<string name="clear_queue_confirmation_title">Fråga om bekräftelse innan tömning av kö</string>
<string name="notification_action_buffering">Buffrar</string>
<string name="notification_action_repeat">Genta</string>
<string name="notification_action_4_title">Femte handlingstangent</string>
<string name="notification_action_3_title">Fjärde handlingstangent</string>
<string name="notification_action_2_title">Tredje handlingstangent</string>
<string name="notification_action_1_title">Andra handlingstangent</string>
<string name="notification_action_0_title">Första handlingstangent</string>
<string name="content_not_supported">Detta inhaltande stöds inte enda av NewPipe.
<string name="notification_scale_to_square_image_title">Skala tumnagel till 1:1-förhållande</string>
<string name="wifi_only">Endast över Wi-Fi</string>
<string name="notification_scale_to_square_image_summary">Skala videominiatyrbilden som visas i aviseringen från 16:9- till 1:1-förhållande (kan orsaka bildförvrängning)</string>
<string name="autoplay_summary">Starta uppspelning automatiskt — %s</string>
<string name="title_activity_play_queue">Uppspelnings</string>
<string name="settings_category_notification_title">Aviseringar</string>
<string name="unsupported_url_dialog_message">Kunde inte känna igen URL:en. Vill du öppna med annan app\?</string>
<string name="auto_queue_toggle">Köa automatiskt</string>
<string name="clear_queue_confirmation_description">Den aktiva spellistan kommer att ersättas</string>
<string name="clear_queue_confirmation_summary">Att byta från en spelare till en annan kan ersätta din kö</string>
<string name="clear_queue_confirmation_title">Fråga om bekräftelse innan en kö töms</string>
<string name="notification_action_buffering">Buffring</string>
<string name="notification_action_repeat">Upprepa</string>
<string name="notification_action_4_title">Femte åtgärdsknappen</string>
<string name="notification_action_3_title">Fjärde åtgärdsknappen</string>
<string name="notification_action_2_title">Tredje åtgärdsknappen</string>
<string name="notification_action_1_title">Andra händelseknapp</string>
<string name="notification_action_0_title">Första händelseknapp</string>
<string name="content_not_supported">Detta innehåll stöds ännu inte av NewPipe.
\n
\nDet vill förhoppningsvis ändras i en kommande version.</string>
<string name="playlist_page_summary">Spellista-sida</string>
\nDet kommer förhoppningsvis inkluderas i en framtida version.</string>
<string name="playlist_page_summary">Spellistesida</string>
<string name="never">Aldrig</string>
<string name="notification_action_nothing">Ingenting</string>
<string name="clear_cookie_summary">Rensar kakor som NewPipe lagrar när du löser en reCAPTCHA</string>
<string name="recaptcha_cookies_cleared">reCAPTCHA-kakor har tagits bort</string>
<string name="clear_cookie_title">Rensa reCAPTCHA-kakor</string>
<string name="youtube_restricted_mode_enabled_summary">YouTube erbjuder ett \"Begränsat läge\" som döljer material som potentiellt är olämpligt för barn</string>
<string name="auto_device_theme_title">Automatiskt (enhetens tema)</string>
<string name="notification_action_shuffle">Blanda</string>
<string name="enqueued">Köad</string>
<string name="downloads_storage_use_saf_summary_api_29">Från och med Android 10 stöds bara \"Storage Access Framework\"</string>
<string name="soundcloud_go_plus_content">Det här är ett SoundCloud Go+-spår, åtminstone i ditt land, så det kan inte strömmas eller hämtas via NewPipe.</string>
<string name="metadata_host">Värd</string>
<string name="open_website_license">Öppna webbplats</string>
<string name="tablet_mode_title">Surfplatteläge</string>
<string name="enqueue_stream">Köa</string>
<string name="related_items_tab_description">Relaterade objekt</string>
<string name="hash_channel_name">Avisering för videohashning</string>
<string name="feed_use_dedicated_fetch_method_help_text">Tycker du att inläsningen av flödet är för långsamt\? Testa i så fall att aktivera snabbinläsning (du kan ändra det i inställningarna eller genom att trycka på knappen nedan).
\n
\nNewPipe erbjuder två strategier för att ladda flödet:
\n• Att hämta hela den prenumererade kanalen, vilket är långsamt, men komplett.
\n• Att använda en \"dedicated service endpoint\", vilket är snabbt, men vanligtvis inte komplett.
\n
\nSkillnaden mellan de två är att den snabba varianten ofta saknar viss information, som objektets speltid eller typ (kan inte skilja på livevideor och vanliga videor) och den kan returnera färre objekt.
\n
\nYouTube är ett exempel på en tjänst som erbjuder denna snabba metod genom sitt RSS-flöde.
\n
\nSå valet handlar i grunden om vad du föredrar: hastighet eller precis information.</string>
<string name="show_meta_info_summary">Inaktivera för att dölja rutor med metainformation som ytterligare information om strömmens skapare, strömmens innehåll eller sökord</string>
<string name="show_description_summary">Inaktivera för att dölja videobeskrivning och ytterligare information</string>
<string name="show_meta_info_title">Visa meta-information</string>
<string name="show_thumbnail_summary">Använd miniatyrbild som bakgrund till både låsskärm och aviseringar</string>
<string name="notification_actions_summary">Redigera varje aviseringshandling nedan genom att trycka på den. Välj upp till tre av dem som ska visas i den kompakta aviseringen genom att använda kryssrutorna till höger</string>
<string name="notification_colorize_summary">Låt Android färglägga varje avisering individuellt utifrån miniatyrbildens huvudsakliga färg (notera att detta inte är tillgängligt på alla enheter)</string>
<string name="notification_colorize_title">Färglägg avisering</string>
<string name="notification_actions_at_most_three">Du kan som mest välja tre åtgärder att visa i den kompakta aviseringen!</string>
<string name="recaptcha_solve">Lös</string>
<string name="metadata_support">Support</string>
<string name="metadata_privacy">Tillgänglighet</string>
<string name="off">Av</string>
<string name="on"></string>
<string name="metadata_privacy_internal">Intern</string>
<string name="metadata_privacy_private">Privat</string>
<string name="metadata_privacy_public">Offentlig</string>
<string name="metadata_language">Språk</string>
<string name="metadata_age_limit">Åldersgräns</string>
<string name="metadata_licence">Licens</string>
<string name="metadata_tags">Taggar</string>
<string name="metadata_category">Kategori</string>
<string name="description_select_disable">Omöjliggör markering av text i beskrivningen</string>
<string name="description_select_enable">Möjliggör markering av text i beskrivningen</string>
<string name="description_select_note">Du kan nu markera text i beskrivningen. Notera att sidan kan flimra och att länkar kan vara oklickbara när du är i markeringsläge.</string>
<string name="download_has_started">Hämtningen har startat</string>
<string name="radio">Radio</string>
<string name="paid_content">Detta innehåll är endast tillgängligt för användare som har betalat för det, så det kan inte strömmas eller hämtas av NewPipe.</string>
<string name="service_provides_reason">%s anger detta skäl:</string>
<string name="account_terminated">Kontot avslutat</string>
<string name="youtube_music_premium_content">Denna video är endast tillgänglig för YouTube Music Premium-medlemmar, så den kan inte strömmas eller hämtas av NewPipe.</string>
<string name="private_content">Detta innehåll är privat, så det kan inte strömmas eller hämtas av NewPipe.</string>
<string name="georestricted_content">Detta innehåll är inte tillgängligt i ditt land.</string>
<string name="no_app_to_open_intent">Ingen app på din enhet kan öppna detta</string>
<string name="chapters">Kapitel</string>
<string name="feed_load_error_account_info">Det gick inte att läsa in flödet för \"%s\".</string>
<string name="feed_load_error_terminated">Innehållsskaparens konto har avslutats.
\nNewPipe kommer framöver inte kunna läsa in detta flöde.
\nVill du avsluta din prenumeration på denna kanal\?</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Du kommer att tillfrågas var varje hämtning ska sparas</string>
<string name="show_channel_details">Visa kanaldetaljer</string>
<string name="no_dir_yet">Ingen hämtningsmapp har ställts in ännu, välj standardmapp för hämtning nu</string>
<string name="msg_calculating_hash">Beräknar hash</string>
<string name="dont_show">Visa inte</string>
<string name="low_quality_smaller">Låg kvalitet (mindre)</string>
<string name="high_quality_larger">Hög kvalitet (större)</string>
<string name="crash_the_app">Krascha appen</string>
<string name="show_memory_leaks">Visa minnesläckor</string>
<string name="comments_are_disabled">Kommentarer är inaktiverade</string>
<string name="description_tab_description">Beskrivning</string>
<string name="comments_tab_description">Kommentarer</string>
<string name="restricted_video_no_stream">Denna video här en åldersgräns.
\nPå grund av nya YouTube-regler med åldersgräns för vissa videor kan NewPipe inte komma åt någon av dess videoströmmar och kan därmed inte spela upp den.</string>
<string name="show_age_restricted_content_summary">Visa innehåll som pga sin åldersgräns (ex 18+) kan vara olämpligt för barn</string>
<string name="show_description_title">Visa beskrivning</string>
<string name="open_with">Öppna med</string>
<string name="show_thumbnail_title">Visa miniatyrer</string>
<string name="detail_sub_channel_thumbnail_view_description">Kanalens visningsminiatyr</string>
<string name="feed_toggle_show_played_items">Visa sedda objekt</string>
<string name="feed_load_error_fast_unknown">Det snabba flödesläget ger inte mer information om detta.</string>
<string name="feed_load_error">Fel vid inläsning av flödet</string>
<string name="downloads_storage_use_saf_summary_api_19">\"Storage Access Framework\" är inte tillgängligt på Android KitKat och tidigare versioner</string>
<string name="mark_as_watched">Markera som sedd</string>
<string name="metadata_privacy_unlisted">Ej listad</string>
<string name="featured">Aktuellt</string>
<string name="night_theme_title">Nattema</string>
<string name="hash_channel_description">Aviseringar för videohashningsframsteg</string>
<string name="metadata_thumbnail_url">Miniatyrbild-webbadress</string>
<string name="disable_media_tunneling_summary">Inaktivera medietunnel om du upplever en svart skärm eller stamning vid videouppspelning</string>
<string name="disable_media_tunneling_title">Inaktivera mediatunnel</string>
<string name="detail_heart_img_view_description">Hjärtmärkt av innehållsskaparen</string>
<string name="select_night_theme_toast">Du kan välja det natt-tema du föredrar nedan</string>
<string name="night_theme_summary">Välj det natt-tema du föredrar — %s</string>
<string name="seekbar_preview_thumbnail_title">Sökradens förhandsvisningsminiatyr</string>
</resources>

View File

@ -176,7 +176,7 @@
</plurals>
<plurals name="videos">
<item quantity="one">காணொளிகள்</item>
<item quantity="other"/>
<item quantity="other">காணொளிகள்</item>
</plurals>
<string name="switch_to_main">முதற்பக்கத்துக்கு மாற்று</string>
<string name="invalid_url_toast">சரியில்லாத URL</string>
@ -254,4 +254,10 @@
<string name="action_about">பற்றி</string>
<string name="title_activity_about">நியூபைப் பற்றி</string>
<string name="trending">நடப்பு</string>
<string name="download_finished_more">%s பதிவிறக்கம் முடிந்தது</string>
<string name="download_finished">பதிவிறக்கம் முடிவடைந்தது</string>
<string name="download_failed">பதிவிறக்கம் தோல்வியடைந்தது</string>
<string name="low_quality_smaller">குறைந்த தரம்</string>
<string name="limit_mobile_data_usage_title">மொபைல் தரவைப் பயன்படுத்தும் போது வீடியோ தரத்தைக் கட்டுப்படுத்துங்கள்</string>
<string name="limit_data_usage_none_description">வரம்பற்ற</string>
</resources>

View File

@ -681,7 +681,7 @@
<string name="metadata_privacy_internal">İç</string>
<string name="metadata_privacy_private">Gizli</string>
<string name="metadata_privacy_unlisted">Listelenmemiş</string>
<string name="metadata_privacy_public">Halkaık</string>
<string name="metadata_privacy_public">Herkeseık</string>
<string name="metadata_thumbnail_url">Küçük Resim URL\'si</string>
<string name="metadata_host">Konakçı</string>
<string name="metadata_support">Destek</string>
@ -710,5 +710,12 @@
<string name="off">Kapat</string>
<string name="on"></string>
<string name="tablet_mode_title">Tablet kipi</string>
<string name="feed_toggle_show_played_items">Oynatılan ögeleri göster</string>
<string name="feed_toggle_show_played_items">İzlenen ögeleri göster</string>
<string name="seekbar_preview_thumbnail_title">Konum çubuğu küçük resim ön izlemesi</string>
<string name="dont_show">Gösterme</string>
<string name="low_quality_smaller">Düşük nitelik (küçük)</string>
<string name="high_quality_larger">Yüksek nitelik (geniş)</string>
<string name="comments_are_disabled">Yorumlar devre dışı</string>
<string name="detail_heart_img_view_description">Yaratıcısınca kalplendi</string>
<string name="mark_as_watched">İzlendi olarak imle</string>
</resources>

View File

@ -41,7 +41,7 @@
<string name="settings_category_video_audio_title">Відео та звук</string>
<string name="settings_category_appearance_title">Зовнішній вигляд</string>
<string name="settings_category_other_title">Інше</string>
<string name="background_player_playing_toast">Програвання у тлі</string>
<string name="background_player_playing_toast">Відтворення на тлі</string>
<string name="storage_permission_denied">Немає доступу до накопичувача</string>
<string name="content">Вміст</string>
<string name="show_age_restricted_content_title">Вміст із віковими обмеженнями</string>
@ -104,7 +104,7 @@
<string name="msg_running_detail">Деталі</string>
<string name="msg_wait">Зачекайте…</string>
<string name="msg_copied">Скопійовано до буфера обміну</string>
<string name="no_available_dir">Вкажіть теку для завантажень пізніше у налаштуваннях</string>
<string name="no_available_dir">Вкажіть теку для завантажень пізніше в налаштуваннях</string>
<string name="no_player_found_toast">Програвач потокового відео не знайдений (ви можете встановити VLC для програвання).</string>
<string name="open_in_popup_mode">Відкрити у віконному режимі</string>
<string name="use_external_video_player_summary">Прибирає звук при певних роздільних здатностях</string>
@ -134,7 +134,7 @@
<string name="enable_playback_resume_title">Продовжувати перегляд</string>
<string name="enable_playback_resume_summary">Відновлювати останню позицію</string>
<string name="enable_playback_state_lists_title">Позиції у списках</string>
<string name="enable_playback_state_lists_summary">Відображати індикатори позицій переглядів у списках</string>
<string name="enable_playback_state_lists_summary">Показувати індикатори позицій переглядів у списках</string>
<string name="settings_category_clear_data_title">Очистити дані</string>
<string name="enable_watch_history_summary">Вести облік перегляду відеозаписів</string>
<string name="enable_watch_history_title">Історія переглядів</string>
@ -147,9 +147,9 @@
<string name="settings_category_player_behavior_title">Поведінка</string>
<string name="settings_category_history_title">Історія та кеш</string>
<string name="settings_category_popup_title">Вікно</string>
<string name="popup_playing_toast">Програвання у віконному режимі</string>
<string name="background_player_append">Додано до черги програвання у тлі</string>
<string name="popup_playing_append">Додано до черги програвання у вікні</string>
<string name="popup_playing_toast">Відтворення у віконному режимі</string>
<string name="background_player_append">Додано до черги відтворення на тлі</string>
<string name="popup_playing_append">Додано до черги відтворення у вікні</string>
<string name="playlist">Список відтворення</string>
<string name="filter">Фільтр</string>
<string name="refresh">Оновити</string>
@ -162,7 +162,7 @@
<string name="notification_channel_name">Сповіщення NewPipe</string>
<string name="notification_channel_description">Сповіщення для програвачів NewPipe на тлі й у вікні</string>
<string name="unknown_content">[Невідомо]</string>
<string name="switch_to_background">Перемкнути у тло</string>
<string name="switch_to_background">Перемкнути на тло</string>
<string name="switch_to_popup">Перемкнути у вікно</string>
<string name="switch_to_main">Перемкнути на головну</string>
<string name="import_data_title">Імпортувати базу даних</string>
@ -304,7 +304,7 @@
<string name="unbookmark_playlist">Видалити закладку</string>
<string name="delete_playlist_prompt">Видалити цю добірку\?</string>
<string name="playlist_creation_success">Добірку створено</string>
<string name="playlist_add_stream_success">Додано у добірку</string>
<string name="playlist_add_stream_success">Додано в добірку</string>
<string name="playlist_thumbnail_change_success">Ескіз добірки змінено.</string>
<string name="playlist_delete_failure">Не вдалося видалити добірку.</string>
<string name="caption_none">Без субтитрів</string>
@ -317,13 +317,13 @@
<string name="enable_disposed_exceptions_summary">Примусове звітування про неможливість доставлення Rx-винятків, які відбуваються за межами фрагменту або діяльності життєвого циклу після усунення</string>
<string name="use_inexact_seek_title">Викор. швидкий неточний пошук</string>
<string name="use_inexact_seek_summary">Неточний пошук дозволяє програвачеві рухатися позиціями швидше, проте з меншою точністю</string>
<string name="auto_queue_title">Автододавання у чергу наступного запису</string>
<string name="auto_queue_title">Автододавання в чергу наступного запису</string>
<string name="auto_queue_summary">Продовжити при завершені (не повторюваної) черги, додавши повʼязаний запис</string>
<string name="file">Файл</string>
<string name="invalid_directory">Такої теки не існує</string>
<string name="invalid_source">Такого джерела файлу/вмісту не існує</string>
<string name="invalid_file">Файл не існує або відсутній дозвіл на його читання або запис</string>
<string name="file_name_empty_error">Назва файлу не може бути порожнім</string>
<string name="file_name_empty_error">Назва файлу не може бути порожньою</string>
<string name="error_occurred_detail">Сталася помилка: %1$s</string>
<string name="import_export_title">Імпорт/експорт</string>
<string name="import_title">Імпорт</string>
@ -396,7 +396,7 @@
<string name="minimize_on_exit_title">Зменшити при перемиканні програм</string>
<string name="minimize_on_exit_summary">Дія при перемиканні до інших програм від головного відеопрогравача — %s</string>
<string name="minimize_on_exit_none_description">Нічого</string>
<string name="minimize_on_exit_background_description">Зменшити до програвача у тлі</string>
<string name="minimize_on_exit_background_description">Зменшити до програвача на тлі</string>
<string name="minimize_on_exit_popup_description">Зменшити до програвача у вікні</string>
<string name="channels">Канали</string>
<string name="playlists">Списки відтворення</string>
@ -445,25 +445,25 @@
<string name="download_already_running">Файл з такою назвою вже завантажується</string>
<string name="show_error">Показати помилку</string>
<string name="label_code">Код</string>
<string name="error_path_creation">Цільова тека не може бути створена</string>
<string name="error_file_creation">Файл не може бути створений</string>
<string name="error_path_creation">Цільову теку не можливо створити</string>
<string name="error_file_creation">Файл не можливо створити</string>
<string name="error_permission_denied">Доступ заборонено системою</string>
<string name="error_ssl_exception">Захищене з\'єднання не встановлено</string>
<string name="error_unknown_host">Сервер не знайдено</string>
<string name="error_connect_host">Не вдалося з\'єднатися із сервером</string>
<string name="error_http_no_content">Сервер не надсилає дані</string>
<string name="error_http_unsupported_range">Сервер не підтримує завантаження у декілька потоків, спробуйте з параметром @string/msg_threads = 1</string>
<string name="error_http_unsupported_range">Сервер не підтримує завантажень у декілька потоків, спробуйте з параметром @string/msg_threads = 1</string>
<string name="error_http_not_found">Не знайдено</string>
<string name="error_postprocessing_failed">Невдала пост-обробка</string>
<string name="stop">Зупинити</string>
<string name="max_retry_msg">Максимум спроб</string>
<string name="max_retry_desc">Максимальна кількість спроб перед скасуванням завантаження</string>
<string name="max_retry_desc">Найбільша кількість спроб перед скасуванням завантаження</string>
<string name="pause_downloads_on_mobile">Переривати завантаження на небезлімітних з\'єднаннях</string>
<string name="download_to_sdcard_error_message">Завантаження до зовнішньої SD-карти неможливе. Скинути розташування теки для завантажень\?</string>
<string name="saved_tabs_invalid_json">Помилка зчитування збережених вкладок. Використовуються типові вкладки</string>
<string name="main_page_content_summary">Вкладки, показані на головній сторінці</string>
<string name="updates_setting_description">Показувати сповіщення з пропозицією оновити застосунок за наявності нової версії</string>
<string name="pause_downloads_on_mobile_desc">Корисно під час переходу на мобільні дані, хоча деякі завантаження не можуть бути призупинені</string>
<string name="pause_downloads_on_mobile_desc">Корисно під час перемикання на мобільні дані, хоча деякі завантаження не можливо призупинити</string>
<string name="show_comments_title">Показувати коментарі</string>
<string name="show_comments_summary">Вимкніть, щоб сховати коментарі</string>
<string name="autoplay_title">Самовідтворення</string>
@ -473,14 +473,14 @@
<string name="watch_history_states_deleted">Позиції відтворення видалено</string>
<string name="missing_file">Файл переміщено або видалено</string>
<string name="overwrite_failed">не можу перезаписати файл</string>
<string name="download_already_pending">Завантаження з такою назвою вже є у черзі</string>
<string name="download_already_pending">Завантаження з такою назвою вже є в черзі</string>
<string name="error_postprocessing_stopped">NewPipe був закритий під час роботи над файлом</string>
<string name="error_insufficient_storage">На пристрої не залишилося вільного місця</string>
<string name="error_progress_lost">Прогрес втрачено через видалення файлу</string>
<string name="error_timeout">Час очікування з\'єднання вичерпано</string>
<string name="confirm_prompt">Очистити історію завантажень чи завантажені файли\?</string>
<string name="enable_queue_limit">Обмежити чергу завантажень</string>
<string name="enable_queue_limit_desc">В кожен момент часу виконуватиметься одне завантаження</string>
<string name="enable_queue_limit_desc">Одночасно виконувати лише одне завантаження</string>
<string name="start_downloads">Почати завантаження</string>
<string name="pause_downloads">Призупинити завантаження</string>
<string name="downloads_storage_ask_title">Запитувати, куди завантажувати</string>
@ -559,7 +559,7 @@
<string name="peertube_instance_add_fail">Не вдалося перевірити сервер</string>
<string name="content_not_supported">NewPipe ще не підтримує цей вміст.
\n
\nМожливо, підтримка з\'явиться у наступних версіях.</string>
\nМожливо, підтримка з\'явиться в наступних версіях.</string>
<string name="feed_use_dedicated_fetch_method_help_text">Якщо оновлення підписок здається вам занадто повільним, спробуйте увімкнути швидкий режим (змінити можна в налаштуваннях або кнопкою внизу).
\n
\nNewPipe дозволяє оновлювати підписки різними способами:
@ -593,8 +593,8 @@
<string name="feed_oldest_subscription_update">Останнє оновлення: %s</string>
<string name="new_seek_duration_toast">Через обмеження ExoPlayer точність перемотування становить %d секунд</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Так, а також частково переглянуті відео</string>
<string name="remove_watched_popup_warning">Відео, які Ви переглядали до та після додавання у добірку, будуть вилучені.
\nВи впевнені\? Це неозворотна дія!</string>
<string name="remove_watched_popup_warning">Відео, які Ви переглядали до та після додавання в добірку, вилучатимуться.
\nВи впевнені\? Це незворотна дія!</string>
<string name="remove_watched_popup_title">Видалити переглянуті відео\?</string>
<string name="remove_watched">Видалити переглянуті</string>
<string name="playlist_no_uploader">Створено автоматично (автора не знайдено)</string>
@ -720,6 +720,13 @@
<string name="on">Увімкнути</string>
<string name="tablet_mode_title">Режим планшета</string>
<string name="account_terminated">Обліковий запис припинено</string>
<string name="feed_toggle_show_played_items">Показувати відтворювані обʼєкти</string>
<string name="feed_toggle_show_played_items">Показувати переглянуті обʼєкти</string>
<string name="feed_load_error_fast_unknown">Режим швидкої підписки не надає багато інформації щодо цього.</string>
<string name="comments_are_disabled">Коментарі вимкнено</string>
<string name="dont_show">Не показувати</string>
<string name="low_quality_smaller">Низька якість (менше)</string>
<string name="high_quality_larger">Висока якість (більше)</string>
<string name="seekbar_preview_thumbnail_title">Мініатюра з попереднім переглядом на повзунку поступу</string>
<string name="detail_heart_img_view_description">Вподобано автором</string>
<string name="mark_as_watched">Позначити переглянутим</string>
</resources>

View File

@ -70,4 +70,23 @@
<item name="colorAccent">@color/dark_media_ccc_accent_color</item>
</style>
<!-- Bandcamp -->
<style name="LightTheme.Bandcamp" parent="LightTheme">
<item name="colorPrimary">@color/light_bandcamp_primary_color</item>
<item name="colorPrimaryDark">@color/light_bandcamp_statusbar_color</item>
<item name="colorAccent">@color/light_bandcamp_accent_color</item>
</style>
<style name="DarkTheme.Bandcamp" parent="DarkTheme">
<item name="colorPrimary">@color/dark_bandcamp_primary_color</item>
<item name="colorPrimaryDark">@color/dark_bandcamp_statusbar_color</item>
<item name="colorAccent">@color/dark_bandcamp_accent_color</item>
</style>
<style name="BlackTheme.Bandcamp" parent="BlackTheme">
<item name="colorPrimary">@color/dark_bandcamp_primary_color</item>
<item name="colorPrimaryDark">@color/dark_bandcamp_statusbar_color</item>
<item name="colorAccent">@color/dark_bandcamp_accent_color</item>
</style>
</resources>

View File

@ -690,7 +690,7 @@
<string name="description_select_note">Bây giờ bạn có thể chọn văn bản trong mô tả. Lưu ý rằng trang có thể nhấp nháy và các liên kết có thể không nhấn vào được trong khi ở chế độ chọn.</string>
<string name="service_provides_reason">%s cung cấp lý do này:</string>
<string name="account_terminated">Tài khoản bị chấm dứt</string>
<string name="feed_toggle_show_played_items">Hiện các mục đã phát</string>
<string name="feed_toggle_show_played_items">Hiện các mục đã xem</string>
<string name="feed_load_error_fast_unknown">Chế độ nguồn dữ liệu nhanh không cung cấp thêm thông tin về cái này.</string>
<string name="feed_load_error_terminated">Tài khoản của tác giả đã bị chấm dứt.
\nNewPipe sẽ không thể tải nguồn dữ liệu này trong tương lai.
@ -701,4 +701,11 @@
<string name="downloads_storage_use_saf_summary_api_19">\'Storage Access Framework\' không được hỗ trợ trên Android KitKat và cũ hơn</string>
<string name="downloads_storage_ask_summary_no_saf_notice">Bạn sẽ được hỏi nơi bạn muốn lưu mỗi mục tải xuống</string>
<string name="no_dir_yet">Chưa có thư mục tải xuống nào được đặt, hãy chọn thư mục tải xuống mặc định ngay</string>
<string name="dont_show">Không hiện</string>
<string name="low_quality_smaller">Chất lượng thấp (nhỏ hơn)</string>
<string name="high_quality_larger">Chất lượng cao (lớn hơn)</string>
<string name="seekbar_preview_thumbnail_title">Xem trước hình thu nhỏ trên thanh tua</string>
<string name="comments_are_disabled">Bình luận đang bị tắt</string>
<string name="detail_heart_img_view_description">Đã được người tạo gắn tim</string>
<string name="mark_as_watched">Đánh dấu là đã xem</string>
</resources>

Some files were not shown because too many files have changed in this diff Show More