diff --git a/app/build.gradle b/app/build.gradle
index 434584bf0..b77e6c986 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -13,8 +13,8 @@ android {
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 29
- versionCode 950
- versionName "0.19.5"
+ versionCode 951
+ versionName "0.19.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@@ -84,13 +84,18 @@ ext {
checkstyleVersion = '8.32'
stethoVersion = '1.5.1'
leakCanaryVersion = '2.2'
- exoPlayerVersion = '2.11.4'
+ exoPlayerVersion = '2.11.6'
androidxLifecycleVersion = '2.2.0'
androidxRoomVersion = '2.2.5'
groupieVersion = '2.8.0'
markwonVersion = '4.3.1'
}
+configurations {
+ checkstyle
+ ktlint
+}
+
checkstyle {
configFile rootProject.file('checkstyle.xml')
ignoreFailures false
@@ -106,8 +111,7 @@ task runCheckstyle(type: Checkstyle) {
exclude '**/BuildConfig.java'
exclude 'main/java/us/shandian/giga/**'
- // empty classpath
- classpath = files()
+ classpath = configurations.checkstyle
showViolations true
@@ -117,10 +121,6 @@ task runCheckstyle(type: Checkstyle) {
}
}
-configurations {
- ktlint
-}
-
task runKtlint(type: JavaExec) {
main = "com.pinterest.ktlint.Main"
classpath = configurations.ktlint
@@ -143,7 +143,7 @@ dependencies {
implementation "frankiesardo:icepick:${icepickVersion}"
kapt "frankiesardo:icepick-processor:${icepickVersion}"
- debugImplementation "com.puppycrawl.tools:checkstyle:${checkstyleVersion}"
+ checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}"
ktlint "com.pinterest:ktlint:0.35.0"
debugImplementation "com.facebook.stetho:stetho:${stethoVersion}"
@@ -163,7 +163,7 @@ dependencies {
exclude module: 'support-annotations'
}
- implementation 'com.github.TeamNewPipe:NewPipeExtractor:bda83fe6a5b9a8a0751669fbc444fa49d72d0d2f'
+ implementation 'com.github.TeamNewPipe:NewPipeExtractor:a70cb0283ffc3bba2709815673a5a7940aab0a3a'
implementation "com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
implementation "org.jsoup:jsoup:1.13.1"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a4764b4c4..c24c91193 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,22 +1,23 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
-
+
+
+
+
-
+
@@ -50,36 +52,36 @@
+ android:label="@string/title_activity_background_player"
+ android:launchMode="singleTask" />
+ android:label="@string/title_activity_popup_player"
+ android:launchMode="singleTask" />
+ android:exported="false" />
+ android:theme="@style/VideoPlayerTheme" />
+ android:label="@string/settings" />
+ android:label="@string/title_activity_about" />
-
-
-
+
+
+
-
+
-
+
-
+ android:theme="@android:style/Theme.NoDisplay" />
+
+ android:launchMode="singleTask" />
-
+
+ android:label="@string/recaptcha" />
+ android:resource="@xml/nnf_provider_paths" />
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:exported="false" />
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index 3fc3121b1..37d6d62f5 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -34,8 +34,6 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
@@ -127,12 +125,6 @@ public class MainActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- Window w = getWindow();
- w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
- WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
- }
-
if (getSupportFragmentManager() != null
&& getSupportFragmentManager().getBackStackEntryCount() == 0) {
initFragments();
diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
index 2fb8ac7f7..b5be2dde6 100644
--- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java
@@ -1,8 +1,6 @@
package org.schabi.newpipe.about;
import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -26,6 +24,7 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
+import static org.schabi.newpipe.util.ShareUtils.openUrlInBrowser;
public class AboutActivity extends AppCompatActivity {
/**
@@ -143,28 +142,23 @@ public class AboutActivity extends AppCompatActivity {
View githubLink = rootView.findViewById(R.id.github_link);
githubLink.setOnClickListener(nv ->
- openWebsite(context.getString(R.string.github_url), context));
+ openUrlInBrowser(context, context.getString(R.string.github_url)));
View donationLink = rootView.findViewById(R.id.donation_link);
donationLink.setOnClickListener(v ->
- openWebsite(context.getString(R.string.donation_url), context));
+ openUrlInBrowser(context, context.getString(R.string.donation_url)));
View websiteLink = rootView.findViewById(R.id.website_link);
websiteLink.setOnClickListener(nv ->
- openWebsite(context.getString(R.string.website_url), context));
+ openUrlInBrowser(context, context.getString(R.string.website_url)));
View privacyPolicyLink = rootView.findViewById(R.id.privacy_policy_link);
privacyPolicyLink.setOnClickListener(v ->
- openWebsite(context.getString(R.string.privacy_policy_url), context));
+ openUrlInBrowser(context, context.getString(R.string.privacy_policy_url)));
return rootView;
}
- private void openWebsite(final String url, final Context context) {
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
- context.startActivity(intent);
- }
-
}
/**
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistLocalItem.java b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistLocalItem.java
index fd99f84a1..3ce95631c 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistLocalItem.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistLocalItem.java
@@ -1,7 +1,33 @@
package org.schabi.newpipe.database.playlist;
import org.schabi.newpipe.database.LocalItem;
+import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
public interface PlaylistLocalItem extends LocalItem {
String getOrderingName();
+
+ static List merge(
+ final List localPlaylists,
+ final List remotePlaylists) {
+ final List items = new ArrayList<>(
+ localPlaylists.size() + remotePlaylists.size());
+ items.addAll(localPlaylists);
+ items.addAll(remotePlaylists);
+
+ Collections.sort(items, (left, right) -> {
+ final String on1 = left.getOrderingName();
+ final String on2 = right.getOrderingName();
+ if (on1 == null) {
+ return on2 == null ? 0 : 1;
+ } else {
+ return on2 == null ? -1 : on1.compareToIgnoreCase(on2);
+ }
+ });
+
+ return items;
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt
index 573fa4b90..60dd343b9 100644
--- a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt
+++ b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionDAO.kt
@@ -20,6 +20,45 @@ abstract class SubscriptionDAO : BasicDAO {
@Query("SELECT * FROM subscriptions ORDER BY name COLLATE NOCASE ASC")
abstract override fun getAll(): Flowable>
+ @Query("""
+ SELECT * FROM subscriptions
+
+ WHERE name LIKE '%' || :filter || '%'
+
+ ORDER BY name COLLATE NOCASE ASC
+ """)
+ abstract fun getSubscriptionsFiltered(filter: String): Flowable>
+
+ @Query("""
+ SELECT * FROM subscriptions s
+
+ LEFT JOIN feed_group_subscription_join fgs
+ ON s.uid = fgs.subscription_id
+
+ WHERE (fgs.subscription_id IS NULL OR fgs.group_id = :currentGroupId)
+
+ ORDER BY name COLLATE NOCASE ASC
+ """)
+ abstract fun getSubscriptionsOnlyUngrouped(
+ currentGroupId: Long
+ ): Flowable>
+
+ @Query("""
+ SELECT * FROM subscriptions s
+
+ LEFT JOIN feed_group_subscription_join fgs
+ ON s.uid = fgs.subscription_id
+
+ WHERE (fgs.subscription_id IS NULL OR fgs.group_id = :currentGroupId)
+ AND s.name LIKE '%' || :filter || '%'
+
+ ORDER BY name COLLATE NOCASE ASC
+ """)
+ abstract fun getSubscriptionsOnlyUngroupedFiltered(
+ currentGroupId: Long,
+ filter: String
+ ): Flowable>
+
@Query("SELECT * FROM subscriptions WHERE url LIKE :url AND service_id = :serviceId")
abstract fun getSubscriptionFlowable(serviceId: Int, url: String): Flowable>
@@ -52,7 +91,7 @@ abstract class SubscriptionDAO : BasicDAO {
entity.uid = uidFromInsert
} else {
val subscriptionIdFromDb = getSubscriptionIdInternal(entity.serviceId, entity.url)
- ?: throw IllegalStateException("Subscription cannot be null just after insertion.")
+ ?: throw IllegalStateException("Subscription cannot be null just after insertion.")
entity.uid = subscriptionIdFromDb
update(entity)
diff --git a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java
index cc7219543..a47f17d13 100644
--- a/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/subscription/SubscriptionEntity.java
@@ -130,4 +130,55 @@ public class SubscriptionEntity {
item.setDescription(getDescription());
return item;
}
+
+
+ // TODO: Remove these generated methods by migrating this class to a data class from Kotlin.
+ @Override
+ @SuppressWarnings("EqualsReplaceableByObjectsCall")
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final SubscriptionEntity that = (SubscriptionEntity) o;
+
+ if (uid != that.uid) {
+ return false;
+ }
+ if (serviceId != that.serviceId) {
+ return false;
+ }
+ if (!url.equals(that.url)) {
+ return false;
+ }
+ if (name != null ? !name.equals(that.name) : that.name != null) {
+ return false;
+ }
+ if (avatarUrl != null ? !avatarUrl.equals(that.avatarUrl) : that.avatarUrl != null) {
+ return false;
+ }
+ if (subscriberCount != null
+ ? !subscriberCount.equals(that.subscriberCount)
+ : that.subscriberCount != null) {
+ return false;
+ }
+ return description != null
+ ? description.equals(that.description)
+ : that.description == null;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) (uid ^ (uid >>> 32));
+ result = 31 * result + serviceId;
+ result = 31 * result + url.hashCode();
+ result = 31 * result + (name != null ? name.hashCode() : 0);
+ result = 31 * result + (avatarUrl != null ? avatarUrl.hashCode() : 0);
+ result = 31 * result + (subscriberCount != null ? subscriberCount.hashCode() : 0);
+ result = 31 * result + (description != null ? description.hashCode() : 0);
+ return result;
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
index 36e7a206c..fff689930 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java
@@ -479,7 +479,6 @@ public class VideoDetailFragment extends BaseStateFragment
case R.id.detail_controls_download:
NavigationHelper.openDownloads(getActivity());
break;
-
case R.id.detail_uploader_root_layout:
if (TextUtils.isEmpty(currentInfo.getSubChannelUrl())) {
Log.w(TAG,
@@ -488,6 +487,9 @@ public class VideoDetailFragment extends BaseStateFragment
openChannel(currentInfo.getUploaderUrl(), currentInfo.getUploaderName());
}
break;
+ case R.id.detail_title_root_layout:
+ ShareUtils.copyToClipboard(getContext(), videoTitleTextView.getText().toString());
+ break;
}
return true;
@@ -583,6 +585,7 @@ public class VideoDetailFragment extends BaseStateFragment
protected void initListeners() {
super.initListeners();
+ videoTitleRoot.setOnLongClickListener(this);
uploaderRootLayout.setOnClickListener(this);
uploaderRootLayout.setOnLongClickListener(this);
videoTitleRoot.setOnClickListener(this);
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
index aed7c4795..82b1d18ed 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListInfoFragment.java
@@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.ListInfo;
+import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.util.Constants;
import org.schabi.newpipe.views.NewPipeRecyclerView;
@@ -30,7 +31,7 @@ public abstract class BaseListInfoFragment
protected String url;
protected I currentInfo;
- protected String currentNextPageUrl;
+ protected Page currentNextPage;
protected Disposable currentWorker;
@Override
@@ -78,7 +79,7 @@ public abstract class BaseListInfoFragment
public void writeTo(final Queue
- *
- * @param skippable whether the error could be skipped
*/
- public synchronized void error(final boolean skippable) {
- final int index = getIndex();
-
- if (skippable) {
- queueIndex.incrementAndGet();
- } else {
- removeInternal(index);
- }
-
- broadcast(new ErrorEvent(index, getIndex(), skippable));
+ public synchronized void error() {
+ final int oldIndex = getIndex();
+ queueIndex.incrementAndGet();
+ broadcast(new ErrorEvent(oldIndex, getIndex()));
}
private synchronized void removeInternal(final int removeIndex) {
diff --git a/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueAdapter.java b/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueAdapter.java
index bf1361fc5..f8777597a 100644
--- a/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueAdapter.java
+++ b/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueueAdapter.java
@@ -115,9 +115,6 @@ public class PlayQueueAdapter extends RecyclerView.Adapter streams,
final int index) {
- super(serviceId, url, nextPageUrl, streams, index);
+ super(serviceId, url, nextPage, streams, index);
}
@Override
@@ -40,7 +41,7 @@ public final class PlaylistPlayQueue extends AbstractInfoPlayQueue {
- Context context = this;
- new AlertDialog.Builder(context)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setTitle(R.string.privacy_policy_title)
- .setMessage(R.string.start_accept_privacy_policy)
- .setCancelable(false)
- .setNeutralButton(R.string.read_privacy_policy, (dialog, which) -> {
- Intent webIntent = new Intent(Intent.ACTION_VIEW,
- Uri.parse(context.getString(R.string.privacy_policy_url))
- );
- context.startActivity(webIntent);
- })
- .setPositiveButton(R.string.accept, (dialog, which) -> {
- final Intent i = new Intent(Intent.ACTION_SENDTO)
- .setData(Uri.parse("mailto:")) // only email apps should handle this
- .putExtra(Intent.EXTRA_EMAIL, new String[]{ERROR_EMAIL_ADDRESS})
- .putExtra(Intent.EXTRA_SUBJECT, ERROR_EMAIL_SUBJECT)
- .putExtra(Intent.EXTRA_TEXT, buildJson());
- if (i.resolveActivity(getPackageManager()) != null) {
- startActivity(i);
- }
-
- })
- .setNegativeButton(R.string.decline, (dialog, which) -> {
- // do nothing
- })
- .show();
-
+ reportEmailButton.setOnClickListener((View v) -> {
+ openPrivacyPolicyDialog(this, "EMAIL");
});
+ copyButton.setOnClickListener((View v) -> {
+ ShareUtils.copyToClipboard(this, buildMarkdown());
+ Toast.makeText(this, R.string.msg_copied, Toast.LENGTH_SHORT).show();
+ });
+
+ reportGithubButton.setOnClickListener((View v) -> {
+ openPrivacyPolicyDialog(this, "GITHUB");
+ });
+
+
// normal bugreport
buildInfo(errorInfo);
if (errorInfo.message != 0) {
@@ -250,7 +241,7 @@ public class ErrorActivity extends AppCompatActivity {
errorView.setText(formErrorText(errorList));
- //print stack trace once again for debugging:
+ // print stack trace once again for debugging:
for (String e : errorList) {
Log.e(TAG, e);
}
@@ -281,6 +272,37 @@ public class ErrorActivity extends AppCompatActivity {
return false;
}
+ private void openPrivacyPolicyDialog(final Context context, final String action) {
+ new AlertDialog.Builder(context)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setTitle(R.string.privacy_policy_title)
+ .setMessage(R.string.start_accept_privacy_policy)
+ .setCancelable(false)
+ .setNeutralButton(R.string.read_privacy_policy, (dialog, which) -> {
+ ShareUtils.openUrlInBrowser(context,
+ context.getString(R.string.privacy_policy_url));
+ })
+ .setPositiveButton(R.string.accept, (dialog, which) -> {
+ if (action.equals("EMAIL")) { // send on email
+ final Intent i = new Intent(Intent.ACTION_SENDTO)
+ .setData(Uri.parse("mailto:")) // only email apps should handle this
+ .putExtra(Intent.EXTRA_EMAIL, new String[]{ERROR_EMAIL_ADDRESS})
+ .putExtra(Intent.EXTRA_SUBJECT, ERROR_EMAIL_SUBJECT)
+ .putExtra(Intent.EXTRA_TEXT, buildJson());
+ if (i.resolveActivity(getPackageManager()) != null) {
+ startActivity(i);
+ }
+ } else if (action.equals("GITHUB")) { // open the NewPipe issue page on GitHub
+ ShareUtils.openUrlInBrowser(this, ERROR_GITHUB_ISSUE_URL);
+ }
+
+ })
+ .setNegativeButton(R.string.decline, (dialog, which) -> {
+ // do nothing
+ })
+ .show();
+ }
+
private String formErrorText(final String[] el) {
StringBuilder text = new StringBuilder();
if (el != null) {
@@ -331,7 +353,9 @@ public class ErrorActivity extends AppCompatActivity {
text += getUserActionString(info.userAction) + "\n"
+ info.request + "\n"
- + getContentLangString() + "\n"
+ + getContentLanguageString() + "\n"
+ + getContentCountryString() + "\n"
+ + getAppLanguage() + "\n"
+ info.serviceName + "\n"
+ currentTimeStamp + "\n"
+ getPackageName() + "\n"
@@ -347,7 +371,9 @@ public class ErrorActivity extends AppCompatActivity {
.object()
.value("user_action", getUserActionString(errorInfo.userAction))
.value("request", errorInfo.request)
- .value("content_language", getContentLangString())
+ .value("content_language", getContentLanguageString())
+ .value("content_country", getContentCountryString())
+ .value("app_language", getAppLanguage())
.value("service", errorInfo.serviceName)
.value("package", getPackageName())
.value("version", BuildConfig.VERSION_NAME)
@@ -365,6 +391,63 @@ public class ErrorActivity extends AppCompatActivity {
return "";
}
+ private String buildMarkdown() {
+ try {
+ final StringBuilder htmlErrorReport = new StringBuilder();
+
+ final String userComment = userCommentBox.getText().toString();
+ if (!userComment.isEmpty()) {
+ htmlErrorReport.append(userComment).append("\n");
+ }
+
+ // basic error info
+ htmlErrorReport
+ .append("## Exception")
+ .append("\n* __User Action:__ ")
+ .append(getUserActionString(errorInfo.userAction))
+ .append("\n* __Request:__ ").append(errorInfo.request)
+ .append("\n* __Content Country:__ ").append(getContentCountryString())
+ .append("\n* __Content Language:__ ").append(getContentLanguageString())
+ .append("\n* __App Language:__ ").append(getAppLanguage())
+ .append("\n* __Service:__ ").append(errorInfo.serviceName)
+ .append("\n* __Version:__ ").append(BuildConfig.VERSION_NAME)
+ .append("\n* __OS:__ ").append(getOsString()).append("\n");
+
+
+ // Collapse all logs to a single paragraph when there are more than one
+ // to keep the GitHub issue clean.
+ if (errorList.length > 1) {
+ htmlErrorReport
+ .append("Exceptions (")
+ .append(errorList.length)
+ .append(")
\n");
+ }
+
+ // add the logs
+ for (int i = 0; i < errorList.length; i++) {
+ htmlErrorReport.append("Crash log ");
+ if (errorList.length > 1) {
+ htmlErrorReport.append(i + 1);
+ }
+ htmlErrorReport.append("")
+ .append("
\n")
+ .append("\n```\n").append(errorList[i]).append("\n```\n")
+ .append("
\n");
+ }
+
+ // make sure to close everything
+ if (errorList.length > 1) {
+ htmlErrorReport.append("
\n");
+ }
+ htmlErrorReport.append("
\n");
+ return htmlErrorReport.toString();
+ } catch (Throwable e) {
+ Log.e(TAG, "Error while erroring: Could not build markdown");
+ e.printStackTrace();
+ return "";
+ }
+ }
+
private String getUserActionString(final UserAction userAction) {
if (userAction == null) {
return "Your description is in another castle.";
@@ -373,24 +456,27 @@ public class ErrorActivity extends AppCompatActivity {
}
}
- private String getContentLangString() {
- String contentLanguage = PreferenceManager.getDefaultSharedPreferences(this)
- .getString(this.getString(R.string.content_country_key), "none");
- if (contentLanguage.equals(getString(R.string.default_localization_key))) {
- contentLanguage = Locale.getDefault().toString();
- }
- return contentLanguage;
+ private String getContentCountryString() {
+ return Localization.getPreferredContentCountry(this).getCountryCode();
+ }
+
+ private String getContentLanguageString() {
+ return Localization.getPreferredLocalization(this).getLocalizationCode();
+ }
+
+ private String getAppLanguage() {
+ return Localization.getAppLocale(getApplicationContext()).toString();
}
private String getOsString() {
- String osBase = Build.VERSION.SDK_INT >= 23 ? Build.VERSION.BASE_OS : "Android";
+ final String osBase = Build.VERSION.SDK_INT >= 23 ? Build.VERSION.BASE_OS : "Android";
return System.getProperty("os.name")
+ " " + (osBase.isEmpty() ? "Android" : osBase)
+ " " + Build.VERSION.RELEASE
+ " - " + Build.VERSION.SDK_INT;
}
- private void addGuruMeditaion() {
+ private void addGuruMeditation() {
//just an easter egg
TextView sorryView = findViewById(R.id.errorSorryView);
String text = sorryView.getText().toString();
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
index 5b452430b..df529fee0 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
@@ -64,7 +64,7 @@ public class SelectChannelFragment extends DialogFragment {
private final ImageLoader imageLoader = ImageLoader.getInstance();
- private OnSelectedLisener onSelectedLisener = null;
+ private OnSelectedListener onSelectedListener = null;
private OnCancelListener onCancelListener = null;
private ProgressBar progressBar;
@@ -73,8 +73,8 @@ public class SelectChannelFragment extends DialogFragment {
private List subscriptions = new Vector<>();
- public void setOnSelectedLisener(final OnSelectedLisener listener) {
- onSelectedLisener = listener;
+ public void setOnSelectedListener(final OnSelectedListener listener) {
+ onSelectedListener = listener;
}
public void setOnCancelListener(final OnCancelListener listener) {
@@ -129,9 +129,9 @@ public class SelectChannelFragment extends DialogFragment {
}
private void clickedItem(final int position) {
- if (onSelectedLisener != null) {
+ if (onSelectedListener != null) {
SubscriptionEntity entry = subscriptions.get(position);
- onSelectedLisener
+ onSelectedListener
.onChannelSelected(entry.getServiceId(), entry.getUrl(), entry.getName());
}
dismiss();
@@ -186,7 +186,7 @@ public class SelectChannelFragment extends DialogFragment {
// Interfaces
//////////////////////////////////////////////////////////////////////////*/
- public interface OnSelectedLisener {
+ public interface OnSelectedListener {
void onChannelSelected(int serviceId, String url, String name);
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java
index 4df70ccec..13d34dec8 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java
@@ -52,11 +52,11 @@ public class SelectKioskFragment extends DialogFragment {
private RecyclerView recyclerView = null;
private SelectKioskAdapter selectKioskAdapter = null;
- private OnSelectedLisener onSelectedLisener = null;
+ private OnSelectedListener onSelectedListener = null;
private OnCancelListener onCancelListener = null;
- public void setOnSelectedLisener(final OnSelectedLisener listener) {
- onSelectedLisener = listener;
+ public void setOnSelectedListener(final OnSelectedListener listener) {
+ onSelectedListener = listener;
}
public void setOnCancelListener(final OnCancelListener listener) {
@@ -102,8 +102,8 @@ public class SelectKioskFragment extends DialogFragment {
}
private void clickedItem(final SelectKioskAdapter.Entry entry) {
- if (onSelectedLisener != null) {
- onSelectedLisener.onKioskSelected(entry.serviceId, entry.kioskId, entry.kioskName);
+ if (onSelectedListener != null) {
+ onSelectedListener.onKioskSelected(entry.serviceId, entry.kioskId, entry.kioskName);
}
dismiss();
}
@@ -122,7 +122,7 @@ public class SelectKioskFragment extends DialogFragment {
// Interfaces
//////////////////////////////////////////////////////////////////////////*/
- public interface OnSelectedLisener {
+ public interface OnSelectedListener {
void onKioskSelected(int serviceId, String kioskId, String kioskName);
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java
new file mode 100644
index 000000000..1d5c94421
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/settings/SelectPlaylistFragment.java
@@ -0,0 +1,225 @@
+package org.schabi.newpipe.settings;
+
+import android.app.Activity;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.nostra13.universalimageloader.core.DisplayImageOptions;
+import com.nostra13.universalimageloader.core.ImageLoader;
+
+import org.schabi.newpipe.NewPipeDatabase;
+import org.schabi.newpipe.R;
+import org.schabi.newpipe.database.AppDatabase;
+import org.schabi.newpipe.database.LocalItem;
+import org.schabi.newpipe.database.playlist.PlaylistLocalItem;
+import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
+import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
+import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
+import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
+import org.schabi.newpipe.report.ErrorActivity;
+import org.schabi.newpipe.report.UserAction;
+
+import java.util.List;
+import java.util.Vector;
+
+import io.reactivex.Flowable;
+import io.reactivex.disposables.Disposable;
+
+public class SelectPlaylistFragment extends DialogFragment {
+ /**
+ * This contains the base display options for images.
+ */
+ private static final DisplayImageOptions DISPLAY_IMAGE_OPTIONS
+ = new DisplayImageOptions.Builder().cacheInMemory(true).build();
+
+ private final ImageLoader imageLoader = ImageLoader.getInstance();
+
+ private OnSelectedListener onSelectedListener = null;
+ private OnCancelListener onCancelListener = null;
+
+ private ProgressBar progressBar;
+ private TextView emptyView;
+ private RecyclerView recyclerView;
+ private Disposable playlistsSubscriber;
+
+ private List playlists = new Vector<>();
+
+ public void setOnSelectedListener(final OnSelectedListener listener) {
+ onSelectedListener = listener;
+ }
+
+ public void setOnCancelListener(final OnCancelListener listener) {
+ onCancelListener = listener;
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Fragment's Lifecycle
+ //////////////////////////////////////////////////////////////////////////*/
+
+ @Override
+ public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container,
+ final Bundle savedInstanceState) {
+ final View v =
+ inflater.inflate(R.layout.select_playlist_fragment, container, false);
+ recyclerView = v.findViewById(R.id.items_list);
+ recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+ SelectPlaylistAdapter playlistAdapter = new SelectPlaylistAdapter();
+ recyclerView.setAdapter(playlistAdapter);
+
+ progressBar = v.findViewById(R.id.progressBar);
+ emptyView = v.findViewById(R.id.empty_state_view);
+ progressBar.setVisibility(View.VISIBLE);
+ recyclerView.setVisibility(View.GONE);
+ emptyView.setVisibility(View.GONE);
+
+ final AppDatabase database = NewPipeDatabase.getInstance(requireContext());
+ final LocalPlaylistManager localPlaylistManager = new LocalPlaylistManager(database);
+ final RemotePlaylistManager remotePlaylistManager = new RemotePlaylistManager(database);
+
+ playlistsSubscriber = Flowable.combineLatest(localPlaylistManager.getPlaylists(),
+ remotePlaylistManager.getPlaylists(), PlaylistLocalItem::merge)
+ .subscribe(this::displayPlaylists, this::onError);
+
+ return v;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ if (playlistsSubscriber != null) {
+ playlistsSubscriber.dispose();
+ playlistsSubscriber = null;
+ }
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Handle actions
+ //////////////////////////////////////////////////////////////////////////*/
+
+ @Override
+ public void onCancel(final DialogInterface dialogInterface) {
+ super.onCancel(dialogInterface);
+ if (onCancelListener != null) {
+ onCancelListener.onCancel();
+ }
+ }
+
+ private void clickedItem(final int position) {
+ if (onSelectedListener != null) {
+ final LocalItem selectedItem = playlists.get(position);
+
+ if (selectedItem instanceof PlaylistMetadataEntry) {
+ final PlaylistMetadataEntry entry = ((PlaylistMetadataEntry) selectedItem);
+ onSelectedListener
+ .onLocalPlaylistSelected(entry.uid, entry.name);
+
+ } else if (selectedItem instanceof PlaylistRemoteEntity) {
+ final PlaylistRemoteEntity entry = ((PlaylistRemoteEntity) selectedItem);
+ onSelectedListener.onRemotePlaylistSelected(
+ entry.getServiceId(), entry.getUrl(), entry.getName());
+ }
+ }
+ dismiss();
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Item handling
+ //////////////////////////////////////////////////////////////////////////*/
+
+ private void displayPlaylists(final List newPlaylists) {
+ this.playlists = newPlaylists;
+ progressBar.setVisibility(View.GONE);
+ if (newPlaylists.isEmpty()) {
+ emptyView.setVisibility(View.VISIBLE);
+ return;
+ }
+ recyclerView.setVisibility(View.VISIBLE);
+
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Error
+ //////////////////////////////////////////////////////////////////////////*/
+
+ protected void onError(final Throwable e) {
+ final Activity activity = getActivity();
+ ErrorActivity.reportError(activity, e, activity.getClass(), null, ErrorActivity.ErrorInfo
+ .make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Interfaces
+ //////////////////////////////////////////////////////////////////////////*/
+
+ public interface OnSelectedListener {
+ void onLocalPlaylistSelected(long id, String name);
+ void onRemotePlaylistSelected(int serviceId, String url, String name);
+ }
+
+ public interface OnCancelListener {
+ void onCancel();
+ }
+
+ private class SelectPlaylistAdapter
+ extends RecyclerView.Adapter {
+ @Override
+ public SelectPlaylistItemHolder onCreateViewHolder(final ViewGroup parent,
+ final int viewType) {
+ final View item = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.list_playlist_mini_item, parent, false);
+ return new SelectPlaylistItemHolder(item);
+ }
+
+ @Override
+ public void onBindViewHolder(final SelectPlaylistItemHolder holder, final int position) {
+ final PlaylistLocalItem selectedItem = playlists.get(position);
+
+ if (selectedItem instanceof PlaylistMetadataEntry) {
+ final PlaylistMetadataEntry entry = ((PlaylistMetadataEntry) selectedItem);
+
+ holder.titleView.setText(entry.name);
+ holder.view.setOnClickListener(view -> clickedItem(position));
+ imageLoader.displayImage(entry.thumbnailUrl, holder.thumbnailView,
+ DISPLAY_IMAGE_OPTIONS);
+
+ } else if (selectedItem instanceof PlaylistRemoteEntity) {
+ final PlaylistRemoteEntity entry = ((PlaylistRemoteEntity) selectedItem);
+
+ holder.titleView.setText(entry.getName());
+ holder.view.setOnClickListener(view -> clickedItem(position));
+ imageLoader.displayImage(entry.getThumbnailUrl(), holder.thumbnailView,
+ DISPLAY_IMAGE_OPTIONS);
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return playlists.size();
+ }
+
+ public class SelectPlaylistItemHolder extends RecyclerView.ViewHolder {
+ public final View view;
+ final ImageView thumbnailView;
+ final TextView titleView;
+
+ SelectPlaylistItemHolder(final View v) {
+ super(v);
+ this.view = v;
+ thumbnailView = v.findViewById(R.id.itemThumbnailView);
+ titleView = v.findViewById(R.id.itemTitleView);
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java
index 6ebfbd73c..1b26cd529 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java
@@ -34,6 +34,7 @@ import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.settings.SelectChannelFragment;
import org.schabi.newpipe.settings.SelectKioskFragment;
+import org.schabi.newpipe.settings.SelectPlaylistFragment;
import org.schabi.newpipe.settings.tabs.AddTabDialog.ChooseTabListItem;
import org.schabi.newpipe.util.ThemeHelper;
@@ -48,7 +49,7 @@ public class ChooseTabsFragment extends Fragment {
private TabsManager tabsManager;
- private List tabList = new ArrayList<>();
+ private final List tabList = new ArrayList<>();
private ChooseTabsFragment.SelectedTabsAdapter selectedTabsAdapter;
/*//////////////////////////////////////////////////////////////////////////
@@ -78,10 +79,10 @@ public class ChooseTabsFragment extends Fragment {
initButton(rootView);
- RecyclerView listSelectedTabs = rootView.findViewById(R.id.selectedTabs);
+ final RecyclerView listSelectedTabs = rootView.findViewById(R.id.selectedTabs);
listSelectedTabs.setLayoutManager(new LinearLayoutManager(requireContext()));
- ItemTouchHelper itemTouchHelper = new ItemTouchHelper(getItemTouchCallback());
+ final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(getItemTouchCallback());
itemTouchHelper.attachToRecyclerView(listSelectedTabs);
selectedTabsAdapter = new SelectedTabsAdapter(requireContext(), itemTouchHelper);
@@ -138,7 +139,7 @@ public class ChooseTabsFragment extends Fragment {
private void updateTitle() {
if (getActivity() instanceof AppCompatActivity) {
- ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
+ final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle(R.string.main_page_content);
}
@@ -201,16 +202,33 @@ public class ChooseTabsFragment extends Fragment {
switch (type) {
case KIOSK:
SelectKioskFragment selectKioskFragment = new SelectKioskFragment();
- selectKioskFragment.setOnSelectedLisener((serviceId, kioskId, kioskName) ->
+ selectKioskFragment.setOnSelectedListener((serviceId, kioskId, kioskName) ->
addTab(new Tab.KioskTab(serviceId, kioskId)));
selectKioskFragment.show(requireFragmentManager(), "select_kiosk");
return;
case CHANNEL:
SelectChannelFragment selectChannelFragment = new SelectChannelFragment();
- selectChannelFragment.setOnSelectedLisener((serviceId, url, name) ->
+ selectChannelFragment.setOnSelectedListener((serviceId, url, name) ->
addTab(new Tab.ChannelTab(serviceId, url, name)));
selectChannelFragment.show(requireFragmentManager(), "select_channel");
return;
+ case PLAYLIST:
+ SelectPlaylistFragment selectPlaylistFragment = new SelectPlaylistFragment();
+ selectPlaylistFragment.setOnSelectedListener(
+ new SelectPlaylistFragment.OnSelectedListener() {
+ @Override
+ public void onLocalPlaylistSelected(final long id, final String name) {
+ addTab(new Tab.PlaylistTab(id, name));
+ }
+
+ @Override
+ public void onRemotePlaylistSelected(
+ final int serviceId, final String url, final String name) {
+ addTab(new Tab.PlaylistTab(serviceId, url, name));
+ }
+ });
+ selectPlaylistFragment.show(requireFragmentManager(), "select_playlist");
+ return;
default:
addTab(type.getTab());
break;
@@ -248,6 +266,11 @@ public class ChooseTabsFragment extends Fragment {
R.attr.ic_kiosk_hot)));
}
break;
+ case PLAYLIST:
+ returnList.add(new ChooseTabListItem(tab.getTabId(),
+ getString(R.string.playlist_page_summary),
+ tab.getTabIconRes(context)));
+ break;
default:
if (!tabList.contains(tab)) {
returnList.add(new ChooseTabListItem(context, tab));
@@ -337,7 +360,7 @@ public class ChooseTabsFragment extends Fragment {
@Override
public ChooseTabsFragment.SelectedTabsAdapter.TabViewHolder onCreateViewHolder(
@NonNull final ViewGroup parent, final int viewType) {
- View view = inflater.inflate(R.layout.list_choose_tabs, parent, false);
+ final View view = inflater.inflate(R.layout.list_choose_tabs, parent, false);
return new ChooseTabsFragment.SelectedTabsAdapter.TabViewHolder(view);
}
@@ -393,6 +416,13 @@ public class ChooseTabsFragment extends Fragment {
tabName = NewPipe.getNameOfService(((Tab.ChannelTab) tab)
.getChannelServiceId()) + "/" + tab.getTabName(requireContext());
break;
+ case PLAYLIST:
+ final int serviceId = ((Tab.PlaylistTab) tab).getPlaylistServiceId();
+ final String serviceName = serviceId == -1
+ ? getString(R.string.local)
+ : NewPipe.getNameOfService(serviceId);
+ tabName = serviceName + "/" + tab.getTabName(requireContext());
+ break;
default:
tabName = tab.getTabName(requireContext());
break;
diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java
index d06b4b14e..b0511cd11 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java
@@ -11,6 +11,7 @@ import com.grack.nanojson.JsonObject;
import com.grack.nanojson.JsonSink;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.database.LocalItem.LocalItemType;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
@@ -18,9 +19,11 @@ import org.schabi.newpipe.fragments.BlankFragment;
import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
import org.schabi.newpipe.fragments.list.kiosk.DefaultKioskFragment;
import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
+import org.schabi.newpipe.fragments.list.playlist.PlaylistFragment;
import org.schabi.newpipe.local.bookmark.BookmarkFragment;
import org.schabi.newpipe.local.feed.FeedFragment;
import org.schabi.newpipe.local.history.StatisticsPlaylistFragment;
+import org.schabi.newpipe.local.playlist.LocalPlaylistFragment;
import org.schabi.newpipe.local.subscription.SubscriptionFragment;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
@@ -33,7 +36,8 @@ import java.util.Objects;
public abstract class Tab {
private static final String JSON_TAB_ID_KEY = "tab_id";
- Tab() { }
+ Tab() {
+ }
Tab(@NonNull final JsonObject jsonObject) {
readDataFromJson(jsonObject);
@@ -83,6 +87,8 @@ public abstract class Tab {
return new KioskTab(jsonObject);
case CHANNEL:
return new ChannelTab(jsonObject);
+ case PLAYLIST:
+ return new PlaylistTab(jsonObject);
}
}
@@ -147,7 +153,8 @@ public abstract class Tab {
BOOKMARKS(new BookmarksTab()),
HISTORY(new HistoryTab()),
KIOSK(new KioskTab()),
- CHANNEL(new ChannelTab());
+ CHANNEL(new ChannelTab()),
+ PLAYLIST(new PlaylistTab());
private Tab tab;
@@ -482,4 +489,123 @@ public abstract class Tab {
return kioskId;
}
}
+
+ public static class PlaylistTab extends Tab {
+ public static final int ID = 8;
+ private static final String JSON_PLAYLIST_SERVICE_ID_KEY = "playlist_service_id";
+ private static final String JSON_PLAYLIST_URL_KEY = "playlist_url";
+ private static final String JSON_PLAYLIST_NAME_KEY = "playlist_name";
+ private static final String JSON_PLAYLIST_ID_KEY = "playlist_id";
+ private static final String JSON_PLAYLIST_TYPE_KEY = "playlist_type";
+ private int playlistServiceId;
+ private String playlistUrl;
+ private String playlistName;
+ private long playlistId;
+ private LocalItemType playlistType;
+
+ private PlaylistTab() {
+ this(-1, "");
+ }
+
+ public PlaylistTab(final long playlistId, final String playlistName) {
+ this.playlistName = playlistName;
+ this.playlistId = playlistId;
+ this.playlistType = LocalItemType.PLAYLIST_LOCAL_ITEM;
+ this.playlistServiceId = -1;
+ this.playlistUrl = "";
+ }
+
+ public PlaylistTab(final int playlistServiceId, final String playlistUrl,
+ final String playlistName) {
+ this.playlistServiceId = playlistServiceId;
+ this.playlistUrl = playlistUrl;
+ this.playlistName = playlistName;
+ this.playlistType = LocalItemType.PLAYLIST_REMOTE_ITEM;
+ this.playlistId = -1;
+ }
+
+ public PlaylistTab(final JsonObject jsonObject) {
+ super(jsonObject);
+ }
+
+ @Override
+ public int getTabId() {
+ return ID;
+ }
+
+ @Override
+ public String getTabName(final Context context) {
+ return playlistName;
+ }
+
+ @DrawableRes
+ @Override
+ public int getTabIconRes(final Context context) {
+ return ThemeHelper.resolveResourceIdFromAttr(context, R.attr.ic_bookmark);
+ }
+
+ @Override
+ public Fragment getFragment(final Context context) {
+ if (playlistType == LocalItemType.PLAYLIST_LOCAL_ITEM) {
+ return LocalPlaylistFragment.getInstance(playlistId, playlistName);
+
+ } else { // playlistType == LocalItemType.PLAYLIST_REMOTE_ITEM
+ return PlaylistFragment.getInstance(playlistServiceId, playlistUrl, playlistName);
+ }
+ }
+
+ @Override
+ protected void writeDataToJson(final JsonSink writerSink) {
+ writerSink.value(JSON_PLAYLIST_SERVICE_ID_KEY, playlistServiceId)
+ .value(JSON_PLAYLIST_URL_KEY, playlistUrl)
+ .value(JSON_PLAYLIST_NAME_KEY, playlistName)
+ .value(JSON_PLAYLIST_ID_KEY, playlistId)
+ .value(JSON_PLAYLIST_TYPE_KEY, playlistType.toString());
+ }
+
+ @Override
+ protected void readDataFromJson(final JsonObject jsonObject) {
+ playlistServiceId = jsonObject.getInt(JSON_PLAYLIST_SERVICE_ID_KEY, -1);
+ playlistUrl = jsonObject.getString(JSON_PLAYLIST_URL_KEY, "");
+ playlistName = jsonObject.getString(JSON_PLAYLIST_NAME_KEY, "");
+ playlistId = jsonObject.getInt(JSON_PLAYLIST_ID_KEY, -1);
+ playlistType = LocalItemType.valueOf(
+ jsonObject.getString(JSON_PLAYLIST_TYPE_KEY,
+ LocalItemType.PLAYLIST_LOCAL_ITEM.toString())
+ );
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (!(super.equals(obj)
+ && Objects.equals(playlistType, ((PlaylistTab) obj).playlistType)
+ && Objects.equals(playlistName, ((PlaylistTab) obj).playlistName))) {
+ return false; // base objects are different
+ }
+
+ return (playlistId == ((PlaylistTab) obj).playlistId) // local
+ || (playlistServiceId == ((PlaylistTab) obj).playlistServiceId // remote
+ && Objects.equals(playlistUrl, ((PlaylistTab) obj).playlistUrl));
+ }
+
+ public int getPlaylistServiceId() {
+ return playlistServiceId;
+ }
+
+ public String getPlaylistUrl() {
+ return playlistUrl;
+ }
+
+ public String getPlaylistName() {
+ return playlistName;
+ }
+
+ public long getPlaylistId() {
+ return playlistId;
+ }
+
+ public LocalItemType getPlaylistType() {
+ return playlistType;
+ }
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
index 96f78ac0e..dcd751e81 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java
@@ -43,7 +43,8 @@ public class DataReader {
return readBuffer[readOffset++] & 0xFF;
}
- public long skipBytes(long amount) throws IOException {
+ public long skipBytes(final long byteAmount) throws IOException {
+ long amount = byteAmount;
if (readCount < 0) {
return 0;
} else if (readCount == 0) {
@@ -90,7 +91,10 @@ public class DataReader {
return read(buffer, 0, buffer.length);
}
- public int read(final byte[] buffer, int offset, int count) throws IOException {
+ public int read(final byte[] buffer, final int off, final int c) throws IOException {
+ int offset = off;
+ int count = c;
+
if (readCount < 0) {
return -1;
}
diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
index eb208280e..2baf8fe55 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java
@@ -464,16 +464,16 @@ public class Mp4FromDashWriter {
}
private void initChunkTables(final TablesInfo tables, final int firstCount,
- final int succesiveCount) {
+ final int successiveCount) {
// tables.stsz holds amount of samples of the track (total)
int totalSamples = (tables.stsz - firstCount);
- float chunkAmount = totalSamples / (float) succesiveCount;
+ float chunkAmount = totalSamples / (float) successiveCount;
int remainChunkOffset = (int) Math.ceil(chunkAmount);
boolean remain = remainChunkOffset != (int) chunkAmount;
int index = 0;
tables.stsc = 1;
- if (firstCount != succesiveCount) {
+ if (firstCount != successiveCount) {
tables.stsc++;
}
if (remain) {
@@ -488,15 +488,15 @@ public class Mp4FromDashWriter {
tables.stscBEntries[index++] = firstCount;
tables.stscBEntries[index++] = 1;
- if (firstCount != succesiveCount) {
+ if (firstCount != successiveCount) {
tables.stscBEntries[index++] = 2;
- tables.stscBEntries[index++] = succesiveCount;
+ tables.stscBEntries[index++] = successiveCount;
tables.stscBEntries[index++] = 1;
}
if (remain) {
tables.stscBEntries[index++] = remainChunkOffset + 1;
- tables.stscBEntries[index++] = totalSamples % succesiveCount;
+ tables.stscBEntries[index++] = totalSamples % successiveCount;
tables.stscBEntries[index] = 1;
}
}
@@ -640,19 +640,20 @@ public class Mp4FromDashWriter {
return size;
}
- private byte[] makeMdat(long refSize, final boolean is64) {
+ private byte[] makeMdat(final long refSize, final boolean is64) {
+ long size = refSize;
if (is64) {
- refSize += 16;
+ size += 16;
} else {
- refSize += 8;
+ size += 8;
}
ByteBuffer buffer = ByteBuffer.allocate(is64 ? 16 : 8)
- .putInt(is64 ? 0x01 : (int) refSize)
+ .putInt(is64 ? 0x01 : (int) size)
.putInt(0x6D646174); // mdat
if (is64) {
- buffer.putLong(refSize);
+ buffer.putLong(size);
}
return buffer.array();
@@ -717,18 +718,6 @@ public class Mp4FromDashWriter {
makeTrak(i, durations[i], defaultMediaTime[i], tablesInfo[i], is64);
}
- // udta/meta/ilst/©too
- auxWrite(new byte[]{
- 0x00, 0x00, 0x00, 0x5C, 0x75, 0x64, 0x74, 0x61, 0x00, 0x00, 0x00, 0x54, 0x6D, 0x65,
- 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x68, 0x64, 0x6C, 0x72,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x64, 0x69, 0x72, 0x61, 0x70,
- 0x70, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x27, 0x69, 0x6C, 0x73, 0x74, 0x00, 0x00, 0x00,
- 0x1F, (byte) 0xA9, 0x74, 0x6F, 0x6F, 0x00, 0x00, 0x00, 0x17, 0x64, 0x61, 0x74, 0x61,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65 // "NewPipe" binary string
- });
-
return lengthFor(start);
}
@@ -850,20 +839,10 @@ public class Mp4FromDashWriter {
private byte[] makeHdlr(final Hdlr hdlr) {
ByteBuffer buffer = ByteBuffer.wrap(new byte[]{
- 0x00, 0x00, 0x00, 0x77, 0x68, 0x64, 0x6C, 0x72, // hdlr
+ 0x00, 0x00, 0x00, 0x21, 0x68, 0x64, 0x6C, 0x72, // hdlr
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // binary string
- // "ISO Media file created in NewPipe (
- // A libre lightweight streaming frontend for Android)."
- 0x49, 0x53, 0x4F, 0x20, 0x4D, 0x65, 0x64, 0x69, 0x61, 0x20, 0x66, 0x69, 0x6C, 0x65,
- 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x20, 0x4E, 0x65,
- 0x77, 0x50, 0x69, 0x70, 0x65, 0x20, 0x28, 0x41, 0x20, 0x6C, 0x69, 0x62, 0x72, 0x65,
- 0x20, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73,
- 0x74, 0x72, 0x65, 0x61, 0x6D, 0x69, 0x6E, 0x67,
- 0x20, 0x66, 0x72, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20,
- 0x41, 0x6E,
- 0x64, 0x72, 0x6F, 0x69, 0x64, 0x29, 0x2E
+ 0x00// null string character
});
buffer.position(12);
@@ -899,7 +878,7 @@ public class Mp4FromDashWriter {
* characteristics of sample groups. The descriptive information is any other
* information needed to define or characterize the sample group.
*
- * ¿is replicabled this box?
+ * ¿is replicable this box?
* NO due lacks of documentation about this box but...
* most of m4a encoders and ffmpeg uses this box with dummy values (same values)
*/
diff --git a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java
index e24464dc0..00a29c7ab 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java
@@ -274,30 +274,15 @@ public class OggFromWebMWriter implements Closeable {
if ("A_OPUS".equals(webmTrack.codecId)) {
return new byte[]{
0x4F, 0x70, 0x75, 0x73, 0x54, 0x61, 0x67, 0x73, // "OpusTags" binary string
- 0x07, 0x00, 0x00, 0x00, // writing application string size
- 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string
+ 0x00, 0x00, 0x00, 0x00, // writing application string size (not present)
0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags)
};
} else if ("A_VORBIS".equals(webmTrack.codecId)) {
return new byte[]{
- 0x03, // ????????
+ 0x03, // ¿¿¿???
0x76, 0x6f, 0x72, 0x62, 0x69, 0x73, // "vorbis" binary string
- 0x07, 0x00, 0x00, 0x00, // writting application string size
- 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string
- 0x01, 0x00, 0x00, 0x00, // additional tags count (zero means no tags)
-
- /*
- // whole file duration (not implemented)
- 0x44,// tag string size
- 0x55, 0x52, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x3D, 0x30,
- 0x30, 0x3A, 0x30, 0x30, 0x3A, 0x30, 0x30, 0x2E, 0x30,
- 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
- */
- 0x0F, // tag string size
- 0x00, 0x00, 0x00, 0x45, 0x4E, 0x43, 0x4F,
- 0x44, 0x45, 0x52, 0x3D, // "ENCODER=" binary string
- 0x4E, 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ????????
+ 0x00, 0x00, 0x00, 0x00, // writing application string size (not present)
+ 0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags)
};
}
@@ -377,7 +362,7 @@ public class OggFromWebMWriter implements Closeable {
return addPacketSegment(block.dataSize);
}
- private boolean addPacketSegment(int size) {
+ private boolean addPacketSegment(final int size) {
if (size > 65025) {
throw new UnsupportedOperationException("page size cannot be larger than 65025");
}
@@ -396,8 +381,8 @@ public class OggFromWebMWriter implements Closeable {
return false; // not enough space on the page
}
- for (; size > 0; size -= 255) {
- segmentTable[segmentTableSize++] = (byte) Math.min(size, 255);
+ for (int seg = size; seg > 0; seg -= 255) {
+ segmentTable[segmentTableSize++] = (byte) Math.min(seg, 255);
}
if (extra) {
@@ -419,12 +404,13 @@ public class OggFromWebMWriter implements Closeable {
}
}
- private int calcCrc32(int initialCrc, final byte[] buffer, final int size) {
+ private int calcCrc32(final int initialCrc, final byte[] buffer, final int size) {
+ int crc = initialCrc;
for (int i = 0; i < size; i++) {
- int reg = (initialCrc >>> 24) & 0xff;
- initialCrc = (initialCrc << 8) ^ crc32Table[reg ^ (buffer[i] & 0xff)];
+ int reg = (crc >>> 24) & 0xff;
+ crc = (crc << 8) ^ crc32Table[reg ^ (buffer[i] & 0xff)];
}
- return initialCrc;
+ return crc;
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java
index c3cd2a2e4..02b22965d 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java
@@ -148,31 +148,27 @@ public class WebMWriter implements Closeable {
0x11, 0x4d, (byte) 0x9b, 0x74, (byte) 0xbe,
0x4d, (byte) 0xbb, (byte) 0x8b,
0x53, (byte) 0xab, (byte) 0x84, 0x15, 0x49, (byte) 0xa9, 0x66, 0x53,
- (byte) 0xac, (byte) 0x81, /*info offset*/ 0x43,
+ (byte) 0xac, (byte) 0x81,
+ /*info offset*/ 0x43,
0x4d, (byte) 0xbb, (byte) 0x8b, 0x53, (byte) 0xab,
(byte) 0x84, 0x16, 0x54, (byte) 0xae, 0x6b, 0x53, (byte) 0xac, (byte) 0x81,
- /*tracks offset*/ 0x6a,
+ /*tracks offset*/ 0x56,
0x4d, (byte) 0xbb, (byte) 0x8e, 0x53, (byte) 0xab, (byte) 0x84, 0x1f,
- 0x43, (byte) 0xb6, 0x75, 0x53, (byte) 0xac, (byte) 0x84, /*cluster offset [2]*/ 0x00, 0x00, 0x00, 0x00,
+ 0x43, (byte) 0xb6, 0x75, 0x53, (byte) 0xac, (byte) 0x84,
+ /*cluster offset [2]*/ 0x00, 0x00, 0x00, 0x00,
0x4d, (byte) 0xbb, (byte) 0x8e, 0x53, (byte) 0xab, (byte) 0x84, 0x1c, 0x53,
- (byte) 0xbb, 0x6b, 0x53, (byte) 0xac, (byte) 0x84, /*cues offset [7]*/ 0x00, 0x00, 0x00, 0x00
+ (byte) 0xbb, 0x6b, 0x53, (byte) 0xac, (byte) 0x84,
+ /*cues offset [7]*/ 0x00, 0x00, 0x00, 0x00
});
/* info */
listBuffer.add(new byte[]{
- 0x15, 0x49, (byte) 0xa9, 0x66, (byte) 0xa2, 0x2a, (byte) 0xd7, (byte) 0xb1
+ 0x15, 0x49, (byte) 0xa9, 0x66, (byte) 0x8e, 0x2a, (byte) 0xd7, (byte) 0xb1
});
- listBuffer.add(encode(DEFAULT_TIMECODE_SCALE, true)); // this value MUST NOT exceed 4 bytes
+ // the segment duration MUST NOT exceed 4 bytes
+ listBuffer.add(encode(DEFAULT_TIMECODE_SCALE, true));
listBuffer.add(new byte[]{0x44, (byte) 0x89, (byte) 0x84,
0x00, 0x00, 0x00, 0x00, // info.duration
-
- /* MuxingApp */
- 0x4d, (byte) 0x80, (byte) 0x87, 0x4E,
- 0x65, 0x77, 0x50, 0x69, 0x70, 0x65, // "NewPipe" binary string
-
- /* WritingApp */
- 0x57, 0x41, (byte) 0x87, 0x4E,
- 0x65, 0x77, 0x50, 0x69, 0x70, 0x65// "NewPipe" binary string
});
/* tracks */
@@ -416,9 +412,10 @@ public class WebMWriter implements Closeable {
}
}
- private long makeCluster(final SharpStream stream, final long timecode, long offset,
+ private long makeCluster(final SharpStream stream, final long timecode, final long offsetStart,
final boolean create) throws IOException {
ClusterInfo cluster;
+ long offset = offsetStart;
if (offset > 0) {
// save the size of the previous cluster (maximum 256 MiB)
@@ -449,7 +446,7 @@ public class WebMWriter implements Closeable {
}
private void makeEBML(final SharpStream stream) throws IOException {
- // deafult values
+ // default values
dump(new byte[]{
0x1A, 0x45, (byte) 0xDF, (byte) 0xA3, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0x42, (byte) 0x86, (byte) 0x81, 0x01,
@@ -588,8 +585,10 @@ public class WebMWriter implements Closeable {
return lengthFor(buffer);
}
- private void makeEbmlVoid(final SharpStream out, int size, final boolean wipe)
+ private void makeEbmlVoid(final SharpStream out, final int amount, final boolean wipe)
throws IOException {
+ int size = amount;
+
/* ebml void */
outByteBuffer.putShort(0, (short) 0xec20);
outByteBuffer.putShort(2, (short) (size - 4));
diff --git a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
index cd5992fb4..9b8b2494e 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
@@ -33,6 +33,7 @@ import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
import org.schabi.newpipe.extractor.ListInfo;
import org.schabi.newpipe.extractor.NewPipe;
+import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.channel.ChannelInfo;
import org.schabi.newpipe.extractor.comments.CommentsInfo;
@@ -87,14 +88,13 @@ public final class ExtractorHelper {
final String searchString,
final List contentFilter,
final String sortFilter,
- final String pageUrl) {
+ final Page page) {
checkServiceId(serviceId);
return Single.fromCallable(() ->
SearchInfo.getMoreItems(NewPipe.getService(serviceId),
NewPipe.getService(serviceId)
.getSearchQHFactory()
- .fromQuery(searchString, contentFilter, sortFilter),
- pageUrl));
+ .fromQuery(searchString, contentFilter, sortFilter), page));
}
@@ -125,10 +125,10 @@ public final class ExtractorHelper {
}
public static Single getMoreChannelItems(final int serviceId, final String url,
- final String nextStreamsUrl) {
+ final Page nextPage) {
checkServiceId(serviceId);
return Single.fromCallable(() ->
- ChannelInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl));
+ ChannelInfo.getMoreItems(NewPipe.getService(serviceId), url, nextPage));
}
public static Single> getFeedInfoFallbackToChannelInfo(
@@ -157,10 +157,10 @@ public final class ExtractorHelper {
public static Single getMoreCommentItems(final int serviceId,
final CommentsInfo info,
- final String nextPageUrl) {
+ final Page nextPage) {
checkServiceId(serviceId);
return Single.fromCallable(() ->
- CommentsInfo.getMoreItems(NewPipe.getService(serviceId), info, nextPageUrl));
+ CommentsInfo.getMoreItems(NewPipe.getService(serviceId), info, nextPage));
}
public static Single getPlaylistInfo(final int serviceId, final String url,
@@ -172,10 +172,10 @@ public final class ExtractorHelper {
}
public static Single getMorePlaylistItems(final int serviceId, final String url,
- final String nextStreamsUrl) {
+ final Page nextPage) {
checkServiceId(serviceId);
return Single.fromCallable(() ->
- PlaylistInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl));
+ PlaylistInfo.getMoreItems(NewPipe.getService(serviceId), url, nextPage));
}
public static Single getKioskInfo(final int serviceId, final String url,
@@ -184,12 +184,10 @@ public final class ExtractorHelper {
Single.fromCallable(() -> KioskInfo.getInfo(NewPipe.getService(serviceId), url)));
}
- public static Single getMoreKioskItems(final int serviceId,
- final String url,
- final String nextStreamsUrl) {
+ public static Single getMoreKioskItems(final int serviceId, final String url,
+ final Page nextPage) {
return Single.fromCallable(() ->
- KioskInfo.getMoreItems(NewPipe.getService(serviceId),
- url, nextStreamsUrl));
+ KioskInfo.getMoreItems(NewPipe.getService(serviceId), url, nextPage));
}
/*//////////////////////////////////////////////////////////////////////////
@@ -240,8 +238,8 @@ public final class ExtractorHelper {
* @param infoType the {@link InfoItem.InfoType} of the item
* @return a {@link Single} that loads the item
*/
- public static Maybe loadFromCache(final int serviceId, final String url,
- final InfoItem.InfoType infoType) {
+ private static Maybe loadFromCache(final int serviceId, final String url,
+ final InfoItem.InfoType infoType) {
checkServiceId(serviceId);
return Maybe.defer(() -> {
//noinspection unchecked
diff --git a/app/src/main/java/org/schabi/newpipe/util/ShareUtils.java b/app/src/main/java/org/schabi/newpipe/util/ShareUtils.java
index 0bf731a98..0ec2d571d 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ShareUtils.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ShareUtils.java
@@ -1,10 +1,13 @@
package org.schabi.newpipe.util;
+import android.content.ClipData;
+import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
+import android.widget.Toast;
import org.schabi.newpipe.R;
@@ -78,4 +81,27 @@ public final class ShareUtils {
context.startActivity(Intent.createChooser(
intent, context.getString(R.string.share_dialog_title)));
}
+
+ /**
+ * Copy the text to clipboard, and indicate to the user whether the operation was completed
+ * successfully using a Toast.
+ *
+ * @param context the context to use
+ * @param text the text to copy
+ */
+ public static void copyToClipboard(final Context context, final String text) {
+ final ClipboardManager clipboardManager =
+ (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
+
+ if (clipboardManager == null) {
+ Toast.makeText(context,
+ R.string.permission_denied,
+ Toast.LENGTH_LONG).show();
+ return;
+ }
+
+ clipboardManager.setPrimaryClip(ClipData.newPlainText(null, text));
+ Toast.makeText(context, R.string.msg_copied, Toast.LENGTH_SHORT)
+ .show();
+ }
}
diff --git a/app/src/main/res/layout-land/activity_player_queue_control.xml b/app/src/main/res/layout-land/activity_player_queue_control.xml
index c852da65e..84a29e0c8 100644
--- a/app/src/main/res/layout-land/activity_player_queue_control.xml
+++ b/app/src/main/res/layout-land/activity_player_queue_control.xml
@@ -111,7 +111,7 @@
tools:ignore="RtlHardcoded">
@@ -161,7 +161,7 @@
android:visibility="invisible"/>
@@ -185,8 +185,8 @@
android:orientation="horizontal"
tools:ignore="RtlHardcoded">
-
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:clickable="true"
+ android:focusable="true"
+ android:scaleType="fitXY"
+ android:src="@drawable/exo_controls_previous"
+ android:tint="?attr/colorAccent"
+ tools:ignore="ContentDescription" />
-
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:clickable="true"
+ android:focusable="true"
+ android:scaleType="fitXY"
+ android:src="@drawable/exo_controls_next"
+ android:tint="?attr/colorAccent"
+ tools:ignore="ContentDescription" />
diff --git a/app/src/main/res/layout/activity_error.xml b/app/src/main/res/layout/activity_error.xml
index c47077c73..12237f918 100644
--- a/app/src/main/res/layout/activity_error.xml
+++ b/app/src/main/res/layout/activity_error.xml
@@ -118,11 +118,31 @@
android:inputType="" />
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_player_queue_control.xml b/app/src/main/res/layout/activity_player_queue_control.xml
index 71a93506f..c5b8e5743 100644
--- a/app/src/main/res/layout/activity_player_queue_control.xml
+++ b/app/src/main/res/layout/activity_player_queue_control.xml
@@ -55,7 +55,6 @@
@@ -169,22 +168,6 @@
android:orientation="horizontal"
tools:ignore="RtlHardcoded">
-
-
+
+
+
+
+
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_feed_group_create.xml b/app/src/main/res/layout/dialog_feed_group_create.xml
index 2bd0e1141..17893fecc 100644
--- a/app/src/main/res/layout/dialog_feed_group_create.xml
+++ b/app/src/main/res/layout/dialog_feed_group_create.xml
@@ -102,42 +102,56 @@
android:id="@+id/subscriptions_selector"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- android:visibility="gone">
+ android:orientation="vertical">
-
+ android:layout_height="?attr/actionBarSize"
+ android:gravity="center_vertical"
+ android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
+ app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar"
+ app:titleTextAppearance="@style/Toolbar.Title">
-
+ android:orientation="vertical"
+ android:gravity="center_vertical">
-
-
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml
index 651229f10..9412e8c43 100644
--- a/app/src/main/res/layout/fragment_search.xml
+++ b/app/src/main/res/layout/fragment_search.xml
@@ -6,13 +6,25 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
+
+ tools:listitem="@layout/list_stream_item" />
@@ -68,7 +81,7 @@
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="LinearLayoutManager"
- tools:listitem="@layout/item_search_suggestion"/>
+ tools:listitem="@layout/item_search_suggestion" />
diff --git a/app/src/main/res/layout/select_playlist_fragment.xml b/app/src/main/res/layout/select_playlist_fragment.xml
new file mode 100644
index 000000000..ca0d49e32
--- /dev/null
+++ b/app/src/main/res/layout/select_playlist_fragment.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/toolbar_search_layout.xml b/app/src/main/res/layout/toolbar_search_layout.xml
index 34e659ece..9a7d56a6e 100644
--- a/app/src/main/res/layout/toolbar_search_layout.xml
+++ b/app/src/main/res/layout/toolbar_search_layout.xml
@@ -1,10 +1,11 @@
-
+ tools:background="?attr/colorPrimary">
diff --git a/app/src/main/res/menu/menu_feed_group_dialog.xml b/app/src/main/res/menu/menu_feed_group_dialog.xml
new file mode 100644
index 000000000..af9be1c65
--- /dev/null
+++ b/app/src/main/res/menu/menu_feed_group_dialog.xml
@@ -0,0 +1,19 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_play_queue.xml b/app/src/main/res/menu/menu_play_queue.xml
index cdbc43e80..cab2e8df5 100644
--- a/app/src/main/res/menu/menu_play_queue.xml
+++ b/app/src/main/res/menu/menu_play_queue.xml
@@ -10,6 +10,14 @@
android:visible="true"
app:showAsAction="ifRoom"/>
+
+
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ar-rLY/strings.xml b/app/src/main/res/values-ar-rLY/strings.xml
new file mode 100644
index 000000000..d0c5e2605
--- /dev/null
+++ b/app/src/main/res/values-ar-rLY/strings.xml
@@ -0,0 +1,21 @@
+
+
+ استخدم مشغل فيديو خارجي
+ دوران
+ اختر المتصفح
+ مشاركة مع
+ اعدادات
+ بحث
+ تنزيل ملف البث
+ تحميل
+ مشاركه
+ فتح في نافدة منبثقة
+ افتح في المتصفح
+ إلغاء
+ تثبيت
+ لم يتم العثور على مشغل بث (يمكنك تثبيت VLC لتشغيله).
+ لم يتم العثور على مشغل بث. يرجى تثبيت VLC؟
+ تم النشر في %1$s
+ %1$s من المشاهدات
+ انقر على \"بحث\" للبدء
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 5d2fe413a..2d007a043 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -233,7 +233,7 @@
التفاصيل
الإعدادات الصوتية
تشغيل هنا
- بدأ التشغيل في نافذة منبثقة جديدة
+ بدأ التشغيل في نافذة منبثقة
تحدي الكابتشا
ضغط مطول للإدراج الى قائمة الانتظار
@@ -440,7 +440,7 @@
الشبكة
تلقائي
تبديل طريقة العرض
- يتوفر تحديث ل newpipe!
+ تحديث NewPipe متاح!
اضغط لتنزيل
انتهى
ريثما
@@ -549,7 +549,7 @@
عند استخدام مشغل الخلفية، سيتم عرض صورة العرض للفيديو على شاشة القفل
تنظيف تاريخ التحميل
حذف الملفات التي تم تنزيلها
- التنزيلات %1$s المحذوفة
+ التنزيلات %1$d المحذوفة
إعطاء إذن لعرضه على التطبيقات الأخرى
لغة التطبيق
النظام الافتراضي
diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml
index 247c76b3f..213c6e884 100644
--- a/app/src/main/res/values-b+ast/strings.xml
+++ b/app/src/main/res/values-b+ast/strings.xml
@@ -58,7 +58,6 @@
Mil mill.
Precísase esti permisu
\np\'abrir nel mou ventanu
- reCAPTCHA
Retu de reCAPTCHA
Solicitóse\'l retu de reCAPTCHA
En segundu planu
@@ -130,7 +129,7 @@
Novedaes
[Desconozse]
Reproducir en segundu planu
- Reproducir nun ventanu
+
Donación
Donar
@@ -210,7 +209,7 @@
Nun hai comentarios
Llimpieza de datos
Amosar comentarios
-
+ Desactiva esta opción p\'anubrir los comentarios
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.
@@ -304,4 +303,8 @@
Llipióse la caché de metadatos
Desanicia los datos de les páxines web na caché
Llimpiar los metadatos de la caché
+ Llimpióse la caché d\'imáxenes
+ Amuésase una miniatura de videu na pantalla de bloquéu al usar el reproductor en segundu planu
+ ¿Instalar l\'aplicación Kore\?
+ Reproduz un videu cuando s\'invoca a NewPipe dende otra aplicación
\ No newline at end of file
diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
index fa6f9fe25..40712041e 100644
--- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml
@@ -71,7 +71,7 @@
无法得知订阅人数
发布新版本时,通知我升级应用
网格
- 新版 NewPipe 发布!
+ NewPipe有更新!
服务器不接受 接收 multi-threaded 下载, 以 @string/msg_threads = 1 重试
自动播放
清除数据
@@ -108,7 +108,6 @@
点击了解详情
请稍候…
复制至剪贴板
- reCAPTCHA验证码
悬浮窗播放
关于NewPipe
设置
@@ -282,10 +281,10 @@
长按队列
[未知]
添加到后台部分队列
- 添加至新悬浮窗列表
+ 加入悬浮窗队列
开始在此处开始播放
开始后台播放
- 开始在新悬浮窗中播放
+ 开始在悬浮窗中播放
捐赠
NewPipe 是由志愿者花费时间为您带来最佳体验开发的。回馈帮助开发人员在享用一杯咖啡的同时,让 NewPipe 变得更好。
反馈
@@ -525,7 +524,7 @@
在后台播放时,锁屏上将会显示视频的缩略图
清除下载历史记录
删除已下载的文件
- 已删除 %1$s 下载
+ 已删除 %1$d 下载
授予在其他应用上层显示的权限
Newpipe应用语言
[系统默认]
@@ -535,7 +534,7 @@
- %d秒
- 由于ExoPlayer的限制,搜寻间隔设置为%d秒
+ 由于ExoPlayer的限制,搜寻间隔设置为%d秒
静音
取消静音
帮助
@@ -604,4 +603,5 @@
来自服务的原始文本将在流项目中可见
在项目上显示原始时间
YouTube受限模式
+ 仅显示未分组订阅
\ No newline at end of file
diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml
index 6ad5e7ad0..0299457c3 100644
--- a/app/src/main/res/values-bn-rBD/strings.xml
+++ b/app/src/main/res/values-bn-rBD/strings.xml
@@ -185,8 +185,15 @@
থাম্বনেইল লোড করুন
থাম্বনেইল প্রদর্শন বন্ধ করার মাধ্যমে, ডাটা এবং মেমোরি সংরক্ষণ করুন। অপশনটি পরিবর্তনে ইন-মেমোরি এবং অন-ডিস্ক ইমেজ ক্যাশ উভয়ই মুছে যাবে।
ছবির ক্যাশ মুছে ফেলা হয়েছে
- ওয়েবপৃষ্ঠার সকল ক্যাশড তথ্য মুছুন
- ক্যাশড মেটাডেটা মুছুন
+ সব ক্যাশড ওয়েবপেজ ডেটা মুছে ফেলো
+ ক্যাশ করা মেটাডেটা মুছো
মেটাডেটা ক্যাশ মুছে ফেলা হয়েছে
পরবর্তী স্ট্রিম স্বয়ংক্রিয়ংভাবে সংযোজন করুন
+ প্লেয়ারের নিয়ন্ত্রণ সংকেত
+ প্লেয়ারের উজ্জ্বলতা নিয়ন্ত্রণ করতে সংকেত ব্যবহার করো
+ উজ্জ্বলতার নিয়ন্ত্রণ সংকেত
+ প্লেয়ারের ভলিউম নিয়ন্ত্রণ করতে সংকেত ব্যবহার করো
+ ভলিউম সংকেত নিয়ন্ত্রণ
+ সম্পূর্ণ
+ তালিকা
\ No newline at end of file
diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml
new file mode 100644
index 000000000..49993d209
--- /dev/null
+++ b/app/src/main/res/values-bn-rIN/strings.xml
@@ -0,0 +1,332 @@
+
+
+ ডাউনলোড পজ করুন
+ ডাউনলোড শুরু করুন
+ ডাউনলোড করা ফাইলগুলো ডিলিট করুন
+ সম্পূর্ণ
+ তালিকা
+ ইতিহাস
+ ওয়েব সাইট
+ ওয়েব সাইট খুলুন
+ সেটিংস
+ reCAPTCHA চ্যালেঞ্জ অনুরোধ করা হয়েছে
+ reCAPTCHA চ্যালেঞ্জ
+ এই অনুমতিটি
+\nপপআপ মোডে খুলতে প্রয়োজন
+ ক্লিপবোর্ডে অনুলিপি করা হয়েছে
+ অনুগ্রহপূর্বক অপেক্ষা করুন…
+ বিস্তারিত জানার জন্য আলতো চাপ
+ NewPipe ডাউনলোড হচ্ছে
+ বিকৃত URL অথবা ইন্টারনেট নেই
+ ফাইল ইতিমধ্যেই বিদ্যমান
+ সার্ভার অসমর্থিত
+ ত্রুটি
+ থ্রেড
+ ফাইলের নাম
+ ঠিক আছে
+ নতুন মিশন
+ নাম পরিবর্তন করুন
+ চেকসাম
+ ডিলেট
+ প্রদর্শন
+ বিরতি
+ শুরু
+ স্টোরেজ অ্যাক্সেস করার অনুমতি অস্বীকার করা হয়েছে
+ অডিও
+ ভিডিও
+ \'%1$s\' ডাউনলোড ডিরেক্টরি তৈরি করতে পারছে না
+ ব্যবহারকারীর প্রতিবেদন
+ একটি ত্রুটি রিপোর্ট করো
+ (পরীক্ষামূলক) গোপনীয়তা বর্ধিত করতে টর এর মাধ্যমে ডাউনলোড ট্রাফিক জোরপুর্বক পাঠাও (ভিডিওগুলি স্ট্রিমিং এ সমর্থিত নয়)।
+ টর ব্যবহার করুন
+ অপছন্দ হয়েছে
+ পছন্দ হয়েছে
+ আপলোডারের ইউজারপিক থাম্বনেইল
+ ভিডিও প্রাকদর্শন, সময়ঃ
+ ভিডিও প্রাকদর্শন থাম্বনেইল
+ বর্ণনা:
+ আপনার মন্তব্য (ইংরেজিতে):
+ কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ:\\nআইপি পরিসর:
+ কি হয়েছিল:
+ তথ্য:
+ প্রতিবেদন
+ দুঃখিত, কিছু ত্রুটি ঘটেছে।
+ মেইলের মাধ্যমে ত্রুটি প্রতিবেদন করুন
+ দুঃখিত, এটা ঘটা উচিত ছিল না।
+ অ্যাপ / UI ক্র্যাশ করেছে
+ চিত্র লোড করা যায়নি
+ কোনও স্ট্রিম পাওয়া যায়নি
+ এটি একটি লাইভ স্ট্রিম। যা এখনও সমর্থিত নয়
+ ডাউনলোড মেনু সেটআপ করা যায়নি
+ কন্টেন্ট উপলব্ধ নয়
+ ওয়েবসাইট সম্পুর্নভাবে বিশ্লেষন করা যায়নি
+ ওয়েবসাইট বিশ্লেষন করা যায়নি
+ ভিডিও URL স্বাক্ষর ডিক্রিপ্ট করা যায়নি
+ সব থাম্বনেইল লোড করা যায়নি
+ নেটওয়ার্ক ত্রুটি
+ ত্রুটি
+ [অজানা]
+ একবার মাত্র
+ সবসময়
+ আকার পরিবর্তন
+ পরিষ্কার
+ রিফ্রেশ
+ ফিল্টার
+ নিস্ক্রীয়
+ পরবর্তীতে
+ হ্যাঁ
+ প্লেলিস্ট
+ চ্যানেল
+ সবগুলি
+ ত্রুটি প্রতিবেদন
+ ডাউনলোডগুলি
+ ডাউনলোডগুলি
+ লাইভ
+ ভিডিওটিকে বয়স সীমিত করা হয়েছে। প্রথমে সেটিংসে বয়স সীমাবদ্ধ ভিডিওগুলি সক্ষম করো।
+ বয়স সীমাবদ্ধ কন্টেন্ট দেখাও
+ কন্টেন্ট
+ চালাও
+ পপআপ মোডে চলছে
+ ব্যাকগ্রাউন্ডে চলছে
+ ডিবাগ
+ অন্যান্য
+ অ্যাপিয়ারেন্স
+ পপআপ
+ ইতিহাস
+ ভিডিও এবং অডিও
+ ব্যাবহার
+ প্লেয়ার
+ কন্টেন্ট এর জন্য পছন্দসই ভাষা
+ সেবা
+ URL সমর্থিত নয়
+ পরবর্তী এবং অনুরূপ ভিডিওগুলি দেখাও
+ পরবর্তী ভিডিও
+ ডাউনলোড
+ ইতিহাস
+ খোজ ইতিহাস
+ প্লেয়ারের নিয়ন্ত্রণ সংকেত
+ প্লেয়ারের উজ্জ্বলতা নিয়ন্ত্রণ করতে সংকেত ব্যবহার করো
+ উজ্জ্বলতার নিয়ন্ত্রণ সংকেত
+ প্লেয়ারের ভলিউম নিয়ন্ত্রণ করতে সংকেত ব্যবহার করো
+ ভলিউম সংকেত নিয়ন্ত্রণ
+ পরবর্তী স্ট্রিম স্বয়ংক্রিয়ংভাবে সংযোজন করুন
+ মেটাডেটা ক্যাশ মুছে ফেলা হয়েছে
+ সব ক্যাশড ওয়েবপেজ ডেটা মুছে ফেলো
+ ক্যাশ করা মেটাডেটা মুছো
+ ছবির ক্যাশ মুছে ফেলা হয়েছে
+ থাম্বনেইল প্রদর্শন বন্ধ করার মাধ্যমে, ডাটা এবং মেমোরি সংরক্ষণ করুন। অপশনটি পরিবর্তনে ইন-মেমোরি এবং অন-ডিস্ক ইমেজ ক্যাশ উভয়ই মুছে যাবে।
+ মতামত প্রদর্শন বন্ধ করতে অপশনটি বন্ধ করুন
+ মতামত প্রদর্শন করুন
+ থাম্বনেইল লোড করুন
+ দ্রুত-ফরওয়ার্ড/-পুনরায় সন্ধান সময়কাল
+ অনির্দিষ্ট সন্ধান প্লেয়ারকে আরো দ্রুত গতিতে সন্ধান করার সুবিধা দেয়, কিন্তু এটি সম্পূর্ণ নির্ভুল নাও হতে পারে ৷ ৫, ১৫ ও ২৫ সেকেন্ডের জন্য এটা কাজ করবে না ৷
+ দ্রুত টানা ব্যাবহার করুন
+ শেষ আকার এবং পপআপ সেট অবস্থান মনে রাখো
+ পপআপ আকার এবং অবস্থান মনে রাখো
+ কালো
+ অন্ধকার
+ উজ্জ্বল
+ থিম
+ পছন্দসই ভিডিও ফরম্যাট
+ ডিফল্ট অডিও ফরম্যাট
+ অডিও
+ ব্যাকগ্রাউন্ড প্লেয়ার ব্যবহার করার সময় লক স্ক্রিনে ভিডিও থাম্বনেইল প্রদর্শিত হবে
+ Kodi মিডিয়া সেন্টারে এর মাধ্যমে ভিডিও প্লে করার জন্য একটি বিকল্প প্রদর্শন কর
+ লক স্ক্রিনের ভিডিও থাম্বনেইল
+ দেখাও \"Kodi এর মাধ্যমে চালাও \" বিকল্প
+ হারানো কোর ইনস্টল করবেন\?
+ Kodi এর মাধ্যমে চালান
+ শুধুমাত্র কিছু ডিভাইস 2K/4K ভিডিও চালাতে পারে
+ উচ্চ রেজোল্যুশন দেখাও
+ ডিফল্ট পপআপ রেজোল্যুশন
+ ডিফল্ট রেজোল্যুশন
+ স্বয়ংক্রিয়ভাবে একটি ভিডিও প্লে করো যখন NewPipe অন্য অ্যাপ্লিকেশন থেকে চালু করা হয়
+ স্বয়ংক্রিয়ভাবে প্লে করো যখন অন্য অ্যাপ্লিকেশন থেকে চালু করা হয়
+ প্রভাব দৃশ্যমান করার জন্য ডাউনলোড ফোল্ডার পরিবর্তন করুন
+ অডিও ফাইলগুলির জন্য ডাউনলোডের ফোল্ডার নির্বাচন করুন
+ ডাউনলোড করা অডিও এখানে রাখা হয়
+ অডিও ডাউনলোড ফোল্ডার
+ ভিডিওগুলির জন্য ডাউনলোডের পাথ নির্বাচন কর
+ ডাউনলোড করা ভিডিওগুলো এখানে থাকে
+ ভিডিও ডাউনলোড করার ফোল্ডার
+ যুক্ত করুন
+ পপআপ
+ ব্যাকগ্রাউন্ড
+ নতুন ট্যাব
+ বুকমার্ককৃত প্লেলিস্টসমূহ
+ সাবস্ক্রিপশন
+ প্রধান
+ তথ্য দেখুন
+ সাবস্ক্রিপশন আপডেটে ব্যার্থ
+ সাবস্ক্রিপশন পরিবর্তন করা যায়নি
+ চ্যানেল থেকে আনসাবস্ক্রাইব্ড
+ আনসাবস্ক্রাইব
+ সাবস্ক্রাইব করা আছে
+ সাবস্ক্রাইব
+ পপআপ মোড
+ বহির্গত অডিও প্লেয়ার ব্যবহার করুন
+ কিছু কিছু রেজোলিউশনে অডিও বন্ধ করে দেয়
+ বাইরের ভিডিও প্লেয়ার ব্যবহার করুন
+ ঘূর্ণন
+ ব্রাউজার বাছাই করুন
+ শেয়ার করুন
+ আপনি কি বুঝিয়েছেনঃ %1$s\?
+ সেটিংস
+ খুঁজুন
+ স্ট্রিম ফাইল ডাউনলোড করুন
+ ডাউনলোউড
+ শেয়ার
+ পপ-আপ মোডে ওপেন করুন
+ ব্রাউজারে ওপেন করুন
+ বাদ দিন
+ ইনস্টল
+ কোন স্ট্রিম প্লেয়ার পাওয়া যায়নি (প্লে করতে VLC ইন্সটল করতে পারেন)।
+ কোন স্ট্রিম প্লেয়ার পাওয়া যায়নি। VLC ইনস্টল করতে চান\?
+ প্রকাশকাল %1$s
+ %1$s জন দেখেছে
+ অনুসন্ধান এ চাপ দিয়ে শুরু করুন
+ নতুন
+ নাম
+ নতুন কি
+ অ্যাপ এর ভাষা
+ বন্ধ করুন
+ ডাওন লোড ইতিহাস মুছুন
+ ডিভাইস এ স্পেস নেই
+ পাওয়া যায় নি
+ সার্ভার পাওয়া যায় নি
+ কোড
+ ডাউন লোড শেষ হয়েছে
+ ডাউন লোড হয় নি
+ পজ হয়েছে
+ ডাউন লোড করার জন্য চাপ দিন
+ অটো
+ গ্রিড
+ ক্যাপশন
+ জুম
+ ফিল
+ ফিট
+ কোন ক্যাপশন নেই
+ প্লে লিস্ট তৈরি হয়েছে
+ প্লে লিস্ট ডিলিট করতে চান\?
+ আন মিউট
+ মিউট
+ প্লে লিস্ট এ যুক্ত করুন
+ ডিলিট
+ সবসময় জিজ্ঞেস করুন
+ ভিডিও প্লেয়ার
+ ড্রয়ার বন্ধ করুন
+ ড্রয়ার খুলন
+ সাম্প্রতিক যুক্ত
+ নতুন এবং হট
+ প্রথম ৫০
+ মন্তব্যগুলি লোড করা যায় নি
+ একটি চ্যানেল পছন্দ করুন
+ চ্যানেল এর পাতা
+ খালি পাতা
+ আইটেম ডিলিট হয়েছে
+ নিউপাইপ এর লাইসেন্স
+ প্রাইভেসি পলিসি পড়ুন
+ নিউপাইপ এর প্রাইভেসি পলিসি
+ গিটহাব এ দেখুন
+ লাইসেন্স
+ ডাউনলোড
+ একটি আইটেম ডিলিট হয়েছে।
+ ডিসমিস
+ একটি ডিলিট করুন
+ কোন ভিডিও নেই
+ কোন রেজাল্ট নেই
+ কোন ফোল্ডার নেই
+ অবৈধ ইউ আর এল
+ বাহ্যিক স্টোরেজ নেই
+ সার্চ ইতিহাস ডিলিট হয়েছে।
+ নাম
+ নাম পরিবর্তন
+ ইতিহাস
+ লাইসেন্স পড়ুন
+ দান করুন
+ সব মুছে ফেলুন
+ তৈরি করুন
+ পুনরায় চেষ্টা করুন
+ সাহায্য
+ দেখার ইতিহাস মুছে গেছে।
+ সম্পূর্ণ দেখার ইতিহাস মুছে ফেলুন\?
+ দেখার ইতিহাস মুছে ফেলুন
+ ডাটা বেস এক্সপোর্ট করুন
+ অ্যাপ আপডেট এর সূচনা
+ নিউ পাইপ এর সূচনা
+ প্লেলিস্ট গুলি
+ ইন্সটান্স যোগ করুন
+ ফাইল
+ সব চালু করুন
+ ফাইল ডিলিট হয়েছে
+ অ্যালবাম গুলি
+ ভিডিও গুলি
+ চ্যানেলগুলি
+ আপডেট
+ পুনরায় চালু করুন
+ ডাটা মুছে ফেলুন
+ পুনরায় প্লে ব্যাক চালু করুন
+ ট্যাব পছন্দ করুন
+ আপনি কি ডিফল্ট এ ফিরতে চান\?
+ একটা এরর হয়েছেঃ %1$s
+ ফাইল সরে গেছে না হয় মুছে ফেলা হয়েছে
+ কোন অডিও স্ট্রিম পাওয়া যায় নি
+ প্লেয়ার এর এরর থেকে বেরিয়ে আসুন
+ স্ট্রিম টি চালানো গেল না
+ সার্চের ইতিহাস মোছা হয়
+ প্লে ব্যাক এর অবস্থান মোছা হয়েছে।
+ সমস্ত প্লে লিস্ট এর অবস্থান মুছবেন\?
+ সমস্ত প্লে লিস্ট এর অবস্থান মুছে ফেলুন
+ প্লে লিস্ট এর অবস্থান মুছে ফেলুন
+ মেন এ ফিরে যান
+ নিউ পাইপ এর নতুন ভার্সন এর সূচনা
+ ফিরে যান
+ শিল্পীরা
+ ইভেন্টগুলি
+ YouTube নিষিদ্ধ মোড
+ শুধুমাত্র HTTPS URL গুলি সাপোর্ট করে
+ বন্ধ করুন
+ কোন সীমা নেই
+ বুকমার্ক মুছুন
+ নতুন প্লে লিস্ট
+ অডিও সেটিং
+ বিবরণ
+ স্থানীয়
+ সবথেকে বেশি চালানো
+ শেষ চালানো
+ ইতিহাস মুছে ফেলা হয়েছে
+ ইতিহাস খালি
+ ইতিহাস বন্ধ রয়েছে
+ দেখা হয়েছে
+ খোজা হয়েছে
+ ফিরিয়ে দিন
+ যোগদান কারি গন
+ যোগদান
+ লাইসেন্স লোড করা যায় নি
+ নিউ পাইপ এর সম্বন্ধে
+ শব্দ ও নম্বর
+ হয়েছে
+ কোন মন্তব্য নেই
+ কোন সাবস্ক্রাইবার নেই
+ ডাউন লোড এর জন্য কোন স্ট্রিম নেই
+ ফাইল এর নাম খালি থাকতে পারে না
+ কোন ভিডিও
+ সমগ্র সার্চ ইতিহাস মুছবেন\?
+ সার্চ ইতিহাস মুছুন
+ ডাটাবেস আনুন
+ পপ-আপ এ খুলুন
+ পেছনে নিয়ে যান
+ অরিয়েন্টেশন বদলান
+ সেরা রেজুলিউসন
+ গান গুলি
+ ইন্সটান্স এর ইউ আর এল
+ আপনার পছন্দের পিয়ার টিউব ইন্সটান্স
+ পিয়ার টিউব এর ইন্সটান্স সমূহ
+ স্বয়ংক্রিয়
+ দেখা ভিডিও গুলির হিসেব
+ তালিকা তে পজিশন
+ শেষ প্লে ব্যাক পজিশন এ যান
+ সার্চ গুলি স্থানীয় ভাবে জমা করুন
+ সার্চ এর সময় সাজেশন দেখান
+ সার্চ সাজেশন
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml
new file mode 100644
index 000000000..c913207cc
--- /dev/null
+++ b/app/src/main/res/values-ckb/strings.xml
@@ -0,0 +1,616 @@
+
+
+ ئایا توانای بارکردن لاوازە؟ گەر وایە ئەوا بارکردنی خێرا تاقی بکەرەوە (دەتوانی بیگۆڕیت لە بەشی ڕێکخستنەکان لەڕێگای گرتەکردن لەم دوگمەیەی خوارەوە).
+\n
+\nئەم داوانامەیە دوو شێوازی بارکردنت بۆ پێشنیاز دەکات:
+\n- بارکردنی تەواوی کەناڵە بەشدارییەکانت، ئەمەیان خاوە بەڵام تەواوە.
+\n- تەرخانکردنی خزمەتگوزارییەکان ئەمەیان خێرایە بەڵام زۆر تەواو نییە.
+\n
+\nجیاوازی نێوان ئەم دووانە ئەوەیە کە خێراکە چەند زانیارییەکی وونە، وەکوو ماوەی هەر بڕگەیەک یان جۆرەکەی (ناتوانێت جیاوازی بکات لە نێوان ڤیدیۆی ڕاستەوخۆ و ئاسایی) لەوانەشە بڕگەی کەمتر باربکات.
+\n
+\nیوتیوب نموونەیە لەم خزمەتگوزارییە کە ڕێگەی خێرا بەکاردەبات بەهۆی پیشاندەری RSS.
+\n
+\nبۆیە هەڵژرادن بۆ خۆت دەگەڕێتەوە: زانیاری تەواو یان خێرا.
+ ئەم داوانامەیە سەرچاوە کراوەیە : دەتوانی بەکاریبهێنی، بیخوێنیتەوە و هاوبەشی پێبکەیت و بەرەوپێشی ببەیت. بەتایبەتی دەتوانی دابەشیبکەیتەوە یاخوود بگۆڕیت بەپێی مەرجەکانی GNU مۆڵەتنامەی گشتی وەک داوانامەیەکی بڵاوی خۆڕایی, بەهۆی وەشانی ٣ ی مۆڵەتنامە، یان هەر وەشانێک کە دوواتر.
+ چی:\\nداواکراو:\\nزمانی ناوەڕۆک:\\nخزمەتگوزاری:\\GMTnکات:\\nگورزە:\\nوەشان:\\nوەشانی سیستەم:
+ پڕۆژەی ئەپەکە زانیارییە تایبەتییەکانت بەوردی دەپارێزێ. هەروەها داوانامەکە هیچ زانایارییەکت بەبێ ئاگاداری تۆ بەکارنابات.
+\nسیاسەتی تایبەتی داوانامە بەوردی ڕوونکردنەوەت دەداتێ لەسەر ئەو زانیاریانەی وەریاندەگرێ و بەکاریاندەبات.
+ داگرتن لە بیرگەی دەرەکی ناکرێت. شوێنی بوخچەی داگرتنەکان دابنرێتەوە؟
+ ناچالاكی بكه بۆ ڕاگرتنی وێنۆچكهكان له باركردن و پاشهكهوتبوون لهسهر بیرگهی ئامێرهكهت, گۆڕینی ئهمه دهبێته هۆی سڕینهوهیان لهسهر بیرگهی مۆبایلهكهت.
+ مەبەستت ئەمەیە: %1$s\?
+ ماوەی نوێکاری
+ هێڵەکی
+ پاشکۆی خۆکاری پەخشێکی بەستراوە لەکاتی کارپێکردنی کۆتا پەخشدا
+ سنوری ڕیزبوونی داگرتنەکان
+ بیرگەی ناوەکیت پڕبووە
+ ژمارەی بەشداربووان نادیارە
+ ناتوانرێ لەسەر ئەو پەڕگەیە جێگیربکرێ
+ بازدەر هەڵبژێرە
+ ملیۆن
+ +١٠٠ ڤیدیۆ
+ کارپێکەر
+ هێنانەوە
+ سکاڵا لەسەر کێشە لەڕێگای ئیمێڵ
+ ناو
+ چارەسەرکردن شکستی هێنا
+ بچوکبوونەوە لەکاتی گۆڕینی داوانامە
+ پەڕەی نوێترینەکان
+ |(تاقیکاری) داگرتنی خێرا بەبەکارهێنانی Tor بۆ زیادکردنی تایبەتێتی (پشتگیری پەخشە ڕاستەوخۆکان ناکات) .
+ پەڕگەی ڤیدیۆ داگیراوەکان لێرەدا هەڵدەگیرێن
+ هەناردەکردنی مێژوو و بەشداربوون و لیستەکان
+ بردنەپێشی ناتەواوی خێرا وا لە کارپێکەرەکە داکات کە بەخێرایی شوێنەکە بگۆڕێت. بردنەپێشی ٥ یان ١٥ یان ٢٥ چرکەیی لەگەڵ ئەمەدا کارناکات.
+ سکاڵاکردن لەسەر نەگەیاندنی Rx ی پەسەندنەکرا لە دەرەوەی پارچە یان چالاکی لەدوای پوختەکردن
+ قەبارە دانانەوە
+ پیشاندانی ’دواتر’ و ڤیدیۆ ’هاوشێوەکان’
+ هێنانەپێش
+ پەڕە بنەڕەتییەکان بەکاردەبردرێن, ناتوانرێ پەڕە پاشەکەوتکراوەکان بخوێنرێنەوە
+ سڕینەوەی تەواوی مێژووی تەماشاکردن؟
+ سڕینەوەی مێژووی گەڕان
+ هەڵە
+ ئەمە لەسەر ڕێکخستنەکانی ئێستات جێگیردەبێت.
+ ئاگانامەکانی داوانامە
+ ئەم ئەپە لەلایەن چەند خۆبەخشێکەوە دروستکراوە کەکاتی خۆیان پێ بەخشیووە تاکو باشترین خزمەتگوزاریت پێشکەش بکەن. هیچ نەبێت بە کڕینی کوپێک قاوە یارمەتی گەشەپێدەرەکانمان بدە بۆ ئەوەی کاتی زیاتر تەرخان بکەین بۆ بەرەوپێشبردنی NewPipe.
+ بلیۆن
+ گەڕانی پێشنیارکراوەکان
+ خێراییەکان
+ پەڕگە سڕایەوە
+ کۆمەڵەی کەناڵەکان
+ ئەم دەسەڵاتە پێویستە بۆ
+\nکردنەوەی پەنجەرەی بچووک
+ پەڕگە بوونی هەیە
+ ڕاگیراوە
+ لە چاوەڕوانیدایە
+ هەناردەکرا
+ هەڵەدۆزی
+ پاشماوەی داتاکان سڕانەوە
+ کیۆسکی بنەڕەتی
+ باشترین پیشاندان
+
+ - %s بەشداربوو
+ - %s بەشداربوون
+
+ سڕینەوەی یەک دانە
+ پیشاندانی وردی بهرزتر
+ ئەرکی نوێ
+ لەڕیزدایە
+ دانانی ناوی نوێ
+ لەسەر مێژوو و بەشداربووەکانی ئێستات جێگیردەبێت
+ هیچ پەخشێ نەدۆزرایەوە
+ تەمەنت بۆ تەماشاکردنی ئەم ڤیدیۆیە ڕێپێنەدراوە.
+\n
+\nگەر دەتەوێت بیبینیت ئەوا ناوەڕۆکە ڕێپێنەدراوەکانی تەمەن لە ڕێکخستنەکان چالاک بکە.
+ سڕینەوەی مێژووی داگرتن
+ تەنها یەکجار
+ دۆخی قەدەغەکراوی یوتیوب
+ reCAPTCHA داواکاری
+ نوێکارییەکان
+ سکاڵا لەبەکاربەر
+ ئەم ڕاژەیە ناتوانێ چەندین داگرتن لەیەک کاتدا بکات
+ چالاککردنی دۆخی خێرا
+ بچوککردنەوە بۆ کارپێکەری پاشبنەما
+ پەخشی ڕاستەوخۆ پشتگیری ناکرێ لەئێستادا
+ کاتێ کارپێکەری پاشبنەما کاردەکات ئەوا وێنۆچکەی ڤیدیۆکە لە ڕوونما داخراوەکەدا نیشاندەدرێت
+ بهشداریت نەما له كهناڵ
+ ناتوانرێ ئەم پەخشە کارپێبکرێ
+ بیرهاتنهوهی شوێن و قهبارهی پهنجهرهی بچووک
+ گێڕانەوەی کارپێکەر بۆکاتی پێش کێشە
+ هیچیان
+ بەسوودە بۆ کاتی گۆڕینی هێڵ بۆ داتای مۆبایل, لەگەڵ ئەوەشدا زۆربەی داگرتنەکان ڕاناگرێت
+ ماڵپەڕ
+ لە ڕیز
+ كارپێكردن به Kodi
+ ناتوانرێ لێدوانەکان باربکرێ
+ بەستەری دۆخ دابنێ
+ پەڕگەی دەنگە داگیراوەکان لێرەدا هەڵدەگیرێن
+ ببورە، هەندێ کێشە ڕوویدا.
+ هەناردەکردن بۆ
+ ڕەفتار
+ هەڵبژاردنی کەناڵ
+ پرسیاربکرێ لەکوێ دابگیرێ
+ © %1$s لەلایەن %2$s لەژێر %3$s
+ مۆڵەتنامەی لایەنی سێهەم
+ مۆڵەتنامەی داوانامە
+ پیشاندانی ڕێنمایی ”داگرتن تا پاشکۆ”
+ بەڵێ
+ دابەشکراوەکان
+ زۆرترین کارپێکردن
+ لابردنی دڵخواز
+ مۆڵەتەکان
+ ناتوانرێت بهشداریكردنهكه نوێبكرێتهوه
+ بازدەرێکی نوێ
+ جوڵەی پەنجەت لەسەر ڕوونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ و ڕووناکی
+ پاشبنەما
+ هیچ ئەنجامێک نییە
+ زمان دەگۆڕدرێ لەدوای داخستن و پاشان کردنەوەی داوانامە.
+ سڕینەوەی تەماشاکراوەکان
+ پیشاندانی نیشانەکەری شوێنی کارپێکراو لە لیستەکان
+ باركردنی وێنۆچكهكان
+ شوێنەکان لە لیستدا
+ بهشداربوویت
+ بەهۆی گۆڕانکاری لە شێوەی ژێرنووسکردنەکە. پێویستە داوانامە دابخەیت و دیسانەوە بیکەیتەوە.
+
+ - %d دیاریکراو
+ - %d هەڵبژێردراو
+
+ ناتوانرێ ڕاژە بدۆزرێتەوە
+ مێژوو & کاش
+ دیار
+ سڕینەوە
+
+ - %s گوێی لێدەگرێ
+ - %s گوێی لێدەگرن
+
+ داگرتنەکانی داوانامە
+ ناو
+ کەناڵەکان
+ مێژوو
+ ناتوانرێ بەشدارییەکان پاشەکەوت بکرێن
+
+ - %s بینراو
+ - %s بینراو
+
+ ڕاگرتن
+ فۆڵدەری داگرتنی پەڕگە دەنگییەکان هەڵبژێرە
+ نوێ
+ سڕینەوەی مێژووی تەماشاکردن
+ کارپێکردنەوەی لیست
+ دەستکەوتنی زانیاری…
+ مێژووی گەڕانەکانت دەسڕێتەوە
+ چی ڕوویدا:
+ کارپێکردن لە پاشبنەما
+ بێ سنوور
+ ڕەتکردنەوە
+ پیشاندانی کێشە
+ کارپێکردن
+ هەمیشە نوێکردنەوە
+ ناتوانرێ بەشدارییەکان بهێنرێتەوە
+ کۆنترۆڵی ڕووناکی بەجوڵەی پەنجە
+ دەرکەوتن
+ هێنانەوەی بنکەی زانیاریەکان
+ گەڕان بەناو مێژوو
+ پەڕگەیەکی داگیراو بەم ناوەوە هەیە
+ ڕاکێشان بۆ دووبارە ڕێکخستنەوە
+ سڕینەوە
+ دۆخی پهنجهرهی بچووک
+ هەموو کات
+ مۆڵەتنامە بخوێنەوە
+ داوانامە/ڕووکار ڕاوەستا
+ هەمووی کارپێبکە
+ کارپێکردن
+ هەمان پەڕگە/بابەت بوونی نییە
+ دەستپێکردن
+ بهشداربوون
+ بژاردەی ”کارپێکردن بە Kodi“ پیشانبدرێت
+ بهشدارییهكان
+ پەڕەی بەتاڵ
+ جۆری بنەڕەتی دهنگ
+ هێما تایبەتییەکان
+ ڕووكار
+ گۆڕین بۆ سەرەکی
+ دەقە بنچینەییەکان لە خزمەتگوزارییەکانەوە لە بابەتی پەخشەکاندا دیار دەبن
+ کارپێکەری پەنجەرەی بچووک
+ داگرتن
+ ژێرنووسەکان
+ بەستەر هەڵەیە
+ ڕیزنەبوون لە پاشبنەما
+ کۆنترۆڵی دەنگ بەجوڵەی پەنجە
+ ڕیزکردنی خۆکاری کارپێکردنی دواتر
+ کارپێکەرە ڤیدیۆییە دەرەکییەکان پشتگیری ئەم جۆرە بەستەرانە ناکەن
+ کردار ڕەتکرایەوە لەلایەن سیستەمەوە
+ پەڕەی بەشدارییەکان
+ وێنۆچکەی پێشبینینی ڤیدیۆ
+ پهنجهرهی بچووک
+ ڕهش
+ قهبارهی بنەڕەتی پهنجهرهی بچووک
+ ئاگاداربە: ناتوانرێ هەموو پەڕگەکان بهێنرێنەوە.
+ ئارەزوومەندییەکانی دۆخی پێرتووبی ڕێکبخە
+ دواین نوێکردنەوە: %s
+ هەڵبژاردن
+ ڕاگرتن
+ لیست
+ دەستپێکردنەوەی داگرتنەکان
+ هیچ ژێرنووسێک نییە
+ %s داگرتن تەواوبوون
+ کارپێکردن لە پەنجەرەی بچووک
+ دواتر
+ هیچ بینراوێک نییە
+ ئەو پەڕگەیە بوونی نییە یان دەسەڵاتی خوێندنەوە و نوسینی لاوازە
+ هیتر
+ ناتوانرێ ماڵپەڕ شیبکرێتەوە
+ نووسە ڕێگەپێدراوەکان لە پەڕگەیەکی ناویدا
+ نازنامەکەت , soundcloud.com/yourid
+ یارمەتی
+ چی نوێ ههیه
+ پەنجەرەی بچووک
+ گرتەبکە بۆ وردەکاری
+ شوێنی هەموو کارپێکراوەکان بسڕدرێتەوە؟
+ باشترین ٥٠
+ لیستی کارپێکردن
+ تەنها بەستەرەکانی https پشتگیریکراون
+ پەیوەستبوونی پارێزراو شکستی هێنا
+ ڕاژە پشتگیرینەکراوە
+ ئەو ڤیدیۆیانەی پێشتر سەیرت کردوون و دواتر زیادت کردوون بۆ خشتەی کارکردن دەسڕێنەوە.
+\nئایا دڵنیایت؟ ئەمە ناگەڕێنرێتەوە!
+ بابەت سڕایەوە
+ وێنۆچکەی کەناڵ
+ ئایا دەتەوێت ڕێکخستنەکانیش بهێنرێنەوە؟
+ هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه. دهتهوێت VLC دابمەزرێنیت؟
+ بوخچەی داگرتنی ڤیدیۆ
+ پاڵاوتن
+ کردنەوەی پلیکانە
+ کاڵ
+ پیشاندانی پێشنیارەکان لەکاتی گەڕان
+ کردارەکە شکستی هێنا, چونکە ئەو پەڕگەیە سڕاوەتەوە
+ زیادکردن بۆ
+ هیچ بەشداربوویەک نییە
+ دۆخی پێرتووبی
+ خشتەی کارپێکردن دروستکرا
+ سڕینەوەی بەستەر (ڕەنگە ببێتە هۆی تێکدان)
+ پەڕەی کەناڵەکان
+ گۆڕین بۆ پاشبنەما
+ ∞ ڤیدیۆ
+ چالاککردنی LeakCanary
+ بەکارهێنانی بردنەپێشی ناتەواوی خێرا
+ هەڵەیەک ڕوویدا : %1$s
+ بوخچەی داگرتن بۆ پەڕگەی ڤیدیۆکان هەڵبژێرە
+ دروستکراو لەلایەن %s
+ بەکارهێنەران
+ ناوەڕۆک
+ بهكارهێنانی كارپێكهری ڤیدیۆی دهرهكی
+ چالاککردنی وێنۆچکەی ڤیدیۆی داخستنی ڕوونما
+ دهنگ
+ سهرهكی
+ بەکارهێنانی Tor
+ پیشاندانی کاتی بنچینەیی پێشوو لەسەر بابەتەکان
+ وردەکارییەکان
+ هەمان دۆخ کاراکراوە
+ زمانی بنەڕەتی داوانامە
+ خشتەی کارپێکردنەکان نیشانەکران
+ سیاسەتی تایبەتی داوانامە
+ داگرتن
+ مێژوو بەتاڵە
+ چالاک نەکردنی دۆخی خێرا
+ كردنهوه له وێبگهر
+ ڕاژەکە هیچ داتایەک نانێرێت
+ شوێنی کارپێکراوەکان سڕانەوە.
+ ئاگانامەکانی وەشانی نوێی داوانامە
+ داگرتن تەواوبوو
+ تەنها چەند مۆبایلێک پشتگیری کارپێکردنی ڤیدیۆی 2K/4K دەکەن
+ ئاگانامەکانی داوانامە بۆ پاشبنەما و کارپێکردنەکانی پەنجەرەی بچووک
+ لەهەندێ خزمەتگوزاریدا بەردەستە، هەمیشە خێرایە بەڵام ڕەنگە هەندێ لە بابەتەکان زانیارییەکانیان ناتەواو بێت (وەک نەبوونی ماوە، جۆری بابەت ، نەبوونی پەخش).
+
+ - %d چرکە
+ - %d چرکە
+
+ دەگەڕێنرێتەوە
+ دواتر
+ کردنەوەی ماڵپەڕ
+ ڤیدیۆ کارپێبکرێ کاتێ ئەپەکە لە ئەپێکیتر کرایەوە
+ کارپێکردنی خۆکاری
+ زیاترین هەوڵدانەکان
+ خزمەتگوزاری
+ نوێ & چالاک
+ داگرتنێکی ترت هەیە بەهەمان ناو
+ کیۆسک
+
+ - %s ڤیدیۆ
+ - %s ڤیدیۆکان
+
+ هەوڵدانەوە
+ ڤیدیۆ تەماشاکراوەکان بسڕێنەوە؟
+ لیستی کارپێکردنەکان
+ دۆخێک هەڵبژێرە
+ بردنەپێشەوەی خێرا لەکاتی بێدەنگکردن
+ لێدوانەکەت (بە ئینگلیزی):
+ پیشاندانی بژاردهی كارپێكردنی ڤیدیۆ به Kodi
+ پەڕگەیەک بەهەمان ناو هەیە
+
+ - %d ڕۆژ
+ - %d ڕۆژەکان
+
+ ناولێنان
+ داگرتن
+ باشە
+ خاوێنکردنەوەی پاشماوەی داتا
+ ناتوانرێ ئەم داگرتنە بهێنرێتەوە
+ بەشدارنەبوون
+ گۆڕینی پیشاندان
+ هیچ پەخشێکی ڤیدیۆیی نەدۆزرایەوە
+ هێنانەوە لە
+ گرتە بکە لەسەر ”تەواو” کاتێ کە چارەسەرکرا
+ ئاگانامەی نوێکاری داوانامە
+ ناتوانرێ هەموو وێنۆچکەکان باربکرێن
+ %1$s بینراو
+ هەناردەکردنی پێشووتر
+ پەڕگەی ZIP دروست نییە
+ ناچالاککراوە
+ بەشداریکردن
+ ناتوانرێ شوێنی داگرتن دروستبکرێ \'%1$s\'
+ پشتگوێخستن
+ داگرتنەکان
+ هەرکاتێ بیرۆکەیەکت هەبوو وەک ; وەرگێڕان، گۆڕینی دیزاین ، سڕینەوەی کۆد ،یان هەر گۆڕانکارییەکیتر ئەوا یارمەتییەکەت لەسەرچاوانمانە. ئێمە هەمیشە دەمانەوێ ئەپەکە زیاتر بەرەوپێش ببەین!
+ خشتەی کارپێکردن دانرا
+ سنوردانانی تەمەن
+ ههڵبژاردنی وێبگهر
+ هیچ لێدوانێک نییە
+ ماوەی خێرا بردنە پێشەوە\\ گێڕانەوە بۆ دواوە
+ گەڕانەوە
+ چوونەجێگەی
+ بوخچەی مەبەست ناتوانرێ دروست بکرێ
+ هێڵی ئینتەرنێت نەما
+ مێژوو سڕایەوە
+ شوێنی هەموو کارپێکراوەکان دەسڕێتەوە
+ ئایا دەتەوێ ئەم بابەتە لە مێژووی گەڕان بسڕدرێتەوە؟
+ ئایا دەتەوێ مێژووی داگرتنەکانت بسڕدرێنەوە یان هەموو پەڕگە داگیراوەکان بسڕدرێنەوە؟
+ پیشاندانی زانیاری
+ داگرتنێکیتر هەیە بەهەمان ناو
+ كاركردنی خۆكارانه
+ هیچ بەشدارییەک دیاری نەکراوە
+ ناوی کۆمەڵە بەتاڵە
+ تەواو
+ بەدڵبوون
+ ناتوانرێ مۆڵەت باربکرێ
+ بیرهاتنهوهی كۆتا قهباره و شوێنی پهنجهرهی بچووك
+ دروستکردن
+ ئەوە بزانە ئەم کردارە پێویستی بە هێڵێکی گران هەیە.
+\n
+\nدەتەوێ بەردەوامبیت؟
+ هەمووی
+ داخستن
+ خۆکاری
+ ناتوانرێ وێنە باربکرێ
+ دەنگ
+ پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر پەڕگەیەک
+\nدەتوانیت SAF بەکاربهێنیت گەر دەتەوێ لە بیرگەی دەرەکیدا پەڕگەکان دابگریت
+ هەناردەدەکرێت…
+ وردەکارییەکان:
+ هیچ پەخشێک نییە بۆ داگرتن
+ بارنەکراو : %d
+ بارکردنی ناوەڕۆکی داواکراو
+ ڕێگەپێدان ڕەتکرایەوە لەلایەن سیستەمەوە
+ مێژوو دەسڕێتەوە لەگەڵ ڤیدیۆ کارپێکراوەکان و شوێنی لیستە ڤیدیۆییەکان
+ دانانی خۆکاری
+ ١ بابەت سڕایەوە.
+ کرداری بنەڕەتی لەکاتی کردنەوەی بابەت — %s
+ هەڵبژاردنی کیۆسک
+ کۆنفرانسەکان
+ هیچ داوانامەیەک دانەمەزراوە بۆ کارپێکردنی ئەم پەڕگەیە
+ كردنهوه له پهنجهرهی بچووک
+ سنووری قەبارە لەکاتی بەکارهێنانی داتای مۆبایل
+ ڕیزنەبوون لە پەنجەرەی بچووک
+ داخستنی پلیکانە
+ کەناڵ
+ کۆد
+ سڕینەوەی داتا
+ ڕێکخستنەکان
+ زیندوو
+ سکاڵا لەبوونی کێشە
+ هیچ کەناڵێکی بەشداری نییە
+ ڕاوەستا لەسەر کێشەی هێڵ
+ ناتوانیت گۆڕانكاری لهم بهشدارییهدا بكهیت
+ وردی بنەڕەتی
+ بچووککردنەوە بۆ پەنجەرەی بچووک
+ جوڵەی پەنجەت لەسەر ڕوونما بەکاربهێنە بۆ گۆڕینی ئاستی ڕووناکی ڕوونما
+ گۆرانییەکان
+ داگرتنی پەڕگەی پەخش
+ بەستەر هەڵەیە یاخوود بەئینتەرنێتەوە پەیوەست نەبوویت
+ شێوازی پیشاندانی خشتە
+ زیادکردنی دۆخ
+ پەسەند کردن
+ بەمزووانە شتێک لێرەدا دەردەکەوێ :D
+ تەماشاکراوە
+ ئەم خشتەی کارپێکردنە بسڕدرێتەوە؟
+ ڕیزکرا لە کارپێکردن لە پەنجەرەی بچووک
+ بێدەنگکردن
+ سەردانی ماڵپەڕی داوانامەکەمان بکە بۆ زانیاری و هەواڵی نوێ.
+ ئایا دڵنیای لە سڕینەوەی هەموو بابەتەکان لە مێژوودا؟
+ ئایا دەتەوێ ئەم بابەتە لە مێژووی تەماشاکردن بسڕدرێتەوە؟
+ داونامایەکی خۆڕایی و کێشی کەم بۆ پەخشی ڕاستەوخۆ لەسەر ئەندرۆید.
+ ناوەڕۆک بوونی نییە
+ ئەو دۆخانە بدۆزەرەوە کە لەگەڵ خۆتدا دەگونجێن لە %s
+ پەڕگە
+ نەدۆزرایەوە
+ گەڕا
+ چارەسەردەکرێت
+ جوڵەی پەنجەت لەسەر ڕوونما بەکاربهێنە بۆ گۆڕینی ئاستی دەنگ
+ ناوەڕۆکی پەڕەی سەرەکی
+ دیاریکردنی بەشدارییەکان
+ هێنانەوەی پەڕگە
+ بوخچەی داگرتنی دهنگ
+ ههنێ له قهبارهكان دهنگیان تێدا نابێت
+ ڕووداوەکان
+ وێنۆچکەی کەسی بەرزکەرەوە
+ گرتەبکە بۆ داگرتن
+ هێنرایەوە
+ داگرتنەکان
+ کۆنترۆڵی خێرایی کارپێکەر
+ ئایا دەتەوێ ئەم کۆمەڵەیە بسڕیتەوە؟
+ پەنجەت داگرە بۆ ڕیزنەبوون
+ زۆرترین ژمارەی هەوڵدان پێش پاشگەزبوونەوە لە داگرتنەکە
+ هەڵەیەک ڕوویدا
+ هەمووی بسڕەوە
+ بەڵێ، لەگەڵ ڤیدیۆ تەماشاکراوەکانەوە
+ دەستپێکردنی لێدان لە پەنجەرەی بچووکەوە
+ بەدڵنەبوون
+ مێژوو
+ تاقیکردنەوەی هێڵێک
+ دەسەڵاتی پێبدە بۆ پیشاندان لەسەرووی داوانامەکانی ترەوە
+ مێژووی تەماشاکردن سڕایەوە.
+ هەنگاو
+ تکایە چاوەڕێبکە…
+ خوێندنەوەی سیاسەتی تایبەتی
+ سڕینەوەی پەڕگە داگیراوەکان
+ ببوورە، ناتوانرێ ئەوە ڕووبدات.
+ پڕ بە ڕونما
+ کارپێکەری پەنجەرەی بچووک
+ ڕێکخستنەوە
+ هەناردەکردنی بنکەی زانیارییەکان
+ تاریک
+ تێکەڵکردن لە دیاری تەرخانکراوەوە کاتێ بەردەست بوو
+ داگرتن شکستی هێنا
+ ناتوانرێ بە ڕاژەوە پەیوەست بیت
+ دەستپێکردنی لێدان لێرەوە
+ کارپێکردنی ڤیدیۆ، ماوەی:
+ هەزار
+ زۆرترین بەدڵبوون
+ سڕینەوە
+ جۆری بنەڕەتی ڤیدیۆ
+ هیچ شتێک لێرەدا نییە
+ سڕینەوە
+ هەمان فۆڵدەر بوونی نییە
+ دڵخوازکردنی لیستی کارپێکردن
+ ناوی پەڕگە ناکرێ بەتاڵ بێت
+ ناتوانرێ واژووی بەستەری ڤیدیۆ بخوێنرێتەوە
+ پیشاندانی ئاگانامەیەک بۆ ئامادەبوونی داوانامە لەکاتی بەردەست بوونی وەشانی نوێ
+ بەشداربووەکان
+ مێژووی تەماشاکردن
+ سکاڵا لەسەر کێشەکان
+ خۆکاری دانرا (هیچ بەرزکەرەوەیەک نەدۆزرایەوە)
+ دەستپێکردنی لێدان لە پاشبنەماوە
+ ناوی پەڕگە
+ دانان لەسەر وێنۆچکەی خشتەی کارپێکردن
+ دەربارەی داوانامە
+ زیادکردن بۆ خشتەی کارپێکردن
+ (نەزانراو)
+ زمانی داوانامە
+ پەڕەی کیۆسک
+ دەستپێکردنەوە کارپێکردن
+ شوێنی پەڕگە گۆڕدراوە یان سڕاوەتەوە
+ هێما نادروستەکان بەم بەهایە جێگۆڕکێ دەکرێن
+ نوێکردنەوە
+ گهڕان
+ گێڕانەوە بۆ بنەڕەتی
+ کۆنتڕۆڵی کارپێکەر بەجوڵەی پەنجە
+ reCAPTCHA داواکراوە
+ گۆڕین بۆ پەنجەرەی بچووک
+ کرداری ’کردنەوە’ی پێشنیارکراو
+
+ - %d خولەک
+ - %d خولەك
+
+ ئامادەکردن…
+ ئەلبوومەکان
+ هیچ ڤیدیۆیەک نییە
+ لەلایەن %s
+ دانانی ئاڕاستە
+ چ پەڕەیەک نیشانبدرێ لە پەڕەی سەرەکی
+ ڕاپۆرت
+ هەمیشە بپرسە
+ هێشتنەوەی تراکی ڤیدیۆ کارپێکراوەکان
+ بهكارهێنانی كارپێكهری دهنگی دهرهكی
+ بینین لە GitHub
+ زانیاری:
+ هیچ کارپێکەرێکی ڤیدیۆیی نەدۆزرایەوە (دەتوانی کارپێکەری VLC دامەزرێنی) .
+ نەگێڕانەوەی کارپێکەر بۆ پێش کێشە ڕوویدا
+ دەهێنرێتەوە…
+ هاوبهشپێكردن لهگهڵ
+ خزمەتگوزاری چەسپاو، ئێستا هەڵبژێردراو:
+ تەواوی گەڕانەکانت بسڕدرێنەوە؟
+ بەردەوام بوونی ڤیدیۆ لەدوای هەبوونی هەر بڕینێک (وەک پەیوەندی تەلەفۆنی)
+ گرته له ”گهڕان” بكه بۆ دهستپێكردن
+ کۆگای گەڕانی نێوخۆیی
+ ڤیدیۆ & دەنگ
+ هاوبهشپێكردن
+ بوخچەی داگرتن بگۆڕە بۆ ئەنجامدانی کاریگەری
+ پیشاندانی ڕێنمایی کاتێ لە پاشبنەما یاخوود پەنجەرەی بچووکدا گرتە دەکرێ لەسەر” وردەکاری:” ڤیدیۆیەک
+ %1$d لە داگرتنەکان سڕانەوە
+ پەخشی هیچ دەنگێک نەدۆزرایەوە
+ هونەرمەندەکان
+ هیچ کەسێک تەماشای ناکات
+ دەربارە
+ تکایە بوخچەیەک بۆ شوێنی داگرتن دیاریبکە لە ڕێکخستنەکان
+ بارکردن…
+ بەهۆی ExoPlayer ەوە ماوەی بردنەپێش و بردنەپاش لە %d چرکەدا دیاریکرا
+ سڕینەوەی شوێنی کارپێکراوەکان
+ لەم ماوەیەدا بڵاوکرابێتەوە
+ ناولێنان
+ کارپێکەری پاشبنەما
+ پەڕگە ناتوانرێ دروستبکرێ
+ پێدانەوە
+ خشتەی کارپێکردنی نوێ
+
+ - %d کاتژمێر
+ - %d کات ژمێر
+
+ بڵاوكراوهتهوه له %1$s
+ مێژوو ناچالاکە
+ کاشی وێنەكان سڕایهوه
+ هێمای جێگۆڕین
+ ڕێكخستنهكان
+ تەواوبوو
+ بۆ هێنانەوەی بەشداربوونەکانی یوتوب پێویستە پەڕگەی خەزن بوو بگەڕێنیتەوە:
+\n
+\n1. ئەم بەستەرە بکەوە: %1$
+\n2. بچۆرەژوورەوە گەر داوای کرد
+\n3. داگرتنێک دەست پێدەکات (ئەمە پەڕگەی خەزنکراوە)
+ بنەڕەتی سیستەم
+ کێشە لە هێڵەکەتدا هەیە
+
+ - %s تەماشا دەکات
+ - %s تەماشا دەکەن
+
+ هەڵە لە ڕاپۆرتکردن
+ سڕینەوەی پاشماوەی هەموو داتاکان
+ داوانامەکە نهدۆزرایهوه. دابمهزرێت؟
+ ناتوانرێ پشتگیری دۆخەکە بکرێ
+ ڕیزکرا لە کارپێکردن لە پاشبنەما
+ دامەزراندن
+ شوێنی داگرتن دانرا \'%1$s\'
+ ڤیدیۆکان
+ بەستەرەکە پشتگیری نەکراوە
+ شەپۆلی دەنگ
+ کرداری کاتی گۆڕین بۆ داوانامەیەکی تر لە کارپێکەری ڤیدیۆییەوە — %s
+ لەبەرگیرایەوە
+ چوارچێوەی گەیشتن بە بیرگە ڕێگەدەدات بە داگرتنی پەڕگەکان لە بیرگەی دەرەکیدا.
+\nتێبینی: هەندێ لە مۆبایلەکان پشتگیری ناکرێن
+ گونجاو بە ڕونما
+ چاودێری دزەکردنی بیرگە ڕەنگە ببێتە هۆی وەڵامنەدانەوەی لەکاتی گەرمبوون
+ بێدەنگ نەکردن
+ ناوخۆ
+ پڕبینەرەکان
+ تەنها یەک داگرتن کاردەکات لەیەک کاتدا
+ ئایا دەتەوێ بگەڕێنرێتەوە بۆ شێوازی بنەڕەتی؟
+ دەسەڵاتی گەیشتن بە بیرگە نەدرا
+ ڕاگرتنی داگرتنەکان
+ دەربارە
+ خولانەوە
+ ناتوانی ئەم خشتەی کارپێکردنە بسڕیتەوە.
+ پیشاندانی لێدوانەکان
+ بۆ جێبەجێکردنی فرمانەکان لەگەڵ یاسای پاراستنی داتای گشتی ئەوروپیدا (GDPR) , ئێمە سەرنجت ڕادەکێشین بۆ سیاسەتە تایبەتییەکانی ئەپەکەمان. تکایە بەئاگادارییەوە بیخوێنەوە.
+\nپێویستە قبوڵی بکەیت بۆ ناردنی سکاڵاکانت.
+ ئەم ناوەڕۆکە پشتگیری نەکراوە لەلایەن ئەپەکەمانەوە.
+\n
+\nهیوادارین بتوانین لە وەشانەکانی داهاتوودا پشتگیری بکەین.
+ بەخشین
+ هیچ کەسێ گوێی لێ ناگرێ
+ مێژووی گەڕانەکانت سڕانەوە.
+ ڤیدیۆ
+ ئەپ داخرا لەکاتی کارکردن لەسەر ئەو پەڕگەیە
+ کارپێکەری ڤیدیۆیی
+ ناچالاککردن بۆ پیشان نەدانی لێدوانەکان
+ ناتوانرێ ماڵپەڕ بەتەواوی شیبکرێتەوە
+ بەکارهێنانی SAF
+ کاتی پاش دواین نوێکردنەوە دوای بەشداربوون ڕەچاوکراوە — %s
+ بیرگەی دەرەکی بەردەست نییە
+ گێڕانەوەی لیست بۆ شوێنی پێشووتر
+ پاشگهزبوونهوه
+ تراکەکان
+ ڕێکخستنەکانی دەنگ
+ پیشاندانی ئەو ڤیدیۆیانەی سنوری تەمەنیان بۆ دانراوە. لە ڕێکخستنەکانەوە ڕێگەی پێدەدرێت.
+ پرسیارت لێ دەکرێت بۆ شوێنی داگرتنی هەر پەڕگەیەک
+ دواین کارپێکراو
+ ناتوانرێ لیستی داگرتن دابنرێ
+ هێنانەوە/هاوردەکردن
+ کارپێکەری پاشبنەما
+ وەشانی نوێی داوانامە بەردەستە!
+ وێنۆچکەی خشتەی کارپێکردن گۆڕدرا.
+ هێنانەوەی پەڕەی کەسی SoundCloud بەدانانی بەستەر یاخوود ئایدی:
+\n
+\n1. دۆخی ”Desktop mode” لە وێبگەرەکەتدا چالاک بکە (ئەم ماڵپەڕە بۆ وێبگەری مۆبایلەکان بەردەست نییە)
+\n2. ئەم بەستەرە بکەرەوە : %1$s
+\n3. بچۆرە ژوورەوە گەر داواکرا
+\n4. بەستەری پەڕەی کەسییەکەت دابنێ.
+ پیت و ژمارەکان
+ وڵاتی بنەڕەتی
+ نوێکارییەکان
+
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 20b9a8bc4..f18da7ba0 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -433,7 +433,7 @@ otevření ve vyskakovacím okně
Mřížka
Automaticky
Přepnout zobrazení
- K dispozici je aktualizace aplikace NewPipe!
+ Aktualizace NewPipe je k dispozici!
Klepněte pro stažení
Hotovo
Vyčkávání
@@ -538,7 +538,7 @@ otevření ve vyskakovacím okně
Při použití přehrávače na pozadí se náhled videa ukáže na zamknuté obrazovce
Smazat historii stahování
Smazat stažené soubory
- Smazat %1$s stahování
+ Smazat %1$d stahování
Souhlasit se zobrazením přes jiné aplikace
Jazyk aplikace
Jazyk systému
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 4f5c6e018..20c4e3286 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -4,8 +4,7 @@
Veröffentlicht am %1$s
Keinen Stream-Player gefunden. VLC installieren\?
Installieren
- Abbrechen
-\n
+ Abbrechen
Im Browser öffnen
Teilen
Herunterladen
@@ -65,10 +64,12 @@
Live-Streams werden noch nicht unterstützt
Konnte Webseite nicht vollständig analysieren
Fehler via E-Mail melden
+ Formatierten Fehlerbericht kopieren
+ Fehler auf GitHub melden
Melden
Info:
Dies ist passiert:
- Was:\\nAnfrage:\\nSprache des Inhalts:\\nDienst:\\nZeit (GMT):\\nPaket:\\nVersion:\\nOS-Version:
+ Was:\\nAnfrage:\\nSprache des Inhalts:\\nLand des Inhalts:\\nSprache der App:\\nDienst:\\nZeit (GMT):\\nPaket:\\nVersion:\\nOS-Version:
Details:
Video
Audio
@@ -240,7 +241,7 @@
„Zum Anhängen gedrückt halten“ Tipp anzeigen
[Unbekannt]
In Warteschlange für Hintergrundwiedergabe
- In Warteschlange in neuem Pop-up
+ In Warteschlange in einem Pop-up
Ab hier wiedergeben
Wiedergabe im Hintergrund starten
Wiedergabe in einem Pop-up starten
@@ -427,7 +428,7 @@
Gitter
Auto
Ansicht wechseln
- NewPipe-Update verfügbar!
+ NewPipe-Update ist verfügbar!
Zum Herunterladen antippen
Fertig
Ausstehend
@@ -531,7 +532,7 @@
Ein Video-Miniaturbild wird auf dem Sperrbildschirm angezeigt, wenn der Hintergrundplayer verwendet wird
Downloadverlauf löschen
Heruntergeladene Dateien löschen
- %1$s Downloads gelöscht
+ %1$d Downloads gelöscht
Berechtigung zur Anzeige über andere Apps erteilen
Sprache der App
Systemstandard
@@ -614,4 +615,5 @@
Avatarbild des Kanals
Erstellt von %s
Von %s
+ Nur nicht gruppierte Abonnements anzeigen
\ No newline at end of file
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index c7ea0df18..f219ee2e8 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -170,7 +170,7 @@
Teni por viciĝi
[Nekonata]
Viciĝi en la fona ludilo
- Viciĝi en nova ŝprucfenestro
+ Viciĝi en ŝprucfenestro
Komenci ludi en nova ŝprucfenestro
Preferata enhavlando
Ŝangi Orientiĝon
@@ -530,7 +530,7 @@
Bildeta filmeto estas montrita ĉe ŝlosita ekrano uzante la fona ludilo
Forviŝi la historion de elŝutoj
Forviŝi elŝutitajn dosierojn
- %1$s elŝutoj forviŝitaj
+ %1$d elŝutoj forviŝitaj
Filmetoj
Doni la permeson por afiŝiĝi supre aliaj apoj
Preferata aplingvo
@@ -582,4 +582,9 @@
Malmutigi
Helpo
Tio enhavo ne estas ankoraŭ subtenata per NewPipe.\n\nĜi espereble estos en sekvanta versio.
+ ∞ filmetoj
+ 100+ filmetoj
+ Artistoj
+ Albumoj
+ Kantoj
\ No newline at end of file
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index db9c65046..cbff74f70 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -2,7 +2,7 @@
%1$s vistas
Publicado el %1$s
- No se encontró reproductor. ¿Instalar VLC\?
+ No se encontró ningún reproductor de retransmisiones. ¿Instalar VLC\?
Instalar
Cancelar
Abrir en el navegador
@@ -15,14 +15,14 @@
Elegir navegador
giro
Carpeta de descarga de vídeo
- Aquí se almacenan los vídeos descargados
- Elegir carpeta de descarga para vídeos
- Cambie las carpetas de descarga para que tenga efecto
+ Los archivos de vídeo descargados se almacenan aquí
+ Elija la carpeta de descarga para los archivos de vídeo
+ Cambie las carpetas de descarga para que surtan efecto
Resolución predeterminada
Reproducir con Kodi
- ¿Instalar aplicación Kore faltante\?
+ ¿Instalar la app Kore que falta\?
Mostrar opción «Reproducir con Kodi»
- Mostrar una opción para reproducir vídeo en el centro multimedia Kodi
+ Mostrar opción para reproducir vídeo a través del centro de medios Kodi
Audio
Formato de audio predeterminado
Descargar
@@ -41,8 +41,8 @@
(Experimental) Forzar la descarga a través de Tor para una mayor privacidad (transmisión de vídeos aún no compatible).
No se puede crear la carpeta de descargas «%1$s»
Se creó la carpeta de descargas «%1$s»
- Aquí se almacenan los audios descargados
- Elegir carpeta de descarga para archivos de audio
+ Los archivos de audio descargados se almacenan aquí
+ Elija la carpeta de descarga para los archivos de audio
Carpeta de descarga de audio
Vídeo y audio
Reproducir
@@ -62,7 +62,7 @@
Contenido
Contenido restringido por edad
Mostrar vídeo restringido por edad. Se pueden realizar más cambios desde los ajustes.
- Toque \"Buscar\" para comenzar
+ Toque «Buscar» para empezar
Reproducción automática
Reproducir un vídeo cuando NewPipe es llamado desde otra app
En directo
@@ -120,20 +120,20 @@
\npara abrir en modo emergente
Reto reCAPTCHA
Reto reCAPTCHA requerido
- Modo emergente de NewPipe
+ Modo emergente
Reproduciendo en modo emergente
Formato de vídeo predeterminado
Desactivado
Mostrar resoluciones más altas
- Solo algunos dispositivos pueden reproducir vídeos en 2K/4K
+ Sólo algunos dispositivos pueden reproducir vídeos en 2K / 4K
Resolución predeterminada de emergente
Segundo plano
- Popup
+ Emergente
Filtro
Actualizar
Limpiar
- Recordar tamaño y posición del repr. emerg.
- Recordar el último tamaño y posición del repr. emerg.
+ Recordar tamaño y posición del reproductor emergente
+ Recordar el último tamaño y posición del reproductor emergente
Emergente
Redimensionando
Elimina el audio en algunas resoluciones
@@ -165,7 +165,7 @@
No se pudo actualizar la suscripción
Principal
Suscripciones
- Qué hay de nuevo
+ Novedades
Reanudar reproducción
Continuar reproduciendo después de las interrupciones (ej. llamadas telefónicas)
Descargar
@@ -213,7 +213,7 @@
¿Quiere eliminar este elemento del historial de búsquedas\?
Contenido de la página principal
Página en blanco
- Página del kiosco
+ Página del quiosco
Página de suscripción
Página de novedades
Página del canal
@@ -280,7 +280,7 @@
Esto reemplazará su configuración actual.
Descargar archivo de retransmisión
Mostrar información
- "Listas de reproducción en marcadores "
+ Playlists en marcadores
Añadir a
Arrastrar para reordenar
Crear
@@ -317,7 +317,7 @@
La monitorización de fugas de memoria puede causar que la app no responda cuando hay Heap Dump
Reportar errores fuera del ciclo de duración
Forzar reporte de excepciones no entregables de RX fuera del fragmento o del ciclo de actividad después del descarte
- Usar búsqueda rápida inexacta
+ Usar búsqueda rápida e inexacta
La búsqueda inexacta permite al reproductor buscar posiciones más rápido con menor precisión. Buscar de a 5, 15 o 25 segundos no funciona.
Poner en cola vídeo relacionado siguiente
Continuar reproducción sin repetir al añadir de forma automática un vídeo relacionado con el último visto
@@ -354,10 +354,10 @@
\n
\n¿Quiere continuar\?
Cargar miniaturas
- Desactívela para evitar la carga de miniaturas y ahorrar datos y memoria. Se vaciará la caché de imágenes en la memoria volátil y en el disco.
+ Desactivar para evitar la carga de miniaturas y ahorrar datos y memoria. Se vaciará la caché de imágenes en la memoria volátil y en el disco.
Se vació la caché de imágenes
- Eliminar metadatos en memoria caché
- Eliminar todos los datos de páginas web en memoria caché
+ Vaciar metadatos en memoria caché
+ Eliminar todos los datos de páginas web en antememoria
Se vació la caché de metadatos
Controles de velocidad de reproducción
Tiempo
@@ -501,7 +501,7 @@
Elimina todas las posiciones de reproducción
¿Quiere eliminar todas las posiciones de reproducción\?
Activar/desactivar servicio, seleccionados actualmente:
- kiosco predeterminado
+ Quiosco predeterminado
Nadie está viendo
- %s viendo
@@ -527,11 +527,11 @@
Más gustados
Generado automáticamente (no se encontró creador)
Elige una instancia
- Miniatura de vídeo en la pantalla de bloqueo
- Se mostrará una miniatura del video en la pantalla de bloqueo al usar el reproductor de fondo
+ Miniatura de vídeo en pantalla de bloqueo
+ Se mostrará una miniatura del vídeo en la pantalla de bloqueo al usar el reproductor en segundo plano
Limpiar historial de descargas
Eliminar archivos descargados
- Eliminadas %1$s descargas
+ Eliminadas %1$d descargas
Dar permisos para que se muestre por sobre otras apps
Idioma de aplicación
Predeterminado del sistema
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 635e89d95..db02eaedc 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -530,7 +530,7 @@
Atzeko planoko bideo erreproduzitzailea erabiltzen den bitartean, bideoaren karatula blokeo pantailan erakutsiko da
Garbitu deskargen historiala
Ezabatu deskargatutako fitxategiak
- %1$s deskarga ezabatuta
+ %1$d deskarga ezabatuta
Baimena eman beste aplikazioen gainetik erakusteko
Aplikazioaren hizkuntza
Sistemaren lehenetsia
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index ca78bc8dd..8f40e68ff 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -47,7 +47,7 @@
پخش
محتوا
محتوای محدود شده بر اساس سن
- نمایش ویدیوهای دارای محدودیت سنی. اجازه دادن به چنین محتوای از بخش تنظیمات ممکن است.
+ نمایش ویدیوهای دارای محدودیت سنی. تغییرات آتی از طریق تنظیمات ممکن است.
زنده
بارگیریها
بارگیریها
@@ -63,7 +63,7 @@
جریانهای زنده هنوز پشتیبانی نمیشوند
نمیتوان هیچ جریانی را گرفت
ببخشید! نباید این اتّفاق زخ میداد.
- گزارش خطا با رایانامه
+ این خطا را با رایانامه گزارش کنید
ببخشید، چند مشکل رخ داد.
گزارش
اطّلاعات:
@@ -77,14 +77,14 @@
نپسندیدنها
استفاده از تور
(آزمایشی) اجبار ترافیک بارگیری از مسیر تور برای محرمانگی بیشتر (هنوز پخش جریانی پشتیبانی نمیشود).
- گزارش یک خطا
+ گزارش خطا
گزارش کاربر
نمیتوان شاخهٔ بارگیری «%1$s» را ایجاد کرد
شاخهٔ بارگیری «%1$s» ایجاد شد
ویدیو
صدا
تلاش دوباره
- اجازهٔ دسترسی به فضای ذخیره رد شد
+ ابتدا اجازهٔ دسترسی به فضای ذخیره را بدهید
شروع
مکث
پخش
@@ -288,7 +288,7 @@
اشکالزدایی
بهروزرسانیها
در پنجره جداگانه باز شود
- حالت پنجره مجزا
+ حالت تصویر در تصویر
اندازه پیش فرض پنجره جداگانه
پنجره جداگانه
به یاد داشتن اندازه و موقعیت پنجره جداگانه
@@ -377,7 +377,7 @@
شروع پخش در اینجا
شروع پخش در پسزمینه
شروع پخش در حالت تصویر در تصویر
- نیوپایپ توسط داوطلبانی توسعه داده میشود که با صرف زمان، بهترین تجربه را برای شما به ارمغان میآورند. حمایت از توسعهدهندگان، به آنها کمک میکند تا حین نوشیدن یک فنجان قهوه، نیوپایپ را به مراتب بهتر کنند.
+ نیوپایپ توسط داوطلبانی توسعه داده میشود که با صرف زمان آزادشان، بهترین تجربه کاربری را برای شما به ارمغان میآورند. حمایت از توسعهدهندگان، به آنها کمک میکند تا حین لذت بردن از نوشیدن یک فنجان قهوه، نیوپایپ را به مراتب بهتر کنند.
حمایت
برای اطلاعات و اخبار بیشتر، به وبسایت نیوپایپ سر بزنید.
تغییر وضعیت به تصویر در تصویر
@@ -470,7 +470,7 @@
فضایی روی دستگاه باقی نمانده است
پیشرفت کار متوفق شد زیرا پرونده پاک شده است
پایان زمان اتصال
- مطمئنید؟
+ میخواهید تاریخچه بارگیری را پاک کنید یا همه پروندههایی که بارگیری شدهاند؟
محدود کردن صف بارگیری
یک بارگیری در هر زمان اجرا شود
شروع بارگیریها
@@ -480,8 +480,8 @@
از شما پرسیده خواهد شد که هر بارگیری کجا ذخیره شود.
\nاگر میخواهید بارگیری در کارت SD خارجی ذخیره شود، گزینه SAF را انتخاب کنید
استفاده از SAF
- چارچوب دسترسی حافظه اجازه دخیره بارگیریها در کارت SD خارجی را میدهد.
-\nنکته: برخی دستگاهها با این قابلیت سازگاری ندارند
+ «چارچوب دسترسی حافظه» اجازه دخیره بارگیریها در کارت SD خارجی را میدهد.
+\nبرخی دستگاهها با این قابلیت سازگاری ندارند
حذف موقعیتهای پخش
حذف تمام موقعیتهای پخش
همه موقعیتهای پخش حذف شوند؟
@@ -508,4 +508,80 @@
به کمک پخشکننده پسزمینه، تصویر بندانگشتی ویدئو در حالت قفل صفحه نمایش یابد
تصویر ویدئو در حالت قفل صفحه
کمینه کردن به هنگام تغییر برنامه
+ توسط %s
+ ایجاد شده توسط %s
+ این محتوا هنوز توسط نیوپایپ پشتیبانی میشود.
+\n
+\nامیدواریم در نسخههای آینده مورد پشتیبانی قرار گیرد.
+ غیرفعالسازی حالت سریع
+ فعالسازی حالت سریع
+ خوراک
+ جدید
+ میخواهید این گروه را پاک کنید؟
+ نام
+
+ - %d مورد انتخاب شده
+ - %d مورد انتخاب شده
+
+ پردازش خوراک…
+ بارگیری خوراک…
+ بارگیری نشده: %d
+ آخرین بهروزرسانی خوراک: %s
+
+ - %d روز
+ - %d روز
+
+
+ - %d ساعت
+ - %d ساعت
+
+
+ - %d دقیقه
+ - %d دقیقه
+
+
+ - %d ثانیه
+ - %d ثانیه
+
+ بله، به همراه ویدئوهایی که ناقص دیده شدهاند
+ ویدئوهای دیده شده پاک شوند؟
+ پاک کردن دیده شدهها
+ پیشفرض دستگاه
+ زبان برنامه
+ نمونهای را انتخاب کنید
+ تعداد %1$d بارگیری، پاک شد
+ پاک کردن پروندههای بارگیری شده
+ پاک کردن تاریخچه بارگیری
+ ناتوانی در بازیابی این بارگیری
+ در حال بازیابی
+ کمینهسازی به پخشکننده تصویر در تصویر
+ نمایش زمان سپریشده اصلی هر مورد
+ صدادار
+ بیصدا
+ مورد پسندترینها
+ اخیرا اضافه شده
+ محلی
+ زبان، با راهاندازی مجدد برنامه تغییر خواهد یافت.
+ کیوسک پیشفرض
+ انجام شد
+ وقتی انجام شد، «Done» یا «انجام شد» را بفشارید
+ بینهایت ویدئو
+ بیش از ۱۰۰ ویدئو
+
+ - %s شنونده
+ - %s شنونده
+
+ کسی در حال شنیدن نیست
+
+ - %s تماشاچی
+ - %s تماشاچی
+
+ کسی در حال مشاهده نیست
+ تغییر خدمت، خدمت جاری:
+ اجازه نمایش روی دیگر برنامهها را بدهید
+ راهنما
+ هنرمندان
+ آلبومها
+ موسیقیها
+ حالت محدودیت یوتیوب
\ No newline at end of file
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 44ffc5126..d325f7ee4 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -3,11 +3,11 @@
Napauta hakua aloittaaksesi
%1$s näyttökertaa
Julkaistu %1$s
- Ei löytynyt soitinta. Haluatko asentaa VLC:n?
+ Ei löytynyt suoratoistosoitinta. Asennetaanko VLC\?
Asenna
Peruuta
Avaa selaimessa
- Avaa ponnahdusikkunassa
+ Avaa ponnahdusikkunatilassa
Jaa
Lataus
Haku
@@ -19,31 +19,31 @@
Käytä ulkoista videosoitinta
Poistaa äänen joillakin resoluutioilla
Käytä ulkoista äänisoitinta
- NewPipe ponnahdusikkuna
+ Ponnahdusikkunatila
Tilaa
Tilattu
Kanavan tilaus peruttu
- Ei pystytty vaihtamaan tilausta
+ Tilauksen vaihtaminen epäonnistui
Ei pystytty päivittämään tilausta
Päävalikko
Tilaukset
Uudet
Taustatoisto
- Ikkuna
- Videolatausten sijainti
- Sijainti ladatuille videoille
- Aseta videoiden tallennussijainti
- Äänilatausten sijaintikansio
- Sijainti ladatuille äänitiedostoille
- Aseta sijainti minne äänitiedostot tallennetaan
+ Ponnahdusikkuna
+ Videon latauskansio
+ Ladatut videotiedostot tallennetaan tänne
+ Valitse videotiedostojen latauskansio
+ Äänen latauskansio
+ Ladatut äänitiedostot tallennetaan tänne
+ Valitse äänitiedostojen latauskansio
Automaattitoisto
- Toistaa automaattisesti videon, kun NewPipe avataan toisesta ohjelmasta
+ Toistaa videon automaattisesti, kun NewPipe avataan toisesta ohjelmasta
Oletusresoluutio
Ponnahdusikkunan oletusresoluutio
Näytä korkeampia resoluutioita
- Vain jotkin laitteet tukevat 2K/4K videotoistoa
+ Vain jotkin laitteet voivat toistaa 2K/4K-videoa
Toista Kodi:ssa
- Kore sovellusta ei löytynyt. Asennetaanko se?
+ Asennetaanko puuttuva Kore-sovellus\?
Näytä \"Toista Kodi:ssa\" vaihtoehto
Näyttää painikkeen, jolla voi toistaa videon Kodi media center:llä
Ääni
@@ -54,35 +54,35 @@
Tumma
Musta
Muista ponnahdusikkunan koko ja sijainti
- Muista viimeisin ponnahdusikkunan koko ja sijainti
+ Muista ponnahdusikkunan viimeisin koko ja sijainti
Soittimen eleohjaus
- Käytä eleitä ohjataksesi kirkkautta ja äänentasoa
+ Käytä eleitä ohjataksesi soittimen kirkkautta ja äänentasoa
Hakuehdotukset
Näytä ehdotuksia hakiessa
Hakuhistoria
Tallentaa hakutietokannan paikallisesti
- Historia ja Välimuisti
+ Katseluhistoria
Pidä muistissa katsotut videot
Jatka toistoa keskeytysten jälkeen (esim. puhelut)
Lataus
- Seuraava video
+ Seuraava
Näytä seuraavia ja samankaltaisia videoita
- URL ei tueta
+ URL ei tuettu
Oletus-sisällon kieli
Soitin
Käyttäytyminen
- Video & Ääni
- Historia ja välimuisti
+ Video & ääni
+ Historia & välimuisti
Ponnahdusikkuna
Ulkoasu
Muu
Toistaa taustalla
- Toistaa ponnahdusikkunassa
+ Toistetaan ponnahdusikkunatilassa
Toista
Sisältö
- Näytä ikärajoitettua sisältöä
- Ikärajoitettu video. Ikärajoituksen voi sallia asetuksista.
- suora
+ Ikärajoitettu sisältö
+ Ikärajoitettu video. Muuttaminen on mahdollista asetuksissa.
+ Suora
Lataukset
Lataukset
Virheraportti
@@ -99,7 +99,7 @@
Paras resoluutio
Peru
NewPipe Ilmoitus
- Ilmoitukset Newpipe taustasoitolle ja ponnahdusikkunalle
+ Ilmoitukset NewPipen tausta- ja ponnahdusikkunasoittimille
Virhe
Verkkovirhe
Ei pystytty lataamaan kaikkia esikatselukuvia
@@ -108,24 +108,24 @@
Ei pystytty jäsentämään websivua kokonaan
Sisältö ei ole saatavilla
Ei pystytty asettamaan latausvalikkoa
- Tämä on LIVE LÄHETYS, mitä ei vielä tueta.
- Ei saatu mitään suoratoistoa
+ Live-suoratoistoa ei vielä tueta
+ Suoratoistosisältöä ei saatu
Kuvan lataus epäonnistui
Sovellus/UI kaatui
Pahoittelut, noin ei olisi pitänyt käydä.
- Raportoi virhe sähköpostin kautta
+ Raportoi tämä virhe sähköpostin kautta
Pahoittelut, joitain virheitä tapahtui.
- RAPORTTI
+ Raportti
Mitä tapahtui:
Sinun viesti (englanniksi):
Yksityiskohdat:
Videon esikatselukuva
- Videon esikatselukuva
- Jakajan avatar esikatselukuva
+ Toista video, kesto:
+ Lataajan hahmokuvake
Tykkäykset
Ei-tykkäykset
Käytä Tor
- (Kokeellinen) Pakota latausliikenne Tor:n kautta saadaksesi parempaa yksityisyyttä (videoiden suoratoistoa ei vielä tueta).
+ (Kokeellinen) Pakota latausliikenne Tor:n kautta parantaaksesi yksityisyyttä (videoiden suoratoistoa ei vielä tueta).
Raportoi virhe
Käyttäjäraportti
Ei tuloksia
@@ -135,7 +135,7 @@
Video
Ääni
Toista uudelleen
- Oikeus tallennustilan hallintaan evätty
+ Myönnä ensin käyttöoikeus tallennustilaan
t.
milj.
bilj.
@@ -155,7 +155,7 @@
- %s videoita
Aloita
- Keskeytä
+ Tauota
Toista
Poista
Tarkistus-suma
@@ -164,17 +164,18 @@
Tiedostonimi
Säikeet
Virhe
- Serveriä ei tueta
+ Palvelinta ei tueta
Tiedosto on jo olemassa
Epämuodostunut URL tai Internet-yhteys ei ole saatavilla
NewPipe Lataus käynnissä
Napauta nähdäksesi lisää
Odota…
Kopioitu leikepöydälle
- Valitse saatavilla oleva latauskansio
- Tämä käyttöoikeus tarvitaan ponnahdusikkunan käytölle
+ Määritä latauskansio myöhemmin asetuksissa
+ Tämä käyttöoikeus tarvitaan
+\nponnahdusikkunatilan käyttämiseksi
reCAPTCHA Haaste
- reCAPTCHA Haaste pyydetty
+ reCAPTCHA-haaste pyydetty
Lataus
Sallitut merkit tiedostonimissä
Epäkelvot merkit korvataan tällä arvolla
@@ -190,22 +191,22 @@
Tietoja
Hyväntekijät
Lisenssit
- Vapaa ja kevyt nettivideo- ja audiostriimitoistin Androidille.
+ Vapaata ja kevyttä suoratoistoa Androidilla.
Näytä GitHub:ssa
NewPipe:n Lisenssi
- Olkoon sinulla ideoita; käännöksistä, design muutoksista, koodin siivoamisesta tai raskaista koodimuutoksista—apu on aina tervetullutta. Mitä enemmän saadaan tehtyä, sen paremmaksi sovellus tulee!
+ Olkoon sinulla ideoita; käännöksistä, designmuutoksista, koodin siivoamisesta tai raskaista koodimuutoksista—apu on aina tervetullutta. Mitä enemmän saadaan tehtyä, sen paremmaksi sovellus tulee!
Lue lisenssi
Osallistu
Historia
Haettu
Katsottu
- Historia on poistettu käytöstä
+ Historia on pois käytöstä
Historia
Historia on tyhjä
Historia pyyhitty
Poistettu
Haluatko poistaa tämän hakuhistoriasta?
- Jatka toistoa ohjelman palatessa päällimmäiseksi
+ Jatka toistoa
Info:
Mikä:\\nPyyntö:\\nSisällön kieli:\\nPalvelu:\\nGMT Aika:\\nPaketti:\\nVersio:\\nOS versio:
© %1$s %2$s %3$s alla
@@ -216,54 +217,54 @@
Syötteet
Kanavat
Valitse kanava
- Ei yhtään tilattua kanavaa vielä
+ Yhtään kanavaa ei ole vielä tilattu
Valitse kioski
Kioski
Nousussa
Top 50
Uudet & kuumat
- Näytä vihje kun taustasoitto tai popup painiketta painetaan pohjassa
+ Näytä vihje, kun taustasoitto- tai ponnahdusikkunapainiketta painetaan videon yksityiskohtanäkymässä
Lisätty taustasoittojonoon
- Lisätty ikkunajonoon
+ Lisätty ponnahdusikkunasoittimen jonoon
Toista kaikki
- Tätä ei voitu toistaa
+ Tätä suoratoistosisältöä ei voitu toistaa
Palautuskelvoton soittimen virhe
Palaudutaan soittimen virheestä
- Taustatoisto
- Ikkuna
+ Taustasoitin
+ Ponnahdusikkunasoitin
Poista
Yksityiskohdat
Ääniasetukset
Pidä pohjassa lisätäksesi jonoon
- "Näytä vihje soittolistaan lisäämiseen "
+ Näytä vihje soittolistaan lisäämiseksi
[Tuntematon]
Lisää taustatoistojonoon
- Lisää ikkunajonoon
- Aloita toistaminen
+ Lisää ponnahdusikkunajonoon
+ Aloita toistaminen tässä
Aloita toisto taustalla
- Aloita toisto ikkunassa
+ Aloita toisto ponnahdusikkunassa
Lahjoita
- NewPipe kehitetään vapaaehtoisten toimesta, jotka käyttävät vapaa-aikaansa tuottaakseen parhaan mahdollisen käyttökokemuksen sinulle. Nyt on aika antaa takaisin, jotta kehittäjät voivat tehdä NewPipe:sta vielä paremman nauttiessaan kupin kahvia.
+ NewPipe on vapaaehtoisten vapaa-ajallaan kehittämä tuoden sinulle parhaan mahdollisen käyttäjäkokemuksen. Nyt on aika auttaa kehittäjiä tekemään NewPipesta vielä parempi heidän nauttiessaan kupin kahvia.
Anna takaisin
Websivu
Käy verkkosivuillamme saadaksesi lisää tietoa ja uusimmat uutiset NewPipe:stä.
- Soitinta ei löytynyt (voit asentaa VLC:n toistaaksesi).
- Lataa toistotiedosto
+ Suoratoistosoitinta ei löytynyt (voit asentaa VLC:n toistaaksesi).
+ Lataa suoratoistotiedosto
Näytä lisätietoja
- Kirjamerkityt soittolistat
+ Kirjanmerkityt soittolistat
Lisää soittolistaan
Käytä nopeampaa epätarkkaa pikakelausta
- Epätarkka kelaus mahdollistaa videon kelauksen nopeammin, huonommalla tarkkuudella
- Näytä videoiden pikkukuvat
- Poista käytöstä lopettaaksesi kaikkien pikkukuvien lataus säästääksesi mobiilidataa ja muistinkäyttöä. Tämän asetuksen muuttaminen poistaa kaikki pikkukuvat välimuistista
+ Epätarkka kelaus mahdollistaa videon kelauksen nopeammin huonommalla tarkkuudella. Kelaaminen 5, 15 tai 25 sekuntia ei toimi tämän kanssa.
+ Lataa esikatselukuvat
+ Poista käytöstä estääksesi esikatselukuvien lataus säästääksesi dataa ja muistinkäyttöä. Asetuksen muuttaminen poistaa sekä muistissa että levyllä olevan kuvavälimuistin.
Kuvavälimuisti tyhjennetty
Poista tallennettu metatieto
Poista kaikki tallennettu sivutieto
Metatiedot poistettu
- Automaattisesti lisää seuraavan youtuben ehdottaman videon soittolistaan, sen viimeisen kappaleen soidessa (Youtuben Autoplay)
+ Jatka päättyvää (ei uudelleentoistettavaa) toistojonoa lisäämällä siihen aiheeseen liittyvä suoratoistosisältö
Sisällön oletusmaa
Palvelu
- "Virheenkorjaus "
+ Virheenkorjaus
Kanavat
Soittolistat
Ääniraidat
@@ -273,27 +274,27 @@
Tiedosto
Vaihda orientaatio
Vaihda taustalle
- Vaihda ponnahdusikkunatoistoon
+ Vaihda ponnahdusikkunaan
Vaihda normaalitoistoon
Tuo tietokanta
Vie tietokanta
Kirjoittaa yli tämänhetkisen historian ja tilaukset
Vie historia, tilaukset tai soittolistat
Poista katseluhistoria
- Poistaa toistohistorian
- Poista koko katseluhistoria.
+ Poistaa toistohistorian ja toistokohdat
+ Poista koko katseluhistoria\?
Katseluhistoria onnistuneesti poistettu.
Poista hakuhistoria
Poistaa historian haetuista videoista
- Poista koko hakuhistoria.
+ Poista koko hakuhistoria\?
Hakuhistoria onnistuneesti poistettu.
Ulkoiset soittimet eivät tue tämänkaltaisia linkkejä
Viallinen osoite
- Videojonoja ei löytynyt
- Audiojonoja ei löytynyt
- Virheellinen kansio
- Virheellinen tiedosto/lähde
- Tiedosta ei löydy tai sen kirjoittamiseen/lukemiseen ei ole lupaa
+ Suoratoistovideoita ei löytynyt
+ Suoratoistoääntä ei löytynyt
+ Kansiota ei ole olemassa
+ Tiedoston/sisällön lähdettä ei ole
+ Tiedoa ei ole tai lupa sen kirjoittamiseen tai lukemiseen puuttuu
Tiedostonimi ei voi olla tyhjä
Hups! Tapahtui virhe: %1$s
Vedä järjestelläksesi
@@ -305,11 +306,12 @@
1 poistettu.
Ohjelmaa tämän toistamiseen ei ole asennettu
NewPipen tietosuojakäytäntö
- NewPipe ottaa yksityisyytesi tosissaan. Siksi se ei kerää sinulta mitään tietoja ilman lupaasi. NewPipen tietosuojakäytännössä selitetään tarkasti mitä tietoja lähetetään tai tallennetaan virheraportin yhteydessä.
+ NewPipe ottaa yksityisyytesi tosissaan. Siksi se ei kerää sinulta mitään tietoja ilman lupaasi.
+\nNewPipen tietosuojakäytännössä selitetään tarkasti mitä tietoja lähetetään tai tallennetaan virheraportin yhteydessä.
Lue tietosuojakäytäntö
- Automaattisesti lisää ehdotettu video soittolistaan
- Videostriimejä ei löytynyt ladattavaksi
- NewPipe on vapaata softaa. Voit käyttää sitä, katsella sekä muokata sen koodia ja parannella sitä ilmaiseksi mielesi mukaan. Tarkemmin sanottuna, voit jakaa sitä edelleen ja/tai muokata sitä Free Software Foundationin julkaiseman GNU GPL:n, joko versio kolmosen (GPLv3), tai uudemman, ehdoilla.
+ Lisää ehdotettu suoratoistosisältö automaattisesti soittolistaan
+ Suoratoistosisältöä ei saatavilla ladattavaksi
+ NewPipe on vapaata ohjelmistoa. Voit käyttää, opiskella, jakaa ja parantaa sitä mielesi mukaan. Tarkemmin sanottuna voit jakaa sitä edelleen ja/tai muokata sitä Free Software Foundationin julkaiseman GNU General Public Licensen, version 3 tai uudemman, ehdoilla.
Haluatko poistaa tämän katseluhistoriasta?
Oletko varma että haluat poistaa kaiken katseluhistoriasta?
Viimeksi toistettu
@@ -331,31 +333,31 @@
Kysy aina
Haetaan infoa…
Ladataan pyydettyä sisältöä
- Luo uusi soittolista
- Poista soittolista
- Uudelleennimeä soittolista
+ Uusi soittolista
+ Poista
+ Uudelleennimeä
Nimi
Lisää soittolistaan
Aseta soittolistan kuvakkeeksi
Tallenna soittolista kirjanmerkkeihin
Poista kirjanmerkki
- Haluatko poistaa tämän soittolistan?
+ Poistetaanko tämä soittolista\?
Soittolista luotu
Lisätty soittolistaan
- Soittolistan kuvake muutettu
- Soittolistaa ei voitu poistaa
+ Soittolistan kuvake muutettu.
+ Soittolistaa ei voitu poistaa.
Ei tekstityksiä
Sovita
Täytä
Suurenna
Automaattisesti luotu
Tekstitykset
- Muokkaa tekstitysten kokoa ja taustaa. Asetusten päivittämiseksi sinun tulee käynnistää ohjelma uudelleen
- Laita päälle LeakCanary-muistivuodonpaljastin (virheenkorjausta varten)
+ Muokkaa soittimen tekstitysten kokoa ja taustatyylejä. Asetusten käyttöönotto vaatii uudelleenkäynnistyksen.
+ LeakCanary
Muistivuotojen valvonta voi aiheuttaa ohjelman hidastumisen virhetilanteissa
- Raportoi yhteensopimattomuusvirheitä jotka aiheutuvat vanhoista ohjelmista
- Pakota raportointi kuljetuskelvottomille Rx-poikkeuksille jotka ovat muistisirpaleiden tai aktiviteettielämänkaaren ulkopuolella poiston jälkeen
- Tuo/Vie
+ Raportoi yhteensopivuusvirheitä, jotka aiheutuvat vanhoista ohjelmista
+ Pakota raportointi toimituskelvottomille Rx-poikkeuksille, jotka ovat poiston jälkeen muistisirpaleiden tai aktiviteettielämänkaaren ulkopuolella
+ Tuo/vie
Tuo
Tuo kohteesta
Vie kohteeseen
@@ -377,28 +379,238 @@
\n3. Kirjaudu sisään kysyttäessä.
\n4. Kopioi se nettiosoite johon sinut ohjattiin.
sinun käyttäjänimesi, soundcloud.com/<sinun käyttäjänimesi>
- Ota huomioon että tämä operaatio voi käyttää paljon dataa.
-\nHaluatko jatkaa?
- Toiston nopeuden säätimet
- Musiikkitempo
+ Ota huomioon että tämä operaatio voi käyttää paljon dataa.
+\n
+\nHaluatko jatkaa\?
+ Toistonopeuden säätimet
+ Tempo
Sävelkorkeus
- Irroita tempo ja nopeus toisistaan (saattaa aiheuttaa säröä äänessä)
+ Irrota toisistaan (saattaa aiheuttaa säröytymistä)
Kelaa eteenpäin hiljaisissa kohdissa
Askel
Nollaa
- Jotta olisimme kelpoisia EU:n uuden yleisen tietosuoja-asetuksen (GDPR) kannalta, meidän pitää muistuttaa sinua lukemaan NewPipen tietosuojakäytäntö. Lue se oikeasti. Sinun pitää myös hyväksyä se jotta voit lähettää virheraportin.
+ Noudattaaksemme EU:n yleistä tietosuoja-asetusta (GDPR), meidän pitää muistuttaa sinua lukemaan NewPipen tietosuojakäytäntö. Lue se tarkkaan.
+\nSinun pitää myös hyväksyä se, jotta voit lähettää virheraportin.
Hyväksy
Hylkää
Ei rajaa
Rajoita resoluutiota kun mobiilidata on käytössä
- Pienennä vaihtaessa ohjelmaa
- Toiminto kun vaihdetaan toiseen ohjelmaan päävideosoittimesta — %s
+ Pienennä vaihdettaessa ohjelmaa
+ Toiminto vaihdettaessa toiseen ohjelmaan päävideosoittimesta — %s
Ei koskaan
Pienennä taustasoittimeksi
- Muuta ponnahdusikkunaksi
+ Pienennä ponnahdusikkunasoittimeksi
Peru tilaus
Uusi välilehti
Valitse välilehti
Valmis
Jono
+ Eteen-/taaksepäinkelauksen aika-askeleen pituus
+ Hiljattain lisätyt
+ Paikalliset
+ Pidetyimmät
+ Kieli vaihtuu, kun sovellus uudelleenkäynnistetään.
+ Kommentteja ei voitu ladata
+ Valinta
+ Mitkä välilehdet näytetään pääsivulla
+ Valmis
+ Paina \"Valmis\", kun ratkaistu
+ ∞ videota
+ 100+ videota
+
+ - %s katselija
+ - %s katselijaa
+
+
+ - %s kuuntelija
+ - %s kuuntelijaa
+
+ Ei kuuntelijoita
+ Ei katselijoita
+ Tilaajien lukumäärä ei saatavilla
+ Kytke palvelu, tällä hetkellä valittuna:
+ Myönnä käyttöoikeus näyttää muiden sovellusten päällä
+ Haluatko palauttaa oletusarvot\?
+ Palauta oletusarvot
+ Ei voitu lukea talletettuja välilehtiä, joten käytetään oletusvälilehtiä
+ Tiedosto siirretty tai poistettu
+ Lataaminen ulkoiselle SD-kortille ei ole mahdollista. Nollataanko latauskansion sijainti\?
+ Ulkoinen tallennustila ei käytettävissä
+ Ohje
+ Ilmoitukset uudesta NewPipe-versiosta
+ Sovelluspäivitysilmoitus
+ Tiedosto poistettu
+ Esittäjät
+ Albumit
+ Kappaleet
+ Tapahtumat
+ Videot
+ Tämä video on ikärajoitettu.
+\n
+\nSalli ikärajoitettu sisältö asetuksissa katsoaksesi.
+ YouTuben rajoitettu tila
+ Päivitykset
+ Instanssi on jo olemassa
+ Vain HTTPS-URL:t ovat tuettuja
+ Instanssia ei voitu vahvistaa
+ Syötä instanssin URL
+ Lisää instanssi
+ Hae instansseja, joista pidät, osoitteesta %s
+ Valitse PeerTube-suosikki-instanssisi
+ PeerTube-instanssit
+ Automaattinen toisto
+ Tietojen tyhjennys
+ Jatka toistoa
+ Vaihda latauskansioita, että muutokset tulevat voimaan
+ Palvelujen alkuperäiset tekstit näkyvät suoratoistettavassa sisällössä
+ Käytä eleitä ohjataksesi soittimen kirkkautta
+ Kirkkauden eleohjaus
+ Käytä eleitä ohjataksesi soittimen äänenvoimakkuutta
+ Äänenvoimakkuuden eleohjaus
+ Poista käytöstä piilottaaksesi kommentit
+ Toistokohdat poistettu.
+ Poistetaanko kaikki toistokohdat\?
+ Poistaa kaikki toistokohdat
+ Poista toistokohdat
+ Näytä toistokohtien osoittimet listoissa
+ Kohdat listoissa
+ Palauta edellinen toistokohta
+ Aiemmin katsotut ja soittolistaan lisätyt videot poistetaan.
+\nOletko varma\? Tätä ei voi peruuttaa!
+ Poistetaanko katsotut videot\?
+ Kyllä ja osittain katsotut videot
+ Pysäytä
+ Tyhjennä lataushistoria
+ Sulje
+ Poista ladatut tiedostot
+ Haluatko tyhjentää lataushistoriasi vai poistaa kaikki ladatut tiedostot\?
+ Ei kommentteja
+ Näytä kommentit
+ Kanavan hahmokuvake
+ Videon esikatselukuva näytetään lukitusnäytöllä, kun käytetään taustasoitinta
+ Videon esikatselukuva lukitusnäytöllä
+ Kenen toimesta: %s
+ Onko syötteen lataaminen mielestäsi liian hidas\? Voit koittaa ottaa käyttöön nopean lataamisen (voit vaihtaa sen asetuksista tai painamalla alla olevaa painiketta).
+\n
+\nNewPipe tarjoaa kaksi tapaa ladata syöte:
+\n• Koko tilatun kanavan lataaminen, mikä on hidasta, mutta lataa syötteen kokonaisuudessaan.
+\n• Erityisen palvelu-endpointin käyttö, mikä on nopeaa, mutta yleensä ei lataa syötettä kokonaisuudessaan.
+\n
+\nNäiden kahden välinen ero on, että nopean lataamista tiedoista yleensä puuttuu esim. sisällön kesto tai tyyppi (ei voi erotella livevideoita ja tavallisia) tai se ei lataa kaikkea sisältöä.
+\n
+\nYouTuve on esimerkki palvelusta, joka tarjoaa nopean tavan RSS-syötteen avulla.
+\n
+\nValinta riippuu siitä, mitä halutaan: nopeutta vai tarkkoja tietoja.
+ Oletuskioski
+ %s:n luoma
+ NewPipe ei vielä tue tätä sisältöä.
+\n
+\nToivottavasti sitä tuetaan myöhemmässä versiossa.
+ Poista nopea tila käytöstä
+ Ota nopea tila käyttöön
+ Saatavilla joissakin palveluissa, on yleensä paljon nopeampi, mutta voi palauttaa rajallisen määrän sisältöä ja usein epätäydelliset tiedot (esim. ei kestoa, ei sisällön tyyppiä, ei livestatusta).
+ Hae erityisestä syötteestä, kun sellainen on saatavilla
+ Päivitä aina
+ Edellisestä päivityksestä kulunut aika, jonka jälkeen tilaus katsotaan vanhentuneeksi
+ Syötteen päivitysvälin kynnysarvo
+ Syöte
+ Uusi
+ Haluatko poistaa tämän ryhmän\?
+ Nimi
+ Tyhjä ryhmän nimi
+
+ - %d valittu
+ - %d valittu
+
+ Tilausta ei valittuna
+ Valitse tilaukset
+ Käsitellään syötettä…
+ Ladataan syötettä…
+ Ei ladattu: %d
+ Syöte viimeksi päivitetty: %s
+ Kanavaryhmät
+
+ - %d päivä
+ - %d päivää
+
+
+ - %d tunti
+ - %d tuntia
+
+
+ - %d minuutti
+ - %d minuuttia
+
+
+ - %d sekunti
+ - %d sekuntia
+
+ ExoPlayerin rajoitusten takia kelauksen aika-askel asetettiin %d sekuntiin
+ Poista katsotut
+ Järjestelmän oletus
+ Sovelluksen kieli
+ Valitse instanssi
+ \'Storage Access Framework\' sallii lataukset ulkoiselle SD-kortille.
+\nJotkin laitteet eivät ole yhteensopivia
+ Käytä SAF:ää
+ Jokaisen latauksen kohde kysytään.
+\nValitse SAF, jos haluat ladata ulkoiselle SD-kortille
+ Jokaisen latauksen kohde kysytään
+ Kysy mihin ladataan
+ Aloita lataukset
+ Yksi lataus kerrallaan on käynnissä
+ Rajoita latausjonon kokoa
+ Suurin määrä yrityksiä ennen kuin lataus perutaan
+ Uudelleenyritysten maksimimäärä
+ Poistettiin %1$d latausta
+ Tätä latausta ei voi palauttaa
+ Yhteys aikakatkaistiin
+ Eteneminen menetettiin, koska tiedosto poistettiin
+ Laitteella ei ole tilaa
+ NewPipe suljettiin, kun se käsitteli tiedostoa
+ Jälkikäsittely epäonnistui
+ Ei löytynyt
+ Palvelin ei hyväksy monisäikeisiä latauksia, yritä uudelleen asetuksella @string/msg_threads = 1
+ Palvelin ei lähetä dataa
+ Palvelimelle ei voi yhdistää
+ Palvelinta ei löytynyt
+ Turvallista yhteyttä ei voitu muodostaa
+ Järjestelmä esti käyttöoikeuden
+ Kohdekansiota ei voi luoda
+ Tiedostoa ei voi luoda
+ Koodi
+ Näytä virhe
+ Tällä nimellä on jo lataus odottamassa
+ Tällä nimellä on jo lataus käynnissä
+ tiedostoa ei voi ylikirjoittaa
+ Ladattu tiedosto, jolla on tämä nimi, on jo olemassa
+ Tämän niminen tiedosto on jo olemassa
+ Ylikirjoita
+ Luo uniikki nimi
+ %s latausta valmiina
+ Lataus valmis
+ Lataus epäonnistui
+ Järjestelmä kieltäytyi toiminnosta
+ palautetaan
+ jälkikäsitellään
+ lisätty jonoon
+ Odottaa
+ Näytä alkuperäinen aika sisällölle
+ Tauota lataukset
+ Hyödyllinen vaihdettaessa mobiilidataan, vaikka joitakin latauksia ei voi pysäyttää
+ Keskeytä käytön mukaan laskutettavilla yhteyksillä
+ tauotettu
+ Napauta ladataksesi
+ NewPipe-päivitys on saatavilla!
+ Vaihda näkymää
+ Listanäkymän ulkoasu
+ Automaattinen
+ Ruudukko
+ Lista
+ Näytä ilmoitus sovelluspäivityksestä, kun uusi versio on saatavilla
+ Päivitykset
+ Automaattisesti luotu (lataajaa ei löytynyt)
+ Poista mykistys
+ Mykistä
+ Konferenssit
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index dc4ca619e..0d14f1390 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -529,7 +529,7 @@
Une miniature de la vidéo sera affichée sur l’écran de verrouillage lorsque le lecteur en arrière-plan est utilisé
Effacer l’historique de téléchargement
Supprimer les fichiers téléchargés
- %1$s téléchargements supprimés
+ %1$d téléchargements supprimés
Autoriser l’affichage au-dessus d’autres applications
Langue de l’application
Prédéfini par le système
@@ -562,7 +562,7 @@
Dernière mise à jour du flux : %s
Pas chargés : %d
Chargement du flux…
- Préparation du flux…
+ Traitement du flux…
Choisir les abonnements
Aucun abonnement sélectionné
@@ -577,21 +577,21 @@
Seuil de mise à jour du flux
Temps depuis la dernière mise à jour pour que le flux ne soit plus considéré comme à jour — %s
Toujours mettre à jour
- Charger depuis un service dédié quand c\'est possible
- 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 ».
+ Récupérer depuis un flux dédié lorsque disponible
+ Disponible dans certains services, c’est généralement beaucoup plus rapide mais cela peut renvoyer un nombre limité d’éléments et souvent avec des informations incomplètes (p. ex. aucune durée, de type d’élément ou de statut en direct).
Activer le mode rapide
Désactiver le mode rapide
- 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).
+ Pensez-vous que le chargement du flux est trop lent \? Si c’est le cas, essayez le chargement rapide (vous pouvez le modifier dans les paramètres ou en pressant le bouton ci-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.
+\nNewPipe propose deux stratégies de chargement de flux :
+\n• Récupérer la totalité de la chaîne d’abonnement, ce qui est lent mais complet.
+\n• Utiliser un service dédié, ce qui est rapide mais souvent incomplet.
\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.
+\nLa 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 (pas de distinction possible entre les vidéos en direct et les autres), et elle pourrait retourner moins d’éléments.
\n
-\n YouTube est un exemple qui offre cette méthode rapide avec le flux RSS.
+\nYouTube est un exemple de service qui offre une méthode rapide avec son flux RSS.
\n
-\n Donc le choix vous revient : Préferez-vous la vitesse ou des informations précises \?
+\nDonc le choix se résume à ce que vous préférez : la rapidité ou des informations précises.
Aide
Ce contenu n\'est pas encore supporté par NewPipe.\n\nIl le sera peut-être dans une version future.
Albums
@@ -613,4 +613,5 @@
Les textes originaux des services vont être visibles dans les items
Afficher la date originelle sur les items
Mode restreint de YouTube
+ Afficher les abonnements sans groupes uniquement
\ No newline at end of file
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
index 512c46ad3..0ac642b19 100644
--- a/app/src/main/res/values-he/strings.xml
+++ b/app/src/main/res/values-he/strings.xml
@@ -458,7 +458,7 @@
לא ניתן למצוא את השרת
לא ניתן להתחבר לשרת
השרת לא שולח נתונים
- "השרת לא מקבל הורדות רב ערוציות, מוטב לנסות שוב עם @string/msg_threads = 1 "
+ השרת לא מקבל הורדות רב ערוציות, מוטב לנסות שוב עם @string/msg_threads = 1
לא נמצא
העיבוד המאוחר נכשל
עצירה
@@ -540,7 +540,7 @@
תמונה מוקטנת של הסרטון תופיע על מסך הנעילה בעת שימוש בנגן הרקע
מחיקת היסטוריית ההורדות
למחוק את הקבצים שהורדתי
- נמחקו %1$s הורדות
+ נמחקו %1$d הורדות
יש להעניק הרשאה להציג על גבי יישומונים אחרים
שפת היישומון
בררת המחדל של המערכת
@@ -633,4 +633,5 @@
מאת %s
נוצר ע״י %s
תמונה ממוזערת של הערוץ
+ להציג רק מינויים שאינם בקבוצות
\ No newline at end of file
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 95703bdd2..4512e265b 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -467,8 +467,8 @@
Komentare nije moguće učitati
Zatvori
NewPipe je copyleft libre software: možete ga koristiti, proučavati i poboljšavati po volji. Konkretno, možete ga redistribuirati i / ili modificirati pod uvjetima GNU opće javne licence koju je objavila Free Software Foundation, bilo verzije 3 Licence, ili (po vašem izboru) bilo koje kasnije verzije.
- "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."
+ 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.
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.
Nastavi reprodukciju
Vrati zadnji položaj reprodukcije
@@ -496,7 +496,7 @@
Automatski generirano (nije pronađen nijedan autor)
Očisti povijest preuzimanja
Izbriši preuzete datoteke
- Obrisano %1$s preuzimanja
+ Obrisano %1$d preuzimanja
Dajte dopuštenje za prikazivanje na vrhu
Jezik aplikacije
Zadani sustav
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 6b6f1c1ed..1dcfb9413 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -19,7 +19,7 @@
Válassza ki a videófájlok letöltési helyét
Alapértelmezett felbontás
Lejátszás Kodi-val
- A Kore alkalmazás nem található. Telepíted a Kore lejátszót?
+ Telepíted a Kore lejátszót\?
\"Lejátszás Kodi-val\" opció mutatása
Opció mutatása a videók Kodi médiaközponttal való lejátszására
Hang
@@ -78,7 +78,7 @@
Felhasználói jelentés
Videó
Audio
- A kezdéshez koppints a keresésre
+ A kezdéshez koppints a \"Keresés\"-re!
Nem sikerült az összes előnézeti kép betöltése
Nem sikerült a weblap betöltése
Nem sikerült a weblap teljes betöltése
@@ -115,13 +115,13 @@
Nem található stream lejátszó alkalmazás (feltelepítheted a VLC-t a lejátszáshoz).
Megnyitás felugró ablakként
Néhány felbontásnál eltávolítja a hangot
- NewPipe felugró ablak
+ Felugró ablak
Feliratkozás
Feliratkozva
Több infó
Alapértelmezett felugró ablak felbontása
Mutassa a magasabb felbontásokat
- Csak néhány eszköz támogatja a 2K/4K videók lejátszását
+ Csak néhány eszköz tud lejátszani 2K/4K videókat
Alapértelmezett videó formátum
Fekete
Jegyezze meg a felugró ablak helyét és méretét
@@ -173,7 +173,7 @@
Adatfolyam fájl letöltése
Hozzáadás ehhez
Gyorsabb, de pontatlan tekerés használata
- A pontatlan tekerés lehetővé teszi, hogy gyorsabban ugorjon a pozíciókra, de kevesebb pontossággal
+ A pontatlan tekerés lehetővé teszi, hogy gyorsabban ugorjon a pozíciókra, de kevesebb pontossággal. Az 5, 15, vagy 25 másodperces tekerés nem működik ebben a módban.
Bélyegképek betöltése
Kapcsold ki, hogy a megelőzzed bélyegképek betöltését, így csökkentve az adat és memória használatot. Ennek az értéknek a megváltoztatása törli a memóriában és a meghajtón lévő bélyegkép gyorsítótárat.
A bélyegkép gyorsítótár törölve
@@ -374,7 +374,7 @@
Új fül
Válassz fület
Kommentek mutatása
- Kapcsold ki, hogy ne mutassa a kommenteket
+ Kapcsold ki a kommentek elrejtéséhez
Tartalmak alapértelmezett országa
Folytatás főnézetben
Figyelmen kívül hagy
@@ -383,5 +383,9 @@
Sor
a fájl nem írható felül
Az előre- és visszatekerés időtartama
- Videó előnézet megjelenítése a lezárási képernyőn
+ Videó előnézet a lezárási képernyőn
+ Legutóbbi lejátszási pozíció visszaállítása
+ Lejátszás folytatása
+ Megjeleníti a videó bélyegképét a képernyőzáron, amikor a háttér lejátszó van használva
+ Változtasd meg a letöltési helyet, hogy érvénybe lépjen
\ No newline at end of file
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index c567b4479..cc976ecff 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -422,7 +422,7 @@
Kisi
Otomatis
Alihkan Tampilan
- Pembaruan NewPipe Tersedia!
+ Pembaruan NewPipe telah tersedia!
Ketuk untuk mengunduh
Selesai
Tertunda
@@ -524,7 +524,7 @@
Kiosk Default
Hapus riwayat unduhan
Hapus berkas yang diunduh
- %1$s unduhan dihapus
+ %1$d unduhan dihapus
Izinkan untuk ditampilkan di atas aplikasi lain
Bahasa apl
Default sistem
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 06348d427..0b2b3b44b 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -530,7 +530,7 @@
La copertina del video verrà mostrata nella schermata di blocco, durante la riproduzione in sottofondo
Pulisci Cronologia Download
Elimina File Scaricati
- %1$s download eliminati
+ %1$d download eliminati
Consentire la visualizzazione sopra altre applicazioni
Lingua Applicazione
Predefinita di Sistema
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index d9506c770..f66930a0c 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -336,7 +336,8 @@
1 つのアイテムが削除されました。
支援する
- NewPipe プロジェクトはあなたのプライバシーを非常に大切にしています。あなたの同意がない限り、アプリはいかなるデータも収集しません。NewPipe のプライバシー・ポリシーでは、クラッシュリポート送信時にどのような種類のデータが送信・記録されるかを詳細に説明しています。
+ NewPipe プロジェクトはあなたのプライバシーを非常に大切にしています。あなたの同意がない限り、アプリはいかなるデータも収集しません。
+\nNewPipe のプライバシー・ポリシーでは、クラッシュリポート送信時にどのような種類のデータが送信・記録されるかを詳細に説明しています。
NewPipe はコピーレフトなソフトウェアです。あなたは自由にそれを使用し、研究し、そして改善することができます。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。
最終再生日時
最も再生した動画
@@ -411,7 +412,7 @@
グリッド
自動
スイッチビュー
- NewPipeのアップデートがあります!
+ NewPipe のアップデートがあります!
タップでダウンロード
完了
保留中
@@ -523,7 +524,7 @@
バックグラウンドプレイヤーを使用中、ロック画面に動画のサムネイルが表示されるようになります
ダウンロード履歴を消去
ダウンロードしたファイルを消去
- %1$s 個削除しました
+ %1$d 個削除しました
自動生成 (アップローダーが見つかりません)
他のアプリの上に表示する権限を与えてください
アプリの言語
@@ -602,4 +603,5 @@
%s による
%s により作成
チャンネルのサムネイル
+ グループ化されていない登録チャンネルのみ表示
\ No newline at end of file
diff --git a/app/src/main/res/values-jv/strings.xml b/app/src/main/res/values-jv/strings.xml
new file mode 100644
index 000000000..78d2cd6c0
--- /dev/null
+++ b/app/src/main/res/values-jv/strings.xml
@@ -0,0 +1,88 @@
+
+
+ Posisi nang daftar
+ Teruske, loske wae lur
+ Delok sejarah mantan
+ Riwayatmu biyen cuk
+ Duduhke saran nalika nggoleki
+ Goleki saran
+ Gunake gestur gawe ngontrol kepadhangan lan volum
+ Ngontrol kepadhangan ngaggo gesture
+ Kontrol kepadhangan nganggo gestur
+ Gunake gesture gawe ngontrol volum
+ Pokoke teruske muter suara/video
+ Antri otomatis stream bare
+ Sampah metadata wes dibusak
+ Busak kabeh sampah ora kanggo
+ Pateni ben gambar cilik ora ketok, ora boros data lan memori. Iku bakal ngresiki sampah gambar.
+ Sampah gambar wes resik
+ Pateni gawe ngumpetke komentar
+ Duduhke komentar
+ Duduhke gambar cilik
+ Durasi cepet maju/mundure
+ Eling-eling ukuran lan posisi ngambang terakhir
+ Eling-eling ukuran lan posisi ngambang
+ Ireng
+ Peteng
+ Padhang
+ Tema
+ Format video standar
+ Format audio standar
+ Suara ati
+ Gambar cilik video diduduhke nang layar kegembok nalika nganggo pemuter mburi
+ Duduhke pilihan muter video nganggo Kodi
+ Gambar cilik nang lock screen
+ Duduhke pilihan \"Puter nganggo Kodi\"
+ Aplikasi Kore rung ono, pasang\?
+ Puter nganggo Kodi
+ Mung piranti tertentu sing iso muter video 2K/4K
+ Duduhke resolusi luwih gedhe
+ Resolusi ngambang standar
+ Resolusi standar
+ Puter video nalika NewPipe diarani seko aplikasi liyane
+ Puter otomatis
+ Ganti tempat unduhan ben ngefek
+ Pilih tempat kanggo nyimpen suara
+ Suara sing diunduh disimpen nang kene
+ Tempat nyimpen suara
+ Pilih tempat nyimpen video
+ Video unduhan disimpen nang kene
+ Folder video unduhan
+ Tambah nang
+ Ngambang
+ Latar mburi
+ Pilih Tab
+ Tab anyar
+ Daftar sing ditandai
+ Langganan
+ Utama
+ Ndeloke info
+ Ora iso nganyari langganan
+ Ora iso ngubah langganan
+ Wes ora langganan saluran
+ Rasido langganan
+ Pelanggan
+ Langganan
+ Mode ngambang
+ Gunake pemuter suara liyane
+ Busak suara ing resolusi cuk
+ Gunake pemuter video liyane
+ puter
+ Pilih browser
+ Bagi nganggo
+ Maksude: %1$s\?
+ Setelan
+ Goleki
+ Unduh file
+ Unduh
+ Bagi
+ Buka nang mode nyembul
+ Buka nang Browser
+ Orasido
+ Pasang
+ Ra ono pemuter (kowe iso pasang VLC gae muter iku).
+ Raono pemuter. Pasang VLC\?
+ Diterbitke %1$s
+ %1$s penonton
+ Pencet \"Cari\" nek meh mulai
+
\ No newline at end of file
diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml
new file mode 100644
index 000000000..98d8d8edc
--- /dev/null
+++ b/app/src/main/res/values-kab/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Iccer amaynut
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 190c13b71..78550ca5e 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -523,8 +523,8 @@
이 다운로드를 복구할 수 없습니다
인스턴스를 선택하세요
비디어 썸네일 화면 고정을 가능하게 한다
- 백그라운드 플레이어를 사용하는 경우 비디오 썸네일은 고정된 스크린 위에 표시됩니다.
+ 백그라운드 플레이어를 사용하는 경우 비디오 썸네일은 잠금화면 상에 표시됩니다.
다운로드 기록 삭제
다운로드된 파일 삭제
- %1$s 다운로드 삭제
+ %1$d 다운로드 삭제
\ No newline at end of file
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index cf04b9732..47c46cc49 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -534,7 +534,7 @@
کاتێ کارپێکەری پاشبنەما کاردەکات ئەوا وێنۆچکەی ڤیدیۆکە لە ڕوونما داخراوەکەدا نیشاندەدرێت
سڕینەوەی مێژووی داگرتن
سڕینەوەی فایلە داگیراوەکان
- %1$ لە داگرتنەکان سڕانەوە
+ %1$d لە داگرتنەکان سڕانەوە
دەسەڵاتی پێبدە بۆ پیشاندان لەسەرووی ئەپەکانیترەوە
زمانی ئەپ
بنەڕەتی سیستەم
diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml
index e097fb035..b152fb1ae 100644
--- a/app/src/main/res/values-land/dimens.xml
+++ b/app/src/main/res/values-land/dimens.xml
@@ -51,4 +51,6 @@
16sp
+
+ 14sp
diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml
index aa5362b80..bc27edaa4 100644
--- a/app/src/main/res/values-ml/strings.xml
+++ b/app/src/main/res/values-ml/strings.xml
@@ -224,7 +224,7 @@
വീഡിയോ
\'%1$s\' ഡൗൺലോഡ് പട്ടിക നിലവിൽ വന്നു
ഡൗൺലോഡ് പട്ടിക ഉണ്ടാക്കാൻ സാധിച്ചില്ല
- വലിച്ചിഴയ്ക്കൂ!
+ പുനക്രമീകരിക്കാൻ വലിച്ചിടുക
¡ഇബടെ ഒരു കുന്തോമില്ല!
ഫലങ്ങൾ ലഭ്യമല്ല
ഉപയോക്താവിന്റെ റിപോർട്ട്
@@ -574,7 +574,7 @@
ഡൗൺലോഡ് റദ്ദാക്കുന്നതിനുമുമ്പ് പരമാവധി ശ്രമങ്ങൾ
പരമാവധി വീണ്ടും ശ്രമിക്കുന്നു
നിർത്തുക
- 1$s ഡൗൺലോഡുകൾ ഇല്ലാതാക്കി
+ %1$d ഡൗൺലോഡുകൾ ഇല്ലാതാക്കി
ഡൗൺലോഡ് ചെയ്ത ഫയലുകൾ ഇല്ലാതാക്കുക
നിങ്ങളുടെ ഡൗൺലോഡ് ചരിത്രം മായ്ക്കണോ ഡൗൺലോഡ് ചെയ്ത എല്ലാ ഫയലുകളും ഇല്ലാതാക്കണോ\?
ഡൗൺലോഡ് ചരിത്രം മായ്ക്കുക
@@ -606,4 +606,10 @@
ഡൗൺലോഡ് പൂർത്തിയായി
ഡൗൺലോഡ് പരാജയപ്പെട്ടു
സിസ്റ്റം പ്രവർത്തനം തടഞ്ഞു
+ %s മുഖാന്തരം
+ %s സൃഷ്ടിച്ചത്
+ ചാനൽ ലഘുചിത്രം
+ സേവനങ്ങളിൽ നിന്നുള്ള യഥാർത്ഥ വാചകങ്ങൾ സ്ട്രീം ഇനങ്ങളിൽ ദൃശ്യമാകും
+ ഇനങ്ങളിൽ യഥാർത്ഥ സമയം മുമ്പ് കാണിക്കുക
+ യുട്യൂബ് നിയന്ത്രിത മോഡ്
\ No newline at end of file
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index e6e3198e5..6adb1c9f8 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -516,7 +516,7 @@
Velg en instans
Tøm nedlastingshistorikk
Slett nedlastede filer
- Slettet %1$s nedlastninger
+ Slettet %1$d nedlastninger
Aktiver videominiatyrbilde på låseskjerm
Når du bruker bakgrunnsspilleren, vises ent videominiatyrbilde på låseskjermen
Velg dine favoritter blandt PeerTube-instansene
@@ -582,4 +582,10 @@
Artister
Album
Sanger
+ Ja, og delvist sette videoer
+ Fjern sette videoer\?
+ Fjern sette
+ Opprettet av %s
+ Av %s
+ Begrenset YouTube-modus
\ No newline at end of file
diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml
index f91ae0452..aac2a27ae 100644
--- a/app/src/main/res/values-ne/strings.xml
+++ b/app/src/main/res/values-ne/strings.xml
@@ -190,7 +190,7 @@
यस्तो कुनै फाइल / सामग्री स्रोत भेटिएन
फाइल अवस्थित छैन वा पढ्न वा यो लेख्न अनुमति अभाव छ
फाइलको नाम खाली हुन सक्दैन
- एउटा त्रुटि देखापर्यो:%1$
+ एउटा त्रुटि देखापर्यो:%s
कुनै धाराहरु डाउनलोड गर्न उपलब्ध छैनन्
बचत गरिएका ट्याबहरू पढ्न सकिएन, पूर्वनिर्धारित प्रयोग गरिदै
फेरी पहिलाकै अवस्थामा लैजाऊ
@@ -276,7 +276,7 @@
सेटिङहरू
बारेमा
तेस्रो-पक्ष इजाजत पत्र
- ©%1$ को %2$s द्वारा %3$ अन्तर्गत
+ ©%1$s को %2$s द्वारा %3$s अन्तर्गत
लाइसेन्स लोड गर्न सकेन
वेबसाइट खुला
बारेमा
@@ -344,7 +344,7 @@
नयाँ पपअपमा लामबद्ध
यहाँ प्ले सुरु
पृष्ठभूमिमा बजाउन सुरु गर्नुहोस
- नयाँ पपअपमा बजाउन सुरु गर्नुहोस
+ पपअपमा बजाउन सुरु गर्नुहोस
ड्रअर खोल्नुहोस
ड्रअर बन्द
यहाँ केही चाँडै प्रकट हुनेछ ;D
@@ -430,7 +430,7 @@
ग्रिड
स्वतः
स्विच दृश्य
- नयाँ पाइप अपडेट उपलब्ध छ!
+ NewPipe अपडेट उपलब्ध छ!
डाउनलोड गर्न ट्याप गर्नुहोस्
समाप्त
रोकिएको
@@ -528,7 +528,7 @@
पृष्ठभूमिमा प्लेयर प्रयोग गर्दा एउटा भिडियो थम्बनेल लक स्क्रिनमा देखाइएको छ
डाउनलोड इतिहास मेटाउ
डाउनलोड गरिएका फाइलहरु मेटाउ
- %1$ डाउनलोडहरु मेटियो
+ %1$d डाउनलोडहरु मेटियो
अन्य अनुप्रयोगहरूमा प्रदर्शन गर्न अनुमति दिने
एप्सको भाषा
सिस्टम पूर्वनिर्धारित
@@ -576,7 +576,7 @@
फिड प्रशोधन गर्दै …
फिड लोड गर्दै …
लोड गरिएको छैन:%d
- फिड पछिल्लो अपडेट गरिएको:%s
+ फिड पछिल्लोपटक अपडेट गरिएको:%s
च्यानल समूहहरू
नयाँ के छ
@@ -591,4 +591,27 @@
- %d मिनेट
- %d मिनेट
+ च्यानल अवतार थम्बनेल
+ भिडियोहरू जुन प्लेलिस्टमा थपिनु अघि र पछि हेरिएको थियो हटाइनेछ।
+\n…
+\n के तपाईँ निश्चित हुनुहुन्छ\? यो उल्ट्याउन सकिदैन!
+ हेरिएका भिडियोहरू हटाउने हो\?
+ हेरिसकेको हटाउनुहोस
+ सेवाहरूबाट मूल पाठहरू स्ट्रिम वस्तुहरूमा देखिने छन्
+ आईटमहरूमा मूल समय पहिले देखाउनुहोस्
+ आनंत भिडियोहरू
+ १००+ भिडियोहरू
+ कलाकारहरू
+ एल्बमहरू
+ गित
+ यो भिडियो उमेर प्रतिबन्धित छ।…
+\n…
+\nएदी तपैंलाई हेर्न परेमा, सेटिंगमा गई “उमेर प्रतिबन्धित समाग्री” सक्षम गर्नुहोस्।
+ यूट्यूब प्रतिबन्धित मोड
+ %s द्वारा
+ %s द्वारा सिर्जना गरिएको
+ यो सामग्री अझै NewPipeमा समर्थित छैन।
+\n…
+\nआशा छ कि भविष्यको संस्करणमा समर्थित हुनेछ।
+ हो र आंशिक रूपमा हेरिएको भिडियोहरू
\ No newline at end of file
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 67677799f..ca4539a60 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -151,7 +151,7 @@
Over
Bijdragers
Licenties
- Vrij en licht streamen voor Android.
+ Open source en lichtgewicht streaming voor Android.
Bekijken op GitHub
Licentie van NewPipe
Hulp is altijd welkom. Of je nu nieuwe ideeën hebt, vertalingen kan aanleveren, wijzigingen in het ontwerp kan verrichten, code kan opschonen of van grote wijzigingen voorzien. Hoe meer hulp, hoe beter het wordt!
@@ -239,10 +239,10 @@
Houd ingedrukt om toe te voegen aan de wachtrij
[Onbekend]
Toevoegen aan wachtrij in de achtergrond
- Toevoegen aan wachtrij in nieuwe pop-up
+ Toevoegen aan wachtrij in pop-up
Begin hier met afspelen
Begin hier met afspelen in de achtergrond
- Begin met afspelen in nieuwe pop-up
+ Begin met afspelen in pop-up
Doneren
NewPipe wordt door vrijwilligers in hun vrije tijd ontwikkeld om jou de beste ervaring te brengen. Geef wat terug zodat onze ontwikkelaars NewPipe nóg beter kunnen maken terwijl ze van hun kopje koffie genieten.
Teruggeven
@@ -426,7 +426,7 @@
Raster
Auto
Wissel van weergave
- NewPipe-update beschikbaar!
+ NewPipe-update is beschikbaar!
Tik om te downloaden
Voltooid
In afwachting van
@@ -527,7 +527,7 @@
Een video afbeelding wordt weergegeven op het vergrendelscherm wanneer de achtergrond speler wordt gebruikt
Download geschiedenis verwijderen
Verwijder gedownloade bestanden
- %1$s downloads verwijderd
+ %1$d downloads verwijderd
Geef toestemming voor weergave over andere apps
Applicatie taal
Systeem taal gebruiken
@@ -610,4 +610,7 @@
Originele teksten van services zijn zichtbaar in stream-items
YouTube beperkte modus
Laat orginele tijd geleden zien
+ De avatar-miniatuur van het kanaal
+ Door %s
+ Gecreëerd door %s
\ No newline at end of file
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 0f029e001..deef7afbd 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -247,10 +247,10 @@
Ustawienia dźwięku
Przytrzymaj, aby zakolejkować
Kolejkuj w tle
- Kolejkuj w nowym wyskakującym okienku
+ Kolejkuj w wyskakującym okienku
Zacznij odtwarzać tutaj
Zacznij odtwarzać w tle
- Zacznij odtwarzać w nowym wyskakującym okienku
+ Zacznij odtwarzać w wyskakującym okienku
Nie znaleziono odtwarzacza strumieniowego (żeby odtworzyć, możesz zainstalować VLC).
Domyślny kraj treści
Usługa
@@ -315,7 +315,7 @@
Wypełnij
Powiększ
Wygenerowane automatycznie
- LeakCanary
+ Wyciek danych
Monitorowanie wycieków pamięci może powodować niestabilność aplikacji podczas zrzutu pamięci
Zgłaszanie błędów poza cyklem życia
Wymusza raportowanie niedostarczonych wyjątków Rx poza cyklem życia fragmentu lub aktywności
@@ -358,14 +358,12 @@
Wysokość dźwięku
twojeID, soundcloud.com/yourid
Odłącz (może powodować zniekształcenia)
- Aby zaimportować obserwowane z SoundCloud, musisz znać identyfikator lub link do swojego profilu. Jeśli znasz którykolwiek z nich, po prostu wpisz go w polu poniżej.
-\n
-\nW przeciwnym wypadku spróbuj poniższych kroków:
-\n
-\n1. Włącz \"tryb stacjonarny\" w przeglądarce (strona, z której zaraz skorzystasz, nie jest dostępna w trybie mobilnym)
-\n2. Odwiedź stronę: %1$s
-\n3. Zaloguj się na swoje konto
-\n4. Skopiuj adres, na który przeglądarka przekieruje cię po zalogowaniu (to jest adres twojego profilu).
+ Zaimportuj profil SoundCloud, wpisując adres URL lub identyfikator:
+\n
+\n1. Włącz „tryb pulpitu” w przeglądarce internetowej (strona nie jest dostępna dla urządzeń mobilnych)
+\n2. Przejdź do tego adresu URL: %1$s
+\n3. Zaloguj się, gdy zostaniesz o to poproszony
+\n4. Skopiuj adres URL profilu, na który zostałeś przekierowany.
Brak źródeł do pobrania
Preferowana akcja \'otwórz\'
Domyślna akcja podczas otwierania zawartości - %s
@@ -384,7 +382,8 @@
NewPipe jest wolnym i bezpłatnym oprogramowaniem: Możesz używać, udostępniać i ulepszać je do woli. W szczególności możesz redystrybuować i/lub modyfikować go zgodnie z warunkami GNU General Public License opublikowanej przez Free Software Fundation w wersji 3, albo (według twojego wyboru) jakąkolwiek późniejszą wersją.
Czy chcesz zaimportować również ustawienia?
Polityka prywatności NewPipe
- Projekt NewPipe bardzo poważnie traktuję politykę prywatności. Aplikacja nie zbiera żadnych danych bez Twojej zgody. Polityka prywatności programu NewPipe szczegółowo wyjaśnia, jakie dane są zbierane i przesyłane, kiedy wysyłasz raport o błędach aplikacji.
+ Projekt NewPipe bardzo poważnie traktuje Twoją prywatność. Dlatego aplikacja nie gromadzi żadnych danych bez Twojej zgody.
+\nPolityka prywatności programu NewPipe szczegółowo wyjaśnia, jakie dane są zbierane i przesyłane, kiedy wysyłasz raport o błędach aplikacji.
Przeczytaj politykę prywatności
Ze względu na wprowadzenie Ogólnego Rozporządzenia o ochronie danych (RODO), chcielibyśmy zwrócić Twoją uwagę na politykę prywatności NewPipe. Proszę przeczytać ją uważnie.
\nMusisz ją zaakceptować, aby przesyłać raporty o błędach.
@@ -536,7 +535,7 @@
Podczas korzystania z odtwarzacza w tle na ekranie blokady wyświetlana jest miniatura filmu
Wyczyść historię pobierania
Usuń pobrane pliki
- Usunięte %1$s pobrania
+ Usunięte %1$d pobrania
Zezwól na wyświetlanie w innych aplikacjach
Język aplikacji
Domyślny systemu
@@ -624,4 +623,5 @@
Przez %s
Utworzone przez %s
Miniatura awatara kanału
+ Pokaż tylko niezgrupowane subskrypcje
\ No newline at end of file
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 16293c528..a0a62ca91 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -310,7 +310,7 @@
Algo aparecerá aqui em breve ;D
Gerado automaticamente
LeakCanary
- A monitoração de vazamento de memória pode pode tornar o app instável
+ A monitoração de vazamento de memória pode tornar o app instável
Reportar erros fora do ciclo de vida
Força relatório de exceções Rx não entregues fora do ciclo de vida do fragmento ou atividade após o descarte
Usar avanço rápido
@@ -428,7 +428,7 @@
Grade
Automático
Mudar exibição
- Atualização do NewPipe disponível!
+ Atualização do NewPipe está disponível!
Toque para baixar
Finalizado
pausado
@@ -440,7 +440,7 @@
Download finalizado
%s downloads terminados
Gerar nome único
- "Sobrescrever "
+ Sobrescrever
Um arquivo baixado com esse nome já existe
Existe um download em progresso com este nome
Mostrar erro
@@ -530,7 +530,7 @@
A capa do vídeo é exibida na tela de bloqueio ao usar o player em segundo plano
Limpar histórico de downloads
Excluir arquivos baixados
- %1$s arquivos excluídos
+ %1$d arquivos excluídos
Permitir exibição sobre outros apps
Idioma do app
Padrão do sistema
@@ -613,4 +613,5 @@
Por %s
Criado por %s
Capa do avatar do canal
+ Mostrar apenas inscrições não agrupadas
\ No newline at end of file
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 3a2a9d4d8..a52946dbd 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -232,7 +232,7 @@
Definições de áudio
Iniciar reprodução aqui
Iniciar reprodução em segundo plano
- Iniciar reprodução numa nova janela
+ Iniciar reprodução num popup
Mostrar informação
Listas de reprodução favoritas
Serviço
@@ -369,7 +369,7 @@
Também deseja importar as definições\?
Toque longo para enfileirar
Colocar em fila em segundo plano
- Colocar em fila num nova janela
+ Pôr na fila num popup
Ação de \'abrir\' preferida
Ação predefinida ao abrir o conteúdo — %s
Definir como Miniatura da Lista de Reprodução
@@ -530,7 +530,7 @@
Uma miniatura de vídeo é mostrada no ecrã de bloqueio quando utilizando o leitor de fundo
Limpar histórico de transferências
Apagar ficheiros transferidos
- %1$s transferências apagadas
+ %1$d transferências apagadas
Permitir sobreposição da janela sobre outras aplicações
Idioma da aplicação
Predefinição do sistema
@@ -613,4 +613,5 @@
Por %s
Criado por %s
Miniatura do avatar do canal
+ Mostrar apenas assinaturas não agrupadas
\ No newline at end of file
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 2670da7eb..913475d8e 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -344,11 +344,11 @@
Предыдущий экспорт
Не удалось импортировать подписки
Не удалось экспортировать подписки
- Импортируйте подписки YouTube, загрузив файл экспорта:
-\n
-\n1. Перейдите по ссылке %1$s
-\n2. Выполните вход.
-\n3. Дождитесь завершения загрузки файла экспорта.
+ Импортируйте подписки YouTube, загрузив файл экспорта:
+\n
+\n1. Перейдите по ссылке %1$s
+\n2. Авторизуйтесь, если требуется
+\n3. Загрузка (файла экспорта) должна начаться автоматически
Импортируйте профиль SoundCloud, введя его URL или ID:
\n
\n1. Включите режим \"Полная версия сайта\" в браузере.
@@ -534,7 +534,7 @@
Показать миниатюру видео на экране блокировки при воспроизведении в фоне
Очистить историю загрузок
Удаление загруженных файлов
- Удалено загрузок: %1$s
+ Удалено загрузок: %1$d
Разрешите отображение поверх приложений
Язык интерфейса
Как в системе
@@ -624,4 +624,5 @@
От %s
Создано %s
Миниатюра значка канала
+ Показывать только несгруппированные подписки
\ No newline at end of file
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 17ba3f3f3..3352c81f8 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -63,15 +63,15 @@
Obsah
Vekovo obmedzený obsah
Toto video je vekovo obmedzené. Povoľte zobrazenie obsahu v nastavení.
- NAŽIVO
+ Naživo
Nemožno kompletne zanalyzovať web
Nemožno nastaviť menu preberania
Živé vysielanie zatiaľ nie je podporované
Nemožno získať žiadny stream
Pardon, toto sa nemalo stať.
- Nahlásiť chybu mejlom
+ Nahlásiť túto chybu mejlom
Pardon, nastala chyba.
- SPRÁVA
+ Nahlásiť
Info:
Čo sa stalo:
Váš komentár (v Angličtine):
@@ -81,7 +81,7 @@
Video
Zvuk
Znova
- Prístup na úložisko bol zakázaný
+ Najskôr povoľte prístup na úložisko
Štart
Pauza
Prehrať
@@ -153,7 +153,7 @@
Hľadané výrazy ukladať lokálne
História pozretí
Ukladať históriu pozretých videí
- Pokračovať po prepnutí zobrazenia
+ Pokračovať v prehrávaní
Pokračovať po prerušeniach (napr. hlasový hovor)
NewPipe notifikácie
Notifikácie pre NewPipe na pozadí a v mini okne
@@ -267,8 +267,8 @@
Vyberte si kanál
Zatiaľ nemáte žiadne odbery kanálov
Vyberte si kiosk
- Export je dokončený
- Import je dokončený
+ Vyexportované
+ Naimportované
Neplatný ZIP súbor
Upozornenie: Nemožno importovať všetky súbory.
Toto prepíše vaše aktuálne nastavenie.
@@ -313,7 +313,7 @@
Vyplniť
Zväčšiť
Používať rýchly posun
- Rýchly posun umožňuje prejsť na novú pozíciu rýchlejšie, ale s menšou presnosťou
+ Rýchly posun umožňuje prejsť na novú pozíciu rýchlejšie, ale s menšou presnosťou. Posúvanie o 5,15 alebo 25 sekúnd s týmto nastavením nefunguje.
Načítanie miniatúr
Vypnutím tejto funkcie sa nebudú vytvárať miniatúry a tým sa ušetrí miesto a pamäť. Zmena nastavení spôsobuje vyčistenie vyrovnávacej pamäte.
Vyrovnávacia pamäť obrázkov vymazaná
@@ -321,7 +321,7 @@
Odstrániť všetky údaje webových stránok vo vyrovnávacej pamäti
Vyrovnávacia pamäť metadát bola vymazaná
Automaticky zaradiť daľší stream
- Automaticky zaradí súvisiaci stream, keď prehrávanie začne na poslednom streame v neopakujúcich sa zoznamoch prehrávania
+ Pokračovať v prehrávaní súvisiacich streamov
Ladenie
Súbor
Neplatný adresár
@@ -337,7 +337,7 @@
Automaticky vygenerované
Titulky
Upravte mierku textu titulkov prehrávača a štýly pozadia. Vyžaduje sa reštart aplikácie.
- Povoliť službu LeakCanary
+ LeakCanary
Monitorovanie pretečenia pamäte môže spôsobiť, že aplikácia nebude reagovať
Nahlásiť mimo-cyklické chyby
Vynútiť hlásenie výnimiek nedoručiteľných Rx mimo časového cyklu fragmentov alebo aktivity po zneškodnení
@@ -419,10 +419,10 @@
Upozornenia na novú verziu NewPipe
Externé úložisko je nedostupné
Sťahovanie na externú SD kartu nie je možné. Obnoviť umiestnenie priečinka na sťahovanie\?
- Chyba pri načítavaní uložených kariet, použijú sa predvolené
+ Nemožno načítať uložené karty, použijú sa predvolené
Obnoviť predvolené nastavenia
Chcete obnoviť predvolené hodnoty\?
- Počet účastníkov nie je k dispozícii
+ Počet odberateľov nie je k dispozícii
Karty, ktoré sa zobrazujú na hlavnej stránke
Výber
Konferencie
@@ -455,7 +455,7 @@
Adresár nemožno vytvoriť
Nemožno vytvoriť súbor
Povolenie odmietnuté systémom
- Bezpečnostné pripojenie zlyhalo
+ Nepodarilo sa vytvoriť zabezpečené pripojenie
Server sa nepodarilo nájsť
Nepodarilo sa pripojiť k serveru
Server neposiela údaje
@@ -537,7 +537,7 @@
Pri prehrávaní videa na pozadí sa na zamknutej obrazovke zobrazí náhľad
Vymazať históriu sťahovania
Vymazať stiahnuté súbory
- %1$s odstránených
+ %1$d odstránených
Súhlas pre zobrazenie cez ďalšie aplikácie
Jazyk aplikácie
Predvolený
@@ -568,8 +568,8 @@
- %d dni
- %d dní
- Skupiny zdrojov
- Najstaršia aktualizácia odberu: %s
+ Skupiny kanálov
+ Aktualizované: %s
Nenačítané: %d
Načítavanie zdroja…
Spracovávanie zdroja…
@@ -622,4 +622,7 @@
\n
\nPokiaľ ho chcete pozerať, musíte povoliť \"Vekovo obmedzený obsah\" v nastaveniach.
YouTube v obmedzenom režime
+ %s
+ Vytvoril %s
+ Minuatúrny avatar kanála
\ No newline at end of file
diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml
index 1d3614bf1..278e27371 100644
--- a/app/src/main/res/values-sq/strings.xml
+++ b/app/src/main/res/values-sq/strings.xml
@@ -90,7 +90,7 @@
Numri maksimal i provave para se të anulohet shkarkimi
Provat maksimale
Ndalo
- U fshinë %1$s shkarkime
+ U fshinë %1$d shkarkime
Fshij skedarët e shkarkuar
A dëshironi të boshatisni historikun e shkarkimeve apo të fshini të gjithë skedarët e shkarkuar\?
Boshatis historikun e shkarkimeve
@@ -610,4 +610,7 @@
Tekstet origjinale nga shërbimet do të jenë të dukshme në objektet e stream
Shfaq titullin origjinal \"kohë më parë\" në objekte
Modaliteti i kufizuar i NewPipe
+ Pamja statike e avatarit të kanalit
+ Nga %s
+ Krijuar nga %s
\ No newline at end of file
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 3a83b8676..23be5276b 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -239,10 +239,10 @@
Ljudinställningar
Håll för att placera i kön
Placera i bakgrunds-kön
- Placera i popup-kön
+ Bifoga i en popup
Börja spela här
Börja spela i bakgrunden
- Börja spela i en ny popup
+ Börja spela i en popup
Donera
NewPipe utvecklas av frivilliga som spenderar sin fritid på att ge dig den bästa användarupplevelsen. Nu är det tid att ge tillbaka för att säkerställa att utvecklarna kan göra NewPipe ännu bättre medan de njuter av en kopp kaffe.
Ge tillbaka
@@ -352,7 +352,7 @@
Autogenererade
Textning
Ändra spelarens textskala och bakgrundsstil. Kräver att appen startar om för att träder i kraft.
- Aktivera LeakCanary
+ LeakCanary
Minnesläcka övervakning kan orsaka att appen inte svarar under heap dumpning
Rapportera out-of-lifecycle fel
Tvinga rapportering av otillåtna Rx-undantag utanför fragment eller aktivitetslivscykel efter uppstädning
@@ -439,7 +439,7 @@
Det finns en pågående nedladdning med det här namnet
Visa fel
Kod
- Säker anslutning misslyckades
+ Kunde inte fastställa en säker anslutning
Kunde inte hitta servern
Kunde inte ansluta till servern
Servern skickar ingen data
@@ -522,4 +522,76 @@
YouTube begränsat läge
Språket ändras när appen har startats om.
Det gick inte att ladda kommentarer
+ Inaktivera snabbläge
+ Aktivera snabbläge
+ Tillgängligt i vissa tjänster det är vanligtvis mycket snabbare men kan returnera en begränsad mängd artiklar och ofta ofullständig information (t.ex. ingen varaktighet, objekttyp, ingen live-status).
+ Hämta från dedikerat flöde när det finns tillgängligt
+ Uppdatera alltid
+ Tid efter senaste uppdatering innan en prenumeration anses vara föråldrad — %s
+ Tröskel för uppdatering av flöde
+ Flöde
+ Ny
+ Vill du ta bort den här gruppen\?
+ Namn
+ Tomt gruppnamn
+
+ - %d vald
+ - %d valda
+
+ Ingen prenumeration vald
+ Välj prenumerationer
+ Bearbetar flöde …
+ Läser in flöde …
+ Ej laddad: %d
+ Flödet senast uppdaterat: %s
+ Kanalgrupper
+
+ - %d dag
+ - %d dagar
+
+
+ - %d timme
+ - &d timmar
+
+
+ - %d minut
+ - %d minuter
+
+
+ - %d sekund
+ - %d sekunder
+
+ På grund av ExoPlayer-begränsningar sattes söktiden till %d sekunder
+ Ja, och delvis tittade videor
+ Videor som har tittats före och efter att de har lagts till i spellistan kommer att tas bort.
+\nÄr du säker\? Detta kan inte göras ogjort!
+ Ta bort tittade videor\?
+ Ta bort tittade
+ Systems standard
+ Appspråk
+ Välj en instans
+ \"Storage Access Framework\" tillåter nedladdningar till ett externt SD-kort.
+\nVissa enheter är inkompatibla
+ Använd SAF
+ Du blir frågad var du vill spara varje nedladdning.
+\nVälj SAF om du vill ladda ner till ett externt SD-kort
+ Du blir frågad var du vill spara varje nedladdning
+ Fråga var du ska ladda ner
+ Pausa nedladdningar
+ Starta nedladdningar
+ En nedladdning körs samtidigt
+ Begränsa nedladdningskön
+ Stäng ner
+ Användbart när du byter till mobildata, även om vissa nedladdningar inte kan avbrytas
+ Avbryt i en uppmätt nätverk
+ Rensa %1$d nedladdningarna
+ Radera nedladdade filer
+ Vill du rensa din nedladdningshistorik eller radera alla nerladdade filer\?
+ Rensa nedladdningshistorik
+ Kunde inte återfinna nedladdningen
+ Anslutnings avbrott
+ Framsteg förlorat, För att filen blev borttagen
+ Inget utrymme kvar på enhet
+ NewPipe stängdes under arbete med en fil
+ Tillåtelse nekat av systemet
\ No newline at end of file
diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml
index 15b6d214e..89bc53111 100644
--- a/app/src/main/res/values-sw600dp/dimens.xml
+++ b/app/src/main/res/values-sw600dp/dimens.xml
@@ -21,4 +21,5 @@
10dp
+ 14sp
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index cbfe624f8..bc4808f59 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -5,7 +5,7 @@
Yayınlanma: %1$s
Akış oynatıcısı bulunamadı. VLC yüklensin mi\?
Yükle
- Vazgeç
+ İptal
Tarayıcıda aç
Paylaş
İndir
@@ -422,7 +422,7 @@
Izgara
Otomatik
Görünümü Değiştir
- NewPipe Güncellemesi Var!
+ NewPipe güncellemesi var!
İndirmek için dokunun
Tamamlandı
durduruldu
@@ -530,7 +530,7 @@
Arka plan oynatıcıyı kullanırken kilit ekranında bir video küçük resmi gösterilir
İndirme geçmişini temizle
İndirilen dosyaları sil
- %1$s indirme silindi
+ %1$d indirme silindi
Diğer uygulamaların üzerinde görüntüleme izni ver
Uygulama dili
Sistem öntanımlısı
@@ -613,4 +613,5 @@
%s tarafından
%s tarafından oluşturuldu
Kanalın avatar küçük resmi
+ Yalnızca kümelenmemiş abonelikleri göster
\ No newline at end of file
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 594a6e224..20e9dbde1 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -618,5 +618,8 @@
Це відео з віковим обмеженням.
\n
\nЩоб побачити його потрібно включите \"Контент 18+\" в налаштуваннях.
- Видалено %1$s завантажень
+ Видалено %1$d завантажень
+ Ескіз аватара каналу
+ Оригінальні тексти сервісів будуть видимі в потокових елементах
+ Режим обмеженого доступу YouTube
\ No newline at end of file
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index d222022d6..5609902e3 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -529,5 +529,5 @@
بیک گراؤنڈ پلیئر استعمال کرتے وقت ایک ویڈیو تھمب نیل کو لاک اسکرین پر دکھایا جائے گا
ڈاؤن لوڈ کی سرگزشت صاف کریں
ڈاؤن لوڈ شدہ فائلیں حذف کریں
- %1$s ڈاؤن لوڈز کو حذف کیا گیا
+ %1$d ڈاؤن لوڈز کو حذف کیا گیا
diff --git a/app/src/main/res/values-v21/styles_services.xml b/app/src/main/res/values-v21/styles_services.xml
index 1c725f887..d40065059 100644
--- a/app/src/main/res/values-v21/styles_services.xml
+++ b/app/src/main/res/values-v21/styles_services.xml
@@ -34,19 +34,19 @@
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index a16c93013..1795dd607 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -520,7 +520,7 @@
\'Storage Access Framework\' cho phép tải về thẻ SD.
\nMột số thiết bị có thể không tương thích
Dùng SAF
- Đã xóa %1$s file tải về
+ Đã xóa %1$d file tải về
Xóa file đã tải về
Xóa lịch sử tải về
Không thể khôi phục bản download này
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 604ad0605..8b87e9b10 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -524,5 +524,5 @@
在后台播放时,锁屏上将会显示视频的缩略图
清除下载历史记录
删除下载了的文件
- 已删除 %1$s 下载
+ 已删除 %1$d 下载
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index b5e4fcbdf..b71d64a1f 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -135,7 +135,8 @@
請稍候…
已複製至剪貼簿
稍後請在設定中選擇下載資料夾
- 使用懸浮視窗模式需要此權限
+ 使用懸浮視窗模式
+\n需要此權限
reCAPTCHA 驗證
已請求 reCAPTCHA 驗證
懸浮視窗
@@ -524,7 +525,7 @@
使用背景播放器時,鎖定畫面上將會顯示影片縮圖
清除下載歷史紀錄
刪除已下載的檔案
- 已刪除 %1$s 個下載
+ 已刪除 %1$d 個下載
給予顯示在其他應用程式上層的權限
應用程式語言
系統預設值
@@ -602,4 +603,5 @@
由 %s
由 %s 建立
頻道大頭貼縮圖
+ 僅顯示未分組的訂閱
\ No newline at end of file
diff --git a/app/src/main/res/values/colors_services.xml b/app/src/main/res/values/colors_services.xml
index 0126ee9ae..a09878fae 100644
--- a/app/src/main/res/values/colors_services.xml
+++ b/app/src/main/res/values/colors_services.xml
@@ -4,44 +4,44 @@
#e53935
#992722
#000000
- #ff4336
+ #e53935
#CD322E
#992722
#FFFFFF
- #ff4336
+ #CD322E
#f57c00
#995700
#000000
- #ff9100
+ #f57c00
#f57c00
#995700
#FFFFFF
- #ff9100
+ #f57c00
#ff6f00
#c43e00
#000000
- #ff833a
+ #ff6f00
#ff6f00
#c43e00
#FFFFFF
- #ff833a
+ #ff6f00
#9e9e9e
#616161
#000000
- #afafaf
+ #9e9e9e
#9e9e9e
#616161
#FFFFFF
- #afafaf
+ #9e9e9e
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 5f58f4c90..d3feb0ea8 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -115,4 +115,5 @@
2dp
4dp
+ 16sp
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index b6c6cfd77..946d586de 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -966,12 +966,15 @@
- @string/default_localization_key
- ace
- ar
+ - ar-ly
- az
- ast
- be
- - bg-bd
- - bn
+ - bg
+ - bn-bd
+ - bn-in
- ca
+ - ckb
- cs
- da
- de
@@ -995,6 +998,8 @@
- in
- it
- ja
+ - jv
+ - kab
- ko
- ku
- lt
@@ -1031,12 +1036,15 @@
- @string/systems_language
- Basa Acèh
- العربية
+ - العربية (ليبيا)
- Azərbaycan dili
- Asturianu
- Беларуская
- български език
- - বাংলা
+ - বাংলা (বাংলাদেশ)
+ - বাংলা (भारत)
- Català
+ - کوردیی سۆرانی
- Čeština
- Dansk
- Deutsch
@@ -1060,6 +1068,8 @@
- Bahasa Indonesia
- Italiano
- 日本語
+ - ꦧꦱꦗꦮ
+ - Tamaziɣt Taqbaylit
- 한국어
- کوردی
- Lietuvių kalba
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f2e79a79b..3625e67f4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -16,6 +16,7 @@
Search
Settings
Did you mean: %1$s?
+ Showing results for: %s
Share with
Choose browser
rotation
@@ -234,11 +235,14 @@
Sorry, that should not have happened.
Guru Meditation.
Report this error via e-mail
+ Copy formatted report
+ Report error on GitHub
+ Please check whether an issue discussing your crash already exists. When creating duplicate tickets, you take time from us which we could spend with fixing the actual bug.
Sorry, some errors occurred.
Report
Info:
What happened:
- What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:
+ What:\\nRequest:\\nContent Language:\\nContent Country:\\nApp Language:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:
Your comment (in English):
Details:
@@ -348,7 +352,7 @@
Settings
About
Third-party Licenses
- © %1$s by %2$s under %3$s
+ © %1$s by %2$s under %3$s
Could not load license
Open website
About
@@ -399,6 +403,8 @@
Channel Page
Select a channel
No channel subscriptions yet
+ Select a playlist
+ No playlists bookmarks yet
Select a kiosk
Exported
Imported
@@ -536,7 +542,7 @@
Auto
Switch View
- NewPipe Update Available!
+ NewPipe update is available!
Tap to download
Finished
Pending
@@ -579,7 +585,7 @@
Clear download history
Do you want to clear your download history or delete all downloaded files?
Delete downloaded files
- Deleted %1$s downloads
+ Deleted %1$d downloads
Stop
Maximum retries
Maximum number of attempts before canceling the download
@@ -637,6 +643,7 @@
Name
Do you want to delete this group?
New
+ Show only ungrouped subscriptions
Feed
Feed update threshold
Time after last update before a subscription is considered outdated — %s
@@ -650,4 +657,5 @@
Channel\'s avatar thumbnail
Created by %s
By %s
-
+ Playlist page
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index fae608074..9018a2d2a 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -12,7 +12,7 @@