Merge remote-tracking branch 'newpipe/dev' into rebase

This commit is contained in:
Alexander-- 2020-03-30 16:54:51 +06:59
commit 6a84f433ea
84 changed files with 2915 additions and 711 deletions

View File

@ -1,3 +0,0 @@
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.
- [ ] I checked if the issue/feature exists in the latest version.
- [ ] I did use the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/) to paste bug reports.

44
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,44 @@
---
name: Bug report
about: Create a bug report to help us improve
labels: bug
assignees: ''
---
<!--
Oh no, a bug! It happens. Thanks for reporting an issue with NewPipe.
Use this template to notify us if you found a bug.
To make it easier for us to help you please enter detailed information below.
Please note, we only support the latest version of NewPipe and the master branch. Make sure you have that version installed. If you don't, upgrade & reproduce the problem before opening the issue. The release page (https://github.com/TeamNewPipe/NewPipe/releases/latest) is the go-to place to get this version. In order to check your app version, open the left drawer and click on "About".
P.S.: Our contribution guidelines might be a nice document to read before you fill out the report :) You can find it at https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md
-->
### Version
<!-- Which version are you using? -->
-
### Steps to reproduce the bug
<!-- If you can't reproduce it, please try to give as many details as possible on how you think you got to the bug. -->
Steps to reproduce the behavior:
1. Go to '...'
2. Press on '....'
3. Swipe down to '....'
### Expected behavior
Tell us what you expected to happen.
### Actual behaviour
Tell us what happens instead.
### Screenshots/Screen records
If applicable, add screenshots or a screen recording to help explain your problem. GitHub should support uploading them directly in the issue field. If your file is too big, feel free to paste a link from an image/video hoster here instead.
### Logs
If your bug includes a crash, please head over to the [incredible bugreport to markdown converter](https://teamnewpipe.github.io/CrashReportToMarkdown/). Copy the result. Paste it here:
<!-- That's right, here! -->

View File

@ -0,0 +1,28 @@
---
name: Feature request
about: Suggest an idea for this project
labels: enhancement
assignees: ''
---
<!-- Hey. Our contribution guidelines (https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) might be an appropriate
document to read before you fill out the request :) -->
#### Is your feature request related to a problem? Please describe it
A clear and concise description of what the problem is.
Example: *I want to do X, but there is no way to do it.*
#### Describe the solution you'd like
A clear and concise description of what you want to happen.
Example: *I think it would be nice if you add feature Y which makes X possible.*
#### (Optional) Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Example: *I considered Z, but that didn't turn out to be a good idea because...*
#### Additional context
Add any other context or screenshots about the feature request here.
Example: *Here's a photo of my cat!*
#### How will you/everyone benefit from this feature?
Convince us! How does it change your NewPipe experience and/or your life?
The better this paragraph is, the more likely a developer will think about working on it.

View File

@ -1 +1,26 @@
<!-- Hey there. Thank you so much for improving NewPipe. Please take a moment to fill out the following suggestion on how to structure this PR description. Having roughly the same layout helps everyone considerably :)-->
#### What is it?
- [ ] Bug fix
- [ ] Feature
#### Long description of the changes in your PR
<!-- While bullet points are the norm in this section, feel free to write a text instead if you can't fit it in a list -->
- record videos
- create clones
- take over the world
#### Fixes the following issue(s)
<!-- Also add reddit or other links which are relevant to your change. -->
-
#### Relies on the following changes
<!-- Delete this if it doesn't apply to you. -->
-
#### Testing apk
<!-- Ensure that you have your changes on a new branch which has a meaningful name. This name will be used as a suffix for the app ID to allow installing and testing multiple versions of NewPipe. Do NOT name your branches like "patch-0" and "feature-1". For example, if your PR implements a bug fix for comments, an appropriate branch name would be "commentfix". -->
debug.zip
#### Agreement
- [ ] I carefully read the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md) and agree to them.

View File

@ -12,8 +12,8 @@ android {
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 28
versionCode 860
versionName "0.18.6"
versionCode 900
versionName "0.19.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@ -92,7 +92,7 @@ dependencies {
exclude module: 'support-annotations'
})
implementation 'com.github.TeamNewPipe:NewPipeExtractor:6446abc6d'
implementation 'com.github.TeamNewPipe:NewPipeExtractor:69e0624e3'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.23.0'

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.schabi.newpipe">
<application
android:name=".DebugApp"
tools:replace="android:name" />
</manifest>

View File

@ -250,14 +250,7 @@
<data android:host="tube.poal.co"/>
<data android:host="invidious.13ad.de"/>
<data android:host="yt.elukerio.org"/>
<!-- video prefix -->
<data android:pathPrefix="/embed/"/>
<data android:pathPrefix="/watch"/>
<!-- channel prefix -->
<data android:pathPrefix="/channel/"/>
<data android:pathPrefix="/user/"/>
<!-- playlist prefix -->
<data android:pathPrefix="/playlist"/>
<data android:pathPrefix="/"/>
</intent-filter>
<!-- Soundcloud filter -->
@ -283,8 +276,26 @@
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
<!-- MediaCCC filter -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH"/>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
<data android:host="media.ccc.de"/>
<!-- video prefix -->
<data android:pathPrefix="/v/"/>
<!-- channel prefix-->
<data android:pathPrefix="/c/"/>
<data android:pathPrefix="/b/"/>
</intent-filter>
</activity>
<service
android:name=".RouterActivity$FetcherService"
android:exported="false"/>

View File

