> headers = request.headers();
@@ -153,4 +173,47 @@ public class DownloaderImpl extends Downloader {
return new Response(response.code(), response.message(), response.headers().toMultimap(), responseBodyToReturn);
}
+
+ /**
+ * Enable TLS 1.2 and 1.1 on Android Kitkat. This function is mostly taken from the documentation of
+ * OkHttpClient.Builder.sslSocketFactory(_,_)
+ *
+ * If there is an error, the function will safely fall back to doing nothing and printing the error to the console.
+ *
+ * @param builder The HTTPClient Builder on which TLS is enabled on (will be modified in-place)
+ */
+ private static void enableModernTLS(OkHttpClient.Builder builder) {
+ try {
+ // get the default TrustManager
+ TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
+ TrustManagerFactory.getDefaultAlgorithm());
+ trustManagerFactory.init((KeyStore) null);
+ TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
+ if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
+ throw new IllegalStateException("Unexpected default trust managers:"
+ + Arrays.toString(trustManagers));
+ }
+ X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
+
+ // insert our own TLSSocketFactory
+ SSLSocketFactory sslSocketFactory = TLSSocketFactoryCompat.getInstance();
+
+ builder.sslSocketFactory(sslSocketFactory, trustManager);
+
+ // This will try to enable all modern CipherSuites(+2 more) that are supported on the device.
+ // Necessary because some servers (e.g. Framatube.org) don't support the old cipher suites.
+ // https://github.com/square/okhttp/issues/4053#issuecomment-402579554
+ List cipherSuites = new ArrayList<>();
+ cipherSuites.addAll(ConnectionSpec.MODERN_TLS.cipherSuites());
+ cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA);
+ cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA);
+ ConnectionSpec legacyTLS = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
+ .cipherSuites(cipherSuites.toArray(new CipherSuite[0]))
+ .build();
+
+ builder.connectionSpecs(Arrays.asList(legacyTLS, ConnectionSpec.CLEARTEXT));
+ } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
+ if (DEBUG) e.printStackTrace();
+ }
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java
index bda6132d1..78cb9284a 100644
--- a/app/src/main/java/org/schabi/newpipe/MainActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java
@@ -76,6 +76,7 @@ import org.schabi.newpipe.util.PeertubeHelper;
import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.StateSaver;
+import org.schabi.newpipe.util.TLSSocketFactoryCompat;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.FocusOverlayView;
@@ -113,6 +114,11 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
+ // enable TLS1.1/1.2 for kitkat devices, to fix download and play for mediaCCC sources
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
+ TLSSocketFactoryCompat.setAsDefault();
+ }
+
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
super.onCreate(savedInstanceState);
diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java
index bf446ca1f..fa257cfed 100644
--- a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java
+++ b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistRemoteEntity.java
@@ -1,5 +1,7 @@
package org.schabi.newpipe.database.playlist.model;
+import android.text.TextUtils;
+
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
@@ -72,10 +74,16 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
@Ignore
public boolean isIdenticalTo(final PlaylistInfo info) {
- return getServiceId() == info.getServiceId() && getName().equals(info.getName()) &&
- getStreamCount() == info.getStreamCount() && getUrl().equals(info.getUrl()) &&
- getThumbnailUrl().equals(info.getThumbnailUrl()) &&
- getUploader().equals(info.getUploaderName());
+ /*
+ * Returns boolean comparing the online playlist and the local copy.
+ * (False if info changed such as playlist name or track count)
+ */
+ return getServiceId() == info.getServiceId()
+ && getStreamCount() == info.getStreamCount()
+ && TextUtils.equals(getName(), info.getName())
+ && TextUtils.equals(getUrl(), info.getUrl())
+ && TextUtils.equals(getThumbnailUrl(), info.getThumbnailUrl())
+ && TextUtils.equals(getUploader(), info.getUploaderName());
}
public long getUid() {
diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
index 29208b0e0..4fbf4ab5f 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -38,6 +38,7 @@ import com.nononsenseapps.filepicker.Utils;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.RouterActivity;
import org.schabi.newpipe.extractor.MediaFormat;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.localization.Localization;
@@ -368,6 +369,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
toolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.okay) {
prepareSelectedDownload();
+ if (getActivity() instanceof RouterActivity) {
+ getActivity().finish();
+ }
return true;
}
return false;
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
index 32b83bb22..6941741af 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java
@@ -259,7 +259,7 @@ public class PlaylistFragment extends BaseListInfoFragment {
animateView(headerRootLayout, true, 100);
animateView(headerUploaderLayout, true, 300);
headerUploaderLayout.setOnClickListener(null);
- if (!TextUtils.isEmpty(result.getUploaderName())) {
+ if (!TextUtils.isEmpty(result.getUploaderName())) { // If we have an uploader : Put them into the ui
headerUploaderName.setText(result.getUploaderName());
if (!TextUtils.isEmpty(result.getUploaderUrl())) {
headerUploaderLayout.setOnClickListener(v -> {
@@ -273,6 +273,8 @@ public class PlaylistFragment extends BaseListInfoFragment {
}
});
}
+ } else { // Else : say we have no uploader
+ headerUploaderName.setText(R.string.playlist_no_uploader);
}
playlistCtrl.setVisibility(View.VISIBLE);
@@ -444,4 +446,4 @@ public class PlaylistFragment extends BaseListInfoFragment {
playlistBookmarkButton.setIcon(ThemeHelper.resolveResourceIdFromAttr(activity, iconAttr));
playlistBookmarkButton.setTitle(titleRes);
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java
index f9542850e..8bb16c318 100644
--- a/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java
+++ b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java
@@ -10,6 +10,8 @@ import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization;
+import android.text.TextUtils;
+
import java.text.DateFormat;
public class RemotePlaylistItemHolder extends PlaylistItemHolder {
@@ -28,8 +30,14 @@ public class RemotePlaylistItemHolder extends PlaylistItemHolder {
itemTitleView.setText(item.getName());
itemStreamCountView.setText(String.valueOf(item.getStreamCount()));
- itemUploaderView.setText(Localization.concatenateStrings(item.getUploader(),
+ // Here is where the uploader name is set in the bookmarked playlists library
+ if (!TextUtils.isEmpty(item.getUploader())) {
+ itemUploaderView.setText(Localization.concatenateStrings(item.getUploader(),
NewPipe.getNameOfService(item.getServiceId())));
+ } else {
+ itemUploaderView.setText(NewPipe.getNameOfService(item.getServiceId()));
+ }
+
itemBuilder.displayImage(item.getThumbnailUrl(), itemThumbnailView,
ImageDisplayConstants.DISPLAY_PLAYLIST_OPTIONS);
diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
index 9e72838ad..c60cdac3f 100644
--- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java
@@ -325,6 +325,16 @@ public class LocalPlaylistFragment extends BaseLocalListFragment
NavigationHelper.playOnBackgroundPlayer(activity, getPlayQueue(), false));
+ headerPopupButton.setOnLongClickListener(view -> {
+ NavigationHelper.enqueueOnPopupPlayer(activity, getPlayQueue(), true);
+ return true;
+ });
+
+ headerBackgroundButton.setOnLongClickListener(view -> {
+ NavigationHelper.enqueueOnBackgroundPlayer(activity, getPlayQueue(), true);
+ return true;
+ });
+
hideLoading();
}
diff --git a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
index 50a60ecb1..7c9041385 100644
--- a/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/BasePlayer.java
@@ -178,7 +178,6 @@ public abstract class BasePlayer implements
// Player
//////////////////////////////////////////////////////////////////////////*/
- protected final static int FAST_FORWARD_REWIND_AMOUNT_MILLIS = 10000; // 10 Seconds
protected final static int PLAY_PREV_ACTIVATION_LIMIT_MILLIS = 5000; // 5 seconds
protected final static int PROGRESS_LOOP_INTERVAL_MILLIS = 500;
protected final static int RECOVERY_SKIP_THRESHOLD_MILLIS = 3000; // 3 seconds
@@ -954,12 +953,19 @@ public abstract class BasePlayer implements
public void onFastRewind() {
if (DEBUG) Log.d(TAG, "onFastRewind() called");
- seekBy(-FAST_FORWARD_REWIND_AMOUNT_MILLIS);
+ seekBy(-getSeekDuration());
}
public void onFastForward() {
if (DEBUG) Log.d(TAG, "onFastForward() called");
- seekBy(FAST_FORWARD_REWIND_AMOUNT_MILLIS);
+ seekBy(getSeekDuration());
+ }
+
+ private int getSeekDuration() {
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ final String key = context.getString(R.string.seek_duration_key);
+ final String value = prefs.getString(key, context.getString(R.string.seek_duration_default_value));
+ return Integer.parseInt(value);
}
public void onPlayPrevious() {
diff --git a/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java b/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java
index d8c36e5cb..a0c16af75 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/PeertubeInstanceListFragment.java
@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.text.InputType;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -88,6 +89,13 @@ public class PeertubeInstanceListFragment extends Fragment {
public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) {
super.onViewCreated(rootView, savedInstanceState);
+ initViews(rootView);
+ }
+
+ private void initViews(@NonNull View rootView) {
+ TextView instanceHelpTV = rootView.findViewById(R.id.instanceHelpTV);
+ instanceHelpTV.setText(getString(R.string.peertube_instance_url_help, getString(R.string.peertube_instance_list_url)));
+
initButton(rootView);
RecyclerView listInstances = rootView.findViewById(R.id.instances);
@@ -203,17 +211,18 @@ public class PeertubeInstanceListFragment extends Fragment {
private void showAddItemDialog(Context c) {
final EditText urlET = new EditText(c);
+ urlET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
urlET.setHint(R.string.peertube_instance_add_help);
AlertDialog dialog = new AlertDialog.Builder(c)
.setTitle(R.string.peertube_instance_add_title)
.setIcon(R.drawable.place_holder_peertube)
- .setView(urlET)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.finish, (dialog1, which) -> {
String url = urlET.getText().toString();
addInstance(url);
})
.create();
+ dialog.setView(urlET, 50, 0, 50, 0);
dialog.show();
}
@@ -237,6 +246,7 @@ public class PeertubeInstanceListFragment extends Fragment {
@Nullable
private String cleanUrl(String url){
+ url = url.trim();
// if protocol not present, add https
if(!url.startsWith("http")){
url = "https://" + url;
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 20e88c4c7..16bffea9a 100644
--- a/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java
+++ b/app/src/main/java/org/schabi/newpipe/streams/OggFromWebMWriter.java
@@ -13,7 +13,7 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-import javax.annotation.Nullable;
+import androidx.annotation.Nullable;
/**
* @author kapodamy
diff --git a/app/src/main/java/org/schabi/newpipe/util/TLSSocketFactoryCompat.java b/app/src/main/java/org/schabi/newpipe/util/TLSSocketFactoryCompat.java
new file mode 100644
index 000000000..d8b6f78f5
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/TLSSocketFactoryCompat.java
@@ -0,0 +1,104 @@
+package org.schabi.newpipe.util;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+
+import static org.schabi.newpipe.MainActivity.DEBUG;
+
+
+/**
+ * This is an extension of the SSLSocketFactory which enables TLS 1.2 and 1.1.
+ * Created for usage on Android 4.1-4.4 devices, which haven't enabled those by default.
+ */
+public class TLSSocketFactoryCompat extends SSLSocketFactory {
+
+
+ private static TLSSocketFactoryCompat instance = null;
+
+ private SSLSocketFactory internalSSLSocketFactory;
+
+ public static TLSSocketFactoryCompat getInstance() throws NoSuchAlgorithmException, KeyManagementException {
+ if (instance != null) {
+ return instance;
+ }
+ return instance = new TLSSocketFactoryCompat();
+ }
+
+
+ public TLSSocketFactoryCompat() throws KeyManagementException, NoSuchAlgorithmException {
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, null, null);
+ internalSSLSocketFactory = context.getSocketFactory();
+ }
+
+ public TLSSocketFactoryCompat(TrustManager[] tm) throws KeyManagementException, NoSuchAlgorithmException {
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, tm, new java.security.SecureRandom());
+ internalSSLSocketFactory = context.getSocketFactory();
+ }
+
+ public static void setAsDefault() {
+ try {
+ HttpsURLConnection.setDefaultSSLSocketFactory(getInstance());
+ } catch (NoSuchAlgorithmException | KeyManagementException e) {
+ if (DEBUG) e.printStackTrace();
+ }
+ }
+
+ @Override
+ public String[] getDefaultCipherSuites() {
+ return internalSSLSocketFactory.getDefaultCipherSuites();
+ }
+
+ @Override
+ public String[] getSupportedCipherSuites() {
+ return internalSSLSocketFactory.getSupportedCipherSuites();
+ }
+
+ @Override
+ public Socket createSocket() throws IOException {
+ return enableTLSOnSocket(internalSSLSocketFactory.createSocket());
+ }
+
+ @Override
+ public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
+ return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));
+ }
+
+ @Override
+ public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
+ return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
+ }
+
+ @Override
+ public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
+ return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));
+ }
+
+ @Override
+ public Socket createSocket(InetAddress host, int port) throws IOException {
+ return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
+ }
+
+ @Override
+ public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
+ return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));
+ }
+
+ private Socket enableTLSOnSocket(Socket socket) {
+ if (socket != null && (socket instanceof SSLSocket)) {
+ ((SSLSocket) socket).setEnabledProtocols(new String[]{"TLSv1.1", "TLSv1.2"});
+ }
+ return socket;
+ }
+}
\ 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 86cbbb59a..3ad4c2f39 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -20,7 +20,7 @@
يتم تخزين ملفات الفيديو التي تم تنزيلها هنا
مجلد تحميل الفيديو
"لا يمكن إنشاء مجلد للتنزيلات في '%1$s'"
- إنشاء دليل التنزيل \'%1$s\'
+ دليل التنزيل الذي تم إنشاؤه \'%1$s\'
تثبيت
تطبيق Kore غير موجود. هل تريد تثبيته ؟
مضيء
@@ -42,7 +42,7 @@
مشاركة
مشاركة بواسطة
عرض مقاطع الفيديو \"التالية\" و \"المشابهة\"
- عرض خيار تشغيل الفيديو عبر مركز وسائط كودي
+ عرض خيارات تشغيل الفيديو من خلال مركز كودي ميديا
عرض خيار التشغيل بواسطة كودي
السمة
تم النشر يوم %1$s
@@ -69,8 +69,8 @@
مراقبة السجل
التاريخ و ذاكرة التخزين المؤقت
محتوى
- التحميلات
- التحميلات
+ الملفات المحملة
+ الملفات المحملة
الجميع
القناة
الفيديو
@@ -113,11 +113,11 @@
محتوى مقيد بحسب العمر
"إظهار الفيديو المقيد بحسب العمر. يمكن السماح باستخدام هذه المواد من \"الإعدادات\"."
بث مباشر
- تقرير خطأ
+ تقرير عن مشكلة
قائمة التشغيل
نعم
لاحقاً
- تعطيل
+ متوقف
فلتر
تحديث
تنظيف
@@ -200,7 +200,7 @@
فتح الموقع
المساهمون
التراخيص
- مجاني خفيف الوزن بث حي على أندرويد.
+ تطبيق مجاني خفيف الوزن وبث حي على نظام أندرويد.
ساهم
إذا كانت لديك أفكار؛ أو ترجمة، أو تغييرات تخص التصميم، أو تنظيف و تحسين الشفرة البرمجية ، أو تعديلات عميقة عليها، فتذكر أنّ مساعدتك دائما موضع ترحيب. وكلما أتممنا شيئا كلما كان ذلك أفضل !
عرض على GitHub
@@ -234,7 +234,7 @@
التفاصيل
الإعدادات الصوتية
تشغيل هنا
- تشغيل في وضع نافذة منبثقة
+ بدأ التشغيل في نافذة منبثقة جديدة
تحدي الكابتشا
ضغط مطول للإدراج الى قائمة الانتظار
@@ -246,12 +246,12 @@
- %s شاهدو
- - فيديو%s video
- - %s videosفيديوهات
- - %s videosفيديوهات
- - %s videosفيديوهات
- - %s videosفيديوهات
- - %s videosفيديوهات
+ - فيديوهات
+ - فيديوهات
+ - فيديوهات
+ - فيديوهات
+ - فيديوهات
+ - فيديوهات
طلب اختبار الكابتشا مطلوب
© %1$sبواسطة%2$sتحت%3$s
@@ -425,10 +425,10 @@
تتبيه تحديث التطبيق
إيماءة التحكم بالصوت
الأحداث
- إخطارات NewPipe جديدة الإصدار
- ذاكرة التخزين الخارجية غير متوفرة
+ إخطارات لنسخة NewPipe الجديدة
+ وحدة التخزين الخارجية غير متوفرة
"التنزيل على بطاقة SD الخارجية غير ممكن. إعادة تعيين موقع مجلد التحميل؟"
- استخدام خطأ علامات التبويب الافتراضية, أثناء قراءة علامات التبويب المحفوظة
+ باستخدام علامات التبويب الافتراضية ، خطأ أثناء قراءة علامات التبويب المحفوظة
استعادة الضبط الافتراضي
هل تريد استعادة الإعدادات الافتراضية؟
عدد المشتركين غير متاح
@@ -449,7 +449,7 @@
متوقف
في قائمة الانتظار
قيد المعالجة
- قائمة الانتظار
+ قائمه انتظار
تم رفضها من قبل النظام
فشل التنزيل
تم الانتهاء من التحميل
@@ -520,5 +520,39 @@
حذف كل مواقف التشغيل؟
تغيير مجلدات التنزيل إلى حيز التنفيذ
تبديل الخدمة ، المحدد حاليًا:
- الكشك الافتراضي
+ الكشك الافتراضي
+ لاتوجد مشاهدة
+ لا أحد يستمع
+ ستتغير اللغة بمجرد إعادة تشغيل التطبيق.
+
+ - مشاهد
+ - مشاهدة
+ - مشاهدة
+ - مشاهدات
+ - مشاهدات
+ - مشاهدات
+
+
+ - مستمع
+ - مستمع
+ - مستمعين
+ - مستمعين
+ - مستمعين
+ - مستمعين
+
+ تسريع إلى الأمام/-ترجيع وقت البحث
+ نموذج بيرتوب
+ تعيين حالات بيرتوب المفضلة لديك
+ إضافة نموذج
+ أدخل رابط نموذج
+ فشل في التحقق من النموذج
+ فقط عناوين https المدعومة
+ نموذج موجود بالفعل
+ محلي
+ أضيف مؤخرا
+ الأكثر إعجابا
+ تم إنشاؤه-تلقائيًا (لم يتم العثور على برنامج تحميل)
+ استرد
+ لا يمكن استرداد هذا التنزيل
+ اختيار نموذج
\ 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 d97835b80..8714c6aca 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
@@ -38,8 +38,8 @@
稍后
网络错误
- - %s 个视频
-
+ - 视频
+
禁用
背景
@@ -62,7 +62,7 @@
清除观看记录
无
最小化后台播放器
- 最小化小窗口播放器
+ 最小化悬浮窗播放器
频道
播放列表
取消订阅
@@ -91,7 +91,7 @@
存储访问权限已被拒绝
- %1$s 次观看
-
+
千
百万
@@ -111,7 +111,7 @@
请稍候…
复制至剪贴板
reCAPTCHA验证码
- 弹出
+ 悬浮窗播放
关于NewPipe
设置
关于
@@ -124,14 +124,14 @@
许可证
下载
文件名中允许的字符
- 无效字符将会替换为此字符
+ 无效字符将会被替换为此
字母和数字
最特殊字符
没有结果
没有订阅者
- %s个订阅者
-
+
没有视频
拖动以重新排序
@@ -143,7 +143,7 @@
未安装用于播放此文件的应用程序
已删除1个项目。
哪些标签需要在主页上展示
- 列表观看模式
+ 列表视图模式
已完成
等待中…
已暂停
@@ -155,4 +155,364 @@
%s 次下载已完成
没有评论
切换服务,当前选择:
+ 找不到串流播放器。您想安装 VLC 吗?
+ 旋转
+ 使用第三方视频播放器
+ 使用第三方视频播放器
+ 音频下载文件夹
+ 从其他应用打开 NewPipe 时就播放视频
+ 默认分辨率
+ 找不到Kore。是否安装?
+ 显示“用Kodi播放”选项
+ 显示“通过Kodi media center播放视频的选项”
+ 音频
+ 默认音频格式
+ 显示“下一个”和“类似的”视频
+ 视频和音频
+ 在后台播放
+ 播放
+ 内容
+ 受年龄限制的内容
+ 显示受年龄限制的视频。可从设置允许此类内容。
+ 直播
+ 下载
+ 下载
+ 错误报告
+ 错误
+ 无法加载所有缩略图
+ 无法解密视频 URL 的签名
+ 无法解析网址
+ 无法完全解析网址
+ 内容不可用
+ 无法设置下载菜单
+ 暂时不支持观看直播
+ 无法获得任何信息流
+ 无法加载图像
+ App UI 崩溃
+ 抱歉,这不应该发生的。
+ 通过电子邮件报告错误
+ 抱歉,发生了一些错误。
+ 报告
+ 信息:
+ 发生了什么:
+ 详情:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:
+ 您的注释(请用英文):
+ 详细信息:
+ 视频预览缩略图
+ 播放视频,时长:
+ 视频上传者的头像缩略图
+ 字节
+ 错误的 URL 或未联网
+ NewPipe下载中
+ 请稍后在设置中设定下载目录
+ 用悬浮窗模式
+\n需要此权限
+ reCAPTCHA验证
+ 请求的新的CAPTCHA验证
+ NewPipe悬浮窗模式
+ 在悬浮窗中播放
+ 默认悬浮窗分辨率
+ 使用更高的分辨率
+ 仅某些设备支持播放2K / 4K视频
+ 清除
+ 记住悬浮窗的尺寸与位置
+ 记住最后一次使用悬浮窗的大小和位置
+ 悬浮窗
+ 调整大小
+ 删除“某些”分辨率的音频
+ 播放器手势控制
+ 使用手势控制播放器的亮度和音量
+ 显示搜索建议
+ 最佳分辨率
+ 开源小巧的Android媒体播放器。
+ 在GitHub上查看
+ NewPipe开源许可证
+ 你是否有想:翻译、设计、清理或重型代码更改 ——我们始终欢迎你来贡献!
+ 阅读许可证
+ 贡献
+ 替换字符
+ 取消订阅频道
+ 无法修改订阅
+ 无法更新订阅
+ 主页面
+ 订阅
+ 新增功能
+ 恢复前台焦点
+ 中断后继续播放(例如突然来电后)
+ 搜索历史记录
+ 在本地存储搜索查询记录
+ 记录已观看视频
+ 历史
+ 已搜索
+ 已观看
+ 历史记录功能已关闭
+ 历史
+ 历史记录为空
+ 清除历史记录
+ NewPipe 通知
+ NewPipe 后台播放和悬浮窗播放的通知
+ 默认视频格式
+ 行为
+ 空空如也...
+ 0次观看
+ 项目已删除
+ 是否要从搜索历史记录中删除此项目?
+ 显示在主页面内容
+ 空白页
+ 『时下流行』页-自定义
+ 订阅页
+ Feed 页面
+ 频道页
+ 选择一个频道
+ 尚未订阅频道
+ 选择一个时下流行页
+ 『时下流行』
+ 趋势
+ 前50
+ 最新与热门
+ 显示 \"长按添加\" 说明
+ 在视频详情页中,按下背景播放或悬浮窗播放按钮时显示提示
+ 已加入后台播放播放列表
+ 已加入悬浮窗播放列表
+ 无法播放此串流
+ 发生无法恢复播放器错误
+ 恢复播放器错误
+ 后台播放
+ 悬浮窗播放器
+ 移除
+ 详情
+ 音频设置
+ 长按队列
+ [未知]
+ 添加到后台部分队列
+ 添加至新悬浮窗列表
+ 开始在此处开始播放
+ 开始后台播放
+ 开始在新悬浮窗中播放
+ 捐赠
+ NewPipe 是由志愿者花费时间为您带来最佳体验开发的。回馈帮助开发人员在享用一杯咖啡的同时,让 NewPipe 变得更好。
+ 回馈
+ 网站
+ 请访问 NewPipe 网站了解更多信息和讯息。
+ 默认国家/地区
+ 切换方向
+ 切换到背景播放
+ 切换到悬浮窗播放
+ 切换到主页面
+ 服务
+ 打开抽屉
+ 关闭抽屉
+ 第三方播放器不支持此类型链接
+ 无效 URL
+ 未找到视频串流
+ 找不到音频串流
+ 视频播放器
+ 后台播放器
+ 悬浮窗播放器
+ 正在获取信息…
+ 正在加载请求的内容
+ 导入数据库
+ 导出数据库
+ 覆盖当前历史记录和订阅
+ 导出历史记录、订阅和播放列表
+ 导出成功
+ 导入成功
+ 没有有效的ZIP文件
+ 警告:无法导入所有文件。
+ 这将覆盖当前设置。
+ 显示信息
+ 已收藏
+ 确定要从观看历史记录中删除该项吗?
+ 是否确实要从历史记录中删除所有项目?
+ 最后播放
+ 播放最多
+ 总是寻问
+ 新建播放列表
+ 删除
+ 重 命名
+ 名称
+ 添加到播放列表
+ 设为播放列表缩略图
+ 收藏播放列表
+ 删除收藏
+ 删除此播放列表?
+ 新建播放列表成功
+ 加入播放列表成功
+ 播放列表缩略图更改成功。
+ 无法删除播放列表
+ 无字幕
+ 适应屏幕
+ 填充屏幕
+ 缩放
+ 敬请等待
+ 调试
+ 自动生成
+ 启用LeakCanary
+ 『内存泄漏监视』可能导致应用在『核心转储』时无响应
+ 报告『提前结束Android生命周期』错误
+ 强制报告处理后的未送达的Activity或Fragment生命周期之外的Rx异常
+ 使用快速不精确搜索
+ 粗略定位播放:允许播放器以略低的精确度为代价换取更快的定位速度
+ 自动播放下一个
+ 当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表
+ 没有此文件夹
+ 无相似文件/内容源
+ 该文件不存在 或 缺少读写该文件的权限
+ 文件名不能为空
+ 发生错误: %1$s
+ 导入/导出
+ 导入
+ 从...导入
+ 导出到...
+ 正在导入…
+ 正在导出…
+ 导入文件
+ 以前的导出
+ 无法导入订阅
+ 无法导出订阅
+ 通过下载导出文件来导入 YouTube 订阅:
+\n
+\n1. 转到此网站: %1$s
+\n2. 登录(如果需要)
+\n3. 应该立即开始下载(即导出文件)
+ 通过键入网址或你的 ID 导入 SoundCloud 配置文件:
+\n
+\n1. 在浏览器中启用\"电脑模式\"(该网站不适用于移动设备)
+\n2. 转到此 URL: %1$s
+\n3. 登录(如果需要)
+\n4. 复制重定向的配置文件下载地址。
+ 你的 ID:soundcloud.com/[你的ID]
+ 该操作消耗大量流量,
+\n你想继续吗?
+ 关闭可防止加载缩略图,节已省数据和内存使用。(若现在更改会清除内存和储存中缓存)
+ 清空图像缓存成功
+ 清空已缓存元数据
+ 清空已缓存的网页数据
+ 清空元数据缓存成功
+ 播放速度控制
+ 节奏
+ 音调
+ 解除关联(可能导致失真)
+ 首选“打开”操作
+ 打开内容时默认操作: = %s
+ 无可下载的串流内容
+ 字幕
+ 修改播放器字幕比例和背景样式。需要重新启动应用程序才能生效。
+ 删除串流的播放历史和播放位置
+ 删除全部观看记录?
+ 清除搜索历史记录
+ 清除搜索关键词的历史记录
+ 是否删除全部搜索历史记录?
+ 搜索历史记录已删除。
+ NewPipe 是版权自由软件:您可以随时使用、研究共享和改进它。您可以根据自由软件基金会发布的 GNU 通用公共许可证GPLv3或(由您选择的)任何更高版本的许可证重新分发或修改该许可证。
+ 是否要同时导入设置?
+ NewPipe的隐私政策
+ NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。
+\nNewPipe 的隐私政策详细解释了在发送崩溃报告时发送和存储的数据。
+ 阅读隐私政策
+ 为了遵守欧洲一般数据保护条例 (GDPR),我们提请您注意 NewPipe 的隐私政策。请仔细阅读。
+\n您必须接受它才能向我们发送错误报告。
+ 接受
+ 拒绝
+ 无限制
+ 使用移动数据时限制分辨率
+ 切换应用时最小化
+ 从主播放器切换到其他应用时的操作 - %s
+ 静音时快进
+ 滑块[比例尺]
+ 重 置
+ 曲目
+ 用户
+ 选择标签
+ 音量手势控制
+ 使用手势控制播放器的音量
+ 亮度手势控制
+ 使用手势控制播放器的亮度
+ 视频默认语言
+ 应用更新通知
+ NewPipe有新版本的通知
+ 外置存储不可用
+ 无法下载到外部 SD 卡。重置下载文件夹位置?
+ 读取已保存标签时发生错误,因此使用者默认标签
+ 恢复默认
+ 是否恢复默认值?
+ 选择
+ 更新
+ 列表
+ 自动
+ 切换视图
+ 点击下载
+ 后期处理
+ 生成唯一名称
+ 覆盖
+ 正在使用此名称进行下载
+ 显示错误
+ 代码
+ 无法创建目标文件夹
+ 无法创建文件
+ 权限被系统拒绝
+ 安全连接失败
+ 找不到服务器
+ 无法连接到服务器
+ 服务器未发送数据
+ 找不到 NOT FOUND
+ 后期处理失败
+ 清除已完成的下载
+ 停止
+ 最大重试次数
+ 取消下载前的最多尝试次数
+ 在切换到移动流量网络时中断播放
+ 切换至移动数据时可能有用,尽管一些下载无法被暂停
+ 事件
+ 近期大会
+ 显示评论
+ 禁用,以停止显示评论
+
+ - 评论
+
+
+ 无法加载评论
+ 关闭
+ 恢复播放
+ 恢复上次播放位置
+ 列表中的位置
+ 在列表中,显示视频最后一次播放时的播放位置
+ 已删除播放位置记录。
+ 文件被已移动或删除
+ 该名称的文件已经存在
+ 命名冲突,已存在具有此名称文件
+ 无法覆盖文件
+ 有此名称的已暂停下载
+ 处理文件时,NewPipe 已关闭
+ 设备上没有剩余储存空间
+ 进度丢失,文件已被删除
+ 连接超时
+ 你确定吗?
+ 最大下载队列
+ 同时只允许一个下载进行
+ 开始下载
+ 暂停下载
+ 询问下载位置
+ 系统将询问您将每次下载的保存位置
+ 系统将询问您将每次下载的保存位置。
+\n(如果要下载到外部 SD 卡,请选择 SAF)
+ 使用 SAF
+ 存储访问框架(SAF)允许下载文件到外部SD卡。
+\n注:一些设备不兼容SAF
+ 删除播放位置记录
+ 删除所有播放位置记录
+ 删除所有播放位置记录?
+ 更改下载目录让内容生效
+ 『时下流行』页-默认
+ 无人在线观看
+
+ - %s 人在观看
+
+
+ 没人在听
+
+ - %s个听众
+
+
+ 重新启动应用后,语言将更改。
\ No newline at end of file
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index ee48181c8..bcc816577 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -7,8 +7,8 @@
Baixa
Cerca
Paràmetres
- Tria un navegador
- Subscriu-t\'hi
+ Trieu un navegador
+ Subscripció
Subscrit
Mostra la informació
Subscripcions
@@ -37,7 +37,7 @@
Depuració
Contingut
Desactiva les restriccions per edat
- Mostra el vídeo restringit per edat. Pots permetre aquesta mena de continguts des dels paràmetres.
+ Mostra el vídeo restringit per edat. Podeu permetre aquesta mena de continguts des dels paràmetres.
EN DIRECTE
Baixades
Baixades
@@ -46,7 +46,7 @@
Llista de reproducció
Sí
Desactivat
- Esborra
+ Neteja
Millor resolució
Desfés
Sempre
@@ -80,27 +80,27 @@
Col·labora-hi
Lloc web
Llicència del NewPipe
- Llegeix la llicència
+ Llegiu la llicència
Historial
L\'historial està desactivat
Historial
L\'historial és buit
S\'ha esborrat l\'historial
S\'ha eliminat l\'element
- Vols eliminar aquest element de l\'historial de cerca\?
- Vols eliminar aquest element de l\'historial de reproduccions\?
- Segur que vols eliminar tots els elements de l\'historial\?
+ Voleu eliminar aquest element de l\'historial de cerca\?
+ Voleu eliminar aquest element de l\'historial de reproduccions\?
+ Segur que voleu eliminar tots els elements de l\'historial\?
Contingut de la pàgina principal
Pàgina en blanc
Pàgina de subscripcions
- Tria un canal
+ Trieu un canal
S\'ha completat l\'exportació
S\'ha completat la importació
Elimina
Detalls
Paràmetres d\'àudio
Reproductor de vídeo
- Reproductor en segon pla
+ Reproductor en rerefons
Reproductor emergent
Demana-ho sempre
Crea una llista de reproducció
@@ -117,41 +117,41 @@
Per defecte
%1$s reproduccions
Publicat el %1$s
- No s\'ha trobat un reproductor de fluxos. Vols instal·lar el VLC\?
- No s\'ha trobat cap reproductor de fluxos (pots instal·lar el VLC per reproduir-lo).
+ No s\'ha trobat cap reproductor de fluxos. Voleu instal·lar el VLC\?
+ No s\'ha trobat cap reproductor de fluxos (podeu instal·lar el VLC per reproduir-ho).
Obre en mode emergent
Baixa el fitxer de vídeo
- Volies dir: %1$s\?
+ Volíeu dir: %1$s\?
Comparteix-ho amb
rotació
Reproductor de vídeo extern
Mode emergent del NewPipe
- Has eliminat la subscripció d\'aquest canal
+ Heu eliminat la subscripció a aquest canal
No s\'ha pogut modificar la subscripció
No s\'ha pogut actualitzar la subscripció
Principal
- Segon pla
+ Rerefons
Emergent
Afegeix a
- Els fitxers de vídeo baixats s\'emmagatzemen aquí
- Tria la carpeta de baixades per als fitxers de vídeo
+ Els fitxers de vídeo baixats es desen aquí
+ Trieu la carpeta de baixades per als fitxers de vídeo
Els fitxers d\'àudio baixats es desen aquí
- Tria la carpeta de baixada per als fitxers d\'àudio
- Reprodueix un vídeo quan el NewPipe s\'executa des d\'una altra aplicació
+ Trieu la carpeta de baixada per als fitxers d\'àudio
+ Reprodueix un vídeo quan el NewPipe s\'executa des d\'altra aplicació
Resolució per defecte del mode emergent
Mostra resolucions superiors
- Només alguns dispositius són compatibles amb la reproducció de vídeos en 2K/4K
- Reprodueix amb Kodi
- No s\'ha trobat l\'aplicació Kodi. Vols instal·lar-la\?
- Activa «Reprodueix amb Kodi»
+ No tots els dispositius són compatibles amb la reproducció de vídeos en 2K/4K
+ Reprodueix amb el Kodi
+ No s\'ha trobat l\'aplicació Kodi. Voleu instal·lar-la\?
+ Mostra «Reprodueix amb el Kodi»
Mostra una opció per reproduir un vídeo amb el centre multimèdia Kodi
Reproductor emergent intel·ligent
Recorda la darrera mida i posició del reproductor emergent
Cerca ràpida poc precisa
La cerca poc precisa permet que el reproductor cerqui una posició més ràpidament amb menys precisió
Carrega les miniatures
- S\'ha esborrat la memòria cau d\'imatges
- Esborra les metadades de la memòria cau
+ S\'ha eliminat la memòria cau d\'imatges
+ Elimina les metadades de la memòria cau
S\'ha esborrat la memòria cau de metadades
Afegeix vídeos relacionats a la cua
Control per gestos del reproductor
@@ -165,15 +165,15 @@
País per defecte dels continguts
Llengua per defecte dels continguts
Emergent
- S\'està reproduint en segon pla
+ S\'està reproduint en rerefons
S\'està reproduint en mode emergent
- Afegit a la cua del reproductor en segon pla
- Afegit a la cua del reproductor emergent
+ S\'ha afegit a la cua del reproductor en rerefons
+ S\'ha afegit a la cua del reproductor emergent
Reprodueix
Notificació del NewPipe
- Notificacions dels reproductors en segon pla o emergents del NewPipe
+ Notificacions dels reproductors en rerefons o emergents del NewPipe
No s\'han pogut carregar totes les miniatures
- No s\'ha pogut desencriptar la signatura de l\'URL del vídeo
+ No s\'ha pogut desxifrar la signatura de l\'URL del vídeo
No s\'ha pogut processar el lloc web
No s\'ha pogut processar del tot el lloc web
Contingut no disponible
@@ -190,41 +190,41 @@
No s\'ha trobat cap flux d\'àudio
La carpeta no existeix
El fitxer o la font de contingut no existeix
- El fitxer no existeix o no teniu permisos per llegir-lo o escriure-hi
+ El fitxer no existeix o bé no teniu permisos de lectura/escriptura
El nom del fitxer no pot estar en blanc
S\'ha produït un error: %1$s
- Informa de l\'error per correu electrònic
+ Informeu de l\'error per correu electrònic
S\'han produït alguns errors.
- INFORMA\'N
+ INFORME
Informació:
Què ha passat:
Comentari (en anglès):
Detalls:
Miniatura de previsualització del vídeo
- Miniatura de previsualització del vídeo
+ Reprodueix el vídeo, duració:
Miniatura de l\'avatar del propietari
M\'agrada
No m\'agrada
Fes servir el Tor
(En proves) Força el trànsit de baixada a través del Tor per a més privadesa (no compatible encara amb les emissions de vídeo).
- Informa sobre un error
+ Notifiqueu un error
Informe de l\'usuari
Cap resultat
No hi ha res aquí
No s\'ha pogut crear el directori de baixades «%1$s»
S\'ha creat el directori de baixades «%1$s»
- Torna a intentar-ho
+ Torna a provar
S\'ha denegat el permís d\'accés a l\'emmagatzematge
- Sense subscriptors
- Sense reproduccions
+ Cap subscripció
+ Cap reproducció
- %s reproducció
- %s reproduccions
- Sense vídeos
+ Cap vídeo
- - %s vídeo
- - %s vídeos
+ - Vídeo
+ - Vídeos
Pausa
Reprodueix
@@ -236,10 +236,10 @@
Tanca
Canvia el nom
Fils
- Servidor incompatible
+ Servidor no compatible
El fitxer ja existeix
Baixada del NewPipe activa
- Espera…
+ Un moment…
S\'ha copiat al porta-retalls
Caràcters permesos als noms de fitxer
Lletres i dígits
@@ -247,43 +247,43 @@
© %1$s per %2$s sota %3$s
Reprodueix transmissions de manera lliure i lleugera a l\'Android.
Visualitza a GitHub
- Fes una donació
- Per a més informació i notícies, visita el nostre lloc web.
+ Feu una donació
+ Per a més informació i notícies, visiteu el nostre web.
Últimes reproduccions
Més reproduïts
- Pàgina d\'un quiosc
+ Tendències
Pàgina de novetats
Pàgina d\'un canal
- Tria un quiosc
+ Trieu un quiosc
El fitxer no té un format ZIP vàlid
Avís: No s\'han pogut importar tots els fitxers.
Això sobreescriurà els paràmetres actuals.
Quiosc
Tendències
Els millors 50
- Reproductor en segon pla
+ Reproductor en rerefons
Reproductor emergent
- Afegeix a la cua de reproducció en segon pla
+ Afegeix a la cua de reproducció en rerefons
Afegeix a la cua de reproducció emergent
Reprodueix aquí
Obre el calaix
Tanca el calaix
S\'està obtenint la informació…
S\'està carregant el contingut seleccionat
- Vols eliminar aquesta llista de reproducció\?
+ Voleu eliminar aquesta llista de reproducció\?
No s\'ha pogut eliminar la llista de reproducció.
Importació i exportació
Controls de la velocitat de reproducció
Tempo
To
- Toca el botó de cerca per començar
+ Feu un toc al botó de cerca per començar
Elimina l\'àudio en algunes resolucions
Reproductor d\'àudio extern
- Desactiva-ho per evitar que es carreguin les miniatures i estalviar dades i memòria. Si canvies aquesta opció, s\'esborrarà la memòria cau d\'imatges tant de la memòria com de l\'emmagatzematge.
+ Desactiveu-ho per no generar miniatures i estalviar dades i memòria. Canviant aquesta opció, s\'eliminarà la memòria cau d\'imatges tant de la memòria com de l\'emmagatzematge.
Emmagatzema les cerques localment
- Registra els vídeos visualitzats
+ Crea un historial de vídeos visualitzats
Reprèn automàticament
- Aquesta URL no és compatible
+ Aquest URL no és compatible
Informe d\'error
Més tard
Filtra
@@ -291,20 +291,20 @@
S\'està redimensionant
Reprodueix-ho tot
Canvia l\'orientació
- Canvia al mode en segon pla
+ Canvia al mode en rerefons
Canvia al mode emergent
Canvia al mode principal
Sobreescriu l\'historial i les subscripcions actuals
S\'està recuperant el reproductor després de l\'error
- Ho sentim, això no hauria d\'haver ocorregut.
- Arrossega per a reordenar la llista
+ Bé, és lamentable.
+ Arrossegueu per reordenar la llista
mil
milions
mil milions
Inicia
Nova missió
- L\'URL té un format incorrecte o no hi ha connexió a internet
- Toca aquí per a més detalls
+ L\'URL té un format no vàlid o no hi ha connexió a Internet
+ Feu un toc aquí per a més detalls
Defineix una carpeta de baixades més endavant als paràmetres
Es necessita aquest permís per a obrir el mode emergent
Camp reCAPTCHA
@@ -312,15 +312,15 @@
Se substituiran els caràcters no vàlids amb aquest valor
Caràcter de substitució
Principals caràcters especials
- Ja siguin idees, traduccions, canvis en el disseny, una neteja del codi o canvis importants de programació, la teva ajuda sempre és benvinguda. Com més feina feta hi hagi, millor!
- El NewPipe està desenvolupat per voluntaris que fan servir el seu temps lliure per a oferir-te la millor experiència possible. Fes una aportació per assegurar que els nostres desenvolupadors puguin millorar encara més el NewPipe mentre fan un cafè.
- Fes la teva aportació
+ Idees, traduccions, canvis en el disseny, neteja del codi, canvis importants de programació... La vostra ajuda sempre és benvinguda. Com més feina feta hi hagi, millor!
+ El NewPipe està desenvolupat per voluntaris que fan servir el seu temps lliure per oferir-vos la millor experiència possible. Feu una aportació per assegurar que els nostres desenvolupadors puguin millorar encara més el NewPipe mentre fan un cafè.
+ Feu la vostra aportació
Cerques
Reproduccions
- Encara no t\'has subscrit a cap canal
+ Encara no us heu subscrit a cap canal
Novetats
- Mantén premut per afegir a la cua
- Comença a reproduir en segon pla
+ Manteniu premut per afegir a la cua
+ Comença a reproduir en rerefons
Comença a reproduir en mode emergent
Defineix com a miniatura de la llista de reproducció
Afegeix la llista de reproducció a les adreces d\'interès
@@ -346,45 +346,45 @@
Aviat hi haurà novetats aquí ;D
Acció d\'obertura preferida
Acció per defecte en obrir continguts — %s
- "La supervisió de fugues de memòria pot fer que l\'aplicació deixi de respondre mentre es bolca la memòria "
+ La supervisió de fugues de memòria pot fer que l\'aplicació deixi de respondre mentre es bolca la memòria
Informa d\'errors fora del cicle de vida
Força l\'informe d\'excepcions Rx que no es puguin transmetre que tinguin lloc fora del cicle de vida d\'un fragment o activitat després de disposar-los
- Importa les teves subscripcions de YouTube mitjançant el fitxer d\'exportació:
+ Importeu les vostres subscripcions de YouTube mitjançant el fitxer d\'exportació:
\n
-\n1. Vés a aquesta URL: %1$s
-\n2. Inicia la sessió quan se\'t demani
+\n1. Aneu a : %1$s
+\n2. Inicieu la sessió quan si us demani
\n3. S\'hauria d\'iniciar una baixada (el fitxer d\'exportació)
- Importa un perfil de SoundCloud mitjançant l\'URL o l\'identificador del teu perfil:
+ Importeu un perfil del SoundCloud mitjançant l\'URL o l\'identificador del vostre perfil:
\n
-\n1. Activa el «Mode d\'ordinador» en un navegador (el lloc web no està disponible per a dispositius mòbils)
-\n2. Vés a aquesta URL: %1$s
-\n3. Inicia la sessió al teu compte quan se\'t demani
-\n4. Copia l\'URL de la pàgina on se\'t redireccioni
+\n1. Activeu el «Mode d\'ordinador» en un navegador (el lloc web no està disponible per a dispositius mòbils)
+\n2. Aneu a: %1$s
+\n3. Inicieu la sessió al vostre compte quan si us demani
+\n4. Copieu l\'URL on si us ha redirigit.
identificador, soundcloud.com/identificador
- Tingues en compte que això pot comportar un ús intensiu de la xarxa.
+ Tingueu en compte que això pot comportar un ús intensiu de la xarxa.
\n
-\nVols continuar\?
+\nVoleu continuar\?
No hi ha vídeos que es puguin baixar
Subtítols
Modifica la mida del text i el fons dels subtítols. Cal reiniciar l\'aplicació per aplicar els canvis.
No s\'ha trobat cap aplicació que pugui reproduir aquest fitxer
- Esborra l\'historial de reproduccions
- Esborra l\'historial dels vídeos reproduïts i les posicions de reproducció
- Vols esborrar tot l\'historial de reproduccions\?
- S\'ha esborrat l\'historial de reproduccions.
- Esborra l\'historial de cerca
- Esborra l\'historial de paraules cercades
- Vols esborrar tot l\'historial de cerca\?
- S\'ha esborrat l\'historial de cerca.
+ Neteja l\'historial de reproduccions
+ Neteja l\'historial dels vídeos reproduïts i les posicions de reproducció
+ Voleu suprimir tot l\'historial de reproduccions\?
+ S\'ha netejat l\'historial de reproduccions.
+ Neteja l\'historial de cerca
+ Neteja l\'historial de paraules cercades
+ Voleu suprimir tot l\'historial de cerca\?
+ S\'ha netejat l\'historial de cerca.
S\'ha esborrat 1 element.
- NewPipe és programari lliure sota llicència copyleft: pots fer-lo servir, estudiar-lo, compartir-lo i millorar-lo al teu gust. En concret, pots redistribuir-lo i/o modificar-lo d\'acord amb els termes de la llicència GNU GPL publicada per la Free Software Foundation, ja sigui la versió 3 o (segons vulguis) qualsevol altra versió posterior.
- Vols importar també els paràmetres\?
- Política de privacitat del NewPipe
- El projecte NewPipe es pren molt seriosament la teva privacitat. Per aquesta raó, l\'aplicació no emmagatzema cap mena de dades sense el teu consentiment.
-\nLa política de privacitat del NewPipe descriu detalladament quines dades s\'envien i s\'emmagatzemen quan envies un informe d\'error.
- Llegeix la política de privacitat
- Per tal de complir amb el Reglament General de Protecció de Dades europeu (GDPR), et demanem que posis atenció a la política de privacitat del NewPipe. Llegeix-la detingudament.
-\nSi vols enviar-nos un informe d\'error, l\'hauràs d\'acceptar.
+ El NewPipe és programari lliure sota llicència copyleft: el podeu fer servir, estudiar, compartir i millorar com vulgueu. Concretament, el podeu redistribuir i/o modificar d\'acord amb els termes de la llicència GNU GPL publicada per la Free Software Foundation, versió 3 o qualsevol altra versió posterior.
+ Voleu importar també els paràmetres\?
+ Política de privadesa del NewPipe
+ El projecte NewPipe es pren molt seriosament la vostra privadesa. Per aquesta raó, l\'aplicació no emmagatzema cap dada sense el vostre consentiment.
+\nLa política de privadesa del NewPipe descriu detalladament quines dades s\'envien i s\'emmagatzemen quan envieu un informe d\'error.
+ Llegiu la política de privadesa
+ Per complir amb el Reglament General de Protecció de Dades europeu (GDPR), us demanem que pareu atenció a la política de privadesa del NewPipe. Llegiu-la detingudament.
+\nSi voleu informar d\'un error, l\'haureu d\'acceptar.
Accepta
Rebutja
Sense restriccions
@@ -396,13 +396,13 @@
Minimitza al reproductor emergent
Avança ràpid durant el silenci
Pas
- Reinicialitza
+ Reinicia
Canals
Llistes de reproducció
Pistes
Usuaris
Pestanya nova
- Tria una pestanya
+ Trieu una pestanya
Control de volum per gestos
Fes servir gestos per controlar el volum del reproductor
Control de brillantor per gestos
@@ -410,15 +410,15 @@
Actualitzacions
S\'ha eliminat el fitxer
L\'emmagatzematge extern no està disponible
- Reinicialitza els valors per defecte
- Vols reinicialitzar els valors per defecte\?
+ Reinicia als valors per defecte
+ Voleu reiniciar als valors per defecte\?
Selecció
Actualitzacions
Llista
Quadrícula
Automàtic
Canvia la vista
- Està disponible una nova actualització del NewPipe!
+ Està disponible una actualització del NewPipe!
Pendent
en pausa
a la cua
@@ -456,14 +456,14 @@
Sobreescriu
No s\'ha trobat
Mostra els comentaris
- Desactiva-ho per deixar de mostrar els comentaris
+ Desactiveu-ho per no mostrar els comentaris
Reproducció automàtica
- No hi ha comentaris
+ Cap comentari
No s\'han pogut carregar els comentaris
Tanca
- S\'estan utilitzant les pestanyes per defecte, s\'ha produït un error en llegir les pestanyes desades
- Mostra una notificació per demanar l\'actualització de l\'aplicació si hi ha una nova versió disponible
- Toca per baixar
+ S\'ha produït un error en llegir les pestanyes desades; s\'estan utilitzant les pestanyes per defecte
+ Mostra una notificació per demanar l\'actualització de l\'aplicació si hi ha una versió nova disponible
+ Toqueu per baixar
El servidor no està enviant dades
- Comentaris
@@ -480,13 +480,40 @@
Limita la cua de baixades
Inicia les baixades
Pausa les baixades
- Se us demanarà la ubicació de cada baixada
+ Si us demanarà la ubicació de cada baixada
Posicions a les llistes
Mostra els indicadors de posició de reproducció a les llistes
Neteja les dades
El sistema ha denegat l\'acció
- Reprèn les teves %s baixades pendents des de Baixades
S\'ha tancat el NewPipe mentre es treballava en el fitxer
- Pregunta on baixar
+ Demana on baixar
Canvia les carpetes de baixada perquè tingui efecte
+ No es pot desar a la targeta externa. Voleu restablir la carpeta de baixades\?
+ Permís denegat pel sistema
+ El servidor no accepta baixades simultànies. Proveu amb @string/msg_threads = 1
+ Restaura la darrera posició de la reproducció
+ S\'ha suprimit les posicions de reproducció.
+ El fitxer s\'ha mogut o suprimit
+ Només una baixada alhora
+ Si us demanarà la ubicació de cada baixada.
+\nTrieu SAF si voleu desar el contingut en una memòria externa
+ Utilitza SAF
+ El SAF (Storage Access Framework; estructura d\'accés a l\'emmagatzematge) us permet realitzar baixades a una memòria externa com una targeta SD.
+\nNota: No és compatible en tots els dispositius
+ Esborra les posicions de reproducció
+ Esborra totes les posicions de reproducció
+ Voleu suprimir tots els punts de reproducció\?
+ In/Habilita el servei; selecció actual:
+ Cap visualització
+
+ - %s visualització
+ - %s visualitzacions
+
+ Cap reproducció
+
+ - %s escoltant
+ - %s escoltant
+
+ Es canviarà la llengua en reiniciar l\'aplicació.
+ Tendències
\ No newline at end of file
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 9a9cc8654..66c952a26 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -314,7 +314,6 @@ otevření ve vyskakovacím okně
Přizpůsobit
Vyplnit
Zvětšit
- Sledovat únik paměti
Ladění
"Automaticky generováno "
Povolit službu LeakCanary
@@ -513,4 +512,18 @@ otevření ve vyskakovacím okně