@ -0,0 +1,318 @@
/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.fragment.app;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager.widget.PagerAdapter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
// TODO: Replace this deprecated class with its ViewPager2 counterpart
/**
* This is a copy from {@link androidx.fragment.app.FragmentStatePagerAdapter}.
* <p>
* It includes a workaround to fix the menu visibility when the adapter is restored.
* <p>
* When restoring the state of this adapter, all the fragments' menu visibility were set to false,
* effectively disabling the menu from the user until he switched pages or another event that triggered the
* menu to be visible again happened.
* <p>
* <br><b>Check out the changes in:</b>
* <ul>
* <li>{@link #saveState()}</li>
* <li>{@link #restoreState(Parcelable, ClassLoader)}</li>
* </ul>
*/
@SuppressWarnings("deprecation")
public abstract class FragmentStatePagerAdapterMenuWorkaround extends PagerAdapter {
private static final String TAG = "FragmentStatePagerAdapt";
private static final boolean DEBUG = false;
@Retention(RetentionPolicy.SOURCE)
@IntDef({BEHAVIOR_SET_USER_VISIBLE_HINT, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT})
private @interface Behavior { }
/**
* Indicates that {@link Fragment#setUserVisibleHint(boolean)} will be called when the current
* fragment changes.
*
* @deprecated This behavior relies on the deprecated
* {@link Fragment#setUserVisibleHint(boolean)} API. Use
* {@link #BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT} to switch to its replacement,
* {@link FragmentTransaction#setMaxLifecycle}.
* @see #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)
*/
@Deprecated
public static final int BEHAVIOR_SET_USER_VISIBLE_HINT = 0;
/**
* Indicates that only the current fragment will be in the {@link Lifecycle.State#RESUMED}
* state. All other Fragments are capped at {@link Lifecycle.State#STARTED}.
*
* @see #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)
*/
public static final int BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT = 1;
private final FragmentManager mFragmentManager;
private final int mBehavior;
private FragmentTransaction mCurTransaction = null;
private ArrayList<Fragment.SavedState> mSavedState = new ArrayList<Fragment.SavedState>();
private ArrayList<Fragment> mFragments = new ArrayList<Fragment>();
private Fragment mCurrentPrimaryItem = null;
/**
* Constructor for {@link FragmentStatePagerAdapterMenuWorkaround} that sets the fragment manager for the
* adapter. This is the equivalent of calling
* {@link #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)} and passing in
* {@link #BEHAVIOR_SET_USER_VISIBLE_HINT}.
*
* <p>Fragments will have {@link Fragment#setUserVisibleHint(boolean)} called whenever the
* current Fragment changes.</p>
*
* @param fm fragment manager that will interact with this adapter
* @deprecated use {@link #FragmentStatePagerAdapterMenuWorkaround(FragmentManager, int)} with
* {@link #BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT}
*/
@Deprecated
public FragmentStatePagerAdapterMenuWorkaround(@NonNull FragmentManager fm) {
this(fm, BEHAVIOR_SET_USER_VISIBLE_HINT);
}
/**
* Constructor for {@link FragmentStatePagerAdapterMenuWorkaround}.
*
* If {@link #BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT} is passed in, then only the current
* Fragment is in the {@link Lifecycle.State#RESUMED} state, while all other fragments are
* capped at {@link Lifecycle.State#STARTED}. If {@link #BEHAVIOR_SET_USER_VISIBLE_HINT} is
* passed, all fragments are in the {@link Lifecycle.State#RESUMED} state and there will be
* callbacks to {@link Fragment#setUserVisibleHint(boolean)}.
*
* @param fm fragment manager that will interact with this adapter
* @param behavior determines if only current fragments are in a resumed state
*/
public FragmentStatePagerAdapterMenuWorkaround(@NonNull FragmentManager fm,
@Behavior int behavior) {
mFragmentManager = fm;
mBehavior = behavior;
}
/**
* Return the Fragment associated with a specified position.
*/
@NonNull
public abstract Fragment getItem(int position);
@Override
public void startUpdate(@NonNull ViewGroup container) {
if (container.getId() == View.NO_ID) {
throw new IllegalStateException("ViewPager with adapter " + this
+ " requires a view id");
}
}
@SuppressWarnings("deprecation")
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (mFragments.size() > position) {
Fragment f = mFragments.get(position);
if (f != null) {
return f;
}
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
fragment.setInitialSavedState(fss);
}
}
while (mFragments.size() <= position) {
mFragments.add(null);
}
fragment.setMenuVisibility(false);
if (mBehavior == BEHAVIOR_SET_USER_VISIBLE_HINT) {
fragment.setUserVisibleHint(false);
}
mFragments.set(position, fragment);
mCurTransaction.add(container.getId(), fragment);
if (mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
mCurTransaction.setMaxLifecycle(fragment, Lifecycle.State.STARTED);
}
return fragment;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
Fragment fragment = (Fragment) object;
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
+ " v=" + ((Fragment)object).getView());
while (mSavedState.size() <= position) {
mSavedState.add(null);
}
mSavedState.set(position, fragment.isAdded()
? mFragmentManager.saveFragmentInstanceState(fragment) : null);
mFragments.set(position, null);
mCurTransaction.remove(fragment);
if (fragment == mCurrentPrimaryItem) {
mCurrentPrimaryItem = null;
}
}
@Override
@SuppressWarnings({"ReferenceEquality", "deprecation"})
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
Fragment fragment = (Fragment)object;
if (fragment != mCurrentPrimaryItem) {
if (mCurrentPrimaryItem != null) {
mCurrentPrimaryItem.setMenuVisibility(false);
if (mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
mCurTransaction.setMaxLifecycle(mCurrentPrimaryItem, Lifecycle.State.STARTED);
} else {
mCurrentPrimaryItem.setUserVisibleHint(false);
}
}
fragment.setMenuVisibility(true);
if (mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
mCurTransaction.setMaxLifecycle(fragment, Lifecycle.State.RESUMED);
} else {
fragment.setUserVisibleHint(true);
}
mCurrentPrimaryItem = fragment;
}
}
@Override
public void finishUpdate(@NonNull ViewGroup container) {
if (mCurTransaction != null) {
mCurTransaction.commitNowAllowingStateLoss();
mCurTransaction = null;
}
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return ((Fragment)object).getView() == view;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
private final String SELECTED_FRAGMENT = "selected_fragment";
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@Override
@Nullable
public Parcelable saveState() {
Bundle state = null;
if (mSavedState.size() > 0) {
state = new Bundle();
Fragment.SavedState[] fss = new Fragment.SavedState[mSavedState.size()];
mSavedState.toArray(fss);
state.putParcelableArray("states", fss);
}
for (int i=0; i<mFragments.size(); i++) {
Fragment f = mFragments.get(i);
if (f != null && f.isAdded()) {
if (state == null) {
state = new Bundle();
}
String key = "f" + i;
mFragmentManager.putFragment(state, key, f);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Check if it's the same fragment instance
if (f == mCurrentPrimaryItem) {
state.putString(SELECTED_FRAGMENT, key);
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
return state;
}
@Override
public void restoreState(@Nullable Parcelable state, @Nullable ClassLoader loader) {
if (state != null) {
Bundle bundle = (Bundle)state;
bundle.setClassLoader(loader);
Parcelable[] fss = bundle.getParcelableArray("states");
mSavedState.clear();
mFragments.clear();
if (fss != null) {
for (int i=0; i<fss.length; i++) {
mSavedState.add((Fragment.SavedState)fss[i]);
}
}
Iterable<String> keys = bundle.keySet();
for (String key: keys) {
if (key.startsWith("f")) {
int index = Integer.parseInt(key.substring(1));
Fragment f = mFragmentManager.getFragment(bundle, key);
if (f != null) {
while (mFragments.size() <= index) {
mFragments.add(null);
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
final boolean wasSelected = bundle.getString(SELECTED_FRAGMENT, "").equals(key);
f.setMenuVisibility(wasSelected);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mFragments.set(index, f);
} else {
Log.w(TAG, "Bad fragment at key " + key);
}
}
}
}
}
}

View File

@ -9,12 +9,6 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
@ -26,6 +20,12 @@ import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.fragment.app.FragmentManager;
import org.schabi.newpipe.download.DownloadDialog;
@ -51,12 +51,11 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView;
import org.schabi.newpipe.util.urlfinder.UrlFinder;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import icepick.Icepick;
@ -631,78 +630,18 @@ public class RouterActivity extends AppCompatActivity {
// Utils
//////////////////////////////////////////////////////////////////////////*/
/**
* Removes invisible separators (\p{Z}) and punctuation characters including
* brackets (\p{P}). See http://www.regular-expressions.info/unicode.html for
* more details.
*/
private final static String REGEX_REMOVE_FROM_URL = "[\\p{Z}\\p{P}]";
@Nullable
private String getUrl(Intent intent) {
// first gather data and find service
String videoUrl = null;
String foundUrl = null;
if (intent.getData() != null) {
// this means the video was called though another app
videoUrl = intent.getData().toString();
// Called from another app
foundUrl = intent.getData().toString();
} else if (intent.getStringExtra(Intent.EXTRA_TEXT) != null) {
//this means that vidoe was called through share menu
String extraText = intent.getStringExtra(Intent.EXTRA_TEXT);
final String[] uris = getUris(extraText);
videoUrl = uris.length > 0 ? uris[0] : null;
// Called from the share menu
final String extraText = intent.getStringExtra(Intent.EXTRA_TEXT);
foundUrl = UrlFinder.firstUrlFromInput(extraText);
}
return videoUrl;
}
private String removeHeadingGibberish(final String input) {
int start = 0;
for (int i = input.indexOf("://") - 1; i >= 0; i--) {
if (!input.substring(i, i + 1).matches("\\p{L}")) {
start = i + 1;
break;
}
}
return input.substring(start, input.length());
}
private String trim(final String input) {
if (input == null || input.length() < 1) {
return input;
} else {
String output = input;
while (output.length() > 0 && output.substring(0, 1).matches(REGEX_REMOVE_FROM_URL)) {
output = output.substring(1);
}
while (output.length() > 0
&& output.substring(output.length() - 1, output.length()).matches(REGEX_REMOVE_FROM_URL)) {
output = output.substring(0, output.length() - 1);
}
return output;
}
}
/**
* Retrieves all Strings which look remotely like URLs from a text.
* Used if NewPipe was called through share menu.
*
* @param sharedText text to scan for URLs.
* @return potential URLs
*/
protected String[] getUris(final String sharedText) {
final Collection<String> result = new HashSet<>();
if (sharedText != null) {
final String[] array = sharedText.split("\\p{Space}");
for (String s : array) {
s = trim(s);
if (s.length() != 0) {
if (s.matches(".+://.+")) {
result.add(removeHeadingGibberish(s));
} else if (s.matches(".+\\..+")) {
result.add("http://" + s);
}
}
}
}
return result.toArray(new String[result.size()]);
return foundUrl;
}
}

View File

@ -17,6 +17,7 @@ import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
import org.schabi.newpipe.ReCaptchaActivity;
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
@ -181,6 +182,9 @@ public abstract class BaseStateFragment<I> extends BaseFragment implements ViewC
if (exception instanceof ReCaptchaException) {
onReCaptchaException((ReCaptchaException) exception);
return true;
} else if (exception instanceof ContentNotAvailableException) {
showError(getString(R.string.content_not_available), false);
return true;
} else if (exception instanceof IOException) {
showError(getString(R.string.network_error), true);
return true;

View File

@ -16,7 +16,7 @@ import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.fragment.app.FragmentStatePagerAdapterMenuWorkaround;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
@ -185,7 +185,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
updateTitleForTab(tab.getPosition());
}
private static class SelectedTabsPagerAdapter extends FragmentStatePagerAdapter {
private static class SelectedTabsPagerAdapter extends FragmentStatePagerAdapterMenuWorkaround {
private final Context context;
private final List<Tab> internalTabsList;

View File

@ -51,7 +51,6 @@ import org.schabi.newpipe.download.DownloadDialog;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.ServiceList;
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor;
@ -1223,20 +1222,12 @@ public class VideoDetailFragment
protected boolean onError(Throwable exception) {
if (super.onError(exception)) return true;
else if (exception instanceof ContentNotAvailableException) {
showError(getString(R.string.content_not_available), false);
} else {
int errorId = exception instanceof YoutubeStreamExtractor.DecryptException
? R.string.youtube_signature_decryption_error
: exception instanceof ParsingException
? R.string.parsing_error
: R.string.general_error;
onUnrecoverableError(exception,
UserAction.REQUESTED_STREAM,
NewPipe.getNameOfService(serviceId),
url,
errorId);
}
int errorId = exception instanceof YoutubeStreamExtractor.DecryptException ? R.string.youtube_signature_decryption_error
: exception instanceof ExtractionException ? R.string.parsing_error
: R.string.general_error;
onUnrecoverableError(exception, UserAction.REQUESTED_STREAM,
NewPipe.getNameOfService(serviceId), url, errorId);
return true;
}

View File

@ -440,16 +440,12 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
protected boolean onError(Throwable exception) {
if (super.onError(exception)) return true;
if (exception instanceof ContentNotAvailableException) {
showError(getString(R.string.content_not_available), false);
} else {
int errorId = exception instanceof ExtractionException ? R.string.parsing_error : R.string.general_error;
onUnrecoverableError(exception,
UserAction.REQUESTED_CHANNEL,
NewPipe.getNameOfService(serviceId),
url,
errorId);
}
int errorId = exception instanceof ExtractionException
? R.string.parsing_error : R.string.general_error;
onUnrecoverableError(exception, UserAction.REQUESTED_CHANNEL,
NewPipe.getNameOfService(serviceId), url, errorId);
return true;
}

View File

@ -5,7 +5,7 @@ import android.view.ViewGroup;
import org.schabi.newpipe.R;
import org.schabi.newpipe.info_list.InfoItemBuilder;
public class StreamGridInfoItemHolder extends StreamMiniInfoItemHolder {
public class StreamGridInfoItemHolder extends StreamInfoItemHolder {
public StreamGridInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_stream_grid_item, parent);

View File

@ -40,7 +40,11 @@ public class StreamInfoItemHolder extends StreamMiniInfoItemHolder {
public final TextView itemAdditionalDetails;
public StreamInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) {
super(infoItemBuilder, R.layout.list_stream_item, parent);
this(infoItemBuilder, R.layout.list_stream_item, parent);
}
public StreamInfoItemHolder(InfoItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) {
super(infoItemBuilder, layoutId, parent);
itemAdditionalDetails = itemView.findViewById(R.id.itemAdditionalDetails);
}

View File

@ -128,7 +128,7 @@ class FeedFragment : BaseListFragment<FeedState, Unit>() {
.putBoolean(getString(R.string.feed_use_dedicated_fetch_method_key), !usingDedicatedMethod)
.apply()
}
.setPositiveButton(android.R.string.ok, null)
.setPositiveButton(resources.getString(R.string.finish), null)
.create()
.show()
return true

View File

@ -189,7 +189,8 @@ class FeedGroupDialog : DialogFragment() {
val groupAdapter = GroupAdapter<GroupieViewHolder>()
groupAdapter.spanCount = if (useGridLayout) 4 else 1
val selectedCountText = getString(R.string.feed_group_dialog_selection_count, this.selectedSubscriptions.size)
val subscriptionsCount = this.selectedSubscriptions.size
val selectedCountText = resources.getQuantityString(R.plurals.feed_group_dialog_selection_count, subscriptionsCount, subscriptionsCount)
selected_subscription_count_view.text = selectedCountText
subscriptions_selector_header_info.text = selectedCountText
@ -234,7 +235,8 @@ class FeedGroupDialog : DialogFragment() {
item.isSelected = isSelected
item.notifyChanged(PickerSubscriptionItem.UPDATE_SELECTED)
val updateSelectedCountText = getString(R.string.feed_group_dialog_selection_count, this.selectedSubscriptions.size)
val subscriptionsCount = this.selectedSubscriptions.size
val updateSelectedCountText = resources.getQuantityString(R.plurals.feed_group_dialog_selection_count, subscriptionsCount, subscriptionsCount)
selected_subscription_count_view.text = updateSelectedCountText
subscriptions_selector_header_info.text = updateSelectedCountText
}

View File

@ -448,7 +448,8 @@ public final class MainVideoPlayer extends AppCompatActivity
}
protected void setMuteButton(final ImageButton muteButton, final boolean isMuted) {
muteButton.setColorFilter(ContextCompat.getColor(getApplicationContext(), isMuted ? R.color.white : R.color.gray));
muteButton.setImageDrawable(AppCompatResources.getDrawable(getApplicationContext(),
isMuted ? R.drawable.ic_volume_off_white_72dp : R.drawable.ic_volume_up_white_72dp));
}

View File

@ -3,14 +3,12 @@ package org.schabi.newpipe.player;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
@ -700,11 +698,13 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
item.setTitle(player.isMuted() ? R.string.unmute : R.string.mute);
//2) Icon change accordingly to current App Theme
TypedArray a = getTheme().obtainStyledAttributes(R.style.Theme_AppCompat, new int[]{R.attr.volume_off});
int attributeResourceId = a.getResourceId(0, 0);
Drawable drawableMuted = getResources().getDrawable(attributeResourceId);
Drawable drawableUnmuted = getResources().getDrawable(R.drawable.ic_volume_off_gray_24dp);
item.setIcon(player.isMuted() ? drawableMuted : drawableUnmuted);
item.setIcon(player.isMuted() ? getThemedDrawable(R.attr.volume_off) : getThemedDrawable(R.attr.volume_on));
}
}
private Drawable getThemedDrawable(int attribute) {
return getResources().getDrawable(
getTheme().obtainStyledAttributes(R.style.Theme_AppCompat, new int[]{attribute})
.getResourceId(0, 0));
}
}

View File

@ -76,7 +76,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
displayedDurationValues.add(durationsValue);
try {
displayedDescriptionValues.add(String.format(
res.getQuantityString(R.plurals.dynamic_seek_duration_description,
res.getQuantityString(R.plurals.seconds,
currentDurationValue),
currentDurationValue));
} catch (Resources.NotFoundException ignored) {
@ -88,7 +88,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment {
durations.setEntryValues(displayedDurationValues.toArray(new CharSequence[0]));
durations.setEntries(displayedDescriptionValues.toArray(new CharSequence[0]));
final int selectedDuration = Integer.parseInt(durations.getValue());
if (selectedDuration / (int) DateUtils.SECOND_IN_MILLIS % 10 == 5) {
if (inexactSeek && selectedDuration / (int) DateUtils.SECOND_IN_MILLIS % 10 == 5) {
final int newDuration = selectedDuration / (int) DateUtils.SECOND_IN_MILLIS + 5;
durations.setValue(Integer.toString(newDuration * (int) DateUtils.SECOND_IN_MILLIS));

View File

@ -37,6 +37,7 @@ public class WebMReader {
private final static int ID_DefaultDuration = 0x3E383;
private final static int ID_FlagLacing = 0x1C;
private final static int ID_CodecDelay = 0x16AA;
private final static int ID_SeekPreRoll = 0x16BB;
private final static int ID_Cluster = 0x0F43B675;
private final static int ID_Timecode = 0x67;
@ -332,6 +333,10 @@ public class WebMReader {
break;
case ID_CodecDelay:
entry.codecDelay = readNumber(elem);
break;
case ID_SeekPreRoll:
entry.seekPreRoll = readNumber(elem);
break;
default:
break;
}
@ -414,8 +419,9 @@ public class WebMReader {
public byte[] codecPrivate;
public byte[] bMetadata;
public TrackKind kind;
public long defaultDuration;
public long codecDelay;
public long defaultDuration = -1;
public long codecDelay = -1;
public long seekPreRoll = -1;
}
public class Segment {

View File

@ -23,7 +23,10 @@ public class WebMWriter implements Closeable {
private final static int BUFFER_SIZE = 8 * 1024;
private final static int DEFAULT_TIMECODE_SCALE = 1000000;
private final static int INTERV = 100;// 100ms on 1000000us timecode scale
private final static int DEFAULT_CUES_EACH_MS = 5000;// 100ms on 1000000us timecode scale
private final static int DEFAULT_CUES_EACH_MS = 5000;// 5000ms on 1000000us timecode scale
private final static byte CLUSTER_HEADER_SIZE = 8;
private final static int CUE_RESERVE_SIZE = 65535;
private final static byte MINIMUM_EBML_VOID_SIZE = 4;
private WebMReader.WebMTrack[] infoTracks;
private SharpStream[] sourceTracks;
@ -38,15 +41,18 @@ public class WebMWriter implements Closeable {
private Segment[] readersSegment;
private Cluster[] readersCluster;
private int[] predefinedDurations;
private ArrayList<ClusterInfo> clustersOffsetsSizes;
private byte[] outBuffer;
private ByteBuffer outByteBuffer;
public WebMWriter(SharpStream... source) {
sourceTracks = source;
readers = new WebMReader[sourceTracks.length];
infoTracks = new WebMTrack[sourceTracks.length];
outBuffer = new byte[BUFFER_SIZE];
outByteBuffer = ByteBuffer.wrap(outBuffer);
clustersOffsetsSizes = new ArrayList<>(256);
}
public WebMTrack[] getTracksFromSource(int sourceIndex) throws IllegalStateException {
@ -83,11 +89,9 @@ public class WebMWriter implements Closeable {
try {
readersSegment = new Segment[readers.length];
readersCluster = new Cluster[readers.length];
predefinedDurations = new int[readers.length];
for (int i = 0; i < readers.length; i++) {
infoTracks[i] = readers[i].selectTrack(trackIndex[i]);
predefinedDurations[i] = -1;
readersSegment[i] = readers[i].getNextSegment();
}
} finally {
@ -118,6 +122,8 @@ public class WebMWriter implements Closeable {
readersSegment = null;
readersCluster = null;
outBuffer = null;
outByteBuffer = null;
clustersOffsetsSizes = null;
}
public void build(SharpStream out) throws IOException, RuntimeException {
@ -140,7 +146,7 @@ public class WebMWriter implements Closeable {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00// segment content size
});
long baseSegmentOffset = written + listBuffer.get(0).length;
long segmentOffset = written + listBuffer.get(0).length;
/* seek head */
listBuffer.add(new byte[]{
@ -177,20 +183,22 @@ public class WebMWriter implements Closeable {
/* tracks */
listBuffer.addAll(makeTracks());
for (byte[] buff : listBuffer) {
dump(buff, out);
}
dump(listBuffer, out);
// reserve space for Cues element, but is a waste of space (actually is 64 KiB)
// TODO: better Cue maker
long cueReservedOffset = written;
dump(new byte[]{(byte) 0xec, 0x20, (byte) 0xff, (byte) 0xfb}, out);
int reserved = (1024 * 63) - 4;
while (reserved > 0) {
int write = Math.min(reserved, outBuffer.length);
out.write(outBuffer, 0, write);
reserved -= write;
written += write;
// reserve space for Cues element
long cueOffset = written;
make_EBML_void(out, CUE_RESERVE_SIZE, true);
int[] defaultSampleDuration = new int[infoTracks.length];
long[] duration = new long[infoTracks.length];
for (int i = 0; i < infoTracks.length; i++) {
if (infoTracks[i].defaultDuration < 0) {
defaultSampleDuration[i] = -1;// not available
} else {
defaultSampleDuration[i] = (int) Math.ceil(infoTracks[i].defaultDuration / (float) DEFAULT_TIMECODE_SCALE);
}
duration[i] = -1;
}
// Select a track for the cue
@ -198,16 +206,8 @@ public class WebMWriter implements Closeable {
long nextCueTime = infoTracks[cuesForTrackId].trackType == 1 ? -1 : 0;
ArrayList<KeyFrame> keyFrames = new ArrayList<>(32);
ArrayList<Long> clusterOffsets = new ArrayList<>(32);
ArrayList<Integer> clusterSizes = new ArrayList<>(32);
long duration = 0;
int durationFromTrackId = 0;
byte[] bTimecode = makeTimecode(0);
int firstClusterOffset = (int) written;
long currentClusterOffset = makeCluster(out, bTimecode, 0, clusterOffsets, clusterSizes);
long currentClusterOffset = makeCluster(out, 0, 0, true);
long baseTimecode = 0;
long limitTimecode = -1;
@ -239,8 +239,7 @@ public class WebMWriter implements Closeable {
newClusterByTrackId = -1;
baseTimecode = bloq.absoluteTimecode;
limitTimecode = baseTimecode + INTERV;
bTimecode = makeTimecode(baseTimecode);
currentClusterOffset = makeCluster(out, bTimecode, currentClusterOffset, clusterOffsets, clusterSizes);
currentClusterOffset = makeCluster(out, baseTimecode, currentClusterOffset, true);
}
if (cuesForTrackId == i) {
@ -248,19 +247,18 @@ public class WebMWriter implements Closeable {
if (nextCueTime > -1) {
nextCueTime += DEFAULT_CUES_EACH_MS;
}
keyFrames.add(
new KeyFrame(baseSegmentOffset, currentClusterOffset - 8, written, bTimecode.length, bloq.absoluteTimecode)
);
keyFrames.add(new KeyFrame(segmentOffset, currentClusterOffset, written, bloq.absoluteTimecode));
}
}
writeBlock(out, bloq, baseTimecode);
blockWritten++;
if (bloq.absoluteTimecode > duration) {
duration = bloq.absoluteTimecode;
durationFromTrackId = bloq.trackNumber;
if (defaultSampleDuration[i] < 0 && duration[i] >= 0) {
// if the sample duration in unknown, calculate using current_duration - previous_duration
defaultSampleDuration[i] = (int) (bloq.absoluteTimecode - duration[i]);
}
duration[i] = bloq.absoluteTimecode;
if (limitTimecode < 0) {
limitTimecode = bloq.absoluteTimecode + INTERV;
@ -276,55 +274,61 @@ public class WebMWriter implements Closeable {
}
}
makeCluster(out, null, currentClusterOffset, null, clusterSizes);
makeCluster(out, -1, currentClusterOffset, false);
long segmentSize = written - offsetSegmentSizeSet - 7;
/* ---- final step write offsets and sizes ---- */
/* Segment size */
seekTo(out, offsetSegmentSizeSet);
writeLong(out, segmentSize);
outByteBuffer.putLong(0, segmentSize);
out.write(outBuffer, 1, DataReader.LONG_SIZE - 1);
if (predefinedDurations[durationFromTrackId] > -1) {
duration += predefinedDurations[durationFromTrackId];// this value is full-filled in makeTrackEntry() method
}
seekTo(out, offsetInfoDurationSet);
writeFloat(out, duration);
firstClusterOffset -= baseSegmentOffset;
seekTo(out, offsetClusterSet);
writeInt(out, firstClusterOffset);
seekTo(out, cueReservedOffset);
/* Cue */
dump(new byte[]{0x1c, 0x53, (byte) 0xbb, 0x6b, 0x20, 0x00, 0x00}, out);
for (KeyFrame keyFrame : keyFrames) {
for (byte[] buffer : makeCuePoint(cuesForTrackId, keyFrame)) {
dump(buffer, out);
if (written >= (cueReservedOffset + 65535 - 16)) {
throw new IOException("Too many Cues");
}
/* Segment duration */
long longestDuration = 0;
for (int i = 0; i < duration.length; i++) {
if (defaultSampleDuration[i] > 0) {
duration[i] += defaultSampleDuration[i];
}
if (duration[i] > longestDuration) {
longestDuration = duration[i];
}
}
short cueSize = (short) (written - cueReservedOffset - 7);
seekTo(out, offsetInfoDurationSet);
outByteBuffer.putFloat(0, longestDuration);
dump(outBuffer, DataReader.FLOAT_SIZE, out);
/* EBML Void */
ByteBuffer voidBuffer = ByteBuffer.allocate(4);
voidBuffer.putShort((short) 0xec20);
voidBuffer.putShort((short) (firstClusterOffset - written - 4));
dump(voidBuffer.array(), out);
/* first Cluster offset */
firstClusterOffset -= segmentOffset;
writeInt(out, offsetClusterSet, firstClusterOffset);
seekTo(out, offsetCuesSet);
writeInt(out, (int) (cueReservedOffset - baseSegmentOffset));
seekTo(out, cueOffset);
seekTo(out, cueReservedOffset + 5);
writeShort(out, cueSize);
/* Cue */
short cueSize = 0;
dump(new byte[]{0x1c, 0x53, (byte) 0xbb, 0x6b, 0x20, 0x00, 0x00}, out);// header size is 7
for (int i = 0; i < clusterSizes.size(); i++) {
seekTo(out, clusterOffsets.get(i));
byte[] buffer = ByteBuffer.allocate(4).putInt(clusterSizes.get(i) | 0x10000000).array();
dump(buffer, out);
for (KeyFrame keyFrame : keyFrames) {
int size = makeCuePoint(cuesForTrackId, keyFrame, outBuffer);
if ((cueSize + size + 7 + MINIMUM_EBML_VOID_SIZE) > CUE_RESERVE_SIZE) {
break;// no space left
}
cueSize += size;
dump(outBuffer, size, out);
}
make_EBML_void(out, CUE_RESERVE_SIZE - cueSize - 7, false);
seekTo(out, cueOffset + 5);
outByteBuffer.putShort(0, cueSize);
dump(outBuffer, DataReader.SHORT_SIZE, out);
/* seek head, seek for cues element */
writeInt(out, offsetCuesSet, (int) (cueOffset - segmentOffset));
for (ClusterInfo cluster : clustersOffsetsSizes) {
writeInt(out, cluster.offset, cluster.size | 0x10000000);
}
}
@ -375,25 +379,10 @@ public class WebMWriter implements Closeable {
written = offset;
}
private void writeLong(SharpStream stream, long number) throws IOException {
byte[] buffer = ByteBuffer.allocate(DataReader.LONG_SIZE).putLong(number).array();
stream.write(buffer, 1, buffer.length - 1);
written += buffer.length - 1;
}
private void writeFloat(SharpStream stream, float number) throws IOException {
byte[] buffer = ByteBuffer.allocate(DataReader.FLOAT_SIZE).putFloat(number).array();
dump(buffer, stream);
}
private void writeShort(SharpStream stream, short number) throws IOException {
byte[] buffer = ByteBuffer.allocate(DataReader.SHORT_SIZE).putShort(number).array();
dump(buffer, stream);
}
private void writeInt(SharpStream stream, int number) throws IOException {
byte[] buffer = ByteBuffer.allocate(DataReader.INTEGER_SIZE).putInt(number).array();
dump(buffer, stream);
private void writeInt(SharpStream stream, long offset, int number) throws IOException {
seekTo(stream, offset);
outByteBuffer.putInt(0, number);
dump(outBuffer, DataReader.INTEGER_SIZE, stream);
}
private void writeBlock(SharpStream stream, Block bloq, long clusterTimecode) throws IOException {
@ -416,47 +405,43 @@ public class WebMWriter implements Closeable {
}
listBuffer.set(1, encode(blockSize, false));
for (byte[] buff : listBuffer) {
dump(buff, stream);
}
dump(listBuffer, stream);
int read;
while ((read = bloq.data.read(outBuffer)) > 0) {
stream.write(outBuffer, 0, read);
written += read;
dump(outBuffer, read, stream);
}
}
private byte[] makeTimecode(long timecode) {
ByteBuffer buffer = ByteBuffer.allocate(9);
buffer.put((byte) 0xe7);
buffer.put(encode(timecode, true));
private long makeCluster(SharpStream stream, long timecode, long offset, boolean create) throws IOException {
ClusterInfo cluster;
byte[] res = new byte[buffer.position()];
System.arraycopy(buffer.array(), 0, res, 0, res.length);
return res;
}
private long makeCluster(SharpStream stream, byte[] bTimecode, long startOffset, ArrayList<Long> clusterOffsets, ArrayList<Integer> clusterSizes) throws IOException {
if (startOffset > 0) {
clusterSizes.add((int) (written - startOffset));// size for last offset
if (offset > 0) {
// save the size of the previous cluster (maximum 256 MiB)
cluster = clustersOffsetsSizes.get(clustersOffsetsSizes.size() - 1);
cluster.size = (int) (written - offset - CLUSTER_HEADER_SIZE);
}
if (clusterOffsets != null) {
offset = written;
if (create) {
/* cluster */
dump(new byte[]{0x1f, 0x43, (byte) 0xb6, 0x75}, stream);
clusterOffsets.add(written);// warning: max cluster size is 256 MiB
dump(new byte[]{0x10, 0x00, 0x00, 0x00}, stream);
startOffset = written;// size for the this cluster
cluster = new ClusterInfo();
cluster.offset = written;
clustersOffsetsSizes.add(cluster);
dump(bTimecode, stream);
dump(new byte[]{
0x10, 0x00, 0x00, 0x00,
/* timestamp */
(byte) 0xe7
}, stream);
return startOffset;
dump(encode(timecode, true), stream);
}
return -1;
return offset;
}
private void makeEBML(SharpStream stream) throws IOException {
@ -509,13 +494,24 @@ public class WebMWriter implements Closeable {
buffer.add(new byte[]{(byte) 0x86});
buffer.addAll(encode(track.codecId));
/* codec delay*/
if (track.codecDelay >= 0) {
buffer.add(new byte[]{0x56, (byte) 0xAA});
buffer.add(encode(track.codecDelay, true));
}
/* codec seek pre-roll*/
if (track.seekPreRoll >= 0) {
buffer.add(new byte[]{0x56, (byte) 0xBB});
buffer.add(encode(track.seekPreRoll, true));
}
/* type */
buffer.add(new byte[]{(byte) 0x83});
buffer.add(encode(track.trackType, true));
/* default duration */
if (track.defaultDuration != 0) {
predefinedDurations[internalTrackId] = (int) Math.ceil(track.defaultDuration / (float) DEFAULT_TIMECODE_SCALE);
if (track.defaultDuration >= 0) {
buffer.add(new byte[]{0x23, (byte) 0xe3, (byte) 0x83});
buffer.add(encode(track.defaultDuration, true));
}
@ -538,21 +534,29 @@ public class WebMWriter implements Closeable {
}
private ArrayList<byte[]> makeCuePoint(int internalTrackId, KeyFrame keyFrame) {
ArrayList<byte[]> buffer = new ArrayList<>(5);
private int makeCuePoint(int internalTrackId, KeyFrame keyFrame, byte[] buffer) {
ArrayList<byte[]> cue = new ArrayList<>(5);
/* CuePoint */
buffer.add(new byte[]{(byte) 0xbb});
buffer.add(null);
cue.add(new byte[]{(byte) 0xbb});
cue.add(null);
/* CueTime */
buffer.add(new byte[]{(byte) 0xb3});
buffer.add(encode(keyFrame.atTimecode, true));
cue.add(new byte[]{(byte) 0xb3});
cue.add(encode(keyFrame.duration, true));
/* CueTrackPosition */
buffer.addAll(makeCueTrackPosition(internalTrackId, keyFrame));
cue.addAll(makeCueTrackPosition(internalTrackId, keyFrame));
return lengthFor(buffer);
int size = 0;
lengthFor(cue);
for (byte[] buff : cue) {
System.arraycopy(buff, 0, buffer, size, buff.length);
size += buff.length;
}
return size;
}
private ArrayList<byte[]> makeCueTrackPosition(int internalTrackId, KeyFrame keyFrame) {
@ -568,20 +572,48 @@ public class WebMWriter implements Closeable {
/* CueClusterPosition */
buffer.add(new byte[]{(byte) 0xf1});
buffer.add(encode(keyFrame.atCluster, true));
buffer.add(encode(keyFrame.clusterPosition, true));
/* CueRelativePosition */
if (keyFrame.atBlock > 0) {
if (keyFrame.relativePosition > 0) {
buffer.add(new byte[]{(byte) 0xf0});
buffer.add(encode(keyFrame.atBlock, true));
buffer.add(encode(keyFrame.relativePosition, true));
}
return lengthFor(buffer);
}
private void make_EBML_void(SharpStream out, int size, boolean wipe) throws IOException {
/* ebml void */
outByteBuffer.putShort(0, (short) 0xec20);
outByteBuffer.putShort(2, (short) (size - 4));
dump(outBuffer, 4, out);
if (wipe) {
size -= 4;
while (size > 0) {
int write = Math.min(size, outBuffer.length);
dump(outBuffer, write, out);
size -= write;
}
}
}
private void dump(byte[] buffer, SharpStream stream) throws IOException {
stream.write(buffer);
written += buffer.length;
dump(buffer, buffer.length, stream);
}
private void dump(byte[] buffer, int count, SharpStream stream) throws IOException {
stream.write(buffer, 0, count);
written += count;
}
private void dump(ArrayList<byte[]> buffers, SharpStream stream) throws IOException {
for (byte[] buffer : buffers) {
stream.write(buffer);
written += buffer.length;
}
}
private ArrayList<byte[]> lengthFor(ArrayList<byte[]> buffer) {
@ -614,11 +646,11 @@ public class WebMWriter implements Closeable {
byte[] buffer = new byte[offset + length];
long marker = (long) Math.floor((length - 1f) / 8f);
float mul = 1;
for (int i = length - 1; i >= 0; i--, mul *= 0x100) {
long b = (long) Math.floor(number / mul);
int shift = 0;
for (int i = length - 1; i >= 0; i--, shift += 8) {
long b = number >>> shift;
if (!withLength && i == marker) {
b = b | (0x80 >> (length - 1));
b = b | (0x80 >>> (length - 1));
}
buffer[offset + i] = (byte) b;
}
@ -686,17 +718,15 @@ public class WebMWriter implements Closeable {
class KeyFrame {
KeyFrame(long segment, long cluster, long block, int bTimecodeLength, long timecode) {
atCluster = cluster - segment;
if ((block - bTimecodeLength) > cluster) {
atBlock = (int) (block - cluster);
}
atTimecode = timecode;
KeyFrame(long segment, long cluster, long block, long timecode) {
clusterPosition = cluster - segment;
relativePosition = (int) (block - cluster - CLUSTER_HEADER_SIZE);
duration = timecode;
}
long atCluster;
int atBlock;
long atTimecode;
final long clusterPosition;
final int relativePosition;
final long duration;
}
class Block {
@ -717,4 +747,11 @@ public class WebMWriter implements Closeable {
return String.format("trackNumber=%s isKeyFrame=%S absoluteTimecode=%s", trackNumber, isKeyframe(), absoluteTimecode);
}
}
class ClusterInfo {
long offset;
int size;
}
}

View File

@ -0,0 +1,360 @@
/* THIS FILE WAS MODIFIED, CHANGES ARE DOCUMENTED. */
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.schabi.newpipe.util.urlfinder;
import androidx.annotation.RestrictTo;
import java.util.regex.Pattern;
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
/**
* Commonly used regular expression patterns.
*/
public final class PatternsCompat {
/**
* Regular expression to match all IANA top-level domains.
*
* List accurate as of 2015/11/24. List taken from:
* http://data.iana.org/TLD/tlds-alpha-by-domain.txt
* This pattern is auto-generated by frameworks/ex/common/tools/make-iana-tld-pattern.py
*/
static final String IANA_TOP_LEVEL_DOMAINS =
"(?:"
+ "(?:aaa|aarp|abb|abbott|abogado|academy|accenture|accountant|accountants|aco|active"
+ "|actor|ads|adult|aeg|aero|afl|agency|aig|airforce|airtel|allfinanz|alsace|amica|amsterdam"
+ "|android|apartments|app|apple|aquarelle|aramco|archi|army|arpa|arte|asia|associates"
+ "|attorney|auction|audio|auto|autos|axa|azure|a[cdefgilmoqrstuwxz])"
+ "|(?:band|bank|bar|barcelona|barclaycard|barclays|bargains|bauhaus|bayern|bbc|bbva"
+ "|bcn|beats|beer|bentley|berlin|best|bet|bharti|bible|bid|bike|bing|bingo|bio|biz|black"
+ "|blackfriday|bloomberg|blue|bms|bmw|bnl|bnpparibas|boats|bom|bond|boo|boots|boutique"
+ "|bradesco|bridgestone|broadway|broker|brother|brussels|budapest|build|builders|business"
+ "|buzz|bzh|b[abdefghijmnorstvwyz])"
+ "|(?:cab|cafe|cal|camera|camp|cancerresearch|canon|capetown|capital|car|caravan|cards"
+ "|care|career|careers|cars|cartier|casa|cash|casino|cat|catering|cba|cbn|ceb|center|ceo"
+ "|cern|cfa|cfd|chanel|channel|chat|cheap|chloe|christmas|chrome|church|cipriani|cisco"
+ "|citic|city|cityeats|claims|cleaning|click|clinic|clothing|cloud|club|clubmed|coach"
+ "|codes|coffee|college|cologne|com|commbank|community|company|computer|comsec|condos"
+ "|construction|consulting|contractors|cooking|cool|coop|corsica|country|coupons|courses"
+ "|credit|creditcard|creditunion|cricket|crown|crs|cruises|csc|cuisinella|cymru|cyou|c[acdfghiklmnoruvwxyz])"
+ "|(?:dabur|dad|dance|date|dating|datsun|day|dclk|deals|degree|delivery|dell|delta"
+ "|democrat|dental|dentist|desi|design|dev|diamonds|diet|digital|direct|directory|discount"
+ "|dnp|docs|dog|doha|domains|doosan|download|drive|durban|dvag|d[ejkmoz])"
+ "|(?:earth|eat|edu|education|email|emerck|energy|engineer|engineering|enterprises"
+ "|epson|equipment|erni|esq|estate|eurovision|eus|events|everbank|exchange|expert|exposed"
+ "|express|e[cegrstu])"
+ "|(?:fage|fail|fairwinds|faith|family|fan|fans|farm|fashion|feedback|ferrero|film"
+ "|final|finance|financial|firmdale|fish|fishing|fit|fitness|flights|florist|flowers|flsmidth"
+ "|fly|foo|football|forex|forsale|forum|foundation|frl|frogans|fund|furniture|futbol|fyi"
+ "|f[ijkmor])"
+ "|(?:gal|gallery|game|garden|gbiz|gdn|gea|gent|genting|ggee|gift|gifts|gives|giving"
+ "|glass|gle|global|globo|gmail|gmo|gmx|gold|goldpoint|golf|goo|goog|google|gop|gov|grainger"
+ "|graphics|gratis|green|gripe|group|gucci|guge|guide|guitars|guru|g[abdefghilmnpqrstuwy])"
+ "|(?:hamburg|hangout|haus|healthcare|help|here|hermes|hiphop|hitachi|hiv|hockey|holdings"
+ "|holiday|homedepot|homes|honda|horse|host|hosting|hoteles|hotmail|house|how|hsbc|hyundai"
+ "|h[kmnrtu])"
+ "|(?:ibm|icbc|ice|icu|ifm|iinet|immo|immobilien|industries|infiniti|info|ing|ink|institute"
+ "|insure|int|international|investments|ipiranga|irish|ist|istanbul|itau|iwc|i[delmnoqrst])"
+ "|(?:jaguar|java|jcb|jetzt|jewelry|jlc|jll|jobs|joburg|jprs|juegos|j[emop])"
+ "|(?:kaufen|kddi|kia|kim|kinder|kitchen|kiwi|koeln|komatsu|krd|kred|kyoto|k[eghimnprwyz])"
+ "|(?:lacaixa|lancaster|land|landrover|lasalle|lat|latrobe|law|lawyer|lds|lease|leclerc"
+ "|legal|lexus|lgbt|liaison|lidl|life|lifestyle|lighting|limited|limo|linde|link|live"
+ "|lixil|loan|loans|lol|london|lotte|lotto|love|ltd|ltda|lupin|luxe|luxury|l[abcikrstuvy])"
+ "|(?:madrid|maif|maison|man|management|mango|market|marketing|markets|marriott|mba"
+ "|media|meet|melbourne|meme|memorial|men|menu|meo|miami|microsoft|mil|mini|mma|mobi|moda"
+ "|moe|moi|mom|monash|money|montblanc|mormon|mortgage|moscow|motorcycles|mov|movie|movistar"
+ "|mtn|mtpc|mtr|museum|mutuelle|m[acdeghklmnopqrstuvwxyz])"
+ "|(?:nadex|nagoya|name|navy|nec|net|netbank|network|neustar|new|news|nexus|ngo|nhk"
+ "|nico|ninja|nissan|nokia|nra|nrw|ntt|nyc|n[acefgilopruz])"
+ "|(?:obi|office|okinawa|omega|one|ong|onl|online|ooo|oracle|orange|org|organic|osaka"
+ "|otsuka|ovh|om)"
+ "|(?:page|panerai|paris|partners|parts|party|pet|pharmacy|philips|photo|photography"
+ "|photos|physio|piaget|pics|pictet|pictures|ping|pink|pizza|place|play|playstation|plumbing"
+ "|plus|pohl|poker|porn|post|praxi|press|pro|prod|productions|prof|properties|property"
+ "|protection|pub|p[aefghklmnrstwy])"
+ "|(?:qpon|quebec|qa)"
+ "|(?:racing|realtor|realty|recipes|red|redstone|rehab|reise|reisen|reit|ren|rent|rentals"
+ "|repair|report|republican|rest|restaurant|review|reviews|rich|ricoh|rio|rip|rocher|rocks"
+ "|rodeo|rsvp|ruhr|run|rwe|ryukyu|r[eosuw])"
+ "|(?:saarland|sakura|sale|samsung|sandvik|sandvikcoromant|sanofi|sap|sapo|sarl|saxo"
+ "|sbs|sca|scb|schmidt|scholarships|school|schule|schwarz|science|scor|scot|seat|security"
+ "|seek|sener|services|seven|sew|sex|sexy|shiksha|shoes|show|shriram|singles|site|ski"
+ "|sky|skype|sncf|soccer|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting"
+ "|srl|stada|starhub|statoil|stc|stcgroup|stockholm|studio|study|style|sucks|supplies"
+ "|supply|support|surf|surgery|suzuki|swatch|swiss|sydney|systems|s[abcdeghijklmnortuvxyz])"
+ "|(?:tab|taipei|tatamotors|tatar|tattoo|tax|taxi|team|tech|technology|tel|telefonica"
+ "|temasek|tennis|thd|theater|theatre|tickets|tienda|tips|tires|tirol|today|tokyo|tools"
+ "|top|toray|toshiba|tours|town|toyota|toys|trade|trading|training|travel|trust|tui|t[cdfghjklmnortvwz])"
+ "|(?:ubs|university|uno|uol|u[agksyz])"
+ "|(?:vacations|vana|vegas|ventures|versicherung|vet|viajes|video|villas|vin|virgin"
+ "|vision|vista|vistaprint|viva|vlaanderen|vodka|vote|voting|voto|voyage|v[aceginu])"
+ "|(?:wales|walter|wang|watch|webcam|website|wed|wedding|weir|whoswho|wien|wiki|williamhill"
+ "|win|windows|wine|wme|work|works|world|wtc|wtf|w[fs])"
+ "|(?:\u03b5\u03bb|\u0431\u0435\u043b|\u0434\u0435\u0442\u0438|\u043a\u043e\u043c|\u043c\u043a\u0434"
+ "|\u043c\u043e\u043d|\u043c\u043e\u0441\u043a\u0432\u0430|\u043e\u043d\u043b\u0430\u0439\u043d"
+ "|\u043e\u0440\u0433|\u0440\u0443\u0441|\u0440\u0444|\u0441\u0430\u0439\u0442|\u0441\u0440\u0431"
+ "|\u0443\u043a\u0440|\u049b\u0430\u0437|\u0570\u0561\u0575|\u05e7\u05d5\u05dd|\u0627\u0631\u0627\u0645\u0643\u0648"
+ "|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629"
+ "|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0627\u06cc\u0631\u0627\u0646"
+ "|\u0628\u0627\u0632\u0627\u0631|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633"
+ "|\u0633\u0648\u062f\u0627\u0646|\u0633\u0648\u0631\u064a\u0629|\u0634\u0628\u0643\u0629"
+ "|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0641\u0644\u0633\u0637\u064a\u0646"
+ "|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0645\u0644\u064a\u0633\u064a\u0627"
+ "|\u0645\u0648\u0642\u0639|\u0915\u0949\u092e|\u0928\u0947\u091f|\u092d\u093e\u0930\u0924"
+ "|\u0938\u0902\u0917\u0920\u0928|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4"
+ "|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd"
+ "|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22"
+ "|\u10d2\u10d4|\u307f\u3093\u306a|\u30b0\u30fc\u30b0\u30eb|\u30b3\u30e0|\u4e16\u754c"
+ "|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4e2d\u6587\u7f51|\u4f01\u4e1a|\u4f5b\u5c71"
+ "|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063"
+ "|\u5546\u57ce|\u5546\u5e97|\u5546\u6807|\u5728\u7ebf|\u5927\u62ff|\u5a31\u4e50|\u5de5\u884c"
+ "|\u5e7f\u4e1c|\u6148\u5584|\u6211\u7231\u4f60|\u624b\u673a|\u653f\u52a1|\u653f\u5e9c"
+ "|\u65b0\u52a0\u5761|\u65b0\u95fb|\u65f6\u5c1a|\u673a\u6784|\u6de1\u9a6c\u9521|\u6e38\u620f"
+ "|\u70b9\u770b|\u79fb\u52a8|\u7ec4\u7ec7\u673a\u6784|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7edc"
+ "|\u8c37\u6b4c|\u96c6\u56e2|\u98de\u5229\u6d66|\u9910\u5385|\u9999\u6e2f|\ub2f7\ub137"
+ "|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d|xbox"
+ "|xerox|xin|xn\\-\\-11b4c3d|xn\\-\\-1qqw23a|xn\\-\\-30rr7y|xn\\-\\-3bst00m|xn\\-\\-3ds443g"
+ "|xn\\-\\-3e0b707e|xn\\-\\-3pxu8k|xn\\-\\-42c2d9a|xn\\-\\-45brj9c|xn\\-\\-45q11c|xn\\-\\-4gbrim"
+ "|xn\\-\\-55qw42g|xn\\-\\-55qx5d|xn\\-\\-6frz82g|xn\\-\\-6qq986b3xl|xn\\-\\-80adxhks"
+ "|xn\\-\\-80ao21a|xn\\-\\-80asehdb|xn\\-\\-80aswg|xn\\-\\-90a3ac|xn\\-\\-90ais|xn\\-\\-9dbq2a"
+ "|xn\\-\\-9et52u|xn\\-\\-b4w605ferd|xn\\-\\-c1avg|xn\\-\\-c2br7g|xn\\-\\-cg4bki|xn\\-\\-clchc0ea0b2g2a9gcd"
+ "|xn\\-\\-czr694b|xn\\-\\-czrs0t|xn\\-\\-czru2d|xn\\-\\-d1acj3b|xn\\-\\-d1alf|xn\\-\\-efvy88h"
+ "|xn\\-\\-estv75g|xn\\-\\-fhbei|xn\\-\\-fiq228c5hs|xn\\-\\-fiq64b|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s"
+ "|xn\\-\\-fjq720a|xn\\-\\-flw351e|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-gecrj9c"
+ "|xn\\-\\-h2brj9c|xn\\-\\-hxt814e|xn\\-\\-i1b6b1a6a2e|xn\\-\\-imr513n|xn\\-\\-io0a7i"
+ "|xn\\-\\-j1aef|xn\\-\\-j1amh|xn\\-\\-j6w193g|xn\\-\\-kcrx77d1x4a|xn\\-\\-kprw13d|xn\\-\\-kpry57d"
+ "|xn\\-\\-kput3i|xn\\-\\-l1acc|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgb9awbf|xn\\-\\-mgba3a3ejt"
+ "|xn\\-\\-mgba3a4f16a|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbab2bd|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e"
+ "|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-mgbpl2fh|xn\\-\\-mgbtx2b|xn\\-\\-mgbx4cd0ab"
+ "|xn\\-\\-mk1bu44c|xn\\-\\-mxtq1m|xn\\-\\-ngbc5azd|xn\\-\\-node|xn\\-\\-nqv7f|xn\\-\\-nqv7fs00ema"
+ "|xn\\-\\-nyqy26a|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1acf|xn\\-\\-p1ai|xn\\-\\-pgbs0dh"
+ "|xn\\-\\-pssy2u|xn\\-\\-q9jyb4c|xn\\-\\-qcka1pmc|xn\\-\\-qxam|xn\\-\\-rhqv96g|xn\\-\\-s9brj9c"
+ "|xn\\-\\-ses554g|xn\\-\\-t60b56a|xn\\-\\-tckwe|xn\\-\\-unup4y|xn\\-\\-vermgensberater\\-ctb"
+ "|xn\\-\\-vermgensberatung\\-pwb|xn\\-\\-vhquv|xn\\-\\-vuq861b|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a"
+ "|xn\\-\\-xhq521b|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-y9a3aq|xn\\-\\-yfro4i67o"
+ "|xn\\-\\-ygbi2ammx|xn\\-\\-zfr164b|xperia|xxx|xyz)"
+ "|(?:yachts|yamaxun|yandex|yodobashi|yoga|yokohama|youtube|y[et])"
+ "|(?:zara|zip|zone|zuerich|z[amw]))";
public static final Pattern IP_ADDRESS
= Pattern.compile(
"((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
+ "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
+ "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
+ "|[1-9][0-9]|[0-9]))");
/**
* Valid UCS characters defined in RFC 3987. Excludes space characters.
*/
private static final String UCS_CHAR = "[" +
"\u00A0-\uD7FF" +
"\uF900-\uFDCF" +
"\uFDF0-\uFFEF" +
"\uD800\uDC00-\uD83F\uDFFD" +
"\uD840\uDC00-\uD87F\uDFFD" +
"\uD880\uDC00-\uD8BF\uDFFD" +
"\uD8C0\uDC00-\uD8FF\uDFFD" +
"\uD900\uDC00-\uD93F\uDFFD" +
"\uD940\uDC00-\uD97F\uDFFD" +
"\uD980\uDC00-\uD9BF\uDFFD" +
"\uD9C0\uDC00-\uD9FF\uDFFD" +
"\uDA00\uDC00-\uDA3F\uDFFD" +
"\uDA40\uDC00-\uDA7F\uDFFD" +
"\uDA80\uDC00-\uDABF\uDFFD" +
"\uDAC0\uDC00-\uDAFF\uDFFD" +
"\uDB00\uDC00-\uDB3F\uDFFD" +
"\uDB44\uDC00-\uDB7F\uDFFD" +
"&&[^\u00A0[\u2000-\u200A]\u2028\u2029\u202F\u3000]]";
/**
* Valid characters for IRI label defined in RFC 3987.
*/
private static final String LABEL_CHAR = "a-zA-Z0-9" + UCS_CHAR;
/**
* Valid characters for IRI TLD defined in RFC 3987.
*/
private static final String TLD_CHAR = "a-zA-Z" + UCS_CHAR;
/**
* RFC 1035 Section 2.3.4 limits the labels to a maximum 63 octets.
*/
private static final String IRI_LABEL =
"[" + LABEL_CHAR + "](?:[" + LABEL_CHAR + "_\\-]{0,61}[" + LABEL_CHAR + "]){0,1}";
/**
* RFC 3492 references RFC 1034 and limits Punycode algorithm output to 63 characters.
*/
private static final String PUNYCODE_TLD = "xn\\-\\-[\\w\\-]{0,58}\\w";
private static final String TLD = "(" + PUNYCODE_TLD + "|" + "[" + TLD_CHAR + "]{2,63}" +")";
private static final String HOST_NAME = "(" + IRI_LABEL + "\\.)+" + TLD;
public static final Pattern DOMAIN_NAME
= Pattern.compile("(" + HOST_NAME + "|" + IP_ADDRESS + ")");
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// CHANGED: Removed rtsp from supported protocols //
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
private static final String PROTOCOL = "(?i:http|https)://";
/* A word boundary or end of input. This is to stop foo.sure from matching as foo.su */
private static final String WORD_BOUNDARY = "(?:\\b|$|^)";
private static final String USER_INFO = "(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)"
+ "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_"
+ "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@";
private static final String PORT_NUMBER = "\\:\\d{1,5}";
private static final String PATH_AND_QUERY = "[/\\?](?:(?:[" + LABEL_CHAR
+ ";/\\?:@&=#~" // plus optional query params
+ "\\-\\.\\+!\\*'\\(\\),_\\$])|(?:%[a-fA-F0-9]{2}))*";
/**
* Regular expression pattern to match most part of RFC 3987
* Internationalized URLs, aka IRIs.
*/
public static final Pattern WEB_URL = Pattern.compile("("
+ "("
+ "(?:" + PROTOCOL + "(?:" + USER_INFO + ")?" + ")?"
+ "(?:" + DOMAIN_NAME + ")"
+ "(?:" + PORT_NUMBER + ")?"
+ ")"
+ "(" + PATH_AND_QUERY + ")?"
+ WORD_BOUNDARY
+ ")");
/**
* Regular expression that matches known TLDs and punycode TLDs
*/
private static final String STRICT_TLD = "(?:" +
IANA_TOP_LEVEL_DOMAINS + "|" + PUNYCODE_TLD + ")";
/**
* Regular expression that matches host names using {@link #STRICT_TLD}
*/
private static final String STRICT_HOST_NAME = "(?:(?:" + IRI_LABEL + "\\.)+"
+ STRICT_TLD + ")";
/**
* Regular expression that matches domain names using either {@link #STRICT_HOST_NAME} or
* {@link #IP_ADDRESS}
*/
private static final Pattern STRICT_DOMAIN_NAME
= Pattern.compile("(?:" + STRICT_HOST_NAME + "|" + IP_ADDRESS + ")");
/**
* Regular expression that matches domain names without a TLD
*/
private static final String RELAXED_DOMAIN_NAME =
"(?:" + "(?:" + IRI_LABEL + "(?:\\.(?=\\S))" +"?)+" + "|" + IP_ADDRESS + ")";
/**
* Regular expression to match strings that do not start with a supported protocol. The TLDs
* are expected to be one of the known TLDs.
*/
private static final String WEB_URL_WITHOUT_PROTOCOL = "("
+ WORD_BOUNDARY
+ "(?<!:\\/\\/)"
+ "("
+ "(?:" + STRICT_DOMAIN_NAME + ")"
+ "(?:" + PORT_NUMBER + ")?"
+ ")"
+ "(?:" + PATH_AND_QUERY + ")?"
+ WORD_BOUNDARY
+ ")";
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// CHANGED: Field visibility was modified //
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/**
* Regular expression to match strings that start with a supported protocol. Rules for domain
* names and TLDs are more relaxed. TLDs are optional.
*/
/*package*/ static final String WEB_URL_WITH_PROTOCOL = "("
+ WORD_BOUNDARY
+ "(?:"
+ "(?:" + PROTOCOL + "(?:" + USER_INFO + ")?" + ")"
+ "(?:" + RELAXED_DOMAIN_NAME + ")?"
+ "(?:" + PORT_NUMBER + ")?"
+ ")"
+ "(?:" + PATH_AND_QUERY + ")?"
+ WORD_BOUNDARY
+ ")";
/**
* Regular expression pattern to match IRIs. If a string starts with http(s):// the expression
* tries to match the URL structure with a relaxed rule for TLDs. If the string does not start
* with http(s):// the TLDs are expected to be one of the known TLDs.
*
* @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
public static final Pattern AUTOLINK_WEB_URL = Pattern.compile(
"(" + WEB_URL_WITH_PROTOCOL + "|" + WEB_URL_WITHOUT_PROTOCOL + ")");
/**
* Regular expression for valid email characters. Does not include some of the valid characters
* defined in RFC5321: #&~!^`{}/=$*?|
*/
private static final String EMAIL_CHAR = LABEL_CHAR + "\\+\\-_%'";
/**
* Regular expression for local part of an email address. RFC5321 section 4.5.3.1.1 limits
* the local part to be at most 64 octets.
*/
private static final String EMAIL_ADDRESS_LOCAL_PART =
"[" + EMAIL_CHAR + "]" + "(?:[" + EMAIL_CHAR + "\\.]{0,62}[" + EMAIL_CHAR + "])?";
/**
* Regular expression for the domain part of an email address. RFC5321 section 4.5.3.1.2 limits
* the domain to be at most 255 octets.
*/
private static final String EMAIL_ADDRESS_DOMAIN =
"(?=.{1,255}(?:\\s|$|^))" + HOST_NAME;
/**
* Regular expression pattern to match email addresses. It excludes double quoted local parts
* and the special characters #&~!^`{}/=$*?| that are included in RFC5321.
* @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
public static final Pattern AUTOLINK_EMAIL_ADDRESS = Pattern.compile("(" + WORD_BOUNDARY +
"(?:" + EMAIL_ADDRESS_LOCAL_PART + "@" + EMAIL_ADDRESS_DOMAIN + ")" +
WORD_BOUNDARY + ")"
);
public static final Pattern EMAIL_ADDRESS
= Pattern.compile(
"[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
"\\@" +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
"(" +
"\\." +
"[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
")+"
);
/**
* Do not create this static utility class.
*/
private PatternsCompat() {}
}

View File

@ -0,0 +1,27 @@
package org.schabi.newpipe.util.urlfinder
import java.util.regex.Pattern
class UrlFinder {
companion object {
private val WEB_URL_WITH_PROTOCOL = Pattern.compile(PatternsCompat.WEB_URL_WITH_PROTOCOL)
/**
* @return the first url found in the input, null otherwise.
*/
@JvmStatic
fun firstUrlFromInput(input: String?): String? {
if (input.isNullOrEmpty()) {
return null
}
val matcher = WEB_URL_WITH_PROTOCOL.matcher(input)
if (matcher.find()) {
return matcher.group()
}
return null
}
}
}

View File

@ -70,7 +70,7 @@ public class DownloadRunnable extends Thread {
Log.d(TAG, mId + ":acquired block at position=" + block.position + " done=" + block.done);
}
long start = block.position * DownloadMission.BLOCK_SIZE;
long start = (long)block.position * DownloadMission.BLOCK_SIZE;
long end = start + DownloadMission.BLOCK_SIZE - 1;
start += block.done;

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M3,9v6h4l5,5L12,4L7,9L3,9zM16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05c1.48,-0.73 2.5,-2.25 2.5,-4.02zM14,3.23v2.06c2.89,0.86 5,3.54 5,6.71s-2.11,5.85 -5,6.71v2.06c4.01,-0.91 7,-4.49 7,-8.77s-2.99,-7.86 -7,-8.77z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3,9v6h4l5,5L12,4L7,9L3,9zM16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05c1.48,-0.73 2.5,-2.25 2.5,-4.02zM14,3.23v2.06c2.89,0.86 5,3.54 5,6.71s-2.11,5.85 -5,6.71v2.06c4.01,-0.91 7,-4.49 7,-8.77s-2.99,-7.86 -7,-8.77z"/>
</vector>

View File

@ -411,8 +411,7 @@
android:src="@drawable/ic_volume_off_white_24dp"
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/switch_to_background"
tools:ignore="RtlHardcoded"
android:tint="@color/gray"/>
tools:ignore="RtlHardcoded" />
</RelativeLayout>
<LinearLayout

View File

@ -403,8 +403,7 @@
app:srcCompat="@drawable/ic_volume_off_white_72dp"
android:background="?attr/selectableItemBackground"
android:contentDescription="@string/switch_to_background"
tools:ignore="RtlHardcoded"
android:tint="@color/gray"/>
tools:ignore="RtlHardcoded" />
</RelativeLayout>

View File

@ -67,6 +67,19 @@
android:textSize="@dimen/video_item_search_uploader_text_size"
tools:text="Uploader"/>
<TextView
android:id="@+id/itemAdditionalDetails"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/itemUploaderView"
android:layout_alignStart="@id/itemUploaderView"
android:layout_alignEnd="@id/itemUploaderView"
android:ellipsize="end"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="@dimen/video_item_search_upload_date_text_size"
tools:text="2 years ago • 10M views"/>
<org.schabi.newpipe.views.AnimatedProgressBar
android:id="@+id/itemProgressView"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"

View File

@ -1,109 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="12dp">
<RelativeLayout
android:id="@+id/import_export"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:id="@+id/import_export_icon"
android:layout_width="48dp"
android:layout_height="24dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:src="?attr/ic_import_export"
tools:ignore="ContentDescription,RtlHardcoded"/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_toRightOf="@+id/import_export_icon"
android:layout_toLeftOf="@+id/import_export_expand_icon"
android:gravity="left|center"
android:text="@string/import_export_title"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="15sp"
android:textStyle="bold"
tools:ignore="RtlHardcoded"/>
<ImageView
android:id="@+id/import_export_expand_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="24dp"
android:src="?attr/expand"
tools:ignore="ContentDescription,RtlHardcoded"/>
</RelativeLayout>
<org.schabi.newpipe.views.CollapsibleView
android:id="@+id/import_export_options"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:orientation="vertical"
tools:ignore="RtlSymmetry">
<TextView
android:id="@+id/import_from_title"
android:layout_width="match_parent"
android:layout_height="@dimen/subscription_import_export_title_height"
android:gravity="left|center"
android:maxLines="1"
android:paddingLeft="72dp"
android:text="@string/import_from"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="13sp"
tools:ignore="RtlHardcoded"/>
<LinearLayout
android:id="@+id/import_from_options"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="72dp"
android:layout_marginStart="72dp"
android:orientation="vertical"/>
<TextView
android:id="@+id/export_to_title"
android:layout_width="match_parent"
android:layout_height="@dimen/subscription_import_export_title_height"
android:background="?attr/selectableItemBackground"
android:gravity="left|center"
android:maxLines="1"
android:paddingLeft="72dp"
android:text="@string/export_to"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="13sp"
tools:ignore="RtlHardcoded"/>
<LinearLayout
android:id="@+id/export_to_options"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="72dp"
android:layout_marginStart="72dp"
android:orientation="vertical"/>
</org.schabi.newpipe.views.CollapsibleView>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="?attr/separator_color"/>
</LinearLayout>

View File

@ -15,8 +15,6 @@
android:layout_marginRight="48dp"
android:layout_marginTop="4dp"
android:background="?attr/colorPrimary"
android:drawableLeft="?attr/search"
android:drawablePadding="8dp"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@+id/suggestions_list"

View File

@ -329,7 +329,6 @@
<string name="export_ongoing">عملية التصدير جارية …</string>
<string name="import_file_title">إستيراد ملف</string>
<string name="import_soundcloud_instructions_hint">"معرفك , soundcloud.com/ الخاص بك "</string>
<string name="playback_default">إفتراضي</string>
<string name="download_thumbnail_summary">عند إيقاف تحميل أي صور مصغرة ، وتوفير البيانات واستخدام الذاكرة. تعمل التغييرات على محو ذاكرة التخزين المؤقت للصورة الموجودة على الذاكرة أو على القرص.</string>
<string name="metadata_cache_wipe_title">امسح البيانات الوصفية المخزنة مؤقتًا</string>
<string name="metadata_cache_wipe_summary">إزالة جميع بيانات صفحات الويب المخزنة مؤقتًا</string>
@ -470,7 +469,6 @@
<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="clear_finished_download">حذف التنزيلات المنتهية</string>
<string name="stop">توقف</string>
<string name="max_retry_msg">أقصى عدد للمحاولات</string>
<string name="max_retry_desc">الحد الأقصى لعدد محاولات قبل إلغاء التحميل</string>
@ -567,12 +565,12 @@
<string name="subtitle_activity_recaptcha">اضغط على \"تم\" عند حلها</string>
<string name="recaptcha_done_button">منجز</string>
<string name="videos_string">الفيديوهات</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="zero">%s ثوانٍ</item>
<item quantity="one">%s ثوانٍ</item>
<item quantity="two">%s ثوانٍ</item>
<item quantity="few">%s ثوانٍ</item>
<item quantity="many">%s ثوانٍ</item>
<item quantity="other">%s ثوانٍ</item>
<plurals name="seconds">
<item quantity="zero">%d ثوانٍ</item>
<item quantity="one">%d ثوانٍ</item>
<item quantity="two">%d ثوانٍ</item>
<item quantity="few">%d ثوانٍ</item>
<item quantity="many">%d ثوانٍ</item>
<item quantity="other">%d ثوانٍ</item>
</plurals>
</resources>

View File

@ -189,7 +189,6 @@
<string name="error_path_creation">Nun pue crease la carpeta de destín</string>
<string name="error_ssl_exception">Nun pudo afitase una conexón segura</string>
<string name="error_connect_host">Nun pue coneutase col sirvidor</string>
<string name="clear_finished_download">Llimpiar les descargues finaes</string>
<string name="max_retry_msg">Reintentos máximos</string>
<string name="events">Eventos</string>
<string name="conferences">Conferencies</string>
@ -212,12 +211,11 @@
<string name="settings_category_clear_data_title">Llimpieza de datos</string>
<string name="show_comments_title">Amosar comentarios</string>
<string name="show_comments_summary"/>
<string name="start_accept_privacy_policy">Pa cumplir cola GDPR (Regulación Xeneral de Proteición de Datos) europea, pidímoste que revises la política de privacidá de NewPipe. Lléila con procuru.
\nHas aceutala unviándonos un informe de fallos.<string name="delete_search_history_alert">¿Desaniciar tol historial de gueta\?</string>
\nHas aceutala unviándonos un informe de fallos.</string>
<string name="start_accept_privacy_policy">Pa cumplir cola GDPR (Regulación Xeneral de Proteición de Datos) europea, pidímoste que revises la política de privacidá de NewPipe. Lléila con procuru.
\nHas aceutala unviándonos un informe de fallos.
</string>
<string name="minimize_on_exit_summary">Aición al cambiar a otra aplicación dende\'l reproductor de vídeos principal — %s</string>
<string name="max_retry_desc">El númberu máximu d\'intentos enantes d\'encaboxar la descarga</string>
<string name="enable_playback_state_lists_title">Posiciones nes llistes</string>
<string name="confirm_prompt">¿Quies llimpiar l\'historial de descargues o desaniciar tolos ficheros baxaos\?</string>
<string name="previous_export">Esportación anterior</string>
<string name="import_file_title">Importar el ficheru</string>
@ -231,8 +229,8 @@
\n
\n3.- Anicia sesión cuando se te pida
\n2.- Vete a esta URL: %1$s
<string name="import_soundcloud_instructions_hint">LaToID, soundcloud.com/latoid</string>
\n4.- Copia la URL del perfil al que se te redirixa.</string>
<string name="import_soundcloud_instructions_hint">LaToID, soundcloud.com/latoid</string>
<string name="download_thumbnail_title">Cargar miniatures</string>
<string name="download_thumbnail_summary">Desactiva esta opción pa evitar la carga de miniatures, aforrar datos y usu de la memoria. Los cambeos van llimpiar la memoria y la caché d\'imáxenes.</string>
<string name="minimize_on_exit_title">Minimizar al cambiar a otra aplicación</string>
@ -276,11 +274,35 @@
<string name="app_language_title">Llingua de l\'aplicación</string>
<string name="systems_language">La predeterminada del sistema</string>
<string name="videos_string">Vídeos</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s segundos</item>
<item quantity="other">%s segundos</item>
<plurals name="seconds">
<item quantity="one">%d segundu</item>
<item quantity="other">%d segundos</item>
</plurals>
<string name="playback_tempo">Tempu</string>
<string name="playback_pitch">Tonu</string>
<string name="decline">Refugar</string>
<string name="url_not_supported_toast">La URL nun se sofita</string>
<string name="background_player_playing_toast">Reproduciendo en segundu planu</string>
<string name="popup_playing_toast">Reproduciendo nel mou ventanu</string>
<string name="enable_search_history_summary">Atroxa llocalmente les consultes de gueta</string>
<string name="external_player_unsupported_link_type">Los reproductores esternos nun so</string>
<string name="export_complete_toast">Esportóse</string>
<string name="import_complete_toast">Importóse</string>
<string name="could_not_import_all_files">Alvertencia: Nun pudieron importase tolos ficheros.</string>
<string name="settings_category_updates_title">Anovamientos</string>
<string name="download_finished">Finó la descarga</string>
<string name="peertube_instance_add_fail">Nun pudo validase la instancia</string>
<plurals name="minutes">
<item quantity="one">%d minutu</item>
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d hora</item>
<item quantity="other">%d hores</item>
</plurals>
<plurals name="days">
<item quantity="one">%d día</item>
<item quantity="other">%d díes</item>
</plurals>
<string name="feed_group_dialog_delete_message">¿Quies desaniciar esti grupu\?</string>
</resources>

View File

@ -349,7 +349,7 @@
<string name="enable_disposed_exceptions_title">报告『提前结束Android生命周期』错误</string>
<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="use_inexact_seek_summary">粗略定位播放允许播放器以略低的精确度为代价换取更快的定位速度。此功能不适用于每隔5、15或25秒定位.</string>
<string name="auto_queue_title">自动播放下一个</string>
<string name="auto_queue_summary">当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表</string>
<string name="invalid_directory">没有此文件夹</string>
@ -454,7 +454,6 @@
<string name="error_http_no_content">服务器未发送数据</string>
<string name="error_http_not_found">找不到 NOT FOUND</string>
<string name="error_postprocessing_failed">后期处理失败</string>
<string name="clear_finished_download">清除已完成的下载</string>
<string name="stop">停止</string>
<string name="max_retry_msg">最大重试次数</string>
<string name="max_retry_desc">取消下载前的最多重试着次数</string>
@ -536,10 +535,53 @@
<string name="subtitle_activity_recaptcha">完成后请按\"完成(Done)\"</string>
<string name="recaptcha_done_button">完成</string>
<string name="videos_string">视频</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="other">%s</item>
<plurals name="seconds">
<item quantity="other">%d</item>
</plurals>
<string name="new_seek_duration_toast">由于ExoPlayer的限制搜寻间隔设置为d秒</string>
<string name="mute">静音</string>
<string name="unmute">取消静音</string>
<string name="help">帮助</string>
<plurals name="minutes">
<item quantity="other">%d分钟</item>
</plurals>
<plurals name="hours">
<item quantity="other">%d小时</item>
</plurals>
<plurals name="days">
<item quantity="other">%d天</item>
</plurals>
<string name="feed_groups_header_title">Feed组</string>
<string name="feed_oldest_subscription_update">最早订阅更新:%s</string>
<string name="feed_subscription_not_loaded_count">未加载: %d</string>
<string name="feed_notification_loading">正在加载feed…</string>
<string name="feed_processing_message">正在处理feed…</string>
<string name="feed_group_dialog_select_subscriptions">选择订阅</string>
<string name="feed_group_dialog_empty_selection">未选中订阅</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="other">已选中%d</item>
</plurals>
<string name="feed_group_dialog_empty_name">组名为空</string>
<string name="feed_group_dialog_name_input">名称</string>
<string name="feed_group_dialog_delete_message">您要删除该组吗?</string>
<string name="feed_create_new_group_button_title">新建</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Feed更新阈值</string>
<string name="feed_update_threshold_summary">上次更新后,订阅被视为过时的时间-s</string>
<string name="feed_update_threshold_option_always_update">始终更新</string>
<string name="feed_use_dedicated_fetch_method_title">可用时从专用feed获取</string>
<string name="feed_use_dedicated_fetch_method_summary">在某些服务中可用,通常速度要快得多,但可能返回的条目数量有限,而且信息通常不完整(例如,没有持续时间,条目类型,没有实时状态)。</string>
<string name="feed_use_dedicated_fetch_method_enable_button">启用快速模式</string>
<string name="feed_use_dedicated_fetch_method_disable_button">禁用快速模式</string>
<string name="feed_use_dedicated_fetch_method_help_text">您是否认为Feed加载太慢如果是这样请尝试启用快速加载您可以在设置中更改它也可以按下面的按钮更改它
\n
\nNewPipe提供两种feed加载策略:
\n•获取整个订阅频道这很慢但是很是完整。
\n•使用专用的服务端点这样会比较快但通常不完整。
\n
\n两者之间的区别在于后者通常缺少一些信息例如条目的持续时间或类型无法区分直播视频和普通视频并且可能返回更少的条目。
\n
\nYouTube是一个通过其RSS feed提供这种快速方法的服务示例。
\n
\n因此选择哪种方式取决于您更看重什么是速度还是精确的信息。</string>
</resources>

View File

@ -457,7 +457,6 @@
<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="clear_finished_download">Ачысціць завершаныя</string>
<string name="stop">Спыніць</string>
<string name="max_retry_msg">Максімум спробаў</string>
<string name="max_retry_desc">Колькасць спробаў перад адменай загрузкі</string>

View File

@ -114,7 +114,6 @@
<string name="import_ongoing">S\'està important…</string>
<string name="export_ongoing">S\'està exportant…</string>
<string name="import_file_title">Importa un fitxer</string>
<string name="playback_default">Per defecte</string>
<string name="view_count_text">%1$s reproduccions</string>
<string name="upload_date_text">Publicat el %1$s</string>
<string name="no_player_found">No s\'ha trobat cap reproductor de fluxos. Voleu instal·lar el VLC\?</string>
@ -447,7 +446,6 @@
<string name="error_unknown_host">No s\'ha pogut trobar el servidor</string>
<string name="error_connect_host">No s\'ha pogut connectar amb el servidor</string>
<string name="error_postprocessing_failed">Ha fallat el post-processament</string>
<string name="clear_finished_download">Neteja les baixades finalitzades</string>
<string name="max_retry_msg">Intents màxims</string>
<string name="max_retry_desc">Nombre màxim d\'intents abans de cancel·lar la baixada</string>
<string name="pause_downloads_on_mobile">Interromp en connexions limitades</string>

View File

@ -368,7 +368,6 @@ otevření ve vyskakovacím okně</string>
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Výška tónu</string>
<string name="unhook_checkbox">Odpojit (může způsobit zkreslení)</string>
<string name="playback_default">Výchozí nastavení</string>
<string name="no_streams_available_download">Ke stažení nejsou dostupné žádné streamy</string>
<string name="preferred_open_action_settings_title">Preferovaná \'otevřít\' akce</string>
<string name="preferred_open_action_settings_summary">Výchozí chování při otevírání obsahu — %s</string>
@ -464,7 +463,6 @@ otevření ve vyskakovacím okně</string>
<string name="error_http_unsupported_range">Server neakceptuje vícevláknové stahování, opakujte akci s @string/msg_threads = 1</string>
<string name="error_http_not_found">Nenalezeno</string>
<string name="error_postprocessing_failed">Post-processing selhal</string>
<string name="clear_finished_download">Vyčistit dokončená stahování</string>
<string name="stop">Zastavit</string>
<string name="max_retry_msg">Maximální počet pokusů o opakování</string>
<string name="max_retry_desc">Maximální počet pokusů před zrušením stahování</string>
@ -553,12 +551,63 @@ otevření ve vyskakovacím okně</string>
<string name="subtitle_activity_recaptcha">Po vyřešení stiskni \"Hotovo\"</string>
<string name="recaptcha_done_button">Hotovo</string>
<string name="videos_string">Videa</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s sekund</item>
<item quantity="few">%s sekund</item>
<item quantity="other">%s sekund</item>
<plurals name="seconds">
<item quantity="one">%d vteřina</item>
<item quantity="few">%d vteřiny</item>
<item quantity="other">%d vteřin</item>
</plurals>
<string name="new_seek_duration_toast">Kvůli omezením ExoPlayer bylo prohledávání nastaveno na %d vteřin</string>
<string name="mute">Umlčet</string>
<string name="unmute">Odumlčet</string>
<string name="help">Nápověda</string>
<plurals name="minutes">
<item quantity="one">%d minuta</item>
<item quantity="few">%d minuty</item>
<item quantity="other">%d minut</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d hodina</item>
<item quantity="few">%d hodiny</item>
<item quantity="other">%d hodin</item>
</plurals>
<plurals name="days">
<item quantity="one">%d den</item>
<item quantity="few">%d dny</item>
<item quantity="other">%d dnů</item>
</plurals>
<string name="feed_groups_header_title">Přísunové skupiny</string>
<string name="feed_oldest_subscription_update">Aktualizace nejstarších objednávek: %s</string>
<string name="feed_subscription_not_loaded_count">Nenačteno: %d</string>
<string name="feed_notification_loading">Načítám přísun…</string>
<string name="feed_processing_message">Zpracovávám přísun…</string>
<string name="feed_group_dialog_select_subscriptions">Vybrat objednávky</string>
<string name="feed_group_dialog_empty_selection">Objednávky nebyly vybrány</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d vybrána</item>
<item quantity="few">%d vybrány</item>
<item quantity="other">%d vybráno</item>
</plurals>
<string name="feed_group_dialog_empty_name">Prázdné jméno skupiny</string>
<string name="feed_group_dialog_name_input">Jméno</string>
<string name="feed_group_dialog_delete_message">Přejete si smazat tuto skupinu\?</string>
<string name="feed_create_new_group_button_title">Nová</string>
<string name="settings_category_feed_title">Přísun</string>
<string name="feed_update_threshold_title">Limit aktualizace přísunu</string>
<string name="feed_update_threshold_summary">Doba po poslední aktualizaci, po níž je objednávka považována za zastaralou — %s</string>
<string name="feed_update_threshold_option_always_update">Vždy aktualizovat</string>
<string name="feed_use_dedicated_fetch_method_title">Dodat z vyhrazeného přísunu, je-li dostupný</string>
<string name="feed_use_dedicated_fetch_method_summary">K dispozici na některých zařízeních, je obvykle mnohem rychlejší, ale může vrátit omezený počet položek a často neúplné informace (např. bez trvání, typu položky, skutečného stavu).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Zapnout rychlý režim</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Vypnout rychlý režim</string>
<string name="feed_use_dedicated_fetch_method_help_text">Myslíte si, že náčet přísunu je příliš pomalé\? Pokud ano, zkuste zapnout rychlý náčet (lze změnit v nastavení nebo stiskem tlačítka níže).
\n
\nNewPipe nabízí dvě strategie náčtu přísunu:
\n• Dodání úplného kanálu objednávek, což je pomalé, ale úplné.
\n• Použití vyhrazeného servisního zakončení, což je rychlé, ale obvykle neúplné.
\n
\nRozdíl mezi těmi dvěma je, že tomu rychlému obvykle chybí nějaká informace, např. trvání položky nebo typ (nemůže rozlišit mezi živým a normálním videem) a patrně vrátí méně položek.
\n
\nYouTube je příklad služby, která nabízí tuto rychlou metodu pomocí RSS přísunu.
\n
\nVýběr je vposledku určen tím, čemu dáte přednost: rychlosti nebo přesné informaci.</string>
</resources>

View File

@ -446,7 +446,6 @@
<string name="app_update_notification_content_title">NewPipe-opdatering tilgængelig!</string>
<string name="paused">sat på pause</string>
<string name="queued">sat i kø</string>
<string name="clear_finished_download">Ryd færdige downloads</string>
<string name="max_retry_msg">Maksimalt antal genforsøg</string>
<string name="max_retry_desc">Maksimalt antal forsøg før downloaden opgives</string>
<string name="pause_downloads_on_mobile">Sæt på pause ved skift til mobildata</string>

View File

@ -340,7 +340,6 @@
<string name="playback_tempo">Geschwindigkeit</string>
<string name="playback_pitch">Tonhöhe</string>
<string name="unhook_checkbox">Entkoppeln (kann zu Verzerrungen führen)</string>
<string name="playback_default">Standard</string>
<string name="download_thumbnail_summary">Abschalten, um das Laden von Miniaturansichten zu verhindern, was Daten- und Speicherverbrauch spart. Änderungen löschen den Bildzwischenspeicher sowohl im Arbeitsspeicher als auch auf dem internen Speicher.</string>
<string name="auto_queue_title">Nächsten Stream automatisch einreihen</string>
<string name="auto_queue_summary">Wiedergabe durch Anhängen eines verwandten Streams an die Warteschlange (ohne Wiederholungsschleife) fortsetzen</string>
@ -457,7 +456,6 @@
<string name="error_http_unsupported_range">Der Server erlaubt kein mehrfädiges Herunterladen wiederhole mit @string/msg_threads = 1</string>
<string name="error_http_not_found">Nicht gefunden</string>
<string name="error_postprocessing_failed">Nachbearbeitung fehlgeschlagen</string>
<string name="clear_finished_download">Um fertige Downloads bereinigen</string>
<string name="stop">Anhalten</string>
<string name="max_retry_msg">Maximale Wiederholungen</string>
<string name="max_retry_desc">Maximalanzahl der Versuche, bevor der Download abgebrochen wird</string>
@ -545,10 +543,58 @@
<string name="subtitle_activity_recaptcha">\"Fertig\" drücken, wenn es gelöst wurde</string>
<string name="recaptcha_done_button">Fertig</string>
<string name="videos_string">Videos</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s Sekunde</item>
<item quantity="other">%s Sekunden</item>
<plurals name="seconds">
<item quantity="one">%d Sekunde</item>
<item quantity="other">%d Sekunden</item>
</plurals>
<string name="new_seek_duration_toast">Aufgrund von ExoPlayer-Einschränkungen wurde die Suchdauer auf %d Sekunden gesetzt</string>
<string name="mute">Stumm</string>
<string name="mute">Stummschaltung</string>
<string name="unmute">Stummschaltung aufheben</string>
<string name="help">Hilfe</string>
<plurals name="minutes">
<item quantity="one">%d Minute</item>
<item quantity="other">%d Minuten</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d Stunde</item>
<item quantity="other">%d Stunden</item>
</plurals>
<plurals name="days">
<item quantity="one">%d Tag</item>
<item quantity="other">%d Tage</item>
</plurals>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d ausgewählt</item>
<item quantity="other">%d ausgewählte</item>
</plurals>
<string name="feed_group_dialog_empty_name">Leerer Gruppenname</string>
<string name="feed_group_dialog_name_input">Name</string>
<string name="feed_group_dialog_delete_message">Möchtest du diese Gruppe löschen\?</string>
<string name="feed_create_new_group_button_title">Neu</string>
<string name="feed_update_threshold_option_always_update">Immer aktualisieren</string>
<string name="feed_groups_header_title">Feed-Gruppen</string>
<string name="feed_subscription_not_loaded_count">Nicht geladen: %d</string>
<string name="feed_notification_loading">Feed laden…</string>
<string name="feed_processing_message">Feed verarbeiten…</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_group_dialog_select_subscriptions">Abonnements auswählen</string>
<string name="feed_group_dialog_empty_selection">Kein Abonnement ausgewählt</string>
<string name="feed_update_threshold_summary">Zeit nach der letzten Aktualisierung, bevor ein Abonnement als veraltet angesehen wird — %s</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Schnellmodus aktivieren</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Schnellmodus deaktivieren</string>
<string name="feed_oldest_subscription_update">Älteste Aboaktualisierung: %s</string>
<string name="feed_update_threshold_title">Grenzwert für Feed-Aktualisierung</string>
<string name="feed_use_dedicated_fetch_method_title">Aus fest zugeordnetem Feed abholen wenn verfügbar</string>
<string name="feed_use_dedicated_fetch_method_summary">Steht in manchen Diensten zur Verfügung, ist meist viel schneller, liefert aber eventuell eine eingeschränkte Anzahl an Elementen und oft inkomplette Informationen (z. B. keine Videolänge, keinen Elementtyp, keinen Live-Status).</string>
<string name="feed_use_dedicated_fetch_method_help_text">Glaubst du, dass das Laden von Feeds zu langsam ist\? Wenn ja, versuche den Schnelllademodus einzuschalten (du kannst ihn in den Einstellungen oder über die Schaltfläche unten ändern).
\n
\nNewPipe bietet zwei Feed-Ladestrategien:
\n• die Abholung des gesamten abonnierten Kanals, was langsam aber vollständig geschieht.
\n• die Verwendung eines fest zugeordneten Serviceendpunkts, was schnell aber für gewöhnlich inkomplett ist.
\n
\nDer Unterschied zwischen den beiden ist, dass der schnellen normalerweise einige Informationen fehlen, wie die Dauer oder der Typ des Elements (keine Unterscheidung zwischen Live-Videos und normalen) und sie eventuell weniger Elemente liefert.
\n
\nYouTube ist ein Beispiel für einen Service, der mit seinem RSS-Feed diese schnelle Methode anbietet.
\n
\nDie Entscheidung läuft also darauf hinaus, was dir lieber ist: Tempo oder genaue Informationen.</string>
</resources>

View File

@ -458,7 +458,6 @@
<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="clear_finished_download">Εκκαθάριση ολοκληρωμένων λήψεων</string>
<string name="stop">Διακοπή</string>
<string name="max_retry_msg">Μέγιστες επαναπροσπάθειες</string>
<string name="max_retry_desc">Μέγιστος αριθμός προσπαθειών προτού γίνει ακύρωση της λήψης</string>

View File

@ -94,8 +94,8 @@
<string name="black_theme_title">Nigra</string>
<string name="popup_remember_size_pos_title">Memoru ŝprucfenestran grandecon kaj pozicion</string>
<string name="popup_remember_size_pos_summary">Memoru lastan grandecon kaj pozicion de ŝprucfenestro</string>
<string name="use_inexact_seek_title">Uzu rapide, ne preciza serĉon</string>
<string name="use_inexact_seek_summary">Ne preciza serĉo permesas al la ludanto serĉi poziciojn pli rapide kun malalta precizeco</string>
<string name="use_inexact_seek_title">Uzi rapide, ne precizan serĉon</string>
<string name="use_inexact_seek_summary">Ne preciza serĉo permesas al la ludanto serĉi poziciojn pli rapide kun malalta precizeco. Serĉi por 5, 15 kaj 25 sekundoj ne funckios kun tio opcio.</string>
<string name="download_thumbnail_title">Ŝarĝi bildetojn</string>
<string name="could_not_setup_download_menu">Ne povis konstrui la dosierujon de elŝuto</string>
<string name="live_streams_not_supported">Nunaj filmetoj ne estas ankoraŭ subtenataj</string>
@ -292,7 +292,7 @@
\nElektu AFM se vi volas elŝuti al ekstera SD-karto</string>
<string name="downloads_storage_use_saf_title">Uzu AFM</string>
<string name="downloads_storage_use_saf_summary">La \"Atinga Framo al la Memoro\" ebligas elŝuti al ekstera SD-karto.
\nKomento: kelkaj aparatoj malkongruas</string>
\nKelkaj aparatoj malkongruas</string>
<string name="clear_playback_states_title">Forviŝi ludajn poziciojn</string>
<string name="clear_playback_states_summary">Forviŝi la totalon de ludaj pozicioj</string>
<string name="delete_playback_states_alert">Ĉu vi volas forviŝi ĉiujn ludajn poziciojn \?</string>
@ -493,7 +493,6 @@
<string name="error_http_unsupported_range">La servilo ne akceptas plurfadenajn elŝutojn, reprovu kun @string/msg_threads = 1</string>
<string name="error_http_not_found">Ne trovita</string>
<string name="error_postprocessing_failed">Postprocesado malsukcesis</string>
<string name="clear_finished_download">Forviŝi la finitajn elŝutojn</string>
<string name="pause_downloads_on_mobile_desc">Utila dum la ŝanĝo al poŝdatumoj, kvankam kelkaj elŝutoj ne povas esti interrompitaj</string>
<string name="no_comments">Neniu komento</string>
<string name="overwrite_unrelated_warning">Dosiero kun ĉi tiu nomo jam ekzistas</string>
@ -516,7 +515,7 @@
<item quantity="other">%s aŭskultantoj</item>
</plurals>
<string name="localization_changes_requires_app_restart">La lingvo ŝanĝos kiam la apo restartos.</string>
<string name="seek_duration_title">Rapida antaŭen / posten daŭron</string>
<string name="seek_duration_title">Rapida antaŭen / posten serĉan daŭron</string>
<string name="peertube_instance_url_title">Instancoj de PeerTube</string>
<string name="peertube_instance_url_summary">Elekti viajn preferitajn instancojn de PeerTube</string>
<string name="peertube_instance_url_help">Trovu la instancojn ke vi ŝatas ĉe %s</string>
@ -543,8 +542,48 @@
<string name="systems_language">Sistemnormo</string>
<string name="subtitle_activity_recaptcha">Premu « Finita » kiam solvita</string>
<string name="recaptcha_done_button">Finita</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s sekundo</item>
<item quantity="other">%s sekundoj</item>
<plurals name="seconds">
<item quantity="one">%d sekundo</item>
<item quantity="other">%d sekundoj</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d minuto</item>
<item quantity="other">%d minutoj</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d horo</item>
<item quantity="other">%d horoj</item>
</plurals>
<plurals name="days">
<item quantity="one">%d tago</item>
<item quantity="other">%d tagoj</item>
</plurals>
<!-- Feed -->
<string name="feed_groups_header_title">Abonfluoj grupoj</string>
<string name="feed_oldest_subscription_update">Lasta ĝisdatigo: %s</string>
<string name="feed_subscription_not_loaded_count">Ne ŝarĝitaj: %d</string>
<string name="feed_notification_loading">Ŝarĝante abonfluon…</string>
<string name="feed_processing_message">Procesante abonfluon…</string>
<string name="feed_group_dialog_select_subscriptions">Seletkti abonojn</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d selektita</item>
<item quantity="other">%d selektitaj</item>
</plurals>
<string name="feed_group_dialog_empty_selection">No subscription selected</string>
<string name="feed_group_dialog_empty_name">Malplena grupa nomo</string>
<string name="feed_group_dialog_name_input">Nomo</string>
<string name="feed_group_dialog_delete_message">Ĉu vi volas forviŝi tion grupon?</string>
<string name="feed_create_new_group_button_title">Nova</string>
<string name="settings_category_feed_title">Abonfluo</string>
<string name="feed_update_threshold_title">Abonflua ĝisdatiga sojlo</string>
<string name="feed_update_threshold_summary">Tempo post lasta ĝisdatigo antaŭ abono estas konsiderita malĝisdatigita — %s</string>
<string name="feed_update_threshold_option_always_update">Ĉiam ĝisdatigi</string>
<string name="feed_use_dedicated_fetch_method_title">Ŝarĝi el dediĉita abonfluo kiam ĝi haveblas</string>
<string name="feed_use_dedicated_fetch_method_summary">Havebla en kelkaj servoj, ĝi estas ĝenerale multe pli rapida, sed povas doni limigita kvanto da aĵoj kaj ofte malpreciza informoj (ekzemple: neniu duracio, ajâ tipo, neniu « nuna » statuso).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Ŝalti rapidan modon</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Malŝati rapidan modon</string>
<string name="new_seek_duration_toast">Pro ExoPlayer limoj, la serĉa daŭro estas metita %d sekundojn</string>
<string name="mute">Mutigi</string>
<string name="unmute">Malmutigi</string>
<string name="help">Helpo</string>
</resources>

View File

@ -424,7 +424,6 @@
<string name="download_already_pending">Hay una descarga pendiente con este nombre</string>
<string name="grid">Mostrar como grilla</string>
<string name="list">Mostrar como lista</string>
<string name="clear_finished_download">Limpiar descargas finalizadas</string>
<string name="confirm_prompt">¿Quiere limpiar su historial de descargas o eliminar todos los ficheros descargados\?</string>
<string name="stop">Detener</string>
<string name="max_retry_msg">Intentos máximos</string>
@ -544,11 +543,58 @@
<string name="subtitle_activity_recaptcha">Pulse en «Hecho» cuando esté resuelto</string>
<string name="recaptcha_done_button">Hecho</string>
<string name="videos_string">Vídeos</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s segundo</item>
<item quantity="other">%s segundos</item>
<plurals name="seconds">
<item quantity="one">%d segundo</item>
<item quantity="other">%d segundos</item>
</plurals>
<string name="new_seek_duration_toast">Debido a limitaciones de ExoPlayer la duración de la búsqueda fue fijada en %d segundos</string>
<string name="mute">Silenciar</string>
<string name="unmute">Desactivar silencio</string>
<string name="help">Ayuda</string>
<plurals name="minutes">
<item quantity="one">%d minuto</item>
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d hora</item>
<item quantity="other">%d horas</item>
</plurals>
<plurals name="days">
<item quantity="one">%d día</item>
<item quantity="other">%d días</item>
</plurals>
<string name="feed_groups_header_title">Grupos del feed</string>
<string name="feed_oldest_subscription_update">Actualización más antigua de suscripciones: %s</string>
<string name="feed_subscription_not_loaded_count">No cargado: %d</string>
<string name="feed_notification_loading">Cargando contenidos…</string>
<string name="feed_processing_message">Procesando contenidos…</string>
<string name="feed_group_dialog_select_subscriptions">Elegir suscripciones</string>
<string name="feed_group_dialog_empty_selection">No hay suscripciones seleccionadas</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d elegida</item>
<item quantity="other">%d elegidas</item>
</plurals>
<string name="feed_group_dialog_empty_name">Nombre de grupo vacío</string>
<string name="feed_group_dialog_name_input">Nombre</string>
<string name="feed_group_dialog_delete_message">¿Borrar este grupo\?</string>
<string name="feed_create_new_group_button_title">Nuevo</string>
<string name="settings_category_feed_title">Contenido</string>
<string name="feed_update_threshold_title">Velocidad de actualización del feed</string>
<string name="feed_update_threshold_summary">Tiempo para que una suscripción se considere desactualizada — %s</string>
<string name="feed_update_threshold_option_always_update">Actualizar siempre</string>
<string name="feed_use_dedicated_fetch_method_title">Extraer desde feed dedicado cuando esté disponible</string>
<string name="feed_use_dedicated_fetch_method_summary">Disponible para algunos servicios, suele ser más rápido pero puede mostrar una cantidad limitada de ítems y a menudo información incompleta (por ejemplo falta de duración, tipo de ítem o estado).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Activar modo rápido</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Desactivar modo rápido</string>
<string name="feed_use_dedicated_fetch_method_help_text">¿Piensas que la carga de contenidos es muy lenta\? Entonces intenta habilitar la carga rápida (puedes cambiarlo en los ajustes o presionando el botón debajo).
\n
\nNewpipe ofrece dos formas de cargar los contenidos:
\n• Obtener todos los canales con suscripciones, lento pero completo.
\n• Usar un punto dedicado de servicio, más rápido pero usualmente incompleto.
\n
\nLa diferencia es que en la forma rápida usualmente falta algo de información, como la duración o tipo de ítem (no se puede diferenciar entre videos normales y en vivo) y puede que aparezcan menos ítems.
\n
\nYouTube es un ejemplo de un servicio que ofrece este método rápido con su listado de contenidos por RSS.
\n
\nEntonces la elección se limita a qué prefieres: velocidad o información exacta.</string>
</resources>

View File

@ -359,7 +359,6 @@
\nKas jätkata?</string>
<string name="playback_speed_control">Taasesituse kiiruse juhtimine</string>
<string name="playback_tempo">"Tempo "</string>
<string name="playback_default">Vaikimisi</string>
<string name="accept">Nõustu</string>
<string name="decline">Keeldu</string>
<string name="limit_data_usage_none_description">Piiranguta</string>
@ -459,7 +458,6 @@
<string name="error_http_unsupported_range">Server ei toeta mitmelõimelisi allalaadimisi. Proovi uuesti kasutades @string/msg_threads = 1</string>
<string name="error_http_not_found">Ei leitud</string>
<string name="error_postprocessing_failed">Järeltöötlemine nurjus</string>
<string name="clear_finished_download">Eemalda lõpetatud allalaadimised</string>
<string name="stop">Stopp</string>
<string name="max_retry_msg">Korduskatseid</string>
<string name="max_retry_desc">Suurim katsete arv enne allalaadimise tühistamist</string>

View File

@ -374,7 +374,6 @@
<string name="playback_tempo">Tempoa</string>
<string name="playback_pitch">Tonua</string>
<string name="unhook_checkbox">Desaktibatu (distortsioa sor lezake)</string>
<string name="playback_default">Lehenetsia</string>
<string name="import_settings">Ezarpenak ere inportatu nahi dituzu?</string>
<string name="use_inexact_seek_summary">Bilaketa ez zehatzak posizioak azkarrago baina prezisio gutxiagoz bilatzea ahalbidetzen du. 5, 15 edo 25 segundo bilatzea ez du honekin funtzionatzen.</string>
<string name="download_thumbnail_summary">Desgaitu koadro txikiak ez kargatzeko, datuak eta memoria aurreztuz. Aldaketak memoria eta diskoko irudien cacheak garbituko ditu.</string>
@ -458,7 +457,6 @@
<string name="error_http_unsupported_range">Zerbitzariak ez ditu hainbat hariko deskargak onartzen, saiatu @string/msg_threads = 1 erabilita</string>
<string name="error_http_not_found">Ez aurkitua</string>
<string name="error_postprocessing_failed">Post-prozesuak huts egin du</string>
<string name="clear_finished_download">Garbitu amaitutako deskargak</string>
<string name="stop">Gelditu</string>
<string name="max_retry_msg">Gehienezko saiakerak</string>
<string name="max_retry_desc">Deskarga ezeztatu aurretik saiatu beharreko aldi kopurua</string>
@ -544,9 +542,9 @@
<string name="subtitle_activity_recaptcha">Sakatu \"Egina\" konponduta dagoenean</string>
<string name="recaptcha_done_button">Egina</string>
<string name="videos_string">Bideoak</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s segundu</item>
<item quantity="other">%s segundu</item>
<plurals name="seconds">
<item quantity="one">%d segundu</item>
<item quantity="other">%d segundu</item>
</plurals>
<string name="new_seek_duration_toast">ExoPlayer-en mugak direla eta bilaketaren iraupena %d segundotan ezarri da</string>
</resources>

View File

@ -460,7 +460,6 @@
<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="clear_finished_download">پاک کردن بارگیری‌های تمام شده</string>
<string name="stop">توقف</string>
<string name="max_retry_msg">بیشینه تلاش مجدد</string>
<string name="pause_downloads_on_mobile_desc">این ویژگی زمانی که ارتباط را به داده همراه تغییر می‌دهید مفید است هرچند برخی بارگیری‌ها نمی‌توانند تعلیق شوند</string>

View File

@ -147,7 +147,6 @@
<string name="channel_unsubscribed">Désabonné de la chaîne</string>
<string name="tab_main">Principal</string>
<string name="tab_subscriptions">Abonnements</string>
<string name="fragment_feed_title">Nouveautés</string>
<string name="settings_category_downloads_title">Téléchargement</string>
<string name="action_settings">Paramètres</string>
<string name="action_about">À propos</string>
@ -361,7 +360,6 @@
<string name="playback_speed_control">Contrôles de vitesse de lecture</string>
<string name="playback_tempo">Cadence</string>
<string name="unhook_checkbox">Détacher (peut causer des déformations)</string>
<string name="playback_default">Défaut</string>
<string name="preferred_open_action_settings_title">Ouvrir de préférence avec</string>
<string name="preferred_open_action_settings_summary">Action par défaut lors de louverture de contenu — %s</string>
<string name="no_streams_available_download">Aucun flux disponible au téléchargement</string>
@ -454,7 +452,6 @@
<string name="error_connect_host">Impossible de se connecter au serveur</string>
<string name="error_http_no_content">Le serveur nenvoie pas de données</string>
<string name="error_http_not_found">Introuvable</string>
<string name="clear_finished_download">Effacer les téléchargements terminés</string>
<string name="pause_downloads_on_mobile">Interrompre sur les connexions limitées</string>
<string name="pause_downloads_on_mobile_desc">Utile lors du basculement aux données mobiles, bien que certains téléchargements ne peuvent pas être suspendus</string>
<string name="list_view_mode">Mode de vue en liste</string>
@ -544,11 +541,61 @@
<string name="subtitle_activity_recaptcha">Appuyez sur « Terminé » une fois résolu</string>
<string name="recaptcha_done_button">Terminé</string>
<string name="videos_string">Vidéos</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s seconde</item>
<item quantity="other">%s secondes</item>
</plurals>
<string name="new_seek_duration_toast">En raison des contraintes dExoPlayer, le pas de déplacement a été réglée à %d secondes</string>
<string name="mute">Couper le son</string>
<string name="unmute">Remettre le son</string>
<plurals name="seconds">
<item quantity="one">%d seconde</item>
<item quantity="other">%d secondes</item>
</plurals>
<!-- Time duration plurals -->
<plurals name="minutes">
<item quantity="one">%d minute</item>
<item quantity="other">%d minutes</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d heure</item>
<item quantity="other">%d heures</item>
</plurals>
<plurals name="days">
<item quantity="one">%d jour</item>
<item quantity="other">%d jours</item>
</plurals>
<!-- feed -->
<string name="fragment_feed_title">Nouveautés</string>
<string name="feed_groups_header_title">Groupes d\'abonnements</string>
<string name="feed_oldest_subscription_update">Dernière mise à jour : %s</string>
<string name="feed_subscription_not_loaded_count">Pas chargés : %d</string>
<string name="feed_notification_loading">Chargement du flux…</string>
<string name="feed_processing_message">Préparation du flux…</string>
<string name="feed_group_dialog_select_subscriptions">Choisir les abonnements</string>
<string name="feed_group_dialog_empty_selection">Aucun abonnement sélectionné</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d sélectionné</item>
<item quantity="other">%d sélectionnés</item>
</plurals>
<string name="feed_group_dialog_empty_name">Nom de groupe vide</string>
<string name="feed_group_dialog_name_input">Nom</string>
<string name="feed_group_dialog_delete_message">Voulez-vous supprimer ce groupe ?</string>
<string name="feed_create_new_group_button_title">Nouveau</string>
<string name="settings_category_feed_title">Flux</string>
<string name="feed_update_threshold_title">Seuil de mise à jour du flux</string>
<string name="feed_update_threshold_summary">Temps depuis la dernière mise à jour pour que le flux ne soit plus considéré comme à jour — %s</string>
<string name="feed_update_threshold_option_always_update">Toujours mettre à jour</string>
<string name="feed_use_dedicated_fetch_method_title">Charger depuis un service dédié quand c\'est possible</string>
<string name="feed_use_dedicated_fetch_method_summary">Disponible pour quelques services, c\'est généralement bien plus rapide mais peut retourner un nombre d\'élements limité et des informations souvent incomplètes (ex : pas de durée, pas de statut « En direct ».</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Activer le mode rapide</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Désactiver le mode rapide</string>
<string name="feed_use_dedicated_fetch_method_help_text">Pensez-vous que la chargement du flux est trop lent \? Si c\'est le cas, essayez le mode rapide (vous pouvez changer le mode dans les paramètres ou en pressant le bouton en dessous).
\n
\n NewPipe propose deux manières de charger le flux :
\n • Charger toutes les chaines auquelles vous êtes abonnés, cette manière est lente mais complète.
\n • Charger depuis un service dédié, cette manière est plus rapide mais souvent incomplète.
\n
\n La différence entre les deux est que la méthode rapide manque souvent de quelques informations, comme la durée d\'un élément ou le type (nous ne pouvons pas différencier les vidéos en direct des vidéos normales) et pourrait retourner moins d\'éléments.
\n
\n YouTube est un exemple qui offre cette méthode rapide avec le flux RSS.
\n
\n Donc le choix vous revient : Préferez-vous la vitesse ou des informations précises \?</string>
<string name="help">Aide</string>
</resources>

View File

@ -331,7 +331,6 @@
\n2. להיכנס אם נתבקשת
\n3. ההורדה אמורה להתחיל (זה קובץ הייצוא)</string>
<string name="playback_tempo">קצב</string>
<string name="playback_default">ברירת מחדל</string>
<string name="use_inexact_seek_title">שימוש בחיפוש מהיר ולא מדויק</string>
<string name="use_inexact_seek_summary">חיפוש גס מאפשר לנגן לחפש נקודת זמן מהר יותר, ברמת דיוק נמוכה יותר. חיפוש של 5, 15 או 25 שניות לא עובד עם ההגדרה הזאת.</string>
<string name="download_thumbnail_title">טעינת תמונות ממוזערות</string>
@ -463,7 +462,6 @@
<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="clear_finished_download">פינוי ההורדות שהסתיימו</string>
<string name="stop">עצירה</string>
<string name="max_retry_msg">מספר הניסיונות החוזרים המרבי</string>
<string name="max_retry_desc">מספר הניסיונות החוזרים המרבי בטרם ביטול ההורדה</string>
@ -556,13 +554,68 @@
<string name="subtitle_activity_recaptcha">יש ללחוץ על „סיום” לאחר הפתירה</string>
<string name="recaptcha_done_button">סיום</string>
<string name="videos_string">סרטונים</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s שניות</item>
<item quantity="two">%s שניות</item>
<item quantity="many">%s שניות</item>
<item quantity="other">%s שניות</item>
<plurals name="seconds">
<item quantity="one">שנייה אחת</item>
<item quantity="two">%d שניות</item>
<item quantity="many">%d שניות</item>
<item quantity="other">%d שניות</item>
</plurals>
<string name="new_seek_duration_toast">עקב מגבלות של ExoPlayer מגבלות טווחי החיפוש הוגדרו לכדי %d שניות</string>
<string name="mute">השתקה</string>
<string name="unmute">ביטול השתקה</string>
<string name="help">עזרה</string>
<plurals name="minutes">
<item quantity="one">דקה</item>
<item quantity="two">%d דקות</item>
<item quantity="many">%d דקות</item>
<item quantity="other">%d דקות</item>
</plurals>
<plurals name="hours">
<item quantity="one">שעה</item>
<item quantity="two">שעתיים</item>
<item quantity="many">%d שעות</item>
<item quantity="other">%d שעות</item>
</plurals>
<plurals name="days">
<item quantity="one">יום</item>
<item quantity="two">יומיים</item>
<item quantity="many">%d ימים</item>
<item quantity="other">%d ימים</item>
</plurals>
<string name="feed_groups_header_title">קבוצות הזנות</string>
<string name="feed_oldest_subscription_update">העדכון הישן ביותר למינוי: %s</string>
<string name="feed_subscription_not_loaded_count">לא נטען: %s</string>
<string name="feed_notification_loading">ההזנה נטענת…</string>
<string name="feed_processing_message">ההזנה בהליכי עיבוד…</string>
<string name="feed_group_dialog_select_subscriptions">בחירת מינויים</string>
<string name="feed_group_dialog_empty_selection">לא נבחר מינוי</string>
<string name="feed_group_dialog_empty_name">שם הקבוצה ריק</string>
<string name="feed_group_dialog_name_input">שם</string>
<string name="feed_group_dialog_delete_message">למחוק את הקבוצה הזאת\?</string>
<string name="feed_create_new_group_button_title">חדשה</string>
<string name="settings_category_feed_title">הזנה</string>
<string name="feed_update_threshold_title">סף עדכון ההזנה</string>
<string name="feed_update_threshold_option_always_update">לעדכן תמיד</string>
<string name="feed_use_dedicated_fetch_method_enable_button">הפעלת מצב מהיר</string>
<string name="feed_use_dedicated_fetch_method_disable_button">השבתת מצב מהיר</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">נבחר אחד</item>
<item quantity="two">%d נבחרו</item>
<item quantity="many">%d נבחרו</item>
<item quantity="other">%d נבחרו</item>
</plurals>
<string name="feed_update_threshold_summary">הזמן לאחר העדכון האחרון בטרם מינוי נחשב לבלתי עדכני — %s</string>
<string name="feed_use_dedicated_fetch_method_title">לקבל מהזנה ייעודית כשניתן</string>
<string name="feed_use_dedicated_fetch_method_summary">זמין בחלק מהשירותים, האפשרות הזאת בדרך כלל מהירה יותר אך עשויה להחזיר כמות מוגבלת של פריטים ולעתים פרטים חלקיים (למשל: חסר משך הפרק, סוג הפריט, אין מצב חי).</string>
<string name="feed_use_dedicated_fetch_method_help_text">לדעתך הטעינה אטית מדי\? אם זה המצב אצלך, כדאי לנסות להפעיל טעינה מהירה (ניתן לשנות בהגדרות או על ידי לחיצה על הכפתור שלהלן).
\n
\nהיישומון NewPipe מציע שתי אסטרטגיות לטעינת הזנה:
\n• הורדת כל ערוץ המינוי, אטי אבל שלם.
\n• באמצעות נקודת קצה ייעודית, מהיר אבל חלקי.
\n
\nההבדל בין השתיים הוא שבמהירה חסרים פרטים, כמו משך הפריט או סוגו (אין אפשרות להבדיל בין סרטונים חיים לרגילים) והיא עשויה להחזיר פחות פריטים.
\n
\nYouTube זאת דוגמה לשירות שמציע את השיטה המהירה הזאת עם הזנת ה־RSS שלו.
\n
\nלכן עומדת בפניך הבחירה: מהירות או דיוק בפרטים.</string>
</resources>

View File

@ -437,7 +437,6 @@
<string name="error_http_no_content">सर्वर डेटा नहीं भेजता है</string>
<string name="error_http_not_found">नहीं मिला</string>
<string name="error_postprocessing_failed">प्रक्रिया के बाद का कार्य विफल रहा</string>
<string name="clear_finished_download">समाप्त डाउनलोड साफ़ करें</string>
<string name="stop">रुको</string>
<string name="max_retry_msg">अधिकतम पुनर्प्रयास</string>
<string name="max_retry_desc">डाउनलोड रद्द करने से पहले प्रयासों की अधिकतम संख्या</string>

View File

@ -17,9 +17,9 @@
<string name="choose_browser">Izaberi pretraživač</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 na NEKIM rezolucijama</string>
<string name="use_external_video_player_summary">Uklanja zvuk na nekim rezolucijama</string>
<string name="use_external_audio_player_title">Koristi vanjski reproduktor za zvuk</string>
<string name="popup_mode_share_menu_title">NewPipe skočni prozor</string>
<string name="popup_mode_share_menu_title">Skočni prozor</string>
<string name="subscribe_button_title">Pretplati se</string>
<string name="subscribed_button_title">Pretplaćeno</string>
<string name="channel_unsubscribed">Pretplata na kanalu otkazana</string>
@ -63,7 +63,7 @@
<string name="enable_search_history_summary">Svaku pretragu spremi lokalno</string>
<string name="enable_watch_history_title">Prati povijest</string>
<string name="enable_watch_history_summary">Pratite pogledane videozapise</string>
<string name="resume_on_audio_focus_gain_title">Nastavi nakon dobivanja fokusa</string>
<string name="resume_on_audio_focus_gain_title">Nastavi reprodukciju</string>
<string name="resume_on_audio_focus_gain_summary">Nastavi reproducirati nakon prekidanja (npr. telefonski pozivi)</string>
<string name="download_dialog_title">Preuzmi</string>
<string name="next_video_title">Sljedeće</string>
@ -80,7 +80,7 @@
<string name="content">Sadržaj</string>
<string name="show_age_restricted_content_title">Prikaži eksplicitni sadržaj</string>
<string name="video_is_age_restricted">Videozapis je dobno ograničen. Dopuštanje takvog sadržaja moguće je u postavkama.</string>
<string name="duration_live">UŽIVO</string>
<string name="duration_live">Uživo</string>
<string name="downloads">Preuzimanja</string>
<string name="downloads_title">Preuzimanja</string>
<string name="error_report_title">Prijavi grešku</string>
@ -109,7 +109,7 @@
<string name="sorry_string">Oprostite, ovo se nije trebalo dogoditi.</string>
<string name="error_report_button_text">Prijavi pogrešku putem e-maila</string>
<string name="error_snackbar_message">Oprostite, neke greške su se dogodile.</string>
<string name="error_snackbar_action">PRIJAVI</string>
<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:\\nRequest:\\nContent Jezik:\\nService:\\nGMT Vrijeme:\\nPackage:\\nVersion:\\nOS version:</string>
@ -129,7 +129,7 @@
<string name="video">Videozapis</string>
<string name="audio">Zvuk</string>
<string name="retry">Ponovno pokušaj</string>
<string name="storage_permission_denied">Dozvola za pisanje po pohrani je odbijena</string>
<string name="storage_permission_denied">Omogućite pristup pohrani prvo</string>
<string name="short_thousand">tis.</string>
<string name="short_million">mil</string>
<string name="short_billion">mlrd.</string>
@ -276,7 +276,7 @@
<string name="resize_fill">Ispuniti</string>
<string name="resize_zoom">Povećaj</string>
<string name="caption_auto_generated">Auto generirano</string>
<string name="enable_leak_canary_title">Omogući \"LeakCanary\"</string>
<string name="enable_leak_canary_title">LeakCanary</string>
<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">Izvijestite o pogreškama izvan životnog ciklusa</string>
<string name="show_info">Prikaži informacije</string>
@ -301,7 +301,7 @@
<string name="import_data_summary">Poništava vašu trenutnu povijest i pretplate</string>
<string name="export_data_summary">Izvoz povijesti, pretplata i playlisti</string>
<string name="clear_views_history_title">Očisti povijest gledanja</string>
<string name="clear_views_history_summary">Briše povijest reproduciranih streamova</string>
<string name="clear_views_history_summary">Briše povijest reproduciranih streamova i pozicije reprodukcije</string>
<string name="delete_view_history_alert">Obriši cijelu povijest gledanja\?</string>
<string name="watch_history_deleted">Povijest gledanja izbrisana.</string>
<string name="clear_search_history_title">Obriši povijest pretraživanja</string>
@ -449,14 +449,13 @@
<string name="error_path_creation">Odredišnu mapu nije moguće stvoriti</string>
<string name="error_file_creation">Datoteku nije moguće stvoriti</string>
<string name="error_permission_denied">Sustav je odbio dozvolu</string>
<string name="error_ssl_exception">Sigurna veza nije uspjela</string>
<string name="error_ssl_exception">Nije moguće uspostaviti sigurnu vezu</string>
<string name="error_unknown_host">Nije moguće pronaći server</string>
<string name="error_connect_host">Nije moguće povezati se s serverom</string>
<string name="error_http_no_content">Server ne šalje podatke</string>
<string name="error_http_unsupported_range">Poslužitelj ne prihvaća preuzimanja s više niti, pokušaj ponovo s @string/msg_threads = 1</string>
<string name="error_http_not_found">Nije pronađeno</string>
<string name="error_postprocessing_failed">Naknadna obrada nije uspjela</string>
<string name="clear_finished_download">Obriši završena preuzimanja</string>
<string name="stop">Stop</string>
<string name="max_retry_msg">Maksimalnih ponovnih pokušaja</string>
<string name="max_retry_desc">Maksimalni broj pokušaja prije poništavanja preuzimanja</string>
@ -477,4 +476,46 @@
<string name="privacy_policy_encouragement">"Projekt NewPipe ozbiljno shvaća vašu privatnost. Stoga aplikacija ne prikuplja nikakve podatke bez vašeg pristanka.
\nNewPipe pravila o privatnosti detaljno objašnjavaju koji se podaci šalju i pohranjuju kada šaljete izvješće o padu aplikacije."</string>
<string name="start_accept_privacy_policy">Kako bismo se uskladili s Europskom općom uredbom o zaštiti podataka (GDPR), upozoravamo vas na politiku privatnosti tvrtke NewPipe. Pažljivo ga pročitajte. Morate ga prihvatiti da nam pošaljete izvješća o pogreškama.</string>
<string name="enable_playback_resume_title">Nastavi reprodukciju</string>
<string name="enable_playback_resume_summary">Vrati zadnji položaj reprodukcije</string>
<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="missing_file">Datoteka je premještena ili izbrisana</string>
<string name="download_already_pending">U tijeku je preuzimanje s ovim nazivom</string>
<string name="error_timeout">Vrijeme povezanosti je isteklo</string>
<string name="confirm_prompt">Želite li očistiti povijest preuzimanja ili izbrisati sve preuzete datoteke\?</string>
<string name="start_downloads">Započni preuzimanja</string>
<string name="pause_downloads">Zaustavi preuzimanja</string>
<string name="downloads_storage_ask_title">Pitaj gdje preuzeti</string>
<string name="clear_playback_states_title">Obriši poziciju reprodukcije</string>
<string name="clear_playback_states_summary">Obriši sve pozicije reprodukcije</string>
<string name="delete_playback_states_alert">Obriši 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="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>
<string name="recently_added">Nedavno dodano</string>
<string name="playlist_no_uploader">Automatski generirano (nije pronađen nijedan autor)</string>
<string name="clear_download_history">Očisti povijest preuzimanja</string>
<string name="delete_downloaded_files">Izbriši preuzete datoteke</string>
<string name="deleted_downloads">Obrisano %1$s preuzimanja</string>
<string name="permission_display_over_apps">Dajte dopuštenje za prikazivanje na vrhu</string>
<string name="app_language_title">Jezik aplikacije</string>
<string name="systems_language">Zadani sustav</string>
<string name="videos_string">Videozapisi</string>
<string name="mute">Isključi</string>
<string name="unmute">Uključi</string>
<string name="help">Pomoć</string>
<string name="feed_notification_loading">Učitavanje feeda…</string>
<string name="feed_group_dialog_name_input">Ime</string>
<string name="feed_group_dialog_delete_message">Želite li izbrisati ovu grupu\?</string>
<string name="feed_create_new_group_button_title">Novi</string>
<string name="feed_update_threshold_option_always_update">Uvijek ažuriraj</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Omogući brz način</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Onemogući brz način</string>
<string name="error_insufficient_storage">Memorija uređaja je popunjena</string>
</resources>

View File

@ -120,4 +120,57 @@
<string name="switch_to_main">Cambia a Principal</string>
<string name="clear_views_history_title">Vacuar le chronologia de reproductiones</string>
<string name="videos_string">Videos</string>
<string name="clear_views_history_summary">Dele le chronologia del contenido reguardate e positiones de reproduction</string>
<string name="watch_history_states_deleted">Positiones de reproduction delite.</string>
<string name="clear_search_history_title">Vacuar le chronologia de cerca</string>
<string name="network_error">Error de rete</string>
<string name="content_not_available">Contento non disponibile</string>
<string name="live_streams_not_supported">Fluxos in directe ancora non supportate</string>
<string name="player_stream_failure">Non poteva reproducer iste video</string>
<string name="invalid_url_toast">URL invalide</string>
<string name="video_streams_empty">Necun fluxo de video trovate</string>
<string name="audio_streams_empty">Necun fluxo de audio trovate</string>
<string name="invalid_directory">Le dossier non existe</string>
<string name="file_name_empty_error">Le nomine del file non pote esser vacue</string>
<string name="what_device_headline">Information:</string>
<string name="your_comment">Tu commento (in anglese):</string>
<string name="error_details_headline">Detalios:</string>
<string name="use_tor_title">Usar Tor</string>
<string name="retry">Retentar</string>
<string name="no_views">Nulle reproductiones</string>
<string name="no_videos">Nulle videos</string>
<string name="no_comments">Nulle commentos</string>
<string name="start">Initiar</string>
<string name="delete">Deler</string>
<string name="delete_one">Deler un</string>
<string name="delete_all">Deler omne</string>
<string name="rename">Renominar</string>
<string name="msg_name">Nomine de file</string>
<string name="msg_server_unsupported">Servitor non supportate</string>
<string name="msg_exists">Le file jam existe</string>
<string name="msg_running">NewPipe discargante</string>
<string name="title_activity_about">A proposito de NewPipe</string>
<string name="action_settings">Configurationes</string>
<string name="action_about">A proposito de</string>
<string name="copyright" formatted="true">© %1$s per %2$s sub %3$s</string>
<string name="action_open_website">Aperir sito web</string>
<string name="tab_about">A proposito de</string>
<string name="tab_licenses">Licentias</string>
<string name="contribution_title">Contribuer</string>
<string name="view_on_github">Vider in GitHub</string>
<string name="website_title">Sito web</string>
<string name="website_encouragement">Visita le sito web de NewPipe pro plus de informationes e novitates.</string>
<string name="app_license_title">Licentia de NewPipe</string>
<string name="read_full_license">Leger le licentia</string>
<string name="title_history_search">Recercas</string>
<string name="title_history_view">Reproductiones</string>
<string name="history_disabled">Le chronologia es disactivate</string>
<string name="action_history">Chronologia</string>
<string name="history_empty">Le chronologia es vacue</string>
<string name="history_cleared">Chronologia vacue</string>
<string name="title_last_played">Ultime reproductiones</string>
<string name="title_most_played">Le plus reproducite</string>
<string name="main_page_content">Contento del pagina principal</string>
<string name="select_a_channel">Selige un canal</string>
<string name="recaptcha_done_button">Preste</string>
</resources>

View File

@ -310,7 +310,6 @@
<string name="resize_zoom">Perbesar</string>
<string name="caption_auto_generated">Otomatis dibuat</string>
<string name="enable_leak_canary_title">LeakCanary</string>
<string name="playback_default">Bawaan</string>
<string name="no_player_found_toast">Pemutar stream tidak ditemukan (anda bisa memasang VLC untuk memutarnya).</string>
<string name="controls_download_desc">Unduh berkas stream</string>
<string name="subscription_change_failed">Tidak bisa merubah subscription</string>
@ -452,7 +451,6 @@
<string name="error_http_unsupported_range">Server tidak menerima unduhan multi-utas, coba lagi dengan @string/msg_threads = 1</string>
<string name="error_http_not_found">Tidak ditemukan</string>
<string name="error_postprocessing_failed">Pengolahan-pasca gagal</string>
<string name="clear_finished_download">Hapus unduhan yang sudah selesai</string>
<string name="stop">Berhenti</string>
<string name="max_retry_msg">Percobaan maksimum</string>
<string name="max_retry_desc">Jumlah upaya maksimum sebelum membatalkan unduhan</string>
@ -538,8 +536,39 @@
<string name="seek_duration_title">Durasi maju/mundur cepat</string>
<string name="subtitle_activity_recaptcha">Tekan \"Selesai\" saat selesai</string>
<string name="videos_string">Video</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="other">%s detik</item>
<plurals name="seconds">
<item quantity="other">%d detik</item>
</plurals>
<string name="new_seek_duration_toast">Karena kendala ExoPlayer, durasi pencarian ditetapkan ke %d detik</string>
<string name="help">Bantuan</string>
<plurals name="minutes">
<item quantity="other">%d menit</item>
</plurals>
<plurals name="hours">
<item quantity="other">%d jam</item>
</plurals>
<plurals name="days">
<item quantity="other">%d hari</item>
</plurals>
<string name="feed_groups_header_title">Grup feed</string>
<string name="feed_oldest_subscription_update">Pembaruan subscription terlama: %s</string>
<string name="feed_subscription_not_loaded_count">Tidak dimuat: %d</string>
<string name="feed_notification_loading">Memuat feed…</string>
<string name="feed_processing_message">Memproses feed…</string>
<string name="feed_group_dialog_select_subscriptions">Pilih subscription</string>
<string name="feed_group_dialog_empty_selection">Tidak ada subscription yang dipilih</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="other">%d dipilih</item>
</plurals>
<string name="feed_group_dialog_empty_name">Nama grup kosong</string>
<string name="feed_group_dialog_name_input">Nama</string>
<string name="feed_group_dialog_delete_message">Apakah anda ingin menghapus grup ini\?</string>
<string name="feed_create_new_group_button_title">Baru</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Threshold pembaruan feed</string>
<string name="feed_update_threshold_summary">Waktu setelah pembaruan terakhir sebelum subscription dianggap kedaluwarsa — %s</string>
<string name="feed_update_threshold_option_always_update">Selalu diperbarui</string>
<string name="feed_use_dedicated_fetch_method_summary">Tersedia pada beberapa layanan, biasanya lebih cepat tetapi memperbarui lebih sedikit item dan sering kali dengan informasi yang tidak lengkap (mis. tanpa durasi, tanpa tipe item, tanpa status live).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Aktifkan mode cepat</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Nonaktifkan mode cepat</string>
</resources>

View File

@ -362,7 +362,6 @@
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Tono</string>
<string name="unhook_checkbox">Scollega (può causare distorsione)</string>
<string name="playback_default">Valore predefinito</string>
<string name="no_streams_available_download">Nessun flusso disponibile per il download</string>
<string name="preferred_open_action_settings_title">\'Apri\' preferibilmente con</string>
<string name="preferred_open_action_settings_summary">Azione predefinita all\'apertura del contenuto — %s</string>
@ -456,7 +455,6 @@
<string name="error_http_unsupported_range">Il server non accetta download multipli, riprovare con @string/msg_threads = 1</string>
<string name="error_http_not_found">Non trovato</string>
<string name="error_postprocessing_failed">Post-processing fallito</string>
<string name="clear_finished_download">Pulisci i download completati</string>
<string name="stop">Ferma</string>
<string name="max_retry_msg">Numero Massimo Tentativi</string>
<string name="max_retry_desc">Quante volte provare prima di annullare il download</string>
@ -544,11 +542,57 @@
<string name="subtitle_activity_recaptcha">Premere \"Fatto\" quando risolto</string>
<string name="recaptcha_done_button">Fatto</string>
<string name="videos_string">Video</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s secondi</item>
<item quantity="other">%s secondi</item>
<plurals name="seconds">
<item quantity="one">%d secondo</item>
<item quantity="other">%d secondi</item>
</plurals>
<string name="new_seek_duration_toast">A causa dei vincoli di ExoPlayer la durata dello spostamento rapido è stata impostata a %d secondi</string>
<string name="mute">Silenzia</string>
<string name="unmute">Riattiva audio</string>
<string name="help">Aiuto</string>
<plurals name="minutes">
<item quantity="one">%d minuto</item>
<item quantity="other">%d minuti</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d ora</item>
<item quantity="other">%d ore</item>
</plurals>
<plurals name="days">
<item quantity="one">%d giorno</item>
<item quantity="other">%d giorni</item>
</plurals>
<string name="feed_groups_header_title">Gruppi Feed</string>
<string name="feed_oldest_subscription_update">Aggiornamento iscrizioni più vecchie: %s</string>
<string name="feed_subscription_not_loaded_count">Non caricate: %d</string>
<string name="feed_notification_loading">Caricamento feed…</string>
<string name="feed_processing_message">Elaborazione feed…</string>
<string name="feed_group_dialog_select_subscriptions">Seleziona Iscrizioni</string>
<string name="feed_group_dialog_empty_selection">Nessuna iscrizione selezionata</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d selezionato</item>
<item quantity="other">%d selezionati</item>
</plurals>
<string name="feed_group_dialog_name_input">Nome</string>
<string name="feed_group_dialog_delete_message">Eliminare questo gruppo\?</string>
<string name="feed_create_new_group_button_title">Nuovo</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Limite Aggiornamento Feed</string>
<string name="feed_update_threshold_summary">Tempo che deve trascorrere dopo l\'ultimo aggiornamento, prima che un\'iscrizione venga considerata obsoleta — %s</string>
<string name="feed_update_threshold_option_always_update">Aggiorna Sempre</string>
<string name="feed_use_dedicated_fetch_method_title">Recupero da Feed Dedicato quando Disponibile</string>
<string name="feed_use_dedicated_fetch_method_summary">Disponibile per alcuni servizi. Solitamente è molto più veloce, ma può restituire una quantità limitata di elementi e informazioni spesso incomplete (es. durata, tipo di elemento, indicatore per video in diretta).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Attiva Recupero Veloce</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Disattiva Recupero Veloce</string>
<string name="feed_use_dedicated_fetch_method_help_text">Il caricamento dei feed è troppo lento\? Prova ad abilitare il caricamento veloce (nelle impostazioni o premendo il pulsante qui sotto).
\n
\nNewPipe dispone di due metodi per il caricamento dei feed:
\n• Recuperando l\'intero canale, lento ma completo.
\n• Utilizzando un endpoint dedicato, veloce ma solitamente incompleto.
\n
\nLa differenza è che quello veloce solitamente offre meno informazioni, come la durata o il tipo di elemento (non distingue i video normali da quelli in diretta), e può restituire meno elementi.
\n
\nYouTube è un esempio di servizio che offre questo metodo veloce tramite i suoi feed RSS.
\n
\nLa scelta va fatta in base alle proprie preferenze: velocità o informazioni precise.</string>
</resources>

View File

@ -305,7 +305,6 @@
<string name="subscriptions_export_unsuccessful">登録リストがエクスポートできませんでした</string>
<string name="playback_tempo">速度</string>
<string name="playback_pitch">音程</string>
<string name="playback_default">デフォルト</string>
<string name="background_player_append">バックグラウンド再生の順番待ちに追加</string>
<string name="popup_playing_append">ポップアップ再生の順番待ちに追加</string>
<string name="clear_views_history_title">再生履歴を消去</string>
@ -442,7 +441,6 @@
<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="clear_finished_download">完了済みを一覧から削除します</string>
<string name="stop">停止</string>
<string name="max_retry_msg">最大再試行回数</string>
<string name="max_retry_desc">ダウンロードを中止するまでの最大再試行回数</string>
@ -537,10 +535,53 @@
<string name="subtitle_activity_recaptcha">解けたら \"完了\" を押してください</string>
<string name="recaptcha_done_button">完了</string>
<string name="videos_string">動画</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="other">%s</item>
<plurals name="seconds">
<item quantity="other">%d</item>
</plurals>
<string name="new_seek_duration_toast">ExoPlayer の制約のためシーク間隔は %d 秒に設定されました</string>
<string name="mute">ミュート</string>
<string name="unmute">ミュート解除</string>
<string name="help">ヘルプ</string>
<plurals name="minutes">
<item quantity="other">%d 分</item>
</plurals>
<plurals name="hours">
<item quantity="other">%d 時間</item>
</plurals>
<plurals name="days">
<item quantity="other">%d 日</item>
</plurals>
<string name="feed_groups_header_title">フィード グループ</string>
<string name="feed_oldest_subscription_update">最も古い登録チャンネルの更新: %s</string>
<string name="feed_subscription_not_loaded_count">読み込み失敗: %d</string>
<string name="feed_notification_loading">フィードを読み込み中…</string>
<string name="feed_processing_message">フィードを処理中…</string>
<string name="feed_group_dialog_select_subscriptions">チャンネルを選択</string>
<string name="feed_group_dialog_empty_selection">チャンネルが選択されていません</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="other">%d 選択中</item>
</plurals>
<string name="feed_group_dialog_empty_name">グループ名が空です</string>
<string name="feed_group_dialog_name_input">グループ名</string>
<string name="feed_group_dialog_delete_message">このグループを削除しますか?</string>
<string name="feed_create_new_group_button_title">新規</string>
<string name="settings_category_feed_title">フィード</string>
<string name="feed_update_threshold_title">フィードの更新間隔</string>
<string name="feed_update_threshold_summary">最後の更新後、登録チャンネルを更新すべきとするまでの時間 ― %s</string>
<string name="feed_update_threshold_option_always_update">常に更新する</string>
<string name="feed_use_dedicated_fetch_method_title">利用可能な場合は専用フィードから取得</string>
<string name="feed_use_dedicated_fetch_method_summary">いくつかのサービスで利用可能、通常よりも高速ですが制限された情報が取得され、たいていの場合不完全です (例: 再生時間、種類、ライブ ステータスなどがない)。</string>
<string name="feed_use_dedicated_fetch_method_enable_button">高速モードを有効化</string>
<string name="feed_use_dedicated_fetch_method_disable_button">高速モードを無効化</string>
<string name="feed_use_dedicated_fetch_method_help_text">フィードの読み込みが遅すぎると思いますか? その場合、高速読み込みを有効化してみてください (設定、もしくは下のボタンを押して変更することができます)。
\n
\nNewPipe は2つの読み込み方法を提供します:
\n・登録チャンネル全体を取得します。これは低速ですが完全です。
\n・専用のサービス エンドポイントを使用します。これは高速ですが、たいていの場合不完全です。
\n
\n2つの違いとして、高速なものは通常、再生時間や種類 (ライブと通常の動画を区別できない) などの情報が不足して、正しい量の情報より少なく取得することがあります。
\n
\nYouTubeは、この高速な読み込み方法をRSSフィードで提供するサービスのひとつです。
\n
\nつまり、読み込み方法の選択は速度または正確さのどちらを優先するか、あなたの好みによります。</string>
</resources>

View File

@ -358,7 +358,6 @@
<string name="playback_tempo">템포</string>
<string name="playback_pitch">피치</string>
<string name="unhook_checkbox">영상과 소리 분리 (소리가 깨질 수 있음)</string>
<string name="playback_default">기본</string>
<string name="no_streams_available_download">다운로드 가능한 스트림이 없습니다</string>
<string name="toast_no_player">이 파일을 재생할 수 있는 플레이어 앱이 없습니다</string>
<string name="preferred_open_action_settings_title">선호하는 열기 동작</string>
@ -453,7 +452,6 @@
<string name="error_http_unsupported_range">서버가 다중 스레드 다운로드를 받아들이지 않습니다, @string/msg_threads = 1 를 사용해 다시 시도해보세요</string>
<string name="error_http_not_found">HTTP 찾을 수 없습니다</string>
<string name="error_postprocessing_failed">후처리 작업이 실패하였습니다</string>
<string name="clear_finished_download">완료된 다운로드 비우기</string>
<string name="stop">멈추기</string>
<string name="max_retry_msg">최대 재시도 횟수</string>
<string name="max_retry_desc">다운로드를 취소하기 전까지 다시 시도할 최대 횟수</string>

View File

@ -22,7 +22,7 @@
<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="popup_mode_share_menu_title">دۆخی په‌نجه‌ره‌ی بچووک</string>
<string name="subscribe_button_title">به‌شداربوون</string>
<string name="subscribed_button_title">به‌شداربوویت</string>
<string name="channel_unsubscribed">به‌شداریت نەما له‌ كه‌ناڵ</string>
@ -37,15 +37,15 @@
<string name="controls_popup_title">په‌نجه‌ره‌ی بچووک</string>
<string name="controls_add_to_playlist_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>
<string name="download_path_audio_summary">پەڕگەی دەنگە داگیراوەکان لێرەدا هەڵدەگیرێن</string>
<string name="download_path_audio_dialog_title">فۆڵدەری داگرتنی پەڕگە دەنگییەکان هەڵبژێرە</string>
<string name="autoplay_by_calling_app_title">كاركردنی خۆكارانه‌</string>
<string name="default_resolution_title">قه‌باره‌ی بنەڕەتی</string>
<string name="default_resolution_title">وردی بنەڕەتی</string>
<string name="default_popup_resolution_title">قه‌باره‌ی بنەڕەتی په‌نجه‌ره‌ی بچووک</string>
<string name="show_higher_resolutions_title">پیشاندانی قه‌باره‌ی به‌رزتر</string>
<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">ئەپەکە نه‌دۆزرایه‌وه‌. دابمه‌زرێت؟</string>
@ -64,14 +64,14 @@
<string name="download_thumbnail_summary">ناچالاكی بكه‌ بۆ ڕاگرتنی وێنۆچكه‌كان له‌ باركردن و پاشه‌كه‌وتبوون له‌سه‌ر بیرگه‌ی ئامێره‌كه‌ت.
\nگۆڕینی ئه‌مه‌ ده‌بێته‌ هۆی سڕینه‌وه‌یان له‌سه‌ر بیرگه‌ی مۆبایله‌كه‌ت.</string>
<string name="thumbnail_cache_wipe_complete_notice">پاشماوه‌ی وێنۆچكه‌كان سڕایه‌وه‌</string>
<string name="autoplay_by_calling_app_summary">ڤیدیۆ کارپێبکرێ کاتێ NewPipe لە ئەپێکیتر کرایەوە</string>
<string name="use_inexact_seek_title">بەکارهێنانی بەدواگەڕانی ناتەواوی خێرا</string>
<string name="autoplay_by_calling_app_summary">ڤیدیۆ کارپێبکرێ کاتێ ئەپەکە لە ئەپێکیتر کرایەوە</string>
<string name="use_inexact_seek_title">بەکارهێنانی بردنەپێشی ناتەواوی خێرا</string>
<string name="metadata_cache_wipe_title">خاوێنکردنەوەی پاشماوەی داتا</string>
<string name="metadata_cache_wipe_summary">سڕینەوەی پاشماوەی هەموو داتاکان</string>
<string name="metadata_cache_wipe_complete_notice">پاشماوەی داتاکان سڕانەوە</string>
<string name="auto_queue_title">ڕیزکردنی خۆکاری کارپێکردنی دواتر</string>
<string name="player_gesture_controls_title">کۆنتڕۆڵی کارپێکەر بەجوڵەی پەنجە</string>
<string name="player_gesture_controls_summary">جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ و ڕووناکی</string>
<string name="player_gesture_controls_summary">جوڵەی پەنجەت لەسەر ڕوونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ و ڕووناکی</string>
<string name="show_search_suggestions_title">گەڕانی پێشنیارکراوەکان</string>
<string name="show_search_suggestions_summary">پیشاندانی پێشنیارەکان لەکاتی گەڕان</string>
<string name="enable_search_history_title">مێژووی گەڕان</string>
@ -84,7 +84,7 @@
<string name="url_not_supported_toast">بەستەرەکە پشتگیری نەکراوە</string>
<string name="default_content_country_title">وڵاتی بنەڕەتی</string>
<string name="service_title">خزمەتگوزاری</string>
<string name="settings_category_player_title">کارپێکەری ڤیدیۆ</string>
<string name="settings_category_player_title">کارپێکەر</string>
<string name="settings_category_video_audio_title">ڤیدیۆ &amp; دەنگ</string>
<string name="settings_category_history_title">مێژوو &amp; پاشماوە</string>
<string name="settings_category_popup_title">پەنجەرەی بچووک</string>
@ -98,11 +98,11 @@
<string name="play_btn_text">کارپێکردن</string>
<string name="content">ناوەڕۆک</string>
<string name="show_age_restricted_content_title">سنوردانانی تەمەن</string>
<string name="duration_live">زیندو</string>
<string name="duration_live">زیندوو</string>
<string name="downloads">داگرتنەکان</string>
<string name="downloads_title">داگرتنەکان</string>
<string name="error_report_title">ناتوانرێ سکاڵابکرێ</string>
<string name="all">هەمووی</string>
<string name="all">گشتی</string>
<string name="channel">کەناڵ</string>
<string name="playlist">لیستی کارپێکردن</string>
<string name="yes">بەڵێ</string>
@ -114,12 +114,12 @@
<string name="popup_resizing_indicator_title">قەبارە دانانەوە</string>
<string name="best_resolution">باشترین قەبارە</string>
<string name="undo">گەڕانەوە</string>
<string name="play_all">کارپێکردنی هەمووی</string>
<string name="play_all">کارپێکردنی گشتی</string>
<string name="always">هەمیشە</string>
<string name="just_once">تەنها ئێستا</string>
<string name="file">فایل</string>
<string name="notification_channel_name">ئاگانامەکانی NewPipe</string>
<string name="notification_channel_description">ئاگانامەکانی NewPipe بۆ پاشبنەما و کارپێکردنەکانی پەنجەرەی بچووک</string>
<string name="file">پەڕگە</string>
<string name="notification_channel_name">ئاگانامەکانی ئەپ</string>
<string name="notification_channel_description">ئاگانامەکانی ئەپ بۆ پاشبنەما و کارپێکردنەکانی پەنجەرەی بچووک</string>
<string name="unknown_content">(نەزانراو)</string>
<string name="toggle_orientation">چەسپاندنی لاربوونەوە</string>
<string name="switch_to_background">گۆڕین بۆ پاشبنەما</string>
@ -140,13 +140,13 @@
<string name="could_not_get_stream">هیچ پەخشێ نەدۆزرایەوە</string>
<string name="could_not_load_image">ناتوانرێ وێنە باربکرێ</string>
<string name="app_ui_crash">ئەپ/ڕووکار ڕاوەستا</string>
<string name="player_stream_failure">ناتوانرێ ئەم پەخشە لێبدرێ</string>
<string name="player_stream_failure">ناتوانرێ ئەم پەخشە کارپێبکرێ</string>
<string name="external_player_unsupported_link_type">کارپێکەرە ڤیدیۆییە دەرەکییەکان پشتگیری ئەم جۆرە بەستەرانە ناکەن</string>
<string name="invalid_url_toast">بەستەر هەڵەیە</string>
<string name="video_streams_empty">هیچ پەخشێکی ڤیدیۆیی نەدۆزرایەوە</string>
<string name="audio_streams_empty">پەخشی هیچ دەنگێک نەدۆزرایەوە</string>
<string name="invalid_file">ئەو فایلە بوونی نییە یان دەسەڵاتی خوێندنەوە و نوسینی لاوازە</string>
<string name="file_name_empty_error">ناوی فایل ناکرێ بەتاڵ بێت</string>
<string name="invalid_file">ئەو پەڕگەیە بوونی نییە یان دەسەڵاتی خوێندنەوە و نوسینی لاوازە</string>
<string name="file_name_empty_error">ناوی پەڕگە ناکرێ بەتاڵ بێت</string>
<string name="error_occurred_detail">هەڵەیەک ڕوویدا : %1$s</string>
<string name="sorry_string">ببوورە، ناتوانرێ ئەوە ڕووبدات.</string>
<string name="error_report_button_text">سکاڵا لەسەر کێشە لەڕێگای ئیمێڵ</string>
@ -188,8 +188,8 @@
</plurals>
<string name="no_videos">هیچ ڤیدیۆیەک نییە</string>
<plurals name="videos">
<item quantity="one">ڤیدیۆ</item>
<item quantity="other">ڤیدیۆکان</item>
<item quantity="one">%s ڤیدیۆ</item>
<item quantity="other">%s ڤیدیۆکان</item>
</plurals>
<string name="start">دەستپێکردن</string>
<string name="pause">ڕاگرتن</string>
@ -197,18 +197,18 @@
<string name="create">دروستکردن</string>
<string name="delete">سڕینەوە</string>
<string name="delete_one">سڕینەوەی یەک دانە</string>
<string name="delete_all">سڕینەوەی هەمووی</string>
<string name="delete_all">سڕینەوەی گشتی</string>
<string name="checksum">تاقیکردنەوەی هێڵێک</string>
<string name="dismiss">ڕێپێنەدان</string>
<string name="rename">دانانەوەی ناو</string>
<string name="add">ئەرکی نوێ</string>
<string name="finish">باشە</string>
<string name="msg_name">ناوی فایل</string>
<string name="msg_name">ناوی پەڕگە</string>
<string name="msg_threads">دابەشکراوەکان</string>
<string name="msg_error">کێشە ڕوویدا</string>
<string name="msg_server_unsupported">سێرڤەر پشتگیرینەکراوە</string>
<string name="msg_exists">فایل بوونی هەیە</string>
<string name="msg_running">داگرتنەکانی NewPipe</string>
<string name="msg_exists">پەڕگە بوونی هەیە</string>
<string name="msg_running">داگرتنەکانی ئەپ</string>
<string name="msg_running_detail">گرتەبکە بۆ وردەکاری</string>
<string name="msg_wait">تکایە چاوەڕێبکە…</string>
<string name="msg_copied">لەبەرگیرایەوە</string>
@ -220,7 +220,7 @@
<string name="settings_category_downloads_title">داگرتن</string>
<string name="charset_letters_and_digits">پیت و ژمارەکان</string>
<string name="charset_most_special_characters">هێما تایبەتییەکان</string>
<string name="title_activity_about">دەربارەی NewPipe</string>
<string name="title_activity_about">دەربارەی ئەپ</string>
<string name="action_settings">ڕێکخستنەکان</string>
<string name="action_about">دەربارە</string>
<string name="copyright" formatted="true">© %1$s لەلایەن %2$s لەژێر %3$s</string>
@ -236,7 +236,7 @@
<string name="donation_encouragement">ئەم ئەپە لەلایەن چەند خۆبەخشێکەوە دروستکراوە کەکاتی خۆیان پێ بەخشیووە تاکو باشترین خزمەتگوزاریت پێشکەش بکەن. هیچ نەبێت بە کڕینی کوپێک قاوە یارمەتی گەشەپێدەرەکانمان بدە بۆ ئەوەی کاتی زیاتر تەرخان بکەین بۆ بەرەوپێشبردنی NewPipe.</string>
<string name="give_back">پێدانەوە</string>
<string name="website_title">ماڵپەڕ</string>
<string name="website_encouragement">سەردانی ماڵپەڕی NewPipe بکە بۆ زانیاری و هەواڵی نوێ.</string>
<string name="website_encouragement">سەردانی ماڵپەڕی ئەپەکەمان بکە بۆ زانیاری و هەواڵی نوێ.</string>
<string name="read_full_license">خوێندنەوەی مۆڵەتنامە</string>
<string name="title_activity_history">مێژوو</string>
<string name="title_history_search">گەڕا</string>
@ -266,19 +266,19 @@
<string name="always_ask_open_action">هەمیشە بپرسە</string>
<string name="preferred_player_fetcher_notification_title">دەستکەوتنی زانیاری…</string>
<string name="preferred_player_fetcher_notification_message">بارکردنی ناوەڕۆکی داواکراو</string>
<string name="create_playlist">لیستی نوێ</string>
<string name="create_playlist">خشتەی کارپێکردنی نوێ</string>
<string name="delete_playlist">سڕینەوە</string>
<string name="rename_playlist">ناوںْوسینەوە</string>
<string name="playlist_name_input">ناو</string>
<string name="append_playlist">زیادکردن بۆ لیست</string>
<string name="set_as_playlist_thumbnail">دانان لەسەر وێنۆچکەی لیست</string>
<string name="bookmark_playlist">لیستی نیشانەکراو</string>
<string name="append_playlist">زیادکردن بۆ خشتەی کارپێکردن</string>
<string name="set_as_playlist_thumbnail">دانان لەسەر وێنۆچکەی خشتەی کارپێکردن</string>
<string name="bookmark_playlist">خشتەی کارپێکردنی نیشانەکراو</string>
<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_thumbnail_change_success">وێنۆچکەی لیست گۆڕدرا.</string>
<string name="playlist_delete_failure">ناتوانی ئەم لیستە بسڕیتەوە.</string>
<string name="delete_playlist_prompt">ئەم خشتەی کارپێکردنە بسڕدرێتەوە؟</string>
<string name="playlist_creation_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>
<string name="resize_fit">گونجاو بە ڕونما</string>
<string name="resize_fill">پڕ بە ڕونما</string>
@ -293,15 +293,15 @@
<string name="export_to">خەزنکردن بۆ</string>
<string name="import_ongoing">دەهێنرێتەوە…</string>
<string name="export_ongoing">خەزندەکرێ…</string>
<string name="import_file_title">هێنانەوەی فایل</string>
<string name="import_file_title">هێنانەوەی پەڕگە</string>
<string name="previous_export">خەزنی پێشووتر</string>
<string name="subscriptions_import_unsuccessful">ناتوانرێ بەشدارییەکان بهێنرێتەوە</string>
<string name="subscriptions_export_unsuccessful">ناتوانرێ بەشدارییەکان خەزن بکرێن</string>
<string name="import_youtube_instructions">بۆ هێنانەوەی بەشداربوونەکانی یوتوب پێویستە فایلی خەزن بوو بگەڕێنیتەوە:
\n
\n1. ئەم بەستەرە بکەوە: %1$
\n2. بچۆرەژوورەوە گەر داوای‌ کرد
\n3. داگرتنێک دەست پێدەکات (ئەمە فایلی خەزنکراوە)</string>
<string name="import_youtube_instructions">بۆ هێنانەوەی بەشداربوونەکانی یوتوب پێویستە پەڕگەی خەزن بوو بگەڕێنیتەوە:
\n
\n1. ئەم بەستەرە بکەوە: %1$
\n2. بچۆرەژوورەوە گەر داوای‌ کرد
\n3. داگرتنێک دەست پێدەکات (ئەمە پەڕگەی خەزنکراوە)</string>
<string name="import_soundcloud_instructions">هێنانەوەی پەڕەی کەسی SoundCloud بەدانانی بەستەر یاخوود ئایدی:
\n
\n1. دۆخی ”Desktop mode” لە وێبگەرەکەتدا چالاک بکە (ئەم ماڵپەڕە بۆ وێبگەری مۆبایلەکان بەردەست نییە)
@ -312,14 +312,14 @@
<string name="import_network_expensive_warning">ئەوە بزانە ئەم کردارە پێویستی بە هێڵێکی گران هەیە.
\n
\nدەتەوێ بەردەوامبیت؟</string>
<string name="playback_speed_control">کۆنترۆڵی خێرایی</string>
<string name="playback_speed_control">کۆنترۆڵی خێرایی کارپێکەر</string>
<string name="playback_tempo">خێراییەکان</string>
<string name="playback_pitch">شەپۆلی دەنگ</string>
<string name="unhook_checkbox">سڕینەوەی بەستەر (ڕەنگە ببێتە هۆی تێکدان)</string>
<string name="no_streams_available_download">هیچ پەخشێک نییە بۆ داگرتن</string>
<string name="caption_setting_title">ژێرنووس</string>
<string name="caption_setting_title">ژێرنووسەکان</string>
<string name="caption_setting_description">بەهۆی گۆڕانکاری لە شێوەی ژێرنووسکردنەکە. پێویستە ئەپەکە دابخەیت و دیسانەوە بیکەیتەوە.</string>
<string name="toast_no_player">هیچ ئەپێک دانەمەزراوە بۆ کارپێکردنی ئەم فایلە</string>
<string name="toast_no_player">هیچ ئەپێک دانەمەزراوە بۆ کارپێکردنی ئەم پەڕگەیە</string>
<string name="clear_views_history_title">سڕینەوەی مێژووی تەماشاکردن</string>
<string name="clear_views_history_summary">مێژوو دەسڕێتەوە لەگەڵ ڤیدیۆ کارپێکراوەکان و شوێنی لیستە ڤیدیۆییەکان</string>
<string name="delete_view_history_alert">سڕینەوەی تەواوی مێژووی تەماشاکردن؟</string>
@ -330,9 +330,9 @@
<string name="one_item_deleted">1 بابەت سڕایەوە.</string>
<string name="app_license">ئەم ئەپە سەرچاوە کراوەیە : دەتوانی بەکاریبهێنی، بیخوێنیتەوە و هاوبەشی پێبکەیت و بەرەوپێشی ببەیت.
\nبەتایبەتی دەتوانی دابەشیبکەیتەوە یاخوود بگۆڕیت بەپێی مەرجەکانی GNU مۆڵەتنامەی گشتی وەک ئەپێکی بڵاوی خۆڕایی!</string>
<string name="privacy_policy_title">سیاسەتی تایبەتی NewPipe</string>
<string name="privacy_policy_encouragement">پڕۆژەی NewPipe زانیارییە تایبەتییەکانت بەوردی دەپارێزێ. هەروەها ئەپەکە هیچ داتایەک بەبێ ئاگاداری تۆ بەکارنابات.
\nسیاسەتی تایبەتی NewPipe بەوردەکاری ڕوونکردنەوەت دەداتێ لەسەر ئەو داتایانەی وەریاندەگرێ و بەکاریاندەبات.</string>
<string name="privacy_policy_title">سیاسەتی تایبەتی ئەپ</string>
<string name="privacy_policy_encouragement">پڕۆژەی ئەپەکە زانیارییە تایبەتییەکانت بەوردی دەپارێزێ. هەروەها ئەپەکە هیچ داتایەک بەبێ ئاگاداری تۆ بەکارنابات.
\nسیاسەتی تایبەتی ئەپ بەوردەکاری ڕوونکردنەوەت دەداتێ لەسەر ئەو داتایانەی وەریاندەگرێ و بەکاریاندەبات.</string>
<string name="read_privacy_policy">خوێندنەوەی سیاسەتی تایبەتی</string>
<string name="channels">کەناڵەکان</string>
<string name="playlists">لیستی کارپێکردنەکان</string>
@ -342,14 +342,14 @@
<string name="tab_new">پەڕەیەکی نوێ</string>
<string name="tab_choose">هەڵبژاردنی پەڕە</string>
<string name="volume_gesture_control_title">کۆنترۆڵی دەنگ بەجوڵەی پەنجە</string>
<string name="volume_gesture_control_summary">جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ</string>
<string name="volume_gesture_control_summary">جوڵەی پەنجەت لەسەر ڕوونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ</string>
<string name="brightness_gesture_control_title">کۆنترۆڵی ڕووناکی بەجوڵەی پەنجە</string>
<string name="brightness_gesture_control_summary">جوڵەی پەنجەت لەسەر ڕونما بەکاربهێنە بۆ گۆڕینی ئاستی ڕووناکی ڕونما</string>
<string name="brightness_gesture_control_summary">جوڵەی پەنجەت لەسەر ڕوونما بەکاربهێنە بۆ گۆڕینی ئاستی ڕووناکی ڕوونما</string>
<string name="content_language_title">زمانی بنەڕەتی ئەپ</string>
<string name="settings_category_updates_title">نوێکارییەکان</string>
<string name="file_deleted">فایل سڕایەوە</string>
<string name="file_deleted">پەڕگە سڕایەوە</string>
<string name="app_update_notification_channel_name">ئاگانامەی نوێکاری ئەپ</string>
<string name="app_update_notification_channel_description">ئاگانامەکانی وەشانی نوێی NewPipe</string>
<string name="app_update_notification_channel_description">ئاگانامەکانی وەشانی نوێی ئەپ</string>
<string name="download_to_sdcard_error_title">بیرگەی دەرەکی بەردەست نییە</string>
<string name="download_to_sdcard_error_message">داگرتن لە بیرگەی دەرەکی ناکرێت.
\nشوێنی فۆڵدەری داگرتنەکان دابنرێتەوە؟</string>
@ -358,9 +358,9 @@
<string name="subscribers_count_not_available">ژمارەی بەشداربووان نادیارە</string>
<string name="download_already_running">داگرتنێکیترت هەیە بەهەمان ناو</string>
<string name="show_error">پیشاندانی کێشە</string>
<string name="label_code">کۆد</string>
<string name="label_code">هێما</string>
<string name="error_path_creation">فۆڵدەری مەبەست ناتوانرێ دروست بکرێ</string>
<string name="error_file_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>
@ -372,8 +372,8 @@
<string name="show_comments_summary">ناچالاککردن بۆ پیشان نەدانی لێدوانەکان</string>
<string name="autoplay_title">کارپێکردنی خۆکاری</string>
<plurals name="comments">
<item quantity="one">لێدوان</item>
<item quantity="other">لێدوانەکان</item>
<item quantity="one">%s لێدوان</item>
<item quantity="other">%s لێدوانەکان</item>
</plurals>
<string name="no_comments">هیچ لێدوانێک نییە</string>
<string name="enable_playback_resume_title">کارپێکردنەوەی لیست</string>
@ -382,7 +382,7 @@
<string name="settings_category_clear_data_title">سڕینەوەی داتا</string>
<string name="watch_history_deleted">مێژووی تەماشاکردن سڕایەوە.</string>
<string name="watch_history_states_deleted">شوێنی کارپێکراوەکان سڕانەوە.</string>
<string name="missing_file">شوێنی فایل گۆڕدراوە یان سڕاوەتەوە</string>
<string name="missing_file">شوێنی پەڕگە گۆڕدراوە یان سڕاوەتەوە</string>
<string name="download_already_pending">داگرتنێکیتر هەیە بەهەمان ناو</string>
<string name="clear_playback_states_title">سڕینەوەی شوێنی کارپێکراوەکان</string>
<string name="clear_playback_states_summary">شوێنی هەموو کارپێکراوەکان دەسڕێتەوە</string>
@ -399,7 +399,7 @@
<item quantity="one">%s گوێی لێدەگرێ</item>
<item quantity="other">%s گوێی لێدەگرن</item>
</plurals>
<string name="use_inexact_seek_summary">داواکردنی ناتەواو وا لە کارپێکەرەکە دەکات زۆر بەخێرایی شوێنەکان بگۆڕێت لەگەڵ وردییەکی داشکێنراو</string>
<string name="use_inexact_seek_summary">بردنەپێشی ناتەواوی خێرا وا لە کارپێکەرەکە داکات کە بەخێرایی شوێنەکە بگۆڕێت. بردنەپێشی ٥ یان ١٥ یان ٢٥ چرکەیی لەگەڵ ئەمەدا کارناکات.</string>
<string name="auto_queue_summary">پاشکۆی خۆکاری پەخشێکی بەستراوە لەکاتی کارپێکردنی کۆتا پەخشدا</string>
<string name="enable_search_history_summary">کۆگای گەڕانی نێوخۆیی</string>
<string name="resume_on_audio_focus_gain_title">گێڕانەوە لەدۆخی سەرنج</string>
@ -411,16 +411,16 @@
<string name="player_unrecoverable_failure">نەگێڕانەوەی کارپێکەر بۆ پێش کێشە ڕوویدا</string>
<string name="player_recoverable_failure">گێڕانەوەی کارپێکەر بۆکاتی پێش کێشە</string>
<string name="invalid_directory">هەمان فۆڵدەر بوونی نییە</string>
<string name="invalid_source">هەمان فایل/بابەت بوونی نییە</string>
<string name="invalid_source">هەمان پەڕگە/بابەت بوونی نییە</string>
<string name="info_labels">چی:\\nداواکراو:\\nناوەڕۆک:\\nلانگ:\\nخزمەتگوزاری:\\nGMT:\\nکات:\\nپاکێج:\\nوەشان:\\nوەشانی سیستەم:</string>
<string name="use_tor_summary">|(تاقیکاری) داگرتنی خێرا بەبەکارهێنانی Tor بۆ زیادکردنی تایبەتێتی (پشتگیری پەخشە ڕاستەوخۆکان ناکات) .</string>
<string name="msg_url_malform">بەستەر هەڵەیە یاخوود بەئینتەرنێتەوە پەیوەست نەبوویت</string>
<string name="settings_file_charset_title">هێما ڕێگەپێدراوەکان لە فایلێکی ناویدا</string>
<string name="settings_file_charset_title">هێما ڕێگەپێدراوەکان لە پەڕگەیەکی ناویدا</string>
<string name="settings_file_replacement_character_summary">هێما نادروستەکان بەم بەهایە جێگۆڕکێ دەکرێن</string>
<string name="settings_file_replacement_character_title">هێمای جێگۆڕین</string>
<string name="title_licenses">مۆڵەتنامەی ئەپ</string>
<string name="app_description">ئەپێکی خۆڕایی و کێشی کەم بۆ پەخشی ڕاستەوخۆ لەسەر ئەندرۆید.</string>
<string name="app_license_title">مۆڵەتنامەی NewPipe</string>
<string name="app_license_title">مۆڵەتنامەی ئەپ</string>
<string name="blank_page_summary">پەڕەی بەتاڵ</string>
<string name="kiosk_page_summary">پەڕەی کیۆسک</string>
<string name="subscription_page_summary">پەڕەی بەشدارییەکان</string>
@ -431,8 +431,8 @@
<string name="select_a_kiosk">هەڵبژاردنی کیۆسک</string>
<string name="export_complete_toast">خەزنکرا</string>
<string name="import_complete_toast">هێنرایەوە</string>
<string name="no_valid_zip_file">فایلی ZIP دروست نییە</string>
<string name="could_not_import_all_files">ئاگاداربە: ناتوانرێ هەمان فایلەکان بهێنرێنەوە.</string>
<string name="no_valid_zip_file">پەڕگەی ZIP دروست نییە</string>
<string name="could_not_import_all_files">ئاگاداربە: ناتوانرێ هەموو پەڕگەکان بهێنرێنەوە.</string>
<string name="override_current_data">ئەمە لەسەر ڕێکخستنەکانی ئێستات جێگیردەبێت.</string>
<string name="kiosk">کیۆسک</string>
<string name="trending">پڕبینەرەکان</string>
@ -467,11 +467,11 @@
<string name="selection">هەڵبژاردن</string>
<string name="updates_setting_title">نوێکارییەکان</string>
<string name="updates_setting_description">پیشاندانی ئاگانامەیەک بۆ ئامادەبوونی ئەپ لەکاتی بەردەست بوونی وەشانی نوێ</string>
<string name="list_view_mode">لیستی شێوازی بینین</string>
<string name="list">لیست</string>
<string name="grid">چوار خانە</string>
<string name="auto">خۆکار</string>
<string name="switch_view">گۆڕینی شێواز</string>
<string name="list_view_mode">شێوازی پیشاندانی خشتە</string>
<string name="list">خشتەیی</string>
<string name="grid">چوار خانەیی</string>
<string name="auto">خۆکاری</string>
<string name="switch_view">گۆڕینی پیشاندان</string>
<string name="app_update_notification_content_title">وەشانی نوێی ئەپ بەردەستە!</string>
<string name="app_update_notification_content_text">گرتەبکە بۆ داگرتن</string>
<string name="missions_header_finished">تەواوبوو</string>
@ -489,14 +489,14 @@
<string name="conferences">کۆنفرانسەکان</string>
<string name="error_unable_to_load_comments">ناتوانرێ لێدوانەکان باربکرێ</string>
<string name="enable_playback_state_lists_summary">پیشاندانی نیشانەکەری شوێنی کارپێکراو لە لیستەکان</string>
<string name="overwrite_unrelated_warning">فایلێک بەهەمان ناو هەیە</string>
<string name="overwrite_finished_warning">فایلێکی داگیراو بەم ناوەوە هەیە</string>
<string name="overwrite_failed">ناتوانرێ لەسەر ئەو فایلە جێگیربکرێ</string>
<string name="overwrite_unrelated_warning">پەڕگەیەک بەهەمان ناو هەیە</string>
<string name="overwrite_finished_warning">پەڕگەیەکی داگیراو بەم ناوەوە هەیە</string>
<string name="overwrite_failed">ناتوانرێ لەسەر ئەو پەڕگەیە جێگیربکرێ</string>
<string name="localization_changes_requires_app_restart">زمان دەگۆڕدرێ لەدوای داخستن و پاشان کردنەوەی ئەپ.</string>
<string name="default_kiosk_page_summary">کیۆسکی بنەڕەتی</string>
<string name="seek_duration_title">خێرا بردنە پێشەوە\\ گێڕانەوە بۆکاتی سەرەتا</string>
<string name="peertube_instance_url_title">دۆخی PeerTube</string>
<string name="peertube_instance_url_summary">ئارەزوومەندییەکانی دۆخی پێرتوبی ڕێکبخە</string>
<string name="seek_duration_title">ماوەی خێرا بردنە پێشەوە\\ گێڕانەوە بۆ دواوە</string>
<string name="peertube_instance_url_title">دۆخی پێرتووبی</string>
<string name="peertube_instance_url_summary">ئارەزوومەندییەکانی دۆخی پێرتووبی ڕێکبخە</string>
<string name="peertube_instance_url_help">ئەو دۆخانە بدۆزەرەوە کە لەگەڵ خۆتدا دەگونجێن لە %s</string>
<string name="peertube_instance_add_title">زیادکردنی دۆخ</string>
<string name="peertube_instance_add_help">بەستەری دۆخ دابنێ</string>
@ -505,16 +505,15 @@
<string name="peertube_instance_add_exists">هەمان دۆخ کاراکراوە</string>
<string name="error_http_not_found">نەدۆزرایەوە</string>
<string name="error_postprocessing_failed">چارەسەرکردن شکستی هێنا</string>
<string name="clear_finished_download">سڕینەوەی داگرتنە تەواوبووەکان</string>
<string name="stop">ڕاوەستان</string>
<string name="stop">ڕاگرتن</string>
<string name="max_retry_msg">زیاترین هەوڵدانەکان</string>
<string name="max_retry_desc">زۆرترین ژمارەی هەوڵدان پێش پاشگەزبوونەوە لە داگرتنەکە</string>
<string name="pause_downloads_on_mobile">ڕاوەستا لەسەر کێشەی هێڵ</string>
<string name="pause_downloads_on_mobile_desc">بەسوودە بۆ کاتی گۆڕینی هێڵ بۆ داتای مۆبایل, لەگەڵ ئەوەشدا زۆربەی داگرتنەکان ڕاناگرێت</string>
<string name="close">داخستن</string>
<string name="error_postprocessing_stopped">NewPipe داخرا لەکاتی کارکردن لەسەر ئەو فایلە</string>
<string name="error_postprocessing_stopped">ئەپ داخرا لەکاتی کارکردن لەسەر ئەو پەڕگەیە</string>
<string name="error_insufficient_storage">بیرگەی ناوەکیت پڕبووە</string>
<string name="error_progress_lost">کردارەکە شکستی هێنا, چونکە ئەو فایلە سڕاوەتەوە</string>
<string name="error_progress_lost">کردارەکە شکستی هێنا, چونکە ئەو پەڕگەیە سڕاوەتەوە</string>
<string name="error_timeout">هێڵی ئینتەرنێت نەما</string>
<string name="confirm_prompt">ئایا دەتەوێ مێژووی داگرتنەکانت بسڕدرێنەوە یان هەموو فایلە داگیراوەکان بسڕدرێنەوە؟</string>
<string name="enable_queue_limit">سنوری ڕیزبوونی داگرتنەکان</string>
@ -522,11 +521,11 @@
<string name="start_downloads">دەستپێکردنەوەی داگرتنەکان</string>
<string name="pause_downloads">ڕاگرتنی داگرتنەکان</string>
<string name="downloads_storage_ask_title">پرسیاربکرێ لەکوێ دابگیرێ</string>
<string name="downloads_storage_ask_summary">پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر فایلێک</string>
<string name="downloads_storage_ask_summary_kitkat">پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر فایلێک
\nدەتوانیت SAF بەکاربهێنیت گەر دەتەوێ لە بیرگەی دەرەکیدا فایلەکان دابگریت</string>
<string name="downloads_storage_ask_summary">پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر پەڕگەیەک</string>
<string name="downloads_storage_ask_summary_kitkat">پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر پەڕگەیەک
\nدەتوانیت SAF بەکاربهێنیت گەر دەتەوێ لە بیرگەی دەرەکیدا پەڕگەکان دابگریت</string>
<string name="downloads_storage_use_saf_title">بەکارهێنانی SAF</string>
<string name="downloads_storage_use_saf_summary">چوارچێوەی گەیشتن بە بیرگە ڕێگەدەدات بە داگرتنی فایلەکان لە بیرگەی دەرەکیدا.
<string name="downloads_storage_use_saf_summary">چوارچێوەی گەیشتن بە بیرگە ڕێگەدەدات بە داگرتنی پەڕگەکان لە بیرگەی دەرەکیدا.
\nتێبینی: هەندێ لە مۆبایلەکان پشتگیری ناکرێن</string>
<string name="local">ناوخۆ</string>
<string name="recently_added">لەم ماوەیەدا بڵاوکرابێتەوە</string>
@ -546,8 +545,47 @@
<string name="subtitle_activity_recaptcha">گرتە بکە لەسەر ”تەواو” کاتێ کە چارەسەرکرا</string>
<string name="recaptcha_done_button">تەواو</string>
<string name="videos_string">ڤیدیۆکان</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s چرکە</item>
<item quantity="other">%s چرکە</item>
<plurals name="seconds">
<item quantity="one">%d چرکە</item>
<item quantity="other">%d چرکە</item>
</plurals>
<string name="new_seek_duration_toast">بەهۆی ExoPlayer ەوە ماوەی بردنەپێش و بردنەپاش لە %d چرکەدا دیاریکرا</string>
<string name="mute">بێدەنگکردن</string>
<string name="unmute">بێدەنگ نەکردن</string>
<string name="help">یارمەتی</string>
<plurals name="minutes">
<item quantity="one">%d خولەک</item>
<item quantity="other">%d خولەك</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d کاتژمێر</item>
<item quantity="other">%d کات ژمێر</item>
</plurals>
<plurals name="days">
<item quantity="one">%d ڕۆژ</item>
<item quantity="other">"%d ڕۆژەکان"</item>
</plurals>
<string name="feed_groups_header_title">کۆمەڵە دیارەکان</string>
<string name="feed_oldest_subscription_update">کۆنترین نوێکردنەوەی بەشداری: %s</string>
<string name="feed_subscription_not_loaded_count">بارنەکراو : %d</string>
<string name="feed_notification_loading">بارکردن…</string>
<string name="feed_processing_message">ئامادەکردن…</string>
<string name="feed_group_dialog_select_subscriptions">دیاریکردنی بەشدارییەکان</string>
<string name="feed_group_dialog_empty_selection">هیچ بەشدارییەک دیاری نەکراوە</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d دیاریکراو</item>
<item quantity="other">%d هەڵبژێردراو</item>
</plurals>
<string name="feed_group_dialog_empty_name">ناوی کۆمەڵە بەتاڵە</string>
<string name="feed_group_dialog_name_input">ناو</string>
<string name="feed_group_dialog_delete_message">ئایا دەتەوێ ئەم کۆمەڵەیە بسڕیتەوە؟</string>
<string name="feed_create_new_group_button_title">نوێ</string>
<string name="settings_category_feed_title">دیار</string>
<string name="feed_update_threshold_title">نوێکاری دیار</string>
<string name="feed_update_threshold_summary">کاتی پاش دواین نوێکردنەوە دوای بەشداربوون ڕەچاوکراوە — %s</string>
<string name="feed_update_threshold_option_always_update">هەمیشە نوێکردنەوە</string>
<string name="feed_use_dedicated_fetch_method_title">تێکەڵکردن لە دیاری تەرخانکراوەوە کاتێ بەردەست بوو</string>
<string name="feed_use_dedicated_fetch_method_summary">لەهەندێ خزمەتگوزاریدا بەردەستە، هەمیشە خێرایە بەڵام ڕەنگە هەندێ لە بابەتەکان زانیارییەکانیان ناتەواو بێت (وەک نەبوونی ماوە، جۆری بابەت ، نەبوونی پەخش).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">چالاککردنی دۆخی خێرا</string>
<string name="feed_use_dedicated_fetch_method_disable_button">چالاک نەکردنی دۆخی خێرا</string>
</resources>

View File

@ -1,9 +1,9 @@
<?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="no_player_found">Не е пронајден плеер за стримови. Сакате да инсталирате VLC\?</string>
<string name="no_player_found_toast">Не е пронајден плеер за стримови (можеш да инсталираш VLC)</string>
<string name="install">Инсталирај</string>
<string name="cancel">Откажи</string>
@ -19,14 +19,14 @@
<string name="choose_browser">Одбери пребарувач</string>
<string name="screen_rotation">ротација</string>
<string name="use_external_video_player_title">Користи надворешен видео плеер</string>
<string name="use_external_video_player_summary">Отстранува звук на НЕКОИ резолуции</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="subscribe_button_title">Зачлени се</string>
<string name="subscribed_button_title">Зачленет</string>
<string name="channel_unsubscribed">Откажано е членството на каналот</string>
<string name="subscription_change_failed">Не може да се промени членството</string>
<string name="subscription_update_failed">Не може да се освежи членството</string>
<string name="subscription_change_failed">Не може да се промени претплатата</string>
<string name="subscription_update_failed">Не може да се ажурира претплатата</string>
<string name="show_info">Покажи информации</string>
<string name="tab_main">Почетна</string>
<string name="tab_subscriptions">Членства</string>
@ -36,21 +36,21 @@
<string name="controls_popup_title">Подпрозорче</string>
<string name="controls_add_to_playlist_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_audio_title">Локација за зачувување аудио</string>
<string name="download_path_audio_summary">Локација за зачувување аудио</string>
<string name="download_path_audio_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>
<string name="autoplay_by_calling_app_title">Автоматско пуштање</string>
<string name="autoplay_by_calling_app_summary">Пушта видео кога NewPipe е повикана од друга апликација</string>
<string name="autoplay_by_calling_app_summary">Пушта видео кога NewPipe е уклучена од друга апликација</string>
<string name="default_resolution_title">Стандардна резолуција</string>
<string name="default_popup_resolution_title">Стандардна резолуција на подпрозорчето</string>
<string name="show_higher_resolutions_title">Покажи повисоки резолуции</string>
<string name="show_higher_resolutions_summary">Само некои уреди поддржуваат 2К/4К видеа</string>
<string name="default_popup_resolution_title">Стандардна резолуција на малиот прозор</string>
<string name="show_higher_resolutions_title">Прикажи повисоки резолуции</string>
<string name="show_higher_resolutions_summary">Само одредени уреди поддржуваат 2К/4К видеа</string>
<string name="play_with_kodi_title">Пушти на Kodi</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="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>
<string name="default_audio_format_title">Стандарден аудио формат</string>
<string name="default_video_format_title">Стандарден видео формат</string>
@ -58,37 +58,37 @@
<string name="light_theme_title">Светла</string>
<string name="dark_theme_title">Темна</string>
<string name="black_theme_title">Црна</string>
<string name="popup_remember_size_pos_title">Запамти го местото и големината на прозорчето</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">Со непрецизното премотување може да се пребарува побрзо, но понепрецизно</string>
<string name="download_thumbnail_title">Прочитај сликички</string>
<string name="download_thumbnail_summary">Оневозможи, за да не се читаат сликичките од видеото, за штедење меморија и интернет. Промена на опцијата ќе ја избрише кеш-меморијата</string>
<string name="thumbnail_cache_wipe_complete_notice">Сликичките се избришани</string>
<string name="metadata_cache_wipe_title">Избриши ги собраните мета-податоци</string>
<string name="metadata_cache_wipe_summary">Избриши ги сите собрани податоци од веб-страни</string>
<string name="metadata_cache_wipe_complete_notice">Избришани се мета-податоците</string>
<string name="auto_queue_title">Автоматски постави го на листа следното видео</string>
<string name="use_inexact_seek_summary">Со непрецизното премотување се пребарува побрзо, но со намалена презицност.</string>
<string name="download_thumbnail_title">Прочитај мали видео-сликички</string>
<string name="download_thumbnail_summary">Оневозможете, за да не се читаат малите видео-сликички за штедење на меморија и интернет. Промената на оваа опцијата ќе ја избрише кеш-меморијата.</string>
<string name="thumbnail_cache_wipe_complete_notice">Кешираните слики се избришани</string>
<string name="metadata_cache_wipe_title">Избришете ги кешираните мета-податоци</string>
<string name="metadata_cache_wipe_summary">Избришете ги сите кеш-податоци од веб-страни</string>
<string name="metadata_cache_wipe_complete_notice">Мета-податоците се избришани</string>
<string name="auto_queue_title">Автоматски постави го на листа на следно видео</string>
<string name="auto_queue_summary">Автоматски прикачи поврзано видео кога ќе почне последното пуштено видео во неповторлива листа</string>
<string name="player_gesture_controls_title">Управување на плеерот со гестови</string>
<string name="player_gesture_controls_summary">Користи гестови за управување на светлоста и тонот</string>
<string name="show_search_suggestions_title">Предлози за пребарување</string>
<string name="show_search_suggestions_summary">Покажи предлози при пребарување</string>
<string name="enable_search_history_title">Историја на пребарувањата</string>
<string name="enable_search_history_summary">Зачувај ги пребарувањата локално</string>
<string name="player_gesture_controls_summary">Користете гестови за управување на светлоста и гласноста</string>
<string name="show_search_suggestions_title">Пребарајте предлози</string>
<string name="show_search_suggestions_summary">Прикажи предлози при пребарување</string>
<string name="enable_search_history_title">Претходни пребарувања</string>
<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_summary">Продолжи го видеото по прекини (пр. телефонски повик)</string>
<string name="download_dialog_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_summary">Продолжете со репродукција на видеото по прекини (пр. телефонски повик)</string>
<string name="download_dialog_title">Преземи</string>
<string name="next_video_title">Следно видео</string>
<string name="show_next_and_similar_title">Покажи „следни“ и „слични“ видеа</string>
<string name="show_hold_to_append_title">Покажи совет „задржи за прикачување“</string>
<string name="show_hold_to_append_summary">Прикажи совет кога позадината или копче од подпрозорчето се притиснати, на страната за видео детаљи</string>
<string name="show_next_and_similar_title">Прикажи „следни“ и „слични“ видеа</string>
<string name="show_hold_to_append_title">Прикажи „задржи за прикачување“</string>
<string name="show_hold_to_append_summary">Покажи совет при притискање на позадината или кога скок копчето е притиснато на видео \"Детали:\"</string>
<string name="url_not_supported_toast">Неподдржана URL врска</string>
<string name="default_content_country_title">Земја на прикажани видеа</string>
<string name="service_title">Услуга</string>
<string name="content_language_title">Претпочитан јазик на видеата</string>
<string name="content_language_title">Стандарден јазик на содржина</string>
<string name="settings_category_player_title">Плеер</string>
<string name="settings_category_player_behavior_title">Однесување</string>
<string name="settings_category_video_audio_title">Видео и Звук</string>
@ -362,7 +362,6 @@
<string name="playback_tempo">Темпо</string>
<string name="playback_pitch">Тон</string>
<string name="unhook_checkbox">Откачи (може да создаде мутации)</string>
<string name="playback_default">Стандардно</string>
<string name="clear_views_history_title">Избриши историја на гледаност</string>
<string name="clear_views_history_summary">Ја брише историјата на пуштени видеа</string>
<string name="delete_view_history_alert">Избриши ја целата историја на гледаност.</string>
@ -402,13 +401,13 @@
<string name="minimize_on_exit_none_description">Никое</string>
<string name="minimize_on_exit_background_description">Смали го во позадина</string>
<string name="minimize_on_exit_popup_description">Смали го во прозорче</string>
<string name="unsubscribe">Откажи членство</string>
<string name="unsubscribe">Откажете претплата</string>
<string name="tab_new">Ново јазиче</string>
<string name="tab_choose">Одбери јазиче</string>
<string name="volume_gesture_control_title">Гест за контрола на јачина на звук</string>
<string name="volume_gesture_control_summary">Користи гест за контрола на јачината на звукот</string>
<string name="brightness_gesture_control_title">Гест за контрола на осветленост</string>
<string name="brightness_gesture_control_summary">Користи гест за контрола на осветленот</string>
<string name="volume_gesture_control_title">Гест за контрола на гласност</string>
<string name="volume_gesture_control_summary">Користете гестови за подесување на гласноста</string>
<string name="brightness_gesture_control_title">Гестови за контрола на осветленост</string>
<string name="brightness_gesture_control_summary">Користете гест за контрола на осветленоста</string>
<string name="settings_category_updates_title">Ажурирања</string>
<string name="file_deleted">Дадотеката е избришана</string>
<string name="app_update_notification_channel_name">Известување за ажурирање на апликација</string>
@ -449,7 +448,6 @@
<string name="error_http_no_content">Серверот не испраќа податоци</string>
<string name="error_http_unsupported_range">Серверот не прифаќа преземања со повеќе навои, обидете се со @string/msg_threads = 1</string>
<string name="error_http_not_found">Не е најдено</string>
<string name="clear_finished_download">Избриши завршени преземања</string>
<string name="stop">Стоп</string>
<string name="max_retry_msg">Максимални обиди</string>
<string name="max_retry_desc">Максимален број обиди пред откажување на преземањето</string>
@ -457,16 +455,16 @@
<string name="events">Настани</string>
<string name="conferences">Конференции</string>
<string name="show_comments_title">Прикажи коментари</string>
<string name="autoplay_title">Автоматски старт</string>
<string name="autoplay_title">Автоматско пуштање</string>
<plurals name="comments">
<item quantity="one">Коментари</item>
<item quantity="other"></item>
<item quantity="other"/>
</plurals>
<string name="no_comments">Нема коментари</string>
<string name="error_unable_to_load_comments">Не може да се вчитаат коментарите</string>
<string name="close">Затвори</string>
<string name="enable_playback_resume_title">Продолжи со репродукција</string>
<string name="enable_playback_resume_summary">Врати ја последната позиција за репродукција</string>
<string name="enable_playback_resume_summary">Враќање на последната позиција на репродукција</string>
<string name="settings_category_clear_data_title">Избриши податоци</string>
<string name="missing_file">Дадотеката е преместена или избришана</string>
<string name="overwrite_unrelated_warning">Ддотека со ова име веќе постои</string>
@ -485,4 +483,15 @@
<string name="downloads_storage_use_saf_title">Користи SAF</string>
<string name="downloads_storage_use_saf_summary">Рамката за пристап до складирање овозможува преземања во надворешна SD-картичка.
\nЗабелешка: некои уреди не се поддржани.</string>
<string name="show_comments_summary">Исклучете за да ги скриете коментарите</string>
<string name="enable_playback_state_lists_title">Позиции во листите</string>
<string name="enable_playback_state_lists_summary">Покажете ги индикаторите за позиција за репродукција во листите</string>
<string name="download_choose_new_path">Променете го фолдерот за преземање за да има ефект</string>
<string name="seek_duration_title">Брзо премотување напред</string>
<string name="peertube_instance_url_title">Примери на PeerTube</string>
<string name="peertube_instance_url_summary">Одберете ги вашите омилени PeerTube пример</string>
<string name="peertube_instance_url_help">Пронајдете ги примерите кои ви се допаѓаат на %s</string>
<string name="peertube_instance_add_title">Додадете пример</string>
<string name="enable_lock_screen_video_thumbnail_title">мала видео-сликичка на заклучен екран</string>
<string name="enable_lock_screen_video_thumbnail_summary">Мала видео-сликичка е прикажана на заклучниот екран при користење на плеерот во позадина</string>
</resources>

View File

@ -452,7 +452,6 @@
<string name="error_http_unsupported_range">Server tidak menerima muat turun berbilang thread, cuba lagi dengan @string/msg_threads = 1</string>
<string name="error_http_not_found">Tidak ditemui</string>
<string name="error_postprocessing_failed">Pemprosesan-pasca gagal</string>
<string name="clear_finished_download">Hapuskan senarai muat turun yang selesai</string>
<string name="stop">Berhenti</string>
<string name="max_retry_msg">Percubaan maksimum</string>
<string name="max_retry_desc">Jumlah percubaan maksimum sebelum membatalkan muat turun</string>

View File

@ -345,7 +345,6 @@
<string name="playback_speed_control">Fartskontroller for avspilling</string>
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Tonehøyde</string>
<string name="playback_default">Forvalg</string>
<string name="clear_views_history_title">Tøm avspillingshistorikk</string>
<string name="clear_views_history_summary">Slett historikken og posisjon for avspilte strømmer</string>
<string name="delete_view_history_alert">Slett hele visningshistorikken\?</string>
@ -456,7 +455,6 @@
<string name="error_http_unsupported_range">"Tjeneren godtar ikke flertrådede nedlastinger, prøv igjen med @string/msg_threads = 1 "</string>
<string name="error_http_not_found">Ikke funnet</string>
<string name="error_postprocessing_failed">Etterbehandling mislyktes</string>
<string name="clear_finished_download">Tøm fullførte nedlastinger</string>
<string name="stop">Stopp</string>
<string name="max_retry_msg">Maksimalt antall forsøk</string>
<string name="max_retry_desc">Maksimalt antall tilkoblingsforsøk før nedlastingen avblåses</string>
@ -543,8 +541,28 @@
<string name="subtitle_activity_recaptcha">Trykk \"Ferdig\" når den er løst</string>
<string name="recaptcha_done_button">Ferdig</string>
<string name="videos_string">Videoer</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s sekunder</item>
<item quantity="other">%s sekunder</item>
<plurals name="seconds">
<item quantity="one">%d sekunder</item>
<item quantity="other">%d sekunder</item>
</plurals>
<string name="mute">Forstum</string>
<string name="unmute">Opphev forstumming</string>
<string name="help">Hjelp</string>
<plurals name="minutes">
<item quantity="one">%d minutt</item>
<item quantity="other">%d minutter</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="days">
<item quantity="one">%d dag</item>
<item quantity="other">%d dager</item>
</plurals>
<string name="feed_subscription_not_loaded_count">Ikke innlastet: %d</string>
<string name="feed_group_dialog_empty_name">Tomt gruppenavn</string>
<string name="feed_group_dialog_name_input">Navn</string>
<string name="feed_group_dialog_delete_message">Ønsker du å slette denne gruppen\?</string>
<string name="feed_create_new_group_button_title">Ny</string>
</resources>

View File

@ -1,15 +1,15 @@
<?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="no_player_found">कुनै स्ट्रिम प्लेयर फेला परेन। के तपाईं VLC इन्स्टल गर्न चाहनुहुन्छ \?</string>
<string name="no_player_found_toast">कुनै स्ट्रीम प्लेयर फेला परेन (तपाइँ यसलाई प्ले गर्न 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="share">सेयर</string>
<string name="download">डाउनलोड</string>
<string name="controls_download_desc">स्ट्रीम डाउनलोड गर्नुहोस्</string>
<string name="search">खोजी</string>
@ -23,8 +23,530 @@
<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="subscribed_button_title">सदस्यता लिईएको</string>
<string name="unsubscribe">सदस्यता रद्द गर्नुहोस्</string>
<string name="channel_unsubscribed">च्यानल सदस्यता रद्द गरियो</string>
<string name="subscription_change_failed">सदस्यता परिवर्तन गर्न सकिएन</string>
<string name="subscription_update_failed">सदस्यता अपडेट गर्न सकिएन</string>
<string name="show_info">जानकारी देखाउनुहोस्</string>
<string name="tab_main">मुख्य</string>
<string name="tab_subscriptions">सदस्यता</string>
<string name="tab_bookmarks">बुकमार्क गरिएको प्लेलिस्टहरू</string>
<string name="tab_new">नयाँ ट्याब</string>
<string name="tab_choose">ट्याब छनौट गर्नुहोस्</string>
<string name="fragment_whats_new">नयाँ के छ</string>
<string name="controls_background_title">पृष्ठभूमि</string>
<string name="controls_popup_title">पपअप</string>
<string name="controls_add_to_playlist_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_audio_title">अडियो डाउनलोड फोल्डर</string>
<string name="download_path_audio_summary">डाउनलोड अडियो फाइलहरू यहाँ भण्डारण छन्</string>
<string name="download_path_audio_dialog_title">अडियो फाइलहरू लागि डाउनलोड फोल्डर चयन गर्नुहोस्</string>
<string name="autoplay_by_calling_app_title">अटोप्ले</string>
<string name="autoplay_by_calling_app_summary">NewPipe अर्को अनुप्रयोगबाट भनिन्छ जब एउटा भिडियो खेल्छ</string>
<string name="default_resolution_title">पूर्वनिर्धारित संकल्प</string>
<string name="default_popup_resolution_title">पूर्वनिर्धारित पपअप संकल्प</string>
<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="show_play_with_kodi_title">\"Kodi संग प्ले\" विकल्प देखाउ</string>
<string name="show_play_with_kodi_summary">Kodi मिडिया सेन्टर मार्फत भिडियो प्ले गर्न एक विकल्प प्रदर्शन</string>
<string name="play_audio">अडियो</string>
<string name="default_audio_format_title">पूर्वनिर्धारित अडियो ढाँचा</string>
<string name="default_video_format_title">पूर्वनिर्धारित भिडियो प्रारूप</string>
<string name="theme_title">विषय</string>
<string name="light_theme_title">प्रकाश</string>
<string name="dark_theme_title">गाढा</string>
<string name="black_theme_title">कालो</string>
<string name="popup_remember_size_pos_title">पपअप आकार र स्थिति सम्झना</string>
<string name="popup_remember_size_pos_summary">पछिल्लो आकार र पपअप को स्थिति सम्झना</string>
<string name="use_inexact_seek_title">तेज \'inexact\' खोज्न प्रयोग गर्नुहोस</string>
<string name="use_inexact_seek_summary">\'Inexact\' प्लेयर कम सटीक छिटो स्थितिहरू गर्न खोज्न अनुमति दिन्छ खोज्छन्। 5, 15 वा 25 सेकेन्ड को लागि खोजी यो काम गर्दैन।</string>
<string name="download_thumbnail_title">थम्बनेल लोड</string>
<string name="show_comments_title">टिप्पणीहरू देखाऊ</string>
<string name="show_comments_summary">टिप्पणीहरू लुकाउन, बन्द गर्नुहोस</string>
<string name="download_thumbnail_summary">डाटा र स्मृति उपयोग सुरक्षित गर्न, थम्बनेलहरू लोड रोक्न, बन्द गर्नुहोस। परिवर्तनहरू दुवै मा-स्मृति र-डिस्क छवि क्यास खाली गर्छ।</string>
<string name="thumbnail_cache_wipe_complete_notice">छवि क्यास सखाप</string>
<string name="metadata_cache_wipe_title">क्यास मेटाडाटा हटाउ</string>
<string name="metadata_cache_wipe_summary">सबै क्यास वेबपेज डाटा हटाउ</string>
<string name="metadata_cache_wipe_complete_notice">मेटाडाटा क्यास सखाप</string>
<string name="auto_queue_title">स्वतः लाम अर्को स्ट्रिम</string>
<string name="auto_queue_summary">अन्त्य (गैर-दोहरो) प्लेब्याक लाम सम्बन्धित धारा स्थिति थप्दै जारी राख्न</string>
<string name="volume_gesture_control_title">आवाज मात्रा नियन्त्रण गर्न इशाराको प्रयोग</string>
<string name="volume_gesture_control_summary">प्लेयरको आवाज मात्रा नियन्त्रण गर्न इशाराहरू प्रयोग</string>
<string name="brightness_gesture_control_title">चमक इशारा नियन्त्रण</string>
<string name="brightness_gesture_control_summary">प्लेयरको चमक नियन्त्रण गर्न इशाराहरू प्रयोग</string>
<string name="player_gesture_controls_title">प्लेयर इशारा नियन्त्रण</string>
<string name="player_gesture_controls_summary">प्लेयरको चमक र मात्रा नियन्त्रण गर्न इशाराहरू प्रयोग</string>
<string name="show_search_suggestions_title">खोज सुझावहरू</string>
<string name="show_search_suggestions_summary">खोजी गर्दा सुझावहरू देखाउन</string>
<string name="enable_search_history_title">खोज इतिहास</string>
<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_summary">रुकावट (जस्तै फोन कल) पछि प्लेयर जारी</string>
<string name="download_dialog_title">डाउनलोड</string>
<string name="next_video_title">अर्को</string>
<string name="autoplay_title">अटोप्ले</string>
<string name="show_next_and_similar_title">\'अर्को\' र \'समान\' भिडियो देखाउन</string>
<string name="show_hold_to_append_title">\"होल्ड संलग्न गर्न\" टिप देखाउन</string>
<string name="show_hold_to_append_summary">पृष्ठभूमि वा भिडियो मा पपअप बटन थिच्दा टिप देखाउन \"विवरण:\"</string>
<string name="url_not_supported_toast">असमर्थित URL</string>
<string name="default_content_country_title">पूर्वनिर्धारित सामग्री देश</string>
<string name="service_title">सेवा</string>
<string name="content_language_title">पूर्वनिर्धारित सामग्री भाषा</string>
<string name="settings_category_player_title">प्लेयर</string>
<string name="settings_category_player_behavior_title">व्यवहार</string>
<string name="settings_category_video_audio_title">भिडियो र अडियोभिडियो र अडियोभिडियो र अडियो</string>
<string name="settings_category_history_title">इतिहास र क्यास</string>
<string name="settings_category_popup_title">पपअप</string>
<string name="settings_category_appearance_title">रूप</string>
<string name="settings_category_other_title">अन्य</string>
<string name="settings_category_debug_title">डिबग</string>
<string name="settings_category_updates_title">अपडेट</string>
<string name="background_player_playing_toast">पृष्ठभूमिमा प्ले</string>
<string name="popup_playing_toast">पपअप मोडमा प्ले</string>
<string name="background_player_append">पृष्ठभूमि खेलाडी मा लामबद्ध</string>
<string name="popup_playing_append">पपअप खेलाडी मा लामबद्ध</string>
<string name="play_btn_text">खेल्नु</string>
<string name="content">सामग्री</string>
<string name="show_age_restricted_content_title">उमेर प्रतिबन्धित सामग्री</string>
<string name="video_is_age_restricted">उमेर शो प्रतिबन्धित भिडियो। भविष्यमा परिवर्तन सेटिङ देखि सम्भव छ।</string>
<string name="duration_live">प्रत्यक्ष</string>
<string name="downloads">डाउनलोड</string>
<string name="downloads_title">डाउनलोड</string>
<string name="error_report_title">त्रुटि रिपोर्ट</string>
<string name="all">सबै</string>
<string name="channel">च्यानल</string>
<string name="channels">च्यानलहरू</string>
<string name="playlist">प्लेसूची</string>
<string name="playlists">प्लेसूचीहरूप्लेसूचीहरू</string>
<plurals name="videos">
<item quantity="one">%s भिडियो</item>
<item quantity="other">%s भिडियोहरू</item>
</plurals>
<plurals name="comments">
<item quantity="one">%s टिप्पणी</item>
<item quantity="other">%s टिप्पणीहरू</item>
</plurals>
<string name="tracks">ट्रयाक</string>
<string name="users">प्रयोगकर्ता</string>
<string name="events">घटनाहरू</string>
<string name="yes">हो</string>
<string name="later">पछि</string>
<string name="disabled">अक्षम</string>
<string name="filter">फिल्टर</string>
<string name="refresh">ताजा</string>
<string name="clear">स्पष्ट</string>
<string name="popup_resizing_indicator_title">रिसाइज</string>
<string name="best_resolution">सर्वश्रेष्ठ संकल्प</string>
<string name="undo">पूर्ववत</string>
<string name="file_deleted">फाइल मेटिएको</string>
<string name="play_all">सबै प्ले</string>
<string name="always">सधैं</string>
<string name="just_once">केवल एकपटक</string>
<string name="file">फाइल</string>
<string name="notification_channel_name">NewPipe सूचना</string>
<string name="notification_channel_description">NewPipe पृष्ठभूमि र पपअप खेलाडीहरू लागि सूचनाहरू</string>
<string name="app_update_notification_channel_name">सूचना अनुप्रयोग अद्यावधिक</string>
<string name="app_update_notification_channel_description">नयाँ NewPipe संस्करण लागि सूचनाहरू</string>
<string name="unknown_content">[अज्ञात]</string>
<string name="toggle_orientation">अभिमुखीकरण टगल गर्नुहोस्</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>
<string name="export_data_title">निर्यात डेटाबेस</string>
<string name="import_data_summary">आफ्नो वर्तमान इतिहास र सदस्यता ओवरराइडहरु</string>
<string name="export_data_summary">निर्यात इतिहास, सदस्यता र प्लेसूचीहरू</string>
<string name="clear_views_history_title">हेरेको इतिहास स्पष्ट</string>
<string name="clear_views_history_summary">प्ले प्रवाहको इतिहास र प्लेब्याक स्थान मेटाउँछ</string>
<string name="delete_view_history_alert">मेटाउने सम्पूर्ण हेरेको इतिहास\?</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="general_error">त्रुटि तार</string>
<string name="download_to_sdcard_error_title">बाह्य भण्डारण उपलब्ध</string>
<string name="download_to_sdcard_error_message">बाह्य SD कार्ड सम्भव छैन डाउनलोड। रिसेट डाउनलोड फोल्डर स्थान\?</string>
<string name="network_error">नेटवर्क त्रुटि</string>
<string name="could_not_load_thumbnails">सबै थम्बनेल लोड गर्न सकेन</string>
<string name="youtube_signature_decryption_error">सकेन डिक्रिप्ट भिडियो URL हस्ताक्षर</string>
<string name="parsing_error">वेबसाइट पदवर्णनगर्नसकिँदैन</string>
<string name="light_parsing_error">पूर्ण वेबसाइट पदवर्णनगर्नसकिँदैन</string>
<string name="content_not_available">सामग्री उपलब्ध</string>
<string name="could_not_setup_download_menu">डाउनलोड मेनु स्थापित गर्न सकिएन</string>
<string name="live_streams_not_supported">लाइभ स्ट्रिमहरू अझै समर्थित छैन</string>
<string name="could_not_get_stream">कुनै पनि धारा पाउन सकेन</string>
<string name="could_not_load_image">छवि लोड गर्न सकिएन</string>
<string name="app_ui_crash">अनुप्रयोग / यूआई दुर्घटनाग्रस्त</string>
<string name="player_stream_failure">यो धारा बजाउन सकिएन</string>
<string name="player_unrecoverable_failure">Unrecoverable खेलाडी त्रुटि</string>
<string name="player_recoverable_failure">खेलाडी त्रुटि रिकभर</string>
<string name="external_player_unsupported_link_type">बाह्य खेलाडीहरू लिंक यी प्रकार समर्थन छैन</string>
<string name="invalid_url_toast">अवैध URL</string>
<string name="video_streams_empty">कुनै भिडियो प्रवाह फेला</string>
<string name="audio_streams_empty">कुनै अडियो स्ट्रिम फेला</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="error_occurred_detail">एउटा त्रुटि देखापर्यो:% 1 $ को</string>
<string name="no_streams_available_download">कुनै डाउनलोड गर्न उपलब्ध धाराहरु</string>
<string name="saved_tabs_invalid_json">सुरक्षित ट्याबहरू पढ्न सकिएन, पूर्वनिर्धारित व्यक्तिहरूलाई प्रयोग त</string>
<string name="restore_defaults">फेरी पहिलाकै अवस्था मा लैजाऊ</string>
<string name="restore_defaults_confirmation">तपाईं पूर्वनिर्धारित पुनर्स्थापना गर्न चाहनुहुन्छ\?</string>
<string name="sorry_string">माफ गर्नुहोस्, त्यो हुनु हुँदैनथ्यो।</string>
<string name="error_report_button_text">ई-मेल मार्फत यो त्रुटि रिपोर्ट</string>
<string name="error_snackbar_message">माफ गर्नुहोस्, केही त्रुटिहरू भयो।</string>
<string name="error_snackbar_action">रिपोर्ट</string>
<string name="what_device_headline">जानकारी:</string>
<string name="what_happened_headline">के भयो:</string>
<string name="info_labels">के:\\nअनुरोध:\\nसामग्री भाषा: \\nसेवा:\\nGMT समय:\\nप्याकेज:\\nसंस्करण: \\nOS संस्करण:</string>
<string name="your_comment">तपाईंको टिप्पणी (अंग्रेजी मा):</string>
<string name="error_details_headline">विवरण:</string>
<string name="list_thumbnail_view_description">सामग्री वर्णन (राम्रो पहुँच लागि)</string>
<string name="detail_thumbnail_view_description">प्ले भिडियो, अवधि:</string>
<string name="detail_uploader_thumbnail_view_description">अपलोडरको अवतार थम्बनेल</string>
<string name="detail_likes_img_view_description">मनपर्दो</string>
<string name="detail_dislikes_img_view_description">मन नपर्ने</string>
<string name="use_tor_title">Tor प्रयोग</string>
<string name="use_tor_summary">(प्रयोगात्मक) बल डाउनलोड वृद्धि गोपनीयता लागि Tor मार्फत यातायात (स्ट्रिम भिडियो अझै समर्थित)।</string>
<string name="report_error">रिपोर्ट त्रुटि</string>
<string name="user_report">प्रयोगकर्ता रिपोर्ट</string>
<string name="search_no_results">कुनै परिणाम</string>
<string name="empty_subscription_feed_subtitle">यहाँ केही तर crickets</string>
<string name="detail_drag_description">पुन: क्रमबद्ध गर्न तान्नुहोस्</string>
<string name="err_dir_create">डाउनलोड निर्देशिका सिर्जना गर्न सकिँदैन \'% 1 $ को\'</string>
<string name="info_dir_created">डाउनलोड फोल्डर सिर्जना गरियो \'%1$s\'</string>
<string name="video">भिडियो</string>
<string name="audio">अडियो</string>
<string name="retry">पुन: प्रयास</string>
<string name="storage_permission_denied">पहिलो भण्डारण पहुँच प्रदान</string>
<string name="short_thousand">K</string>
<string name="short_million">एम</string>
<string name="short_billion">अर्ब</string>
<string name="no_subscribers">शून्य चयन छैन प्राप्त (केही भाषामा) यो एन्ड्रोइड लागि \"विशेष मामला\" छैन रूपमा</string>
<plurals name="subscribers">
<item quantity="one">%s सदस्य</item>
<item quantity="other">%s सदस्यहरु</item>
</plurals>
<string name="subscribers_count_not_available">उपलब्ध गणना सदस्य</string>
<string name="no_views">कुनै दृश्य</string>
<plurals name="views">
<item quantity="one">% हेरियो</item>
<item quantity="other">%s पटक हेरियो</item>
</plurals>
<string name="no_videos">कुनै भिडियो</string>
<string name="no_comments">प्रत्रिक्रिया छैन</string>
<string name="start">मिशन</string>
<string name="pause">पज</string>
<string name="view">खेल्नु</string>
<string name="create">सिर्जना</string>
<string name="delete">मेटाउन</string>
<string name="delete_one">मेटाउने एक</string>
<string name="delete_all">मेटाउने सबै</string>
<string name="checksum">चेकसम</string>
<string name="dismiss">खारेज</string>
<string name="rename">पुनः नामकरण</string>
<string name="add">खण्ड</string>
<string name="finish">ठिक छ</string>
<string name="msg_name">msg</string>
<string name="msg_threads">सूत्रहरू</string>
<string name="msg_error">त्रुटि</string>
<string name="msg_server_unsupported">असमर्थित सर्भर</string>
<string name="msg_exists">फाइल पहिले नै अवस्थित</string>
<string name="msg_url_malform">विकृत URL वा इन्टरनेट उपलब्ध छैन</string>
<string name="msg_running">NewPipe डाउनलोड</string>
<string name="msg_running_detail">विवरण लागि ट्याप गर्नुहोस्</string>
<string name="msg_wait">कृपया पर्खनुहोस्…</string>
<string name="msg_copied">क्लिपबोर्डमा प्रतिलिपि</string>
<string name="no_available_dir">कृपया डाउनलोड फोल्डर सेटिङहरू पछि परिभाषित</string>
<string name="msg_popup_permission">पपअप मोडमा खोल्न
\nयो अनुमति आवश्यक छ</string>
<string name="one_item_deleted">1 वस्तु हटाइयो।</string>
<string name="recaptcha_request_toast">reCAPTCHA चुनौती अनुरोध</string>
<string name="settings_category_downloads_title">डाउनलोड</string>
<string name="settings_file_charset_title">FILENAMES अनुमति वर्ण</string>
<string name="settings_file_replacement_character_summary">अवैध वर्ण यो मूल्य प्रतिस्थापन गर्दै</string>
<string name="settings_file_replacement_character_title">प्रतिस्थापन वर्ण</string>
<string name="charset_letters_and_digits">अक्षर र अंक</string>
<string name="charset_most_special_characters">सबैभन्दा विशेष वर्ण</string>
<string name="toast_no_player">कुनै अनुप्रयोग यो फाइल खेल्न स्थापित</string>
<string name="title_activity_about">बारेमा</string>
<string name="action_settings">सेटिङहरू</string>
<string name="action_about">बारेमा</string>
<string name="title_licenses">तेस्रो-पक्ष इजाजत पत्र</string>
<string name="copyright" formatted="true">©% 1 $ को% 2 $ s द्वारा% 3 $ को अन्तर्गत</string>
<string name="error_unable_to_load_license">लाइसेन्स लोड गर्न सकेन</string>
<string name="action_open_website">वेबसाइट खुला</string>
<string name="tab_about">बारेमा</string>
<string name="tab_contributors">योगदानकर्ता</string>
<string name="tab_licenses">लाइसेन्स</string>
<string name="app_description">(Android)एन्ड्रोइडमा निःशुल्क लाइटवेट स्ट्रिमिंग।</string>
<string name="contribution_title">योगदान</string>
<string name="contribution_encouragement">तपाईं को विचार छ कि छैन; अनुवाद, डिजाइन परिवर्तन, कोड सफाई, वा वास्तविक भारी कोड परिवर्तन-मद्दत सधैं छ स्वागत गर्दछौं। अधिक राम्रो यो हुन्छ गरिन्छ!</string>
<string name="view_on_github">GitHub हेर्नुहोस्</string>
<string name="donation_title">दान</string>
<string name="donation_encouragement">NewPipe तपाईं ल्याउन सबै भन्दा राम्रो प्रयोगकर्ता अनुभव आफ्नो स्वतन्त्र समय खर्च स्वयंसेवकहरु विकास गरिएको छ। NewPipe अझ राम्रो तिनीहरू एक कप कफी आनन्द गर्दा बनाउन मद्दत विकासकर्ताहरूले फिर्ता दिनुहोस्।</string>
<string name="give_back">फिर्ता दिनुहोस</string>
<string name="website_title">वेबसाइट</string>
<string name="website_encouragement">थप जानकारी र समाचार लागि NewPipe वेबसाइट मा जानुहोस्।</string>
<string name="privacy_policy_title">NewPipe गोपनीयता नीति</string>
<string name="privacy_policy_encouragement">न्यू पाइप परियोजना आफ्नो गोपनीयता धेरै गम्भीरतापूर्वक लिन्छ। तसर्थ, तपाईँको सहमति बिना कुनै पनि डाटा संकलन गर्दैन।
\nन्यू पाइपको गोपनीयता नीतिले क्र्यास रिपोर्ट पठाउने बित्तिकै कुन डाटा पठाइएको र भण्डारण गरिएको छ भनेर विस्तृत वर्णन गर्दछ।</string>
<string name="read_privacy_policy">गोपनीयता नीति पढ्नुहोस्</string>
<string name="app_license_title">NewPipe इजाजत पत्र</string>
<string name="app_license">NewPipe copyleft छ मुफ्त सफ्टवेयर: तपाईं प्रयोग गर्न सक्नुहुन्छ, अध्ययन शेयर र इच्छामा सुधार। विशेष तपाईं redistribute गर्न सक्नुहुन्छ र / वा रूपमा फ्री सफ्टवेयर फाउंडेशन द्वारा प्रकाशित GNU जनरल सार्वजनिक लाइसेन्स सर्तहरू अन्तर्गत यो परिमार्जन, कि त लाइसेन्स को संस्करण 3, वा (तपाईँको विकल्प मा) कुनै पनि पछि संस्करण।</string>
<string name="read_full_license">लाइसेन्स पढ्नुहोस्</string>
<string name="title_activity_history">इतिहास</string>
<string name="title_history_search">खोजी</string>
<string name="title_history_view">हेरिएका</string>
<string name="history_disabled">इतिहास बन्द गरिएको छ</string>
<string name="action_history">इतिहास</string>
<string name="history_empty">इतिहास खाली छ</string>
<string name="history_cleared">इतिहास खाली</string>
<string name="item_deleted">वस्तु हटाइयो</string>
<string name="delete_item_search_history">तपाईं खोज इतिहासबाट यो वस्तु मेटाउन चाहनुहुन्छ\?</string>
<string name="delete_stream_history_prompt">तपाईं हेरेको इतिहास देखि यो वस्तु मेटाउन चाहनुहुन्छ\?</string>
<string name="delete_all_history_prompt">तपाईं इतिहास सबै वस्तुहरू मेट्न चाहनुहुन्छ निश्चित हुनुहुन्छ\?</string>
<string name="title_last_played">लेबुल</string>
<string name="title_most_played">सबैभन्दा निभाए</string>
<string name="main_page_content">सामग्री</string>
<string name="main_page_content_summary">मुख्य पृष्ठ मा के ट्याबहरू देखाइएको छ</string>
<string name="selection">चयन</string>
<string name="blank_page_summary">खाली पृष्ठ</string>
<string name="kiosk_page_summary">किओस्क पृष्ठ</string>
<string name="subscription_page_summary">सदस्यता पृष्ठ</string>
<string name="feed_page_summary">फिड पृष्ठ</string>
<string name="channel_page_summary">च्यानल पृष्ठ</string>
<string name="select_a_channel">एक च्यानल चयन गर्नुहोस्</string>
<string name="no_channel_subscribed_yet">अहिलेसम्म कुनै पनि च्यानल सदस्यता</string>
<string name="select_a_kiosk">एक किओस्क चयन</string>
<string name="export_complete_toast">निर्यात</string>
<string name="import_complete_toast">आयात</string>
<string name="no_valid_zip_file">कुनै मान्य जिप फाइल</string>
<string name="could_not_import_all_files">चेतावनी: सबै फाइलहरू आयात गर्न सकिएन।</string>
<string name="override_current_data">यो आफ्नो हालको सेटअप अधिलेखन हुनेछ।</string>
<string name="import_settings">तपाईं पनि सेटिङहरू आयात गर्न चाहनुहुन्छ\?</string>
<string name="error_unable_to_load_comments">टिप्पणीहरू लोड गर्न सकेन</string>
<string name="kiosk">किओस्क नामहरू</string>
<string name="trending">चलिरहेका</string>
<string name="top_50">शीर्ष 50</string>
<string name="new_and_hot">नयाँ र तातो</string>
<string name="conferences">सम्मेलन</string>
<string name="title_activity_background_player">प्ले लाममा</string>
<string name="title_activity_popup_player">पपअप खेलाडी</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="enqueue_on_background">पृष्ठभूमिमा लामबद्ध</string>
<string name="enqueue_on_popup">नयाँ पपअपमा लामबद्ध</string>
<string name="start_here_on_main">सुरु यहाँ प्ले</string>
<string name="start_here_on_background">पृष्ठभूमिमा सुरु निभाउनु</string>
<string name="start_here_on_popup">नयाँ पपअपमा सुरु निभाउनु</string>
<string name="drawer_open">दराज</string>
<string name="drawer_close">दराज बन्द</string>
<string name="drawer_header_action_paceholder_text">केही चाँडै यहाँ प्रकट हुनेछ; डी</string>
<string name="preferred_open_action_settings_title">प्राथमिक \'खुला\' कार्य</string>
<string name="preferred_open_action_settings_summary">पूर्वनिर्धारित कार्य गर्दा खोल्ने सामग्री -% को</string>
<string name="video_player">भिडियो प्लेयर</string>
<string name="background_player">पृष्ठभूमि खेलाडी</string>
<string name="popup_player">पपअप खेलाडी</string>
<string name="always_ask_open_action">सधैं सोध्न</string>
<string name="preferred_player_fetcher_notification_title">जानकारी प्राप्त गर्दै …</string>
<string name="preferred_player_fetcher_notification_message">अनुरोध सामग्री लोड</string>
<string name="create_playlist">स्थानीय प्लेलिस्टस्थानीय प्लेलिस्ट</string>
<string name="delete_playlist">मेटाउन</string>
<string name="rename_playlist">पुनः नामकरण</string>
<string name="playlist_name_input">नाम</string>
<string name="append_playlist">प्लेसूचीमा थप्न</string>
<string name="set_as_playlist_thumbnail">प्लेलिस्ट थम्बनेल रूपमा सेट</string>
<string name="bookmark_playlist">बुकमार्क प्लेलिस्ट</string>
<string name="unbookmark_playlist">बुकमार्क हटाउन</string>
<string name="delete_playlist_prompt">यो प्लेसूची मेटाउन\?</string>
<string name="playlist_creation_success">प्लेलिस्ट सिर्जना</string>
<string name="playlist_add_stream_success">PlaylistedPlaylisted</string>
<string name="playlist_thumbnail_change_success">प्लेसूची थम्बनेल परिवर्तन भयो।</string>
<string name="playlist_delete_failure">प्लेसूची मेटाउन सकेन।</string>
<string name="caption_none">खेलाडीहरू</string>
<string name="resize_fit">फिट</string>
<string name="resize_fill">भर्न</string>
<string name="resize_zoom">जुम</string>
<string name="caption_auto_generated">स्वतः उत्पन्न</string>
<string name="caption_setting_title">क्याप्सन सेटिङ</string>
<string name="caption_setting_description">सुधारे खेलाडी क्याप्सन पाठ मात्रा र पृष्ठभूमि शैलीहरू। ले प्रभाव अनुप्रयोग पुन: सुरु गर्न आवश्यक छ।</string>
<string name="enable_leak_canary_title">डिबसेटिङहरू</string>
<string name="enable_leak_canary_summary">मेमोरी लिक अनुगमन हिप dumping जब अनुप्रयोग अनुत्तरदायी बन्न सक्छ</string>
<string name="enable_disposed_exceptions_title">रिपोर्ट बाहिर-को-जीवनचक्र त्रुटिहरू</string>
<string name="enable_disposed_exceptions_summary">शक्ति निपटान पछि खण्ड वा गतिविधि जीवनचक्र को undeliverable Rx अपवाद बाहिर को रिपोर्ट</string>
<string name="import_export_title">सदस्यता आयात / निर्यात</string>
<string name="import_title">आयात</string>
<string name="import_from">आयात</string>
<string name="export_to">निर्यात</string>
<string name="import_ongoing">आयात गर्दै …</string>
<string name="export_ongoing">निर्यात …</string>
<string name="import_file_title">फाइल आयात</string>
<string name="previous_export">अघिल्लो निर्यात</string>
<string name="subscriptions_import_unsuccessful">सदस्यता आयात गर्न सकिएन</string>
<string name="subscriptions_export_unsuccessful">सदस्यता निर्यात गर्न सकेन</string>
<string name="import_youtube_instructions">निर्यात फाइल डाउनलोड गरेर यूट्यूब सदस्यताहरू आयात गर्नुहोस्:
\n
\n1. जानुहोस् यो URL:% 1$s
\n2. सोधिएको बेलामा लग इन गर्नुहोस्
\n3. एउटा डाउनलोड सुरु हुनुपर्दछ (त्यो निर्यात फाईल हो)</string>
<string name="import_soundcloud_instructions">या त URL वा तपाईंको ID टाइप गरेर साउन्डक्लाउड(soundcloud) प्रोफाइल आयात गर्नुहोस्:
\n
\n1. वेब ब्राउजरमा \"डेस्कटप मोड\" सक्षम गर्नुहोस् (साइट मोबाइल उपकरणहरूको लागि उपलब्ध छैन)
\n2. यस URL:%$s मा जानुहोस्
\n3. सोधिएको बेलामा लग इन गर्नुहोस्
\n4. तपाईंलाई URL मा निर्देशित गरिएको प्रोफाइल URL प्रतिलिपि गर्नुहोस्।</string>
<string name="import_soundcloud_instructions_hint">yourID, soundcloud.com/youridyourID, soundcloud.com/yourid</string>
<string name="import_network_expensive_warning">दिमागमा राख्नुहोस् यो अपरेशन नेटवर्क महँगो हुन सक्छ।
\n
\nतपाईँ जारी राख्न चाहनुहुन्छ\?</string>
<string name="playback_speed_control">प्लेब्याक परिमिति</string>
<string name="playback_tempo">टेम्पो</string>
<string name="playback_pitch">पिच</string>
<string name="unhook_checkbox">Unhook (विकृति उत्पन्न हुन सक्छ)</string>
<string name="skip_silence_checkbox">मौन समयमा छिटो-फर्वार्ड</string>
<string name="playback_step">चरण</string>
<string name="playback_reset">रिसेट</string>
<string name="start_accept_privacy_policy">यूरोपीय सामान्य डाटा संरक्षण नियमन (GDPR) अनुपालन गर्न, हामी हर्बी न्यूपिपको गोपनीयता नीतिमा तपाईंको ध्यान आकर्षित गर्दछौं। कृपया यसलाई ध्यानपूर्वक पढ्नुहोस्।
\nतपाईंले हामीलाई बग रिपोर्ट पठाउन यसलाई स्वीकार्नुपर्दछ।</string>
<string name="accept">स्वीकार</string>
<string name="decline">अस्वीकार</string>
<string name="limit_data_usage_none_description">मोबाइल डाटा प्रयोग सीमित</string>
<string name="limit_mobile_data_usage_title">सीमा संकल्प मोबाइल डाटा प्रयोग गर्दा</string>
<string name="updates_setting_title">अद्यावधिक सेटिङहरू</string>
<string name="updates_setting_description">एक नयाँ संस्करण उपलब्ध छ जब शीघ्र अनुप्रयोग अद्यावधिक गर्न एक सूचना देखाउन</string>
<string name="minimize_on_exit_title">बाहिर निस्कन कार्य गर्न कम गर्न</string>
<string name="minimize_on_exit_summary">मुख्य भिडियो प्लेयर अन्य अनुप्रयोगमा स्विच कार्य गर्दा -% को</string>
<string name="minimize_on_exit_none_description">कुनै पनि</string>
<string name="minimize_on_exit_background_description">पृष्ठभूमि खेलाडी मिनिमाइज</string>
<string name="minimize_on_exit_popup_description">पपअप खेलाडी मिनिमाइज</string>
<string name="list_view_mode">सूची दृश्य मोड</string>
<string name="list">सूची</string>
<string name="grid">ग्रिड</string>
<string name="auto">स्वतः</string>
<string name="switch_view">हेर्नुहोस् स्विच</string>
<string name="app_update_notification_content_title">नयाँ पाइप अपडेट उपलब्ध छ!</string>
<string name="app_update_notification_content_text">डाउनलोड गर्न ट्याप गर्नुहोस्</string>
<string name="missions_header_finished">समाप्त</string>
<string name="missions_header_pending">रोकिएको</string>
<string name="paused">पज</string>
<string name="queued">लामबद्ध</string>
<string name="post_processing">पोस्ट-प्रक्रिया</string>
<string name="enqueue">लाम</string>
<string name="permission_denied">कार्य प्रणाली द्वारा अस्वीकार</string>
<string name="download_failed">डाउनलोड सूचनाहरू</string>
<string name="download_finished">डाउनलोड समाप्त</string>
<string name="download_finished_more">% को डाउनलोड समाप्त</string>
<string name="generate_unique_name">अवस्थित डाउनलोड बारेमा संवाद</string>
<string name="overwrite">अधिलेखन</string>
<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_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">सर्भर बहु-पिरोया डाउनलोड @ स्ट्रिङ संग पुन: प्रयास / 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="pause_downloads_on_mobile">पथलैया औद्योगिक सञ्जाल मा रोकावट</string>
<string name="pause_downloads_on_mobile_desc">उपयोगी, मोबाइल डेटा स्विच गर्दा केही डाउनलोड निलम्बित सक्दैन हुनत हुन</string>
<string name="close">बन्द</string>
<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="settings_category_clear_data_title">डाटा सखाप पार्नुहोस</string>
<string name="watch_history_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>
<string name="overwrite_failed">फाइल अधिलेखन गर्न सक्दैन</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="start_downloads">डाउनलोड सुरु</string>
<string name="pause_downloads">पज डाउनलोड</string>
<string name="downloads_storage_ask_title">डाउनलोड गर्न कहाँ सोध्न</string>
<string name="downloads_storage_ask_summary">प्रत्येक डाउनलोड कहाँ बचत गर्न आग्रह गरिनेछ</string>
<string name="downloads_storage_ask_summary_kitkat">प्रत्येक डाउनलोड कहाँ बचत गर्न आग्रह गरिने छ।
\nतपाईं बाहिरको एसडी कार्डमा डाउनलोड गर्न चाहनुहुन्छ भने SAF चयन गर्नुहोस्</string>
<string name="downloads_storage_use_saf_title">SAF प्रयोग</string>
<string name="downloads_storage_use_saf_summary">\'भण्डारण पहुँच फ्रेमवर्क\' बाह्य एसडी कार्डमा डाउनलोड गर्न अनुमति दिन्छ।
\nकेहि उपकरणहरू असंगत छन्</string>
<string name="clear_playback_states_title">मेटाउने प्लेब्याक स्थान</string>
<string name="clear_playback_states_summary">सबै प्लेब्याक स्थान मेटाउँछ</string>
<string name="delete_playback_states_alert">सबै प्लेब्याक स्थान मेटाउने\?</string>
<string name="download_choose_new_path">प्रभाव लिन डाउनलोड फोल्डरहरू परिवर्तन</string>
<string name="drawer_header_description">सेवा टगल गर्नुहोस्, हाल चयन गरिएको:</string>
<string name="no_one_watching">कुनै एक हेरिरहनुभएको छ</string>
<plurals name="watching">
<item quantity="one">%s हेर्दै</item>
<item quantity="other">%s जना हेर्दै छन्</item>
</plurals>
<string name="no_one_listening">कुनै एक सुनिरहेको छ</string>
<plurals name="listening">
<item quantity="one">%s श्रोता</item>
<item quantity="other">%s श्रोताहरु</item>
</plurals>
<string name="localization_changes_requires_app_restart">एक चोटि अनुप्रयोग पुनः सुरु गरिन्छ भाषा परिवर्तन हुनेछ।</string>
<string name="default_kiosk_page_summary">पूर्वनिर्धारित पसल</string>
<string name="seek_duration_title">"छिटो-अगाडि /-पछाडी खोज्न अवधि"</string>
<string name="peertube_instance_url_title">PeerTube उदाहरणहरू</string>
<string name="peertube_instance_url_summary">आफ्नो मनपर्ने PeerTube उदाहरणहरू चयन</string>
<string name="peertube_instance_url_help">%s मा तपाईंलाई मनपर्ने ईन्स्टान्सहरू फेला पार्नुहोस्</string>
<string name="peertube_instance_add_title">add उदाहरणका</string>
<string name="peertube_instance_add_help">उदाहरणका URL प्रविष्ट गर्नुहोस्</string>
<string name="peertube_instance_add_fail">उदाहरणका मान्य सकेन</string>
<string name="peertube_instance_add_https_only">HTTPS URL हरू मात्र समर्थित</string>
<string name="peertube_instance_add_exists">उदाहरणका पहिले नै अवस्थित</string>
<string name="local">स्थानिय</string>
<string name="recently_added">हालसालै थपिएको</string>
<string name="most_liked">सबैभन्दा धेरै मनपराइएको</string>
<string name="playlist_no_uploader">स्वतः उत्पन्न (कुनै अपलोडरको मिली)</string>
<string name="recovering">पुन</string>
<string name="error_download_resource_gone">यो डाउनलोड ठीक गर्न सकिँदैनयो डाउनलोड ठीक गर्न सकिँदैन</string>
<string name="choose_instance_prompt">एउटा उदाहरण छनौट गर्नुहोस्</string>
<string name="enable_lock_screen_video_thumbnail_title">स्क्रिन भिडियो थम्बनेल लक</string>
<string name="enable_lock_screen_video_thumbnail_summary">"पृष्ठभूमिमा प्लेयर प्रयोग गर्दा एउटा भिडियो थम्बनेल लक स्क्रिनमा देखाइएको छ"</string>
<string name="clear_download_history">डाउनलोड इतिहास स्पष्ट</string>
<string name="delete_downloaded_files">डाउनलोड फाइल मेट्न</string>
<string name="deleted_downloads">मेटिएको% 1 $ को डाउनलोड</string>
<string name="permission_display_over_apps">अन्य अनुप्रयोगहरूमा प्रदर्शन गर्न अनुमति दिने</string>
<string name="app_language_title">एप्सको भाषा</string>
<string name="systems_language">सिस्टम पूर्वनिर्धारित</string>
<string name="title_activity_recaptcha">reCAPTCHA चुनौती</string>
<string name="subtitle_activity_recaptcha">प्रेस हल गर्दा \"डन\"</string>
<string name="recaptcha_done_button">सकियो</string>
<string name="videos_string">भिडियो</string>
<plurals name="seconds">
<item quantity="one">%d सेकेन्ड</item>
<item quantity="other">%d सेकेन्ड</item>
</plurals>
<string name="new_seek_duration_toast">ExoPlayer अवरोधका कारण खोजी अवधि %d सेकेन्डमा सेट गरियो</string>
<string name="mute">म्युट</string>
<string name="unmute">ध्वनि सुचारु</string>
<string name="help">मद्दत</string>
</resources>

View File

@ -367,7 +367,6 @@
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Toon</string>
<string name="unhook_checkbox">Ontkoppelen (kan ruis veroorzaken)</string>
<string name="playback_default">Standaard</string>
<string name="clear_views_history_title">Kijkgeschiedenis wissen</string>
<string name="clear_views_history_summary">Verwijdert de geschiedenis van afgespeelde streams</string>
<string name="delete_view_history_alert">De ganse kijkgeschiedenis verwijderen\?</string>
@ -456,7 +455,6 @@
<string name="error_http_unsupported_range">De server aanvaardt geen meerdradige downloads, probeert het opnieuw met @string/msg_threads = 1</string>
<string name="error_http_not_found">Niet gevonden</string>
<string name="error_postprocessing_failed">Nabewerking mislukt</string>
<string name="clear_finished_download">Voltooide downloads wissen</string>
<string name="stop">Stoppen</string>
<string name="max_retry_msg">Maximaal aantal pogingen</string>
<string name="max_retry_desc">Maximaal aantal pogingen vooraleer dat de download wordt geannuleerd</string>

View File

@ -19,7 +19,7 @@
<string name="download_path_dialog_title">Kies de downloadlocatie voor video\'s</string>
<string name="default_resolution_title">Standaardresolutie</string>
<string name="play_with_kodi_title">Afspelen met Kodi</string>
<string name="kore_not_found">Kore-app niet gevonden. Installeren?</string>
<string name="kore_not_found">Installeer ontbrekende Kore-app\?</string>
<string name="show_play_with_kodi_title">\"Afspelen met Kodi\"-optie tonen</string>
<string name="show_play_with_kodi_summary">Toon een optie om een video af te spelen via Kodi media center</string>
<string name="play_audio">Audio</string>
@ -65,9 +65,9 @@
<string name="light_parsing_error">Kan website niet volledig verwerken</string>
<string name="could_not_get_stream">Kan geen streams vinden</string>
<string name="sorry_string">Sorry, dit had niet mogen gebeuren.</string>
<string name="error_report_button_text">Fout melden via e-mail</string>
<string name="error_report_button_text">Deze fout melden via e-mail</string>
<string name="error_snackbar_message">Sorry, er traden enkele fouten op.</string>
<string name="error_snackbar_action">MELDEN</string>
<string name="error_snackbar_action">Melden</string>
<string name="what_device_headline">Informatie:</string>
<string name="what_happened_headline">Wat er is gebeurd:</string>
<string name="your_comment">Je opmerking (in het Engels):</string>
@ -78,16 +78,16 @@
<string name="main_bg_subtitle">Druk op \"zoeken\" om te beginnen</string>
<string name="autoplay_by_calling_app_title">Automatisch afspelen</string>
<string name="autoplay_by_calling_app_summary">Speelt videos af als NewPipe vanuit een andere app wordt geopend</string>
<string name="duration_live">LIVE</string>
<string name="duration_live">Live</string>
<string name="downloads">Downloads</string>
<string name="downloads_title">Downloads</string>
<string name="error_report_title">Foutrapport</string>
<string name="could_not_load_image">Kan afbeelding niet laden</string>
<string name="app_ui_crash">App/UI gecrasht</string>
<string name="info_labels">Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem:</string>
<string name="report_error">Meld een probleem</string>
<string name="report_error">Probleem melden</string>
<string name="user_report">Gebruikersrapport</string>
<string name="storage_permission_denied">Toegang tot opslag geweigerd</string>
<string name="storage_permission_denied">Geef eerst toegang tot de opslag</string>
<string name="start">Begin</string>
<string name="pause">Pauzeren</string>
<string name="view">Afspelen</string>
@ -115,7 +115,7 @@
<string name="channel">Kanaal</string>
<string name="yes">Ja</string>
<string name="later">Later</string>
<string name="short_thousand">K</string>
<string name="short_thousand">k</string>
<string name="short_million">M</string>
<string name="short_billion">B</string>
<string name="msg_popup_permission">Deze machtiging is vereist om te
@ -174,9 +174,9 @@
<string name="fragment_feed_title">Nieuw</string>
<string name="enable_search_history_title">Zoekgeschiedenis</string>
<string name="enable_search_history_summary">Sla zoekopdrachten lokaal op</string>
<string name="enable_watch_history_title">Geschiedenis en cache</string>
<string name="enable_watch_history_title">Kijkgeschiedenis</string>
<string name="enable_watch_history_summary">Kijkgeschiedenis bijhouden</string>
<string name="resume_on_audio_focus_gain_title">Hervat bij focus</string>
<string name="resume_on_audio_focus_gain_title">Hervat afspelen</string>
<string name="resume_on_audio_focus_gain_summary">Ga verder met afspelen na onderbrekingen (zoals telefoongesprekken)</string>
<string name="notification_channel_name">NewPipe-melding</string>
<string name="notification_channel_description">Meldingen voor NewPipe-achtergrond- en pop-upspelers</string>
@ -237,7 +237,7 @@
<string name="play_queue_remove">Verwijderen</string>
<string name="play_queue_stream_detail">Details</string>
<string name="play_queue_audio_settings">Audio-instellingen</string>
<string name="hold_to_append">Houd ingedrukt om toe te voegen aan wachtrij</string>
<string name="hold_to_append">Ingedrukt houden om toe te voegen aan wachtrij</string>
<string name="unknown_content">[Onbekend]</string>
<string name="enqueue_on_background">Toevoegen aan wachtrij in de achtergrond</string>
<string name="enqueue_on_popup">Toevoegen aan wachtrij in nieuwe pop-up</string>
@ -313,12 +313,12 @@
<string name="drawer_header_action_paceholder_text">Hier zal binnenkort iets verschijnen ;D</string>
<string name="settings_category_debug_title">Foutopsporing</string>
<string name="caption_auto_generated">Automatisch gegenereerd</string>
<string name="enable_leak_canary_title">LeakCanary inschakelen</string>
<string name="enable_leak_canary_title">LeakCanary</string>
<string name="enable_leak_canary_summary">Het monitoren van geheugenlekken kan ervoor zorgen dat de app niet goed meer reageert</string>
<string name="enable_disposed_exceptions_title">Out-of-lifecycle-fouten melden</string>
<string name="enable_disposed_exceptions_summary">Forceer het melden van niet-bezorgbare Rx-uitzonderingen buiten fragment of activiteitscyclus</string>
<string name="use_inexact_seek_title">Snelle, minder exact spoelen gebruiken</string>
<string name="use_inexact_seek_summary">Minder exact spoelen laat de speler sneller posities zoeken met verminderde precisie</string>
<string name="use_inexact_seek_summary">Onnauwkeurig zoeken laat de speler sneller posities zoeken met verminderde precisie. 5, 15 of 25 zoeken werkt dan niet.</string>
<string name="auto_queue_title">Volgende stream automatisch in wachtrij plaatsen</string>
<string name="auto_queue_summary">Automatisch een gerelateerde stream toekennen bij het afspelen van de laatste stream in een niet-herhalende afspeelwachtlijst</string>
<string name="file">Bestand</string>
@ -362,7 +362,6 @@
<string name="playback_tempo">Tempo</string>
<string name="playback_pitch">Toon</string>
<string name="unhook_checkbox">Ontlinken (kan ruis veroorzaken)</string>
<string name="playback_default">Standaard</string>
<string name="preferred_open_action_settings_title">Voorkeursactie voor openen</string>
<string name="preferred_open_action_settings_summary">Standaardactie bij openen van inhoud — %s</string>
<string name="no_streams_available_download">Geen streams beschikbaar voor downloaden</string>
@ -414,10 +413,10 @@
<string name="app_update_notification_channel_name">Appupdatemelding</string>
<string name="app_update_notification_channel_description">Meldingen voor nieuwe versies van NewPipe</string>
<string name="download_to_sdcard_error_title">Externe opslag niet beschikbaar</string>
<string name="download_to_sdcard_error_message">Downloaden naar externe SD-kaart is nog niet mogelijk. Downloadmap opnieuw instellen\?</string>
<string name="saved_tabs_invalid_json">Standaard tabbladen worden gebruikt, fout bij het lezen van de opgeslagen tabbladen</string>
<string name="download_to_sdcard_error_message">Downloaden naar externe SD-kaart is niet mogelijk. Downloadmap opnieuw instellen\?</string>
<string name="saved_tabs_invalid_json">Fout bij het lezen van de opgeslagen tabbladen, waardoor standaardtabbladen worden gebruikt</string>
<string name="restore_defaults">Standaardinstellingen herstellen</string>
<string name="restore_defaults_confirmation">Wilt u de standaardinstellingen herstellen\?</string>
<string name="restore_defaults_confirmation">Wil je de standaardinstellingen herstellen\?</string>
<string name="subscribers_count_not_available">Aantal abonnees niet beschikbaar</string>
<string name="main_page_content_summary">Welke tabbladen worden weergegeven op de hoofdpagina</string>
<string name="selection">Selectie</string>
@ -449,35 +448,149 @@
<string name="error_file_creation">Het bestand kan niet worden gemaakt</string>
<string name="error_path_creation">De doelmap kan niet worden gemaakt</string>
<string name="error_permission_denied">Toestemming door het systeem geweigerd</string>
<string name="error_ssl_exception">Beveiligde connectie is mislukt</string>
<string name="error_ssl_exception">Kon geen beveiligde verbinding opzetten</string>
<string name="error_unknown_host">Kon de server niet vinden</string>
<string name="error_connect_host">Kan niet met de server verbinden</string>
<string name="error_http_no_content">De server verzendt geen gegevens</string>
<string name="error_http_unsupported_range">De server accepteert geen multi-threaded downloads, probeer het opnieuw met @string/msg_threads = 1</string>
<string name="error_http_not_found">Niet gevonden</string>
<string name="error_postprocessing_failed">Nabewerking mislukt</string>
<string name="clear_finished_download">Voltooide downloads wissen</string>
<string name="stop">Stop</string>
<string name="max_retry_msg">Maximum aantal keer proberen</string>
<string name="max_retry_desc">Maximum aantal pogingen voordat de download wordt geannuleerd</string>
<string name="pause_downloads_on_mobile">Pauzeren bij overschakelen naar mobiele data</string>
<string name="pause_downloads_on_mobile_desc">Downloads die niet kunnen worden gepauzeerd zullen worden herstart</string>
<string name="pause_downloads_on_mobile">Onderbreken op netwerken met datalimiet</string>
<string name="pause_downloads_on_mobile_desc">Handig bij het overschakelen naar mobiele gegevens, hoewel sommige downloads niet onderbroken kunnen worden</string>
<string name="events">Gebeurtenissen</string>
<string name="conferences">Conferenties</string>
<string name="error_timeout">Time-out van verbinding</string>
<string name="show_comments_title">Reacties tonen</string>
<string name="show_comments_summary">Schakel dit uit om reacties niet meer te tonen</string>
<string name="show_comments_summary">Schakel uit om reacties niet te tonen</string>
<string name="autoplay_title">Automatisch afspelen</string>
<plurals name="comments">
<item quantity="one">Reacties</item>
<item quantity="other"/>
<item quantity="one">%s reactie</item>
<item quantity="other">%s reacties</item>
</plurals>
<string name="no_comments">Geen reacties</string>
<string name="error_unable_to_load_comments">Kan reacties niet laden</string>
<string name="close">Sluiten</string>
<string name="downloads_storage_use_saf_summary">Het Storage Acces Framework laat downloads naar een externe SD kaart toe.
\n
\nNota: niet alle toestellen zijn compatibel</string>
<string name="downloads_storage_use_saf_summary">Het \'Storage Access Framework\' laat downloads naar een externe SD kaart toe.
\n Niet alle toestellen zijn compatibel</string>
<string name="settings_category_clear_data_title">Wis data</string>
<string name="download_choose_new_path">Verander de downloadmappen om effect te bekomen</string>
<string name="enable_playback_resume_title">Afspelen hervatten</string>
<string name="enable_playback_resume_summary">Laatste afspeelpositie herstellen</string>
<string name="enable_playback_state_lists_title">Posities in lijsten</string>
<string name="enable_playback_state_lists_summary">Afspeelpositie-indicatoren in lijsten tonen</string>
<string name="watch_history_states_deleted">Afspeelposities verwijderd.</string>
<string name="missing_file">Bestand verplaatst of verwijderd</string>
<string name="overwrite_unrelated_warning">Een bestand met deze naam bestaat al</string>
<string name="overwrite_failed">kan het bestand niet overschrijven</string>
<string name="download_already_pending">Er is een download in behandeling met deze naam</string>
<string name="error_insufficient_storage">Geen ruimte meer op het apparaat</string>
<string name="error_progress_lost">Voortgang verloren, omdat het bestand is verwijderd</string>
<string name="confirm_prompt">Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?</string>
<string name="enable_queue_limit">Downloadwachtrij beperken</string>
<string name="enable_queue_limit_desc">Een download zal tegelijkertijd worden uitgevoerd</string>
<string name="start_downloads">Downloads starten</string>
<string name="pause_downloads">Downloads pauzeren</string>
<string name="downloads_storage_ask_title">Vraag waar te downloaden</string>
<string name="downloads_storage_ask_summary">Je zal gevraagd worden waar elke download op te slaan</string>
<string name="downloads_storage_ask_summary_kitkat">Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart</string>
<string name="downloads_storage_use_saf_title">SAF gebruiken</string>
<string name="clear_playback_states_title">Afspeelposities verwijderen</string>
<string name="clear_playback_states_summary">Alle afspeelposities verwijderen</string>
<string name="delete_playback_states_alert">Alle afspeelposities verwijderen\?</string>
<string name="no_one_watching">Niemand kijkt</string>
<plurals name="watching">
<item quantity="one">%s kijkt</item>
<item quantity="other">%s kijken</item>
</plurals>
<string name="no_one_listening">Niemand luistert</string>
<plurals name="listening">
<item quantity="one">%s luisteraar</item>
<item quantity="other">%s luisteraars</item>
</plurals>
<string name="localization_changes_requires_app_restart">De taal zal veranderen zodra de app opnieuw is opgestart.</string>
<string name="default_kiosk_page_summary">Standaardkiosk</string>
<string name="seek_duration_title">Duur van snel voor-/achteruit zoeken</string>
<string name="peertube_instance_url_title">PeerTube-instanties</string>
<string name="peertube_instance_url_summary">Selecteer je favoriete PeerTube-instanties</string>
<string name="peertube_instance_url_help">Zoek de instanties die je leuk vindt op %s</string>
<string name="peertube_instance_add_title">Instantie toevoegen</string>
<string name="peertube_instance_add_help">Instantie-URL invoeren</string>
<string name="peertube_instance_add_fail">Kon instantie niet valideren</string>
<string name="peertube_instance_add_https_only">Alleen HTTPS-URL\'s worden ondersteund</string>
<string name="peertube_instance_add_exists">Instantie bestaat al</string>
<string name="local">Lokaal</string>
<string name="recently_added">Onlangs toegevoegd</string>
<string name="playlist_no_uploader">Automatisch gegenereerd (geen uploader gevonden)</string>
<string name="recovering">herstellen</string>
<string name="error_download_resource_gone">Kan deze download niet herstellen</string>
<string name="choose_instance_prompt">Kies een instantie</string>
<string name="enable_lock_screen_video_thumbnail_title">Videominiatuur op vergrendelscherm</string>
<string name="enable_lock_screen_video_thumbnail_summary">Een videominiatuur wordt getoond op het vergrendelscherm wanneer de achtergrondspeler wordt gebruikt</string>
<string name="clear_download_history">Downloadgeschiedenis wissen</string>
<string name="delete_downloaded_files">Gedownloade bestanden verwijderen</string>
<string name="deleted_downloads">%1$s downloads verwijderd</string>
<string name="permission_display_over_apps">Geef toestemming voor weergave over andere apps</string>
<string name="app_language_title">App-taal</string>
<string name="systems_language">Systeemstandaard</string>
<string name="subtitle_activity_recaptcha">Druk op \"Klaar\" zodra opgelost</string>
<string name="recaptcha_done_button">Klaar</string>
<string name="videos_string">Video\'s</string>
<string name="new_seek_duration_toast">Door beperkingen van ExoPlayer is de zoekduur ingesteld op %d seconden</string>
<string name="mute">Dempen</string>
<string name="unmute">Dempen opheffen</string>
<string name="help">Hulp</string>
<plurals name="seconds">
<item quantity="one">%d seconde</item>
<item quantity="other">%d secondes</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d minuut</item>
<item quantity="other">%d minuten</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d uur</item>
<item quantity="other">%d uren</item>
</plurals>
<plurals name="days">
<item quantity="one">%d dag</item>
<item quantity="other">%d dagen</item>
</plurals>
<string name="feed_groups_header_title">Feedgroepen</string>
<string name="feed_oldest_subscription_update">Oudste abonnementsupdate: %s</string>
<string name="feed_subscription_not_loaded_count">Niet geladen: %d</string>
<string name="feed_notification_loading">Feed aan het laden…</string>
<string name="feed_processing_message">Feed aan het verwerken…</string>
<string name="feed_group_dialog_select_subscriptions">Abonnementen selecteren</string>
<string name="feed_group_dialog_empty_selection">Geen abonnement geselecteerd</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d geselecteerd</item>
<item quantity="other">%d geselecteerd</item>
</plurals>
<string name="feed_group_dialog_empty_name">Lege groepsnaam</string>
<string name="feed_group_dialog_name_input">Naam</string>
<string name="feed_group_dialog_delete_message">Wil je deze groep verwijderen\?</string>
<string name="feed_create_new_group_button_title">Nieuw</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Drempel voor feedupdate</string>
<string name="feed_update_threshold_summary">Tijd na de laatste update voordat een abonnement als verouderd wordt beschouwd — %s</string>
<string name="feed_update_threshold_option_always_update">Altijd updaten</string>
<string name="feed_use_dedicated_fetch_method_title">Uit speciale feed ophalen indien beschikbaar</string>
<string name="feed_use_dedicated_fetch_method_summary">Beschikbaar in sommige services, het is meestal veel sneller, maar kan een beperkte hoeveelheid items en vaak onvolledige informatie (bijv. geen duur, itemtype, of livestatus) bevatten.</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Snelle modus inschakelen</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Snelle modus uitschakelen</string>
<string name="feed_use_dedicated_fetch_method_help_text">Denk je dat het laden van de feed te sloom is\? Zo ja, probeer snel laden in te schakelen (in de instellingen of door op onderstaande knop te drukken).
\n
\nNewPipe biedt twee strategieën aan voor het laden van de feed:
\n• Het hele abonnementskanaal ophalen, wat sloom maar compleet is.
\n• Een speciale feed ophalen, wat snel maar meestal incompleet is.
\n
\nHet verschil tussen de twee is dat de snelle meestal wat informatie mist, zoals de duur of type (live of een normale video) van het item en dat er mogelijk minder items zijn.
\n
\nYouTube is een voorbeeld van een service die deze snelle methode aanbiedt door zijn RSS-feed.
\n
\nDe keuze komt dus neer op wat je liever hebt: snelheid of precieze informatie.</string>
</resources>

View File

@ -452,7 +452,6 @@
<string name="error_http_unsupported_range">ਸਰਵਰ ਮਲਟੀ-Threaded ਡਾਊਨਲੋਡਸ ਨੂੰ ਸਵੀਕਾਰ ਨਹੀਂ ਕਰਦਾ, ਇਸ ਨਾਲ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ @string/msg_threads = 1</string>
<string name="error_http_not_found">ਨਹੀਂ ਲਭਿਆ</string>
<string name="error_postprocessing_failed">Post-processing ਫੇਲ੍ਹ</string>
<string name="clear_finished_download">ਮੁਕੰਮਲ ਹੋਈਆਂ ਡਾਊਨਲੋਡ ਸਾਫ਼ ਕਰੋ</string>
<string name="stop">ਰੁੱਕੋ</string>
<string name="max_retry_msg">ਵੱਧ ਤੋਂ ਵੱਧ ਕੋਸ਼ਿਸ਼ਾਂ</string>
<string name="max_retry_desc">ਡਾਉਨਲੋਡ ਰੱਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਵੱਧ ਤੋਂ ਵੱਧ ਕੋਸ਼ਿਸ਼ਾਂ</string>

View File

@ -16,7 +16,7 @@
<string name="use_external_audio_player_title">Użyj zewnętrznego odtwarzacza audio</string>
<string name="view_count_text">%1$s wyświetleń</string>
<string name="upload_date_text">Opublikowano %1$s</string>
<string name="no_player_found">Nie znaleziono odtwarzacza strumieni. Zainstalować VLC\?</string>
<string name="no_player_found">Nie znaleziono odtwarzacza strumienia. Zainstalować VLC\?</string>
<string name="download_path_title">Folder pobierania wideo</string>
<string name="download_path_summary">Pobrane pliki wideo są przechowywane tutaj</string>
<string name="download_path_dialog_title">Wybierz folder pobierania plików wideo</string>
@ -458,7 +458,6 @@
<string name="error_http_unsupported_range">Serwer nie akceptuje pobierania wielowątkowego, spróbuj ponownie za pomocą @string/msg_threads = 1</string>
<string name="error_http_not_found">Nie znaleziono</string>
<string name="error_postprocessing_failed">Przetwarzanie końcowe nie powiodło się</string>
<string name="clear_finished_download">Wyczyść ukończone pobieranie</string>
<string name="stop">Zatrzymaj</string>
<string name="max_retry_msg">Maksymalna liczba powtórzeń</string>
<string name="max_retry_desc">Maksymalna liczba prób przed anulowaniem pobierania</string>
@ -550,10 +549,10 @@
<string name="subtitle_activity_recaptcha">Po rozwiązaniu naciśnij „Gotowe”</string>
<string name="recaptcha_done_button">Gotowe</string>
<string name="videos_string">Filmy</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s sekund</item>
<item quantity="few">%s sekund</item>
<item quantity="many">%s sekund</item>
<plurals name="seconds">
<item quantity="one">%d sekund</item>
<item quantity="few">%d sekund</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="mute">Wycisz</string>

View File

@ -465,7 +465,6 @@ abrir em modo popup</string>
<string name="error_http_unsupported_range">O servidor não aceita downloads em multi-thread, tente com @string/msg_threads = 1</string>
<string name="error_http_not_found">Não encontrado</string>
<string name="error_postprocessing_failed">Falha no pós processamento</string>
<string name="clear_finished_download">Limpar downloads finalizados</string>
<string name="stop">Parar</string>
<string name="max_retry_msg">Tentativas Máximas</string>
<string name="max_retry_desc">Número máximo de tentativas antes de cancelar o download</string>
@ -552,11 +551,11 @@ abrir em modo popup</string>
<string name="subtitle_activity_recaptcha">Toque em \"Feito\" ao resolver</string>
<string name="recaptcha_done_button">Feito</string>
<string name="videos_string">Vídeos</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s segundo</item>
<item quantity="other">%s segundos</item>
<plurals name="seconds">
<item quantity="one">%d segundo</item>
<item quantity="other">%d segundos</item>
</plurals>
<string name="new_seek_duration_toast">Devido as configurações do ExoPlayer, a duração de busca foi alterada para %d segundos</string>
<string name="new_seek_duration_toast">Devido a restrições do ExoPlayer a duração da pesquisa foi definida como %d segundos</string>
<string name="mute">Desativar som</string>
<string name="unmute">Ativar som</string>
</resources>

View File

@ -454,7 +454,6 @@
<string name="error_http_unsupported_range">O servidor não aceita transferências de vários processos, tente novamente com @string/msg_threads = 1</string>
<string name="error_http_not_found">Não encontrado</string>
<string name="error_postprocessing_failed">Pós-processamento falhado</string>
<string name="clear_finished_download">Limpar transferências concluídas</string>
<string name="stop">Parar</string>
<string name="max_retry_msg">Tentativas máximas</string>
<string name="max_retry_desc">Número máximo de tentativas antes de cancelar a transferência</string>

View File

@ -455,7 +455,6 @@
<string name="error_unknown_host">Сервер не найден</string>
<string name="error_http_unsupported_range">Сервер не принимает многопоточные загрузки, повторная попытка с @string/msg_threads = 1</string>
<string name="error_http_not_found">Не найдено</string>
<string name="clear_finished_download">Очистить завершённые</string>
<string name="stop">Остановить</string>
<string name="events">События</string>
<string name="conferences">Конференции</string>
@ -549,10 +548,10 @@
<string name="subtitle_activity_recaptcha">По завершении нажмите Готово</string>
<string name="recaptcha_done_button">Готово</string>
<string name="videos_string">Видео</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s секунда</item>
<item quantity="few">%s секунды</item>
<item quantity="many">%s секунд</item>
<plurals name="seconds">
<item quantity="one">%d секунда</item>
<item quantity="few">%d секунды</item>
<item quantity="many">%d секунд</item>
</plurals>
<string name="new_seek_duration_toast">Из-за ограничений ExoPlayer точность перемотки составляет %d секунд</string>
<string name="mute">Отключить звук</string>

View File

@ -374,7 +374,6 @@
<string name="playback_tempo">Rýchlosť</string>
<string name="playback_pitch">Výška</string>
<string name="unhook_checkbox">"Spomalenie (môže spôsobovať skreslenie)"</string>
<string name="playback_default">Predvolené</string>
<string name="clear_views_history_title">Vymazať históriu pozretí</string>
<string name="clear_views_history_summary">Odstráni históriu a pozície prehrávaných streamov</string>
<string name="delete_view_history_alert">Vymazať celú históriu pozretí\?</string>
@ -464,7 +463,6 @@
<string name="error_http_unsupported_range">Server neakceptuje preberanie viacerých vlákien, zopakujte s @string/msg_threads = 1</string>
<string name="error_http_not_found">Nenájdené</string>
<string name="error_postprocessing_failed">Post-spracovanie zlyhalo</string>
<string name="clear_finished_download">Vyčistiť dokončené sťahovania</string>
<string name="stop">Stop</string>
<string name="max_retry_msg">Maximum opakovaní</string>
<string name="max_retry_desc">Maximálny počet pokusov pred zrušením stiahnutia</string>
@ -549,4 +547,66 @@
<string name="permission_display_over_apps">Súhlas pre zobrazenie cez ďalšie aplikácie</string>
<string name="app_language_title">Jazyk aplikácie</string>
<string name="systems_language">Predvolený</string>
<string name="subtitle_activity_recaptcha">Vyrieš a stlač \"Hotovo\"</string>
<string name="recaptcha_done_button">Hotovo</string>
<string name="videos_string">Videá</string>
<string name="new_seek_duration_toast">Pre obmedzenie ExoPlayera bolo prehľadávania nastavené na % d sekúnd</string>
<string name="mute">Stlmiť</string>
<string name="unmute">Povoliť</string>
<string name="help">Pomoc</string>
<plurals name="seconds">
<item quantity="one">%d sekunda</item>
<item quantity="few">%d sekundy</item>
<item quantity="other">%d sekúnd</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d minuta</item>
<item quantity="few">%d minuty</item>
<item quantity="other">%d minút</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d hodina</item>
<item quantity="few">%d hodiny</item>
<item quantity="other">%d hodín</item>
</plurals>
<plurals name="days">
<item quantity="one">%d deň</item>
<item quantity="few">%d dni</item>
<item quantity="other">%d dní</item>
</plurals>
<string name="feed_groups_header_title">Skupiny zdrojov</string>
<string name="feed_oldest_subscription_update">Najstaršia aktualizácia odberu: %s</string>
<string name="feed_subscription_not_loaded_count">Nenačítané: %d</string>
<string name="feed_notification_loading">Načítavanie zdroja…</string>
<string name="feed_processing_message">Spracovávanie zdroja…</string>
<string name="feed_group_dialog_select_subscriptions">Vyberte odbery</string>
<string name="feed_group_dialog_empty_selection">Žiadne vybrané odbery</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d vybraný</item>
<item quantity="few">%d vybrané</item>
<item quantity="other">%d vybraných</item>
</plurals>
<string name="feed_group_dialog_empty_name">Bez názvu skupiny</string>
<string name="feed_group_dialog_name_input">Názov</string>
<string name="feed_group_dialog_delete_message">Chcete zmazať vybranú skupinu\?</string>
<string name="feed_create_new_group_button_title">Nová</string>
<string name="settings_category_feed_title">Zdroj</string>
<string name="feed_update_threshold_title">Interval obnovy zdroja</string>
<string name="feed_update_threshold_summary">Čas po ktorom sa kontrola odberu považuje za zastaralú — %s</string>
<string name="feed_update_threshold_option_always_update">Vždy aktualizovať</string>
<string name="feed_use_dedicated_fetch_method_title">Načítať z vyhradeného zdroja, ak je k dispozícii</string>
<string name="feed_use_dedicated_fetch_method_summary">Služba je dostupná len pre určité zdroje, zvyčajne je rýchlejšia ale môže vrátiť obmedzený počet položiek alebo neúplné informácie (napr. dĺžka, typ, status).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Povoliť rýchly režim</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Zakázať rýchly režim</string>
<string name="feed_use_dedicated_fetch_method_help_text">Myslíte si, že načítavanie informačného kanála je príliš pomalé\? Ak áno, skúste povoliť rýchle načítanie (môžete ho zmeniť v nastaveniach alebo stlačením tlačidla nižšie).
\n
\nNewPipe ponúka dve stratégie načítania informačného kanála:
\n• Načítava sa celý kanál prihlásenia na odber, ktorý je pomalý, ale úplný.
\n• Používanie vyhradeného koncového bodu služby, ktorý je rýchly, ale zvyčajne nie je kompletný.
\n
\nRozdiel medzi nimi je ten, že v prípade rýchleho videa zvyčajne chýbajú nejaké informácie, napríklad trvanie alebo typ položky (nedá sa rozlíšiť medzi živými videami a normálnymi videami) a môže sa vrátiť menej položiek.
\n
\nYouTube je príkladom služby, ktorá ponúka túto rýchlu metódu s informačným kanálom RSS.
\n
\nTakže výber sa zredukuje na to, čo uprednostňujete: rýchlosť alebo presné informácie.</string>
</resources>

View File

@ -47,6 +47,5 @@
<string name="playlist">Lista e videove</string>
<string name="yes">Po</string>
<string name="later">Më vonë</string>
<string name="playback_default">Standard</string>
<string name="missions_header_pending">në pritje të</string>
</resources>

View File

@ -447,7 +447,6 @@
<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_not_found">Hittades inte</string>
<string name="error_postprocessing_failed">Efterbehandling misslyckades</string>
<string name="clear_finished_download">Töm färdiga nedladdningar</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>

View File

@ -427,7 +427,6 @@
<string name="error_http_no_content">เซิร์ฟเวอร์ไม่ส่งข้อมูล</string>
<string name="error_http_unsupported_range">เซิร์ฟเวอร์ไม่รองรับการดาวน์โหลดแบบพร้อมกันหลายส่วน โปรดลองอีกครั้งด้วย @string/msg_threads = 1</string>
<string name="error_http_not_found">ไม่พบ</string>
<string name="clear_finished_download">ล้างการดาวน์โหลดที่เสร็จสิ้นแล้ว</string>
<string name="stop">หยุด</string>
<string name="max_retry_msg">จำนวนครั้งสูงสุดที่จะลองใหม่</string>
<string name="max_retry_desc">จำนวนครั้งสูงสุดที่จะลองใหม่ก่อนจะยกเลิกการดาวน์โหลด</string>

View File

@ -356,7 +356,6 @@
<string name="metadata_cache_wipe_complete_notice">Üstveri önbelleği temizlendi</string>
<string name="playback_speed_control">Oynatım Hızı Denetimleri</string>
<string name="playback_tempo">Hız</string>
<string name="playback_default">Öntanımlı</string>
<string name="playback_pitch">Ses yüksekliği</string>
<string name="unhook_checkbox">Ayır (bozulmaya neden olabilir)</string>
<string name="no_streams_available_download">İndirilebilecek akış yok</string>
@ -451,7 +450,6 @@
<string name="error_http_unsupported_range">Sunucu, çok iş parçacıklı indirmeleri kabul etmez, @string/msg_threads = 1 ile yeniden deneyin</string>
<string name="error_http_not_found">Bulunamadı</string>
<string name="error_postprocessing_failed">İşlem sonrası başarısız</string>
<string name="clear_finished_download">Tamamlanan indirmeleri temizle</string>
<string name="stop">Durdur</string>
<string name="max_retry_msg">Azami deneme sayısı</string>
<string name="max_retry_desc">İndirmeyi iptal etmeden önce azami deneme sayısı</string>
@ -544,9 +542,58 @@
<string name="subtitle_activity_recaptcha">Çözüldüğünde \"Bitti\" butonuna basın</string>
<string name="recaptcha_done_button">Bitti</string>
<string name="videos_string">Videolar</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s saniye</item>
<item quantity="other">%s saniye</item>
<plurals name="seconds">
<item quantity="one">%d saniye</item>
<item quantity="other">%d saniye</item>
</plurals>
<string name="new_seek_duration_toast">ExoPlayer kısıtlamaları gereği konumlama süresi %d saniyeye belirlenmiştir</string>
<string name="mute">Sessiz</string>
<string name="unmute">Sesli</string>
<string name="help">Yardım</string>
<plurals name="minutes">
<item quantity="one">%d dakika</item>
<item quantity="other">%d dakika</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d saat</item>
<item quantity="other">%d saat</item>
</plurals>
<plurals name="days">
<item quantity="one">%d gün</item>
<item quantity="other">%d gün</item>
</plurals>
<string name="feed_groups_header_title">Besleme kümeleri</string>
<string name="feed_oldest_subscription_update">En eski abonelik güncellemesi: %s</string>
<string name="feed_subscription_not_loaded_count">Yüklenmedi: %d</string>
<string name="feed_notification_loading">Besleme yükleniyor…</string>
<string name="feed_processing_message">Besleme işleniyor…</string>
<string name="feed_group_dialog_select_subscriptions">Abonelikleri seç</string>
<string name="feed_group_dialog_empty_selection">Abonelik seçilmedi</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d seçildi</item>
<item quantity="other">%d seçildi</item>
</plurals>
<string name="feed_group_dialog_empty_name">Boş küme adı</string>
<string name="feed_group_dialog_name_input">Ad</string>
<string name="feed_group_dialog_delete_message">Bu kümeyi silmek istiyor musunuz\?</string>
<string name="feed_create_new_group_button_title">Yeni</string>
<string name="settings_category_feed_title">Besleme</string>
<string name="feed_update_threshold_title">Besleme güncelleme eşiği</string>
<string name="feed_update_threshold_summary">Bir aboneliğin eski sayılmadan önce son güncellemeden sonra geçen zaman — %s</string>
<string name="feed_update_threshold_option_always_update">Her zaman güncelle</string>
<string name="feed_use_dedicated_fetch_method_title">Uygunken adanmış beslemeden edin</string>
<string name="feed_use_dedicated_fetch_method_summary">Bazı servislerde kullanılabilir, genellikle daha hızlıdır ancak kısıtlı sayıda öge ve eksik bilgi (örn. süre, öge türü, canlı durumu olmaksızın) getirilebilir.</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Hızlı kipi etkinleştir</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Hızlı kipi devre dışı bırak</string>
<string name="feed_use_dedicated_fetch_method_help_text">Beslemenin çok yavaş yüklendiğini mi düşünüyorsunuz\? Öyleyse, hızlı yüklemeyi etkinleştirin (ayarlardan değiştirebilir veya aşağıdaki düğmeye dokunabilirsiniz).
\n
\nNewPipe iki besleme yükleme yordamı sunar:
\n• Tüm abonelik kanalını edinme, bu yavaş ancak tamdır.
\n• Adanmış hizmet son noktası kullanır, bu hızlıdır ancak genellikle tam değildir.
\n
\nİkisinin arasındaki fark, hızlı olanın genellikle ögenin süresi veya türü (canlı ve sıradan videoları ayrımsayamaz) gibi bazı bilgilerden yoksunluğu ve daha az öge getirmesidir.
\n
\nYouTube, RSS beslemesiyle bu hızlı yöntemi sunan servislerden biridir.
\n
\nSeçim, sizin neyi yeğlediğinize kalmış: hız veya kusursuz bilgi.</string>
</resources>

View File

@ -462,7 +462,6 @@
<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="clear_finished_download">Очистити завершені завантаження</string>
<string name="stop">Зупинити</string>
<string name="max_retry_msg">Максимум спроб</string>
<string name="max_retry_desc">Максимальна кількість спроб перед скасуванням завантаження</string>

View File

@ -451,7 +451,6 @@
<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="clear_finished_download">ختم شدہ ڈاؤن لوڈ صاف کریں</string>
<string name="stop">روکیں</string>
<string name="max_retry_msg">زیادہ سے زیادہ کوششیں</string>
<string name="max_retry_desc">ڈاؤن لوڈ منسوخ کرنے سے پہلے کوششوں کی زیادہ سے زیادہ تعداد</string>

View File

@ -451,7 +451,6 @@
<string name="error_http_unsupported_range">Máy chủ không chấp nhận tải đa luồng, thử lại với số luồng = 1</string>
<string name="error_http_not_found">Không tìm thấy</string>
<string name="error_postprocessing_failed">Xử lý thất bại</string>
<string name="clear_finished_download">Dọn các tải về đã hoàn thành</string>
<string name="stop">Dừng</string>
<string name="max_retry_msg">Số lượt thử lại tối đa</string>
<string name="max_retry_desc">Số lượt thử lại trước khi hủy tải về</string>

View File

@ -458,7 +458,6 @@
<string name="error_http_no_content">服务器未发送数据</string>
<string name="error_http_not_found">找不到 NOT FOUND</string>
<string name="error_postprocessing_failed">后期处理失败</string>
<string name="clear_finished_download">清除已完成的下载</string>
<string name="stop">停止</string>
<string name="max_retry_msg">最大重试次数</string>
<string name="max_retry_desc">取消下载前的最多尝试次数</string>

View File

@ -355,7 +355,6 @@
<string name="playback_tempo">節奏</string>
<string name="playback_pitch">音高</string>
<string name="unhook_checkbox">解除掛鉤(可能導致失真)</string>
<string name="playback_default">預設</string>
<string name="preferred_open_action_settings_title">偏好的「開啟」動作</string>
<string name="preferred_open_action_settings_summary">開啟內容時的預設動作 — %s</string>
<string name="no_streams_available_download">沒有可供下載的串流</string>
@ -449,7 +448,6 @@
<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="clear_finished_download">清除已結束的下載</string>
<string name="stop">停止</string>
<string name="max_retry_msg">最大重試次數</string>
<string name="max_retry_desc">在取消下載前的最大嘗試數</string>
@ -537,10 +535,53 @@
<string name="subtitle_activity_recaptcha">解決後請按「完成」</string>
<string name="recaptcha_done_button">完成</string>
<string name="videos_string">影片</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="other">%s</item>
<plurals name="seconds">
<item quantity="other">%d</item>
</plurals>
<string name="new_seek_duration_toast">因為 ExoPlayer 的限制,搜尋持續時間設定為 %d 秒</string>
<string name="mute">靜音</string>
<string name="unmute">取消靜音</string>
<string name="help">說明</string>
<plurals name="minutes">
<item quantity="other">%d 分鐘</item>
</plurals>
<plurals name="hours">
<item quantity="other">%d 小時</item>
</plurals>
<plurals name="days">
<item quantity="other">%d 天</item>
</plurals>
<string name="feed_groups_header_title">Feed 群組</string>
<string name="feed_oldest_subscription_update">最舊訂閱更新:%s</string>
<string name="feed_subscription_not_loaded_count">未載入:%d</string>
<string name="feed_notification_loading">正在載入 feed……</string>
<string name="feed_processing_message">正在處理 feed……</string>
<string name="feed_group_dialog_select_subscriptions">選取訂閱</string>
<string name="feed_group_dialog_empty_selection">未選取訂閱</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="other">已選取 %d</item>
</plurals>
<string name="feed_group_dialog_empty_name">清空群組名稱</string>
<string name="feed_group_dialog_name_input">名稱</string>
<string name="feed_group_dialog_delete_message">您想要刪除此群組嗎?</string>
<string name="feed_create_new_group_button_title"></string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Feed 更新閾值</string>
<string name="feed_update_threshold_summary">上次更新後,訂閱被視為過時的時間 — %s</string>
<string name="feed_update_threshold_option_always_update">總是更新</string>
<string name="feed_use_dedicated_fetch_method_title">在可用時從專用 feed 擷取</string>
<string name="feed_use_dedicated_fetch_method_summary">其在某些服務中可用,且通常較快速,但可能只會回傳有限的項目,而且資訊通常不完整(例如:沒有持續時間、項目類型、沒有即時狀態)。</string>
<string name="feed_use_dedicated_fetch_method_enable_button">啟用快速模式</string>
<string name="feed_use_dedicated_fetch_method_disable_button">停用快速模式</string>
<string name="feed_use_dedicated_fetch_method_help_text">您覺得 feed 載入太慢了嗎?如果是的話,試著啟用快速載入(您可以在設定中變更或按下下方的按鈕)。
\n
\nNewPipe 提供兩個 feed 載入策略:
\n• 擷取整個訂閱頻道,慢但是完整。
\n• 使用專用的伺服器端點,較快速但是通常不完整。
\n
\n兩者之間的差別是較快速的通常缺少部份資訊如項目的持續時間或類型無法區分直播影片或一般影片而且其可能會回傳較少項目。
\n
\nYouTube 是一種透過其 RSS feed 提供這種快速方式的例子。
\n
\n因此請選取您較偏好的速度或準確的資訊。</string>
</resources>

View File

@ -16,6 +16,7 @@
<attr name="expand" format="reference"/>
<attr name="collapse" format="reference"/>
<attr name="volume_off" format="reference"/>
<attr name="volume_on" format="reference"/>
<attr name="clear_history" format="reference" />
<attr name="palette" format="reference"/>
<attr name="language" format="reference"/>

View File

@ -33,7 +33,7 @@
<string name="seek_duration_default_value" translatable="false">10000</string>
<string-array name="seek_duration_description" translatable="false">
<!-- They are overridden in VideoAudioSettingsFragment.java if the translation
(dynamic_seek_duration_description) exist. Otherwise this array is picked-->
(seconds) exist. Otherwise this array is picked-->
<item>5 seconds</item>
<item>10 seconds</item>
<item>15 seconds</item>

View File

@ -594,11 +594,6 @@
<string name="app_language_title">App language</string>
<string name="systems_language">System default</string>
<string name="new_seek_duration_toast">Due to ExoPlayer constraints the seek duration was set to %d seconds</string>
<plurals name="dynamic_seek_duration_description">
<item quantity="one">%s second</item>
<item quantity="other">%s seconds</item>
</plurals>
<!-- Time duration plurals -->
<plurals name="seconds">
<item quantity="one">%d second</item>
@ -628,8 +623,11 @@
<string name="feed_notification_loading">Loading feed…</string>
<string name="feed_processing_message">Processing feed…</string>
<string name="feed_group_dialog_select_subscriptions">Select subscriptions</string>
<string name="feed_group_dialog_selection_count">Selected: %d</string>
<string name="feed_group_dialog_empty_selection">No subscription selected</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d selected</item>
<item quantity="other">%d selected</item>
</plurals>
<string name="feed_group_dialog_empty_name">Empty group name</string>
<string name="feed_group_dialog_name_input">Name</string>
<string name="feed_group_dialog_delete_message">Do you want to delete this group?</string>

View File

@ -33,6 +33,7 @@
<item name="expand">@drawable/ic_expand_more_black_24dp</item>
<item name="collapse">@drawable/ic_expand_less_black_24dp</item>
<item name="volume_off">@drawable/ic_volume_off_black_24dp</item>
<item name="volume_on">@drawable/ic_volume_up_black_24dp</item>
<item name="palette">@drawable/ic_palette_black_24dp</item>
<item name="language">@drawable/ic_language_black_24dp</item>
<item name="history">@drawable/ic_history_black_24dp</item>
@ -139,6 +140,7 @@
<item name="expand">@drawable/ic_expand_more_white_24dp</item>
<item name="collapse">@drawable/ic_expand_less_white_24dp</item>
<item name="volume_off">@drawable/ic_volume_off_white_24dp</item>
<item name="volume_on">@drawable/ic_volume_up_white_24dp</item>
<item name="palette">@drawable/ic_palette_white_24dp</item>
<item name="language">@drawable/ic_language_white_24dp</item>
<item name="history">@drawable/ic_history_white_24dp</item>

View File

@ -0,0 +1,99 @@
package org.schabi.newpipe.util.urlfinder
import org.junit.Assert.assertEquals
import org.junit.Test
/**
* Keep in mind that patterns from PatternsCompat are used, and they are already being extensively tested.
*/
class UrlFinderTest {
@Test fun `first url from long text`() {
val expected = "https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_"
val result = UrlFinder.firstUrlFromInput("""
|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|Eu tincidunt tortor aliquam nulla. URL: https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_ Sed dictum consequat dui.
|Pharetra diam sit amet nisl suscipit adipiscing bibendum est.
|Volutpat sed cras ornare arcu dui vivamus. Nulla posuere sollicitudin aliquam ultrices sagittis.
|Amet nisl purus in mollis nunc sed id. Ut aliquam purus sit amet luctus. Sit amet nisl suscipit adipiscing.
|Dapibus ultrices in iaculis nunc sed augue lacus viverra. Nisl purus in mollis nunc.
|Viverra nibh cras pulvinar mattis. ####!@!@!@!#### Not this one: https://www.youtube.com/playlist?list=SHOULD_NOT Nunc sed blandit libero volutpat.
|Nisl tincidunt eget nullam non nisi est sit amet. Purus in massa tempor nec feugiat nisl pretium fusce id.
|Vulputate eu scelerisque felis imperdiet proin fermentum leo vel.""".trimMargin())
assertEquals(expected, result)
}
@Test fun `no url from long text`() {
val result = UrlFinder.firstUrlFromInput("""
|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|Eu tincidunt tortor aliquam nulla. Sed dictum consequat dui. Pharetra diam sit amet nisl suscipit adipiscing bibendum est.
|Volutpat sed cras ornare arcu dui vivamus. Nulla posuere sollicitudin aliquam ultrices sagittis.
|Amet nisl purus in mollis nunc sed id. Ut aliquam purus sit amet luctus. Sit amet nisl suscipit adipiscing.
|Dapibus ultrices in iaculis nunc sed augue lacus viverra. Nisl purus in mollis nunc.
|Viverra nibh cras pulvinar mattis. Not this one: sed blandit libero volutpat.
|Nisl tincidunt eget nullam non nisi est sit amet. Purus in massa tempor nec feugiat nisl pretium fusce id.
|Vulputate eu scelerisque felis imperdiet proin fermentum leo vel.""".trimMargin())
assertEquals(null, result)
}
@Test fun `null and empty input`() {
assertEquals(null, UrlFinder.firstUrlFromInput(null))
assertEquals(null, UrlFinder.firstUrlFromInput(""))
assertEquals(null, UrlFinder.firstUrlFromInput(" "))
}
@Test fun `normal urls`() {
assertEquals("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_",
UrlFinder.firstUrlFromInput("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_"))
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
UrlFinder.firstUrlFromInput("https://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals("http://www.youtube.com/watch?v=dQw4w9WgXcQ",
UrlFinder.firstUrlFromInput("http://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals("https://www.google.com", UrlFinder.firstUrlFromInput("https://www.google.com"))
assertEquals("http://www.google.com/test/", UrlFinder.firstUrlFromInput("http://www.google.com/test/"))
assertEquals("https://www.google.com/test?x=yz#123", UrlFinder.firstUrlFromInput("https://www.google.com/test?x=yz#123"))
assertEquals("https://208.67.222.222", UrlFinder.firstUrlFromInput("https://208.67.222.222"))
assertEquals("https://208.67.222.222/", UrlFinder.firstUrlFromInput("https://208.67.222.222/"))
assertEquals("http://208.67.222.222/", UrlFinder.firstUrlFromInput("http://208.67.222.222/"))
}
@Test fun `unknown protocols`() {
assertEquals(null, UrlFinder.firstUrlFromInput("httpsS://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals(null, UrlFinder.firstUrlFromInput("rtsp://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals(null, UrlFinder.firstUrlFromInput("ftp://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals(null, UrlFinder.firstUrlFromInput("ASDF://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals(null, UrlFinder.firstUrlFromInput("https→://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals(null, UrlFinder.firstUrlFromInput("file:///etc/fstab"))
assertEquals(null, UrlFinder.firstUrlFromInput("://www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals(null, UrlFinder.firstUrlFromInput("www.youtube.com/watch?v=dQw4w9WgXcQ"))
assertEquals(null, UrlFinder.firstUrlFromInput("youtube.com/watch?v=dQw4w9WgXcQ"))
}
@Test fun `no ipv6 urls`() {
assertEquals(null, UrlFinder.firstUrlFromInput("http://[2620:119:35::35]/test"))
assertEquals(null, UrlFinder.firstUrlFromInput("https://[2620:119:35::35]"))
}
@Test fun `random prefixes and suffixes`() {
assertEquals("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_",
UrlFinder.firstUrlFromInput("$#!@#@!#https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_ @@@@@@@@@@@"))
assertEquals("https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_",
UrlFinder.firstUrlFromInput("(___\"https://www.youtube.com/playlist?list=PLabcdefghij-ABCDEFGHIJ1234567890_\")))_"))
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
UrlFinder.firstUrlFromInput(" https://www.youtube.com/watch?v=dQw4w9WgXcQ "))
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
UrlFinder.firstUrlFromInput(" ------_---__-https://www.youtube.com/watch?v=dQw4w9WgXcQ !!!!!!"))
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
UrlFinder.firstUrlFromInput("****https://www.youtube.com/watch?v=dQw4w9WgXcQ _"))
assertEquals("https://www.youtube.com/watch?v=dQw4w9WgXcQ",
UrlFinder.firstUrlFromInput("https://www.youtube.com/watch?v=dQw4w9WgXcQ\"Not PartOfTheUrl"))
}
}

View File

@ -0,0 +1,2 @@
This is a hotfix release updating NewPipe to allow using SoundCloud without major hassles again.
SoundCloud's v2 API is used in the extractor now and the detection of invalid client IDs has been improved.

View File

@ -0,0 +1,14 @@
New
• Subscription groups and sorted feeds
• Mute button in players
Improved
• Allow opening music.youtube.com and media.ccc.de links in NewPipe
• Relocate two settings from Appearance to Content
• Hide 5, 15, 25 second seek options if inexact seek is enabled
Fixed
• some WebM videos are not seekable
• database backup on Android P
• crash when sharing a downloaded file
• tons of YouTube extraction issue and more ...