diff --git a/README.md b/README.md index 15ba3d04b..6c1aa3d4b 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,13 @@


-

ScreenshotsDescriptionFeaturesContributionDonateLicense

+

ScreenshotsDescriptionFeaturesUpdatesContributionDonateLicense

WebsiteBlogPress


-WARNING: PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS. +WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY. + +PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS. ## Screenshots @@ -73,6 +75,20 @@ NewPipe does not use any Google framework libraries, nor the YouTube API. Websit * Show comments * … and many more +## Updates +When a change to the NewPipe code occurs (due to either adding features or bug fixing), eventually a release will occur. These are in the format x.xx.x . In order to get this new version, you can: + * Build a debug APK yourself. This is the fastest way to get new features on your device, but is much more complicated, so we recommend using one of the other methods. + * Download the APK from [releases](https://github.com/TeamNewPipe/NewPipe/releases) and install it. + * Update via F-droid. This is the slowest method of getting updates, as F-Droid must recognize changes, build the APK itself, sign it, then push the update to users. + +When you install an APK from one of these options, it will be incompatible with an APK from one of the other options. This is due to different signing keys being used. Signing keys help ensure that a user isn't tricked into installing a malicious update to an app, and are independent. F-Droid and GitHub use different signing keys, and building an APK debug excludes a key. The signing key issue is being discussed in issue [#1981](https://github.com/TeamNewPipe/NewPipe/issues/1981), and may be fixed by setting up our own repository on F-Droid. + +In the meanwhile, if you want to switch sources for some reason (e.g. NewPipe's core functionality was broken and F-Droid doesn't have the update yet), we recommend following this procedure: +1. Back up your data via "Settings>Content>Export Database" so you keep your history, subscriptions, and playlists +2. Uninstall NewPipe +3. Download the APK from the new source and install it +4. Import the data from step 1 via "Settings>Content>Import Database" + ## Contribution Whether you have ideas, translations, design changes, code cleaning, or real heavy code changes, help is always welcome. The more is done the better it gets! diff --git a/app/build.gradle b/app/build.gradle index bb993cca0..47cb031d7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,18 +8,20 @@ android { applicationId "org.schabi.newpipe" minSdkVersion 19 targetSdkVersion 28 - versionCode 70 - versionName "0.15.0" + versionCode 720 + versionName "0.16.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } + buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + debug { multiDexEnabled true debuggable true @@ -33,6 +35,7 @@ android { // but continue the build even when errors are found: abortOnError false } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -54,7 +57,7 @@ dependencies { exclude module: 'support-annotations' }) - implementation 'com.github.TeamNewPipe:NewPipeExtractor:99915e4527c0' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:e7e411dc296d8633' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.23.0' diff --git a/app/src/androidTest/java/org/schabi/newpipe/ApplicationTest.java b/app/src/androidTest/java/org/schabi/newpipe/ApplicationTest.java deleted file mode 100644 index d5b0b7087..000000000 --- a/app/src/androidTest/java/org/schabi/newpipe/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.schabi.newpipe; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1bc205f33..4cd8e83f9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,12 +35,6 @@ - - @@ -119,7 +113,6 @@ - + + + + + + + + + + + + + @@ -210,6 +216,29 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/android/support/design/widget/FlingBehavior.java b/app/src/main/java/android/support/design/widget/FlingBehavior.java new file mode 100644 index 000000000..59eb08294 --- /dev/null +++ b/app/src/main/java/android/support/design/widget/FlingBehavior.java @@ -0,0 +1,116 @@ +package android.support.design.widget; + +import android.animation.ValueAnimator; +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.design.animation.AnimationUtils; +import android.util.AttributeSet; +import android.view.View; + +// check this https://github.com/ToDou/appbarlayout-spring-behavior/blob/master/appbarspring/src/main/java/android/support/design/widget/AppBarFlingFixBehavior.java +public final class FlingBehavior extends AppBarLayout.Behavior { + + private ValueAnimator mOffsetAnimator; + private static final int MAX_OFFSET_ANIMATION_DURATION = 600; // ms + + public FlingBehavior() { + } + + public FlingBehavior(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) { + if (dy != 0) { + int val = child.getBottom(); + if (val != 0) { + int min, max; + if (dy < 0) { + // We're scrolling down + } else { + // We're scrolling up + if (mOffsetAnimator != null && mOffsetAnimator.isRunning()) { + mOffsetAnimator.cancel(); + } + min = -child.getUpNestedPreScrollRange(); + max = 0; + consumed[1] = scroll(coordinatorLayout, child, dy, min, max); + } + } + } + } + + @Override + public boolean onNestedPreFling(@NonNull CoordinatorLayout coordinatorLayout, @NonNull AppBarLayout child, @NonNull View target, float velocityX, float velocityY) { + + if (velocityY != 0) { + if (velocityY < 0) { + // We're flinging down + int val = child.getBottom(); + if (val != 0) { + final int targetScroll = + +child.getDownNestedPreScrollRange(); + animateOffsetTo(coordinatorLayout, child, targetScroll, velocityY); + } + + } else { + // We're flinging up + int val = child.getBottom(); + if (val != 0) { + final int targetScroll = -child.getUpNestedPreScrollRange(); + if (getTopBottomOffsetForScrollingSibling() > targetScroll) { + animateOffsetTo(coordinatorLayout, child, targetScroll, velocityY); + } + } + } + } + + return super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY); + } + + private void animateOffsetTo(final CoordinatorLayout coordinatorLayout, + final AppBarLayout child, final int offset, float velocity) { + final int distance = Math.abs(getTopBottomOffsetForScrollingSibling() - offset); + + final int duration; + velocity = Math.abs(velocity); + if (velocity > 0) { + duration = 3 * Math.round(1000 * (distance / velocity)); + } else { + final float distanceRatio = (float) distance / child.getHeight(); + duration = (int) ((distanceRatio + 1) * 150); + } + + animateOffsetWithDuration(coordinatorLayout, child, offset, duration); + } + + private void animateOffsetWithDuration(final CoordinatorLayout coordinatorLayout, + final AppBarLayout child, final int offset, final int duration) { + final int currentOffset = getTopBottomOffsetForScrollingSibling(); + if (currentOffset == offset) { + if (mOffsetAnimator != null && mOffsetAnimator.isRunning()) { + mOffsetAnimator.cancel(); + } + return; + } + + if (mOffsetAnimator == null) { + mOffsetAnimator = new ValueAnimator(); + mOffsetAnimator.setInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR); + mOffsetAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animator) { + setHeaderTopBottomOffset(coordinatorLayout, child, + (Integer) animator.getAnimatedValue()); + } + }); + } else { + mOffsetAnimator.cancel(); + } + + mOffsetAnimator.setDuration(Math.min(duration, MAX_OFFSET_ANIMATION_DURATION)); + mOffsetAnimator.setIntValues(currentOffset, offset); + mOffsetAnimator.start(); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java index 314c95c8d..3ac2d5014 100644 --- a/app/src/main/java/org/schabi/newpipe/App.java +++ b/app/src/main/java/org/schabi/newpipe/App.java @@ -1,5 +1,6 @@ package org.schabi.newpipe; +import android.annotation.TargetApi; import android.app.Application; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -65,6 +66,7 @@ import io.reactivex.plugins.RxJavaPlugins; public class App extends Application { protected static final String TAG = App.class.toString(); private RefWatcher refWatcher; + private static App app; @SuppressWarnings("unchecked") private static final Class[] @@ -88,6 +90,8 @@ public class App extends Application { } refWatcher = installLeakCanary(); + app = this; + // Initialize settings first because others inits can use its values SettingsActivity.initSettings(this); @@ -100,6 +104,9 @@ public class App extends Application { ImageLoader.getInstance().init(getImageLoaderConfigurations(10, 50)); configureRxJavaErrorHandler(); + + // Check for new version + new CheckForNewAppVersionTask().execute(); } protected Downloader getDownloader() { @@ -211,6 +218,31 @@ public class App extends Application { NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.createNotificationChannel(mChannel); + + setUpUpdateNotificationChannel(importance); + } + + /** + * Set up notification channel for app update. + * @param importance + */ + @TargetApi(Build.VERSION_CODES.O) + private void setUpUpdateNotificationChannel(int importance) { + + final String appUpdateId + = getString(R.string.app_update_notification_channel_id); + final CharSequence appUpdateName + = getString(R.string.app_update_notification_channel_name); + final String appUpdateDescription + = getString(R.string.app_update_notification_channel_description); + + NotificationChannel appUpdateChannel + = new NotificationChannel(appUpdateId, appUpdateName, importance); + appUpdateChannel.setDescription(appUpdateDescription); + + NotificationManager appUpdateNotificationManager + = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + appUpdateNotificationManager.createNotificationChannel(appUpdateChannel); } @Nullable @@ -226,4 +258,8 @@ public class App extends Application { protected boolean isDisposedRxExceptionsReported() { return false; } + + public static App getApp() { + return app; + } } diff --git a/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersionTask.java b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersionTask.java new file mode 100644 index 000000000..6a6d1b9c2 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/CheckForNewAppVersionTask.java @@ -0,0 +1,242 @@ +package org.schabi.newpipe; + +import android.app.Application; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.Signature; +import android.net.ConnectivityManager; +import android.net.Uri; +import android.os.AsyncTask; +import android.preference.PreferenceManager; +import android.support.v4.app.NotificationCompat; +import android.support.v4.app.NotificationManagerCompat; + +import org.json.JSONException; +import org.json.JSONObject; +import org.schabi.newpipe.report.ErrorActivity; +import org.schabi.newpipe.report.UserAction; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.concurrent.TimeUnit; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +/** + * AsyncTask to check if there is a newer version of the NewPipe github apk available or not. + * If there is a newer version we show a notification, informing the user. On tapping + * the notification, the user will be directed to the download link. + */ +public class CheckForNewAppVersionTask extends AsyncTask { + + private static final Application app = App.getApp(); + private static final String GITHUB_APK_SHA1 = "B0:2E:90:7C:1C:D6:FC:57:C3:35:F0:88:D0:8F:50:5F:94:E4:D2:15"; + private static final String newPipeApiUrl = "https://newpipe.schabi.org/api/data.json"; + private static final int timeoutPeriod = 30; + + private SharedPreferences mPrefs; + private OkHttpClient client; + + @Override + protected void onPreExecute() { + + mPrefs = PreferenceManager.getDefaultSharedPreferences(app); + + // Check if user has enabled/ disabled update checking + // and if the current apk is a github one or not. + if (!mPrefs.getBoolean(app.getString(R.string.update_app_key), true) + || !isGithubApk()) { + this.cancel(true); + } + } + + @Override + protected String doInBackground(Void... voids) { + + if(isCancelled() || !isConnected()) return null; + + // Make a network request to get latest NewPipe data. + if (client == null) { + + client = new OkHttpClient + .Builder() + .readTimeout(timeoutPeriod, TimeUnit.SECONDS) + .build(); + } + + Request request = new Request.Builder() + .url(newPipeApiUrl) + .build(); + + try { + Response response = client.newCall(request).execute(); + return response.body().string(); + } catch (IOException ex) { + ErrorActivity.reportError(app, ex, null, null, + ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", + "app update API fail", R.string.app_ui_crash)); + } + + return null; + } + + @Override + protected void onPostExecute(String response) { + + // Parse the json from the response. + if (response != null) { + + try { + JSONObject mainObject = new JSONObject(response); + JSONObject flavoursObject = mainObject.getJSONObject("flavors"); + JSONObject githubObject = flavoursObject.getJSONObject("github"); + JSONObject githubStableObject = githubObject.getJSONObject("stable"); + + String versionName = githubStableObject.getString("version"); + String versionCode = githubStableObject.getString("version_code"); + String apkLocationUrl = githubStableObject.getString("apk"); + + compareAppVersionAndShowNotification(versionName, apkLocationUrl, versionCode); + + } catch (JSONException ex) { + ErrorActivity.reportError(app, ex, null, null, + ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", + "could not parse app update JSON data", R.string.app_ui_crash)); + } + } + } + + /** + * Method to compare the current and latest available app version. + * If a newer version is available, we show the update notification. + * @param versionName + * @param apkLocationUrl + */ + private void compareAppVersionAndShowNotification(String versionName, + String apkLocationUrl, + String versionCode) { + + int NOTIFICATION_ID = 2000; + + if (BuildConfig.VERSION_CODE < Integer.valueOf(versionCode)) { + + // A pending intent to open the apk location url in the browser. + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(apkLocationUrl)); + PendingIntent pendingIntent + = PendingIntent.getActivity(app, 0, intent, 0); + + NotificationCompat.Builder notificationBuilder = new NotificationCompat + .Builder(app, app.getString(R.string.app_update_notification_channel_id)) + .setSmallIcon(R.drawable.ic_newpipe_update) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .setContentIntent(pendingIntent) + .setAutoCancel(true) + .setContentTitle(app.getString(R.string.app_update_notification_content_title)) + .setContentText(app.getString(R.string.app_update_notification_content_text) + + " " + versionName); + + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(app); + notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + } + } + + /** + * Method to get the apk's SHA1 key. + * https://stackoverflow.com/questions/9293019/get-certificate-fingerprint-from-android-app#22506133 + */ + private static String getCertificateSHA1Fingerprint() { + + PackageManager pm = app.getPackageManager(); + String packageName = app.getPackageName(); + int flags = PackageManager.GET_SIGNATURES; + PackageInfo packageInfo = null; + + try { + packageInfo = pm.getPackageInfo(packageName, flags); + } catch (PackageManager.NameNotFoundException ex) { + ErrorActivity.reportError(app, ex, null, null, + ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", + "Could not find package info", R.string.app_ui_crash)); + } + + Signature[] signatures = packageInfo.signatures; + byte[] cert = signatures[0].toByteArray(); + InputStream input = new ByteArrayInputStream(cert); + + CertificateFactory cf = null; + X509Certificate c = null; + + try { + cf = CertificateFactory.getInstance("X509"); + c = (X509Certificate) cf.generateCertificate(input); + } catch (CertificateException ex) { + ErrorActivity.reportError(app, ex, null, null, + ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", + "Certificate error", R.string.app_ui_crash)); + } + + String hexString = null; + + try { + MessageDigest md = MessageDigest.getInstance("SHA1"); + byte[] publicKey = md.digest(c.getEncoded()); + hexString = byte2HexFormatted(publicKey); + } catch (NoSuchAlgorithmException ex1) { + ErrorActivity.reportError(app, ex1, null, null, + ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", + "Could not retrieve SHA1 key", R.string.app_ui_crash)); + } catch (CertificateEncodingException ex2) { + ErrorActivity.reportError(app, ex2, null, null, + ErrorActivity.ErrorInfo.make(UserAction.SOMETHING_ELSE, "none", + "Could not retrieve SHA1 key", R.string.app_ui_crash)); + } + + return hexString; + } + + private static String byte2HexFormatted(byte[] arr) { + + StringBuilder str = new StringBuilder(arr.length * 2); + + for (int i = 0; i < arr.length; i++) { + String h = Integer.toHexString(arr[i]); + int l = h.length(); + if (l == 1) h = "0" + h; + if (l > 2) h = h.substring(l - 2, l); + str.append(h.toUpperCase()); + if (i < (arr.length - 1)) str.append(':'); + } + return str.toString(); + } + + public static boolean isGithubApk() { + + return getCertificateSHA1Fingerprint().equals(GITHUB_APK_SHA1); + } + + private boolean isConnected() { + + ConnectivityManager cm = + (ConnectivityManager) app.getSystemService(Context.CONNECTIVITY_SERVICE); + return cm.getActiveNetworkInfo() != null + && cm.getActiveNetworkInfo().isConnected(); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/Downloader.java b/app/src/main/java/org/schabi/newpipe/Downloader.java index 32e8bd414..ff274a91a 100644 --- a/app/src/main/java/org/schabi/newpipe/Downloader.java +++ b/app/src/main/java/org/schabi/newpipe/Downloader.java @@ -3,18 +3,24 @@ package org.schabi.newpipe; import android.support.annotation.Nullable; import android.text.TextUtils; +import org.schabi.newpipe.extractor.DownloadRequest; +import org.schabi.newpipe.extractor.DownloadResponse; import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; import org.schabi.newpipe.extractor.utils.Localization; import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; +import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.ResponseBody; @@ -139,13 +145,16 @@ public class Downloader implements org.schabi.newpipe.extractor.Downloader { private ResponseBody getBody(String siteUrl, Map customProperties) throws IOException, ReCaptchaException { final Request.Builder requestBuilder = new Request.Builder() - .method("GET", null).url(siteUrl) - .addHeader("User-Agent", USER_AGENT); + .method("GET", null).url(siteUrl); for (Map.Entry header : customProperties.entrySet()) { requestBuilder.addHeader(header.getKey(), header.getValue()); } + if (!customProperties.containsKey("User-Agent")) { + requestBuilder.header("User-Agent", USER_AGENT); + } + if (!TextUtils.isEmpty(mCookies)) { requestBuilder.addHeader("Cookie", mCookies); } @@ -177,4 +186,96 @@ public class Downloader implements org.schabi.newpipe.extractor.Downloader { public String download(String siteUrl) throws IOException, ReCaptchaException { return download(siteUrl, Collections.emptyMap()); } -} + + + @Override + public DownloadResponse get(String siteUrl, DownloadRequest request) throws IOException, ReCaptchaException { + final Request.Builder requestBuilder = new Request.Builder() + .method("GET", null).url(siteUrl); + + Map> requestHeaders = request.getRequestHeaders(); + // set custom headers in request + for (Map.Entry> pair : requestHeaders.entrySet()) { + for(String value : pair.getValue()){ + requestBuilder.addHeader(pair.getKey(), value); + } + } + + if (!requestHeaders.containsKey("User-Agent")) { + requestBuilder.header("User-Agent", USER_AGENT); + } + + if (!TextUtils.isEmpty(mCookies)) { + requestBuilder.addHeader("Cookie", mCookies); + } + + final Request okRequest = requestBuilder.build(); + final Response response = client.newCall(okRequest).execute(); + final ResponseBody body = response.body(); + + if (response.code() == 429) { + throw new ReCaptchaException("reCaptcha Challenge requested"); + } + + if (body == null) { + response.close(); + return null; + } + + return new DownloadResponse(body.string(), response.headers().toMultimap()); + } + + @Override + public DownloadResponse get(String siteUrl) throws IOException, ReCaptchaException { + return get(siteUrl, DownloadRequest.emptyRequest); + } + + @Override + public DownloadResponse post(String siteUrl, DownloadRequest request) throws IOException, ReCaptchaException { + + Map> requestHeaders = request.getRequestHeaders(); + if(null == requestHeaders.get("Content-Type") || requestHeaders.get("Content-Type").isEmpty()){ + // content type header is required. maybe throw an exception here + return null; + } + + String contentType = requestHeaders.get("Content-Type").get(0); + + RequestBody okRequestBody = null; + if(null != request.getRequestBody()){ + okRequestBody = RequestBody.create(MediaType.parse(contentType), request.getRequestBody()); + } + final Request.Builder requestBuilder = new Request.Builder() + .method("POST", okRequestBody).url(siteUrl); + + // set custom headers in request + for (Map.Entry> pair : requestHeaders.entrySet()) { + for(String value : pair.getValue()){ + requestBuilder.addHeader(pair.getKey(), value); + } + } + + if (!requestHeaders.containsKey("User-Agent")) { + requestBuilder.header("User-Agent", USER_AGENT); + } + + if (!TextUtils.isEmpty(mCookies)) { + requestBuilder.addHeader("Cookie", mCookies); + } + + final Request okRequest = requestBuilder.build(); + final Response response = client.newCall(okRequest).execute(); + final ResponseBody body = response.body(); + + if (response.code() == 429) { + throw new ReCaptchaException("reCaptcha Challenge requested"); + } + + if (body == null) { + response.close(); + return null; + } + + return new DownloadResponse(body.string(), response.headers().toMultimap()); + } +} \ No newline at end of file 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 4f98f7f28..ec6d42b29 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -457,7 +457,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck break; case R.id.subtitle_button: stream = subtitleStreamsAdapter.getItem(selectedSubtitleIndex); - location = NewPipeSettings.getVideoDownloadPath(context);// assume that subtitle & video go together + location = NewPipeSettings.getVideoDownloadPath(context);// assume that subtitle & video files go together kind = 's'; break; default: @@ -477,7 +477,6 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck final String finalFileName = fileName; DownloadManagerService.checkForRunningMission(context, location, fileName, (listed, finished) -> { - // should be safe run the following code without "getActivity().runOnUiThread()" if (listed) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(R.string.download_dialog_title) @@ -511,11 +510,11 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck if (secondaryStream != null) { secondaryStreamUrl = secondaryStream.getStream().getUrl(); - psName = selectedStream.getFormat() == MediaFormat.MPEG_4 ? Postprocessing.ALGORITHM_MP4_DASH_MUXER : Postprocessing.ALGORITHM_WEBM_MUXER; + psName = selectedStream.getFormat() == MediaFormat.MPEG_4 ? Postprocessing.ALGORITHM_MP4_MUXER : Postprocessing.ALGORITHM_WEBM_MUXER; psArgs = null; long videoSize = wrappedVideoStreams.getSizeInBytes((VideoStream) selectedStream); - // set nearLength, only, if both sizes are fetched or known. this probably does not work on weak internet connections + // set nearLength, only, if both sizes are fetched or known. this probably does not work on slow networks if (secondaryStream.getSizeInBytes() > 0 && videoSize > 0) { nearLength = secondaryStream.getSizeInBytes() + videoSize; } diff --git a/app/src/main/java/org/schabi/newpipe/download/ExtSDDownloadFailedActivity.java b/app/src/main/java/org/schabi/newpipe/download/ExtSDDownloadFailedActivity.java deleted file mode 100644 index c02ef92eb..000000000 --- a/app/src/main/java/org/schabi/newpipe/download/ExtSDDownloadFailedActivity.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.schabi.newpipe.download; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; - -import org.schabi.newpipe.R; -import org.schabi.newpipe.settings.NewPipeSettings; -import org.schabi.newpipe.util.ServiceHelper; -import org.schabi.newpipe.util.ThemeHelper; - -public class ExtSDDownloadFailedActivity extends AppCompatActivity { - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this)); - } - - @Override - protected void onStart() { - super.onStart(); - new AlertDialog.Builder(this) - .setTitle(R.string.download_to_sdcard_error_title) - .setMessage(R.string.download_to_sdcard_error_message) - .setPositiveButton(R.string.yes, (DialogInterface dialogInterface, int i) -> { - NewPipeSettings.resetDownloadFolders(this); - finish(); - }) - .setNegativeButton(R.string.cancel, (DialogInterface dialogInterface, int i) -> { - dialogInterface.dismiss(); - finish(); - }) - .create() - .show(); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java new file mode 100644 index 000000000..0666667d6 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/fragments/EmptyFragment.java @@ -0,0 +1,17 @@ +package org.schabi.newpipe.fragments; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.schabi.newpipe.BaseFragment; +import org.schabi.newpipe.R; + +public class EmptyFragment extends BaseFragment { + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_empty, container, false); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdaptor.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdaptor.java new file mode 100644 index 000000000..27cc3ec8a --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/TabAdaptor.java @@ -0,0 +1,73 @@ +package org.schabi.newpipe.fragments.detail; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.view.ViewGroup; + +import java.util.ArrayList; +import java.util.List; + +public class TabAdaptor extends FragmentPagerAdapter { + + private final List mFragmentList = new ArrayList<>(); + private final List mFragmentTitleList = new ArrayList<>(); + private final FragmentManager fragmentManager; + + public TabAdaptor(FragmentManager fm) { + super(fm); + this.fragmentManager = fm; + } + + @Override + public Fragment getItem(int position) { + return mFragmentList.get(position); + } + + @Override + public int getCount() { + return mFragmentList.size(); + } + + public void addFragment(Fragment fragment, String title) { + mFragmentList.add(fragment); + mFragmentTitleList.add(title); + } + + public void clearAllItems() { + mFragmentList.clear(); + mFragmentTitleList.clear(); + } + + public void removeItem(int position){ + mFragmentList.remove(position == 0 ? 0 : position - 1); + mFragmentTitleList.remove(position == 0 ? 0 : position - 1); + } + + public void updateItem(int position, Fragment fragment){ + mFragmentList.set(position, fragment); + } + + public void updateItem(String title, Fragment fragment){ + int index = mFragmentTitleList.indexOf(title); + if(index != -1){ + updateItem(index, fragment); + } + } + + @Override + public int getItemPosition(Object object) { + if (mFragmentList.contains(object)) return mFragmentList.indexOf(object); + else return POSITION_NONE; + } + + public void notifyDataSetUpdate(){ + notifyDataSetChanged(); + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + fragmentManager.beginTransaction().remove((Fragment) object).commitNowAllowingStateLoss(); + } + +} 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 edca200d7..8c87c1875 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 @@ -10,11 +10,13 @@ import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.DrawableRes; -import android.support.annotation.FloatRange; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; -import android.support.v4.view.animation.FastOutSlowInInterpolator; +import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; @@ -25,7 +27,6 @@ import android.text.method.LinkMovementMethod; import android.text.util.Linkify; import android.util.DisplayMetrics; import android.util.Log; -import android.util.TypedValue; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -33,19 +34,15 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.view.ViewParent; import android.widget.AdapterView; import android.widget.FrameLayout; -import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; -import android.widget.ScrollView; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; -import com.nirhart.parallaxscroll.views.ParallaxScrollView; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; @@ -55,7 +52,9 @@ import org.schabi.newpipe.ReCaptchaActivity; import org.schabi.newpipe.download.DownloadDialog; import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.ServiceList; import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException; +import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor; import org.schabi.newpipe.extractor.stream.AudioStream; @@ -63,21 +62,22 @@ import org.schabi.newpipe.extractor.stream.Stream; import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamType; -import org.schabi.newpipe.extractor.stream.SubtitlesStream; import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.fragments.BackPressable; import org.schabi.newpipe.fragments.BaseStateFragment; -import org.schabi.newpipe.info_list.InfoItemBuilder; +import org.schabi.newpipe.fragments.EmptyFragment; +import org.schabi.newpipe.fragments.list.comments.CommentsFragment; +import org.schabi.newpipe.fragments.list.videos.RelatedVideosFragment; import org.schabi.newpipe.info_list.InfoItemDialog; import org.schabi.newpipe.local.dialog.PlaylistAppendDialog; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.player.MainVideoPlayer; import org.schabi.newpipe.player.PopupVideoPlayer; -import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.SinglePlayQueue; import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.UserAction; +import org.schabi.newpipe.util.AnimationUtils; import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.ImageDisplayConstants; @@ -85,11 +85,9 @@ import org.schabi.newpipe.util.InfoCache; import org.schabi.newpipe.util.ListHelper; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.NavigationHelper; -import org.schabi.newpipe.util.OnClickGesture; import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.StreamItemAdapter; import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper; -import org.schabi.newpipe.util.ThemeHelper; import java.io.Serializable; import java.util.Collection; @@ -104,6 +102,7 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.COMMENTS; import static org.schabi.newpipe.util.AnimationUtils.animateView; public class VideoDetailFragment @@ -114,27 +113,27 @@ public class VideoDetailFragment View.OnLongClickListener { public static final String AUTO_PLAY = "auto_play"; - // Amount of videos to show on start - private static final int INITIAL_RELATED_VIDEOS = 8; - - private InfoItemBuilder infoItemBuilder = null; - private int updateFlags = 0; private static final int RELATED_STREAMS_UPDATE_FLAG = 0x1; private static final int RESOLUTIONS_MENU_UPDATE_FLAG = 0x2; private static final int TOOLBAR_ITEMS_UPDATE_FLAG = 0x4; + private static final int COMMENTS_UPDATE_FLAG = 0x4; private boolean autoPlayEnabled; private boolean showRelatedStreams; - private boolean wasRelatedStreamsExpanded = false; + private boolean showComments; - @State protected int serviceId = Constants.NO_SERVICE_ID; - @State protected String name; - @State protected String url; + @State + protected int serviceId = Constants.NO_SERVICE_ID; + @State + protected String name; + @State + protected String url; private StreamInfo currentInfo; private Disposable currentWorker; - @NonNull private CompositeDisposable disposables = new CompositeDisposable(); + @NonNull + private CompositeDisposable disposables = new CompositeDisposable(); private List sortedVideoStreams; private int selectedVideoStreamIndex = -1; @@ -147,7 +146,6 @@ public class VideoDetailFragment private Spinner spinnerToolbar; - private ParallaxScrollView parallaxScrollRootView; private LinearLayout contentRootLayoutHiding; private View thumbnailBackgroundButton; @@ -156,7 +154,6 @@ public class VideoDetailFragment private View videoTitleRoot; private TextView videoTitleTextView; - @Nullable private ImageView videoTitleToggleArrow; private TextView videoCountView; @@ -181,10 +178,15 @@ public class VideoDetailFragment private ImageView thumbsDownImageView; private TextView thumbsDisabledTextView; - private TextView nextStreamTitle; - private LinearLayout relatedStreamRootLayout; - private LinearLayout relatedStreamsView; - private ImageButton relatedStreamExpandButton; + private static final String COMMENTS_TAB_TAG = "COMMENTS"; + private static final String RELATED_TAB_TAG = "NEXT VIDEO"; + private static final String EMPTY_TAB_TAG = "EMPTY TAB"; + + private AppBarLayout appBarLayout; + private ViewPager viewPager; + private TabAdaptor pageAdapter; + private TabLayout tabLayout; + private FrameLayout relatedStreamsLayout; /*////////////////////////////////////////////////////////////////////////*/ @@ -200,12 +202,17 @@ public class VideoDetailFragment //////////////////////////////////////////////////////////////////////////*/ @Override - public void onCreate(Bundle savedInstanceState) { + public void + onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); showRelatedStreams = PreferenceManager.getDefaultSharedPreferences(activity) .getBoolean(getString(R.string.show_next_video_key), true); + + showComments = PreferenceManager.getDefaultSharedPreferences(activity) + .getBoolean(getString(R.string.show_comments_key), true); + PreferenceManager.getDefaultSharedPreferences(activity) .registerOnSharedPreferenceChangeListener(this); } @@ -227,14 +234,16 @@ public class VideoDetailFragment if (updateFlags != 0) { if (!isLoading.get() && currentInfo != null) { - if ((updateFlags & RELATED_STREAMS_UPDATE_FLAG) != 0) initRelatedVideos(currentInfo); + if ((updateFlags & RELATED_STREAMS_UPDATE_FLAG) != 0) startLoading(false); if ((updateFlags & RESOLUTIONS_MENU_UPDATE_FLAG) != 0) setupActionBar(currentInfo); + if ((updateFlags & COMMENTS_UPDATE_FLAG) != 0) startLoading(false); } if ((updateFlags & TOOLBAR_ITEMS_UPDATE_FLAG) != 0 && menu != null) { updateMenuItemVisibility(); } + updateFlags = 0; } @@ -291,6 +300,9 @@ public class VideoDetailFragment updateFlags |= RESOLUTIONS_MENU_UPDATE_FLAG; } else if (key.equals(getString(R.string.show_play_with_kodi_key))) { updateFlags |= TOOLBAR_ITEMS_UPDATE_FLAG; + } else if (key.equals(getString(R.string.show_comments_key))) { + showComments = sharedPreferences.getBoolean(key, true); + updateFlags |= COMMENTS_UPDATE_FLAG; } } @@ -300,7 +312,6 @@ public class VideoDetailFragment private static final String INFO_KEY = "info_key"; private static final String STACK_KEY = "stack_key"; - private static final String WAS_RELATED_EXPANDED_KEY = "was_related_expanded_key"; @Override public void onSaveInstanceState(Bundle outState) { @@ -309,10 +320,6 @@ public class VideoDetailFragment // Check if the next video label and video is visible, // if it is, include the two elements in the next check int nextCount = currentInfo != null && currentInfo.getNextVideo() != null ? 2 : 0; - if (relatedStreamsView != null - && relatedStreamsView.getChildCount() > INITIAL_RELATED_VIDEOS + nextCount) { - outState.putSerializable(WAS_RELATED_EXPANDED_KEY, true); - } if (!isLoading.get() && currentInfo != null && isVisible()) { outState.putSerializable(INFO_KEY, currentInfo); @@ -325,12 +332,11 @@ public class VideoDetailFragment protected void onRestoreInstanceState(@NonNull Bundle savedState) { super.onRestoreInstanceState(savedState); - wasRelatedStreamsExpanded = savedState.getBoolean(WAS_RELATED_EXPANDED_KEY, false); Serializable serializable = savedState.getSerializable(INFO_KEY); if (serializable instanceof StreamInfo) { //noinspection unchecked currentInfo = (StreamInfo) serializable; - InfoCache.getInstance().putInfo(serviceId, url, currentInfo); + InfoCache.getInstance().putInfo(serviceId, url, currentInfo, InfoItem.InfoType.STREAM); } serializable = savedState.getSerializable(STACK_KEY); @@ -338,6 +344,7 @@ public class VideoDetailFragment //noinspection unchecked stack.addAll((Collection) serializable); } + } /*////////////////////////////////////////////////////////////////////////// @@ -362,7 +369,8 @@ public class VideoDetailFragment } break; case R.id.detail_controls_download: - if (PermissionHelper.checkStoragePermissions(activity, PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { + if (PermissionHelper.checkStoragePermissions(activity, + PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { this.openDownloadDialog(); } break; @@ -392,9 +400,6 @@ public class VideoDetailFragment case R.id.detail_title_root_layout: toggleTitleAndDescription(); break; - case R.id.detail_related_streams_expand: - toggleExpandRelatedVideos(currentInfo); - break; } } @@ -418,45 +423,17 @@ public class VideoDetailFragment } private void toggleTitleAndDescription() { - if (videoTitleToggleArrow != null) { //it is null for tablets - if (videoDescriptionRootLayout.getVisibility() == View.VISIBLE) { - videoTitleTextView.setMaxLines(1); - videoDescriptionRootLayout.setVisibility(View.GONE); - videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); - } else { - videoTitleTextView.setMaxLines(10); - videoDescriptionRootLayout.setVisibility(View.VISIBLE); - videoTitleToggleArrow.setImageResource(R.drawable.arrow_up); - } + if (videoDescriptionRootLayout.getVisibility() == View.VISIBLE) { + videoTitleTextView.setMaxLines(1); + videoDescriptionRootLayout.setVisibility(View.GONE); + videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); + } else { + videoTitleTextView.setMaxLines(10); + videoDescriptionRootLayout.setVisibility(View.VISIBLE); + videoTitleToggleArrow.setImageResource(R.drawable.arrow_up); } } - private void toggleExpandRelatedVideos(StreamInfo info) { - if (DEBUG) Log.d(TAG, "toggleExpandRelatedVideos() called with: info = [" + info + "]"); - if (!showRelatedStreams) return; - - int nextCount = info.getNextVideo() != null ? 2 : 0; - int initialCount = INITIAL_RELATED_VIDEOS + nextCount; - - if (relatedStreamsView.getChildCount() > initialCount) { - relatedStreamsView.removeViews(initialCount, - relatedStreamsView.getChildCount() - (initialCount)); - relatedStreamExpandButton.setImageDrawable(ContextCompat.getDrawable( - activity, ThemeHelper.resolveResourceIdFromAttr(activity, R.attr.expand))); - return; - } - - //Log.d(TAG, "toggleExpandRelatedVideos() called with: info = [" + info + "], from = [" + INITIAL_RELATED_VIDEOS + "]"); - for (int i = INITIAL_RELATED_VIDEOS; i < info.getRelatedStreams().size(); i++) { - InfoItem item = info.getRelatedStreams().get(i); - //Log.d(TAG, "i = " + i); - relatedStreamsView.addView(infoItemBuilder.buildView(relatedStreamsView, item)); - } - relatedStreamExpandButton.setImageDrawable( - ContextCompat.getDrawable(activity, - ThemeHelper.resolveResourceIdFromAttr(activity, R.attr.collapse))); - } - /*////////////////////////////////////////////////////////////////////////// // Init //////////////////////////////////////////////////////////////////////////*/ @@ -466,8 +443,6 @@ public class VideoDetailFragment super.initViews(rootView, savedInstanceState); spinnerToolbar = activity.findViewById(R.id.toolbar).findViewById(R.id.toolbar_spinner); - parallaxScrollRootView = rootView.findViewById(R.id.detail_main_content); - thumbnailBackgroundButton = rootView.findViewById(R.id.detail_thumbnail_root_layout); thumbnailImageView = rootView.findViewById(R.id.detail_thumbnail_image_view); thumbnailPlayButton = rootView.findViewById(R.id.detail_thumbnail_play_button); @@ -503,30 +478,23 @@ public class VideoDetailFragment uploaderTextView = rootView.findViewById(R.id.detail_uploader_text_view); uploaderThumb = rootView.findViewById(R.id.detail_uploader_thumbnail_view); - relatedStreamRootLayout = rootView.findViewById(R.id.detail_related_streams_root_layout); - nextStreamTitle = rootView.findViewById(R.id.detail_next_stream_title); - relatedStreamsView = rootView.findViewById(R.id.detail_related_streams_view); + appBarLayout = rootView.findViewById(R.id.appbarlayout); + viewPager = rootView.findViewById(R.id.viewpager); + pageAdapter = new TabAdaptor(getChildFragmentManager()); + viewPager.setAdapter(pageAdapter); + tabLayout = rootView.findViewById(R.id.tablayout); + tabLayout.setupWithViewPager(viewPager); - relatedStreamExpandButton = rootView.findViewById(R.id.detail_related_streams_expand); + relatedStreamsLayout = rootView.findViewById(R.id.relatedStreamsLayout); - infoItemBuilder = new InfoItemBuilder(activity); setHeightThumbnail(); + + } @Override protected void initListeners() { super.initListeners(); - infoItemBuilder.setOnStreamSelectedListener(new OnClickGesture() { - @Override - public void selected(StreamInfoItem selectedItem) { - selectAndLoadVideo(selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName()); - } - - @Override - public void held(StreamInfoItem selectedItem) { - showStreamDialog(selectedItem); - } - }); videoTitleRoot.setOnClickListener(this); uploaderRootLayout.setOnClickListener(this); @@ -536,7 +504,6 @@ public class VideoDetailFragment detailControlsAddToPlaylist.setOnClickListener(this); detailControlsDownload.setOnClickListener(this); detailControlsDownload.setOnLongClickListener(this); - relatedStreamExpandButton.setOnClickListener(this); detailControlsBackground.setLongClickable(true); detailControlsPopup.setLongClickable(true); @@ -619,44 +586,6 @@ public class VideoDetailFragment } } - private void initRelatedVideos(StreamInfo info) { - if (relatedStreamsView.getChildCount() > 0) relatedStreamsView.removeAllViews(); - - if (info.getNextVideo() != null && showRelatedStreams) { - nextStreamTitle.setVisibility(View.VISIBLE); - relatedStreamsView.addView( - infoItemBuilder.buildView(relatedStreamsView, info.getNextVideo())); - relatedStreamsView.addView(getSeparatorView()); - setRelatedStreamsVisibility(View.VISIBLE); - } else { - nextStreamTitle.setVisibility(View.GONE); - setRelatedStreamsVisibility(View.GONE); - } - - if (info.getRelatedStreams() != null - && !info.getRelatedStreams().isEmpty() && showRelatedStreams) { - //long first = System.nanoTime(), each; - int to = info.getRelatedStreams().size() >= INITIAL_RELATED_VIDEOS - ? INITIAL_RELATED_VIDEOS - : info.getRelatedStreams().size(); - for (int i = 0; i < to; i++) { - InfoItem item = info.getRelatedStreams().get(i); - //each = System.nanoTime(); - relatedStreamsView.addView(infoItemBuilder.buildView(relatedStreamsView, item)); - //if (DEBUG) Log.d(TAG, "each took " + ((System.nanoTime() - each) / 1000000L) + "ms"); - } - //if (DEBUG) Log.d(TAG, "Total time " + ((System.nanoTime() - first) / 1000000L) + "ms"); - - setRelatedStreamsVisibility(View.VISIBLE); - relatedStreamExpandButton.setVisibility(View.VISIBLE); - - relatedStreamExpandButton.setImageDrawable(ContextCompat.getDrawable( - activity, ThemeHelper.resolveResourceIdFromAttr(activity, R.attr.expand))); - } else { - if (info.getNextVideo() == null) setRelatedStreamsVisibility(View.GONE); - relatedStreamExpandButton.setVisibility(View.GONE); - } - } /*////////////////////////////////////////////////////////////////////////// // Menu @@ -690,7 +619,7 @@ public class VideoDetailFragment @Override public boolean onOptionsItemSelected(MenuItem item) { - if(isLoading.get()) { + if (isLoading.get()) { // if is still loading block menu return true; } @@ -699,13 +628,13 @@ public class VideoDetailFragment switch (id) { case R.id.menu_item_share: { if (currentInfo != null) { - shareUrl(currentInfo.getName(), currentInfo.getUrl()); + shareUrl(currentInfo.getName(), currentInfo.getOriginalUrl()); } return true; } case R.id.menu_item_openInBrowser: { if (currentInfo != null) { - openUrlInBrowser(currentInfo.getUrl()); + openUrlInBrowser(currentInfo.getOriginalUrl()); } return true; } @@ -714,7 +643,7 @@ public class VideoDetailFragment NavigationHelper.playWithKore(activity, Uri.parse( url.replace("https", "http"))); } catch (Exception e) { - if(DEBUG) Log.i(TAG, "Failed to start kore", e); + if (DEBUG) Log.i(TAG, "Failed to start kore", e); showInstallKoreDialog(activity); } return true; @@ -728,7 +657,8 @@ public class VideoDetailFragment builder.setMessage(R.string.kore_not_found) .setPositiveButton(R.string.install, (DialogInterface dialog, int which) -> NavigationHelper.installKore(context)) - .setNegativeButton(R.string.cancel, (DialogInterface dialog, int which) -> {}); + .setNegativeButton(R.string.cancel, (DialogInterface dialog, int which) -> { + }); builder.create().show(); } @@ -742,10 +672,16 @@ public class VideoDetailFragment boolean isExternalPlayerEnabled = PreferenceManager.getDefaultSharedPreferences(activity) .getBoolean(activity.getString(R.string.use_external_video_player_key), false); - sortedVideoStreams = ListHelper.getSortedStreamVideosList(activity, info.getVideoStreams(), info.getVideoOnlyStreams(), false); + sortedVideoStreams = ListHelper.getSortedStreamVideosList( + activity, + info.getVideoStreams(), + info.getVideoOnlyStreams(), + false); selectedVideoStreamIndex = ListHelper.getDefaultResolutionIndex(activity, sortedVideoStreams); - final StreamItemAdapter streamsAdapter = new StreamItemAdapter<>(activity, new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled); + final StreamItemAdapter streamsAdapter = + new StreamItemAdapter<>(activity, + new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled); spinnerToolbar.setAdapter(streamsAdapter); spinnerToolbar.setSelection(selectedVideoStreamIndex); spinnerToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @@ -770,17 +706,17 @@ public class VideoDetailFragment */ protected final LinkedList stack = new LinkedList<>(); - public void clearHistory() { - stack.clear(); - } - public void pushToStack(int serviceId, String videoUrl, String name) { if (DEBUG) { - Log.d(TAG, "pushToStack() called with: serviceId = [" + serviceId + "], videoUrl = [" + videoUrl + "], name = [" + name + "]"); + Log.d(TAG, "pushToStack() called with: serviceId = [" + + serviceId + "], videoUrl = [" + videoUrl + "], name = [" + name + "]"); } - if (stack.size() > 0 && stack.peek().getServiceId() == serviceId && stack.peek().getUrl().equals(videoUrl)) { - Log.d(TAG, "pushToStack() called with: serviceId == peek.serviceId = [" + serviceId + "], videoUrl == peek.getUrl = [" + videoUrl + "]"); + if (stack.size() > 0 + && stack.peek().getServiceId() == serviceId + && stack.peek().getUrl().equals(videoUrl)) { + Log.d(TAG, "pushToStack() called with: serviceId == peek.serviceId = [" + + serviceId + "], videoUrl == peek.getUrl = [" + videoUrl + "]"); return; } else { Log.d(TAG, "pushToStack() wasn't equal"); @@ -811,7 +747,11 @@ public class VideoDetailFragment // Get stack item from the new top StackItem peek = stack.peek(); - selectAndLoadVideo(peek.getServiceId(), peek.getUrl(), !TextUtils.isEmpty(peek.getTitle()) ? peek.getTitle() : ""); + selectAndLoadVideo(peek.getServiceId(), + peek.getUrl(), + !TextUtils.isEmpty(peek.getTitle()) + ? peek.getTitle() + : ""); return true; } @@ -831,28 +771,22 @@ public class VideoDetailFragment } public void prepareAndHandleInfo(final StreamInfo info, boolean scrollToTop) { - if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = [" + info + "], scrollToTop = [" + scrollToTop + "]"); + if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = [" + + info + "], scrollToTop = [" + scrollToTop + "]"); - setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName()); + setInitialData(info.getServiceId(), info.getUrl(), info.getName()); pushToStack(serviceId, url, name); showLoading(); + initTabs(); - Log.d(TAG, "prepareAndHandleInfo() called parallaxScrollRootView.getScrollY(): " - + parallaxScrollRootView.getScrollY()); - final boolean greaterThanThreshold = parallaxScrollRootView.getScrollY() > (int) - (getResources().getDisplayMetrics().heightPixels * .1f); + if (scrollToTop) appBarLayout.setExpanded(true, true); + handleResult(info); + showContent(); - if (scrollToTop) parallaxScrollRootView.smoothScrollTo(0, 0); - animateView(contentRootLayoutHiding, - false, - greaterThanThreshold ? 250 : 0, 0, () -> { - handleResult(info); - showContentWithAnimation(120, 0, .01f); - }); } protected void prepareAndLoadInfo() { - parallaxScrollRootView.smoothScrollTo(0, 0); + appBarLayout.setExpanded(true, true); pushToStack(serviceId, url, name); startLoading(false); } @@ -861,6 +795,7 @@ public class VideoDetailFragment public void startLoading(boolean forceLoad) { super.startLoading(forceLoad); + initTabs(); currentInfo = null; if (currentWorker != null) currentWorker.dispose(); @@ -870,12 +805,49 @@ public class VideoDetailFragment .subscribe((@NonNull StreamInfo result) -> { isLoading.set(false); currentInfo = result; - showContentWithAnimation(120, 0, 0); handleResult(result); + showContent(); }, (@NonNull Throwable throwable) -> { isLoading.set(false); onError(throwable); }); + + } + + private void initTabs() { + pageAdapter.clearAllItems(); + + if(shouldShowComments()){ + pageAdapter.addFragment(CommentsFragment.getInstance(serviceId, url, name), COMMENTS_TAB_TAG); + } + + if(showRelatedStreams && null == relatedStreamsLayout){ + //temp empty fragment. will be updated in handleResult + pageAdapter.addFragment(new Fragment(), RELATED_TAB_TAG); + } + + if(pageAdapter.getCount() == 0){ + pageAdapter.addFragment(new EmptyFragment(), EMPTY_TAB_TAG); + } + + pageAdapter.notifyDataSetUpdate(); + + if(pageAdapter.getCount() < 2){ + tabLayout.setVisibility(View.GONE); + }else{ + tabLayout.setVisibility(View.VISIBLE); + } + } + + private boolean shouldShowComments() { + try { + return showComments && NewPipe.getService(serviceId) + .getServiceInfo() + .getMediaCapabilities() + .contains(COMMENTS); + } catch (ExtractionException e) { + return false; + } } /*////////////////////////////////////////////////////////////////////////// @@ -995,24 +967,6 @@ public class VideoDetailFragment })); } - private View getSeparatorView() { - View separator = new View(activity); - LinearLayout.LayoutParams params = - new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1); - int m8 = (int) TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()); - int m5 = (int) TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()); - params.setMargins(m8, m5, m8, m5); - separator.setLayoutParams(params); - - TypedValue typedValue = new TypedValue(); - activity.getTheme().resolveAttribute(R.attr.separator_color, typedValue, true); - separator.setBackgroundColor(typedValue.data); - - return separator; - } - private void setHeightThumbnail() { final DisplayMetrics metrics = getResources().getDisplayMetrics(); boolean isPortrait = metrics.heightPixels > metrics.widthPixels; @@ -1024,49 +978,8 @@ public class VideoDetailFragment thumbnailImageView.setMinimumHeight(height); } - private void showContentWithAnimation(long duration, - long delay, - @FloatRange(from = 0.0f, to = 1.0f) float translationPercent) { - int translationY = (int) (getResources().getDisplayMetrics().heightPixels * - (translationPercent > 0.0f ? translationPercent : .06f)); - - contentRootLayoutHiding.animate().setListener(null).cancel(); - contentRootLayoutHiding.setAlpha(0f); - contentRootLayoutHiding.setTranslationY(translationY); - contentRootLayoutHiding.setVisibility(View.VISIBLE); - contentRootLayoutHiding.animate() - .alpha(1f) - .translationY(0) - .setStartDelay(delay) - .setDuration(duration) - .setInterpolator(new FastOutSlowInInterpolator()) - .start(); - - uploaderRootLayout.animate().setListener(null).cancel(); - uploaderRootLayout.setAlpha(0f); - uploaderRootLayout.setTranslationY(translationY); - uploaderRootLayout.setVisibility(View.VISIBLE); - uploaderRootLayout.animate() - .alpha(1f) - .translationY(0) - .setStartDelay((long) (duration * .5f) + delay) - .setDuration(duration) - .setInterpolator(new FastOutSlowInInterpolator()) - .start(); - - if (showRelatedStreams) { - relatedStreamRootLayout.animate().setListener(null).cancel(); - relatedStreamRootLayout.setAlpha(0f); - relatedStreamRootLayout.setTranslationY(translationY); - relatedStreamRootLayout.setVisibility(View.VISIBLE); - relatedStreamRootLayout.animate() - .alpha(1f) - .translationY(0) - .setStartDelay((long) (duration * .8f) + delay) - .setDuration(duration) - .setInterpolator(new FastOutSlowInInterpolator()) - .start(); - } + private void showContent() { + AnimationUtils.slideUp(contentRootLayoutHiding,120, 96, 0.06f); } protected void setInitialData(int serviceId, String url, String name) { @@ -1101,7 +1014,7 @@ public class VideoDetailFragment public void showLoading() { super.showLoading(); - animateView(contentRootLayoutHiding, false, 200); + contentRootLayoutHiding.setVisibility(View.INVISIBLE); animateView(spinnerToolbar, false, 200); animateView(thumbnailPlayButton, false, 50); animateView(detailDurationView, false, 100); @@ -1111,17 +1024,17 @@ public class VideoDetailFragment animateView(videoTitleTextView, true, 0); videoDescriptionRootLayout.setVisibility(View.GONE); - if (videoTitleToggleArrow != null) { //phone - videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); - videoTitleToggleArrow.setVisibility(View.GONE); - } else { //tablet - final View related = (View) relatedStreamRootLayout.getParent(); - //don`t need to hide it if related streams are disabled - if (related.getVisibility() == View.VISIBLE) { - related.setVisibility(View.INVISIBLE); + videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); + videoTitleToggleArrow.setVisibility(View.GONE); + videoTitleRoot.setClickable(false); + + if(relatedStreamsLayout != null){ + if(showRelatedStreams){ + relatedStreamsLayout.setVisibility(View.INVISIBLE); + }else{ + relatedStreamsLayout.setVisibility(View.GONE); } } - videoTitleRoot.setClickable(false); imageLoader.cancelDisplayTask(thumbnailImageView); imageLoader.cancelDisplayTask(uploaderThumb); @@ -1134,7 +1047,20 @@ public class VideoDetailFragment super.handleResult(info); setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName()); - pushToStack(serviceId, url, name); + + if(showRelatedStreams){ + if(null == relatedStreamsLayout){ //phone + pageAdapter.updateItem(RELATED_TAB_TAG, RelatedVideosFragment.getInstance(currentInfo)); + pageAdapter.notifyDataSetUpdate(); + }else{ //tablet + getChildFragmentManager().beginTransaction() + .replace(R.id.relatedStreamsLayout, RelatedVideosFragment.getInstance(currentInfo)) + .commitNow(); + relatedStreamsLayout.setVisibility(View.VISIBLE); + } + } + + //pushToStack(serviceId, url, name); animateView(thumbnailPlayButton, true, 200); videoTitleTextView.setText(name); @@ -1185,25 +1111,23 @@ public class VideoDetailFragment if (info.getDuration() > 0) { detailDurationView.setText(Localization.getDurationString(info.getDuration())); - detailDurationView.setBackgroundColor(ContextCompat.getColor(activity, R.color.duration_background_color)); + detailDurationView.setBackgroundColor( + ContextCompat.getColor(activity, R.color.duration_background_color)); animateView(detailDurationView, true, 100); } else if (info.getStreamType() == StreamType.LIVE_STREAM) { detailDurationView.setText(R.string.duration_live); - detailDurationView.setBackgroundColor(ContextCompat.getColor(activity, R.color.live_duration_background_color)); + detailDurationView.setBackgroundColor( + ContextCompat.getColor(activity, R.color.live_duration_background_color)); animateView(detailDurationView, true, 100); } else { detailDurationView.setVisibility(View.GONE); } videoDescriptionView.setVisibility(View.GONE); - if (videoTitleToggleArrow != null) { - videoTitleRoot.setClickable(true); - videoTitleToggleArrow.setVisibility(View.VISIBLE); - videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); - videoDescriptionRootLayout.setVisibility(View.GONE); - } else { - videoDescriptionRootLayout.setVisibility(View.VISIBLE); - } + videoTitleRoot.setClickable(true); + videoTitleToggleArrow.setVisibility(View.VISIBLE); + videoTitleToggleArrow.setImageResource(R.drawable.arrow_down); + videoDescriptionRootLayout.setVisibility(View.GONE); if (!TextUtils.isEmpty(info.getUploadDate())) { videoUploadDateView.setText(Localization.localizeDate(activity, info.getUploadDate())); } @@ -1212,11 +1136,6 @@ public class VideoDetailFragment animateView(spinnerToolbar, true, 500); setupActionBar(info); initThumbnailViews(info); - initRelatedVideos(info); - if (wasRelatedStreamsExpanded) { - toggleExpandRelatedVideos(currentInfo); - wasRelatedStreamsExpanded = false; - } setTitleToUrl(info.getServiceId(), info.getUrl(), info.getName()); setTitleToUrl(info.getServiceId(), info.getOriginalUrl(), info.getName()); @@ -1251,11 +1170,6 @@ public class VideoDetailFragment // Only auto play in the first open autoPlayEnabled = false; } - - final ViewParent related = relatedStreamRootLayout.getParent(); - if (related instanceof ScrollView) { - ((ScrollView) related).scrollTo(0, 0); - } } @@ -1269,10 +1183,18 @@ public class VideoDetailFragment downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog"); } catch (Exception e) { - Toast.makeText(activity, - R.string.could_not_setup_download_menu, - Toast.LENGTH_LONG).show(); - e.printStackTrace(); + ErrorActivity.ErrorInfo info = ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, + ServiceList.all() + .get(currentInfo + .getServiceId()) + .getServiceInfo() + .getName(), "", + R.string.could_not_setup_download_menu); + + ErrorActivity.reportError(getActivity(), + e, + getActivity().getClass(), + getActivity().findViewById(android.R.id.content), info); } } @@ -1314,13 +1236,4 @@ public class VideoDetailFragment showError(getString(R.string.blocked_by_gema), false, R.drawable.gruese_die_gema); } - - private void setRelatedStreamsVisibility(int visibility) { - final ViewParent parent = relatedStreamRootLayout.getParent(); - if (parent instanceof ScrollView) { - ((ScrollView) parent).setVisibility(visibility); - } else { - relatedStreamRootLayout.setVisibility(visibility); - } - } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java index 0816334ea..b61fe0d02 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java @@ -22,6 +22,7 @@ import android.view.View; import org.schabi.newpipe.R; import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.channel.ChannelInfoItem; +import org.schabi.newpipe.extractor.comments.CommentsInfoItem; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.fragments.BaseStateFragment; @@ -220,6 +221,13 @@ public abstract class BaseListFragment extends BaseStateFragment implem } }); + infoListAdapter.setOnCommentsSelectedListener(new OnClickGesture() { + @Override + public void selected(CommentsInfoItem selectedItem) { + onItemSelected(selectedItem); + } + }); + itemsList.clearOnScrollListeners(); itemsList.addOnScrollListener(new OnScrollBelowItemsListener() { @Override diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index 6a3b3eb50..b9489ffa7 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -233,10 +233,10 @@ public class ChannelFragment extends BaseListInfoFragment { openRssFeed(); break; case R.id.menu_item_openInBrowser: - openUrlInBrowser(url); + openUrlInBrowser(currentInfo.getOriginalUrl()); break; case R.id.menu_item_share: - shareUrl(name, url); + shareUrl(name, currentInfo.getOriginalUrl()); break; default: return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentsFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentsFragment.java new file mode 100644 index 000000000..956e6c1c8 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentsFragment.java @@ -0,0 +1,149 @@ +package org.schabi.newpipe.fragments.list.comments; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.extractor.ListExtractor; +import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.comments.CommentsInfo; +import org.schabi.newpipe.fragments.list.BaseListInfoFragment; +import org.schabi.newpipe.report.UserAction; +import org.schabi.newpipe.util.AnimationUtils; +import org.schabi.newpipe.util.ExtractorHelper; + +import io.reactivex.Single; +import io.reactivex.disposables.CompositeDisposable; + +public class CommentsFragment extends BaseListInfoFragment { + + private CompositeDisposable disposables = new CompositeDisposable(); + /*////////////////////////////////////////////////////////////////////////// + // Views + //////////////////////////////////////////////////////////////////////////*/ + + + + private boolean mIsVisibleToUser = false; + + public static CommentsFragment getInstance(int serviceId, String url, String name) { + CommentsFragment instance = new CommentsFragment(); + instance.setInitialData(serviceId, url, name); + return instance; + } + + /*////////////////////////////////////////////////////////////////////////// + // LifeCycle + //////////////////////////////////////////////////////////////////////////*/ + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + mIsVisibleToUser = isVisibleToUser; + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_comments, container, false); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (disposables != null) disposables.clear(); + } + + + /*////////////////////////////////////////////////////////////////////////// + // Load and handle + //////////////////////////////////////////////////////////////////////////*/ + + @Override + protected Single loadMoreItemsLogic() { + return ExtractorHelper.getMoreCommentItems(serviceId, currentInfo, currentNextPageUrl); + } + + @Override + protected Single loadResult(boolean forceLoad) { + return ExtractorHelper.getCommentsInfo(serviceId, url, forceLoad); + } + + /*////////////////////////////////////////////////////////////////////////// + // Contract + //////////////////////////////////////////////////////////////////////////*/ + + @Override + public void showLoading() { + super.showLoading(); + } + + @Override + public void handleResult(@NonNull CommentsInfo result) { + super.handleResult(result); + + AnimationUtils.slideUp(getView(),120, 96, 0.06f); + + if (!result.getErrors().isEmpty()) { + showSnackBarError(result.getErrors(), UserAction.REQUESTED_COMMENTS, NewPipe.getNameOfService(result.getServiceId()), result.getUrl(), 0); + } + + if (disposables != null) disposables.clear(); + } + + @Override + public void handleNextItems(ListExtractor.InfoItemsPage result) { + super.handleNextItems(result); + + if (!result.getErrors().isEmpty()) { + showSnackBarError(result.getErrors(), + UserAction.REQUESTED_COMMENTS, + NewPipe.getNameOfService(serviceId), + "Get next page of: " + url, + R.string.general_error); + } + } + + /*////////////////////////////////////////////////////////////////////////// + // OnError + //////////////////////////////////////////////////////////////////////////*/ + + @Override + protected boolean onError(Throwable exception) { + if (super.onError(exception)) return true; + + hideLoading(); + showSnackBarError(exception, UserAction.REQUESTED_COMMENTS, NewPipe.getNameOfService(serviceId), url, R.string.error_unable_to_load_comments); + return true; + } + + /*////////////////////////////////////////////////////////////////////////// + // Utils + //////////////////////////////////////////////////////////////////////////*/ + + @Override + public void setTitle(String title) { + return; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + return; + } + + @Override + protected boolean isGridLayout() { + return false; + } +} diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index 2833abb8d..a3b01f251 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -12,6 +12,7 @@ import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.TooltipCompat; +import android.support.v7.widget.helper.ItemTouchHelper; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -39,15 +40,15 @@ import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.search.SearchExtractor; import org.schabi.newpipe.extractor.search.SearchInfo; +import org.schabi.newpipe.util.FireTvUtils; import org.schabi.newpipe.fragments.BackPressable; import org.schabi.newpipe.fragments.list.BaseListFragment; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.UserAction; -import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.AnimationUtils; +import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.ExtractorHelper; -import org.schabi.newpipe.util.LayoutManagerSmoothScroller; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.ServiceHelper; @@ -72,8 +73,8 @@ import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import io.reactivex.subjects.PublishSubject; +import static android.support.v7.widget.helper.ItemTouchHelper.Callback.makeMovementFlags; import static java.util.Arrays.asList; - import static org.schabi.newpipe.util.AnimationUtils.animateView; public class SearchFragment @@ -104,8 +105,13 @@ public class SearchFragment // this three represet the current search query @State protected String searchString; + + /** + * No content filter should add like contentfilter = all + * be aware of this when implementing an extractor. + */ @State - protected String[] contentFilter; + protected String[] contentFilter = new String[0]; @State protected String sortFilter; @@ -292,7 +298,23 @@ public class SearchFragment suggestionsPanel = rootView.findViewById(R.id.suggestions_panel); suggestionsRecyclerView = rootView.findViewById(R.id.suggestions_list); suggestionsRecyclerView.setAdapter(suggestionListAdapter); - suggestionsRecyclerView.setLayoutManager(new LayoutManagerSmoothScroller(activity)); + new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return getSuggestionMovementFlags(recyclerView, viewHolder); + } + + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, + @NonNull RecyclerView.ViewHolder viewHolder1) { + return false; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + onSuggestionItemSwiped(viewHolder, i); + } + }).attachToRecyclerView(suggestionsRecyclerView); searchToolbarContainer = activity.findViewById(R.id.toolbar_search_container); searchEditText = searchToolbarContainer.findViewById(R.id.toolbar_search_edit_text); @@ -335,7 +357,7 @@ public class SearchFragment || (searchEditText != null && !TextUtils.isEmpty(searchEditText.getText()))) { search(!TextUtils.isEmpty(searchString) ? searchString - : searchEditText.getText().toString(), new String[0], ""); + : searchEditText.getText().toString(), this.contentFilter, ""); } else { if (searchEditText != null) { searchEditText.setText(""); @@ -449,6 +471,9 @@ public class SearchFragment if (isSuggestionsEnabled && errorPanelRoot.getVisibility() != View.VISIBLE) { showSuggestionsPanel(); } + if(FireTvUtils.isFireTv()){ + showKeyboardSearch(); + } }); searchEditText.setOnFocusChangeListener((View v, boolean hasFocus) -> { @@ -499,7 +524,9 @@ public class SearchFragment if (DEBUG) { Log.d(TAG, "onEditorAction() called with: v = [" + v + "], actionId = [" + actionId + "], event = [" + event + "]"); } - if (event != null + if(actionId == EditorInfo.IME_ACTION_PREVIOUS){ + hideKeyboardSearch(); + } else if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER || event.getAction() == EditorInfo.IME_ACTION_SEARCH)) { search(searchEditText.getText().toString(), new String[0], ""); @@ -541,7 +568,7 @@ public class SearchFragment if (searchEditText.requestFocus()) { InputMethodManager imm = (InputMethodManager) activity.getSystemService( Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(searchEditText, InputMethodManager.SHOW_IMPLICIT); + imm.showSoftInput(searchEditText, InputMethodManager.SHOW_FORCED); } } @@ -551,8 +578,7 @@ public class SearchFragment InputMethodManager imm = (InputMethodManager) activity.getSystemService( Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(searchEditText.getWindowToken(), - InputMethodManager.HIDE_NOT_ALWAYS); + imm.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); searchEditText.clearFocus(); } @@ -736,6 +762,7 @@ public class SearchFragment @Override protected void loadMoreItems() { + if(nextPageUrl == null || nextPageUrl.isEmpty()) return; isLoading.set(true); showListFooter(true); if (searchDisposable != null) searchDisposable.dispose(); @@ -890,4 +917,28 @@ public class SearchFragment return true; } + + /*////////////////////////////////////////////////////////////////////////// + // Suggestion item touch helper + //////////////////////////////////////////////////////////////////////////*/ + + public int getSuggestionMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + final int position = viewHolder.getAdapterPosition(); + final SuggestionItem item = suggestionListAdapter.getItem(position); + return item.fromHistory ? makeMovementFlags(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) : 0; + } + + public void onSuggestionItemSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + final int position = viewHolder.getAdapterPosition(); + final String query = suggestionListAdapter.getItem(position).query; + final Disposable onDelete = historyRecordManager.deleteSearchHistory(query) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + howManyDeleted -> suggestionPublisher + .onNext(searchEditText.getText().toString()), + throwable -> showSnackBarError(throwable, + UserAction.DELETE_FROM_HISTORY, "none", + "Deleting item failed", R.string.general_error)); + disposables.add(onDelete); + } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SuggestionListAdapter.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SuggestionListAdapter.java index 7b5f72c53..3f4e9af0b 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SuggestionListAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SuggestionListAdapter.java @@ -75,7 +75,7 @@ public class SuggestionListAdapter extends RecyclerView.Adapter implements SharedPreferences.OnSharedPreferenceChangeListener{ + + private CompositeDisposable disposables = new CompositeDisposable(); + private RelatedStreamInfo relatedStreamInfo; + /*////////////////////////////////////////////////////////////////////////// + // Views + //////////////////////////////////////////////////////////////////////////*/ + private View headerRootLayout; + private Switch aSwitch; + + private boolean mIsVisibleToUser = false; + + public static RelatedVideosFragment getInstance(StreamInfo info) { + RelatedVideosFragment instance = new RelatedVideosFragment(); + instance.setInitialData(info); + return instance; + } + + /*////////////////////////////////////////////////////////////////////////// + // LifeCycle + //////////////////////////////////////////////////////////////////////////*/ + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + mIsVisibleToUser = isVisibleToUser; + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_related_streams, container, false); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (disposables != null) disposables.clear(); + } + + protected View getListHeader(){ + if(relatedStreamInfo != null && relatedStreamInfo.getNextStream() != null){ + headerRootLayout = activity.getLayoutInflater().inflate(R.layout.related_streams_header, itemsList, false); + aSwitch = headerRootLayout.findViewById(R.id.autoplay_switch); + + SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getContext()); + Boolean autoplay = pref.getBoolean(getString(R.string.auto_queue_key), false); + aSwitch.setChecked(autoplay); + aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + SharedPreferences.Editor prefEdit = PreferenceManager.getDefaultSharedPreferences(getContext()).edit(); + prefEdit.putBoolean(getString(R.string.auto_queue_key), b); + prefEdit.apply(); + } + }); + return headerRootLayout; + }else{ + return null; + } + } + + @Override + protected Single loadMoreItemsLogic() { + return Single.fromCallable(() -> ListExtractor.InfoItemsPage.emptyPage()); + } + + @Override + protected Single loadResult(boolean forceLoad) { + return Single.fromCallable(() -> relatedStreamInfo); + } + + /*////////////////////////////////////////////////////////////////////////// + // Contract + //////////////////////////////////////////////////////////////////////////*/ + + @Override + public void showLoading() { + super.showLoading(); + if(null != headerRootLayout) headerRootLayout.setVisibility(View.INVISIBLE); + } + + @Override + public void handleResult(@NonNull RelatedStreamInfo result) { + + super.handleResult(result); + + if(null != headerRootLayout) headerRootLayout.setVisibility(View.VISIBLE); + AnimationUtils.slideUp(getView(),120, 96, 0.06f); + + if (!result.getErrors().isEmpty()) { + showSnackBarError(result.getErrors(), UserAction.REQUESTED_STREAM, NewPipe.getNameOfService(result.getServiceId()), result.getUrl(), 0); + } + + if (disposables != null) disposables.clear(); + } + + @Override + public void handleNextItems(ListExtractor.InfoItemsPage result) { + super.handleNextItems(result); + + if (!result.getErrors().isEmpty()) { + showSnackBarError(result.getErrors(), + UserAction.REQUESTED_STREAM, + NewPipe.getNameOfService(serviceId), + "Get next page of: " + url, + R.string.general_error); + } + } + + /*////////////////////////////////////////////////////////////////////////// + // OnError + //////////////////////////////////////////////////////////////////////////*/ + + @Override + protected boolean onError(Throwable exception) { + if (super.onError(exception)) return true; + + hideLoading(); + showSnackBarError(exception, UserAction.REQUESTED_STREAM, NewPipe.getNameOfService(serviceId), url, R.string.general_error); + return true; + } + + /*////////////////////////////////////////////////////////////////////////// + // Utils + //////////////////////////////////////////////////////////////////////////*/ + + @Override + public void setTitle(String title) { + return; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + return; + } + + private void setInitialData(StreamInfo info) { + super.setInitialData(info.getServiceId(), info.getUrl(), info.getName()); + if(this.relatedStreamInfo == null) this.relatedStreamInfo = RelatedStreamInfo.getInfo(info); + } + + + private static final String INFO_KEY = "related_info_key"; + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putSerializable(INFO_KEY, relatedStreamInfo); + } + + @Override + protected void onRestoreInstanceState(@NonNull Bundle savedState) { + super.onRestoreInstanceState(savedState); + if (savedState != null) { + Serializable serializable = savedState.getSerializable(INFO_KEY); + if(serializable instanceof RelatedStreamInfo){ + this.relatedStreamInfo = (RelatedStreamInfo) serializable; + } + } + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { + SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getContext()); + Boolean autoplay = pref.getBoolean(getString(R.string.auto_queue_key), false); + if(null != aSwitch) aSwitch.setChecked(autoplay); + } + + @Override + protected boolean isGridLayout() { + return false; + } +} diff --git a/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java b/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java index f473e5d08..0e9fd3277 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/InfoItemBuilder.java @@ -10,10 +10,13 @@ import com.nostra13.universalimageloader.core.ImageLoader; import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.channel.ChannelInfoItem; +import org.schabi.newpipe.extractor.comments.CommentsInfoItem; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.info_list.holder.ChannelInfoItemHolder; import org.schabi.newpipe.info_list.holder.ChannelMiniInfoItemHolder; +import org.schabi.newpipe.info_list.holder.CommentsInfoItemHolder; +import org.schabi.newpipe.info_list.holder.CommentsMiniInfoItemHolder; import org.schabi.newpipe.info_list.holder.InfoItemHolder; import org.schabi.newpipe.info_list.holder.PlaylistInfoItemHolder; import org.schabi.newpipe.info_list.holder.PlaylistMiniInfoItemHolder; @@ -50,6 +53,7 @@ public class InfoItemBuilder { private OnClickGesture onStreamSelectedListener; private OnClickGesture onChannelSelectedListener; private OnClickGesture onPlaylistSelectedListener; + private OnClickGesture onCommentsSelectedListener; public InfoItemBuilder(Context context) { this.context = context; @@ -73,6 +77,8 @@ public class InfoItemBuilder { return useMiniVariant ? new ChannelMiniInfoItemHolder(this, parent) : new ChannelInfoItemHolder(this, parent); case PLAYLIST: return useMiniVariant ? new PlaylistMiniInfoItemHolder(this, parent) : new PlaylistInfoItemHolder(this, parent); + case COMMENT: + return useMiniVariant ? new CommentsMiniInfoItemHolder(this, parent) : new CommentsInfoItemHolder(this, parent); default: Log.e(TAG, "Trollolo"); throw new RuntimeException("InfoType not expected = " + infoType.name()); @@ -111,4 +117,12 @@ public class InfoItemBuilder { this.onPlaylistSelectedListener = listener; } + public OnClickGesture getOnCommentsSelectedListener() { + return onCommentsSelectedListener; + } + + public void setOnCommentsSelectedListener(OnClickGesture onCommentsSelectedListener) { + this.onCommentsSelectedListener = onCommentsSelectedListener; + } + } diff --git a/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java b/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java index 15fdcad05..5e7095c7d 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java @@ -9,10 +9,13 @@ import android.view.ViewGroup; import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.channel.ChannelInfoItem; +import org.schabi.newpipe.extractor.comments.CommentsInfoItem; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.info_list.holder.ChannelInfoItemHolder; import org.schabi.newpipe.info_list.holder.ChannelMiniInfoItemHolder; +import org.schabi.newpipe.info_list.holder.CommentsInfoItemHolder; +import org.schabi.newpipe.info_list.holder.CommentsMiniInfoItemHolder; import org.schabi.newpipe.info_list.holder.ChannelGridInfoItemHolder; import org.schabi.newpipe.info_list.holder.InfoItemHolder; import org.schabi.newpipe.info_list.holder.PlaylistGridInfoItemHolder; @@ -63,6 +66,8 @@ public class InfoListAdapter extends RecyclerView.Adapter infoItemList; @@ -98,6 +103,10 @@ public class InfoListAdapter extends RecyclerView.Adapter listener) { + infoItemBuilder.setOnCommentsSelectedListener(listener); + } + public void useMiniItemVariants(boolean useMiniVariant) { this.useMiniVariant = useMiniVariant; } @@ -223,6 +232,8 @@ public class InfoListAdapter extends RecyclerView.Adapter + * ChannelInfoItemHolder .java is part of NewPipe. + * + * NewPipe is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * NewPipe is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with NewPipe. If not, see . + */ + +public class CommentsInfoItemHolder extends CommentsMiniInfoItemHolder { + + public final TextView itemTitleView; + + public CommentsInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) { + super(infoItemBuilder, R.layout.list_comments_item, parent); + + itemTitleView = itemView.findViewById(R.id.itemTitleView); + } + + @Override + public void updateFromItem(final InfoItem infoItem) { + super.updateFromItem(infoItem); + + if (!(infoItem instanceof CommentsInfoItem)) return; + final CommentsInfoItem item = (CommentsInfoItem) infoItem; + + itemTitleView.setText(item.getAuthorName()); + } + +} diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java new file mode 100644 index 000000000..c2bc86691 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java @@ -0,0 +1,99 @@ +package org.schabi.newpipe.info_list.holder; + +import android.support.v7.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.extractor.InfoItem; +import org.schabi.newpipe.extractor.comments.CommentsInfoItem; +import org.schabi.newpipe.info_list.InfoItemBuilder; +import org.schabi.newpipe.report.ErrorActivity; +import org.schabi.newpipe.util.ImageDisplayConstants; +import org.schabi.newpipe.util.NavigationHelper; + +import de.hdodenhof.circleimageview.CircleImageView; + +public class CommentsMiniInfoItemHolder extends InfoItemHolder { + public final CircleImageView itemThumbnailView; + private final TextView itemContentView; + private final TextView itemLikesCountView; + private final TextView itemDislikesCountView; + private final TextView itemPublishedTime; + + private static final int commentDefaultLines = 2; + private static final int commentExpandedLines = 1000; + + CommentsMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) { + super(infoItemBuilder, layoutId, parent); + + itemThumbnailView = itemView.findViewById(R.id.itemThumbnailView); + itemLikesCountView = itemView.findViewById(R.id.detail_thumbs_up_count_view); + itemDislikesCountView = itemView.findViewById(R.id.detail_thumbs_down_count_view); + itemPublishedTime = itemView.findViewById(R.id.itemPublishedTime); + itemContentView = itemView.findViewById(R.id.itemCommentContentView); + } + + public CommentsMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, ViewGroup parent) { + this(infoItemBuilder, R.layout.list_comments_mini_item, parent); + } + + @Override + public void updateFromItem(final InfoItem infoItem) { + if (!(infoItem instanceof CommentsInfoItem)) return; + final CommentsInfoItem item = (CommentsInfoItem) infoItem; + + itemBuilder.getImageLoader() + .displayImage(item.getAuthorThumbnail(), + itemThumbnailView, + ImageDisplayConstants.DISPLAY_THUMBNAIL_OPTIONS); + + itemThumbnailView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + try { + final AppCompatActivity activity = (AppCompatActivity) itemBuilder.getContext(); + NavigationHelper.openChannelFragment( + activity.getSupportFragmentManager(), + item.getServiceId(), + item.getAuthorEndpoint(), + item.getAuthorName()); + } catch (Exception e) { + ErrorActivity.reportUiError((AppCompatActivity) itemBuilder.getContext(), e); + } + } + }); + + // ellipsize if not already ellipsized + if (null == itemContentView.getEllipsize()) { + itemContentView.setEllipsize(TextUtils.TruncateAt.END); + itemContentView.setMaxLines(commentDefaultLines); + } + + itemContentView.setText(item.getCommentText()); + if (null != item.getLikeCount()) { + itemLikesCountView.setText(String.valueOf(item.getLikeCount())); + } + itemPublishedTime.setText(item.getPublishedTime()); + + itemView.setOnClickListener(view -> { + toggleEllipsize(item.getCommentText()); + if (itemBuilder.getOnCommentsSelectedListener() != null) { + itemBuilder.getOnCommentsSelectedListener().selected(item); + } + }); + } + + private void toggleEllipsize(String text) { + // toggle ellipsize + if (null == itemContentView.getEllipsize()) { + itemContentView.setEllipsize(TextUtils.TruncateAt.END); + itemContentView.setMaxLines(commentDefaultLines); + } else { + itemContentView.setEllipsize(null); + itemContentView.setMaxLines(commentExpandedLines); + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java index 32083fd42..5436913dc 100644 --- a/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java @@ -8,7 +8,11 @@ import android.os.Parcelable; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; +import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -21,11 +25,13 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.database.LocalItem; import org.schabi.newpipe.database.stream.StreamStatisticsEntry; import org.schabi.newpipe.extractor.stream.StreamInfoItem; -import org.schabi.newpipe.local.BaseLocalListFragment; import org.schabi.newpipe.info_list.InfoItemDialog; +import org.schabi.newpipe.local.BaseLocalListFragment; import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.SinglePlayQueue; +import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.UserAction; +import org.schabi.newpipe.settings.SettingsActivity; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.OnClickGesture; import org.schabi.newpipe.util.ThemeHelper; @@ -104,6 +110,12 @@ public class StatisticsPlaylistFragment } } + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.menu_history, menu); + } + /////////////////////////////////////////////////////////////////////////// // Fragment LifeCycle - Views /////////////////////////////////////////////////////////////////////////// @@ -155,6 +167,53 @@ public class StatisticsPlaylistFragment }); } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_history_clear: + new AlertDialog.Builder(activity) + .setTitle(R.string.delete_view_history_alert) + .setNegativeButton(R.string.cancel, ((dialog, which) -> dialog.dismiss())) + .setPositiveButton(R.string.delete, ((dialog, which) -> { + final Disposable onDelete = recordManager.deleteWholeStreamHistory() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + howManyDeleted -> Toast.makeText(getContext(), + R.string.view_history_deleted, + Toast.LENGTH_SHORT).show(), + throwable -> ErrorActivity.reportError(getContext(), + throwable, + SettingsActivity.class, null, + ErrorActivity.ErrorInfo.make( + UserAction.DELETE_FROM_HISTORY, + "none", + "Delete view history", + R.string.general_error))); + + final Disposable onClearOrphans = recordManager.removeOrphanedRecords() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + howManyDeleted -> {}, + throwable -> ErrorActivity.reportError(getContext(), + throwable, + SettingsActivity.class, null, + ErrorActivity.ErrorInfo.make( + UserAction.DELETE_FROM_HISTORY, + "none", + "Delete search history", + R.string.general_error))); + disposables.add(onClearOrphans); + disposables.add(onDelete); + })) + .create() + .show(); + break; + default: + return super.onOptionsItemSelected(item); + } + return true; + } + /////////////////////////////////////////////////////////////////////////// // Fragment LifeCycle - Loading /////////////////////////////////////////////////////////////////////////// diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionService.java b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionService.java index f9e2d9583..7e80264e6 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionService.java +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionService.java @@ -147,11 +147,16 @@ public class SubscriptionService { } private boolean isSubscriptionUpToDate(final ChannelInfo info, final SubscriptionEntity entity) { - return info.getUrl().equals(entity.getUrl()) && + return equalsAndNotNull(info.getUrl(), entity.getUrl()) && info.getServiceId() == entity.getServiceId() && info.getName().equals(entity.getName()) && - info.getAvatarUrl().equals(entity.getAvatarUrl()) && - info.getDescription().equals(entity.getDescription()) && + equalsAndNotNull(info.getAvatarUrl(), entity.getAvatarUrl()) && + equalsAndNotNull(info.getDescription(), entity.getDescription()) && info.getSubscriberCount() == entity.getSubscriberCount(); } + + private boolean equalsAndNotNull(final Object o1, final Object o2) { + return (o1 != null && o2 != null) + && o1.equals(o2); + } } diff --git a/app/src/main/java/org/schabi/newpipe/player/AudioServiceLeakFix.java b/app/src/main/java/org/schabi/newpipe/player/AudioServiceLeakFix.java new file mode 100644 index 000000000..9f0c849f5 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/player/AudioServiceLeakFix.java @@ -0,0 +1,30 @@ +package org.schabi.newpipe.player; + +import android.content.Context; +import android.content.ContextWrapper; + +/** + * Fixes a leak caused by AudioManager using an Activity context. + * Tracked at https://android-review.googlesource.com/#/c/140481/1 and + * https://github.com/square/leakcanary/issues/205 + * Source: + * https://gist.github.com/jankovd/891d96f476f7a9ce24e2 + */ +public class AudioServiceLeakFix extends ContextWrapper { + + AudioServiceLeakFix(Context base) { + super(base); + } + + public static ContextWrapper preventLeakOf(Context base) { + return new AudioServiceLeakFix(base); + } + + @Override + public Object getSystemService(String name) { + if (Context.AUDIO_SERVICE.equals(name)) { + return getApplicationContext().getSystemService(name); + } + return super.getSystemService(name); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java index 91faa1014..94b401f09 100644 --- a/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/BackgroundPlayer.java @@ -130,6 +130,11 @@ public final class BackgroundPlayer extends Service { onClose(); } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(AudioServiceLeakFix.preventLeakOf(base)); + } + @Override public IBinder onBind(Intent intent) { return mBinder; diff --git a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java index f4fea5165..5dd931b54 100644 --- a/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/MainVideoPlayer.java @@ -241,6 +241,11 @@ public final class MainVideoPlayer extends AppCompatActivity isBackPressed = false; } + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(AudioServiceLeakFix.preventLeakOf(newBase)); + } + /*////////////////////////////////////////////////////////////////////////// // State Saving //////////////////////////////////////////////////////////////////////////*/ diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java index f5c731ed9..7578c444c 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java @@ -181,6 +181,11 @@ public final class PopupVideoPlayer extends Service { closePopup(); } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(AudioServiceLeakFix.preventLeakOf(base)); + } + @Override public IBinder onBind(Intent intent) { return mBinder; @@ -626,6 +631,7 @@ public final class PopupVideoPlayer extends Service { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { super.onLoadingComplete(imageUri, view, loadedImage); + if (playerImpl == null) return; // rebuild notification here since remote view does not release bitmaps, // causing memory leaks resetNotification(); diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java index 46d20c7e1..f148aed27 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java @@ -131,7 +131,7 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener, private void onAudioFocusLossCanDuck() { Log.d(TAG, "onAudioFocusLossCanDuck() called"); // Set the volume to 1/10 on ducking - animateAudio(player.getVolume(), DUCK_AUDIO_TO); + player.setVolume(DUCK_AUDIO_TO); } private void animateAudio(final float from, final float to) { diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index 19b728b3a..e1960247e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -45,7 +45,9 @@ import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MOD import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_FIT; import static com.google.android.exoplayer2.ui.AspectRatioFrameLayout.RESIZE_MODE_ZOOM; import static java.lang.annotation.RetentionPolicy.SOURCE; -import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.*; +import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_BACKGROUND; +import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_NONE; +import static org.schabi.newpipe.player.helper.PlayerHelper.MinimizeMode.MINIMIZE_ON_EXIT_MODE_POPUP; public class PlayerHelper { private PlayerHelper() {} diff --git a/app/src/main/java/org/schabi/newpipe/player/playback/BasePlayerMediaSession.java b/app/src/main/java/org/schabi/newpipe/player/playback/BasePlayerMediaSession.java index 00604b236..657fe1327 100644 --- a/app/src/main/java/org/schabi/newpipe/player/playback/BasePlayerMediaSession.java +++ b/app/src/main/java/org/schabi/newpipe/player/playback/BasePlayerMediaSession.java @@ -1,7 +1,9 @@ package org.schabi.newpipe.player.playback; import android.net.Uri; +import android.os.Bundle; import android.support.v4.media.MediaDescriptionCompat; +import android.support.v4.media.MediaMetadataCompat; import org.schabi.newpipe.player.BasePlayer; import org.schabi.newpipe.player.mediasession.MediaSessionCallback; @@ -54,6 +56,12 @@ public class BasePlayerMediaSession implements MediaSessionCallback { .setTitle(item.getTitle()) .setSubtitle(item.getUploader()); + // set additional metadata for A2DP/AVRCP + Bundle additionalMetadata = new Bundle(); + additionalMetadata.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, item.getUploader()); + additionalMetadata.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, item.getDuration()); + descriptionBuilder.setExtras(additionalMetadata); + final Uri thumbnailUri = Uri.parse(item.getThumbnailUrl()); if (thumbnailUri != null) descriptionBuilder.setIconUri(thumbnailUri); diff --git a/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java b/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java index ad2b79523..7abebc49e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java +++ b/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java @@ -13,6 +13,7 @@ import org.schabi.newpipe.extractor.MediaFormat; import org.schabi.newpipe.extractor.stream.SubtitlesStream; import org.schabi.newpipe.extractor.stream.AudioStream; import org.schabi.newpipe.extractor.stream.StreamInfo; +import org.schabi.newpipe.extractor.stream.SubtitlesStream; import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.player.helper.PlayerDataSource; import org.schabi.newpipe.player.helper.PlayerHelper; @@ -93,15 +94,17 @@ public class VideoPlaybackResolver implements PlaybackResolver { // Below are auxiliary media sources // Create subtitle sources - for (final SubtitlesStream subtitle : info.getSubtitles()) { - final String mimeType = PlayerHelper.subtitleMimeTypesOf(subtitle.getFormat()); - if (mimeType == null) continue; + if(info.getSubtitles() != null) { + for (final SubtitlesStream subtitle : info.getSubtitles()) { + final String mimeType = PlayerHelper.subtitleMimeTypesOf(subtitle.getFormat()); + if (mimeType == null) continue; - final Format textFormat = Format.createTextSampleFormat(null, mimeType, - SELECTION_FLAG_AUTOSELECT, PlayerHelper.captionLanguageOf(context, subtitle)); - final MediaSource textSource = dataSource.getSampleMediaSourceFactory() - .createMediaSource(Uri.parse(subtitle.getURL()), textFormat, TIME_UNSET); - mediaSources.add(textSource); + final Format textFormat = Format.createTextSampleFormat(null, mimeType, + SELECTION_FLAG_AUTOSELECT, PlayerHelper.captionLanguageOf(context, subtitle)); + final MediaSource textSource = dataSource.getSampleMediaSourceFactory() + .createMediaSource(Uri.parse(subtitle.getURL()), textFormat, TIME_UNSET); + mediaSources.add(textSource); + } } if (mediaSources.size() == 1) { diff --git a/app/src/main/java/org/schabi/newpipe/report/UserAction.java b/app/src/main/java/org/schabi/newpipe/report/UserAction.java index 00a25ed8d..2b2369ad3 100644 --- a/app/src/main/java/org/schabi/newpipe/report/UserAction.java +++ b/app/src/main/java/org/schabi/newpipe/report/UserAction.java @@ -15,6 +15,7 @@ public enum UserAction { REQUESTED_CHANNEL("requested channel"), REQUESTED_PLAYLIST("requested playlist"), REQUESTED_KIOSK("requested kiosk"), + REQUESTED_COMMENTS("requested comments"), DELETE_FROM_HISTORY("delete from history"), PLAY_STREAM("Play stream"); diff --git a/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java index 5e07e2b12..43270926e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.support.v7.preference.Preference; import org.schabi.newpipe.BuildConfig; +import org.schabi.newpipe.CheckForNewAppVersionTask; import org.schabi.newpipe.R; public class MainSettingsFragment extends BasePreferenceFragment { @@ -13,6 +14,13 @@ public class MainSettingsFragment extends BasePreferenceFragment { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.main_settings); + if (!CheckForNewAppVersionTask.isGithubApk()) { + final Preference update = findPreference(getString(R.string.update_pref_screen_key)); + getPreferenceScreen().removePreference(update); + + defaultPreferences.edit().putBoolean(getString(R.string.update_app_key), false).apply(); + } + if (!DEBUG) { final Preference debug = findPreference(getString(R.string.debug_pref_screen_key)); getPreferenceScreen().removePreference(debug); diff --git a/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java new file mode 100644 index 000000000..76d887dd1 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java @@ -0,0 +1,33 @@ +package org.schabi.newpipe.settings; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.preference.Preference; + +import org.schabi.newpipe.CheckForNewAppVersionTask; +import org.schabi.newpipe.R; + +public class UpdateSettingsFragment extends BasePreferenceFragment { + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + String updateToggleKey = getString(R.string.update_app_key); + findPreference(updateToggleKey).setOnPreferenceChangeListener(updatePreferenceChange); + } + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + addPreferencesFromResource(R.xml.update_settings); + } + + private Preference.OnPreferenceChangeListener updatePreferenceChange + = (preference, newValue) -> { + + defaultPreferences.edit().putBoolean(getString(R.string.update_app_key), + (boolean) newValue).apply(); + + return true; + }; +} diff --git a/app/src/main/java/org/schabi/newpipe/util/AnimationUtils.java b/app/src/main/java/org/schabi/newpipe/util/AnimationUtils.java index 3c5f16929..6a398a8a2 100644 --- a/app/src/main/java/org/schabi/newpipe/util/AnimationUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/AnimationUtils.java @@ -25,6 +25,7 @@ import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.res.ColorStateList; import android.support.annotation.ColorInt; +import android.support.annotation.FloatRange; import android.support.v4.view.ViewCompat; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.util.Log; @@ -363,4 +364,24 @@ public class AnimationUtils { }).start(); } } + + public static void slideUp(final View view, + long duration, + long delay, + @FloatRange(from = 0.0f, to = 1.0f) float translationPercent) { + int translationY = (int) (view.getResources().getDisplayMetrics().heightPixels * + (translationPercent)); + + view.animate().setListener(null).cancel(); + view.setAlpha(0f); + view.setTranslationY(translationY); + view.setVisibility(View.VISIBLE); + view.animate() + .alpha(1f) + .translationY(0) + .setStartDelay(delay) + .setDuration(duration) + .setInterpolator(new FastOutSlowInInterpolator()) + .start(); + } } 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 e04c1e8d0..0f1c39473 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java @@ -29,10 +29,12 @@ import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; import org.schabi.newpipe.ReCaptchaActivity; import org.schabi.newpipe.extractor.Info; +import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage; import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.SuggestionExtractor; import org.schabi.newpipe.extractor.channel.ChannelInfo; -import org.schabi.newpipe.extractor.channel.ChannelInfoItem; +import org.schabi.newpipe.extractor.comments.CommentsInfo; import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.exceptions.ReCaptchaException; @@ -46,6 +48,7 @@ import org.schabi.newpipe.report.UserAction; import java.io.IOException; import java.io.InterruptedIOException; +import java.util.Collections; import java.util.List; import io.reactivex.Maybe; @@ -60,7 +63,7 @@ public final class ExtractorHelper { } private static void checkServiceId(int serviceId) { - if(serviceId == Constants.NO_SERVICE_ID) { + if (serviceId == Constants.NO_SERVICE_ID) { throw new IllegalArgumentException("serviceId is NO_SERVICE_ID"); } } @@ -95,17 +98,20 @@ public final class ExtractorHelper { public static Single> suggestionsFor(final int serviceId, final String query) { checkServiceId(serviceId); - return Single.fromCallable(() -> - NewPipe.getService(serviceId) - .getSuggestionExtractor() - .suggestionList(query)); + return Single.fromCallable(() -> { + SuggestionExtractor extractor = NewPipe.getService(serviceId) + .getSuggestionExtractor(); + return extractor != null + ? extractor.suggestionList(query) + : Collections.emptyList(); + }); } public static Single getStreamInfo(final int serviceId, final String url, boolean forceLoad) { checkServiceId(serviceId); - return checkCache(forceLoad, serviceId, url, Single.fromCallable(() -> + return checkCache(forceLoad, serviceId, url, InfoItem.InfoType.STREAM, Single.fromCallable(() -> StreamInfo.getInfo(NewPipe.getService(serviceId), url))); } @@ -113,29 +119,45 @@ public final class ExtractorHelper { final String url, boolean forceLoad) { checkServiceId(serviceId); - return checkCache(forceLoad, serviceId, url, Single.fromCallable(() -> + return checkCache(forceLoad, serviceId, url, InfoItem.InfoType.CHANNEL, Single.fromCallable(() -> ChannelInfo.getInfo(NewPipe.getService(serviceId), url))); } public static Single getMoreChannelItems(final int serviceId, - final String url, - final String nextStreamsUrl) { + final String url, + final String nextStreamsUrl) { checkServiceId(serviceId); return Single.fromCallable(() -> ChannelInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl)); } + public static Single getCommentsInfo(final int serviceId, + final String url, + boolean forceLoad) { + checkServiceId(serviceId); + return checkCache(forceLoad, serviceId, url, InfoItem.InfoType.COMMENT, Single.fromCallable(() -> + CommentsInfo.getInfo(NewPipe.getService(serviceId), url))); + } + + public static Single getMoreCommentItems(final int serviceId, + final CommentsInfo info, + final String nextPageUrl) { + checkServiceId(serviceId); + return Single.fromCallable(() -> + CommentsInfo.getMoreItems(NewPipe.getService(serviceId), info, nextPageUrl)); + } + public static Single getPlaylistInfo(final int serviceId, final String url, boolean forceLoad) { checkServiceId(serviceId); - return checkCache(forceLoad, serviceId, url, Single.fromCallable(() -> + return checkCache(forceLoad, serviceId, url, InfoItem.InfoType.PLAYLIST, Single.fromCallable(() -> PlaylistInfo.getInfo(NewPipe.getService(serviceId), url))); } public static Single getMorePlaylistItems(final int serviceId, - final String url, - final String nextStreamsUrl) { + final String url, + final String nextStreamsUrl) { checkServiceId(serviceId); return Single.fromCallable(() -> PlaylistInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl)); @@ -144,7 +166,7 @@ public final class ExtractorHelper { public static Single getKioskInfo(final int serviceId, final String url, boolean forceLoad) { - return checkCache(forceLoad, serviceId, url, Single.fromCallable(() -> + return checkCache(forceLoad, serviceId, url, InfoItem.InfoType.PLAYLIST, Single.fromCallable(() -> KioskInfo.getInfo(NewPipe.getService(serviceId), url))); } @@ -168,16 +190,17 @@ public final class ExtractorHelper { private static Single checkCache(boolean forceLoad, int serviceId, String url, + InfoItem.InfoType infoType, Single loadFromNetwork) { checkServiceId(serviceId); - loadFromNetwork = loadFromNetwork.doOnSuccess(info -> cache.putInfo(serviceId, url, info)); + loadFromNetwork = loadFromNetwork.doOnSuccess(info -> cache.putInfo(serviceId, url, info, infoType)); Single load; if (forceLoad) { - cache.removeInfo(serviceId, url); + cache.removeInfo(serviceId, url, infoType); load = loadFromNetwork; } else { - load = Maybe.concat(ExtractorHelper.loadFromCache(serviceId, url), + load = Maybe.concat(ExtractorHelper.loadFromCache(serviceId, url, infoType), loadFromNetwork.toMaybe()) .firstElement() //Take the first valid .toSingle(); @@ -189,20 +212,20 @@ public final class ExtractorHelper { /** * Default implementation uses the {@link InfoCache} to get cached results */ - public static Maybe loadFromCache(final int serviceId, final String url) { + public static Maybe loadFromCache(final int serviceId, final String url, InfoItem.InfoType infoType) { checkServiceId(serviceId); return Maybe.defer(() -> { - //noinspection unchecked - I info = (I) cache.getFromKey(serviceId, url); - if (MainActivity.DEBUG) Log.d(TAG, "loadFromCache() called, info > " + info); + //noinspection unchecked + I info = (I) cache.getFromKey(serviceId, url, infoType); + if (MainActivity.DEBUG) Log.d(TAG, "loadFromCache() called, info > " + info); - // Only return info if it's not null (it is cached) - if (info != null) { - return Maybe.just(info); - } + // Only return info if it's not null (it is cached) + if (info != null) { + return Maybe.just(info); + } - return Maybe.empty(); - }); + return Maybe.empty(); + }); } /** diff --git a/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java b/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java new file mode 100644 index 000000000..69666463e --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/FireTvUtils.java @@ -0,0 +1,10 @@ +package org.schabi.newpipe.util; + +import org.schabi.newpipe.App; + +public class FireTvUtils { + public static boolean isFireTv(){ + final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv"; + return App.getApp().getPackageManager().hasSystemFeature(AMAZON_FEATURE_FIRE_TV); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/InfoCache.java b/app/src/main/java/org/schabi/newpipe/util/InfoCache.java index 318db37a1..23b134281 100644 --- a/app/src/main/java/org/schabi/newpipe/util/InfoCache.java +++ b/app/src/main/java/org/schabi/newpipe/util/InfoCache.java @@ -26,6 +26,7 @@ import android.util.Log; import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.extractor.Info; +import org.schabi.newpipe.extractor.InfoItem; import java.util.Map; @@ -52,27 +53,27 @@ public final class InfoCache { } @Nullable - public Info getFromKey(int serviceId, @NonNull String url) { + public Info getFromKey(int serviceId, @NonNull String url, @NonNull InfoItem.InfoType infoType) { if (DEBUG) Log.d(TAG, "getFromKey() called with: serviceId = [" + serviceId + "], url = [" + url + "]"); synchronized (lruCache) { - return getInfo(keyOf(serviceId, url)); + return getInfo(keyOf(serviceId, url, infoType)); } } - public void putInfo(int serviceId, @NonNull String url, @NonNull Info info) { + public void putInfo(int serviceId, @NonNull String url, @NonNull Info info, @NonNull InfoItem.InfoType infoType) { if (DEBUG) Log.d(TAG, "putInfo() called with: info = [" + info + "]"); final long expirationMillis = ServiceHelper.getCacheExpirationMillis(info.getServiceId()); synchronized (lruCache) { final CacheData data = new CacheData(info, expirationMillis); - lruCache.put(keyOf(serviceId, url), data); + lruCache.put(keyOf(serviceId, url, infoType), data); } } - public void removeInfo(int serviceId, @NonNull String url) { + public void removeInfo(int serviceId, @NonNull String url, @NonNull InfoItem.InfoType infoType) { if (DEBUG) Log.d(TAG, "removeInfo() called with: serviceId = [" + serviceId + "], url = [" + url + "]"); synchronized (lruCache) { - lruCache.remove(keyOf(serviceId, url)); + lruCache.remove(keyOf(serviceId, url, infoType)); } } @@ -98,8 +99,8 @@ public final class InfoCache { } @NonNull - private static String keyOf(final int serviceId, @NonNull final String url) { - return serviceId + url; + private static String keyOf(final int serviceId, @NonNull final String url, @NonNull InfoItem.InfoType infoType) { + return serviceId + url + infoType.toString(); } private static void removeStaleCache() { diff --git a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java index 392892cef..a04e1145f 100644 --- a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java +++ b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java @@ -31,6 +31,8 @@ public class KioskTranslator { return c.getString(R.string.top_50); case "New & hot": return c.getString(R.string.new_and_hot); + case "conferences": + return c.getString(R.string.conferences); default: return kioskId; } @@ -44,6 +46,8 @@ public class KioskTranslator { return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot); case "New & hot": return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot); + case "conferences": + return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot); default: return 0; } diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index 5df2e8be4..4b93600ce 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -33,6 +33,7 @@ import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.fragments.MainFragment; import org.schabi.newpipe.fragments.detail.VideoDetailFragment; import org.schabi.newpipe.fragments.list.channel.ChannelFragment; +import org.schabi.newpipe.fragments.list.comments.CommentsFragment; import org.schabi.newpipe.local.bookmark.BookmarkFragment; import org.schabi.newpipe.local.feed.FeedFragment; import org.schabi.newpipe.fragments.list.kiosk.KioskFragment; @@ -309,6 +310,18 @@ public class NavigationHelper { .commit(); } + public static void openCommentsFragment( + FragmentManager fragmentManager, + int serviceId, + String url, + String name) { + if (name == null) name = ""; + fragmentManager.beginTransaction().setCustomAnimations(R.anim.switch_service_in, R.anim.switch_service_out) + .replace(R.id.fragment_holder, CommentsFragment.getInstance(serviceId, url, name)) + .addToBackStack(null) + .commit(); + } + public static void openPlaylistFragment(FragmentManager fragmentManager, int serviceId, String url, diff --git a/app/src/main/java/org/schabi/newpipe/util/RelatedStreamInfo.java b/app/src/main/java/org/schabi/newpipe/util/RelatedStreamInfo.java new file mode 100644 index 000000000..6de663c13 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/RelatedStreamInfo.java @@ -0,0 +1,41 @@ +package org.schabi.newpipe.util; + +import org.schabi.newpipe.extractor.InfoItem; +import org.schabi.newpipe.extractor.ListInfo; +import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; +import org.schabi.newpipe.extractor.stream.StreamInfo; +import org.schabi.newpipe.extractor.stream.StreamInfoItem; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class RelatedStreamInfo extends ListInfo { + + private StreamInfoItem nextStream; + + public RelatedStreamInfo(int serviceId, ListLinkHandler listUrlIdHandler, String name) { + super(serviceId, listUrlIdHandler, name); + } + + public static RelatedStreamInfo getInfo(StreamInfo info) { + ListLinkHandler handler = new ListLinkHandler(info.getOriginalUrl(), info.getUrl(), info.getId(), Collections.emptyList(), null); + RelatedStreamInfo relatedStreamInfo = new RelatedStreamInfo(info.getServiceId(), handler, info.getName()); + List streams = new ArrayList<>(); + if(info.getNextVideo() != null){ + streams.add(info.getNextVideo()); + } + streams.addAll(info.getRelatedStreams()); + relatedStreamInfo.setRelatedItems(streams); + relatedStreamInfo.setNextStream(info.getNextVideo()); + return relatedStreamInfo; + } + + public StreamInfoItem getNextStream() { + return nextStream; + } + + public void setNextStream(StreamInfoItem nextStream) { + this.nextStream = nextStream; + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/SecondaryStreamHelper.java b/app/src/main/java/org/schabi/newpipe/util/SecondaryStreamHelper.java index a5d3ea3eb..b3522aea0 100644 --- a/app/src/main/java/org/schabi/newpipe/util/SecondaryStreamHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/SecondaryStreamHelper.java @@ -36,7 +36,6 @@ public class SecondaryStreamHelper { * @return selected audio stream or null if a candidate was not found */ public static AudioStream getAudioStreamFor(@NonNull List audioStreams, @NonNull VideoStream videoStream) { - // TODO: check if m4v and m4a selected streams are DASH compliant switch (videoStream.getFormat()) { case WEBM: case MPEG_4: diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java index 7c781eb14..c6ce3fec7 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java @@ -24,9 +24,11 @@ public class ServiceHelper { case 0: return R.drawable.place_holder_youtube; case 1: - return R.drawable.place_holder_circle; + return R.drawable.place_holder_cloud; + case 2: + return R.drawable.place_holder_gadse; default: - return R.drawable.service; + return R.drawable.place_holder_circle; } } @@ -38,6 +40,8 @@ public class ServiceHelper { case "playlists": return c.getString(R.string.playlists); case "tracks": return c.getString(R.string.tracks); case "users": return c.getString(R.string.users); + case "conferences" : return c.getString(R.string.conferences); + case "events" : return c.getString(R.string.events); default: return filter; } } diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java index eb106f91d..49a7125ed 100644 --- a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java @@ -28,7 +28,8 @@ import io.reactivex.schedulers.Schedulers; import us.shandian.giga.util.Utility; /** - * A list adapter for a list of {@link Stream streams}, currently supporting {@link VideoStream} and {@link AudioStream}. + * A list adapter for a list of {@link Stream streams}, + * currently supporting {@link VideoStream}, {@link AudioStream} and {@link SubtitlesStream} */ public class StreamItemAdapter extends BaseAdapter { private final Context context; @@ -110,7 +111,10 @@ public class StreamItemAdapter extends BaseA } } } else if (stream instanceof AudioStream) { - qualityString = ((AudioStream) stream).getAverageBitrate() + "kbps"; + AudioStream audioStream = ((AudioStream) stream); + qualityString = audioStream.getAverageBitrate() > 0 + ? audioStream.getAverageBitrate() + "kbps" + : audioStream.getFormat().getName(); } else if (stream instanceof SubtitlesStream) { qualityString = ((SubtitlesStream) stream).getDisplayLanguageName(); if (((SubtitlesStream) stream).isAutoGenerated()) { @@ -154,8 +158,10 @@ public class StreamItemAdapter extends BaseA private final long[] streamSizes; private final String unknownSize; - public StreamSizeWrapper(List streamsList, Context context) { - this.streamsList = streamsList; + public StreamSizeWrapper(List sL, Context context) { + this.streamsList = sL != null + ? sL + : Collections.emptyList(); this.streamSizes = new long[streamsList.size()]; this.unknownSize = context == null ? "--.-" : context.getString(R.string.unknown_content); diff --git a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java index 1d1b66bf9..0c7861e16 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java @@ -137,7 +137,9 @@ public class ThemeHelper { else if (selectedTheme.equals(darkTheme)) themeName = "DarkTheme"; themeName += "." + service.getServiceInfo().getName(); - int resourceId = context.getResources().getIdentifier(themeName, "style", context.getPackageName()); + int resourceId = context + .getResources() + .getIdentifier(themeName, "style", context.getPackageName()); if (resourceId > 0) { return resourceId; diff --git a/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java b/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java index ce7ae267c..b864cf4fb 100644 --- a/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java +++ b/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java @@ -156,7 +156,6 @@ public class DownloadInitializer extends Thread { if (retryCount++ > mMission.maxRetry) { Log.e(TAG, "initializer failed", e); - mMission.running = false; mMission.notifyError(e); return; } diff --git a/app/src/main/java/us/shandian/giga/get/DownloadMission.java b/app/src/main/java/us/shandian/giga/get/DownloadMission.java index c25d517f1..243a8585a 100644 --- a/app/src/main/java/us/shandian/giga/get/DownloadMission.java +++ b/app/src/main/java/us/shandian/giga/get/DownloadMission.java @@ -39,7 +39,7 @@ public class DownloadMission extends Mission { public static final int ERROR_SSL_EXCEPTION = 1004; public static final int ERROR_UNKNOWN_HOST = 1005; public static final int ERROR_CONNECT_HOST = 1006; - public static final int ERROR_POSTPROCESSING_FAILED = 1007; + public static final int ERROR_POSTPROCESSING = 1007; public static final int ERROR_HTTP_NO_CONTENT = 204; public static final int ERROR_HTTP_UNSUPPORTED_RANGE = 206; @@ -79,9 +79,12 @@ public class DownloadMission extends Mission { public String postprocessingName; /** - * Indicates if the post-processing algorithm is actually running, used to detect corrupt downloads + * Indicates if the post-processing state: + * 0: ready + * 1: running + * 2: completed */ - public boolean postprocessingRunning; + public int postprocessingState; /** * Indicate if the post-processing algorithm works on the same file @@ -356,7 +359,7 @@ public class DownloadMission extends Mission { finishCount++; if (finishCount == currentThreadCount) { - if (errCode > ERROR_NOTHING) return; + if (errCode != ERROR_NOTHING) return; if (DEBUG) { Log.d(TAG, "onFinish" + (current + 1) + "/" + urls.length); @@ -382,19 +385,26 @@ public class DownloadMission extends Mission { } } - private void notifyPostProcessing(boolean processing) { + private void notifyPostProcessing(int state) { if (DEBUG) { - Log.d(TAG, (processing ? "enter" : "exit") + " postprocessing on " + location + File.separator + name); + String action; + switch (state) { + case 1: + action = "Running"; + break; + case 2: + action = "Completed"; + break; + default: + action = "Failed"; + } + + Log.d(TAG, action + " postprocessing on " + location + File.separator + name); } synchronized (blockState) { - if (!processing) { - postprocessingName = null; - postprocessingArgs = null; - } - // don't return without fully write the current state - postprocessingRunning = processing; + postprocessingState = state; Utility.writeToFile(metadata, DownloadMission.this); } } @@ -403,16 +413,30 @@ public class DownloadMission extends Mission { * Start downloading with multiple threads. */ public void start() { - if (running || current >= urls.length) return; + if (running || isFinished()) return; // ensure that the previous state is completely paused. joinForThread(init); - for (Thread thread : threads) joinForThread(thread); + if (threads != null) + for (Thread thread : threads) joinForThread(thread); enqueued = false; running = true; errCode = ERROR_NOTHING; + if (current >= urls.length && postprocessingName != null) { + runAsync(1, () -> { + if (doPostprocessing()) { + running = false; + deleteThisFromFile(); + + notify(DownloadManagerService.MESSAGE_FINISHED); + } + }); + + return; + } + if (blocks < 0) { initializer(); return; @@ -420,7 +444,7 @@ public class DownloadMission extends Mission { init = null; - if (threads.length < 1) { + if (threads == null || threads.length < 1) { threads = new Thread[currentThreadCount]; } @@ -444,18 +468,18 @@ public class DownloadMission extends Mission { public synchronized void pause() { if (!running) return; - running = false; - recovered = true; - enqueued = false; - - if (postprocessingRunning) { + if (isPsRunning()) { if (DEBUG) { Log.w(TAG, "pause during post-processing is not applicable."); } return; } - if (init != null && init.isAlive()) { + running = false; + recovered = true; + enqueued = false; + + if (init != null && Thread.currentThread() != init && init.isAlive()) { init.interrupt(); synchronized (blockState) { resetState(); @@ -532,13 +556,36 @@ public class DownloadMission extends Mission { mWritingToFile = false; } + /** + * Indicates if the download if fully finished + * + * @return true, otherwise, false + */ public boolean isFinished() { - return current >= urls.length && postprocessingName == null; + return current >= urls.length && (postprocessingName == null || postprocessingState == 2); + } + + /** + * Indicates if the download file is corrupt due a failed post-processing + * + * @return {@code true} if this mission is unrecoverable + */ + public boolean isPsFailed() { + return postprocessingName != null && errCode == DownloadMission.ERROR_POSTPROCESSING && postprocessingThis; + } + + /** + * Indicates if a post-processing algorithm is running + * + * @return true, otherwise, false + */ + public boolean isPsRunning() { + return postprocessingName != null && postprocessingState == 1; } public long getLength() { long calculated; - if (postprocessingRunning) { + if (postprocessingState == 1) { calculated = length; } else { calculated = offsets[current < offsets.length ? current : (offsets.length - 1)] + length; @@ -550,16 +597,19 @@ public class DownloadMission extends Mission { } private boolean doPostprocessing() { - if (postprocessingName == null) return true; + if (postprocessingName == null || postprocessingState == 2) return true; + + notifyPostProcessing(1); + notifyProgress(0); + + Thread.currentThread().setName("[" + TAG + "] post-processing = " + postprocessingName + " filename = " + name); + + Exception exception = null; try { - notifyPostProcessing(true); - notifyProgress(0); - - Thread.currentThread().setName("[" + TAG + "] post-processing = " + postprocessingName + " filename = " + name); - - Postprocessing algorithm = Postprocessing.getAlgorithm(postprocessingName, this); - algorithm.run(); + Postprocessing + .getAlgorithm(postprocessingName, this) + .run(); } catch (Exception err) { StringBuilder args = new StringBuilder(" "); if (postprocessingArgs != null) { @@ -571,15 +621,21 @@ public class DownloadMission extends Mission { } Log.e(TAG, String.format("Post-processing failed. algorithm = %s args = [%s]", postprocessingName, args), err); - notifyError(ERROR_POSTPROCESSING_FAILED, err); - return false; + if (errCode == ERROR_NOTHING) errCode = ERROR_POSTPROCESSING; + + exception = err; } finally { - notifyPostProcessing(false); + notifyPostProcessing(errCode == ERROR_NOTHING ? 2 : 0); } - if (errCode != ERROR_NOTHING) notify(DownloadManagerService.MESSAGE_ERROR); + if (errCode != ERROR_NOTHING) { + if (exception == null) exception = errObject; + notifyError(ERROR_POSTPROCESSING, exception); - return errCode == ERROR_NOTHING; + return false; + } + + return true; } private boolean deleteThisFromFile() { diff --git a/app/src/main/java/us/shandian/giga/postprocessing/Mp4DashMuxer.java b/app/src/main/java/us/shandian/giga/postprocessing/Mp4DashMuxer.java index b303b66cd..45c06dd4b 100644 --- a/app/src/main/java/us/shandian/giga/postprocessing/Mp4DashMuxer.java +++ b/app/src/main/java/us/shandian/giga/postprocessing/Mp4DashMuxer.java @@ -13,9 +13,7 @@ import us.shandian.giga.get.DownloadMission; class Mp4DashMuxer extends Postprocessing { Mp4DashMuxer(DownloadMission mission) { - super(mission); - recommendedReserve = 15360 * 1024;// 15 MiB - worksOnSameFile = true; + super(mission, 15360 * 1024/* 15 MiB */, true); } @Override diff --git a/app/src/main/java/us/shandian/giga/postprocessing/Mp4Muxer.java b/app/src/main/java/us/shandian/giga/postprocessing/Mp4Muxer.java new file mode 100644 index 000000000..bf932d5c1 --- /dev/null +++ b/app/src/main/java/us/shandian/giga/postprocessing/Mp4Muxer.java @@ -0,0 +1,136 @@ +package us.shandian.giga.postprocessing; + +import android.media.MediaCodec.BufferInfo; +import android.media.MediaExtractor; +import android.media.MediaMuxer; +import android.media.MediaMuxer.OutputFormat; +import android.util.Log; + +import static org.schabi.newpipe.BuildConfig.DEBUG; + +import org.schabi.newpipe.streams.io.SharpStream; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + +import us.shandian.giga.get.DownloadMission; + + +class Mp4Muxer extends Postprocessing { + private static final String TAG = "Mp4Muxer"; + private static final int NOTIFY_BYTES_INTERVAL = 128 * 1024;// 128 KiB + + Mp4Muxer(DownloadMission mission) { + super(mission, 0, false); + } + + @Override + int process(SharpStream out, SharpStream... sources) throws IOException { + File dlFile = mission.getDownloadedFile(); + File tmpFile = new File(mission.location, mission.name.concat(".tmp")); + + if (tmpFile.exists()) + if (!tmpFile.delete()) return DownloadMission.ERROR_FILE_CREATION; + + if (!tmpFile.createNewFile()) return DownloadMission.ERROR_FILE_CREATION; + + FileInputStream source = null; + MediaMuxer muxer = null; + + //noinspection TryFinallyCanBeTryWithResources + try { + source = new FileInputStream(dlFile); + MediaExtractor tracks[] = { + getMediaExtractor(source, mission.offsets[0], mission.offsets[1] - mission.offsets[0]), + getMediaExtractor(source, mission.offsets[1], mission.length - mission.offsets[1]) + }; + + muxer = new MediaMuxer(tmpFile.getAbsolutePath(), OutputFormat.MUXER_OUTPUT_MPEG_4); + + int tracksIndex[] = { + muxer.addTrack(tracks[0].getTrackFormat(0)), + muxer.addTrack(tracks[1].getTrackFormat(0)) + }; + + ByteBuffer buffer = ByteBuffer.allocate(512 * 1024);// 512 KiB + BufferInfo info = new BufferInfo(); + + long written = 0; + long nextReport = NOTIFY_BYTES_INTERVAL; + + muxer.start(); + + while (true) { + int done = 0; + + for (int i = 0; i < tracks.length; i++) { + if (tracksIndex[i] < 0) continue; + + info.set(0, + tracks[i].readSampleData(buffer, 0), + tracks[i].getSampleTime(), + tracks[i].getSampleFlags() + ); + + if (info.size >= 0) { + muxer.writeSampleData(tracksIndex[i], buffer, info); + written += info.size; + done++; + } + if (!tracks[i].advance()) { + // EOF reached + tracks[i].release(); + tracksIndex[i] = -1; + } + + if (written > nextReport) { + nextReport = written + NOTIFY_BYTES_INTERVAL; + super.progressReport(written); + } + } + + if (done < 1) break; + } + + // this part should not fail + if (!dlFile.delete()) return DownloadMission.ERROR_FILE_CREATION; + if (!tmpFile.renameTo(dlFile)) return DownloadMission.ERROR_FILE_CREATION; + + return OK_RESULT; + } finally { + try { + if (muxer != null) { + muxer.stop(); + muxer.release(); + } + } catch (Exception err) { + if (DEBUG) + Log.e(TAG, "muxer stop/release failed", err); + } + + if (source != null) { + try { + source.close(); + } catch (IOException e) { + // nothing to do + } + } + + // if the operation fails, delete the temporal file + if (tmpFile.exists()) { + //noinspection ResultOfMethodCallIgnored + tmpFile.delete(); + } + } + } + + private MediaExtractor getMediaExtractor(FileInputStream source, long offset, long length) throws IOException { + MediaExtractor extractor = new MediaExtractor(); + extractor.setDataSource(source.getFD(), offset, length); + extractor.selectTrack(0); + + return extractor; + } +} diff --git a/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java b/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java index 80726f705..635140bd3 100644 --- a/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java +++ b/app/src/main/java/us/shandian/giga/postprocessing/Postprocessing.java @@ -18,21 +18,21 @@ public abstract class Postprocessing { public static final String ALGORITHM_TTML_CONVERTER = "ttml"; public static final String ALGORITHM_MP4_DASH_MUXER = "mp4D"; + public static final String ALGORITHM_MP4_MUXER = "mp4"; public static final String ALGORITHM_WEBM_MUXER = "webm"; - private static final String ALGORITHM_TEST_ALGO = "test"; public static Postprocessing getAlgorithm(String algorithmName, DownloadMission mission) { if (null == algorithmName) { throw new NullPointerException("algorithmName"); } else switch (algorithmName) { case ALGORITHM_TTML_CONVERTER: - return new TttmlConverter(mission); + return new TtmlConverter(mission); case ALGORITHM_MP4_DASH_MUXER: return new Mp4DashMuxer(mission); + case ALGORITHM_MP4_MUXER: + return new Mp4Muxer(mission); case ALGORITHM_WEBM_MUXER: return new WebMMuxer(mission); - case ALGORITHM_TEST_ALGO: - return new TestAlgo(mission); /*case "example-algorithm": return new ExampleAlgorithm(mission);*/ default: @@ -52,71 +52,84 @@ public abstract class Postprocessing { */ public int recommendedReserve; + /** + * the download to post-process + */ protected DownloadMission mission; - Postprocessing(DownloadMission mission) { + Postprocessing(DownloadMission mission, int recommendedReserve, boolean worksOnSameFile) { this.mission = mission; + this.recommendedReserve = recommendedReserve; + this.worksOnSameFile = worksOnSameFile; } public void run() throws IOException { File file = mission.getDownloadedFile(); CircularFile out = null; - ChunkFileInputStream[] sources = new ChunkFileInputStream[mission.urls.length]; + int result; + long finalLength = -1; - try { - int i = 0; - for (; i < sources.length - 1; i++) { - sources[i] = new ChunkFileInputStream(file, mission.offsets[i], mission.offsets[i + 1], "rw"); - } - sources[i] = new ChunkFileInputStream(file, mission.offsets[i], mission.getDownloadedFile().length(), "rw"); + mission.done = 0; + mission.length = file.length(); - int[] idx = {0}; - CircularFile.OffsetChecker checker = () -> { - while (idx[0] < sources.length) { - /* - * WARNING: never use rewind() in any chunk after any writing (especially on first chunks) - * or the CircularFile can lead to unexpected results - */ - if (sources[idx[0]].isDisposed() || sources[idx[0]].available() < 1) { - idx[0]++; - continue;// the selected source is not used anymore + if (worksOnSameFile) { + ChunkFileInputStream[] sources = new ChunkFileInputStream[mission.urls.length]; + try { + int i = 0; + for (; i < sources.length - 1; i++) { + sources[i] = new ChunkFileInputStream(file, mission.offsets[i], mission.offsets[i + 1], "rw"); + } + sources[i] = new ChunkFileInputStream(file, mission.offsets[i], mission.getDownloadedFile().length(), "rw"); + + int[] idx = {0}; + CircularFile.OffsetChecker checker = () -> { + while (idx[0] < sources.length) { + /* + * WARNING: never use rewind() in any chunk after any writing (especially on first chunks) + * or the CircularFile can lead to unexpected results + */ + if (sources[idx[0]].isDisposed() || sources[idx[0]].available() < 1) { + idx[0]++; + continue;// the selected source is not used anymore + } + + return sources[idx[0]].getFilePointer() - 1; } - return sources[idx[0]].getFilePointer() - 1; + return -1; + }; + out = new CircularFile(file, 0, this::progressReport, checker); + + result = process(out, sources); + + if (result == OK_RESULT) + finalLength = out.finalizeFile(); + } finally { + for (SharpStream source : sources) { + if (source != null && !source.isDisposed()) { + source.dispose(); + } } - - return -1; - }; - - out = new CircularFile(file, 0, this::progressReport, checker); - - mission.done = 0; - mission.length = file.length(); - - int result = process(out, sources); - - if (result == OK_RESULT) { - long finalLength = out.finalizeFile(); - mission.done = finalLength; - mission.length = finalLength; - } else { - mission.errCode = DownloadMission.ERROR_UNKNOWN_EXCEPTION; - mission.errObject = new RuntimeException("post-processing algorithm returned " + result); - } - - if (result != OK_RESULT && worksOnSameFile) { - //noinspection ResultOfMethodCallIgnored - new File(mission.location, mission.name).delete(); - } - } finally { - for (SharpStream source : sources) { - if (source != null && !source.isDisposed()) { - source.dispose(); + if (out != null) { + out.dispose(); } } - if (out != null) { - out.dispose(); - } + } else { + result = process(null); + } + + if (result == OK_RESULT) { + if (finalLength < 0) finalLength = file.length(); + mission.done = finalLength; + mission.length = finalLength; + } else { + mission.errCode = DownloadMission.ERROR_UNKNOWN_EXCEPTION; + mission.errObject = new RuntimeException("post-processing algorithm returned " + result); + } + + if (result != OK_RESULT && worksOnSameFile) { + //noinspection ResultOfMethodCallIgnored + file.delete(); } } @@ -138,7 +151,7 @@ public abstract class Postprocessing { return mission.postprocessingArgs[index]; } - private void progressReport(long done) { + void progressReport(long done) { mission.done = done; if (mission.length < mission.done) mission.length = mission.done; diff --git a/app/src/main/java/us/shandian/giga/postprocessing/TestAlgo.java b/app/src/main/java/us/shandian/giga/postprocessing/TestAlgo.java deleted file mode 100644 index 66b235d7c..000000000 --- a/app/src/main/java/us/shandian/giga/postprocessing/TestAlgo.java +++ /dev/null @@ -1,54 +0,0 @@ -package us.shandian.giga.postprocessing; - -import android.util.Log; - -import org.schabi.newpipe.streams.io.SharpStream; - -import java.io.IOException; -import java.util.Random; - -import us.shandian.giga.get.DownloadMission; - -/** - * Algorithm for testing proposes - */ -class TestAlgo extends Postprocessing { - - public TestAlgo(DownloadMission mission) { - super(mission); - - worksOnSameFile = true; - recommendedReserve = 4096 * 1024;// 4 KiB - } - - @Override - int process(SharpStream out, SharpStream... sources) throws IOException { - - int written = 0; - int size = 5 * 1024 * 1024;// 5 MiB - byte[] buffer = new byte[8 * 1024];//8 KiB - mission.length = size; - - Random rnd = new Random(); - - // only write random data - sources[0].dispose(); - - while (written < size) { - rnd.nextBytes(buffer); - - int read = Math.min(buffer.length, size - written); - out.write(buffer, 0, read); - - try { - Thread.sleep((int) (Math.random() * 10)); - } catch (InterruptedException e) { - return -1; - } - - written += read; - } - - return Postprocessing.OK_RESULT; - } -} diff --git a/app/src/main/java/us/shandian/giga/postprocessing/TttmlConverter.java b/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java similarity index 83% rename from app/src/main/java/us/shandian/giga/postprocessing/TttmlConverter.java rename to app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java index 4c9d44548..390061840 100644 --- a/app/src/main/java/us/shandian/giga/postprocessing/TttmlConverter.java +++ b/app/src/main/java/us/shandian/giga/postprocessing/TtmlConverter.java @@ -18,13 +18,12 @@ import us.shandian.giga.postprocessing.io.SharpInputStream; /** * @author kapodamy */ -class TttmlConverter extends Postprocessing { - private static final String TAG = "TttmlConverter"; +class TtmlConverter extends Postprocessing { + private static final String TAG = "TtmlConverter"; - TttmlConverter(DownloadMission mission) { - super(mission); - recommendedReserve = 0;// due how XmlPullParser works, the xml is fully loaded on the ram - worksOnSameFile = true; + TtmlConverter(DownloadMission mission) { + // due how XmlPullParser works, the xml is fully loaded on the ram + super(mission, 0, true); } @Override @@ -41,7 +40,7 @@ class TttmlConverter extends Postprocessing { out, getArgumentAt(1, "true").equals("true"), getArgumentAt(2, "true").equals("true") - ); + ); } catch (Exception err) { Log.e(TAG, "subtitle parse failed", err); @@ -56,7 +55,7 @@ class TttmlConverter extends Postprocessing { } else if (err instanceof XPathExpressionException) { return 7; } - + return 8; } diff --git a/app/src/main/java/us/shandian/giga/postprocessing/WebMMuxer.java b/app/src/main/java/us/shandian/giga/postprocessing/WebMMuxer.java index 009a9a66b..2ffb0f08d 100644 --- a/app/src/main/java/us/shandian/giga/postprocessing/WebMMuxer.java +++ b/app/src/main/java/us/shandian/giga/postprocessing/WebMMuxer.java @@ -15,9 +15,7 @@ import us.shandian.giga.get.DownloadMission; class WebMMuxer extends Postprocessing { WebMMuxer(DownloadMission mission) { - super(mission); - recommendedReserve = 2048 * 1024;// 2 MiB - worksOnSameFile = true; + super(mission, 2048 * 1024/* 2 MiB */, true); } @Override diff --git a/app/src/main/java/us/shandian/giga/service/DownloadManager.java b/app/src/main/java/us/shandian/giga/service/DownloadManager.java index 6bcf84745..883c26850 100644 --- a/app/src/main/java/us/shandian/giga/service/DownloadManager.java +++ b/app/src/main/java/us/shandian/giga/service/DownloadManager.java @@ -141,15 +141,18 @@ public class DownloadManager { File dl = mis.getDownloadedFile(); boolean exists = dl.exists(); - if (mis.postprocessingRunning && mis.postprocessingThis) { - // Incomplete post-processing results in a corrupted download file - // because the selected algorithm works on the same file to save space. - if (!dl.delete()) { - Log.w(TAG, "Unable to delete incomplete download file: " + sub.getPath()); + if (mis.isPsRunning()) { + if (mis.postprocessingThis) { + // Incomplete post-processing results in a corrupted download file + // because the selected algorithm works on the same file to save space. + if (exists && dl.isFile() && !dl.delete()) + Log.w(TAG, "Unable to delete incomplete download file: " + sub.getPath()); + + exists = true; } - exists = true; - mis.postprocessingRunning = false; - mis.errCode = DownloadMission.ERROR_POSTPROCESSING_FAILED; + + mis.postprocessingState = 0; + mis.errCode = DownloadMission.ERROR_POSTPROCESSING; mis.errObject = new RuntimeException("stopped unexpectedly"); } else if (exists && !dl.isFile()) { // probably a folder, this should never happens @@ -332,7 +335,7 @@ public class DownloadManager { int count = 0; synchronized (this) { for (DownloadMission mission : mMissionsPending) { - if (mission.running && mission.errCode != DownloadMission.ERROR_POSTPROCESSING_FAILED && !mission.isFinished()) + if (mission.running && !mission.isFinished() && !mission.isPsFailed()) count++; } } @@ -471,7 +474,7 @@ public class DownloadManager { boolean flag = false; synchronized (this) { for (DownloadMission mission : mMissionsPending) { - if (mission.running && mission.isFinished() && !mission.postprocessingRunning) { + if (mission.running && !mission.isFinished() && !mission.isPsRunning()) { flag = true; mission.pause(); } @@ -528,6 +531,8 @@ public class DownloadManager { ArrayList current; ArrayList hidden; + boolean hasFinished = false; + private MissionIterator() { hidden = new ArrayList<>(2); current = null; @@ -563,6 +568,7 @@ public class DownloadManager { list.addAll(finished); } + hasFinished = finished.size() > 0; return list; } @@ -637,6 +643,10 @@ public class DownloadManager { hidden.remove(mission); } + public boolean hasFinishedMissions() { + return hasFinished; + } + @Override public int getOldListSize() { diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java index df5f9e429..4a35aa166 100644 --- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java +++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java @@ -50,6 +50,7 @@ import us.shandian.giga.ui.common.Deleter; import us.shandian.giga.ui.common.ProgressDrawable; import us.shandian.giga.util.Utility; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_GRANT_PREFIX_URI_PERMISSION; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; import static us.shandian.giga.get.DownloadMission.ERROR_CONNECT_HOST; @@ -59,7 +60,7 @@ import static us.shandian.giga.get.DownloadMission.ERROR_HTTP_UNSUPPORTED_RANGE; import static us.shandian.giga.get.DownloadMission.ERROR_NOTHING; import static us.shandian.giga.get.DownloadMission.ERROR_PATH_CREATION; import static us.shandian.giga.get.DownloadMission.ERROR_PERMISSION_DENIED; -import static us.shandian.giga.get.DownloadMission.ERROR_POSTPROCESSING_FAILED; +import static us.shandian.giga.get.DownloadMission.ERROR_POSTPROCESSING; import static us.shandian.giga.get.DownloadMission.ERROR_SSL_EXCEPTION; import static us.shandian.giga.get.DownloadMission.ERROR_UNKNOWN_EXCEPTION; import static us.shandian.giga.get.DownloadMission.ERROR_UNKNOWN_HOST; @@ -67,7 +68,8 @@ import static us.shandian.giga.get.DownloadMission.ERROR_UNKNOWN_HOST; public class MissionAdapter extends Adapter { private static final SparseArray ALGORITHMS = new SparseArray<>(); private static final String TAG = "MissionAdapter"; - private static final String UNDEFINED_SPEED = "--.-%"; + private static final String UNDEFINED_PROGRESS = "--.-%"; + static { ALGORITHMS.put(R.id.md5, "MD5"); @@ -158,7 +160,7 @@ public class MissionAdapter extends Adapter { str = R.string.missions_header_pending; } else { str = R.string.missions_header_finished; - setClearButtonVisibility(true); + if (mClear != null) mClear.setVisible(true); } ((ViewHolderHeader) view).header.setText(str); @@ -178,7 +180,7 @@ public class MissionAdapter extends Adapter { if (h.item.mission instanceof DownloadMission) { DownloadMission mission = (DownloadMission) item.mission; String length = Utility.formatBytes(mission.getLength()); - if (mission.running && !mission.postprocessingRunning) length += " --.- kB/s"; + if (mission.running && !mission.isPsRunning()) length += " --.- kB/s"; h.size.setText(length); h.pause.setTitle(mission.unknownLength ? R.string.stop : R.string.pause); @@ -238,11 +240,10 @@ public class MissionAdapter extends Adapter { } if (hasError) { - if (Float.isNaN(progress) || Float.isInfinite(progress)) - h.progress.setProgress(1f); + h.progress.setProgress(isNotFinite(progress) ? 1f : progress); h.status.setText(R.string.msg_error); - } else if (Float.isNaN(progress) || Float.isInfinite(progress)) { - h.status.setText(UNDEFINED_SPEED); + } else if (isNotFinite(progress)) { + h.status.setText(UNDEFINED_PROGRESS); } else { h.status.setText(String.format("%.2f%%", progress * 100)); h.progress.setProgress(progress); @@ -251,11 +252,11 @@ public class MissionAdapter extends Adapter { long length = mission.getLength(); int state; - if (mission.errCode == ERROR_POSTPROCESSING_FAILED) { + if (mission.isPsFailed()) { state = 0; } else if (!mission.running) { state = mission.enqueued ? 1 : 2; - } else if (mission.postprocessingRunning) { + } else if (mission.isPsRunning()) { state = 3; } else { state = 0; @@ -322,6 +323,9 @@ public class MissionAdapter extends Adapter { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { intent.addFlags(FLAG_GRANT_PREFIX_URI_PERMISSION); } + if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + intent.addFlags(FLAG_ACTIVITY_NEW_TASK); + } //mContext.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); Log.v(TAG, "Starting intent: " + intent); if (intent.resolveActivity(mContext.getPackageManager()) != null) { @@ -406,7 +410,7 @@ public class MissionAdapter extends Adapter { case ERROR_CONNECT_HOST: str.append(mContext.getString(R.string.error_connect_host)); break; - case ERROR_POSTPROCESSING_FAILED: + case ERROR_POSTPROCESSING: str.append(mContext.getString(R.string.error_postprocessing_failed)); case ERROR_UNKNOWN_EXCEPTION: break; @@ -437,7 +441,6 @@ public class MissionAdapter extends Adapter { public void clearFinishedDownloads() { mDownloadManager.forgetFinishedDownloads(); applyChanges(); - setClearButtonVisibility(false); } private boolean handlePopupItem(@NonNull ViewHolderItem h, @NonNull MenuItem option) { @@ -447,6 +450,7 @@ public class MissionAdapter extends Adapter { if (mission != null) { switch (id) { case R.id.start: + h.status.setText(UNDEFINED_PROGRESS); h.state = -1; h.size.setText(Utility.formatBytes(mission.getLength())); mDownloadManager.resumeMission(mission); @@ -506,11 +510,7 @@ public class MissionAdapter extends Adapter { mIterator.end(); checkEmptyMessageVisibility(); - - if (mIterator.getOldListSize() > 0) { - int lastItemType = mIterator.getSpecialAtItem(mIterator.getOldListSize() - 1); - setClearButtonVisibility(lastItemType == DownloadManager.SPECIAL_FINISHED); - } + if (mClear != null) mClear.setVisible(mIterator.hasFinishedMissions()); } public void forceUpdate() { @@ -529,17 +529,10 @@ public class MissionAdapter extends Adapter { } public void setClearButton(MenuItem clearButton) { - if (mClear == null) { - int lastItemType = mIterator.getSpecialAtItem(mIterator.getOldListSize() - 1); - clearButton.setVisible(lastItemType == DownloadManager.SPECIAL_FINISHED); - } + if (mClear == null) clearButton.setVisible(mIterator.hasFinishedMissions()); mClear = clearButton; } - private void setClearButtonVisibility(boolean flag) { - mClear.setVisible(flag); - } - private void checkEmptyMessageVisibility() { int flag = mIterator.getOldListSize() > 0 ? View.GONE : View.VISIBLE; if (mEmptyMessage.getVisibility() != flag) mEmptyMessage.setVisibility(flag); @@ -596,6 +589,10 @@ public class MissionAdapter extends Adapter { } } + private boolean isNotFinite(Float value) { + return Float.isNaN(value) || Float.isInfinite(value); + } + class ViewHolderItem extends RecyclerView.ViewHolder { DownloadManager.MissionItem item; @@ -667,7 +664,7 @@ public class MissionAdapter extends Adapter { DownloadMission mission = item.mission instanceof DownloadMission ? (DownloadMission) item.mission : null; if (mission != null) { - if (!mission.postprocessingRunning) { + if (!mission.isPsRunning()) { if (mission.running) { pause.setVisible(true); } else { @@ -678,8 +675,10 @@ public class MissionAdapter extends Adapter { queue.setChecked(mission.enqueued); delete.setVisible(true); - start.setVisible(mission.errCode != ERROR_POSTPROCESSING_FAILED); - queue.setVisible(mission.errCode != ERROR_POSTPROCESSING_FAILED); + + boolean flag = !mission.isPsFailed(); + start.setVisible(flag); + queue.setVisible(flag); } } } else { diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java index aa9c497f1..c4fd3b5fd 100644 --- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java +++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java @@ -20,6 +20,7 @@ import android.view.View; import android.view.ViewGroup; import org.schabi.newpipe.R; +import org.schabi.newpipe.util.ThemeHelper; import us.shandian.giga.service.DownloadManager; import us.shandian.giga.service.DownloadManagerService; @@ -40,7 +41,7 @@ public class MissionsFragment extends Fragment { private MissionAdapter mAdapter; private GridLayoutManager mGridManager; private LinearLayoutManager mLinearManager; - private Context mActivity; + private Context mContext; private DMBinder mBinder; private Bundle mBundle; @@ -53,7 +54,7 @@ public class MissionsFragment extends Fragment { mBinder = (DownloadManagerService.DMBinder) binder; mBinder.clearDownloadNotifications(); - mAdapter = new MissionAdapter(mActivity, mBinder.getDownloadManager(), mClear, mEmpty); + mAdapter = new MissionAdapter(mContext, mBinder.getDownloadManager(), mClear, mEmpty); mAdapter.deleterLoad(mBundle, getView()); mBundle = null; @@ -79,17 +80,17 @@ public class MissionsFragment extends Fragment { mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); mLinear = mPrefs.getBoolean("linear", false); - mActivity = getActivity(); + //mContext = getActivity().getApplicationContext(); mBundle = savedInstanceState; // Bind the service - mActivity.bindService(new Intent(mActivity, DownloadManagerService.class), mConnection, Context.BIND_AUTO_CREATE); + mContext.bindService(new Intent(mContext, DownloadManagerService.class), mConnection, Context.BIND_AUTO_CREATE); // Views mEmpty = v.findViewById(R.id.list_empty_view); mList = v.findViewById(R.id.mission_recycler); - // Init + // Init layouts managers mGridManager = new GridLayoutManager(getActivity(), SPAN_SIZE); mGridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override @@ -103,7 +104,6 @@ public class MissionsFragment extends Fragment { } } }); - mLinearManager = new LinearLayoutManager(getActivity()); setHasOptionsMenu(true); @@ -115,13 +115,13 @@ public class MissionsFragment extends Fragment { * Added in API level 23. */ @Override - public void onAttach(Context activity) { - super.onAttach(activity); + public void onAttach(Context context) { + super.onAttach(context); // Bug: in api< 23 this is never called // so mActivity=null - // so app crashes with nullpointer exception - mActivity = activity; + // so app crashes with null-pointer exception + mContext = context; } /** @@ -132,7 +132,7 @@ public class MissionsFragment extends Fragment { public void onAttach(Activity activity) { super.onAttach(activity); - mActivity = activity; + mContext = activity.getApplicationContext(); } @@ -143,7 +143,7 @@ public class MissionsFragment extends Fragment { mBinder.removeMissionEventListener(mAdapter.getMessenger()); mBinder.enableNotifications(true); - mActivity.unbindService(mConnection); + mContext.unbindService(mConnection); mAdapter.deleterDispose(null); mBinder = null; @@ -189,7 +189,15 @@ public class MissionsFragment extends Fragment { mList.setAdapter(mAdapter); if (mSwitch != null) { - mSwitch.setIcon(mLinear ? R.drawable.grid : R.drawable.list); + boolean isLight = ThemeHelper.isLightThemeSelected(mContext); + int icon; + + if (mLinear) + icon = isLight ? R.drawable.ic_list_black_24dp : R.drawable.ic_list_white_24dp; + else + icon = isLight ? R.drawable.ic_grid_black_24dp : R.drawable.ic_grid_white_24dp; + + mSwitch.setIcon(icon); mSwitch.setTitle(mLinear ? R.string.grid : R.string.list); mPrefs.edit().putBoolean("linear", mLinear).apply(); } diff --git a/app/src/main/res/drawable-hdpi/grid.png b/app/src/main/res/drawable-hdpi/grid.png deleted file mode 100644 index 26fa36c07..000000000 Binary files a/app/src/main/res/drawable-hdpi/grid.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_delete_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_delete_black_24dp.png new file mode 100644 index 000000000..ba8820363 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_delete_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png new file mode 100644 index 000000000..be2850b3d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_grid_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_grid_black_24dp.png new file mode 100644 index 000000000..2db18582c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_grid_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_grid_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_grid_white_24dp.png new file mode 100644 index 000000000..5cc4722f6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_grid_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_list_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_list_black_24dp.png new file mode 100644 index 000000000..cc7b7a091 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_list_black_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_list_white_24dp.png new file mode 100644 index 000000000..5e6e304e3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_list_white_24dp.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_newpipe_update.png b/app/src/main/res/drawable-hdpi/ic_newpipe_update.png new file mode 100755 index 000000000..cbf336a1f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_newpipe_update.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_settings_update_black.png b/app/src/main/res/drawable-hdpi/ic_settings_update_black.png new file mode 100755 index 000000000..cdd51d35f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_settings_update_black.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_settings_update_white.png b/app/src/main/res/drawable-hdpi/ic_settings_update_white.png new file mode 100755 index 000000000..544a85c9d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_settings_update_white.png differ diff --git a/app/src/main/res/drawable-hdpi/list.png b/app/src/main/res/drawable-hdpi/list.png deleted file mode 100644 index 16da863e2..000000000 Binary files a/app/src/main/res/drawable-hdpi/list.png and /dev/null differ diff --git a/app/src/main/res/drawable-ldrtl-mdpi/ic_settings_update_black.png b/app/src/main/res/drawable-ldrtl-mdpi/ic_settings_update_black.png new file mode 100755 index 000000000..d85ec5975 Binary files /dev/null and b/app/src/main/res/drawable-ldrtl-mdpi/ic_settings_update_black.png differ diff --git a/app/src/main/res/drawable-ldrtl-xhdpi/grid.png b/app/src/main/res/drawable-ldrtl-xhdpi/grid.png deleted file mode 100644 index 94bb67f93..000000000 Binary files a/app/src/main/res/drawable-ldrtl-xhdpi/grid.png and /dev/null differ diff --git a/app/src/main/res/drawable-ldrtl-xhdpi/list.png b/app/src/main/res/drawable-ldrtl-xhdpi/list.png deleted file mode 100644 index 905e17c8a..000000000 Binary files a/app/src/main/res/drawable-ldrtl-xhdpi/list.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_delete_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_delete_black_24dp.png new file mode 100644 index 000000000..65bc6817d Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_delete_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_delete_white_24dp.png new file mode 100644 index 000000000..8f10392ca Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_grid_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_grid_black_24dp.png new file mode 100644 index 000000000..0f878e4ed Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_grid_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_grid_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_grid_white_24dp.png new file mode 100644 index 000000000..0096c9f11 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_grid_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_list_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_list_black_24dp.png new file mode 100644 index 000000000..6fa4e5034 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_list_black_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_list_white_24dp.png new file mode 100644 index 000000000..f0d3f5f7c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_list_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_newpipe_update.png b/app/src/main/res/drawable-mdpi/ic_newpipe_update.png new file mode 100755 index 000000000..8ab23eb6a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_newpipe_update.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_settings_update_black.png b/app/src/main/res/drawable-mdpi/ic_settings_update_black.png new file mode 100755 index 000000000..964553137 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_settings_update_black.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_settings_update_white.png b/app/src/main/res/drawable-mdpi/ic_settings_update_white.png new file mode 100755 index 000000000..cf4642f97 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_settings_update_white.png differ diff --git a/app/src/main/res/drawable-nodpi/place_holder_cloud.png b/app/src/main/res/drawable-nodpi/place_holder_cloud.png new file mode 100644 index 000000000..f78e846e1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/place_holder_cloud.png differ diff --git a/app/src/main/res/drawable-nodpi/place_holder_gadse.png b/app/src/main/res/drawable-nodpi/place_holder_gadse.png new file mode 100644 index 000000000..f11dd57e5 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/place_holder_gadse.png differ diff --git a/app/src/main/res/drawable-v23/splash_background.xml b/app/src/main/res/drawable-v23/splash_background.xml new file mode 100644 index 000000000..a67fbc4a6 --- /dev/null +++ b/app/src/main/res/drawable-v23/splash_background.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/ic_delete_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_delete_black_24dp.png new file mode 100644 index 000000000..f080aa9e8 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_delete_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png new file mode 100644 index 000000000..a1b828bf9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_grid_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_grid_black_24dp.png new file mode 100644 index 000000000..bcefc5221 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_grid_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_grid_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_grid_white_24dp.png new file mode 100644 index 000000000..745cb6cb8 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_grid_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_list_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_list_black_24dp.png new file mode 100644 index 000000000..0f7327fad Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_list_black_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png new file mode 100644 index 000000000..1de314a57 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_newpipe_update.png b/app/src/main/res/drawable-xhdpi/ic_newpipe_update.png new file mode 100755 index 000000000..5ee02aaa9 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_newpipe_update.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_settings_update_black.png b/app/src/main/res/drawable-xhdpi/ic_settings_update_black.png new file mode 100755 index 000000000..0304e6fd1 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_settings_update_black.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_settings_update_white.png b/app/src/main/res/drawable-xhdpi/ic_settings_update_white.png new file mode 100755 index 000000000..9c71b13f7 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_settings_update_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/grid.png b/app/src/main/res/drawable-xxhdpi/grid.png deleted file mode 100644 index db7497981..000000000 Binary files a/app/src/main/res/drawable-xxhdpi/grid.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_delete_black_24dp.png new file mode 100644 index 000000000..4cb4c08e2 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_delete_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png new file mode 100644 index 000000000..bd11b4c66 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_grid_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_grid_black_24dp.png new file mode 100644 index 000000000..31cd3dc83 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_grid_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_grid_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_grid_white_24dp.png new file mode 100644 index 000000000..ebe059481 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_grid_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_list_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_list_black_24dp.png new file mode 100644 index 000000000..52d0c00a1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_list_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png new file mode 100644 index 000000000..e5f698298 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_newpipe_update.png b/app/src/main/res/drawable-xxhdpi/ic_newpipe_update.png new file mode 100755 index 000000000..22f0e99d1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_newpipe_update.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings_update_black.png b/app/src/main/res/drawable-xxhdpi/ic_settings_update_black.png new file mode 100755 index 000000000..7316dbc88 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_settings_update_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings_update_white.png b/app/src/main/res/drawable-xxhdpi/ic_settings_update_white.png new file mode 100755 index 000000000..07b1f712d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_settings_update_white.png differ diff --git a/app/src/main/res/drawable-xxhdpi/list.png b/app/src/main/res/drawable-xxhdpi/list.png deleted file mode 100644 index fbb7c1072..000000000 Binary files a/app/src/main/res/drawable-xxhdpi/list.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_delete_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_delete_black_24dp.png new file mode 100644 index 000000000..ab07ea2ae Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_delete_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png new file mode 100644 index 000000000..a8358eb71 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_grid_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_grid_black_24dp.png new file mode 100644 index 000000000..fe78d853e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_grid_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_grid_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_grid_white_24dp.png new file mode 100644 index 000000000..d52610ec8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_grid_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_list_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_list_black_24dp.png new file mode 100644 index 000000000..b165df44d Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_list_black_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png new file mode 100644 index 000000000..053a1a0da Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_newpipe_update.png b/app/src/main/res/drawable-xxxhdpi/ic_newpipe_update.png new file mode 100755 index 000000000..1f44c1aaf Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_newpipe_update.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_settings_update_black.png b/app/src/main/res/drawable-xxxhdpi/ic_settings_update_black.png new file mode 100755 index 000000000..8186c6f5f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_settings_update_black.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_settings_update_white.png b/app/src/main/res/drawable-xxxhdpi/ic_settings_update_white.png new file mode 100755 index 000000000..8b5e6fa38 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_settings_update_white.png differ diff --git a/app/src/main/res/drawable/default_dot.xml b/app/src/main/res/drawable/default_dot.xml new file mode 100644 index 000000000..3380dca3b --- /dev/null +++ b/app/src/main/res/drawable/default_dot.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selected_dot.xml b/app/src/main/res/drawable/selected_dot.xml new file mode 100644 index 000000000..017e99d43 --- /dev/null +++ b/app/src/main/res/drawable/selected_dot.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/splash_background.xml b/app/src/main/res/drawable/splash_background.xml new file mode 100644 index 000000000..5b805cffa --- /dev/null +++ b/app/src/main/res/drawable/splash_background.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/splash_forground.xml b/app/src/main/res/drawable/splash_forground.xml new file mode 100644 index 000000000..cfb650758 --- /dev/null +++ b/app/src/main/res/drawable/splash_forground.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/tab_selector.xml b/app/src/main/res/drawable/tab_selector.xml new file mode 100644 index 000000000..b7307674b --- /dev/null +++ b/app/src/main/res/drawable/tab_selector.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-large-land/activity_main_player.xml b/app/src/main/res/layout-large-land/activity_main_player.xml index 7d7e1230e..5f484267b 100644 --- a/app/src/main/res/layout-large-land/activity_main_player.xml +++ b/app/src/main/res/layout-large-land/activity_main_player.xml @@ -239,7 +239,7 @@ android:focusable="true" android:padding="5dp" android:scaleType="fitXY" - android:src="@drawable/list" + android:src="@drawable/ic_list_white_24dp" android:background="?attr/selectableItemBackground" tools:ignore="ContentDescription,RtlHardcoded"/> diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml index 73939d60a..8cdc2f307 100644 --- a/app/src/main/res/layout-large-land/fragment_video_detail.xml +++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml @@ -8,107 +8,121 @@ android:focusableInTouchMode="true" android:orientation="horizontal"> - + android:layout_height="match_parent" + android:layout_weight="5" + android:fitsSystemWindows="true"> - - + android:fitsSystemWindows="true" + app:elevation="0dp" + app:layout_behavior="android.support.design.widget.FlingBehavior"> - - + app:layout_scrollFlags="scroll"> - + + android:background="@android:color/black" + android:clickable="true" + android:focusable="true" + android:foreground="?attr/selectableItemBackground" + app:layout_collapseMode="parallax"> - + - + - - + + + + + + + android:layout_height="wrap_content" + android:background="?android:windowBackground" + app:layout_scrollFlags="scroll"> @@ -126,6 +140,15 @@ tools:ignore="RtlHardcoded" tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum. Nunc eleifend est quis ipsum porttitor egestas. Sed facilisis, nisl quis eleifend pellentesque, orci metus egestas dolor, at accumsan eros metus quis libero." /> + + @@ -156,6 +179,7 @@ android:id="@+id/detail_content_root_hiding" android:layout_width="match_parent" android:layout_height="match_parent" + android:paddingBottom="10dp" android:layout_below="@+id/detail_title_root_layout" android:orientation="vertical" android:visibility="gone" @@ -209,17 +233,17 @@ tools:text="Uploader" /> + android:id="@+id/detail_uploader_subscribe" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical|right" + android:layout_marginRight="12dp" + android:text="@string/rss_button_title" + android:textSize="12sp" + android:theme="@style/RedButton" + android:drawableLeft="@drawable/ic_rss_feed_white_24dp" + tools:ignore="RtlHardcoded" + android:visibility="gone"/>--> @@ -401,7 +425,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" - android:orientation="vertical"> + android:orientation="vertical" + android:visibility="gone" + tools:visibility="visible"> + - - + - - - + + + + android:layout_gravity="bottom|center" + android:background="@color/transparent_background_color" + app:tabBackground="@drawable/tab_selector" + app:tabGravity="center" + app:tabIndicatorHeight="0dp"> - + - + - - - + + + diff --git a/app/src/main/res/layout/activity_main_player.xml b/app/src/main/res/layout/activity_main_player.xml index 3dccc5c4c..8cf9ba32f 100644 --- a/app/src/main/res/layout/activity_main_player.xml +++ b/app/src/main/res/layout/activity_main_player.xml @@ -237,7 +237,7 @@ android:focusable="true" android:padding="5dp" android:scaleType="fitXY" - android:src="@drawable/list" + android:src="@drawable/ic_list_white_24dp" android:background="?attr/selectableItemBackground" tools:ignore="ContentDescription,RtlHardcoded"/> diff --git a/app/src/main/res/layout/fragment_comments.xml b/app/src/main/res/layout/fragment_comments.xml new file mode 100644 index 000000000..64d4d73bd --- /dev/null +++ b/app/src/main/res/layout/fragment_comments.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_empty.xml b/app/src/main/res/layout/fragment_empty.xml new file mode 100644 index 000000000..6e5c06f6c --- /dev/null +++ b/app/src/main/res/layout/fragment_empty.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_related_streams.xml b/app/src/main/res/layout/fragment_related_streams.xml new file mode 100644 index 000000000..5bb0b9497 --- /dev/null +++ b/app/src/main/res/layout/fragment_related_streams.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index d49d23175..c6f733e3f 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -67,6 +67,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" + app:layoutManager="LinearLayoutManager" tools:listitem="@layout/item_search_suggestion"/> diff --git a/app/src/main/res/layout/fragment_video_detail.xml b/app/src/main/res/layout/fragment_video_detail.xml index 7c6568b67..b0ee65dde 100644 --- a/app/src/main/res/layout/fragment_video_detail.xml +++ b/app/src/main/res/layout/fragment_video_detail.xml @@ -1,6 +1,5 @@ - - + android:fitsSystemWindows="true"> - - + android:fitsSystemWindows="true" + app:elevation="0dp" + app:layout_behavior="android.support.design.widget.FlingBehavior"> - - + app:layout_scrollFlags="scroll"> - + + android:background="@android:color/black" + android:clickable="true" + android:focusable="true" + android:foreground="?attr/selectableItemBackground" + app:layout_collapseMode="parallax"> - + - + - - + + + + + + + android:layout_height="wrap_content" + android:background="?android:windowBackground" + app:layout_scrollFlags="scroll"> + tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum. Nunc eleifend est quis ipsum porttitor egestas. Sed facilisis, nisl quis eleifend pellentesque, orci metus egestas dolor, at accumsan eros metus quis libero." /> + tools:ignore="ContentDescription,RtlHardcoded" /> @@ -150,7 +159,7 @@ android:layout_marginTop="@dimen/video_item_detail_error_panel_margin" android:indeterminate="true" android:visibility="gone" - tools:visibility="visible"/> + tools:visibility="visible" /> + tools:visibility="visible" /> + android:padding="6dp"> + tools:ignore="RtlHardcoded" /> + tools:text="Uploader" /> + tools:text="Published on Oct 2, 2009" /> + tools:text="Description Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a ultricies ex. Integer sit amet sodales risus. Duis non mi et urna pretium bibendum." /> + android:background="?attr/separator_color" /> - - - - - - - - - - - + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_comments_item.xml b/app/src/main/res/layout/list_comments_item.xml new file mode 100644 index 000000000..a9b091329 --- /dev/null +++ b/app/src/main/res/layout/list_comments_item.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_comments_mini_item.xml b/app/src/main/res/layout/list_comments_mini_item.xml new file mode 100644 index 000000000..36f3e2e6e --- /dev/null +++ b/app/src/main/res/layout/list_comments_mini_item.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/missions_header.xml b/app/src/main/res/layout/missions_header.xml index 9505a2fce..6de38664d 100644 --- a/app/src/main/res/layout/missions_header.xml +++ b/app/src/main/res/layout/missions_header.xml @@ -4,8 +4,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="30dp" - android:layout_marginRight="16dp" - android:layout_marginEnd="16dp" + android:layout_marginRight="8dp" + android:layout_marginEnd="8dp" android:layout_marginTop="16dp" android:orientation="vertical" android:layout_marginLeft="8dp" diff --git a/app/src/main/res/layout/related_streams_header.xml b/app/src/main/res/layout/related_streams_header.xml new file mode 100644 index 000000000..b98244b7e --- /dev/null +++ b/app/src/main/res/layout/related_streams_header.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/toolbar_search_layout.xml b/app/src/main/res/layout/toolbar_search_layout.xml index 797eea48e..9e9e51442 100644 --- a/app/src/main/res/layout/toolbar_search_layout.xml +++ b/app/src/main/res/layout/toolbar_search_layout.xml @@ -30,7 +30,9 @@ android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="right|center_vertical" - tools:ignore="RtlHardcoded"> + android:focusable="true" + tools:ignore="RtlHardcoded" + android:background="?attr/selectableItemBackground"> - - + android:icon="?attr/ic_delete" + android:title="@string/clear_finished_download" + app:showAsAction="ifRoom" /> + + + diff --git a/app/src/main/res/menu/menu_history.xml b/app/src/main/res/menu/menu_history.xml index 526f500f6..9c030b5fe 100644 --- a/app/src/main/res/menu/menu_history.xml +++ b/app/src/main/res/menu/menu_history.xml @@ -3,8 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" tools:context="org.schabi.newpipe.history.HistoryActivity"> - diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index d9bd02a43..8493569a7 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,4 +1,4 @@ - + يتم التشغيل في الخلفية إلغاء @@ -10,12 +10,12 @@ الإعجابات صور معاينة الفيديو الصورة المصغرة الشخصية - هل تقصد: %1$s ? + هل تقصد: %1$s\? تنزيل تنزيل أدخل مسار تنزيل الملفات الصوتية - مسار حفظ التنزيلات الصوتية - مسار ملفات الصوت المحفوظة + يتم تخزين الصوت الذي تم تنزيله هنا + مسار مجلد الصوتيات المحفوظة أدخل مسار التنزيل لملفات الفيديو مسار حفظ تنزيلات الفيديو في مسار ملفات الفيديو المحفوظة @@ -26,7 +26,7 @@ مضيء صور معاينة الفيديو خطأ في الشبكة - الفيديو التالي + التالى لا يوجد مشغل فيديو. هل تريد تثبيت VLC ؟ افتح في المتصفح الصوت @@ -38,22 +38,22 @@ الإعدادات المظهر اخرى - الفيديو والصوتيات + الفيديو & الصوتيات مشاركة مشاركة بواسطة - عرض الفديوهات \'التالية\'و\'المماثلة\' + عرض مقاطع الفيديو \"التالية\" و \"شبيه\" عرض خيار لتشغيل الفيديو بواسطة مشغل كودي عرض خيار التشغيل بواسطة كودي السمة تم النشر يوم %1$s - الرابط غير مدعوم + رابط غير معتمد URL استخدام مشغل صوت خارجي استخدام مشغل فيديو خارجي (إختبارية) إجراء التنزيلات من خلال استخدام بروكسي Tor لزيادة الخصوصية ( تشغيل الفيديو المباشر غير مدعوم حتى الأن ). استخدام تور مشاهدات %1$s تم حجبه بواسطة GEMA - المحتوى غير متاح + محتوى غير متوفر تعذرت عملية تحميل كافة صور المعاينة خطأ تعذرت عملية تحليل الموقع @@ -70,7 +70,7 @@ تشغيل تلقائي اسود التاريخ وذاكرة التخزين المؤقت - التاريخ و التخزين المؤقت + التاريخ & ذاكرة التخزين المؤقت المحتوى التنزيلات التنزيلات @@ -83,7 +83,7 @@ التاريخ التاريخ افتح في وضع النافذة المنبثقة - "بعض الخيارات الدقة لن تحتوي على صوت عند تمكين هذا الخيار " + يزيل الصوت في بعض القرارات وضع النوافذ المنبثقة NewPipe تم إلغاء الاشتراك في القناة تعذر تغيير حالة الاشتراك @@ -107,7 +107,7 @@ تتبع مقاطع الفيديو التي تمت مشاهدتها استئناف عند اكتساب التركيز متابعة التشغيل بعد المقاطعات (مثل المكالمات الهاتفية) - عرض تلميح \"اضغط للتجاهل\" + إظهار التلميحات \"اضغط للتجاهل\" عرض تلميح على صفحة التفاصيل عند استخدام وضع مشغل الخلفية أو النافذة المنبثقة المشغل السلوك @@ -115,9 +115,9 @@ يتم التشغيل في الوضع المنبثق تم وضعه على قائمة الانتظار في مشغل الخلفية تم وضعه على قائمة الانتظار في مشغل النافذة المنبثقة - عرض المحتوى المقيّد بحسب العُمر - فيديو مقيد بحسب العمر. السماح بهذا المحتوى ممكن عن طريق الإعدادات. - مباشر + محتوى مقيد بحسب العمر + "إظهار الفيديو المقيد بحسب العمر. يمكن السماح باستخدام هذه المواد من \"الإعدادات\"." + بث مباشر تقرير الخطأ قائمة التشغيل نعم @@ -132,13 +132,13 @@ تشغيل الكل تنبيهات NewPipe - التنبيهات لمشغل NewPipe للخلفية والنوافذ المنبثقة + تنبيهات مشغل NewPipe للخلفية والنوافذ المنبثقة [غير معروف] لا يمكن تحليل الموقع بشكل كلي تعذرت عملية إعداد قائمة التنزيل - هذا بث مباشر، وهو غير معتمد الآن. + لبث المباشر غير مدعوم حتى الآن تعذر الحصول على أي بث تعذرت عملية تحميل الصورة تعطل التطبيق / واجهة المستخدم @@ -160,7 +160,7 @@ الإبلاغ عن خطأ تقرير المستخدم لم يتم العثور على نتائج - لا شيء هنا غير صراصير الليل + لا شيء هنا غير الصراصير الصوت إعادة المحاولة @@ -172,18 +172,18 @@ ليس هناك مشترِكون - صفر مشترِك - %s مشترِك - مشترِكان - %s مشتركين - %s مشترك - %s مشترك + %s لا يوجد مشترك + %s مشترك + %s اثنتين مشتركين + %s اشتراكات + %s مشتركين + %s مشتركون دون مشاهدات لاتوجد فيديوهات - تشغيل - إيقاف + ابدأ + إيقاف مؤقت شغل حذف التوقيع @@ -194,7 +194,7 @@ اسم الملف التقسيم الخطأ - الخادم غير معتمد + خادم غير مدعوم الملف موجود مسبقا العنوان غير صحيح أو الإنترنت غير متوفر يقوم نيوبايب بالتنزيل @@ -258,27 +258,27 @@ الإعدادات الصوتية تشغيل هنا تشغيل هنا في وضع النافذة المنبثقة -تحدي ريكابتشا +تحدي الكابتشا اضغط للإدراج في قائمة الانتظار - بدون مشاهدات - %s مشاهدة - مشاهدتين - %s مشاهدات - %s مشاهدات - %s مشاهدة + بدون مشاهدات + %s مشاهدة + %s مشاهدتين + %s مشاهدون + %s مشاهدات + %s مشاهدين - %s فيديو - %s فيديو - %s فيديوهات - %s فيديوهات - %s فيديوهات - %s فيديوهات + %s فيديو + %s فيديو + %s فيديوهان + %s فيديو + %s فيديوهات + %s فيديو - إعادة طلب كلمة التحقق + طلب اختبار الكابتشا مطلوب © %1$sبواسطة%2$sتحت%3$s صفحة الكشك @@ -301,17 +301,16 @@ مرة واحدة فقط العنوان خاطئ - لم يتم العثور على مشغل الفديو (يمكنك تثبيت VLC لتشغيله) + لم يتم العثور على مشغل تدفق (يمكنك تثبيت VLC وتشغيله). استيراد قاعدة البيانات تصدير قاعدة البيانات - "سيقوم بالكتابة على سجل التاريخ والاشتراكات الحالية " + "الكتابة فوق سجل التاريخ والاشتراكات الحالية " تصدير السجل، الإشتراكات وقوائم التشغيل عرض المعلومات إضافة إلى تحليل - مٌباشِر لم يتم العثور على أي بث مرئي لم يتم العثور على أي بث صوتي @@ -343,20 +342,13 @@ هل تريد حذف قائمة التشغيل هذه ؟ تم إنشاء قائمة التشغيل تمت إضافتها إلى قائمة التشغيل - لا يمكن حذف قائمة التشغيل + لا يمكن حذف قائمة التشغيل. ملئ الشاشة تكبير - حجم خط التسمية - أصغر خط - خط عادي - خط ذو حجم كبير - - مُزامَنة - - تنزيل ملف البث. - الإشارات مرجعية + تنزيل ملف البث + الإشارات المرجعية استعمال التقديم السريع الغير دقيق "التقديم الغير دقيق يسمح للمشغل بالإطلاع الى الأماكن بشكل اسرع مع دقة اقل " @@ -364,8 +356,8 @@ تم إفراغ مساحة ذاكرة التخزين المؤقتة الخاصة بالصور الملف - مجلد غير صالح - لا يمكن ترك إسم الملف فارغا + لا يوجد مثل هذا المجلد + لا يمكن أن يكون اسم الملف فارغا طرأ هناك خطأ: %1$s ملف مضغوط ZIP غير صالح إزالة الفواصل المرجعية @@ -384,21 +376,20 @@ إستيراد ملف "معرفك , soundcloud.com/ الخاص بك " - إفتراضي -تعطيل إيقاف جميع الصور المصغرة من تحميل البيانات واستخدام الذاكرة وحفظها. سيؤدي التغيير هذا إلى محو-ذاكرة التخزين المؤقت في الذاكرة-وذاكرة على القرص +عند إيقاف تحميل أي صور مصغرة ، وتوفير البيانات واستخدام الذاكرة. تعمل التغييرات على محو ذاكرة التخزين المؤقت للصورة الموجودة على الذاكرة أو على القرص. امسح البيانات الوصفية المخزنة مؤقتًا إزالة جميع بيانات صفحات الويب المخزنة مؤقتًا تم محو ذاكرة التخزين المؤقت للبيانات الوصفية وضع البث القادم تلقائيا في قائمة الإنتظار - رفض البث المشابه في حال كون البث السابق يعمل في حالة عدم التكرار + رفض التدفق-التلقائي المشابه في حال كان التدفق السابق يعمل في-حالة عدم التكرار. إضافة صورة مصغرة إلى قائمة التشغيل تفضيل قائمة التشغيل - تم تغيير الصورة المصغرة لقائمة التشغيل + تم تغيير الصورة المصغرة لقائمة التشغيل. بدون تسميات توضيحية تسميات توضيحية - تعديل مشغل نص التسمية التوضيحية وأنماط الخلفية. يتطلب إعادة تشغيل التطبيق لتصبح التغييرات سارية المفعول + تعديل مشغل نص التسمية التوضيحية وأنماط الخلفية. يتطلب إعادة تشغيل التطبيق لتصبح التغييرات سارية المفعول. تمكين LeakCanary قد تتسبب مراقبة تسرب الذاكرة في عدم استجابة التطبيق عند تفريغ السجلات @@ -408,15 +399,15 @@ محو سجل المشاهدة احذف سِجل الفيديوهات التي تم تشغيلها - حذف سجل المشاهدة بالكامل. + حذف سجل المشاهدة بالكامل\? تم حذف سجل المشاهدة. محو سجل البحث يحذف تاريخ البحث عن الكلمات الرئيسية - حذف سِجل البحث بالكامل. + حذف سِجل البحث بالكامل\? تم حذف سجل البحث. المشغل الخارجي لا يدعم هذه الأنواع من الروابط - ملف غير صالح / محتوى غير صالح - الملف غير موجود أو ليس لديك الإذن الكافي للقراءة أو الكتابة فيه + لا يوجد مثل هذا الملف/مصدر المحتوى + الملف غير موجود أو الإذن بالقراءة أو الكتابة إليه غير موجود لا يوجد بث متاح للتنزيل تم حذف عنصر واحد. @@ -460,7 +451,6 @@ سرعة الأداء تردد الصوت نزع الإرتباط (قد يسبب تشويه) - تعديل الايقاع Nightcore هل تريد أيضا استيراد الإعدادات؟ "سياسة الخصوصية في NewPipe " @@ -488,4 +478,68 @@ قوائم التشغيل المسارات المستخدمين - + إلغاء الاشتراك + علامة تبويب جديدة + اختر علامة التبويب + استخدم إيماءات التحكم في سطوع وصوت المشغل + التحكم بالإيماءات السطوع + استخدام الإيماءات للتحكم في سطوع المشغل + التحديثات + تم حذف الملف + تتبيه تحديث التطبيق + إيماءة التحكم بالصوت + الأحداث + التنبيه بإصدارات newpipe الجديدة + ذاكرة التخزين الخارجي غير متوفر + تحميل إلى بطاقة SD الخارجية ليس متاحا حتى الآن. إعادة تعيين موقع مجلد التحميل؟ + باستخدام علامات الجدولة الافتراضية، حدث خطأ أثناء قراءة علامات التبويب المحفوظة + استعادة الافتراضيات + هل تريد استعادة الإعدادات الافتراضية؟ + عدد المشتركين غير متاح + ما هي التبويبات التي تظهر على الصفحة الرئيسية + إختيار + المؤتمرات + التحديثات + إظهار تنبيه للمطالبة بتحديث التطبيق عندما يتوفر إصدار جديد + وضع عرض قائمة + القائمة + الشبكة + تلقائي + تبديل طريقة العرض + يتوفر تحديث ل newpipe! + اضغط لتنزيل + انتهى + في قائمة الانتظار + متوقف + في قائمة الانتظار + بعد المعالجة + قائمة الانتظار + تم رفضها من قبل النظام + فشل التنزيل + تم الانتهاء من التحميل + %s أنتهى التحميل + إنشاء اسم فريد + الكتابة فوق + يوجد ملف تحميل بهذا الاسم موجود مسبقاً + هنالك تحميل قيد التقدم بهذا الاسم + إظهار خطأ + كود + لا يمكن إنشاء الملف + لا يمكن إنشاء المجلد الوجهة + تم رفضها من قبل النظام + فشل اتصال الأمن + تعذر العثور على الخادم + لا يمكن الاتصال بالخادم + الخادم لايقوم بإرسال البيانات + الخادم لا يقبل التنزيل المتعدد، إعادة المحاولة مع @string/msg_threads = 1 + عدم استيفاء النطاق المطلوب + غير موجود + فشلت المعالجة الاولية + حذف التنزيل المنتهية + "قم بإستكمال %s حيثما يتم التحويل من التنزيلات" + توقف + أقصى عدد للمحاولات + الحد الأقصى لعدد محاولات قبل إلغاء التحميل + "ايقاف عند التحويل إلى البيانات المتنقلة" + سيتم إعادة تحميل التنزيلات التي لا يمكن إيقافها + \ No newline at end of file diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index d5c27ce48..40c277884 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -1,16 +1,16 @@ - + Націсніце пошук, каб пачаць %1$s праглядаў Апублікавана %1$s Патокавы плэер не знойдзены. Усталяваць VLC? - Патокавы плэер не знойдзены (вы можаце ўсталяваць VLC) + Патокавы плэер не знойдзены (вы можаце ўсталяваць VLC). Усталяваць Скасаваць - Адкрыць у браўзэры + Адкрыць у браўзеры Адкрыць у асобным акне Падзяліцца Спампаваць - Загрузка файла прамой трансляцыі. + Загрузка файла прамой трансляцыі Пошук Налады Магчыма, вы мелі на ўвазе: %1$s? @@ -18,7 +18,7 @@ Выбраць браўзэр паварот Знешні відэаплэер - У некаторых разрозненнях НЕ будзе гуку, калі гэтая опцыя абраная + Адключае гук для НЕКАТОРЫХ разрозненняў Знешні аўдыяплэер NewPipe ў акне Падпісацца @@ -30,7 +30,7 @@ Галоўная Падпіскі - Закладкі + Адзначаныя плэйлісты Што новага @@ -42,8 +42,8 @@ Папка для захоўвання загружаных відэа Увядзіце шлях да папкі для загрузкі відэа - Шлях загрузкі аўдыё - Папка для захоўвання загружаных аўдыё + Тэчка загрузкі аўдыё + "Сюды захоўваецца загружанае аўдыё " Увядзіце шлях да папкі для загрузкі аўдыё Аўтапрайграванне @@ -463,4 +463,4 @@ Фонавы плэер Плэер у акне - + \ No newline at end of file diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 11571f4e5..ce175b28e 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -11,12 +11,12 @@ Изтегли Търси Настройки - Може би имахте в предвид: %1$s ? + Може би имахте в предвид: %1$s\? Сподели с Избери браузър ориентация Използвай външен видео плейър - Някои резолюции няма да имат вграден аудио поток, ако тази опция е избрана + Премахва аудио при НЯКОИ резолюции Използвай външен аудио плейър NewPipe в прозорец Абониране @@ -77,8 +77,8 @@ Език на съдържанието по подразбиране Плейър Поведение - Видео & Аудио - История и кеш-памет + Видео & аудио + История и кеш Нов прозорец Външност Други @@ -88,9 +88,9 @@ Включен в опашката в нов прозорец Възпроизвеждане Съдържание - Покажи съдържание за възрастни - Съдържание за възрастни. Разрешаването на такова съдържание става от Настройки. - на живо + Съдържание за възрастни + Покажи съдържание за възрастни. Разрешаването на такова съдържание става от \"Настройки\". + НА ЖИВО Изтегляния Изтегляния Съобщение за грешка @@ -109,7 +109,7 @@ Възпроизведи всички Известия от NewPipe - Известия за фоновия плейър и плейъра в отделен прозорец на NewPipe + Известия за Фонов плейър и плейъра в Отделен прозорец на NewPipe [Неизвестен] @@ -121,7 +121,7 @@ Съдържанието не е налично Блокирано от „GEMA“ Не мога да настроя меню за сваляне - Това е предаване на живо, което все още не се поддържа. + Предаването на живо все още не се поддържа Не мога да достъпя нито един поток Не мога да заредя изображение Приложението или потребителският интерфейс се сринаха @@ -209,11 +209,11 @@ Лицензи Безплатно и леко поточно предаване за Android. Виж в GitHub - Изтегли стрийм файл. + Изтегли стрийм файл Покажи инфо Главен - Отметки + Отметнати плейлисти Добави към @@ -225,7 +225,7 @@ Премахни всички метаданни за уебстраници от кеш-паметта Кеш-паметта с метаданни бе изтрита Автоматично нареди на опашка следващия - "Автоматично прибавяне на сродно съдържание при неповтарящ се преглед " + Автоматично прибавяне на сродно съдържание при неповтарящ се преглед. Държава, за която да бъде показвано съдържание Услуга Отстраняване на грешки @@ -240,14 +240,14 @@ Импортиране на база данни Експортиране на база данни - Ще замени текущите история и абонаменти + Замества текущите история и абонаменти Експортиране на историята, абонаментите и плейлистите Изтрий историята с изгледани - Изтрий цялата история с изгледани. + Изтрий цялата история с изгледани\? Историята с изгледани е изтрита. Изтрий историята на търсенията Изтрива историята с въвежданите за търсене ключови думи - Изтрий цялата история на търсенията. + Изтрий цялата история на търсенията\? Историята на търсенията е изтрита. URL подписът на клипа не можа да бъде дешифрован Външните плейъри не поддържат този вид линкове @@ -282,8 +282,8 @@ \nНашата политика за личните данни обяснява подробно какви данни изпращате и къде се съхраняват, когато изпращате съобщения за грешки. Прочетете нашата политика за поверителност Лицензът на NewPipe - Липсва стрийм плейър (можете да изтеглите VLC, за да пуснете стрийма) - Изключете, за да спрете зареждането на всички миниатюри, спестявайки трафик и памет. При промяна на тази настройка, текущата кеш-памет на изображенията ще бъде изтрита + Липсва стрийм плейър (можете да изтеглите VLC, за да пуснете стрийма). + Изключете, за да спрете зареждането на всички миниатюри, спестявайки трафик и памет. При промяна на тази настройка, текущата кеш-памет на изображенията ще бъде изтрита. Показвай подсказка, когато е избран фонов режим или режим в прозорец на страницата с детайли на съответния клип Изтрива историята на възпроизвежданите стриймове Не са намерени видео стриймове @@ -303,14 +303,14 @@ \nвъзпроизвеждане в отделен прозорец 1 елемент е изтрит. - reCAPTCHA + преКАПЧА reCAPTCHA заявка Изисква се въвеждане на reCAPTCHA Изтегляне Повечето специални символи - NewPipe е безплатен „copyleft“ софтуер: Можете да го използвате, изучавате, споделяте и подобрявате по ваше усмотрение. В частност, Вие можете да препубликувате и/или модифицирате приложението според правилата на Главния обществен лиценз на ГНУ, издаден от Фондацията за свободен софтуер – версия 3 на лиценза или по-нова. + NewPipe е безплатен „copyleft“ софтуер: Можете да го използвате, изучавате, споделяте и подобрявате по желание. В частност, Вие можете да препубликувате и/или модифицирате приложението според правилата на Главния обществен лиценз на ГНУ, издаден от Фондацията за свободен софтуер – версия 3 на лиценза или по-нова. Прочетете лиценза @@ -354,11 +354,11 @@ Детайли Аудио настройки Задръжте, за да поставите на опашката - На опашката във „фонов режим“ - На опашката в „режим в прозорец“ + На опашката при „фонов режим“ + На опашката при „режим в прозорец“ Възпроизвеждане от тук - Възпроизвеждане от тук във фонов режим - Възпроизвеждане от тук в прозорец + Възпроизвеждане от тук при фонов режим + Възпроизвеждане от тук при прозорец Отвори навигационната лента Затвори навигационната лента @@ -376,9 +376,9 @@ Получаване на инфо… Зареждане на заявеното съдържание - Създай Нов Плейлист - Изтрий Плейлист - Преименувай Прелист + Нов Плейлист + Изтрий + "Преименувай " Име Добави Към Плейлист Задай като миниатюра на плейлиста @@ -389,8 +389,8 @@ Искате ли да изтриете този плейлист? Плейлистът е създаден Добавено към плейлист - Миниатюрата на плейлиста е сменена - Плейлистът не можа да бъде изтрит + Миниатюрата на плейлиста е сменена. + Плейлистът не можа да бъде изтрит. Без надписи @@ -401,13 +401,13 @@ Авто-генерирани Надписи - Модифицирай мащаба на текста и фона на надписите. Изисква рестарт на приложението, за да се приложат промените + Модифицирай мащаба на текста и фона на надписите. Изисква рестарт на приложението, за да се приложат промените. Включи LeakCanary Следенето за пропускане на памет може да направи приложението нестабилно Докладвай за извънредни грешки - Импортиране/експортиране + Импортиране/Експортиране Импортирай Импортирай от Експортирай в @@ -462,4 +462,7 @@ Възстанови Стъпка + Насили докладването на неизпращаеми Rx изключения извън фрагмента или кръговрата на активност след приключване + + Откачи (може да предизвика промени) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 20916ef45..78608c2a5 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -1,4 +1,4 @@ - + Instal·la Cancel·la Obre al navegador @@ -12,12 +12,12 @@ Mostra la informació Subscripcions - Adreces d\'interès + Llistes de reproducció desades Novetats Ruta de baixada dels vídeos - Ruta de baixada dels fitxers d\'àudio + Carpeta de baixada dels fitxers d\'àudio Reproducció automàtica Resolució per defecte Àudio @@ -40,7 +40,7 @@ Contingut Desactiva les restriccions per edat Vídeo restringit per edat. Podeu permetre aquesta mena de continguts des de la configuració. - en directe + EN DIRECTE Baixades Baixades Tot @@ -112,9 +112,9 @@ Reproductor emergent Demana-ho sempre - Crea una nova llista de reproducció - Elimina la llista de reproducció - Canvia el nom de la llista de reproducció + Crea una llista de reproducció + Elimina + Canvia el nom Nom Afegeix a una llista de reproducció Importa @@ -129,9 +129,9 @@ %1$s reproduccions Publicat el %1$s No s\'ha trobat un reproductor de fluxos. Voleu instal·lar el VLC? - No s\'ha trobat cap reproductor de fluxos (podeu instal·lar el VLC per reproduir-lo) + No s\'ha trobat cap reproductor de fluxos (podeu instal·lar el VLC per reproduir-lo). Obre en mode emergent - Baixa el fitxer de vídeo. + Baixa el fitxer de vídeo Volíeu dir: %1$s? Comparteix-ho amb rotació @@ -148,7 +148,7 @@ Ruta on es desaran els vídeos baixats Introduïu una ruta de baixada per als vídeos - Ruta on es desaran els fitxers d\'àudio baixats + Els fitxers d\'àudio baixats es desaran aquí Introduïu una ruta de baixada per als fitxers d\'àudio Reprodueix un vídeo quan el NewPipe s\'executa des d\'una altra aplicació @@ -174,7 +174,7 @@ Mostra suggeriments durant la cerca Historial de cerca Reprèn la reproducció després d\'una interrupció (per exemple, una trucada) - Vídeo següent + Següent Mostra el vídeo següent i similars País per defecte dels continguts Llengua per defecte dels continguts @@ -194,7 +194,7 @@ Contingut no disponible Blocat per la GEMA No s\'ha pogut configurar el menú de baixades - Això és una emissió en directe, que encara no és compatible. + Les emissions en directe encara no són compatibles No s\'ha pogut obtenir cap vídeo No s\'ha pogut carregar la imatge Ha fallat l\'aplicació o la interfície d\'usuari @@ -204,9 +204,9 @@ L\'URL no és vàlid No s\'ha trobat cap flux de vídeo No s\'ha trobat cap flux d\'àudio - Directori no vàlid - Fitxer o font de contingut no vàlid - El fitxer no existeix o no teniu permisos suficients per llegir-lo o escriure-hi + 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 nom del fitxer no pot estar en blanc S\'ha produït un error: %1$s Informa de l\'error per correu electrònic @@ -299,16 +299,16 @@ S\'està carregant el contingut seleccionat Voleu eliminar aquesta llista de reproducció? - No s\'ha pogut eliminar la llista de reproducció + No s\'ha pogut eliminar la llista de reproducció. Importació i exportació Controls de la velocitat de reproducció Tempo To Toqueu el botó de cerca per començar - En algunes resolucions NO hi haurà àudio quan aquesta opció estigui activada + Elimina l\'àudio en algunes resolucions Reproductor d\'àudio extern - Desactiveu-ho per evitar que es carreguin les miniatures i estalviar dades i memòria. Si canvieu aquesta opció, s\'esborrarà la memòria cau d\'imatges tant de la memòria com de l\'emmagatzematge + Desactiveu-ho per evitar que es carreguin les miniatures i estalviar dades i memòria. Si canvieu aquesta opció, s\'esborrarà la memòria cau d\'imatges tant de la memòria com de l\'emmagatzematge. Emmagatzema les cerques localment Registra els vídeos visualitzats Reprèn automàticament @@ -324,7 +324,7 @@ Canvia al mode emergent Canvia al mode principal - Això sobreescriurà l\'historial i les subscripcions actuals + 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. Arrossegueu per a reordenar la llista @@ -356,8 +356,8 @@ Encara no us heu subscrit a cap canal Novetats Manteniu premut per afegir a la cua - Reprodueix en segon pla - Reprodueix en mode emergent + Reprodueix aquí en segon pla + Reprodueix aquí en mode emergent Defineix com a miniatura de la llista de reproducció @@ -365,8 +365,8 @@ Elimina l\'adreça d\'interès S\'ha creat la llista de reproducció - Afegeix a la llista de reproducció - S\'ha canviat la miniatura de la llista de reproducció + S\'ha afegit a la llista de reproducció + S\'ha canviat la miniatura de la llista de reproducció. Sense subtítols Ajusta @@ -388,7 +388,7 @@ Desvincula (pot provocar distorsió) Nightcore Elimina totes les dades de llocs web de la memòria cau - Afegeix a la cua un vídeo relacionat quan es reprodueix l\'últim vídeo en una cua sense repetició + Afegeix a la cua un vídeo relacionat quan es reprodueix l\'últim vídeo en una cua sense repetició. Mostra els missatges d\'ajuda Mostra un missatge d\'ajuda quan el botó de mode en segon pla o emergent estigui premut a la pàgina de detalls d\'un vídeo Què ha passat:\\nPetició:\\nIdioma del contingut:\\nServei:\\nHora GMT:\\nPaquet:\\nVersió:\\nVersió del SO: @@ -423,17 +423,17 @@ 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 + 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 que s\'han reproduït - Esborra tot l\'historial de reproduccions. + Voleu esborrar tot l\'historial de reproduccions\? S\'ha esborrat l\'historial de reproduccions. Esborra l\'historial de cerca Esborra l\'historial de paraules cercades - Esborra tot l\'historial de cerca. + Voleu esborrar tot l\'historial de cerca\? S\'ha esborrat l\'historial de cerca. S\'ha esborrat 1 element. @@ -464,4 +464,32 @@ Llistes de reproducció Pistes Usuaris - + Pestanya nova + Tria una pestanya + Control de volum per gestos + Fes servir gestos per controlar el volum del reproductor + Control de brillantor per gestos + Fes servir gestos per controlar la brillantor del reproductor + Actualitzacions + S\'ha eliminat el fitxer + L\'emmagatzematge extern no està disponible + Reinicialitza els valors per defecte + Voleu reinicialitzar els valors per defecte\? + Selecció + Actualitzacions + Llista + Quadrícula + Automàtic + Canvia la vista + Està disponible una nova actualització del NewPipe! + A la cua + en pausa + a la cua + Afegeix a la cua + Genera un nom únic + Mostra l\'error + Codi + No es pot crear el fitxer + No es pot crear la carpeta de destinació + Atura + \ No newline at end of file diff --git a/app/src/main/res/values-cmn/strings.xml b/app/src/main/res/values-cmn/strings.xml index ccdf23c98..897365ca9 100644 --- a/app/src/main/res/values-cmn/strings.xml +++ b/app/src/main/res/values-cmn/strings.xml @@ -1,55 +1,55 @@ - + 点击搜索按钮即可开始使用 %1$s 次观看 发布于 %1$s - 找不到流媒体播放器。您想安装 VLC 吗? - 找不到流媒体播放器(您可以安装 VLC 来播放) + 找不到媒体播放器。您要安装 VLC 吗? + 找不到媒体播放器(您可以安装 VLC 来播放)。 安装 取消 在浏览器中打开 在悬浮窗模式下打开 分享 下载 - 下载流媒体文件。 + 下载媒体文件 搜索 设置 - 您是不是要找: %1$s ? + 您是不是要找:%1$s? 分享至 选择浏览器 旋转 使用外部视频播放器 - 启用此选项时,某些分辨率将不会有音频 + 删除某些分辨率下的音频 使用外部音频播放器 - NewPipe弹出模式 + NewPipe 悬浮窗模式 订阅 - 订阅 - 取消订阅成功 + 已订阅 + 退订成功 无法更改订阅 无法更新订阅 显示详情 主页 订阅 - 书签 + 已添加书签到播放列表 新功能 - 后台 - 弹出窗口 + 转到后台 + 悬浮窗 添加到 视频下载路径 储存视频文件的路径 输入视频的下载地址 - 音频下载路径 - 储存音频的路径 + 音频下载的路径 + 下载音频的储存路径 输入音频的下载路径 自动播放 NewPipes被其它程序调用时播放视频 默认分辨率 - 默认弹出窗口分辨率 + 默认悬浮窗分辨率 显示更高的分辨率 只有部分设备支持播放 2K/4K 视频 用 Kodi 播放 @@ -63,10 +63,11 @@ 亮色 酷黑 黑色 - 记住弹出窗口的尺寸与位置 - 记住上一次弹出窗口的位置以及大小 + 记住悬浮窗的尺寸与位置 + M4A — 更好的音质 + 记住上一次悬浮窗的位置以及大小 已清除图像缓存 - 最小化弹出播放器 + 最小化悬浮窗播放器 清除观看历史 @@ -87,7 +88,7 @@ 错误 \n - 服务器无法支持 + 不支持的服务器 文件已存在 NewPipe 下载中 请稍等… @@ -103,9 +104,9 @@ 打开网页 删除书签 - 请问你要删除这个列表吗? + 确定要删除该播放列表吗? 已创建播放列表 - 已加入播放列表 + 播放列表 步骤 重置 @@ -117,9 +118,9 @@ 没有限制 使用移动数据时的解析度限制 最小化应用程序切换 - 从主视频播放器切换到其他应用程序时的操作 - %s + 从主视频播放器切换到其他应用时的操作 - %s 没有 - 最小化背景播放器 + 最小化后台播放 WebM — 自由视频格式 使用快速粗略定位 粗略定位功能允许播放器以略低的精确度为代价换取更快的定位速度 @@ -127,4 +128,362 @@ 清除缓存的元数据 移除所有缓存的网页数据 已清除缓存的元数据 - + 不加载缩略图时,可以节省数据和存储空间。更改后将清除存储空间和扩展空间的缓存。 + 自动排列下一个媒体 + 在非重复排列中播放最后一个媒体时,自动推荐相关媒体。 + 玩家手势控制 + 使用手势控制播放器的亮度和音量 + 搜索建议 + 搜索时显示建议 + 搜索历史记录 + 在本地存储搜索 + 历史记录和缓存数据 + 记录观看过的视频 + 取得视窗焦点时继续播放 + 在被打断后继续播放(例如有来电) + 下载 + 下一部 + 显示「下一部」及「相关」的视频 + 显示「长按以新增」的提示 + 在视频详细信息页按下后台播放或悬浮窗按钮时提示 + 不支持该网址 + 默认内容的国家 + 服务 + 默认内容的语言 + 播放器 + 行为 + 视频与音频 + 历史记录和缓存数据 + 悬浮窗 + 外观 + 其他 + 调试 + 在后台播放 + 在悬浮窗下播放 + 已添加到后台播放队列 + 已添加到悬浮窗播放队列 + 播放 + 内容 + 年龄限制内容 + 显示有年龄限制的视频。可以从设置中允许该内容。 + 直播 + 下载 + 下载 + 错误报告 + 所有 + 频道 + 频道 + 播放列表 + 播放列表 + 曲目 + 用户 + 是的 + 稍等 + 不适用 + 过滤 + 刷新 + 清除 + 调整 + 最佳分辨率 + 复原 + 全部播放 + 总是 + 仅一次 + 文件 + NewPipe 通知 + NewPipe 后台播放和悬浮窗播放的通知 + [未知] + 切换方向 + 切换到后台 + 切换到悬浮窗 + 切换到首页 + 导入数据库 + 导出数据库 + 覆盖您当前的历史记录和订阅 + 导出历史记录、订阅和播放列表 + 删除播放过的媒体历史记录 + 确定要清除所有观看历史记录吗? + 观看历史记录已清除。 + 清除搜索历史记录 + 清除搜索关键词的历史记录 + 确定要清除所有搜索历史记录吗? + 无法加载所有缩略图 + 无法解析视频网址签名 + 无法解析网站 + 无法完全解析网站 + 内容不可用 + 内容被 GEMA 封锁 + 无法设置下载菜单 + 目前还不支持观看直播 + 无法获得任何媒体 + 无法加载图片 + 应用程序或界面出现崩溃了 + 无法播放此媒体 + 发生了无法恢复的播放器错误 + 正在从播放器错误中恢复 + 外部播放器不支持此类型的链接 + 无效的网址 + 找不到视频串流 + 找不到音频串流 + 无效的文件夹 + 无效的文件/内容来源 + 该文件不存在或缺少读写权限 + 文件名不能为空 + 发生错误:%1$s + 没有可供下载的串流 + 抱歉,这不应该发生的。 + 通过电子邮件报告错误 + 抱歉,发生了一些错误。 + 报告 + 信息: + 发生了什么: + 事件:\\n请求:\\n内容语言:\\n服务:\\nGMT 时间:\\n组件:\\n版本:\\n系统版本: + 您的评论(请用英语): + 详细: + 视频预览缩略图 + 视频预览缩略图 + 上传者的头像缩略图 + 喜欢 + 不喜欢 + 使用 Tor + (实验性)通过 Tor 强制下载流量以增加隐私(暂不支持视频媒体)。 + 用户报告 + 这里什么都没有 + 拖动以重新排序 + 无法创建下载目录「%1$s」 + 已成功创建下载目录「%1$s」 + 视频 + 音频 + 重试 + 手机存储访问权限被拒绝 + 使用旧的播放器 + 旧的内置 Mediaframework 播放器 + + + 亿 + 没有订阅者 + + %s 位订阅者 + + + 无观看次数 + + %s 次观看 + + + 没有视频 + + 部视频 + + + 删除 + 校验 + 退出 + 重命名 + 文件名 + 线程 + 错误的网址或网络不可用 + 点按以查看详细信息 + 复制到剪贴板 + 请选择下载文件夹 + 在悬浮窗模式打开 +\n需要此权限 + 已删除一个项目。 + reCAPTCHA + reCAPTCHA 验证 + 需完成 reCAPTCHA 验证 + 下载 + 文件名中允许的字符 + 无效字符将替换为该值 + 替换字符 + © %1$s 由 %2$s 使用 %3$s 版权所有 + 无法加载许可证 + 关于 + 贡献者 + 许可证 + 安卓上开源且轻便的媒体播放器。 + 贡献 + 您是否有想法帮助我们:翻译、界面设计、代码优化以及真正繁重的功能扩展 - 我们随时欢迎您提供帮助。让 NewPipe 越变越好! + 在 GitHub 上查看 + 捐赠 + NewPipe 由社区人员维护和开发额,他们耗费时间务求为您带来最佳体验。现在是时候回过头来,让我们的开发人员能够在使 NewPipe 更加完美的同时,享受一杯咖啡。 + 回馈 + 网站 + 访问 NewPipe 网站了解更多信息和新闻。 + NewPipe 的隐私政策 + NewPipe 项目是非常重视您的隐私。因此,未经您的同意,该应用程序不会收集任何数据。 +\nNewPipe 的隐私政策详细说明了当您发送崩溃报告时,什么资料会被传送及储存。 + 阅读隐私政策 + NewPipe 的许可证 + NewPipe 是一个 Copyleft 的自由软件:您可以随意使用、研究、分享或改进它。在遵守由自由软件基金会所发布的 GNU 通用公共授权条款的状况下,您可以自由地再发布或修改它;授权条款预设使用第三版,但您也可以选择更新的版本。 + 阅读许可证 + 历史记录 + 搜索 + 观看 + 历史记录被关闭了 + 历史记录 + 没有历史记录 + 清除历史记录 + 项目已删除 + 确定要从搜索历史记录中删除该项吗? + 确定要从观看历史记录中删除该项吗? + 您确定要删除历史记录中的所有项吗? + 上一次播放 + 最受欢迎 + 首页内容 + 空白页面 + 互动页面 + 订阅页面 + Feed 页面 + 频道页面 + 选择一个频道 + 尚未订阅任何频道 + 选择一个互动 + 输出 + 接入 + 无效的压缩文件 + 警告:无法导入所有文件。 + 这将覆盖您当前的设定。 + 您是否要导入设定? + 互动 + 趋势 + 前 50 + 最新和热门 + 转到后台播放 + 悬浮窗播放 + 移除 + 详细 + 音频设置 + 长按以新增至队列 + 转到后台时排列 + 排列新的悬浮窗 + 从这里开始播放 + 转到后台时从这里开始 + 从新的悬浮窗开始 + 打开抽屉 + 关闭抽屉 + 某些东西即将在此出现;D + 偏好的「开启」动作 + 开启内容时的默认动作 - %s + 视频播放器 + 转到后台播放 + 悬浮窗播放 + 总是询问 + 正在获取信息… + 正在载入请求的内容 + 新的播放列表 + 删除 + 重命名 + 名称 + 添加到播放列表 + 设为播放列表缩略图 + 将播放列表加入书签 + 播放列表缩略图已更改。 + 无法删除播放列表。 + 没有字幕 + 合适的 + 填满 + 缩放 + 自动生成 + 字幕 + 修改播放器标题文本比例和背景样式。需要重启才能生效。 + 启用 LeakCanary + 内存泄漏监视可能导致应用程序在存储时无响应 + 报告活动周期外错误 + 强制报告在处理完片段或活动周期外发生的无法传递的 Rx 异常 + 导入/导出 + 导入 + 导入至 + 导出到 + 正在导入… + 正在导出… + 导入文件 + 之前的导出 + 无法导入订阅 + 无法导出订阅 + 通过下载导出文件来导入 YouTube 订阅: +\n +\n1.移至该网址:%1$s +\n2.当被询问时登入帐号 +\n3.应该开始下载(这是导出文件) + 通过输入 URL 或 ID 来导入 SoundCloud的配置文件: +\n +\n1.在浏览器中启用「桌面模式」(该网站不适用于移动设备) +\n2.移至该网址:%1$s +\n3.当被询问时登入帐号 +\n4.复制您重定向的配置文件到网址。 + yourID, soundcloud.com/yourid + 请记住,此操作可能造成昂贵的网络花费。 +\n +\n您是否要继续? + 播放速度控制 + 速度 + 音量 + 取消链接(可能会导致扭曲) + 静音时快进 + 退订 + 新标签 + 选择标签 + 音量手势控制 + 用手势控制播放器的音量 + 手势控制亮度 + 用手势控制播放器的亮度 + 默认的内容语言 + 升级 + 文件已删除 + 应用升级通知 + 新 NewPipe 版本通知 + 外储存不可行 + 下载至外置SD卡还未可行。重置下载文件夹位置? + 恢复默认 + 您真的要恢复至默认吗? + 选择 + 升级 + 列表 + 自动 + 轻按以下载 + 已完成 + 于队列中 + 已暂停 + 已加入队列 + 后处理 + 队列 + 系统拒绝该行动 + 下载失败 + 下载完成 + %已下载完毕 + 生成独特的名字 + 覆写 + 同名的已下载文件已经存在 + 同名下载进行中 + 显示错误 + 代码 + 无法创建该文件 + 系统拒绝此批准 + 安全连接失败 + 找不到服务器 + 连不上服务器 + 伺服器没回送数据 + 找不到 + 后处理失败 + 清除已完毕的下载 + + 重试上限 + 取消下载前可以尝试的最多次数 + 换成手机数据时暂停 + 事件 + 使用默认选项卡, 读取保存的选项卡时出错 + 订阅者计数不可用 + 主页上显示的选项卡 + 会议 + 显示通知, 以便在新版本可用时提示应用更新 + 列表视图模式 + 网格 + 切换视图 + NewPipe 更新可用! + 无法创建目标文件夹 + 服务器不接受多线程下载, 请重试使用 @string/msg_threads = 1 + 请求的范围不满足 + 继续进行%s个待下载转移 + 将重新启动无法暂停的下载 + \ 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 d736a9e34..1e17f0621 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,4 +1,4 @@ - + Publikováno %1$s Nenalezen žádný přehrávač. Nainstalovat VLC? @@ -9,17 +9,17 @@ Stáhnout Vyhledat Nastavení - Měli jste na mysli: %1$s? + Mysleli jste: %1$s\? Sdílet s Vybrat prohlížeč otočení Použít externí video přehrávač Použít externí audio přehrávač - Cesta, kam se uloží stažené audio + Stažené audio je uloženo zde Zadejte umístění pro stažené audio soubory - Umístění pro stažené audio + Složka pro stažené audio Výchozí rozlišení Přehrát pomocí Kodi Aplikace Kore nenalezena. Chcete ji nainstalovat? @@ -67,9 +67,9 @@ Automaticky přehrávat Přehrává video, když je NewPipe otevřen z jiné aplikace Obsah - Zobrazovat věkově omezený obsah - Toto video je věkově omezeno. Povolte věkově omezená videa v nastavení. - živě + Věkově omezený obsah + Zobrazit video s věkovým omezením. Povolit tento obsah lze v \"Nastavení\". + ŽIVĚ Nebylo možné kompletně analyzovat stránku Začni stiskem hledat @@ -101,7 +101,7 @@ Omlouváme se, nastaly určité chyby. Nepodařilo se nahrát obrázek Aplikace/UI spadlo - Tento stream je vysílán živě, funkce ještě není podporována. + Živé streamy zatím nejsou podporovány Nepodařilo se dostat žádný stream Nepodařilo se nastavit menu stahování Nahlásit chybu @@ -142,7 +142,7 @@ otevření ve vyskakovacím okně Použít starý přehrávač -Některé formáty rozlišení NEBUDOU obsahovat zvukovou stopu po zapnutí této funkce +Odstraňuje zvuk v některých rozlišeních Zobrazovat vyšší rozlišení Pouze některá zařízení podporují přehrávání 2K/4K videí Výchozí formát videa @@ -252,7 +252,7 @@ otevření ve vyskakovacím okně Historie je prázdná Historie vymazána Položka byla odstraněna -Zobrazovat tip \"podržet pro přidání\" +Zobrazovat tip \"Podržet pro přidání\" Zobrazí se po stisku tlačítek přehrát na pozadí nebo přehrát v okně na stránce s videem Ve frontě přehrávače na pozadí Ve frontě přehrávače v okně @@ -289,7 +289,7 @@ otevření ve vyskakovacím okně Do fronty na pozadí Do fronty v okně Začne hrát zde - Začne zde na pozadí + Začne zde, když na pozadí Začne zde v okně Donate NewPipe je vyvíjen dobrovolníky, kteří tráví svůj čas, aby vaše zkušenost s aplikací byla co nejlepší. Vraťte vývojářům něco zpět, aby mohli NewPipe dále zlepšovat a zároveň si vychutnat šálek kávy. @@ -305,7 +305,7 @@ otevření ve vyskakovacím okně Otevřít Drawer Zavřít Drawer - Nenalezen přehrávač streamu (pro přehrání můžete nainstalovat např. VLC) + Nenalezen přehrávač streamu (pro přehrání můžete nainstalovat např. VLC). Vždy Pouze jednou @@ -318,8 +318,8 @@ otevření ve vyskakovacím okně Nenalezeny žádné video streamy Nenalezeny žádné audio streamy - Export dokončen - Import dokončen + Exportováno + Importováno Žádný platný soubor ZIP Upozornění: Nelze importovat všechny soubory. Tímto se anuluje vaše aktuální nastavení. @@ -331,10 +331,10 @@ otevření ve vyskakovacím okně Získávám informace… Načítání požadovaného obsahu -Stáhnout soubor streamu. +Stáhnout soubor streamu Ukázat informace - Záložky + Uložené playlisty Přidat do @@ -356,9 +356,9 @@ otevření ve vyskakovacím okně Vždy se zeptat - Vytvořit nový playlist - Vymazat playlist - Přejmenovat playlist + Nový playlist + Vymazat + Přejmenovat Jméno Přidat do playlistu Nastavit jako náhled playlistu @@ -366,11 +366,11 @@ otevření ve vyskakovacím okně Založit playlist Smazat záložku - Přejete si smazat tento playlist? + Smazat tento playlist\? Playlist vytvořen - Přidáno do playlistu - Náhled playlistu změněn - Playlist nelze smazat + V playlistu + Náhled playlistu změněn. + Playlist nelze smazat. Žádné titulky @@ -397,22 +397,22 @@ otevření ve vyskakovacím okně Použít rychlé nepřesné hledání Nepřesné hledání umožní přehrávači posouvat se rychleji, ale se sníženou přesností Načítat náhledy - Zakažte, chcete-li zabránit načítání všech náhledů a tím šetřit data a využití paměti. Změnou tohoto nastavení dojde k vyčištění mezipaměti obrázků + Po vypnutí se nestahují náhledy a tím se šetří data a využití paměti. Změna tohoto nastavení vyčistí mezipamět obrázků. Mezipaměť obrázků vymazána Vymazat metadata v mezipaměti Odebrat všechna data uložená v mezipaměti Mezipaměť metadat vymazána Automatická fronta dalšího streamu - Automaticky připojí související stream při přehrávání posledního streamu v neopakující se frontě + Automaticky připojí související stream při přehrávání posledního streamu v neopakující se frontě. Soubor - Neplatný adresář - Neplatný zdroj souboru/obsahu - Soubor neexistuje nebo máte nedostatečné oprávnění k jeho čtení či zápisu + Neexistující složka + Neexistující zdroj souboru/obsahu + Soubor neexistuje nebo chybí oprávnění k jeho čtení či zápisu Název souboru nesmí být prázdný Došlo k chybě: %1$s - Import/Export + Import/export \n Importovat \n @@ -458,17 +458,17 @@ otevření ve vyskakovacím okně Výchozí chování při otevírání obsahu — %s Titulky - Upravuje velikost textu titulků a styly pozadí. Změny se projeví po restartu aplikace + Upravuje velikost textu titulků a styly pozadí. Změny se projeví po restartu aplikace. K přehrání tohoto souboru chybí vhodná aplikace Vymazat historii sledování Vymaže historii přehrávaných streamů - Vymazat celkovou historii sledování. + Vymazat celkovou historii sledování\? Historie sledování smazána. Vymazat historii vyhledávání Vymaže historii vyhledávaných klíčových slov - Vymazat celkovou historii vyhledávání. + Vymazat celkovou historii vyhledávání\? Historie vyhledávání smazána. Jedna položka smazána. @@ -495,9 +495,20 @@ otevření ve vyskakovacím okně Bez omezení Omezit rozlišení při použití mobilních dat Minimalizovat při přepínání aplikací - Akce při přepínání aplikací z hlavního přehrávače videa - %s + Akce při přepínání aplikací z hlavního přehrávače videa — %s Žádná Minimalizovat přehrávač na pozadí Minimalizovat přehrávač do vyskakovacího okna - - + Přestat odebírat + Nový panel + Zvolit panel + Ovládání hlasitosti gesty + Používat gesta pro ovládání hlasitosti přehrávače + Ovládání jasu gesty + Používat gesta pro kontrolu jasu přehrávače + Aktualizace + Soubor smazán + Notifikace aktualizace aplikace + Notifikace pro novou verzi NewPipe + Externí úložiště není k dispozici + \ No newline at end of file diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml new file mode 100644 index 000000000..bd1e27af9 --- /dev/null +++ b/app/src/main/res/values-da/strings.xml @@ -0,0 +1,394 @@ + +Tryk søg for at komme i gang + %1$s visninger + Udgivet den %1$s + Ingen streamafspiller blev fundet. Vil du installere VLC\? + Ingen streamafspiller blev fundet (du kan installere VLC for at afspille den). + Installer + Annuller + åben i browser + Åben i popup tilstand + Del + Download + Download stream fil + Søg + Indstillinger + Mente du: %1$s\? + Del med + Vælg browser + rotation + Benyt ekstern videoafspiller + Fjerner lyd ved nogle opløsninger + Brug ekstern lydafspiller + NewPipe popup tilstand + Abonner + Abonneret + Afmeld Abonnement + Abonnement afmeldt for kanal + Kunne ikke ændre abonnement + Kunne ikke opdatere abonnoment + Vis info + Forside + Abbonnomenter + Gemte Playlister + Ny Tab + Vælg Tab + Nyheder + Baggrund + Popup + Tilføj Til + Video download sti + Sti til gemme downloade videoer + Indtast download mappe for videoer + Lyd download mappe + Downloadede lydfiler bliver gemt her + Indtast download mappe for lydfiler + Afspil automatisk + Afspil en video ny NewPipe bliver åbnet fra en anden app + Standard opløsning + Stadard popup opløsning + Vis højere opløsninger + Ikke alle enheder understøtter afspilning af 2K/4K videoer + Afspil med Kodi + Kore appen kunne ikke findes. Installer den\? + Vis \"Afspil med Kodi\" valgmulighed + Vis en knap til at afspille en video via Kode Media Center + Lyd + Standard lydfilformat + Standard videofilformat + Tema + Lys + Mørk + Sort + Husk popup størrelse og position + Husk sidste størelse og position for popup afspiller + Brug hurtig og upræcis søgning + Upræcis søgning gør det hurtigere at søge i afspilningen, men med dårligere præcision + Indlæs billeder + Når slået fra indlæses billeder ikke, derved spares der på netværks og hukommelses forbrug. Ændringer sletter både cachen i ram og på disk. + Billed cache slettet + Slet cached metadata + Slet alt cached webside data + Metadata cache slettet + Tilføj automatisk næste stream til køen + Tilføj relaterede streams til køen automatisk når den sidste stream i køen afspilles. Gælder ikke hvis køen er gentagene. + Juster lydstyrke ved hjælp af fingerkontrol + Brug håndbevægelser til at kontrollere lydstyrke + Lysstyrke håndbævegesleskontorl + Burg håndbevægelser til at justere lysstyrke + Afspiller håndbevægelseskontol + Brug håndbevægelser til at justere lysstyrke og lydstyrke + Søg i foreslag + Vis foreslag når der søges + Søgehistorik + Gem søgninger lokalt + Historie & Cache + Hold styr på sete videoer + Forsæt når appen kommer i focus + Foresæt afspilning efter afbrydelse (fks. telefon opkald) + Download + Næste + Vis \'Næste\' og \'Lignende\' videoer + Vis \"Hold for at tiljøje\" tip + Vis et tip når baggrunds eller popup knappen trykkes + Dette URL er ikke understøttet + Standard land for indhold + Service + Standard sprog for indhold + Afspiller + Opførsel + Video & Lyd + Historie & Cache + Popup + "Udseende " + Andet + Debug + Opdateringer + Afspiller i baggrunden + Afspiller i popup tilstand +\n + Tilføjet til køen i baggrundsafspilleren + Tilføjet til afspilningskøen + Afspil + Inhold + Aldersbegrænset inhold + Vis aldersbegrænset video. Det er er muligt at tillade sådanne video under indstillinger. + LIVE + Downloads + Downloads + Fejlrapport + Alle + Kanal + Kanaler + Playliste + Playlister + + Videoer + + + Numre + Brugere + Ja + Senere + Slået fra + Filtrer + Genindlæs + Slet + Ændrer Størrelse + Bedste opløsning + Fortryd + Fil slettet + Afspil Alle + Altid + Kun én gang + Fil + NewPipe Notifikation +\n + Notifikationer for NewPipe backgrunds og popup afspillere +\n + App Opdaterings Notifikation + Notifikationer for nye NewPipe versioner +\n + [Ukendt] + Instill Retning + Skift til Bagrund + Skift til Popup + Skift til Forside + Importer database + Eksporter database + Overskriver din nuværende historie og abebonomenter + Eksporter historie, abebonomenter and playlister + Slet visningshistorik + Sletter historien af viste videoer + Slet hele visningshistorikken\? + Visningshistorikken blev slettet. + Slet søgehistorik + Sletter gemte søge ord + Slet hele søgehistorikken\? + Søgehistorik slettet. + Fejl + Ekstern lagring utilgængelig + Download til til eksternt SD kort er ikke muligt i øjeblikket. Genskab download mappe indstilinning\? + Netwærksfejl + Kunne indlæse alle billeder + Kunne ikke dekryptere video URL signatur + Kunne ikke indlæse webside + Kunne ikke indlæse hele websiden + Indhold utilgængeligt + Blokeret af GEMA + Kunne ikke oprette download menu + "Livestreams er ikke undestøttet endnu " + Kunne ikke hente nogen streams + Kunne ikke hente billede + App/Brugergrænseflade crashede + Kunne ikke afspille denne stream + "Uoprettelig fejl ved opstod ved afspilning " + Prøver at genoprette efter fejl ved afspilning + Eksterne afspillere undestøtter ikke disse typer af links + Ugyldig adresse + Ingen video streams blev fundet + Ingen lyd streams blev fundet + Kunne ikke finde mappe + Kunne ikke finde file/kilde + Filen eksister ikke eller også der er manglende rettigheder til at læse og skrive til den + Filavnet kan ikke være tomt + Der skete en fejl: %1$s + Ingen streams er tilgængelige til at downloade + Bruger standard tabs, fejl ved indlæsning af gemte tabs + Genskab standardindstillinger + Vil du genskabe standardindstillingerne\? + Undskyld, dette skulle ikke have været sket. + Rappoter dette via e-mail + Undskyld, der opstod nogle fejl. + RAPPORTER + Information: + Hvad skete der: + Din kommentar (på engelsk): + Detaljer: + Video billede + Video billede + Uploaders profilbillede + Synes godt om + Kan ikke lide + Brug TOR + (Eksperimentelt) Tving downloads til at bruge TOR (streaming er ikke understøttet endnu). + Rappoter en Fejl + Ingen resultater + Træk for at omarrangere + Kan ikke oprette download mappe \'%1$s\' + Oprettede download mappe \'%1$s\' + Video + Lyd + Prøv igen + Adgang til hulkomekse nægtet + Ingen abbonenter + Antal af abonnementer er ikke tilgængeligt + Ingen visninger + + %s visning + %s visninger + + Ingen Videoer + Start + Afspil + Opret + Slet + Slet én + Slet Alle + Checksum + Afvis + Omdøb + Ny mission + Ok + Filnavn + Tråde + Fejl + Server ikke understøttet + Filen eksisterer allerede + Forkert URL formatering eller manglende internet forbindelse + NewPiper Downloader + Tryk for detaljer + Vent venligst… + Kopieret til udklipsholderen + Vælg venligst en ledig download mappe + Denne tilladelse er nødvendig for at kunne åbne i popup tilstand + Et element slettet. + reCAPTCHA +\n + reCAPTCHA udfordring + reCAPTCHA udfordring anmodet + Download + Lovlige tegn i filnavne + Ugyldige tegn bliver erstattet med dette tegn + Erstatningskarakter + Bogstaver og tal + De fleste specialtegn + Der ingen app installeret der kan afspille denne fil + Om NewPipe + Indstillinger + Om + Tredjepartslicenser + © %1$s by %2$s under %3$s +\n + Kunne ikke indlæse licens + Åben webside + Om + Bidragsydere + Licenser + Libre letvægts streaming på Android. + Bidrag til projektet + Hvad enten du har idéer til, oversæting, design ændringer, kode refaktorering eller større kode ændringer, så er hjælp altid velkommen. Jo mere der bliver gjort jo bedre bliver det! + Se på Github + Doner + NewPipe er udviklet af frivillige der bruger tid på at give dig den bedste oplevelse. Giv noget tilbage til NewPipes udviklere så de kan gøre appen endnu bedre, mens de nyder en kop kaffe. + Giv noget tilbage + Webside + Besøg NewPipes webside for mere information og nyheder. + NewPipes Fortrolighedspolitik +\n + Læs fortrolighedspolitik + NewPipe\'s Licens + NewPipe er copyleft libre software: Du kan bruge, studere, dele og forbedre det som du vi.l Specifikt kan du redistribuere og/eller modificere det under betingelserne i GNU General Public License som udgivet af The Free Software Foundation, version 3 af licensen, eller (efter dit valg) en senere version. + Læs licens + Historie + Søgte + Sete + Historie er slået fra + Historie + Historien er tom + Historie slettet + Element slettet + Vil du slette dette element fra søgehistorikken\? + Vil du slette dette element fra visningshistorikken\? + Er du sikker på at vil slette alle elementer i historikken\? + Sidst Afspillet + Mest Spillede + Indhold af forsiden + Hvilke tabs vises på forsiden + Udvalg + Blank Side + Kiosk Side + Abonnement Side + Kanalside + Vælg en kanal + Ingen kanal abebonomenter endnu + Vælg en kiosk + Eksporteret + Importeret + Ikke en gyldig ZIP fil + Advarsel: Kunne ikke importere alle filer. + Dette vil overskrive dine nuværende indstillinger. + Vil du også importere indstillinger\? + Kiosk + Populært Lige Nu + Top 50 + Nyt & Populært + Baggrundsafspiller + Popup afspiller + Fjern + Detaljer + Lydindstillinger + Hold for at tilføje til kø + Tilføj til kø når baggrunds tilstand aktiveres + Start afspilning her + Noget vil dukke op her snart ;D + Foretrukket \'åben\' handling + Videoafspiller + baggrundsafspiller + Popup-afspiller + Spørg altid + Henter info… + Indlæser anmodet indhold + Ny Playliste + Slet + Omdøb + Navn + Tilføj Til Playliste + Slet denne playliste\? + Playliste oprettet + Ingen Undertekster + Tilpas + Udfyld + Zoom + Autogeneret + Undertekster + Eksporter til + Nulstil + Accepter + Afvis + Ingen begrænsning + Begeæns opløsning når der bruges mobil data + Opdateringer + Liste tilstand + Liste + Gitter + Automatisk + Tryk for at downloade + Færdig + i kø + Efterbehandling + + Handling afvist af systemet + Download fejlede + Download færdig + %s downloads færdige + Generer unikt navn + Overskriv + "En downloadet fil med dette navn eksisterer allerede " + Der er en download i gang med dette navn + Vis fejl + Kode + Filen kan ikke oprettes + Destinations mappen kan ikke oprettes + Adgang nægtet af systemet + Sikker forbindelse fejlede + Kan ikke finde serveren + Kan ikke forbinde til serveren + Serveren sender ikke data + Serveren accepterer ikke multitrådede downloads, prøv igen med @string/msg_threads = 1 +\n + Det anmodede interval er ikke gyldigt + Ikke fundet + Efterbehandling fejlede + Stop + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f5bbfb3e0..e233e017b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,4 +1,4 @@ - + %1$s Aufrufe Veröffentlicht am %1$s @@ -14,20 +14,20 @@ Teilen mit Browser auswählen Drehen des Geräts - Download-Verzeichnis für Videos + Downloadverzeichnis für Videos Verzeichnis für heruntergeladene Videos - Download-Verzeichnis für Videos angeben + Downloadverzeichnis für Videos angeben Standardauflösung Mit Kodi abspielen Kore App wurde nicht gefunden. Kore jetzt installieren? - Zeige \"Mit Kodi abspielen\" Option + Option \"Mit Kodi abspielen\" anzeigen Zeigt eine Option an, über die man Videos mit Kodi abspielen kann Audio Bevorzugtes Audioformat Herunterladen - Nächstes Video + Nächstes \'Nächste\' und \'ähnliche\' Videos anzeigen - URL wird nicht unterstützt + Nicht unterstützte URL Video & Audio Bevorzugte Sprache des Inhalts Video-Vorschaubild @@ -35,18 +35,18 @@ Nutzerbild Gefällt nicht Gefällt - Benutze externen Videoabspieler - Benutze externen Audioabspieler + Externen Video-Player verwenden + Externen Audio-Player verwenden Spiele im Hintergrund ab Abspielen Benutze Tor - (Experimentell) Erzwinge das Herunterladen durch Tor für verbesserte Privatsphäre (Videostream noch nicht unterstützt). + (Experimentell) Erzwinge das Herunterladen über Tor für verbesserte Privatsphäre (Videostream werden noch nicht unterstützt). Netzwerkfehler - Download-Verzeichnis für Audiodateien - Verzeichnis für heruntergeladene Audiodateien - Download-Verzeichnis für Audiodateien angeben + Downloadverzeichnis für Audiodateien + Heruntergeladene Audiodateien werden hier gespeichert + Downloadverzeichnis für Audiodateien angeben Design Dunkel @@ -54,8 +54,8 @@ Aussehen Andere - Kann Download-Verzeichnis nicht anlegen \'%1$s\' - Download-Verzeichnis \'%1$s\' erstellt + Kann Downloadverzeichnis \'%1$s\' nicht anlegen + Downloadverzeichnis \'%1$s\' erstellt Fehler Konnte nicht alle Vorschaubilder laden Konnte Video-URL-Signatur nicht entschlüsseln @@ -64,11 +64,11 @@ Durch die GEMA gesperrt Inhalt - Altersbeschränkte Inhalte anzeigen - Video ist altersbeschränkt. Schalte erst altersbeschränkte Videos in den Einstellungen ein. + Altersbeschränkte Inhalte + Altersbeschränktes Video anzeigen. Das Zulassen dieses Materials ist von den Einstellungen aus möglich. Konnte Download-Menü nicht einrichten - Dies ist ein LIVESTREAM. Diese werden noch nicht unterstützt. + Live-Streams werden noch nicht unterstützt Konnte Webseite nicht vollständig analysieren @@ -86,13 +86,13 @@ Entschuldigung. Dies hätte nicht passieren sollen. Entschuldigung. Es sind einige Fehler aufgetreten. Dein Kommentar (auf englisch): - Konnte keinen Stream holen + Konnte keinen Stream abrufen Autoplay Spiele ein Video ab, wenn NewPipe von einer anderen App aufgerufen wurde Einen Fehler melden Anwenderbericht - Live + LIVE „Suchen“ antippen, um zu beginnen Downloads @@ -113,14 +113,14 @@ Datei existiert bereits Bitte warten… In Zwischenablage kopiert - Bitte wähle ein verfügbares Download-Verzeichnis + Bitte wähle ein verfügbares Downloadverzeichnis Starten Pause Abspielen Neue Mission OK - Server nicht unterstützt + Nicht unterstützter Server Konnte Bild nicht laden App/UI abgestürzt Threads @@ -142,7 +142,7 @@ Deaktiviert - Benutze den alten Player + Alten Player benutzen Im Pop-up-Modus öffnen Bevorzugtes Videoformat Spiele im Pop-up Modus ab @@ -153,23 +153,23 @@ Alter eingebauter Mediaframework-Player Standardauflösung des Pop-ups - Zeige höhere Auflösungen an + Höhere Auflösungen anzeigen Nur manche Geräte unterstützen das Abspielen von 2K-/4K-Videos Hintergrund Pop-up Größe und Position des Pop-ups merken -Manche Auflösungen werden KEINE Tonspur haben, wenn diese Option eingeschaltet ist +Entfernt Tonspur bei manchen Auflösungen Letzte Größe und Position des Pop-ups merken Gestensteuerung Helligkeit und Lautstärke mittels Gesten einstellen - Durchsuche Vorschläge - Zeige Vorschläge beim Suchen + Suchvorschläge + Beim Suchen Vorschläge anzeigen Pop-up Filter Aktualisieren - Leeren + Löschen Größenänderung Beste Auflösung @@ -183,7 +183,7 @@ Lizenz konnte nicht geladen werden © %1$s von %2$s unter %3$s Über - Eine freie, schlanke Streaming-App für Android. + Freies und schlankes Streaming für Android. NewPipes Lizenz Ob Ideen, Übersetzungen, Design-Änderungen, Code-Aufräumung oder richtig große Code-Änderungen – Hilfe ist immer willkommen. Je mehr geholfen wird, desto besser wird NewPipe! Drittanbieter-Lizenzen @@ -197,13 +197,13 @@ Buchstaben und Zahlen Abonnieren Abonniert - Abo beenden + Abonnement beendet Abos Neuigkeiten Suchverlauf - Speichere den Suchverlauf lokal + Suchanfragen lokal speichern Verlauf & Cache Speichere den Wiedergabeverlauf Verlauf @@ -214,14 +214,14 @@ Der Verlauf ist leer Verlauf bereinigt -Fehler beim Ändern des Abos - Fehler beim Aktualisieren des Abos +Abonnement konnte nicht geändert werden + Abonnement konnte nicht aktualisiert werden Nach Unterbrechungen (z.B. Telefonaten) Wiedergabe fortsetzen NewPipe-Benachrichtigung - Benachrichtigungen für NewPipe-Hintergrund- und Pop-up Player + Benachrichtigungen für NewPipe-Hintergrund- und Pop-up Wiedergabe Hauptmenü Verhalten @@ -244,8 +244,8 @@ Keine Videos - %s Video - %s Videos + Video + Videos Die meisten Sonderzeichen @@ -258,9 +258,9 @@ Möchtest du dieses Element aus dem Suchverlauf löschen? Leere Seite Wähle einen Kanal aus - Noch kein Kanal abonniert + Noch keine Kanalabonnements vorhanden Trends - In der Warteschlange des Pop-up-Players + In der Warteschlange der Pop-up-Wiedergabe Alles abspielen Entfernen @@ -275,7 +275,7 @@ Details Top 50 Nicht behebbarer Wiedergabefehler aufgetreten - Player-Fehler gelöst + Wiederherstellen nach einem Wiedergabefehler Kiosk-Seite Kiosk auswählen @@ -285,7 +285,7 @@ In der Warteschlange der Hintergrundwiedergabe Neu & Heiß Halten, um zur Wiedergabeliste hinzuzufügen -\"Gedrückt halten, um Tipp hinzuzufügen\" anzeigen +\"Gedrückt halten, um hinzuzufügen\" Tipp anzeigen [Unbekannt] In Warteschlange für Hintergrundwiedergabe @@ -296,18 +296,18 @@ Spenden Zurückgeben Website - Besuche die NewPipe-Website für weitere Informationen und Neuigkeiten. + Besuche die NewPipe Website für weitere Informationen und Neuigkeiten. NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit dafür verwenden, dir die beste Nutzererfahrung zu bieten. Gib etwas zurück, um den Entwicklern zu helfen, NewPipe noch besser machen zu können, während sie sich an einer Tasse Kaffee erfreuen. Service - Keinen Streamplayer gefunden (du kannst VLC installieren, um den Stream abzuspielen) - Standard-Land des Inhalts + Keinen Streamplayer gefunden (du kannst VLC installieren, um den Stream abzuspielen). + Bevorzugtes Land des Inhalts Immer Nur einmal Ausrichtung umschalten In den Hintergrund wechseln - Zu Popup wechseln - Zum normalen Player wechseln + Zum Pop-up wechseln + Zur normalen Wiedergabe wechseln Externe Player unterstützen diese Art von Links nicht Ungültige URL @@ -326,15 +326,15 @@ Gewünschten Inhalt laden Datenbank importieren Datenbank exportieren - Wird deinen Verlauf und deine Abos überschreiben - Verlauf, Abos und Wiedergabelisten exportieren + Überschreibt deinen aktuellen Verlauf und deine Abonnements + Verlauf, Abonnements und Wiedergabelisten exportieren Keine gültige ZIP-Datei Warnung: Nicht alle Dateien konnten importiert werden. Dies wird deine aktuellen Einstellungen überschreiben. Info anzeigen - Lesezeichen + Lesezeichen für Wiedergabelisten Hinzufügen zu @@ -352,32 +352,32 @@ Immer fragen - Wiedergabeliste erstellen - Wiedergabeliste löschen - Wiedergabeliste umbenennen + Neue Wiedergabeliste + Löschen + Umbenennen Zur Wiedergabeliste hinzufügen - Als Symbolbild der Wiedergabeliste festlegen + Als Vorschaubild der Wiedergabeliste festlegen Lesezeichen entfernen Diese Wiedergabeliste löschen? Wiedergabeliste erstellt Zur Wiedergabeliste hinzugefügt - Vorschaubild der Wiedergabeliste geändert - Konnte Wiedergabeliste nicht löschen + Vorschaubild der Wiedergabeliste geändert. + Konnte Wiedergabeliste nicht löschen. Keine Untertitel Schriftgröße der Untertitel Abbrechen Normale Schriftgröße - Stream-Datei herunterladen. - Benutze schnelle, ungenaue Suche + Stream-Datei herunterladen + Schnelle, ungenaue Suche verwenden Mit ungenauem Suchen kann die Abspielposition schneller erreicht werden, aber auf Kosten der Genauigkeit Datei - Ungültiges Verzeichnis - "Datei existiert nicht, oder die Rechte zum Lesen oder Schreiben fehlen" + Verzeichnis existiert nicht + Die Datei existiert nicht oder die Rechte zum Lesen oder Schreiben fehlen Dateiname darf nicht leer sein Ein Fehler ist aufgetreten: %1$s @@ -399,14 +399,14 @@ \n \nMöchtest du fortfahren? Vorschaubilder laden - Bildercache gelöscht - Leere die gecachten Metadaten - Entferne alle gecachten Website-Daten + Bilder-Cache gelöscht + Zwischengespeicherte Metadaten löschen + Alle zwischengespeicherten Website-Daten entfernen Metadatencache gelöscht Debug - Ungültige Datei-/Inhaltsquelle - Export abgeschlossen - Import abgeschlossen + Datei-/Inhaltsquelle existiert nicht + Exportiert + Importiert Name Import/Export Import @@ -419,13 +419,13 @@ Verknüpfung aufheben (kann zu Verzerrungen führen) Nightcore Standard -Deaktiviere diese Option, um das Laden aller Miniaturansichten zu stoppen und Daten und Speicherverbrauch zu sparen. Wenn du dies änderst, wird sowohl der In-Memory- als auch der On-Disk-Image-Cache gelöscht +Abschalten, um das Laden von Miniaturansichten zu verhindern, was Daten- und Speicherverbrauch spart. Änderungen löschen den Bildzwischenspeicher sowohl im Arbeitsspeicher als auch auf der Festplatte. Nächsten Stream automatisch einreihen - Automatisches Anhängen eines verwandten Streams beim Abspielen des letzten Streams in einer nicht wiederholten Warteschlange + Automatisches Anhängen eines verwandten Streams beim Abspielen des letzten Streams in einer nicht wiederholten Warteschlange. Hier wird bald etwas stehen ;D - Lesezeichen Wiedergabeliste + Wiedergabeliste mit Lesezeichen versehen Anpassen Füllen Vergrößern @@ -435,55 +435,54 @@ Fehler außerhalb des Lebenszyklus melden Erzwingen der Meldung unzustellbarer Rx-Ausnahmen außerhalb des Lebenszyklus von Fragmenten oder Aktivitäten nach der Entsorgung - Importieren Sie YouTube-Abonnements, indem Sie die Exportdatei herunterladen: + Importiere YouTube-Abonnements, indem du die Exportdatei herunterlädst: \n -\n1. Gehen Sie zu dieser URL: %1$s -\n2. Melden Sie sich an, wenn Sie dazu aufgefordert werden. +\n1. Gehe zu dieser URL: %1$s +\n2. Melde dich an, falls du dazu aufgefordert wirst. \n3. Der Ladevorgang sollte beginnen (das ist die Exportdatei) - Importieren Sie ein SoundCloud-Profil, indem Sie entweder die URL oder Ihre ID eingeben: -\n -\n1. Aktivieren des \"Desktop-Modus\" in einem Web-Browser (die Seite ist für mobile Geräte nicht verfügbar) -\n2. Gehen Sie zu dieser URL: %1$s -\n3. Melden Sie sich an, wenn Sie gefragt werden -\n4. Kopieren Sie die Profil-URL, zu der Sie weitergeleitet wurden. + Importiere ein SoundCloud-Profil, indem du entweder die URL oder deine ID eingibst: +\n +\n1. Aktiviere den \"Desktop-Modus\" in einem Web-Browser (die Seite ist für mobile Geräte nicht verfügbar) +\n2. Gehe zu dieser URL: %1$s +\n3. Melden dich an, falls du dazu aufgefordert wirst +\n4. Kopiere die Profil-URL, zu der du weitergeleitet wurdest. yourID, soundcloud.com/yourid Keine Streams zum Download verfügbar - Bevorzugte \'öffnen\' Aktion + Bevorzugte \'Öffnen\' Aktion Standardaktion beim Öffnen von Inhalten - %s Untertitel - Ändere Textgröße und Hintergrundstil des Untertitels im Player. Wird erst nach Neustart des App wirksam + Textgröße und Hintergrund der Untertitel im Player anpassen. Wird erst nach Neustart der App wirksam. Keine App zum Abspielen dieser Datei installiert - Verlauf leeren + Wiedergabeverlauf löschen Löscht den Verlauf der abgespielten Streams - - Löscht den ganzen Verlauf. - Verlauf gelöscht. + Den ganzen Wiedergabeverlauf löschen\? + Wiedergabeverlauf gelöscht. Suchverlauf löschen - Lösche Verlauf der Suchschlüsselwörter - Lösche gesamten Suchverlauf. + Löscht den Verlauf der Suchbegriffe + Den gesamten Suchverlauf löschen\? Suchverlauf gelöscht. 1 Element gelöscht. - NewPipe ist freie Copyleft-Software: Du kannst es nach Belieben benutzen, studieren, mit anderen teilen und verbessern. Insbesondere kannst du sie unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder unter Version 3 der Lizenz oder (nach deiner Wahl) jeder späteren Version. + NewPipe ist freie Copyleft-Software: Du kannst sie nach Belieben benutzen, untersuchen, mit anderen teilen und verbessern. Insbesondere kannst du sie unter den von der Free Software Foundation veröffentlichten Bedingungen der GNU General Public License, in der Version 3 der Lizenz oder (nach deiner Wahl) jeder späteren Version, weitergeben und/oder verändern. Möchtest du auch Einstellungen importieren? NewPipe-Datenschutzbestimmungen Dem NewPipe-Projekt ist Datenschutz sehr wichtig. Deshalb sammelt diese App keine Daten ohne deine Zustimmung. \nNewPipes Datenschutzbestimmungen erklären im Detail, welche Daten beim Absenden eines Absturzberichtes verschickt und gespeichert werden. - Lies die Datenschutzbestimmungen + Datenschutzbestimmungen lesen Akzeptieren Ablehnen Um der europäischen Datenschutz-Grundverordnung (DSGVO) gerecht zu werden, weisen wir hiermit auf NewPipe\'s Datenschutzerklärung hin. Bitte lies sie sorgfältig durch. \nDu musst den Datenschutzrichtlinien zustimmen, um den Fehlerbericht an uns zu senden. Unbegrenzt Auflösung bei Verwendung mobiler Daten begrenzen - Minimieren beim Anwendungswechsel - Aktion beim Umschalten auf eine andere Anwendung vom Haupt-Videoplayer - %s + Minimieren beim Appwechsel + Aktion beim Umschalten auf eine andere App vom Haupt-Videoplayer - %s Keine Zum Hintergrund-Player minimieren Zum Popup-Player minimieren @@ -496,4 +495,68 @@ Wiedergabelisten Titel Nutzer - + Deabonnieren + Neuer Tab + Tab wählen + Gestensteuerung für Lautstärke + Die Lautstärke im Abspieler über Gesten steuern + Gestensteuerung für Helligkeit + Die Helligkeit im Abspieler über Gesten steuern + Aktualisierungen + Datei gelöscht + Aktualisierungsbenachrichtigung + Benachrichtigung bei neuer NewPipe-Version + Kein externer Speicher verfügbar + Herunterladen auf externe SD-Karte ist noch nicht möglich. Zielverzeichnis zurücksetzen\? + Fehler beim Lesen der gespeicherten Tabs – es werden die Voreinstellungen benutzt + Voreinstellungen wiederherstellen + Möchtest du die Voreinstellungen wiederherstellen\? + Abonnentenzahl nicht verfügbar + Welche Tabs auf der Hauptseite angezeigt werden + Auswahl + Aktualisierungen + Per Benachrichtigung zur Aktualisierung der App auffordern, wenn eine neue Version verfügbar ist + Art der Listenansicht + Liste + Gitter + Auto + Ansicht wechseln + NewPipe-Aktualisierung verfügbar! + Zum Herunterladen antippen + Fertig + In der Warteschlange + pausiert + eingereiht + Nachbearbeitung + Warteschlange + System verweigert den Zugriff + Herunterladen fehlgeschlagen + Herunterladen abgeschlossen + %s heruntergeladen + Eindeutigen Namen erzeugen + Überschreiben + Eine heruntergeladene Datei dieses Namens existiert bereits + Eine Datei dieses Namens wird gerade heruntergeladen + Fehler anzeigen + Code + Die Datei kann nicht erstellt werden + Der Zielordner kann nicht erstellt werden + System verweigert den Zugriff + Sichere Verbindung fehlgeschlagen + Der Server konnte nicht gefunden werden + Kann nicht mit dem Server verbinden + Der Server sendet keine Daten + Der Server erlaubt kein mehrfädiges Herunterladen – wiederhole mit @string/msg_threads = 1 + Angefragter Bereich nicht bedienbar + Nicht gefunden + Nachbearbeitung fehlgeschlagen + Um fertige Downloads bereinigen + Setze deine %s ausstehenden Übertragungen von Downloads fort + Anhalten + Maximale Wiederholungen + Maximalanzahl der Versuche, bevor der Download abgebrochen wird + Beim Umschalten auf mobile Daten pausieren + Downloads, die nicht pausiert werden können, werden wiederholt + Konferenzen + Ereignisse + \ No newline at end of file diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 74dfbe229..1106baf09 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1,4 +1,4 @@ - + %1$s προβολές Ανέβηκε στις %1$s @@ -10,7 +10,7 @@ Λήψη Αναζήτηση Ρυθμίσεις - "Μήπως εννοείτε: %1$s ?" + Μήπως εννοείτε: %1$s\? Κοινοποίηση με Επιλέξτε browser περιστροφή @@ -22,7 +22,7 @@ Εισάγετε διαδρομή για λήψη των βίντεο Διαδρομή λήψης αρχείων ήχου - Διαδρομή για αποθήκευση αρχείων ήχου + Αυτή είναι η διαδρομή για την αποθήκευση αρχείων ήχου Εισάγετε διαδρομή για λήψη αρχείων ήχου Προεπιλεγμένη ανάλυση @@ -39,8 +39,8 @@ Φωτεινό Λήψη - Επόμενο βίντεο - Εμφάνιση \"επόμενου\" και \"σχετικών\" βίντεο + Επόμενο + Εμφάνιση \"Επόμενου\" και \"Σχετικών\" βίντεο Δεν υποστηρίζεται η διεύθυνση URL Προεπιλεγμένη γλώσσα περιεχομένου Βίντεο & Ήχος @@ -102,16 +102,16 @@ Εμφάνιση πληροφοριών Πατήστε στην αναζήτηση για να ξεκινήσετε - Δε βρέθηκε πρόγραμμα αναπαραγωγής ροής δεδομένων (μπορείτε να εγκαταστήσετε το VLC για να κάνετε αναπαραγωγή) - Κατέβασμα του αρχείου ροής. - Κάποιες αναλύσεις ΔΕΝ θα περιλαμβάνουν ήχο όταν επιλεχθεί αυτή η επιλογή + Δε βρέθηκε πρόγραμμα αναπαραγωγής ροής δεδομένων (μπορείτε να εγκαταστήσετε το VLC για να κάνετε αναπαραγωγή). + Κατέβασμα του αρχείου ροής + Αφαίρεση του ήχου από κάποιες αναλύσεις NewPipe σε λειτουργία αναδυόμενου παραθύρου Έγινε διαγραφή από το κανάλι Αδύνατη η αλλαγή της εγγραφής Αδύνατη η ενημέρωση της εγγραφής Κύριο Εγγραφές - Σελιδοδείκτες + Αγαπημένες λίστες αναπαραγωγής Νέα @@ -129,13 +129,13 @@ Χρήση γρήγορης μη-ακριβούς αναζήτησης Η μη-ακριβής αναζήτηση επιτρέπει στην εφαρμογή να αναζητεί θέσεις στο βίντεο γρηγορότερα με μειωμένη ακρίβεια Φόρτωση thumbnails - Απενεργοποιήστε για να σταματήσετε τη φόρτωση των μικρογραφιών και να εξοικονομήσετε δεδομένα και χρήση μνήμης. Αλλάζοντας αυτή τη ρύθμιση θα εκκαθαρίσει τα προσωρινά αποθηκευμένα δεδομένα στη μνήμη και τον αποθηκευτικό χώρο + Αν η επιλογή είναι απενεργοποιημένη δεν φορτώνονται οι μικρογραφίες, χρησιμοποιώντας λιγότερα δεδομένα και μνήμη. Οι αλλαγές σβήνουν την προσωρινή μνήμη των εικόνων. Εκκαθαρίστηκε η προσωρινή μνήμη εικονών Εκκαθάριση προσωρινά αποθηκευμένων μεταδεδομένων Αφαίρεση όλων των προσωρινά αποθηκευμένων δεδομένων ιστοσελίδων Η προσωρινή μνήμη μεταδεδομένων εκκαθαρίστηκε Αυτόματη πρόσθεση της επόμενης ροής στην ουρά - Αυτόματη πρόσθεση μιας σχετικής ροής όταν αναπαράγεται η προηγούμενη ροή σε μια μη-επαναλαμβανόμενη ουρά + Αυτόματη πρόσθεση μιας σχετικής ροής όταν αναπαράγεται η προηγούμενη ροή σε μια μη-επαναλαμβανόμενη ουρά. Έλεγχος αναπαραγωγής με χειρονομίες Χρήση χειρονομιών για τον έλεγχο της φωτεινότητας και της έντασης ήχου της εφαρμογής Εμφάνιση υποδείξεων ενώ κάνετε αναζήτηση @@ -144,7 +144,7 @@ Κρατήστε ιστορικό των βίντεο που έχετε δει Συνέχεια όταν η εφαρμογή έρθει σε πρώτο πλάνο Συνέχιση της αναπαραγωγής έπειτα από διακοπές (π.χ.: κλήσεις) - Εμφάνιση της βοήθειας \"πιέστε παρατεταμένα για πρόσθεση\" + Εμφάνιση της βοήθειας \"Πιέστε παρατεταμένα για πρόσθεση\" Εμφάνιση της βοήθειας όταν έχει πατηθεί το κουμπί Παρασκηνίου ή Αναδυόμενου παραθύρου στη σελίδα λεπτομερειών του βίντεο Προεπιλεγμένη χώρα περιεχομένου Υπηρεσία @@ -157,9 +157,9 @@ Προστέθηκε στη λίστα αναπαραγωγής παρασκηνίου Προστέθηκε στη λίστα αναπαραγωγής αναδυόμενου παραθύρου Περιεχόμενο - Εμφάνιση περιεχομένου περιορισμένης πρόσβασης - Βίντεο περιορισμένης πρόσβασης. Για να επιτρέπετε περιερχόμενο τέτοιου είδους, ενεργοποιήστε το στις Ρυθμίσεις. - Ζωντανά + Περιεχόμενο περιορισμένης ηλικίας + Βίντεο περιορισμένης πρόσβασης. Για να επιτρέπετε περιερχόμενο τέτοιου είδους, ενεργοποιήστε το στις \"Ρυθμίσεις\". + ΖΩΝΤΑΝΑ Αναφορά σφαλμάτων Κανάλια Λίστα αναπαραγωγής @@ -193,11 +193,11 @@ Εξαγωγή ιστορικού, εγγραφών και λιστών αναπαραγωγής Εκκαθάριση ιστορικού προβολής Διαγράφει το ιστορικό των ροών που έχουν αναπαραχθεί - Διαγραφή ολόκληρου του ιστορικού προβολής. + Διαγραφή ολόκληρου του ιστορικού προβολής; Το στορικό προβολής διαγράφηκε. Διαγραφή ιστορικού αναζητήσεων Διαγράφει το ιστορικό αναζητήσεών σας - Διαγραφή ολόκληρου του ιστορικού αναζητήσεων. + Διαγραφή ολόκληρου του ιστορικού αναζητήσεων; Το ιστορικό αναζητήσεων διαγράφηκε. Δεν ήταν δυνατή η φόρτωση όλων των εικονιδίων Δεν ήταν δυνατή η αποκρυπτογράφηση της υπογραφής του URL του βίντεο @@ -206,7 +206,7 @@ Το περιεχόμενο δεν είναι διαθέσιμο "Έχει αποκλειστεί από την GEMA" Δεν ήταν δυνατή η ρύθμιση του μενού λήψεων - Αυτή είναι μια Ζωντανή Ροή, που δεν υποστηρίζεται ακόμα. + Η Ζωντανή Ροή δεν υποστηρίζεται ακόμα Δεν ήταν δυνατή η λήψη καμίας ροής Δεν ήταν δυνατή η φόρτωση της εικόνας Η εφαρμογή κράσαρε @@ -217,8 +217,8 @@ Μη έγκυρο URL Δε βρέθηκαν ροές βίντεο Δε βρέθηκαν ροές ήχου - Μη έγκυρη διεύθυνση - Μη έγκυρο αρχείο ή πηγή περιεχομένου + Δεν υπάρχει αυτός ο φάκελος + Δεν υπάρχει το αρχείο/πηγή περιεχομένου Το αρχείο δεν υπάρχει ή δεν έχουμε επαρκή εξουσιοδότηση για να διαβάσουμε ή να γράψουμε σε αυτό Το όνομα αρχείου δεν μπορεί να είναι κενό Προέκυψε ένα σφάλμα: %1$s @@ -230,7 +230,7 @@ What:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού: Αναφορά χρήστη Κανένα αποτέλεσμα - Τρεις κι ο κούκος + Δεν υπάρχει τίποτα εδώ Σύρετε για ταξινόμηση Προσπάθεια εκ νέου @@ -255,7 +255,7 @@ Κανένα βίντεο %s βίντεο - %s βίντεο + "%s βίντεο " Εκκίνηση @@ -263,7 +263,7 @@ Δημιουργία Διαγραφή ενός Διαγραφή όλων - Checksum + Άθροισμα ελέγχου Αγνόηση Μετονομασία @@ -282,7 +282,7 @@ \nτο άνοιγμα αναδυόμενων παραθύρων 1 αντικείμενο διαγράφηκε. - reCAPTCHA + Αυτόματο τεστ Πρόκληση reCAPTCHA Ζητήθηκε πρόκληση reCAPTCHA @@ -353,11 +353,11 @@ Λεπτομέρειες Ρυθμίσεις ήχου Πιέστε παρατεταμένα για να προστεθεί στην ουρά - Προσθήκη στην ουρά Παρασκηνίου - Προσθήκη στην ουρά Αναδυόμενου παραθύρου + Προσθήκη στην ουρά όταν είναι στο παρασκήνιο + Προσθήκη στην ουρά νέου Αναδυόμενου παραθύρου Εκκίνηση Αναπαραγωγής εδώ - Εκκίνηση εδώ στο Παρασκήνιο - Εκκίνηση εδώ στο Αναδυόμενο Παράθυρο + Εκκίνηση εδώ όταν είναι στο Παρασκήνιο + Εκκίνηση εδώ όταν είναι στο Αναδυόμενο Παράθυρο Άνοιγμα Συρταριού Κλείσιμο Συρταριού @@ -377,9 +377,9 @@ Γίνεται λήψη πληροφοριών… Γίνεται φόρτωση του ζητούμενου περιεχομένου - Δημιουργία νέας Λίστας Αναπαραγωγής - Διαγραφή Λίστας - Μετονομασία Λίστας + Νέα Λίστα Αναπαραγωγής + Διαγραφή + Μετονομασία Όνομα Προσθήκη στη Λίστα Ορισμός ως μικρογραφία λίστας αναπαραγωγής @@ -387,11 +387,11 @@ Προσθήκη Σελιδοδείκτη στη Λίστα Διαγραφή Σελιδοδείκτη - Επιθυμείτε να διαγράψετε αυτή τη λίστα αναπαραγωγής; + Διαγραφή αυτής της λίστας αναπαραγωγής; Η λίστα αναπαραγωγής δημιουργήθηκε - Προστέθηκε στη λίστα - Η μικρογραφία της λίστας αναπαραγωγής άλλαξε - Δεν ήταν δυνατή η διαγραφή της λίστας + Προστέθηκε στη λίστα αναπαραγωγής + Η μικρογραφία της λίστας αναπαραγωγής άλλαξε. + Δεν ήταν δυνατή η διαγραφή της λίστας. Δεν υπάρχουν υπότιτλοι @@ -402,12 +402,12 @@ Αυτόματοι Υπότιτλοι - Τροποποίηση του μεγέθους και του φόντου των υπότιτλων. Απαιτεί επανεκκίνηση της εφαρμογής + Τροποποίηση του μεγέθους και του φόντου των υπότιτλων. Απαιτεί επανεκκίνηση της εφαρμογής. Ενεργοποίηση του LeakCanary Η παρακολούθηση των διαρροών μνήμης μπορεί να προκαλέσει την διακοπή της εφαρμογής - + Υποχρεωτική αναφορά μη παραδοτέων Rx εξαιρέσεων έξω από το κομμάτι ή τον κύκλο δραστηριότητας μετά από απόρριψη Εισαγωγή/Εξαγωγή Εισαγωγή @@ -464,4 +464,4 @@ Ελαχιστοποίηση στο παρασκήνιο Ελαχιστοποίηση σε αναδυόμενο παράθυρο - + \ 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 3ad9c6874..60257c508 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,4 +1,4 @@ - + %1$s de visualizaciones Publicado el %1$s @@ -25,7 +25,7 @@ Audio Formato de audio por defecto Descargar - Siguiente vídeo + Siguiente URL no soportada Usar reproductor de vídeo externo Usar reproductor de audio externo @@ -43,13 +43,13 @@ No se puede crear la carpeta de descarga \'%1$s\' Carpeta de descarga creada \'%1$s\' - Ruta para almacenar los audios descargados + Los audios descargados se almacenan aquí Introducir ruta de descarga para archivos de audio Bloqueado por GEMA - Ruta de descarga de audio - Vídeo y Audio + Carpeta de descarga de audio + Vídeo y audio Reproducir Error Error de conexión @@ -63,17 +63,17 @@ Me gusta No me gusta Miniatura del avatar del usuario - Esta es una transmisión en vivo, la cual aún no es compatible. + Las transmisiones en vivo aún no están soportadas Contenido - Mostrar contenido restringido por edad - Vídeo restringido por edad. Permitir este tipo de material es posible desde Ajustes. + Contenido restringido por edad + Mostrar vídeo restringido por edad. Permitir este tipo de material es posible desde \"Ajustes\". Toque en buscar para empezar - Autoreproducir + Reproducción automática Reproducir un vídeo cuando NewPipe es llamado desde otra app - en vivo + EN DIRECTO Descargas Descargas Reportar error @@ -110,7 +110,7 @@ OK Nombre del archivo - Hilo + Hilos Error Servidor no soportado El archivo ya existe @@ -141,14 +141,12 @@ Este permiso es necesario para abrir en modo popup - reCAPTCHA Challenge - reCAPTCHA Challenge requerido + Reto reCAPTCHA + Reto reCAPTCHA requerido Modo popup de NewPipe Reproduciendo en modo popup - Usar reproductor antiguo - Versión antigua en reproductor Media Framework Formato de vídeo por defecto Desactivado @@ -168,7 +166,7 @@ abrir en modo popup Popup Redimensionando - Algunas resoluciones podrían NO tener audio cuando esta opción está activada + Elimina el audio en algunas resoluciones Controles de gestos del reproductor Usar gestos para controlar el brillo y volumen del reproductor Sugerencias de búsqueda @@ -195,8 +193,8 @@ abrir en modo popup Suscribirse Suscrito Canal no suscrito - No se puede cambiar la suscripción - No se puede actualizar la suscripción + No se pudo cambiar la suscripción + No se pudo actualizar la suscripción Principal Suscripciones @@ -231,7 +229,7 @@ abrir en modo popup Reproductor Funcionamiento - Historial y Caché + Historial y caché Lista de reproducción Deshacer @@ -265,7 +263,7 @@ abrir en modo popup Página de feed Página del canal Seleccione un canal - No hay canal suscrito todavía + No hay canales suscritos todavía Seleccione un kiosco Kiosco @@ -280,7 +278,7 @@ abrir en modo popup Se produjo un error irrecuperable del reproductor Recuperándose del error del reproductor - Reproductor de fondo + Reproductor en segundo plano Reproductor popup Quitar Detalles @@ -309,7 +307,7 @@ abrir en modo popup Servicio Abrir cajón Cerrar cajón - No se ha encontrado ningún reproductor de vídeo (puede instalar VLC para reproducirlo) + No se ha encontrado ningún reproductor de vídeo (puede instalar VLC para reproducirlo). Siempre Sólo una vez @@ -329,16 +327,16 @@ abrir en modo popup Exportar base de datos Reemplazará su historial actual y sus suscripciones Exportar historial, suscripciones y listas de reproducción - Exportación completa - Importación completa + Exportado + Importado Archivo ZIP no válido ADVERTENCIA: no se pudieron importar todos los archivos. Esto reemplazará su configuración actual. - Descargar archivo stream. + Descargar archivo stream Mostrar info - Marcadores + "Listas de reproducción en marcadores " Añadir a @@ -357,25 +355,21 @@ abrir en modo popup Preguntar siempre - Crear nueva lista de reproducción - Eliminar lista de reproducción - Renombrar lista de reproducción + Nueva lista de reproducción + Eliminar + Renombrar Nombre Añadir a la lista de reproducción Definir como miniatura de lista de reproducción Marcar lista de reproducción - Remover marcador + Eliminar marcador - ¿Desea eliminar esta lista de reproducción? + ¿Borrar esta lista de reproducción\? Lista de reproducción creada Añadido a la lista de reproducción - Miniatura de lista de reproducción cambiada - No se pudo eliminar la lista de reproducción - - Fuente más pequeña - Fuente normal - Fuente más grande + Miniatura de lista de reproducción cambiada. + No se pudo eliminar la lista de reproducción. Algo aparecerá aquí pronto ;D @@ -386,10 +380,6 @@ abrir en modo popup Rellenar Zoom - Tamaño de fuente de subtítulos - Monitoreo de fugas - Monitorización de fugas de memoria activada, la app puede dejar de responder cuando hay volcado de almacenamiento - Monitorización de fugas de memoria desactivada Depuración Auto generados Activar LeakCanary @@ -401,18 +391,18 @@ abrir en modo popup Usar búsqueda rápida inexacta La búsqueda inexacta permite al reproductor buscar posiciones más rápido con menor precisión Auto-encolar la siguiente transmisión - Auto-añadir un vídeo relacionado al reproducir el último vídeo en una cola no repetitiva + Auto-añadir un vídeo relacionado al reproducir el último vídeo en una cola no repetitiva. DIRECTO SINCRONIZAR Archivo - Directorio invalido - Fuente del archivo/contenido inválida - El archivo no existe o el permiso es insuficiente para leerlo o escribir en él + No existe el directorio + No existe la fuente del archivo/contenido + El archivo no existe o insuficientes permisos para leerlo o escribir en él El nombre del archivo no puede estar vacío Ocurrió un error: %1$s - Importar/Exportar + Importar/exportar Importar Importar desde Exportar a @@ -443,7 +433,7 @@ abrir en modo popup \n \n¿Desea continuar? Cargar Miniaturas - Descativar todas las miniaturas para evitar que se carguen, guarden datos y usen memoria. Al cambiar esto se borrarán tanto la caché de imágenes en la memoria como en el disco + Cuando está desactivado no se cargan miniaturas, economizando el uso de datos y memoria. Los cambios borrarán tanto la caché de imágenes en la memoria como en el disco. Caché de imagen limpiado Metadatos eliminados del caché Eliminar todos los datos de la página web en caché @@ -452,8 +442,6 @@ abrir en modo popup Tiempo Tono Desenganchar (puede causar distorsión) - Nightcore (tipo de música) - Reproducción por defecto No hay streams disponibles para descargar Acción \'abrir\' preferida @@ -462,19 +450,19 @@ abrir en modo popup No hay ninguna app instalada para reproducir este archivo Subtítulos - Modificar la escala de texto de los subtítulos y los estilos de fondo del reproductor. Requiere el reinicio de la app para que surta efecto + Modificar la escala de texto de los subtítulos y los estilos de fondo del reproductor. Requiere el reinicio de la app para que surta efecto. Borrar historial de reproducciones Elimina el historial de las transmisiones reproducidas - Elimina todo el historial de reproducciones. + ¿Eliminar todo el historial de reproducciones\? Historial de reproducciones eliminado. Borrar historial de búsqueda Elimina el historial de palabras clave de búsqueda - Elimina todo el historial de búsqueda. + ¿Eliminar todo el historial de búsqueda\? Historial de búsquedas eliminado. 1 elemento eliminado. - NewPipe es un software copyleft libre: puedes usarlo, estudiarlo, compartirlo y mejorarlo a tu antojo. Específicamente, puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o (a tu elección) cualquier versión posterior. + NewPipe es software libre copyleft: puedes usarlo, estudiarlo, compartirlo y mejorarlo a tu antojo. Específicamente, puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o (a tu elección) cualquier versión posterior. ¿Desea importar también los ajustes? Política de Privacidad de NewPipe @@ -487,7 +475,7 @@ abrir en modo popup Sin límite Limitar resolución cuando se use Datos Móviles Mimimizar al cambiar de aplicación - Acción de cambiar a otra aplicación desde el reproductor principal + Acción de cambiar a otra aplicación desde el reproductor principal — %s Ninguna Minimizar al reproductor de fondo Minimizar el reproductor emergente @@ -500,7 +488,6 @@ abrir en modo popup Usuarios Listas de reproducción Pistas - Finalizadas En cola @@ -551,4 +538,4 @@ abrir en modo popup No encontrado Fallo el post-procesado - + diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index aef139cfa..bf5cee76b 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -3,33 +3,33 @@ %1$s vaatamist Avaldatud %1$s Voogesituseks puudub pleier. Kas paigaldada VLC? - Voogesituseks puudub pleier. (Selleks võib paigaldada VLC) + Voogesituseks puudub pleier (selleks võib paigaldada VLC). Paigalda Tühista Ava veebilehitsejas Ava hüpikaknas Jaga Allalaadimine - Laadi voog alla. + Laadi voog alla Otsi Seaded - Kas mõtlesid: %1$s ? + Kas mõtlesid: %1$s\? Jaga Vali veebilehitseja pööramine Kasuta välist videopleierit - Kui see valik lubada, puudub osadel lahutustel heli + Eemaldab audio SOME lahutustel Kasuta välist audiopleierit NewPipe hüpikaknarežiim Telli Tellitud Kanali tellimus tühistatud - Tellimuse muutmine nurjus - Tellimuse uuendamine nurjus + Tellimust ei saanud muuta + Tellimust ei õnnestunud uuendada Kuva info Tellimused - Järjehoidjad + Esitusloendid järjehoidjates Mis on uut @@ -42,7 +42,7 @@ Sisesta videote allalaadimise rada Audio allalaadimise kaust - Kaust allalaetud audio hoiustamiseks + Siia salvestatakse alla laaditud audio Sisesta audio allalaadimise rada Automaatesitus @@ -67,13 +67,13 @@ Kasuta ebatäpset kerimist Ebatäpne kerimine lubab pleieril otsida asukohta kiiremini täpsuse arvel Laadi pisipildid - Keela, peatamaks pisipiltide laadimine ja vähenda andme- ja mälukasutust. Selle muutmine puhastab nii sisemälu kui piltide vahemälu andmekandjal + Välujalülitatult ei toimu pisipiltide laadimist, salvestamist ja puhverdamist. Muutmine puhastab vahemälu nii kettal kui ka mälus. Pildid kustutati vahemälust Kustuta metaandmed vahemälust Kustuta veebilehtede andmed vahemälust Metaandmed kustutati vahemälust Järgmine voog automaatselt järjekorda - Lisa seotud voog automaatselt, kui esitusel on viimane voog mittekorduvast järjekorrast + Lisa seotud voog automaatselt, kui esitusel on viimane voog mittekorduvast järjekorrast. Pleieri juhtimise viiped Luba viiped helitugevuse ja ereduse juhtimiseks Kuva soovitused @@ -85,17 +85,17 @@ Jätka taasesitust fookuse saamisel Jätka taasesitust pärast katkestamist (nt. telefonikõne) Laadi alla - Järgmine video + Järgmine Kuva \'järgmine\' ja \'sarnased\' videod Kuva vihjet \"lisamiseks hoia\" Kuva vihje, kui videoandmete lehel vajutatakse tausta või hüpikakna nupule - URL pole toetatud + Mitte toetatud URL Sisu vaikimisi riik Teenus Sisu vaikimisi keel Pleier Käitumine - Heli ja pilt + Pilt ja heli Ajalugu ja vahemälu Hüpikaken Välimus @@ -107,9 +107,9 @@ Lisati hüpikpleieri järjekorda Esita Sisu - Kuva vanusepiiranguga sisu - Vanusepiiranguga sisu. Selle saab lubada seadetes. - Otse + Vanusepiiranguga sisu + Kuva vanusepiiranguga sisu. Sellise materjali saab lubada \"seadetes\". + OTSE Allalaadimised Allalaadimised Vea teatamine @@ -144,11 +144,11 @@ Ekspordi ajalugu, tellimused ja pleilistid Puhasta vaatamiste ajalugu Kustutab vaadatud voogude ajaloo - Kustuta kogu vaatamiste ajalugu. + Kas kustutada kogu vaatamiste ajalugu\? Vaatamiste ajalugu kustutati. Kustuta otsinguajalugu Kustutab otsisõnade ajaloo - Kustuta kogu otsinguajalugu. + Kas kustutada kogu otsinguajalugu\? Otsinguajalugu kustutati. Viga Võrgu viga @@ -159,7 +159,7 @@ Sisu pole saadaval GEMA poolt blokeeritud Allalaadimismenüü seadistamine nurjus - See on OTSEVOOG, mis pole veel toetatud. + Otsevood ei ole veel toetatud Ühtegi voogu ei leitud Pildi laadimine nurjus Rakendus jooksis kokku @@ -170,9 +170,9 @@ Kehtetu URL Videovooge ei leitud Helivooge ei leitud - Kehtetu kataloog - Kehtetu faili/sisu allikas - Fail puudub või puuduvad õigused seda lugeda või kirjutada + Kataloogi pole + Faili/sisu allikat pole + Puudub fail või puuduvad õigused seda faili lugeda või kirjutada Tühi failinimi pole lubatud Ilmnes viga: %1$s Allalaaditavaid videovooge pole @@ -314,10 +314,10 @@ Voo leht Kanali leht Vali kanal - Ühtki kanalit pole veel tellitud + Kanaleid pole veel tellitud Vali kiosk - Eksport tehtud - Import tehtud + Eksporditud + Imporditud Korralikku ZIP faili pole Hoiatus: Kõiki faile ei õnnestunud importida. See alistab praeguse seadistuse. @@ -334,10 +334,10 @@ Heli seaded Hoia järjekorda lisamiseks Lisa järjekorda taustal - Lisa järjekorda hüpikaknaga + Lisa järjekorda uue hüpikaknaga Alusta taasesitust siit - Alusta siit taustal - Alusta siit hüpikaknaga + Alusta siit olles taustal + Alusta siit uue hüpikaknaga Ava sahtel Sulge sahtel @@ -355,9 +355,9 @@ Info hankimine… Soovitud sisu laadimine - Loo uus pleilist - Kustuta pleilist - Nimeta pleilist ümber + Uus pleilist + Kustuta + Nimeta ümber Nimi Lisa pleilisti Määra pleilisti pisipildiks @@ -368,8 +368,8 @@ Kas kustutada see pleilist? Pleilist loodud Lisati pleilisti - Pleilisti pisipilt muudetud - Pleilisti kustutamine nurjus + Pleilisti pisipilt muudetud. + Pleilisti kustutamine nurjus. Subtiitriteta @@ -380,7 +380,7 @@ Automaatselt loodud Subtiitrid - Kohanda pleieri subtiitrite teksti suurust ja tausta. Jõustamiseks tuleb rakendus taaskäivitada + Kohanda pleieri subtiitrite teksti suurust ja tausta. Jõustamiseks tuleb rakendus taaskäivitada. Mälulekke seire võib põhjustada rakenduse hangumise @@ -424,7 +424,7 @@ Lülitu peamisele reCAPTCHA nõue - Nõutav on reCAPTCHA + reCAPTCHA nõude taotlus © %1$s %2$s %3$s alla Vaba kergekaaluline Androidi voogesitus. @@ -458,4 +458,6 @@ Esita taustal Minimeeri hüpikpleierisse - +Jõusta väljaspool fragmenti või elutsüklit olevate kättetoimetamatute Rx erindite raporteerimine nende vabastamise järgselt + + diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 72206774a..f6c723bd4 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -1,4 +1,4 @@ - + %1$s ikustaldi Argitaratze-data: %1$s @@ -23,7 +23,7 @@ Audioa Audio formatu lehenetsia Deskargatu - Hurrengo bideoa + Hurrengoa Erakutsi \'hurrengo\' eta \'antzeko\' bideoak URLak ez du euskarririk Edukiaren hizkuntz lehenetsia @@ -43,10 +43,10 @@ Erabili kanpo audio-erreproduzigailua Atzeko planoan erreproduzitzen Ukitu bilaketa hasteko - Audioa deskargatzeko kokapena + Audioa deskargatzeko karpeta Zehaztu audioa deskargatzeko bide-izena - Deskargatutako audioa gordetzeko bide-izena + Deskargatutako audioa hemen gordetzen da Erreprodukzio automatikoa Bideoa abiatzen du NewPipe beste aplikazio batek deitu badu Iluna @@ -54,7 +54,7 @@ Itxura Ireki laster-leiho moduan - Bereizmen batzuetan ez da audiorik izango aukera hau gaituz gero + Audioa kentzen du bereizmen batzuetan NewPipe laster-leiho modua Bigarren planoa Laster-leihoa @@ -76,9 +76,9 @@ Besteak Laster-leiho moduan erreproduzitzen Edukia - Erakutsi adinez mugatutako edukia - Bideoa adinez mugatuta dago. Ezarpenetan gaitu daiteke eduki mota hau. - zuzenean + Adinez mugatutako edukia + Erakutsi adinez mugatutako bideoa. Ezarpenetan gaitu daiteke eduki mota hau. + ZUZENEAN Deskargak Deskargak Errore-txostena @@ -102,7 +102,7 @@ Edukia ez dago eskuragarri GEMAk blokeatuta Ezin izan da deskargen menua ezarri - Hau ZUZENEKO JARIO bat da. Ez dago hauentzako euskarririk oraindik. + Zuzeneko jarioek ez dute euskarririk oraindik Ezin izan da jariorik eskuratu Ezin izan da irudia kargatu Aplikazioa/interfazea kraskatu da @@ -207,7 +207,7 @@ NewPipe jakinarazpena Erreproduzigailua Portaera - Historiala eta cache-a + Historia eta cache-a Erreprodukzio-zerrenda Desegin @@ -230,14 +230,14 @@ Bideorik ez - bideo %s - %s bideo + Bideoa + Bideoak Historiala Bilatuta Ikusita - Historiala desgaituta dago + Historia desgaituta dago Historiala Historiala hutsik dago Historiala garbitu da @@ -296,7 +296,7 @@ "Ireki tiradera " Itxi tiradera - Ez da jarioen erreproduzigailurik aurkitu (VLC instalatu dezakezu) + Ez da jarioen erreproduzigailurik aurkitu (VLC instalatu dezakezu). Beti Behin besterik ez @@ -312,10 +312,10 @@ Informazioa eskuratzen… Kargatzen eskatutako edukia -Deskargatu jario fitxategia. +Deskargatu jario fitxategia Erakutsi informazioa - Gogokoak + Gogoko erreprodukzio-zerrendak Gehitu hona @@ -326,26 +326,25 @@ Kendu cache-ko wegbuneen datu guztiak Metadatuen cache-a ezabatuta Gehitu ilarara hurrengo jarioa - Gehitu erlazionatutako jario bat azken jarioa jo bitartean errepikapenik gabeko ilara batean + Gehitu erlazionatutako jario bat azken jarioa jo bitartean errepikapenik gabeko ilara batean. Arazketa Fitxategia Inportatu datu-basea Esportatu datu-basea - Zure uneko historiala eta harpidetzak gainidatziko ditu + Zure uneko historiala eta harpidetzak gainidazten ditu Esportatu historiala, harpidetzak eta erreprodukzio-zerrendak Garbitu ikusitakoaren historiala Jotako jarioen historiala ezabatzen du - Ezabatu ikusitakoaren historial osoa. + Ezabatu ikusitakoaren historia osoa\? Ikusitakoaren historiala ezabatuta. Garbitu bilaketa historiala Ezabatu bilaketa gakoen historiala - Ezabatu bilaketen historial osoa. - + Ezabatu bilaketen historia osoa\? Bilaketen historiala ezabatuta. - Direktorio baliogabea + Karpeta baliogabea Fitxategi edo edukiaren iturri baliogabea - Fitxategia ez dago edo ez dago baimen nahiko berau irakurri edo idazteko + Fitxategia ez dago edo ez dago baimenik irakurri edo idazteko Fitxategi izena ezin da hutsik egon Errore bat gertatu da: %1$s Ez dago jariorik deskargatzeko eskuragarri @@ -367,8 +366,8 @@ Jotako azkena Ikusiena - Esportazioa burututa - Inportazioa burututa + Esportatuta + Inportatuta Ez da baliozko ZIP fitxategia Ebisua: Ezin izan dira fitxategi guztiak inportatu. Honek oraingo ezarpenak gainidatziko ditu. @@ -381,9 +380,9 @@ Galdetu beti - Sortu erreprodukzio-zerrenda berria - Ezabatu erreprodukzio-zerrenda - Aldatu izena erreprodukzio-zerrendari + Erreprodukzio-zerrenda berria + Ezabatu + Aldatu izena Izena Gehitu erreprodukzio-zerrendara Ezarri erreprodukzio-zerrendaren iruditxo gisa @@ -391,11 +390,11 @@ Gogoko erreprodukzio-zerrenda Kendu gogokoa - Erreprodukzio zerrenda hau ezabatu nahi duzu? + Erreprodukzio zerrenda hau ezabatu\? Erreprodukzio-zerrenda sortuta - Erreprodukzio-zerrendara gehituta - Erreprodukzio zerrendaren iruditxoa aldatuta - Ezin izan da erreprodukzio-zerrenda ezabatu + Erreprodukzio-zerrendatua + Erreprodukzio zerrendaren iruditxoa aldatuta. + Ezin izan da erreprodukzio-zerrenda ezabatu. Azpititulurik ez @@ -406,13 +405,13 @@ Automatikoki sortuak Azpitituluak - Aldatu azpitituluen testuaren eskala eta atzealdeko estiloa. Aplikazioa berrabiarazi behar da aldaketak aplikatzeko + Aldatu azpitituluen testuaren eskala eta atzealdeko estiloa. Aplikazioa berrabiarazi behar da aldaketak aplikatzeko. Gaitu LeakCanary Memoria galeren monitorizazioa. Aplikazioak agian ez du erantzungo memoriaren aitortza egin bitartean Eman bizitza-ziklo kanpoko erroreen berri - Inportatu/Esportatu + Inportatu/esportatu Inportatu Inportatu hemendik Esportatu hona @@ -452,8 +451,8 @@ Ezarpenak ere inportatu nahi dituzu? Bilaketa ez zehatzak posizioak azkarrago baina prezisio gutxiagoz bilatzea ahalbidetzen du - "Desgaitu iruditxoak kargatzea gelditzeko eta datuak eta memoria aurrezteko. Hau aldatzean memoria eta diskoko irudien cache-ak garbituko dira" - NewPipe Software Librea eta Copyleft da: Nahi eran erabili, ikertu, partekatu eta hobetu dezakezu. Zehazki, elkarbanatzea eta aldatzea Free Software Foundation-ek argitaratutako GNU General Public License-ren 3. bertsioa edo berriagoren baten terminoen arabera egiteko baimena duzu. + Desgaitu koadro txikiak ez kargatzeko, datuak eta memoria aurreztuz. Aldaketak memoria eta diskoko irudien cache-ak garbituko ditu. + NewPipe Software Librea eta Copyleft da: Erabili, ikertu, partekatu eta hobetu dezakezu. Zehazki, elkarbanatzea eta aldatzea Free Software Foundation-ek argitaratutako GNU General Public License-ren 3. bertsioa edo berriagoren baten terminoen arabera egiteko baimena duzu. Behartu aktibitatearen bizitza ziklotik kanpo baztertu eta gero entregatu ezin diren Rx salbuespenen inguruko txostena NewPipe pribatutasun politika @@ -471,8 +470,8 @@ Urratsa Leheneratu - Minimizatu aplikazioa aldatzean - Ekintza bideo erreproduzigailu nagusitik beste aplikazio batera aldatzean — %s + Minimizatu app-a aldatzean + Ekintza bideo erreproduzigailu nagusitik beste app batera aldatzean — %s Bat ere ez Minimizatu bigarren planoko erreproduzigailura Minimizatu laster-liho erreproduzigailura @@ -481,4 +480,68 @@ Erreprodukzio-zerrendak Pistak Erabiltzaileak - + Kendu harpidetza + Fitxa berria + Hautatu fitxa + Keinuen bidezko bolumenaren kontrola + Erabili keinuak erreproduzigailuaren bolumena kontrolatzeko + Keinuen bidezko distiraren kontrola + Erabili keinuak erreproduzigailuaren distira kontrolatzeko + Eguneraketak + Gertaerak + Fitxategia ezabatu da + Aplikazioaren eguneraketaren jakinarazpena + NewPipe aplikazioaren bertsio berrien jakinarazpena + Kanpo biltegiratzea ez dago eskuragarri + Oraindik ezin da SD txartel batera deskargatu. Deskargen karpeta berrezarri\? + Lehenetsitako fitxak erabiltzen, errorea gordetako fitxak irakurtzean + Berrezarri lehenetsitakoak + Lehenetsitakoak berrezarri nahi dituzu\? + Harpidedunen kontua ez dago eskuragarri + Orri nagusian ikusiko diren fitxak + Hautaketa + Konferentziak + Eguneraketak + Erakutsi jakinarazpena aplikazioa eguneratzea eskatuz bertsio berria eskuragarri dagoenean + Zerrenda ikuspegi modua + Zerrenda + Sareta + Automatikoa + Aldatu ikuspegia + NewPipe eguneraketa eskuragarri! + Sakatu deskargatzeko + Amaituta + Ilaran + pausatuta + ilaran + post-prozesua + Gehitu ilarara + Ekintza sistemak ukatu du + Deskargak huts egin du + Deskarga amaitu da + %s deskarga amaituta + Sortu izen bakana + Gainidatzi + Badago izen bera duen deskargatutako fitxategi bat + Badago izen bera duen deskarga bat abian + Erakutsi errorea + Kodea + Ezin da fitxategia sortu + Ezin da helburu karpeta sortu + Sistemak baimena ukatu du + Konexio seguruak huts egin du + Ezin izan da zerbitzaria aurkitu + Ezin da zerbitzariarekin konektatu + Zerbitzariak ez du daturik bidaltzen + Zerbitzariak ez ditu hainbat hariko deskargak onartzen, saiatu @string/msg_threads = 1 erabilita + Eskatutako barrutia ezin da bete + Ez aurkitua + Post-prozesuak huts egin du + Garbitu amaitutako deskargak + Berrekin burutzeke dauden %s transferentzia deskargetatik + Gelditu + Saiakerak gehienez + Deskarga ezeztatu aurretik saiatu beharreko aldi kopurua + Pausatu datu mugikorretara aldatzean + Pausatu ezin daitezkeen deskargak berrekingo dira + \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 03f9a33a0..83a076f09 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -1,9 +1,9 @@ - + برای شروع، جست‌وجو را بزنید ‫%1$s مشاهده منتشر شده در %1$s - هیچ پخش‌کنندهٔ جریانی پیدا نشد. وی‌ال‌سی نصب شود؟ + هیچ پخش‌کنندهٔ جریانی پیدا نشد. مایلید وی‌ال‌سی نصب شود؟ نصب لغو گشودن در مرورگر @@ -11,7 +11,7 @@ بارگیری جست‌وجو تنظیمات - منظورتان این بود: %1$s ؟ + منظورتان این بود: %1$s؟ هم‌رسانی با گزیدن مرورگر چرخش @@ -19,29 +19,31 @@ استفاده از پخش‌کنندهٔ صدای خارجی مسیر بارگیری ویدیو - مسیر ذخیرهٔ ویدیوهای بارگیری شده. + مسیر ذخیرهٔ ویدیوهای بارگیری شده مسیر بارگیری را برای ویدیوها وارد کنید - مسیر بارگیری صدا - مسیر ذخیرهٔ صداهای بارگیری شده - مسیر بارگیری را برای صداها وارد کنید. + پوشه بارگیری صدا + صدای بارگیری شده در این‌جا نگه داشته می‌شود + مسیر بارگیری را برای صداها وارد کنید - پخش خودکار هنگام فراخوانی از کاره‌ای دیگر - هنگامی که نیوپایپ از کارهٔ دیگری فراخوانی می‌شود، ویدیویی را به صورت خودکار پخش می‌کند. + پخش خودکار + هنگامی که نیوپایپ از کارهٔ دیگری فراخوانی می‌شود، ویدیوی به طور خودکار پخش شود وضوح پیش‌گزیده پخش با کودی - کارهٔ کوره پیدا نشد. کوره نصب شود؟ + کارهٔ کوره پیدا نشد. نصب شود؟ نمایش گزینهٔ «پخش با کودی» - نمایش گزینه‌ای برای پخش ویدیو با مرکز رسانهٔ کودی. + نمایش گزینه‌ای برای پخش ویدیو با مرکز رسانهٔ کودی صدا قالب صدای پیش‌گزیده + قالب آزاد — WebM + کیفیت بهتر — M4A زمینه تیره روشن بارگیری - ویدیوی بعدی - نماش ویدیوهای بعدی و مشابه + بعدی + نماش ویدیوهای «بعدی» و «مشابه» نشانی اینترنتی پشتیبانی نمی‌شود زبان محتوای ترجیحی ویدیو و صدا @@ -50,8 +52,8 @@ در حال پخش در پس‌زمینه پخش محتوا - نمایش محتوای محدود شده بر اساس سن - ویدیو بر اساس سن محدود شده است. نخست، ویدیوهای محدود شده بر اساس سن را در تنظیمات فعّال کنید. + محتوای محدود شده بر اساس سن + نمایش ویدیوهای محدود شده بر اساس سن. اجازه دادن به چنین محتوای از بخش «تنظیمات» ممکن است. زنده بارگیری‌ها بارگیری‌ها @@ -117,9 +119,9 @@ در حافظه رونوشت شد. لطفاً یک شاخهٔ بارگیری موجود را برگزینید. -هیچ پخش کننده استریمی پیدا نشد (شما می‌توانید برنامه وی‌ال‌سی را برای پخش آن نصب نمایید) - بارگیری پرونده جریان. - هنگامی که این گزینه فعال باشد، برخی از کیفیت‌ها فاقد صدا خواهند بود +هیچ پخش کننده جریانی پیدا نشد (شما می‌توانید برنامه وی‌ال‌سی را برای پخش آن نصب کنید). + بارگیری پرونده جریان + حذف صدا در برخی کیفیت‌ها اشتراک مشترک شده اشتراک کانال لغو شد @@ -129,9 +131,205 @@ اصلی اشتراک‌ها - نشان‌گذاری‌ها + فهرست‌های پخش دارای نشانک موارد جدید پس زمینه - + افزودن به + + نمایش کیفیت بالاتر + تنها برخی دستگاه‌ها توانایی پخش ویدئوهای 2K و 4K را دارند + قالب ویدئوی پیش‌فرض + سیاه + بارگذاری بندانگشتی + قرار دادن خودکار جریان بعدی در صف + پیشنهادهای جستجو + نمایش پیشنهادها حین جستجو + تاریخچه جستجو + نگه‌داشتن آمار ویدئوهای دیده‌شده + کشور محتوای پیش‌فرض + پخش‌کننده + رفتار + همه + کانال + کانال‌ها + سیاهه پخش + سیاهه‌های پخش + کاربران + بله + بعدا + غیرفعال + صافی + تازه‌سازی + پاک‌کردن + تغییر اندازه + پخش همه + همیشه + فقط یک‌بار + پرونده + + اعلان نیوپایپ + [ناشناخته] + + وارد کردن پایگاه‌داده + "صادرکردن " + تاریخچه و اشتراک‌های شما بازنویسی خواهند شد + صادرکردن تاریخچه، اشتراک‌ها و سیاهه‌های پخش + پاک‌کردن تاریخچه ویدئوهای دیده‌شده + وارد/صادر کردن + وارد کردن + وارد کردن از + صادر کردن به + + در حال وارد کردن… + در حال صدور… + + ناتوانی در ورود اشتراک‌ها + ناتوانی در صدور اشتراک‌ها + + کنترل‌های سرعت پخش + قبول + رد + + بدون محدودیت + هیچ + بهترین وضوح + تمام تاریخچه نمایش پاک شود؟ + تاریخچه نمایش پاک شد. + پاک‌کردن تاریخچه جستجو + تاریخچه کلیدواژه‌های جستجو را پاک می‌کند + تمام تاریخچه جستجو پاک شود؟ + تاریخچه جستجو پاک شد. + ناتوانی در بارگذاری تصویر + ناتوانی در پخش این جریان + نشانی نامعتبر + هیچ جریان ویدئویی پیدا نشد + هیچ جریان صدایی پیدا نشد + چنین پوشه‌ای وجود ندارد + چنین منبع محتوا/پرونده‌ای وجود ندارد + نام پرونده نمی‌تواند خالی باشد + خطایی رخ داد: %1$s + جریانی برای بارگیری در دسترس نیست + + بدون نتیجه + استفاده از پخش‌کننده قدیمی + K + M + B + + + %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 ec10422d8..ead13fb95 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -11,7 +11,7 @@ Lataus Haku Asetukset - Tarkoititko: %1$s ? + Tarkoititko: %1$s\? Jaa Valitse selain kierto @@ -232,7 +232,7 @@ Historia pyyhitty Poistettu Haluatko poistaa tämän hakuhistoriasta? -Jatka keskeytyksen jälkeen +Jatka toistoa ohjelman palatessa päällimmäiseksi Info: Mikä:\\nPyyntö:\\nSisällön kieli:\\nPalvelu:\\nGMT Aika:\\nPaketti:\\nVersio:\\nOS versio: © %1$s %2$s %3$s alla @@ -274,7 +274,7 @@ Aloita toisto taustalla Aloita toisto ikkunassa 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 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. Anna takaisin Websivu Käy verkkosivuillamme saadaksesi lisää tietoa ja uusimmat uutiset NewPipe:stä. @@ -306,7 +306,7 @@ Vain kerran Tiedosto - Muuta näytön suuntausta + Vaihda orientaatio Vaihda taustalle Vaihda ponnahdusikkunatoistoon Vaihda normaalitoistoon diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 07deb1659..98ed64f37 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,4 +1,4 @@ - + Annuler Choisir un navigateur @@ -25,10 +25,10 @@ Audio Format audio par défaut Télécharger - Vidéo suivante - Afficher les vidéos \"suivantes\" et \"similaires\" - Lien non pris en charge - Vidéo et audio + Suivant + Afficher les vidéos \"Suivantes\" et \"Similaires\" + URL non supportée + Vidéo & audio Autre Miniature d’aperçu vidéo @@ -51,8 +51,8 @@ Apparence Erreur réseau - Chemin de téléchargement audio - Chemin de stockage des fichiers audio téléchargés + Dossier de téléchargement audio + L\'audio téléchargé est stocké ici Entrez le chemin de téléchargement des fichiers audio Impossible de créer le répertoire de téléchargement « %1$s » @@ -64,14 +64,14 @@ Désolé, des erreurs se sont produites. Contenu - Afficher contenu avec limite d\'âge - Direct + Contenu avec limite d\'âge + EN DIRECT Impossible de charger toutes les miniatures Impossible de déchiffrer la signature URL de la vidéo Impossible d\'analyser complètement le site web - Il s\'agit d\'un direct, non supporté pour le moment. - Désolé, une erreur inattendue s\'est produite. + Les flux en direct ne sont pas encore pris en charge + Désolé, une erreur s’est produite. Lire la vidéo lorsque NewPipe est appelée par une autre application Signaler l\'erreur par e-mail Information : @@ -87,7 +87,7 @@ Autorisation d\'accès au stockage refusée Faites une recherche pour commencer Lecture automatique - Vidéo soumise à une limite d\'âge. Autoriser ce type de contenu est possible depuis les paramètres. + Afficher les vidéos soumises à une limite d\'âge. Autoriser ce type de contenu est possible depuis les paramètres. Rapport utilisateur SIGNALER @@ -166,7 +166,7 @@ B - Certaines résolutions n\'auront PAS de son si cette option est activée + Supprime l\'audio à CERTAINES résolutions Utiliser les gestes pour contrôler la luminosité et le volume du lecteur Suggestions de recherche Afficher les suggestions lors d\'une recherche @@ -227,9 +227,9 @@ Reprendre sur le gain de focus Lecteur Comportement - Historique et cache + Historique & cache Liste de lecture - Notifications pour les lecteurs \"Arrière-plan\" et \"Fenêtre\" de NewPipe + Notifications pour les lecteurs \"arrière-plan\" et \"fenêtre\" de NewPipe Aucun résultat Aucun contenu @@ -248,8 +248,8 @@ Aucune vidéo - %s vidéo - %s vidéos + Vidéo + Vidéos Caractères spéciaux @@ -271,13 +271,13 @@ Impossible de jouer ce flux Une erreur irrécupérable du lecteur s\'est produite - Encore aucune chaîne souscrite + Pas encore d\'abonnements de chaînes Lecteur en arrière-plan Lecteur en fenêtré Retirer Détails Paramètres audio - Afficher l\'aide « maintenir pour ajouter » + Afficher l\'astuce « Maintenir pour ajouter » Afficher l\'aide \"Appui long pour mettre en file d\'attente\" en appuyant sur les boutons \"Arrière-plan\" et \"Fenêtre\" sur la page de détails d\'une vidéo [Inconnu] @@ -290,7 +290,7 @@ Appui long pour mettre en file d\'attente Mettre en file d\'attente en arrière-plan Mettre en file d\'attente en fenêtré - Démarrer ici + Commencer la lecture ici Démarrer ici en arrière-plan Démarrer ici en fenêtré Donner @@ -307,7 +307,7 @@ Service Ouvrir le menu Fermer le menu - Aucun lecteur de flux trouvé (vous pouvez installer VLC pour le lire) + Aucun lecteur de flux trouvé (vous pouvez installer VLC pour le lire). Toujours Une seule fois @@ -325,10 +325,10 @@ Chargement du contenu Importer les données Exporter les données - Cela effacera vos données actuelles + Remplace votre historique et vos abonnements actuels Exporter votre historique, vos abonnements et vos listes de lecture - Exportation terminée - Importation terminée + Exporté + Importé Aucun fichier ZIP valide Avertissement: Impossible d\'importer tous les fichiers. Cela effacera vos paramètres actuels @@ -347,15 +347,15 @@ Dernière lecture Tout supprimer - Voulez vous supprimer cet élément de votre historique ? - Êtes vous sûr de supprimer tout votre historique ? + Voulez-vous supprimer cet élément de votre historique \? + Êtes-vous sûr de supprimer tout votre historique \? Vidéos les plus regardées Toujours demander - Créer une nouvelle playlist - Supprimer la playlist - Renommer la playlist + Nouvelle liste de lecture + Supprimer + Renommer Nom Ajouter à la playlist Enregistrer la playlist en local @@ -363,11 +363,11 @@ Marquer cette playlist Retirer la marque - Voulez-vous supprimer cette playlist ? + Supprimer cette liste de lecture \? Liste de lecture créée - Ajoutée à la playlist - Modification de la playlist réussie - Impossible de supprimer la liste de lecture + Ajouté à la liste de lecture + Miniature de la liste de lecture changée. + Impossible de supprimer la liste de lecture. Aucuns sous-titres @@ -381,17 +381,17 @@ Recherche rapide approximative Permettre au lecteur d\'accéder plus rapidement à une position au détriment de la précision - Charger miniatures - Désactiver pour arrêter le chargement de toutes les miniatures et sauvegarder les données et l\'utilisation de la mémoire. Modifier cela effacera à la fois le cache d\'image en mémoire et sur disque + Charger les miniatures + Désactivez pour empêcher le chargement des miniatures afin de réduire l’utilisation de bande passante et de mémoire. Modifier cette option vide le cache d’images en mémoire vive et sur le disque. Images en cache effacées Effacer les données en cache Effacer toutes les pages web mises en cache Données en cache effacées Fichier - Dossier non valide - Fichier/source du contenu non valide - Le fichier n\'existe pas ou il n\'est pas permis de le lire + Aucun dossier de ce type + Aucun fichier/contenu de ce type + Le fichier n’existe pas ou n’est pas accessible en lecture/écriture Le nom du fichier ne peut être vide Une erreur s\'est produite: %1$s @@ -412,7 +412,7 @@ Signaler les erreurs de développement hors cycle Forcer le signalement des exceptions Rx qui surviennent hors activité - Importer/Exporter + Importer/exporter Importer Importer de Exporter vers @@ -431,12 +431,12 @@ \n1. Suivez ce lien : %1$s \n2. Connectez-vous à votre compte lorsque ce sera demandé \n3. Un téléchargement va démarrer (ce sera celui du fichier nécessaire à l\'importation des abonnements)" - Importez un profil SoundCloud avec l\'URL de votre profil ou votre identifiant (id) : -\n -\n1. Activer le \"mode bureau\" dans votre navigateur (le site n\'est pas accessible en mode mobile) -\n2. Suivez cette URL : %1$s -\n3. Connectez-vous à votre compte -\n4. Copier l\'URL vers lequel vous venez d\'être redirigé (qui est l\'URL de votre profil). + Importez un profil SoundCloud en saisissant l’URL de votre profil ou votre identifiant (ID). +\n +\n1. Activer le « mode bureau » dans votre navigateur (le site n’est pas disponible pour les appareils mobiles). +\n2. Suivez cette URL : %1$s +\n3. Connectez-vous à votre compte. +\n4. Copier l’URL vers lequel vous venez d’être redirigé. votreID, soundcloud.com/votreid Cette opération peut consommer beaucoup de données mobiles. @@ -453,7 +453,7 @@ Aucun flux disponible au téléchargement Sous-titres - Modifier la taille du texte et les styles d\'arrière-plan du lecteur. Redémarrage requis pour prendre effet + Modifier la taille du texte et les styles d\'arrière-plan du lecteur. Redémarrage requis pour prendre effet. Ton Nightcore @@ -461,23 +461,23 @@ Effacer l\'historique Supprimer l\'historique des flux regardés - Supprimer tout l\'historique regardé. - Voir l’historique supprimé. + Supprimer tout l\'historique regardé \? + Historique des vidéos vues supprimé. Supprimer l\'historique des recherches Supprimer l\'historique de recherche par mot clef - Supprimer tout l\'historique de recherche. + Supprimer tout l\'historique de recherche \? Historique des recherches effacé. 1 élément supprimé. "NewPipe est un logiciel sous licence libre : Vous pouvez l\'utiliser, l\'étudier, le partager et l\'améliorer comme bon vous semble. Vous pouvez le redistribuer et/ou le modifier sous les termes de la licence générale publique GNU, comme publiée par la Free Software Foundation, dans sa version 3, ou, à votre convenance, dans une version plus récente." Politique de confidentialité de NewPipe Lire la politique de confidentialité - Voulez-vous également importer des paramètres ? + Voulez-vous également importer des paramètres \? Accepter Refuser -Le projet NewPipe prend votre vie privée très à cœur. Ainsi, l\'appli n\'envoie aucune donnée sans votre consentement. -\nLa politique de vie privée de NewPipe explique en détail quelle donnée est envoyée et stockée quand vous envoyez un rapport de plantage. +Le projet NewPipe prend votre vie privée très à cœur. Ainsi, l’application n’envoie aucune donnée sans votre consentement. +\nLa politique de confidentialité de NewPipe explique en détail quelles données sont envoyées et stockées lorsque vous envoyez un rapport de plantage. Afin de se conformer au Règlement Général sur la Protection des Données (RGPD ou GDPR), nous attirons votre attention sur la politique de vie privée de NewPipe. Merci de la lire attentivement. \nVous devez l\'accepter pour nous envoyer le rapport de bug. Pas de limite @@ -491,9 +491,40 @@ Réinitialiser Minimiser lors du changement d\'application - Action lors du changement d\'applications depuis le lecteur vidéo —%s + Action lors du changement d\'application depuis le lecteur vidéo —%s Aucune - Minimiser pour lire en arrière plan - Minimiser vers lecteur PopUp - - + Minimiser pour lire en arrière-plan + Minimiser vers le lecteur miniature + Se désabonner + Nouvel onglet + Sélectionner l\'onglet + Contrôle gestuel du volume + Utiliser des gestes pour contrôler le volume du lecteur + Contrôle gestuel de la luminosité + Utiliser des gestes pour contrôler la luminosité du lecteur + Mises à jour + Fichier supprimé + Notification de mise à jour de l\'application + Notifications pour la nouvelle version de NewPipe + Stockage externe indisponible + Restaurer les valeurs par défaut + Voulez-vous restaurer les valeurs par défaut \? + Nombre d\'abonnés non disponible + Sélection + Arrêter + Événements + Télécharger vers la carte SD n\'est pas encore possible. Voulez-vous réinitialiser l\'emplacement du dossier \? + Quels onglets seront visibles sur la page principale + Mises à jour + Afficher une notification pour proposer une mise à jour de l\'application lorsqu\'une nouvelle version est disponible + Liste + Grille + Auto + Changer de vue + Une mise à jour de NewPipe disponible ! + Appuyez pour télécharger + Terminé + En file + En pause + Téléchargement échoué + \ 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 3ba9bbd09..5782a1b52 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -1,169 +1,169 @@ - + - לחץ \"חפש\" כדי להתחיל + יש ללחוץ על „חיפוש” כדי להתחיל %1$s צפיות - פורסם ב:-%1$s - לא נמצאו נגני רשת, האם תרצה להתקין את VLC? - התקן - בטל - פתח בדפדפן - פתח במצב חלון צץ - שתף - הורד - חפש + פורסם ב־%1$s + לא נמצאו נגני צפייה ישירה, להתקין את VLC\? + התקנה + ביטול + פתיחה בדפדפן + פתיחה בחלון צף + שיתוף + הורדה + חיפוש הגדרות - האם התכוונת ל-%1$s ? - שתף עם - בחר דפדפן - סיבוב - השתמש בנגן סרטים חיצוני - לחלק מהסרטונים עם רזולוציה גבוהה לא יהיה שמע כאשר אפשרות זו פועלת - השתמש בנגן סרטים חיצוני - מצב חלון צץ (NewPipe) + כוונתך הייתה: %1$s\? + שיתוף עם + בחירת דפדפן + הטייה + שימוש בנגן סרטונים חיצוני + בחלק מהרזולוציות השמע יוסר + שימוש בנגן סרטונים חיצוני + מצב חלון צף של NewPipe רקע - חלון צץ + חלון צף - נתיב הורדה לסרטונים - נתיב לשמירת סרטונים - הכנס נתיב לשמירת סרטונים + נתיב להורדת סרטונים + נתיב מיקום לאחסון סרטונים + נא להקליד נתיב לשמירת סרטונים - נתיב לשמירת שמע - נתיב לשמירת שמע - הכנס נתיב לשמירת קבצי שמע + תיקיית הורדות שמע + הורדות שמע נשמרות כאן + נא להקליד נתיב לשמירת קובצי שמע - נגן אוטומטית - מנגן סרטון כאשר NewPipe נפתח דרך אפליקציה אחרת - רזולוציית ברירת המחדל - רזולוציית ברירת המחדל לחלון צץ - הצג רזולוציות גבוהות יותר - רק חלק מהמכשירים תומכים בצפייה בסרטונים ב-2k/4k - נגן ב-Kodi - האפליקציה Kore לא נמצאה. להתקין אותה? - הצג את האפשרות לניגון עם Kodi - הראה אפשרות לנגן סרטון דרך \"Kodi media center\" + ניגון אוטומטי + מנגן סרטון כאשר NewPipe נפתח דרך יישומון אחר + רזולוציית בררת המחדל + רזולוציית בררת המחדל לחלון צף + הצגת רזולוציות גבוהות יותר + רק חלק מהמכשירים תומכים בצפייה בסרטונים ב־2K/4K + נגינה ב־Kodi + היישומון Kore לא נמצא. להתקין אותו\? + הצגת האפשרות לניגון עם Kodi + הצגת אפשרות לנגן סרטון דרך מרכז המדיה Kodi שמע - תבנית ברירת המחדל לשמע - תבנית סרט ברירת מחדל + תבנית שמע כבררת מחדל + תבנית סרטון כבררת מחדל ערכת נושא - מואר - חשוך + בהיר + כהה שחור - זכור את מיקומו וגודלו של החלון הצץ - זכור את המיקום והגודל האחרונים של החלון הצץ + שמירת מיקומו וגודלו של החלון הצף + שמירת המיקום והגודל האחרונים של החלון הצף מחוות מגע לשליטה בנגן - השתמש במחוות כדי לשלוט בבהירות ובעוצמת השמע של הנגן + שימוש במחוות כדי לשלוט בבהירות ובעצמת השמע של הנגן הצעות חיפוש - הצג הצעות כשמחפשים + הצגת הצעות בעת החיפוש - הורד - הסרטון הבא - הראה את הסרטונים הבאים וסרטונים דומים - כתובת URL לא נתמכת + הורדה + הבא + להציג סרטונים דומים ובאים בתור + כתובת לא נתמכת שפת התוכן המועדפת - סרטים ושמע - חלון צץ + סרטונים ושמע + חלון צף תצוגה - אחרים - מנגן ברקע - מנגן במצב חלון צץ - נגן + אחר + מתנגן ברקע + מתנגן בחלון צף + נגינה תוכן - הראה תוכן בעל הגבלת גיל - לסרטון קיימת הגבלת גיל. ניתן לאפשר צפייה בסרטונים אלו ע\"י שינוי ממסך ההגדרות. + תוכן עם הגבלת גיל + הצגת סרטונים עם הגבלת גיל. ניתן לאפשר תכנים שכאלה דרך ההגדרות. חי הורדות הורדות - דו\"ח שגיאה - הכל + דוח שגיאה + הכול ערוץ כן מאוחר יותר - לא פעיל - סינון - רענן - נקה + מושבת + מסנן + רענון + פינוי שינוי גודל שגיאה - שגיאת אינטרנט + שגיאת רשת אין אפשרות לטעון את כל התמונות הממוזערות - לא הייתה אפשרות לפענח את חתימת ה-URL של הסרט - לא הייתה אפשרות לנתח את האתר + לא ניתן לפענח את חתימת כתובת הסרטון + ניתוח האתר לא התאפשר לא הייתה אפשרות לנתח את האתר לחלוטין תוכן אינו זמין - חסום ע\"י GEMA - לא הייתה אפשרות להכין את תפריט ההורדות - זהו שידור ישיר. שידורים ישירים עדיין לא נתמכים. - לא הייתה אפשרות להזרים סרטון - לא הייתה אפשרות לטעון את התמונה - האפליקציה או ממשק המשתמש קרסו - מצטערים, זה לא היה אמור לקרות. - דווח על השגיאה דרך הדוא\"ל - מצטערים, אירעו כמה שגיאות. - דווח + נחסם ע״י GEMA + לא הייתה אפשרות להכין את תפריט ההורדה + עדיין אין תמיכה בתזרימים חיים + לא הייתה אפשרות לקבל תזרים כלשהו + טעינת התמונה לא הצליחה + היישומון או מנשק המשתמש קרסו + זה לא אמור היה לקרות, עמך הסליחה. + דיווח על השגיאה דרך דוא״ל + אירעו מספר שגיאות, עמך הסליחה. + דיווח מידע: מה קרה: - מה:\\nבקשה:\\nשפת התוכן:\\nשירות:\\nזמן GMT:\\nחבילה:\\nגרסה:\\nגרסת מערכת ההפעלה: -הירשם כמנוי - רשום כמנוי - ביטול מנוי לערוץ - אין אפשרות לשנות מנוי - אין אפשרות לעדכן מנוי + מה:\\nבקשה:\\nשפת התוכן:\\nשירות:\\nשעון גריניץ׳:\\nחבילה:\\nגרסה:\\nגרסת מערכת ההפעלה: +עריכת מינוי + נרשמת + ביטול מינוי לערוץ + לא הצלחתי לשנות מינוי + לא ניתן לעדכן את המינוי ראשי - מנויים + מינויים מה חדש - היסטוריית חיפושים - שמור חיפושים מקומית + היסטוריית חיפוש + שמירת שאילתות החיפוש מקומית היסטוריה ומטמון - המשך לעקוב אחר סרטונים שנצפו - המשך לנגן בעת חזרת המיקוד ליישום - המשך לנגן לאחר הפרעות (לדוגמה: שיחות טלפון) - הצג עצה \"לחיצה ממושכת תוסיף לרשימה\" - הצג עצה כאשר כפתור רקע או חלון צץ נלחץ במסך נגן הסרטים + תיעוד הסרטונים שנצפו + להמשיך את הניגון עם החזרת המיקוד + להמשיך לנגן לאחר הפרעות (למשל: שיחות טלפון) + להציג את העצה „להחזיק כדי להוסיף לרשימת נגינה” + להציג עצה בעת לחיצה על כפתור בנגן רקע או צף בעמוד פרטי סרטון נגן התנהגות היסטוריה ומטמון - נוסף לתור של הנגן ברקע - נוסף לתור של הנגן הצץ - רשימת ניגון + נוסף לתור של נגן הרקע + נוסף לתור של הנגן הצף + רשימת נגינה רזולוציה מיטבית - בטל - נגן הכל + ביטול + לנגן הכול - הודעה מ-NewPipe - התראות עבור נגן הרקע והנגן הצץ של NewPipe + התראה מ־NewPipe + התראות עבור נגן הרקע והנגן הצף של NewPipe [לא ידוע] - נכשל בניגון הסרט הנוכחי - תקלה בלתי ניתנת לשחזור אירעה בנגן - מחלים מתקלה שאירעה לנגן + נגינת התזרים לא הצליחה + אירעה תקלה בנגן ממנה לא ניתן להשתקם + מתבצעת החלמה משגיאת נגן ההערה שלך (באנגלית): פרטים: - תמונות ממוזערות לתצוגה המקדמת של הסרטון - תמונות ממוזערות לתצוגה המקדמת של הסרטון - תמונה של המשתמש המפרסם + תמונה ממוזערת לתצוגה המקדימה של הסרטון + תמונות ממוזערות לתצוגה המקדימה של הסרטון + תמונה ייצוגית של המפרסם אהבו לא אהבו - השתמש ב-Tor - (ניסיוני) השתמש בתעבורת ההורדה דרך Tor להגברת הפרטיות (ניגון סרטים בהזרמה ישירה אינו נתמך עדיין). - דווח על שגיאה - דיווח משתמש + שימוש ב־Tor + (ניסיוני) אילוץ העברת תעבורת ההורדה דרך Tor לשיפור הפרטיות (אין עדיין תמיכה בהזרמת סרטונים). + דיווח על שגיאה + דוח משתמש אין תוצאות אין כאן כלום מלבד צרצרים - לא ניתן ליצור את תיקיית ההורדות \'%1$s\' - תיקיית ההורדות נוצרה \'%1$s\' + לא ניתן ליצור את תיקיית ההורדות ‚%1$s’ + תיקיית ההורדות ‚%1$s’ נוצרה - סרט + סרטון שמע - נסה שנית + ניסיון חוזר הגישה לאחסון נדחתה השתמש בנגן הישן השתמש בנגן המובנה Mediaframework @@ -172,7 +172,7 @@ M B - אין עוקבים + אין מנויים מנוי אחד שני מנויים @@ -180,7 +180,7 @@ %s מנויים - אין תצוגות + אין צפיות צפייה אחת שתי צפיות @@ -190,109 +190,109 @@ אין סרטונים - סרטון אחד - שני סרטונים - %s סרטונים - %s סרטונים + סרטון + שני סרטונים + %s סרטונים + %s סרטונים - התחל - השהה - נגן - מחק - בדיקה + התחלה + השהיה + נגינה + מחיקה + גיבוב לאימות משימה חדשה - בסדר + אישור שם קובץ - אשכולות + תת־דיונים שגיאה - שרת לא נתמך + שרת בלתי נתמך קובץ כבר קיים - URL לא תקין או שאין אינטרנט זמין - NewPipe מוריד - לחץ לפרטים נוספים - אנא המתן… + כתובת שגויה או שהאינטרנט לא זמין + NewPipe בהורדה + יש לגעת לפרטים נוספים + נא להמתין… הועתק ללוח - אנא בחר בתיקיית הורדות זמינה - הרשאה זו נדרשת עבור -\nפתח במצב חלון צץ + נא לבחור תיקיית הורדה זמינה + הרשאה זו נדרשת לטובת +\nפתיחה בחלון צף reCAPTCHA אתגר reCAPTCHA - נתבקש אתגר reCAPTCHA + התקבלה בקשה לאתגר reCAPTCHA הורדה רשימת תווים אפשרית בשמות קבצים - תווים לא נתמכים מוחלפים עם הערך הזה + תווים לא נתמכים מוחלפים בערך הזה תו חלופי אותיות וספרות - רוב התווים הייחודיים + רוב התווים המיוחדים - אודות NewPipe + על אודות NewPipe הגדרות - אודות - רישיונות צד ג\' - © %1$s ע\"י %2$s תחת %3$s + על אודות + רישיונות צד שלישי + © %1$s ע״י %2$s תחת %3$s לא ניתן לטעון רישיון - פתח אתר - אודות + פתיחת האתר + על אודות תורמים רישיונות - נגן קל וחופשי לYouTube עבור אנדרואיד. - תורם - בכל עת שיש לך רעיון ל: תרגום, עיצוב מחדש, ניקוי קוד, או תיקוני קוד משמעותיים—עזרה תמיד תתקבל בברכה. ככל שיותר מבוצע זה נעשה טוב יותר! - הצג ב-GitHub - תרום - NewPipe מפותח ע\"י מתנדבים אשר תורמים מזמנם להביא את החוויה המושלמת עבורך. עכשיו זה הזמן לתת להם חזרה כדי לדאוג לכך ש-NewPipe תמשיך לצמוח! + נגן קל וחופשי להזרמת מדיה עבור Android. + התנדבות + אם יש לך רעיון כלשהו בנוגע לתרגום, שינויי עיצוב, ניקוי הקוד או שינויים מהותיים בקוד - אנו תמיד שמחים לקבל עזרה. ככל שיותר דברים מתבצעים כך היישומון משתפר! + הצגה ב־GitHub + תרומה + הפיתוח של NewPipe נערך ע״י מתנדבים שמשקיעים את זמנם כדי להגיש לך את החוויה הטובה ביותר. באפשרותך להעניק בחזרה כדי לסייע למפתחים לשפר את NewPipe בעודם נהנים מכוס קפה. לתרום בחזרה אתר הבית - לקבלת מידע נוסף ועדכונים אחרונים עבור NewPipe אנא בקר באתרנו. - רישיון NewPipe - קרא רישיון + מומלץ לבקר באתר של NewPipe לפרטים נוספים ולחדשות. + הרישיון של NewPipe + הצגת הרישיון היסטוריה - חופש בעבר - נצפה בעבר - היסטוריה אינה פעילה + נשלח כחיפוש + נצפו + ההיסטוריה כבויה היסטוריה ההיסטוריה ריקה - היסטוריה נוקתה + ההיסטוריה התרוקנה פריט נמחק - האם ברצונך למחוק את הפריט הזה מהיסטורית החיפושים? + למחוק את הפריט הזה מהיסטוריית החיפושים\? תוכן הדף הראשי דף ריק - דף קיוסק - דף עוקבים + דף גישה מזדמנת + דף מינויים דף עדכונים - דף ערוץ - בחר ערוץ - אף ערוץ אינו ברשימת המעקב עדיין - בחר קיוסק + דף ערוצים + נא לבחור ערוץ + אין עדיין מינויים לערוצים + נא לבחור סוג גישה מזדמנת - קיוסק + גישה מזדמנת החמים - 50 הנצפים ביותר - חדש & חם + 50 המובילים + חדש וחם נגן רקע - נגן צץ - הסר + נגן צף + הסרה פרטים אפשרויות שמע - החזק להוספה לרשימת ניגון - נוסף לרשימת הניגון ברקע - נוסף לרשימת הניגון בנגן הצץ - התחל לנגן כאן - התחל כאן בנגן הרקע - התחל כאן בנגן הצץ -הורדת קובץ הזרמה. + להחזיק כדי להוסיף לרשימת נגינה + להוסיף לרשימת הנגינה בעת נגינת רקע + הוספה לרשימת הנגינה בנגן הצף + להתחיל לנגן מכאן + "להתחיל מכאן כאשר נגן הרקע מופעל" + להתחיל כאן בנגן הצף +הורדת קובץ הזרמה הצגת מידע - סימניות + רשימות נגינה מסומנות הוספה אל @@ -302,98 +302,237 @@ תמיד חד פעמי - יבוא מסד נתונים - יצוא מסד נתונים - נגנים חיצוניים לא תומכים בסוגי קישורים אלה + ייבוא מסד נתונים + ייצוא מסד נתונים + נגנים חיצוניים לא תומכים בסוגי קישורים כאלה כתובת שגויה קובץ העברה לרקע - העברה לחלון צץ - לא נמצא נגן לצפייה ישירה (באפשרותך להתקין VLC כדי לתקן זאת) - מטמון התמונות נוקה - נקה מטמון מטא-דאטה - מטמון המטא-דאטא נוקה - יצא היסטוריה, רישומים ורשימות השמעה. - ניקוי היסטוריית הצפייה + העברה לחלון צף + לא נמצא נגן צפייה ישירה (ניתן להתקין את VLC כדי לתקן זאת). + מטמון התמונות התרוקן + ניקוי מטמון נתוני העל + מטמון נתוני העל התרוקן + ייצוא היסטוריה, מינויים ורשימות נגינה + מחיקת היסטוריית הצפייה היסטוריית הצפייה נמחקה. - ניקוי היסטוריית החיפוש - היסטורית החיפוש נמחקה. - הקובץ אינו קיים או שאין ברשותך הרשאות מתאימות לקריאתו/כתיבתו + מחיקת היסטוריית החיפוש + היסטוריית החיפוש נמחקה. + הקובץ אינו קיים או שחסרה הרשאה לקרוא אותו או לכתוב אליו שם הקובץ אינו יכול להיות ריק - גרור כדי לסדר מחדש + ניתן לסדר מחדש בגרירה - צור - מחק אחד - מחק הכל - סלק - שנה שם + יצירה + למחוק אחד + למחוק הכול + התעלמות + שינוי שם פריט אחד נמחק. - לא נמצא נגן מתאים לקובץ זה + לא מותקן יישומון שמתאים לנגינת הקובץ הזה - האם ברצונך למחוק פריט זה מהיסטוריית הצפייה שלך? - האם אתה בטוח שברצונך למחוק את כל הפריטים מההיסטוריה? - יצוא הושלם - יבוא הושלם - אין קובץ ZIP תקף + למחוק את הפריט הזה מהיסטוריית הצפייה שלך\? + למחוק את כל הפריטים מההיסטוריה\? + הייצוא הסתיים + הייבוא הסתיים + אין קובץ ZIP תקין נגן וידאו נגן רקע - נגן קופץ - שאל תמיד + נגן צף + לשאול תמיד - משיג מידע… + המידע מתקבל… התוכן המבוקש בטעינה - צור רשימת השמעה חדשה - מחק רשימת השמעה - שנה שם רשימת השמעה + רשימת נגינה חדשה + מחיקה + שינוי שם שם - הוסף לרשימת השמעה - הוסף רשימת השמעה למועדפים - הסרת מועדף + הוספה לרשימת נגינה + הוספה רשימת השמעה לסימניות + הסרת סימנייה - האם ברצונך למחוק רשימת השמעה זו? - רשימת ההשמעה נוצרה בהצלחה - נוסף לרשימת ההשמעה - תמונת רשימת ההשמעה שונתה - מלא - הגדל + למחוק רשימת נגינה זו\? + רשימת הנגינה נוצרה + נוסף לרשימת הנגינה + תמונת רשימת הנגינה הוחלפה. + מילוי + תקריב - נוצר אוטומטית + נוצרו אוטומטית - יבוא/יצוא - יבוא - יבוא מ - יצוא ל + ייבוא/ייצוא + ייבוא + ייבוא מ־ + ייצוא אל - מייבא… - מייצא… + מתבצע ייבוא… + מתבצע ייצוא… - יבא קובץ - יצוא קודם + ייבוא קובץ + ייצוא קודם - יבוא רשומים נכשל - יצוא רשומים נכשל + לא ניתן לייבא את המינויים + לא ניתן לייצא את המינויים - כדי לייבא את הערוצים אליהם אתה רשום מיוטיוב אתה תזדקק לקובץ היצוא, אותו ניתן להוריד כך: -\n -\n1. היכנס ללינק הזה: %1$s -\n2. התחבר לחשבונך כשתתבקש -\n3. ההורדה אמורה להתחיל (זהו קובץ היצוא) + כדי לייבא את רשימת המינויים שלך מ־YouTube עליך להוריד את קובץ הייצוא: +\n +\n1. לעבור לכתובת הזו: %1$s +\n2. להיכנס אם נתבקשת +\n3. ההורדה אמורה להתחיל (זה קובץ הייצוא) קצב ברירת מחדל -השתמש בחיפוש מהיר שאינו מדויק - חיפוש לא מדויק מאפשר לנגן לחפש נקודת זמן מהר יותר, עם דיוק מופחת - טען תמונות ממוזערות - "השבת כדי לעצור את טעינת כל התמונות הממוזערות וחסוך בשימוש בנתונים ובזכרון. השינוי ימחק את המטמון בזכרון ובדיסק. " - הסר את כל נתוני העמודים במטמון - אוטומטית הכנס לתור את ההזרמה הבאה - "אוטומטית הוסף הזרמה קשורה כאשר ההזרמה האחרונה לא נמצאת במצב הזרמה חוזרת של התור. " - כפתור כיוון - החלף לראשי +שימוש בחיפוש מהיר גס + חיפוש גס מאפשר לנגן לחפש נקודת זמן מהר יותר, ברמת דיוק נמוכה יותר + טעינת תמונות ממוזערות + כיבוי האפשרות מונע את טעינת התמונות הממוזערות, חוסך בתקשורת נתונים ובניצולת הזיכרון. שינויים באפשרות זו מוחקים את המטמון בזיכרון ובכונן. + הסרת כל נתוני העמודים שבמטמון + הוספת התזרים הבא לרשימת הנגינה אוטומטית + להוסיף אוטומטית תזרים דומה בעת נגינת התזרים האחרון בתור שאינו מחזורי. + החלפת כיווניות + העברה לראשי - פעולה זו תדרוס את ההיסטוריה ורשימת המנויים הקיימת. - "מחק הסטוריה של ניגונים קודמים. " - + משכתב את ההיסטוריה והמינויים הנוכחיים שלך + מחיקת היסטוריית התזרימים שהתנגנו + ערוצים + רשימות נגינה + רצועות + משתמשים + למחוק את כל היסטוריית הצפייה\? + מחיקת היסטוריית מילות החיפוש + למחוק את כל היסטוריית החיפוש\? + לא נמצא תזרימי וידאו + לא נמצא תזרימי שמע + אין תיקייה כזו + אין מקור תיקייה/תוכן + אירעה שגיאה: %1$s + אין תזרימים זמינים להורדה + + מדיניות הפרטיות של NewPipe + מיזם NewPipe שומר על הפרטיות שלך בצורה מאוד קפדנית. לפיכך, היישומון אינו אוסף נתונים ללא הסכמתך. +\nמדיניות הפרטיות של NewPipe מסבירה בפרטי פרטים אילו נתונים נשלחים ומאוחסנים בעת שליחת דיווח על תקלה. + הצגת מדיניות הפרטיות + NewPipe הוא יישומון חופשי בהתאם לרישיון קופילפט: מותר לך להשתמש, לחקור, לשתף ולשפר בכל דרך שנראית לך. במיוחד מותר לך להפיץ מחדש ו/או לשנות תחת תנאי הרישיון הציבורי הכללי של GNU כפי שמופץ על ידי קרן התכנה החופשית, בין אם גרסה 3 של הרישיון או (לשיקולך) כל גרסה עדכנית יותר שלו. + התנגנו אחרונים + הכי נצפים + + אזהרה: ייבוא חלק מהקבצים נכשל. + פעולה זו תדרוס את ההגדרות הקיימות. + לייבא גם הגדרות\? + + פתיחת מגירה + סגירת מגירה + משהו יופיע כאן בקרוב ‎;D + + + פעולת ‚פתיחה’ מועדפת + פעולת בררת מחדל בעת פתיחת תוכן - %s + + הגדרה כתמונת רשימת הנגינה + + לא ניתן למחוק רשימת נגינה. + + אין כתוביות + + התאמה + כתוביות + שינוי גודל כותרת הנגן וסגנונות הרקע. נדרשת הפעלה מחדש כדי ששינויים אלה יכנסו לתוקף. + + הפעלת LeakCanary + מעקב אחר זליגת זיכרון עשויה לגרום ליישומון להיות בלתי זמין בזמן העתקת תוכן הזיכרון לקובץ + המזהה שלך, soundcloud.com/המזהה שלך + נא לשים לב כי פעולה זו עשויה להעמיס על תקשורת הנתונים. +\n +\nלהמשיך\? + ניתוק קישור (עלול ליצור עיוות) + להאיץ קדימה כאשר שקט + צעד + איפוס + קבלה + דחייה + ללא מגבלה + מזעור בעת מעבר בין יישומונים + הפעולה לביצוע בעת מעבר ליישומון אחר מנגן הווידאו הראשי — %s + כלום + מזעור לנגן הרקע + הקטנה לנגן צף + ביטול מינוי + לשונית חדשה + בחירת לשונית + מחוות בקרת עצמת שמע + ניתן להשתמש במחוות כדי לשלוט בעצמת השמע של הנגן + מחוות בקרת בהירות + ניתן להשתמש במחוות כדי לשלוט בבהירות הנגן + עדכונים + נמחק קובץ + התראת עדכון יישומון + התראות על גרסה חדשה של NewPipe + האחסון החיצוני אינו זמין + אין עדיין אפשרות להוריד לכרטיס SD. לאפס את מיקום תיקיית ההורדה\? + נעשה שימוש בלשוניות בררת המחדל, אירעה שגיאה בעת קריאת הלשוניות שנשמרו + שחזור בררות מחדל + לשחזר את בררות המחדל\? + מספר המנויים אינו זמין + אילו לשוניות תופענה בעמוד הראשי + בחירה + אירועים + כנסים + דיווח על שגיאות של חריגה ממחזור חיים + אילוץ דיווח על חריגות מחוץ למקטעים או למחזור חיי הפעילות לאחר ההשלכה בתשדורת יוצאת + ניתן לייבא פרופיל SoundCloud על ידי הקלדת הכתובת או המזהה שלך: +\n +\n1. עליך להפעיל „מצב שולחן עבודה” בדפדפן שלך (האתר לא זמין למכשירים ניידים) +\n2. לעבור לכתובת הזו: %1$s +\n3. להיכנס אם נתבקשת +\n4. להעתיק את כתובת הפרופיל אליו הועברת. + בקרי מהירות נגינה + גובה צליל + הגבלת הרזולוציה בעת שימוש בנתונים סלולריים + כדי לעמוד בדרישות האסדרה הכללית להגנה על מידע (GDPR), אנו מפנים את תשומת לבך למדיניות הפרטיות של NewPipe. נא לקרוא אותה בעיון רב. +\nעליך לאשר את הסכמתך למדיניות כדי לשלוח לנו דיווחים על תקלות. + עדכונים + הצגת התראה כדי להודיע על עדכון ליישומון כשיוצאת גרסה חדשה לאור + מצב תצוגת רשימה + רשימה + טבלה + אוטומטית + החלפת תצוגה + יצא עדכון ל־NewPipe! + יש לגעת כדי להוריד + הסתיים + בתור + מושהה + בתור + עיבוד מאוחר + תור + הפעולה נדחתה על ידי המערכת + ההורדה נכשלה + ההורדה הסתיימה + %s הורדות הסתיימו + יצירת שם ייחודי + שכתוב + כבר קיים קובץ בשם הזה + אחת ההורדות הפעילות כבר נושאת את השם הזה + הצגת שגיאה + קוד + לא ניתן ליצור את הקובץ + לא ניתן ליצור את תיקיית היעד + ההרשאה נדחתה על ידי המערכת + החיבור המאובטח נכשל + לא ניתן למצוא את השרת + לא ניתן להתחבר לשרת + השרת לא שולח נתונים + "השרת לא מקבל הורדות רב ערוציות, מוטב לנסות שוב עם ‎@string/msg_threads = 1 " + הטווח המבוקש לא מתאים + לא נמצא + העיבוד המאוחר נכשל + פינוי ההורדות שהסתיימו + ניתן להמשיך את %s ההורדות הממתינות שלך דרך ההורדות + עצירה + מספר הניסיונות החוזרים המרבי + מספר הניסיונות החוזרים המרבי בטרם ביטול ההורדה + להשהות בעת מעבר לתקשורת נתונים סלולרית + הורדות שלא ניתן להשהות יופעלו מחדש + \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index bca7a62cc..d78e37403 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -1,4 +1,4 @@ - + %1$s दृश्य %1$s को प्रकाशित @@ -12,7 +12,7 @@ सेटिंग्स ब्राउज़र चुनें स्क्रीन रोटेशन - NewPipe पॉपअप मोड + नयूपाइप पॉपअप मोड सदस्य बनें सदस्यता ली चैनल सदस्यता रद्द करी गयी @@ -25,11 +25,11 @@ ऑडियो हलका काली - इतिहास और कैच + पूर्व और कैश डाउनलोड - अगला वीडियो + अगला वीडियो और ऑडियो - इतिहास और कैच + इतिहास और कैश भंडार बैकग्राउंड में चल रहा है कोई दर्शक नहीं कोई वीडियो नहीं है @@ -48,7 +48,7 @@ इतिहास खोजा जा चूका है विडियो जो देख लिए गए है - इतिहास disable है + इतिहास बंद है इतिहास इतिहास खाली है इतिहास साफ़ हो चुकी है @@ -60,7 +60,7 @@ क्या आप का मतलब %1$s है? शेयर करें अन्य वीडियो प्लेयर उपयोग करें - यह विकल्प चुनने से कुछ वीडियो से ध्वनि नहीं आएगी + कुछ रेसोल्युशनस में नहीं आएगी अन्य ऑडियो प्लेयर उपयोग करें मुख्य सदस्यता को बदलने में असमर्थ है @@ -72,8 +72,8 @@ डाउनलोड किए गए विडियो फाइल को रखने की जगह वीडियो के लिए डाउनलोड पथ दर्ज करें - ऑडियो फाइल डाउनलोड करने की जगह - डाउनलोड किये गए ऑडियो फाइल की जगह + ऑडियो डाउनलोड फ़ोल्डर + डाउनलोड किये गए ऑडियो यहाँ है ऑडियो फाइल डाउनलोड करने के लिए जगह दर्ज करें अन्य अप्प के द्वारा NewPipe के आह्वान पर वीडियो तुरंत चले @@ -87,6 +87,8 @@ उस विकल्प को दिखाए जिसमे Kodi Media Center के जरिये विडियो प्ले किया जाता है डिफ़ॉल्ट ऑडियो का फॉर्मेट डिफ़ॉल्ट विडियो का फॉर्मेट + WebM - libre फॉर्मेट + M4A - बेहतर क्वालिटी एप्प का नया रूप काला विडियो पॉपअप की आकर और उसकी स्थति को याद रखे @@ -97,14 +99,15 @@ जब कुछ ढूंड रहे हो तो सुझाव दिखाये खोज के इतिहास को देखे खोज के query को फ़ोन की मेमोरी में ही रखे - देखे हुए वीडियो की सूची रखे + देखे हुए वीडियोस का रिकॉर्ड रखें जब फोकस मिले तो विडियो resume हो रूकावट आने पर भी विडियो को जारी रखे (जैसे - फ़ोन कॉल आये) \'अगला\' और \'पहले समान\' वीडियो दिखाए - \"संलग्न करने के लिए पकड़ें रहे\" दिखाए + \"जोड़ने के लिए पकड़ें रहे\" दिखाए जब बैकग्राउंड और पॉपअप बटन विडियो के विवरण पन्ने में दबाई जाए तो tip को दिखाए ये वाला URL इसमें नहीं चलेगा डिफ़ॉल्ट विषय की भाषा + प्लेयर चाल चलन पॉपअप @@ -115,7 +118,7 @@ पॉपअप प्लेयर की कतार पर चलाये विषयवस्तु - उम्र प्रतिबंदित से सम्बंधित विषयवस्तु दिखाये (जैसे - हिंसात्मक,कामोतोजनक) + उम्र प्रतिबंधित विषय वस्तु उम्र प्रतिबंदित विडियो है .इस प्रकार की विषयवस्तु को अनुमति देने के लिए Setting से संभव है | सीधा प्रसारण डाउनलोड @@ -146,10 +149,10 @@ विडियो के URL signature को decrypt नहीं कर सकते इस website का निरंक्षण नहीं कर सकते website का पूरी तरह से निरंक्षण नहीं हो सकता - विषयवस्तु उपलब्ध नहीं है + विषय वस्तु उपलब्ध नहीं है GEMA ने block किया है डाउनलोड मेनू को स्थापित नहीं कर सकते - यह सीधा प्रसारण है, जो की अभी पूरी तरह से काम नहीं कर रहा. + "सीधे प्रसारण के लिये फिलहाल समर्थन नहीं है " कोई भी विडियो नहीं मिल रहा फोटो को load नहीं कर सकते APP/UI टूट गया @@ -274,11 +277,11 @@ यंहा से चलाना शुरू करे बैकग्राउंड में चलाना शुरू करे पॉपअप में चलाना शुरू करे -स्ट्रीम करने के लिए प्लेयर उपलब्ध नहीं है (आप इसे चलाने के लिए VLC इंस्टॉल कर सकते हैं) - स्ट्रीम डाउनलोड करें। +स्ट्रीम करने के लिए प्लेयर उपलब्ध नहीं है (आप इसे चलाने के लिए VLC प्लेयर इंस्टॉल कर सकते हैं)। + स्ट्रीम डाउनलोड करें जानकारी दिखाएं - बुकमार्क्स + बुकमार्क किये गए प्लेलिस्टस में जोड़े @@ -313,7 +316,7 @@ NewPipe स्वयंसेवकों द्वारा विकसित किया जाता है जो आपको अच्छा अनुभव देने के लिए अपना खाली समय व्यतीत करते हैं। स्वयंसेवको को मदद भेजे, ताकि वह NewPipe को और अच्छा बना सके। वापस दे वेबसाइट - अधिक जानकारी और खबरों के लिए NewPipe की वेबसाइट पर जाएं । + अधिक जानकारी और खबरों के लिए न्यूपाइप की वेबसाइट पर जाएं। क्या आप इस आइटम को वॉच इतिहास से हटाना चाहते हैं? क्या आप वाकई इतिहास से सभी आइटंस हटाना चाहते हैं? पिछला चलाया गया @@ -377,7 +380,7 @@ छायाप्रारुप लोड करें तेजी से अचूक तलाश का प्रयोग करें अचूक खोज प्लेयर को कम परिशुद्धता के साथ तेजी से पदों की तलाश करने की अनुमति देता है - सभी थंबनेल को लोड होने से रोके और डेटा और मेमोरी का उपयोग घटाए। इसे बदलने से मेमोरी और डिस्क की छवि की कैश साफ़ हो जाएगी + बंद होने पे छोटी छवियां नहीं दिखेंगी। इससे डेटा और मेमोरी की बचत होगी। इसे बदलने से मेमोरी और डिस्क की छवि का भंडार भी साफ़ हो जाएगा। छवि कैश मिटा दिया कैश मेटाडेटा वाइप करें सभी कैश किए गए वेबपृष्ठ डेटा हटाएं @@ -396,12 +399,12 @@ देखे हुए का इतिहास साफ कर दिया गया। ढूंढने के इतिहास को साफ करें ढूंढे गए शब्दो का इतिहास साफ करता है - ढूंढने के इतिहास को पूरा साफ करें। + पूरे खोज इतिहास को मिटा दे \? ढूंढने के इतिहास को साफ कर दिया। - अमान्य डाइरेक्टरी + एसी कोई भी फ़ोल्डर मौजूद नहीं है अमान्य फाइल/कॉन्टेंट उदभावस्थान - फाइल मौजूद नही है या उसे पढने या लिखने की पर्याप्त अनुमति नही है - फाइल का नाम खाली नही हो सकता + फ़ाइल मौजूद नहीं है या उसे पढ़ने या लिखने की पर्याप्त अनुमति नही़ं है + फ़ाइल का नाम खाली नहीं हो सकता एक भूल हुई: %1$s डाउनलोड करने के लिए कोई स्ट्रीम उपलब्ध नही है @@ -409,9 +412,9 @@ इस फ़ाइल को चलाने के लिए कोई ऐप स्थापित नही है - NewPipe की गोपनीयता नीति - NewPipe परियोजना आपकी गोपनीयता को बहोत गंभीर रूप से लेता है। इसलिए, ऐप आपकी अनुमति के बिना कोई डेटा जमा नही करता। -\nNewPipe की गोपनीयता नीति विस्तार से समज़ाती है कि कोनसा डेटा भेजा या संग्रह किया जाता है जब आप क्रेश विवरण भेजते है। + न्यूपाइप की गोपनीयता नीति + न्यूपाइप परियोजना आपकी गोपनीयता को बहोत गंभीर रूप से लेता है। इसलिए, ऐप आपकी अनुमति के बिना कोई डेटा जमा नही करता। +\nन्यूपाइप की गोपनीयता नीति विस्तार से समज़ाती है कि कोनसा डेटा भेजा या संग्रह किया जाता है जब आप क्रेश विवरण भेजते है। गोपनीयता नीति पढ़े क्या आप सेटिंग्स भी आयात करना चाहते है? @@ -464,5 +467,5 @@ कोई नही पृष्ठभूमि प्लेयर जैसे मिनिमाइज करे पॉप अप प्लेयर जैसे मिनिमाइज करे - - + न्यूपाइप एक काॅपीलेफ़्ट फ़्री साॅफ़्टवेर है: इसे आप अपनी इच्छा के अनुसार इस्तेमाल, जाँच, बाँट तथा और बेहतर बना सकते है। खास तौर पर आप इसे फ़्री साॅफ़्टवेर फ़ाउंडेशन के द्वारा जारी जीएनयू जनरल पब्लिक लाइसेंस के तीसरे या उसके बाद आने वाले कोई भी वर्णन के शर्तों के मुताबिक फिर से बाँट या बदल सकते हैं। + \ 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 a6a532975..d6972a210 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -11,7 +11,7 @@ Preuzimanje Pretraživanje Postavke - Jeste li mislili: %1$s ? + Jeste li mislili: %1$s\? Podijeli putem Izaberi pretraživač rotacija @@ -75,7 +75,7 @@ Preuzmi Sljedeći videozapis - Prikaži sljedeće i slične videozapise + Prikaži \'sljedeće\' i \'slične\' videozapise URL nije podržan Zadani jezik sadržaja Video i zvuk diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2b811d53b..24662feed 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -10,7 +10,7 @@ Letöltés Keresés Beállítások - Erre gondolt: %1$s ? + Erre gondoltál: %1$s\? Megosztás ezzel Válasszon böngészőt forgatás @@ -27,8 +27,8 @@ WebM — szabad formátum M4A — jobb minőség Letöltés - Következő videó - A webcím nem támogatott + Következő + Nem támogatott webcím Külső videólejátszó használata Külső hanglejátszó használata @@ -45,7 +45,7 @@ Megjelenés Tartalom preferált nyelve További beállítások - Következő hasonló videók mutatása + \'Következő\' és \'Hasonló\' videók mutatása Sötét Világos @@ -60,15 +60,15 @@ Nem lehet létrehozni a letöltési mappát \'%1$s\' Letöltés mappa létrehozása \'%1$s\' Tartalom - Korhatáros tartalom mutatása + Korhatáros tartalom Hiba A tartalom nem elérhető GEMA által blokkolt Ez egy élő közvetítés, amely még nem támogatott. Automatikus lejátszás Videók automatikus lejátszása, ha a NewPipe egy másik alkalmazásból lett indítva - Korhatáros videó. A megtekintéséhez engedélyezze a korhatáros videókat a Beállításokban. - élő + Korhatáros videó mutatása. Ennek a tartalomnak az engedélyezése a \"Beállítások\"-ban lehetséges. + ÉLŐ JELENTÉS Információ: @@ -120,19 +120,19 @@ Nem támogatott szerver Új küldetés Csatornáról leiratkozva - Nem lehet megváltoztatni a feliratozást - "Nem lehet frissíteni a feliratkozást " + Nem sikerült megváltoztatni a feliratkozást + "Nem sikerült frissíteni a feliratkozást " Főoldal Feliratkozások - Könyvjelzők + Könyvjelzőzött lejátszási listák Újdonságok Háttér Felugró ablak - Nem található lejátszó alkalmazás(Feltelepítheti a VLC a lejátszáshoz) + 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 NEM lesz hang ha ez a beállítás be van kapcsolva + Néhány felbontásnál eltávolítja a hangot NewPipe felugró ablak mód Feliratkozás Feliratkozva @@ -175,13 +175,13 @@ Csak egyszer NewPipe Értesítés - Értesítések a NewPipe Háttér- és felugró ablak lejátszójához + Értesítések a NewPipe háttér- és felugró ablak lejátszójához [Ismeretlen] Adatbázis importálása Adatbázis exportálása - Felül fogja írni a jelenlegi előzményeket és feliratkozásokat + Felülírja a jelenlegi előzményeket és feliratkozásokat Előzmények, feliratkozások és lejátszási listák exportálása Kép betöltése sikertelen Alkalmazás/Kezelő felület összeomlott @@ -194,7 +194,7 @@ Mi:\\nKérés:\\nTartalom nyelve:\\nSzolgáltatás:\\nGMT Idő:\\nCsomag:\\nVerzió:\\nOperációs Rendszer verzió: Nincs találat Régi lejátszó használata - Adatfolyam fájl letöltése. + Adatfolyam fájl letöltése Hozzáadás Gyorsabb, de pontatlan tekerés használata @@ -218,11 +218,11 @@ Folytatás felugró ablakban Megtekintési előzmények törlése Eltávolítja a megtekintési előzményeket - Összes megtekintési előzmény törlése. + Törlöd az összes megtekintési előzményt\? Megtekintési előzmények törölve. Keresési előzmények törlése Eltávolítja a kereséshez használt kifejezéseket az előzményekből - Összes keresési előzmény törlése. + Törlöd az összes keresési előzményt\? Keresési előzmények törölve. Lejátszási hiba történt Lejátszási hiba helyreállítása @@ -432,4 +432,8 @@ Lejátszás folytatása a háttérben Lejátszás folytatása felugró ablakban - +Lejátszás folytatása a fókusz visszaszerzésekor + Mutassa a \"Tartsa lenyomva a hozzáadáshoz\" tippet + Sorba állítva a háttérben lejátszáshoz + Elforgatás + diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 1eef0ffca..9e8412e02 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -1,8 +1,8 @@ - + - Tekan pencarian untuk memulai - %1$s tayang - Diterbitkan pada %1$s + Sentuh pencarian untuk memulai + %1$s ditonton + Dipublikasikan tanggal %1$s Pasang Batal Buka di peramban @@ -20,72 +20,73 @@ Masukkan lokasi unduhan video Lokasi unduhan audio - Lokasi untuk menyimpan audio yang diunduh + Audio yang diunduh disimpan di sini Masukkan lokasi unduhan berkas audio Putar otomatis Putar video ketika NewPipe dijalankan dari aplikasi lain - Resolusi baku + Resolusi Putar dengan Kodi - Aplikasi Kore tidak ditemukan. Pasang Kore? + Apl Kore tidak ditemukan. Pasang Kore\? Tampilkan opsi \"Putar dengan Kodi\" - Tampilkan opsi untuk memutar video via media center Kodi + Tampilkan opsi untuk memutar video via Kodi Audio - Format audio baku - Tema + Format audio + WebM — format bebas + M4A — kualitas lebih baik Gelap Terang Unduh - Video berikutnya - Tampilkan video \'berikutnya\' dan \'serupa\' + Berikutnya + Tampilkan video \'Berikutnya\' dan \'Serupa\' URL tidak didukung Bahasa konten baku Video & Audio Tampilan Lainnya - Putar di latar belakang + Memutar di latar belakang Putar Konten - Tampilkan konten batasan usia - "Video Dibatasi Usia. Memperbolehkan ditonton dapat diatur lewat Pengaturan." + Konten yang dibatasi usia + Tampilkan video yang dibatasi usia. Membuka akses konten tersebut bisa dilakukan dari Pengaturan. Galat jaringan - Tidak bisa memuat semua Thumbnail - Maksud Anda: %1$s ? + Tidak bisa memuat semua thumbnail + Maksud anda: %1$s\? rotasi - langsung + LANGSUNG Unduhan Unduhan Laporan galat Galat - Tidak dapat mengurai situs web - Sama sekali tidak dapat mengurai situs web + Tidak bisa mengurai situs web + Tidak dapat menguraikan situs web sepenuhnya Konten tidak tersedia Diblokir oleh GEMA - Tidak bisa menyiapkan menu unduhan - Ini adalah SIARAN LANGSUNG, yang sekarang ini belum didukung. + Tidak bisa menyiapkan menu unduh + Siaran langsung belum didukung Tidak bisa memuat gambar Maaf, hal tersebut seharusnya tidak terjadi. - Lapor galat via surat elektronik + Lapor galat via surel Maaf, telah terjadi galat. - LAPORKAN + LAPOR Info: Yang terjadi: - Komentar Anda (dalam bahasa Inggris): + Komentar anda (dalam bahasa Inggris): Detail: - Pratinjau thumbnail video - Pratinjau thumbnail video + Thumbnail pratinjau video + Thumbnail pratinjau video Suka - Gambar thumbnail pengunggah + Thumbnail avatar pengunggah Tidak suka Gunakan Tor (Eksperimental) Paksa trafik unduhan melalui Tor untuk meningkatkan privasi (video stream belum didukung). - Laporkan sebuah Galat + Laporkan Galat Tidak bisa membuat direktori unduhan \'%1$s\' - Membuat direktori unduhan \'%1$s\' + Direktori unduhan dibuat \'%1$s\' Video Audio @@ -104,16 +105,16 @@ Nama berkas Galat Server tidak didukung - Berkas telah ada + Berkas sudah ada URL salah atau tidak tersedia layanan internet - NewPipe sedang Mengunduh + NewPipe Sedang Mengunduh Sentuh untuk detail Mohon tunggu… Disalin ke papan klip Silakan pilih direktori unduhan yang tersedia - Tidak ditemukan pemutar stream. Apakah Anda ingin memasang VLC? - Tidak bisa mendekrip tanda tangan URL video + Pemutar stream tidak ditemukan. Apakah anda ingin memasang VLC\? + Tidak bisa dekripsi tanda tangan URL video App/UI rusak Tidak bisa mendapatkan stream apapun Apa:\\nPermintaan:\\nBahasa Konten:\\nLayanan:\\nWaktu GMT:\\nPaket:\\nVersi:\\nVersi OS: @@ -121,14 +122,14 @@ Thread reCAPTCHA - Rintangan reCAPTCHA + Tantangan reCAPTCHA Meminta kode reCAPTCHA Hitam Semua - Saluran + Channel R J @@ -141,18 +142,18 @@ Buka di mode popup Izin ini dibutuhkan untuk -membuka di mode popup +\nmembuka di mode popup Mode popup NewPipe Memutar dalam mode popup Gunakan pemutar lama - Versi lama pemutar Mediaframework + Pemutar Mediaframework bawaan versi lama Dinonaktifkan - Format video baku + Format video - Resolusi popup baku + Resolusi popup Tampilkan resolusi yang lebih tinggi Hanya perangkat tertentu yang mendukung pemutaran video 2K/4K Latar Belakang @@ -162,15 +163,15 @@ membuka di mode popup Bersihkan Filter - Beberapa resolusi TIDAK akan memiliki suara ketika opsi ini diaktifkan + Menghapus audio pada BEBERAPA resolusi Ingat ukuran dan posisi popup Ingat ukuran dan posisi terakhir popup Popup Ubah ukuran - Kontrol isyarat gerak pemutar - Gunakan isyarat gerak untuk mengontrol kecerahan dan volume pemutar + Kontrol gestur pemutar + Gunakan gestur untuk mengontrol kecerahan dan volume pemutar Saran pencarian Tampilkan saran ketika mencari @@ -194,14 +195,14 @@ membuka di mode popup Tentang Kontributor Lisensi - Aplikasi streaming gratis dan ringan untuk Android. - Lihat di Github + Aplikasi streaming libre dan ringan untuk Android. + Lihat di GitHub Lisensi NewPipe - Terlepas apakah Anda memiliki ide untuk; terjemahan, perubahan desain, pembersihan kode, atau perubahan kode yang signifikan, segala bantuan akan selalu diterima. Semakin banyak akan semakin baik jadinya! + Terlepas apakah anda memiliki ide untuk; terjemahan, perubahan desain, pembersihan kode, atau perubahan kode yang signifikan, segala bantuan akan selalu diterima. Semakin banyak akan semakin baik jadinya! Baca lisensi Kontribusi -Berlangganan - Masih Berlangganan +Subscribe + Disubscribe Apa Yang Baru Lanjutkan saat fokus @@ -210,169 +211,169 @@ membuka di mode popup Utama Riwayat pencarian Simpan pencarian secara lokal - Riwayat & Tembolok + Riwayat & Cache Notifikasi NewPipe Riwayat Riwayat dinonaktifkan Riwayat Riwayat kosong Muat thumbnail - Nonaktifkan untuk berhenti memuat semua thumbnail dan menghemat penggunaan data dan memori. Mengubah ini akan menghapus tembolok gambar pada diska dan memory - Tembolok gambar dihapus + Matikan agar thumbnail tidak dimuat, menghemat penggunaan data dan memori. Perubahan menghapus cache gambar baik di memori dan disk. + Cache gambar dihapus Hapus tembolok metadata Buang semua data tembolok laman web - Tembolok metadata dihapus - Otomatis tambahkan stream yang terkait ketika memutar stream terakhir dalam antrean tanpa perulangan + Cache metadata dihapus + Otomatis tambahkan stream terkait ketika memutar stream terakhir dalam antrean tanpa perulangan. Simpan daftar video yang telah ditonton - Tampilkan tip \"tahan untuk menambahkan\" - Tampilkan tip ketika tombol latar belakang atau popup ditekan pada halaman detail video - Negara konten baku + Tampilkan tip \"Tahan untuk menambahkan\" + Tampilkan tip ketika tombol latar belakang atau popup disentuh pada halaman detail video + Negara konten Layanan Pemutar Perilaku - Riwayat & Tembolok + Riwayat & cache Debug - Mengantre di belakang pemutar - Mengantre di popup pemutar - Daftar Putar - Tidak jadi + Diantrekan di pemutar latar belakang + Diantrekan di pemutar popup + Playlist + Urungkan Putar Semua Selalu Hanya Sekali Berkas - "Notifikasi untuk Latar Belakang NewPipe dan Popup Pemutar " + Notifikasi untuk pemutar latar belakang dan popup NewPipe [Tidak diketahui] Ubah Orientasi - Kembali ke Layar Belakang - Kembali ke Popup - Kembali ke Utama + Alihkan ke Latar Belakang + Alihkan ke Popup + Alihkan ke Utama - Impor database - Ekspor database - Akan menimpa riwayat dan langganan kamu saat ini - Ekspor riwayat, daftat langganan dan daftar putar + Impor basis data + Ekspor basis data + Timpa riwayat dan subscription anda saat ini + Ekspor riwayat, subscription dan playlist Tidak bisa memutar stream ini - Galat yg tidak bisa dipulihkan terjadi di pemutar + Telah terjadi galat pemutar yang tidak bisa dipulihkan Memulihkan dari galat pemutar - Playar eksternal tidak mendukung tipe tautan ini + Pemutar eksternal tidak mendukung tipe tautan ini URL tidak valid - Stream video tidak ditemukan - Stream audio tidak ditemukan - Direktori tidak valid - Berkas/konten sumber tidak valid - Berkas tid tersedia atau tidak memiliki izin untuk membaca atau menulisnya + Tidak ditemukan stream video + Tidak ditemukan stream audio + Folder tidak ada + Tidak ada sumber berkas/konten + Berkas tidak tersedia atau tidak memiliki izin baca atau tulis Nama berkas tidak boleh kosong - Sebuah galat terjadi: %1$s + Telah terjadi galat: %1$s Tidak ada hasil - Tidak Ada Apapun Disini + Tidak ada apapun disini selain jangkrik Geser untuk ubah urutan - Tidak ada pelanggan + Tidak ada subscriber - %s pelanggan + %s subscriber - Tidak ada tampil + Belum ditonton - %s tampil + %s ditonton Tidak ada video - %s video + Video Buat Hapus Satu Hapus Semua - Diamkan + Abaikan Ubah nama Donasi - NewPipe dikembangkan oleh relawan yang menyisihkan waktu untuk memberi Anda pengalaman terbaik. Berikan dukungan kepada pengembang membuat NewPipe menjadi lebih baik lagi sembari menikmati secangkir kopi. + NewPipe dikembangkan oleh relawan yang menyisihkan waktu untuk memberi anda pengalaman terbaik. Segala dukungan kepada pengembang akan membuat NewPipe menjadi lebih baik sambil menikmati secangkir kopi. Beri dukungan - Situs + Situs Web Kunjungi situs web NewPipe untuk info dan berita. - Sudah dicari - Riwayat terhapus - Item terhapus - Kamu ingin menghapus item ini dari riwayat pencarian? - Kamu ingin menghapus item ini dari riwayat tontonan? - Kamu yakin ingin menghapus semua item dari riwayat? + Dicari + Riwayat dihapus + Item dihapus + Apakah Anda ingin menghapus item ini dari riwayat pencarian\? + Apakah Anda ingin menghapus item ini dari riwayat tontonan\? + Apakah Anda yakin ingin menghapus semua item dari riwayat\? Terakhir Diputar - Paling sering Diputar + Sering Diputar Konten laman utama Laman Kosong - Laman Kios - Laman Langganan + Laman Kiosk + Laman Subscription Laman Umpan - Laman Kanal - Pilih sebuah kanal - Tidak ada kanal yg dilanggani - Pilih sebuah kios - Ekspor berhasil - Impor berhasil + Laman Channel + Pilih channel + Belum ada subscription channel + Pilih kiosk + Diekspor + Diimpor Berkas ZIP tidak valid - Perhatian: Tidak dapat mengimpor semua berkas. - Ini akan menimpa pengaturan kamu saat ini. + Perhatian: Tidak bisa mengimpor semua berkas. + Ini akan menimpa pengaturan anda saat ini. - Kios - Tren + Kiosk + Trending Top 50 - Baru & Panas - Pemutar Latar Belakang - Popup Pemutar + Baru & panas + Pemutar latar belakang + Pemutar popup Hapus - Rincian + Detail Pengaturan Audio - Tahan Untuk Mengantre - Antre di Latar Belakang - Antre di Popup - Mulai Putar di Sini - Mulai Disini di Latar Belakang - Mulai Disini dengan Popup + Tahan untuk mengantre + Antre saat di latar belakang + Antre di popup baru + Mulai putar di sini + Mulai dari sini ketika di latar belakang + Mulai dari sini pada popup baru - Buka Menu - Tutup Menu - Sesuatu akan muncul di sini segera ;D + Buka Laci + Tutup Laci + Sesuatu akan segera muncul di sini ;D Pemutar video - Pemutar Latar Belakang - Popup pemutar - Selalu tanya + Pemutar latar belakang + Pemutar popup + Selalu bertanya Mendapatkan info… Memuat konten yang diminta - Buat Daftar Putar Baru - Hapus Daftar Putar - Ubah Nama Daftar Putar + Playlist Baru + Hapus + Ubah Nama Nama - Tambah Ke Daftar Putar - Atur sebagai Thumbnail Daftar Putar + Tambahkan Ke Playlist + Atur sebagai Thumbnail Playlist - Markah Daftar Putar + Markah Playlist Hapus Markah - Kamu ingin menghapus daftar putar ini? - Daftar putar dibuat - Ditambahkan ke daftar putar - Thumbnail daftar putar diubah - Tidak bisa menghapus daftar putar + Hapus playlist ini\? + Playlist dibuat + Diplaylist + Thumbnail playlist diubah. + Tidak bisa menghapus playlist. - Tidak Ada Takarir + Tidak ada Takarir Pas Isi Perbesar - Dihasilkan-otomatis + Otomatis dibuat Ukuran fon deskripsi Fon lebih kecil Fon normal @@ -381,51 +382,51 @@ membuka di mode popup Aktifkan LeakCanary Nightcore Bawaan -Tidak ada aplikasi pemutar stream (Anda bisa memasang VLC untuk memutarnya) - Unduh berkas stream. - Tidak bisa mengubah langganan +Pemutar stream tidak ditemukan (anda bisa memasang VLC untuk memutarnya). + Unduh berkas stream + Tidak bisa mengubah subscription Tampilkan info Tambahkan Ke - Hapus riwayat menonton - Hapus riwayat stream yang diputar - Hapus seluruh riwayat menonton. - Riwayat menonton dihapus. + Hapus riwayat tontonan + Hapus riwayat stream yang telah diputar + Hapus seluruh riwayat tontonan\? + Riwayat tontonan dihapus. Hapus riwayat pencarian - Hapus riwayat dari ketikan pencarian - Hapus seluruh riwayat pencarian. + Hapus riwayat lema pencarian + Hapus seluruh riwayat pencarian\? Riwayat pencarian dihapus. Tidak ada stream yang tersedia untuk diunduh - 1 item di hapus. + 1 item dihapus. - Tidak ada aplikasi terpasang untuk memutar file ini + Tidak ada aplikasi terpasang untuk memutar berkas ini - Sudah dilihat - Markah + Ditonton + Playlist Disimpan Antre otomatis stream berikutnya - Berhenti langganan channel ini - Tidak dapat memperbarui langganan - Langganan - Gunakan pencarian cepat yang tidak beraturan - Pencarian tidak beraturan memungkinkan pengguna untuk mencari posisi lebih cepat dengan ketepatan yang berkurang - NewPipe adalah perangkat lunak libre copyleft: Anda dapat menggunakannya, mempelajarinya, berbagi, dan meningkatkannya sesuai keinginan Anda. Secara khusus Anda dapat mendistribusikan ulang dan/atau memodifikasinya di bawah syarat-syarat Lisensi GNU General Public License yang diterbitkan oleh Free Software Foundation, baik versi 3 dari Lisensi, atau (sesuai pilihan Anda) versi yang lebih baru. - Apa Anda ingin juga mengimpor pengaturan? + Channel berhenti disubscribe + Tidak bisa memperbarui subscription + Subscription + Gunakan tinjau cepat tak pasti + Memungkinkan pengguna memilih posisi waktu video dengan cepat tetapi dengan tingkat presisi yang rendah + NewPipe adalah perangkat lunak libre copyleft: Anda bisa menggunakannya, mempelajarinya, berbagi, dan meningkatkannya. Secara khusus anda bisa mendistribusikan ulang dan/atau memodifikasinya dibawah syarat Lisensi Publik Umum GNU yang diterbitkan oleh Free Software Foundation, baik versi 3 dari Lisensi, atau (sesuai pilihan anda) versi yang lebih baru. + Apakah anda juga ingin mengimpor pengaturan\? - Tindakan \'buka\' yang disukai - Aksi bawaan ketika membuka konten — %s + Tindakan \'buka\' yang diinginkan + Tindakan baku ketika membuka konten — %s Takarir - Mengubah skala keterangan teks pemutar dan gaya latar belakang. Perlu memulai ulang aplikasi untuk melihat hasilnya + Ubah skala teks takarir pemutar dan gaya latar belakang. Perlu memulai ulang apl. - Pemantauan kebocoran memori dapat menyebabkan aplikasi menjadi tidak responsif saat terjadi dumping + Pemantauan kebocoran memori dapat menyebabkan apl menjadi tidak responsif saat heap dumping - Laporkan Kesalahan di-Luar-Siklus - Memaksa pelaporan pengecualian Rx yang tidak dapat dikirim di luar kepingan atau siklus hidup aktivitas setelah dibuang + Laporkan galat out-of-lifecycle + Paksa pelaporan eksepsi Rx yang tak terkirim di luar fragmen atau siklus hidup aktivitas setelah dibuang - Impor/Ekspor + Impor/ekspor Impor Impor dari Ekspor ke @@ -433,31 +434,120 @@ membuka di mode popup Mengimpor… Mengekspor… - Impor file + Impor berkas Ekspor sebelumnya - Tidak dapat mengimpor langganan - Tidak dapat mengekspor langganan + Tidak bisa mengimpor subscription + Tidak bisa mengekspor subscription - Impor daftar langganan YouTube dengan mengunduh file ekspor: -\n -\n1. Pergi ke URL ini: %1$s -\n2. Masuk ketika ditanya -\n3. Unduhan akan dimulai (Itulah file ekspornya) - Untuk mengimpor profil SoundCloud dengan mengetik URL atau ID Anda: -\n -\n1. Nyalakan \"mode desktop\" di web-browser (situsnya tidak tersedia untuk perangkat mobile) -\n2. Pergi ke URL ini: %1$s -\n3. Log in ketika ditanya -\n4. Salin URL profil Anda ketika dialihkan. - IDanda, soundcloud.com/idanda + Impor subscription YouTube dengan mengunduh berkas yang diekspor: +\n +\n1. Kunjungi URL ini: %1$s +\n2. Masuk ketika ditanya +\n3. Unduhan akan dimulai (itulah berkas ekspornya) + Impor profil SoundCloud dengan mengetik URL atau ID anda: +\n +\n1. Aktifkan \"mode desktop\" di peramban web (situs tidak tersedia untuk perangkat seluler) +\n2. Kunjungi URL ini: %1$s +\n3. Masuk ketika ditanya +\n4. Salin URL profil anda ketika dialihkan. + idAnda, soundcloud.com/idAnda - Perlu diingat operasi ini bisa menyedot jaringan yang mahal. + Perlu diingat operasi ini membutuhkan bandwidth yang besar. \n -\nApakah Anda ingin melanjutkan? +\nApakah anda ingin melanjutkan\? Kontrol Kecepatan Pemutaran Tempo Nada - Lepas kaitan (dapat menyebabkan distorsi) - + Batalkan tautan (dapat menyebabkan distorsi) + Channel + Playlist + Trek + Pengguna + Kebijakan Privasi NewPipe + Proyek NewPipe sangat memperhatikan privasi anda. Karena itu, apl tidak mengumpulkan data apapun tanpa sepengetahuan anda. +\nKebijakan privasi NewPipe menjelaskan secara detail data apa saja yang dikirim dan disimpan ketika anda mengirimkan laporan kerusakan. + Baca kebijakan privasi + Percepat saat diam + Langkah + Atur ulang + + Agar sesuai dengan Regulasi Perlindungan Data Umum Eropa (GDPR), dengan ini kami tarik perhatian anda ke kebijakan privasi NewPipe. Silakan baca dengan seksama. +\nAnda harus menerimanya untuk mengirimkan laporan bug kepada kami. + Setuju + Tolak + + Tanpa batas + Batasi resolusi saat menggunakan data seluler + Minimalkan saat beralih apl + Tindakan ketika beralih ke apl lain dari pemutar video utama — %s + Nihil + Minimalkan ke pemutar latar belakang + Minimalkan ke pemutar popup + Henti subscribe + Tab Baru + Pilih Tab + Tema + Kontrol gestur volume + Gunakan gestur untuk mengontrol volume pemutar + Kontrol gestur kecerahan + Gunakan gestur untuk mengontrol kecerahan pemutar + Pembaruan + Acara + Berkas dihapus + Notifikasi Pembaruan Apl + Notifikasi untuk versi NewPipe baru + Penyimpanan eksternal tidak tersedia + Belum bisa mengunduh ke kartu SD eksternal. Setel ulang lokasi folder unduhan\? + Menggunakan tab baku, ralat saat membaca tab yang disimpan + Kembali ke awal + Apakah anda ingin kembali ke awal\? + Jumlah pelanggan tidak tersedia + Tab apa yang ditampilkan di halaman utama + Pilihan + Konferensi + Pembaruan + Tampilkan pemberitahuan untuk meminta pembaruan aplikasi saat versi baru tersedia + Mode tampilan daftar + Daftar + Kisi + Otomatis + Alihkan Tampilan + Pembaruan NewPipe Tersedia! + Ketuk untuk mengunduh + Selesai + Di antrian + dijeda + antri + pengolahan-pasca + Antre + Tindakan ditolak oleh sistem + Pengunduhan gagal + Pengunduhan selesai + %s unduhan selesai + Hasilkan nama unik + Timpa + File yang diunduh dengan nama ini sudah ada + Ada unduhan yang sedang berlangsung dengan nama ini + Tunjukkan kesalahan + Kode + File tidak dapat dibuat + Folder tujuan tidak dapat dibuat + Izin ditolak oleh sistem + Koneksi aman gagal + Tidak dapat menemukan server + Tidak dapat terhubung ke server + Server tidak mengirim data + Server tidak menerima unduhan multi-utas, coba lagi dengan @string/msg_threads = 1 + Rentang yang diminta tidak memuaskan + Tidak ditemukan + Pengolahan-pasca gagal + Hapus unduhan yang sudah selesai + Lanjutkan %s transfer anda yang tertunda dari Unduhan + Berhenti + Percobaan maksimum + Jumlah upaya maksimum sebelum membatalkan unduhan + Berhenti ketika beralih ke data seluler + Unduhan yang tidak dapat dijeda akan dimulai kembali + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index fbc1c058a..b8cebdacb 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,4 +1,4 @@ - + %1$s visualizzazioni Pubblicato il %1$s @@ -10,7 +10,7 @@ Scarica Cerca Impostazioni - Intendevi %1$s? + Intendevi: %1$s\? Condividi con Scegli il browser rotazione @@ -25,8 +25,8 @@ Audio Formato audio predefinito Scarica - Prossimo video - Mostra \'prossimi\' video e video \'simili\' + Prossimo + Mostra video \'Prossimo\' e \'Simili\' URL non supportato Lingua predefinita per i contenuti Video e Audio @@ -41,7 +41,7 @@ Usa un lettore video esterno Usa un lettore audio esterno - Percorso degli audio scaricati + Cartella degli audio scaricati Cartella in cui salvare gli audio scaricati Inserisci la cartella per gli audio scaricati @@ -67,17 +67,17 @@ Impossibile impostare il menu di download - Questo è uno stream in diretta, il quale non è ancora supportato. + I contenuti in diretta non sono al momento supportati Contenuti - Mostra contenuti vietati ai minori - Questo video è riservato ad un pubblico maggiorenne. Per accedervi, abilita \"Mostra contenuti vietati ai minori\" nelle impostazioni. + Contenuti vietati ai minori + Mostra video riversati a un pubblico maggiorenne. Si possono abilitare dalle Impostazioni. Tocca Cerca per iniziare Riproduzione automatica Riproduci i video quando NewPipe viene aperto da un\'altra app - in diretta + IN DIRETTA Impossibile analizzare completamente il sito web Impossibile ottenere alcun flusso @@ -128,7 +128,7 @@ Cosa:\\nRichiesta:\\nLingua contenuto:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO: reCAPTCHA - reCAPTCHA + Risoluzione reCAPTCHA Nero @@ -153,7 +153,7 @@ Disattivato Usa il vecchio lettore multimediale -Alcune risoluzioni NON riprodurranno l\'audio se questa opzione viene abilitata +Non riproduce l\'audio con ALCUNE risoluzioni In sottofondo Popup @@ -255,8 +255,8 @@ Nessun video - %s video - %s video + Video + Video Elemento eliminato @@ -270,14 +270,14 @@ Pagina feed Pagina del canale Seleziona un canale - Non sei ancora iscritto a nessun canale + Nessuna iscrizione ad un canale Seleziona una locandina Locandina Tendenze Top 50 New & hot -Mostra il suggerimento \"tenere premuto per aggiungere video alla coda\" +Mostra il suggerimento \"Tenere premuto per aggiungere video alla coda\" Mostra suggerimento quando il pulsante per la riproduzione popup o in sottofondo viene premuto nella pagina dei dettagli del video In coda al lettore multimediale in sottofondo In coda al lettore multimediale a comparsa @@ -288,18 +288,18 @@ Ripristino dell\'errore del lettore multimediale Riproduzione in sottofondo - Riproduzione in modalità popup + Riproduzione in modalità a comparsa Rimuovi Dettagli Impostazioni audio - Tieni premuto per aggiungere alla coda + Tenere premuto per aggiungere alla coda [Sconosciuto] In coda in sottofondo - In coda nel Popup + In coda nel riproduttore a comparsa Inizia la riproduzione qui Inizia qui in sottofondo - Inizia qui nel Popup + Inizia qui nel riproduttore a comparsa Dona Sito web Visita il sito web di NewPipe per maggiori informazioni e novità. @@ -314,7 +314,7 @@ Servizio Apri il menu Chiudi il menu - Nessun lettore multimediale trovato (puoi installare VLC per riprodurlo) + Nessun lettore multimediale trovato. Puoi installare VLC per riprodurlo. Sempre Solo una volta @@ -332,7 +332,7 @@ Caricamento del contenuto richiesto Importa database Esporta database - Sovrascriverà la cronologia corrente e le iscrizioni + Sovrascrive la cronologia corrente e le iscrizioni Esporta la cronologia, le iscrizioni e le playlist Esportazione completa Importazione completa @@ -340,10 +340,10 @@ Attenzione: Impossibile importare tutti i file. Questa operazione sostituirà le tue impostazioni attuali. - Scarica il video. + Scarica il video Mostra informazioni - Segnalibri + Playlist preferite Aggiungi a @@ -362,9 +362,9 @@ Chiedi sempre - Crea nuova playlist - Elimina playlist - Rinomina playlist + Nuova scaletta + Elimina scaletta + Rinomina scaletta Nome Aggiunti alla playlist Imposta come miniatura della playlist @@ -372,11 +372,11 @@ Segnalibri playlist Rimuovi segnalibro - Vuoi eliminare questa playlist? + Eliminare questa scaletta\? Playlist creata - Aggiunti alla playlist - Miniatura della playlist cambiata - Impossibile eliminare la playlist + Aggiunti alla scaletta + Miniatura della scaletta cambiata. + Impossibile eliminare la scaletta. No sottotitoli @@ -402,18 +402,18 @@ Usa la ricerca rapida ma imprecisa La ricerca imprecisa permette al lettore multimediale di spostarsi nelle posizioni più velocemente con una precisione ridotta Metti in coda automaticamente il prossimo flusso - Aggiungi automaticamente un flusso correlato quando è in corso la riproduzione dell\'ultimo flusso in una coda non ripetitiva + Aggiungi automaticamente un flusso correlato quando è in corso la riproduzione dell\'ultimo flusso in una coda non ripetitiva. SINCRONIZZAZIONE File - Cartella non valida - Fonte del contenuto o file non valido - Il file non esiste o non si hanno i permessi sufficienti per leggerlo o scriverci + Nessuna cartella + Nessun file o cartella che contiene sorgenti + Il file non esiste o non si hanno i permessi sufficienti di scrittura o lettura Il nome del file non può essere vuoto Si è verificato un errore: %1$s - Importa/Esporta + Importa/esporta Importa Importa da Esporta in @@ -444,7 +444,7 @@ \n \nVuoi continuare? Carica miniature - Disabilita per interrompere il caricamento delle miniature, la loro archiviazione e l\'utilizzo della memoria. La modifica di questa opzione cancellerà la cache delle immagini in memoria e sul disco + Disabilita il caricamento delle miniature, risparmiando dati e memoria. La modifica dell\'opzione comporta la cancellazione della cache in memoria e sul disco. Pulizia della cache delle immagini completata Pulisci la cache dei metadati Rimuovi tutti i dati delle pagine web memorizzati nella cache @@ -461,21 +461,21 @@ Azione predefinita all\'apertura del contenuto — %s Sottotitoli - Modifica la dimensione e gli stili di sfondo dei sottotitoli. Richiede il riavvio dell\'app per rendere effettive le modifiche + Modifica la dimensione e gli stili di sfondo dei sottotitoli. Per applicare le modifiche è richesto un riavvio. Nessuna app installata per riprodurre questo file Pulisci cronologia visualizzazioni Elimina la cronologia dei flussi riprodotti - Elimina l\'intera cronologia visualizzazioni. + Elimina l\'intera cronologia delle visualizzazioni\? Cronologia visualizzazioni eliminata. Pulisci cronologia delle ricerche Cancella la cronologia dei termini di ricerca - Elimina l\'intera cronologia delle ricerche. + Elimina l\'intera cronologia delle ricerche\? Cronologia delle ricerche eliminata. 1 elemento eliminato. - NewPipe è un software libero con licenza copyleft: puoi usarlo, studiarlo, condividerlo e migliorarlo a tuo piacimento. In particolare, è possibile ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License pubblicata dalla Free Software Foundation, sia nella versione 3 della Licenza, sia (a propria discrezione) in qualsiasi versione successiva. + NewPipe è un software libero con licenza copyleft: si può utilizzarlo, studiarlo, condividerlo e migliorarlo a proprio piacimento. In particolare, è possibile ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License pubblicata dalla Free Software Foundation, sia nella versione 3 della Licenza, sia (a propria discrezione) in qualsiasi versione successiva. Vuoi anche importare le impostazioni? Informativa sulla privacy @@ -493,8 +493,8 @@ Step Reset - Minimizza al cambio applicazione - Azione quando si passa ad un\'altra applicazione dal lettore video principale — %s + Minimizza al cambio dell\'applicazione + Azione quando si passa ad un\'altra app dal lettore video principale — %s Nessuna Minimizza al lettore in sottofondo Minimizza al lettore popup @@ -503,4 +503,68 @@ Playlist Tracce Utenti - + Disiscriviti + Nuova scheda + Scegli scheda + Movimenti per il controllo del volume + Utilizza i movimenti per controllare il volume del riproduttore + Movimenti per la gestione della luminosità + Utilizza i movimenti per controllare la luminosità del riproduttore + Aggiornamenti + File eliminato + Notifiche di aggiornamenti dell\'applicazione + Notifiche per una nuova versione di NewPipe + Archiviazione esterna non disponibile + Download sulla memoria esterna SD ancora non disponibile. Reimpostare la posizione della cartella di download\? + Utilizzando le schede predefinite, c\'è stato un errore durante la lettura delle schede salvate + Ripristina predefiniti + Davvero ripristinare i predefiniti\? + Contatore degli iscritti non disponibile + Quali schede sono mostrate nella pagina principale + Selezione + Aggiornamenti + Mostra una notifica per suggerire l\'aggiornamento dell\'app se una nuova versione è disponibile + Visualizzazione a lista + Lista + Griglia + Automatico + Cambia vista + Aggiornamento di NewPipe disponibile! + Premi per scaricare + Finito + In coda + in pausa + in coda + post-processo + Coda + Azione negata dal sistema + Download fallito + Download finito + %s download finiti + Genera un nome unico + Sovrascrivi + Esiste già un file scaricato con lo stesso nome + C\'è un download in progresso con questo nome + Mostra errore + Codice + Impossibile creare il file + Impossibile creare la cartella di destinazione + Permesso negato dal sistema + Connessione sicura fallita + Impossibile trovare il server + Impossibile connettersi al server + Il server non invia dati + Il server non accetta download multipli, riprovare con @string/msg_threads = 1 + Intervallo richiesto non soddisfatto + Non trovato + Post-processing fallito + Pulisci i download completati + Continua i %s trasferimenti in corso dai Download + Ferma + Tentativi massimi + Tentativi massimi prima di cancellare il download + Metti in pausa quando si usano i dati mobili + I download che non possono essere messi in pausa verranno ravviati + Eventi + Conferenze + \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b73d150e3..c53c401a0 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1,4 +1,4 @@ - + %1$s に公開 動画プレイヤーが見つかりません。VLC を入手しますか? @@ -9,7 +9,7 @@ 保存 検索 設定 - もしかして: %1$s + もしかして: %1$s? 共有 ブラウザを選択 回転 @@ -24,7 +24,7 @@ 音楽 デフォルトの音楽形式 保存 - 次の動画 + 「次の動画」と「関連動画」を表示 URLは使用できません 優先言語 @@ -52,14 +52,14 @@ ネットワークエラー 音楽を保存する場所 - 音楽を保存する場所 + ダウンロードした音楽をここに保存します 音楽ファイルをダウンロードする場所を入力して下さい。 保存場所 \'%1$s\' を作成できません 保存場所 \'%1$s\' を作成しました エラー 全てのサムネイルを読み込むことができません - 動画の URL 署名を復号できませんでした + 動画のURLを復号できませんでした Webサイトを解析できませんでした コンテンツが利用できません GEMA にブロックされました @@ -71,14 +71,14 @@ コンテンツ - 年齢制限のあるコンテンツを表示する - この動画には年齢制限があります。視聴するには設定から制限を解除して下さい。 + 年齢制限のあるコンテンツ + この動画には年齢制限があります。視聴するには設定から制限を解除して下さい。 ウェブサイトを完全には解析できませんでした 動画を取得できませんでした 申し訳ありません。発生すべきでものではありませんでした。 メールで不具合を報告 - 申し訳ありません。いくつかのエラーが発生しました。 + 申し訳ありません、不具合が発生しました 報告 情報: 何が起こりましたか: @@ -119,8 +119,8 @@ クリップボードにコピーしました ダウンロードフォルダを選択して下さい - 保存 - 保存 + ダウンロード + ダウンロード 不具合報告 画像を読み込みできません @@ -175,13 +175,13 @@ ポップアップ サイズを変更 - このオプションが有効になっているとき、一部の解像度では音声がありません + 一部の解像度では音声がありません プレーヤーのジェスチャー コントロール ジェスチャーを使用してプレーヤーの明るさと音量をコントロールする 検索候補 検索時に候補を表示します -最適な解像度 +最高の解像度 NewPipe について 設定 @@ -224,7 +224,7 @@ 元に戻す すべて再生 - NewPipeの通知 + 通知 [不明] 動画の再生ができませんでした @@ -276,7 +276,7 @@ ポップアップ再生に変更 メイン再生に変更 - 動画プレイヤーが見つかりません (VLCをインストールして再生できます) + 動画プレイヤーが見つかりません (VLCをインストールして再生できます)。 デフォルトのコンテンツの国 サービス 常に @@ -289,8 +289,8 @@ 再生エラーからの回復中 外部プレーヤーは、これらのタイプのリンクをサポートしていません 無効なURL - エクスポートが完了しました - インポートが完了しました + エクスポートが完了 + インポートが完了 有効な ZIP ファイルではありません 警告: すべてのファイルをインポートできませんでした。 これにより、現在の設定が上書きされます。 @@ -324,7 +324,7 @@ 動画が見つかりません 音声が見つかりません - 無効なディレクトリ + そのフォルダーはありません ファイルが存在しないか、ファイルへの読み書きができません ファイル名は空白にできません エラーが発生しました: %1$s @@ -342,9 +342,9 @@ すべてのアイテムを再生履歴から削除しますか? 常に確認 - 新規プレイリストを作成 - プレイリストを削除 - プレイリストの名前を変更 + 新規プレイリスト + 削除 + 変更 プレイリスト名 プレイリストに追加 プレイリストのサムネイルとして設定 @@ -355,8 +355,8 @@ このプレイリストを削除しますか? プレイリストが作成されました プレイリストに追加しました - プレイリストのサムネイルを変更しました - プレイリストが削除できませんでした + プレイリストのサムネイルを変更しました。 + プレイリストが削除できませんでした。 字幕なし @@ -378,8 +378,8 @@ テンポ 音程 デフォルト -バックグラウンド再生リストに追加されました - ポップアップ再生リストに追加されました +バックグラウンド再生の順番待ちに追加 + ポップアップ再生の順番待ちに追加 再生履歴を消去 再生した動画の履歴を削除します 再生履歴を削除しました。 @@ -398,11 +398,11 @@ プライバシーポリシーを確認 おおまかなシーク おおまかなシークを使用すると、正確さ下がりますが、高速なシークが可能になります - すべてのサムネイルの読み込みと保存を無効化します。このオプションを切り替えるとメモリおよびディスク上の画像キャッシュがクリアされます - 繰り返しでないキューの最後の動画を再生時、関連動画を自動的にキューに追加する - すべての再生履歴を削除します - すべての検索履歴を削除します - ファイル/コンテンツのソースが無効です + すべてのサムネイルの読み込みと保存を無効化します、このオプションを切り替えるとメモリおよびディスク上の画像キャッシュがクリアされます。 + 繰り返しでないキューの最後の動画を再生時、関連動画を自動的にキューに追加する。 + すべての再生履歴を削除します? + すべての検索履歴を削除します? + このファイル/コンテンツはありません 登録者数 %s 人 @@ -413,14 +413,14 @@ - %s 本の動画 + 本の動画 1 つのアイテムが削除されました 支援する NewPipe プロジェクトはあなたのプライバシーを非常に大切にしています。あなたの同意がない限り、アプリはいかなるデータも収集しません。NewPipe のプライバシー・ポリシーでは、クラッシュリポート送信時にどのような種類のデータが送信・記録されるかを詳細に説明しています。 - NewPipe は著作権が自由のソフトウェアです。自由であるとは、あなたは自分の自由意志で、ソフトウェアを自由に使ったり、自由に研究したり、自由に改良することができるということです。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。 + NewPipe は著作権が自由のソフトウェアです。あなたは自由にそれを使用し、研究し、そして改善することができます。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。 最終再生日時 最も再生した動画 @@ -436,7 +436,7 @@ 長押ししてキューに入れる バックグラウンド時にキューに入れる ポップアップ時にキューに入れる - ポップアップ時にここから開始 + 新ポップアップ時にここから開始 すぐにここに表示されます;D @@ -448,7 +448,7 @@ 埋める 自動生成 - プレーヤーのキャプション文字スケールと背景スタイルを変更します。有効にするにはアプリの再起動が必要です + プレーヤーのキャプション文字スケールと背景スタイルを変更します。有効にするにはアプリの再起動が必要です。 何もありません 保存したエクスポートファイルからYoutubeの購読をインポート: @@ -468,5 +468,88 @@ 何もしない バックグラウンドに変更 ポップアップに変更 - - + LeakCanary を有効にする + メモリリークの監視は、ヒープのダンピング時にアプリが無反応になる原因となります + ライフサイクルエラーの報告 + 破棄後のフラグメントまたはアクティビティライフサイクル外の到達不能RX例外を強制的に報告します + URL または ID を入力して SoundCloud プロファイルをインポートします: +\n +\n1. Web ブラウザーで \"デスクトップモード\" を有効にします (サイトは携帯デバイスで利用できません) +\n2. この URL に移動します: %1$s +\n3. 必要に応じてログインします +\n4. リダイレクトされたプロファイル URL をコピーします。 + あなたのID, soundcloud.com/あなたのid + この操作により通信料金が増えることがあることにご注意ください。 +\n +\n続行しますか\? + 再生速度制御 + リンク解除 (不備が生じる可能性があります) + 無音の間に早送り + ステップ + 購読解除 + 新しいタブ + タブを選択 + 更新 + 催し物 + 新しい NewPipe バージョンの通知 + 外部記憶装置きません + 既定値に戻す + 既定の設定を復元しますか\? + 加入者数は利用できません + 選択 + 会議 + ヨーロッパの一般データ保護規制(GDPR)に準拠するために、NewPipeの個人情報保護方針にご注意ください。よく読んでください。 +\nあなたは私たちにバグレポートを送るためにそれを受け入れなければなりません。 + 更新 + リスト ビュー モード + リスト + グリッド + 自動 + スイッチビュー + 利用可能なNewPipe更新! + ダウンロードするをタップ + 終了しました + 順番待ち + 一時停止 + 待ち行列 + 後処理 + キュー + システムによって拒否されたアクション + ダウンロードに失敗しました + ダウンロードが完了しました + %s 件のダウンロード終了 + 一意の名前を生成します + 上書き + この名前のファイルが既に存在します + この名前を持つ進行中のダウンロードがあります + エラーを表示します + コード + ファイルを作成できません + 宛先フォルダを作成できません + システムが拒否する許可 + 安全な接続に失敗しました + サーバが見つからなかった + サーバに接続できません + サーバーはデータを送信しません + サーバーは、マルチ スレッドのダウンロードを受け付けない、再試行してください @string/msg_threads = 1 + 必要な範囲が満たされていません + 見つかりません + 後処理失敗 + 明確な完成したダウンロード + 停止 + 最大再試行回数 + ダウンロードをキャンセルする前に試行の最大数 + 音量ジェスチャー制御 + ジェスチャーを使用して、プレーヤーの音量を制御します + 明るさジェスチャー制御 + ジェスチャーを使用して、プレーヤーの明るさを制御します + ファイルを削除しました + アプリの更新通知 + まだ外部 SD カードにダウンロードできません。ダウンロードフォルダーの場所をリセットしますか\? + デフォルトのタブを使用します。保存タブの読み取りエラーが発生しました + メインページに表示されるタブ + 新しいバージョンが利用可能なときにアプリの更新を確認する通知を表示します + ダウンロードから %s の保留中の転送を続行します + モバイルデータ通信に切り替え時に休止 + 休止できないダウンロードが再開されます + \ 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 34eb53c8a..bcaafbcfc 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1,4 +1,4 @@ - + 시청 횟수 %1$s %1$s에 업로드됨 @@ -10,7 +10,7 @@ 다운로드 검색 설정 - 혹시 이것을 검색하셨습니까?: %1$s ? + 혹시 이것을 검색하셨습니까\?: %1$s\? 다음으로 공유 브라우저 선택 회전 @@ -25,7 +25,7 @@ 오디오 기본 오디오 형식 다운로드 - 다음 비디오 + 다음 다음 및 유사한 비디오 표시 지원하지 않는 URL 입니다 기본 컨텐츠 언어 @@ -39,8 +39,8 @@ 외부 비디오 플레이어 사용 외부 오디오 플레이어 사용 - 오디오 다운로드 경로 - 다운로드된 오디오를 저장할 경로입니다 + 오디오 다운로드 폴더 + 다운로드된 오디오는 여기에 저장됩니다 오디오 파일 다운로드 경로를 입력하세요 테마 @@ -62,7 +62,7 @@ 자동으로 재생 NewPipe가 다른 앱으로부터 호출되었을 때 동영상을 재생합니다 컨텐츠 - 나이 제한이 있는 컨텐츠를 표시 + 연령 제한 컨텐츠 연령 제한 비디오입니다. 설정 메뉴에서 시청 허용 여부를 변경하실 수 있습니다. 라이브 @@ -74,7 +74,7 @@ 컨텐츠를 사용할 수 없습니다 GEMA에 의해 차단되었습니다 다운로드 메뉴를 설정할 수 없습니다 - 실시간 스트리밍 비디오는 아직 지원되지 않습니다. + 라이브 스트림은 아직 지원하지 않습니다 어떠한 스트림도 가져올 수 없습니다 죄송합니다. 오류가 발생했습니다. 이메일을 통해 오류 보고 @@ -101,7 +101,7 @@ 체크섬 팝업 모드에서 열기 - 이 옵션을 사용할 경우 일부 해상도에서 소리가 나지 않을 수 있습니다 + 일부 해상도에서 소리가 나지 않습니다 뉴파이프 팝업 모드 구독 구독됨 @@ -165,7 +165,7 @@ 이미지를 불러올 수 없습니다 앱/UI 충돌 - 이 스트림을 재생할 수 없습니다. + 이 스트림을 재생할 수 없습니다 복구할 수 없는 플레이어 오류가 발생했습니다 플레이어 오류로부터 복구 중 @@ -192,7 +192,7 @@ 비디오 없음 - %s 비디오 + 비디오 재생 @@ -214,7 +214,7 @@ \n열기 위해 필요합니다 로봇인지 확인 (reCAPTCHA) - reCAPTCHA Challenge 요청됨 + reCAPTCHA challenge 요청됨 다운로드 파일명에 허용되는 문자 @@ -239,7 +239,7 @@ 번역, 디자인, 코딩 등 다양한 기여를 언제나 환영합니다. 향상에 참여해주세요! GitHub에서 보기 기부 - 뉴파이프는 자원봉사자들이 자발적으로 여가 시간을 활용해 개발하고 있습니다. 이제 이러한 노력에 보답할 시간입니다! + 여러분의 사용자 경험을 위해 자원봉사자들이 시간을 들여 뉴파이프를 개발하고 있습니다. 뉴파이프를 개선하는데 참여하는 개발자들을 위하여 기부해 주세요. 보답하기 웹사이트 뉴파이프에 관한 최신 및 상세 정보를 얻으려면 웹사이트를 방문하세요. @@ -283,10 +283,10 @@ 여기서부터 백그라운드에서 재생 여기서부터 팝업에 재생 스트리밍 플레이어를 찾을 수 없습니다. VLC를 설치하면 플레이하실 수 있습니다 - 스트리밍 파일 다운로드하기. + 스트리밍 파일 다운로드하기 정보 보기 - 북마크 + 플레이리스트 북마크 이곳에 추가 @@ -308,8 +308,8 @@ 데이터베이스 가져오기 데이터베이스 내보내기 - 현재 시청 기록 및 구독 목록을 덮어쓰기 됩니다 - 시청 기록, 구독 목록과 재생목록을 내보냅니다. + 현재 시청 기록 및 구독 목록을 덮어쓰기 합니다 + 시청 기록, 구독 목록과 재생목록을 내보냅니다 외부 플레이어는 이러한 종류의 링크를 지원하지 않습니다 잘못된 URL 발견된 비디오 스트림 없음 @@ -348,9 +348,9 @@ 정보 가져오는 중… 요청한 콘텐츠를 로딩 중입니다 - 새로운 재생목록 만들기 - 재생목록 삭제 - 재생목록 이름 바꾸기 + 새로운 재생목록 + 삭제 + 이름 바꾸기 이름 재생목록에 추가 재생목록 썸네일로 설정 @@ -361,8 +361,8 @@ 이 재생목록을 삭제하시겠습니까? 재생목록 생성 완료 재생목록에 추가됨 - 재생목록 썸내일이 바뀜 - 재생목록 삭제 실패 + 재생목록 썸내일이 바뀜. + 재생목록을 삭제할 수 없습니다. 자막 없음 @@ -381,15 +381,15 @@ LeakCanary 할성화 힙 덤프 중 메모리 누수 점검으로 앱이 불안정해질 수 있습니다 - Out-of-Lifecycle 오류 보고 + out-of-lifecycle 오류 보고 프래그먼트 또는 버려진 액티비티 주기 밖에서 일어나는 전달할 수 없는 Rx 예외를 강제적으로 보고하기 파일 - 잘못된 디렉토리 + 폴더가 존재하지 않습니다 잘못된 파일/콘덴츠 소스 - 파일이 존재하지 않거나 읽기/쓰기 권환이 없습니다 - 파일 이름이 비어 있으면 안됩니다 + 파일이 존재하지 않거나 읽기/쓰기 권한이 없습니다 + 파일명이 비어 있으면 안됩니다 오류 발생: %1$s 가져오기/내보내기 @@ -423,8 +423,8 @@ \n \n계속하시겠습니까? 썸내일 로드하기 - 동영상 썸네일을 로드하지 않으며, 데이터와 메모리 사용을 최대한 줄입니다. 이 옵션을 -\n선택 시, 모든 메모리 캐시와 저장소 캐시를 삭제합니다. + 동영상 썸네일을 로드하지 않으며, 데이터와 메모리 사용을 최대한 줄입니다. 이 옵션을 +\n선택 시 모든 메모리 캐시와 저장소 캐시를 삭제합니다. 이미지 캐시 지워짐 캐시된 메타데이터 지우기 캐시된 모든 웹페이지 데이터 지우기 @@ -437,7 +437,7 @@ 기본 다운로드 가능한 스트림이 없습니다 - 이 파일을 재생할 수 있는 플레이어 앱이 없습니다. + 이 파일을 재생할 수 있는 플레이어 앱이 없습니다 선호하는 열기 동작 컨텐츠를 열 때 사용할 기본 동작 — %s @@ -448,12 +448,12 @@ 채널만 재생 목록만 시청 기록 삭제하기 - 동영상 시청 기록을 삭제합니다. - \'삭제\' 버튼을 누르면 모든 시청 기록이 삭제됩니다. + 동영상 시청 기록을 삭제합니다 + 모든 시청 기록을 삭제하시겠습니까\? 동영상 시청 기록이 삭제되었습니다. 검색 기록 삭제 - 검색 기록을 모두 삭제합니다. - \'삭제\' 버튼을 누르면 모든 검색 기록이 삭제됩니다. + 검색 기록을 모두 삭제합니다 + 모든 검색 기록을 삭제하시겠습니까\? 검색 기록이 삭제되었습니다. 뉴파이프 개인정보 보호 정책 뉴파이프 프로젝트는 사용자의 개인 정보 보호를 최우선으로 생각하며, 동의 없이 어떠한 정보도 수집하지 않습니다. @@ -470,4 +470,20 @@ 데이터 제한 없음 모바일 데이터 사용 시 화질 제한 - + 구독 해제 + 새 탭 + 탭 선택 + 제스쳐로 음량 조작 + 제스쳐를 사용해 플레이어의 음량을 조작 합니다 + 제스쳐로 밝기 조작 + 제스쳐를 사용해 화면 밝기를 조작합니다 + 업데이트 + 트랙 + 사용자 + 이벤트 + 파일 삭제됨 + 앱 업데이트 알림 + 새 뉴파이프 버전을 알림 + 외부 저장소 없음 + 다운로드할 SD 카드를 찾을 수 없습니다. 다운로드 폴더 경로를 초기화 하시겠습니까\? + \ No newline at end of file diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 812bd1534..47413c6c3 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -13,7 +13,7 @@ Превземи стрим датотека. Пребарај Поставки - Мислеше на: %1$s ? + Мислеше на: %1$s\? Сподели со Одбери пребарувач ротација diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index b228fb282..7c8b56bec 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -1,35 +1,468 @@ - -Ketuk carian untuk bermula - %1$s dilihat + +Tekan carian untuk bermula + %1$s tontonan Diterbitkan pada %1$s - Tiada pemain strim yang ditemui. Adakah anda mahu memasang VLC? - Tiada pemain strim yang ditemui (anda boleh memasang VLC untuk bermain) + Tiada pemain strim ditemui. Adakah anda mahu memasang VLC\? + Tiada pemain strim yang ditemui (anda boleh memasang VLC untuk memainkan). Pasang Batal Buka dalam pelayar Buka dalam mod popup Kongsi Muat turun - Muat turun fail strim. + Muat turun fail strim Carian Tetapan - Adakah anda maksudkan: %1$s ? + Adakah anda maksudkan: %1$s\? Berkongsi dengan Pilih pelayar putaran Guna pemain video luaran - Beberapa resolusi yang TIDAK akan mempunyai audio apabila opsyen ini diaktifkan + Menghapus audio pada SESETENGAH resolusi Gunakan pemain audio luaran - NewPipe mod popup + Mod popup NewPipe Langgan Dilanggan - Saluran tanpa langganan + Langganan saluran dihenti Tidak dapat menukar langganan Tidak dapat mengemaskini langganan Papar maklumat Utama Langganan - Penanda halaman - - + Penanda halaman Senarai main + Henti langganan + Tab Baru + Pilih Tab + Apa yang Baru + Latar Belakang + Popup + Tambahkan Ke + Lokasi muat turun video + Lokasi untuk menyimpan video yang dimuat turun + Memasukkan lokasi muat turun video + Lokasi muat turun audio + Audio yang dimuat turun disimpan sini + Memasukkan lokasi muat turun fail audio + Main secara automatik + Memain video apabila NewPipe dipanggil dari app lain + Resolusi utama + Resolusi popup utama + Papar resolusi yang lebih tinggi + Hanya peranti tertentu yang mampu bermain video 2K/4K + Main dengan Kodi + App Kore tidak dijumpai. Pasangkan\? + Paparkan opsyen \"Main dengan Kodi\" + Paparkan opsyen untuk memain video dengan Kodi + Audio + Format audio utama + Format video utama + Tema + Cerah + Gelap + Hitam + Mengingat saiz dan posisi popup + Mengingat saiz dan posisi popup terakhir + Gunakan tinjau laju tidak tepat + Membolehkan pemain untuk meninjau ke posisi lebih laju dengan kurang ketepatan + Muatkan thumbnail + Matikan untuk mengelakkan pemuatan thumbnail, menjimat penggunaan data dan memori. Perubahan akan menghapus cache imej dalam memori dan disk. + Cache imej dihapuskan + Hapuskan cache metadata + "Hapuskan semua cache data halaman web " + Cache metadata dihapuskan + Automatik beratur strim seterusnya + Tambahkan secara automatik strim berkaitan apabila memain strim terakhir dalam giliran tidak berulang. + Kontrol gestur volume + Gunakan gestur untuk melaraskan volume pemain + Kontrol gestur kecerahan + Gunakan gestur untuk melaraskan kecerahan pemain + Kontrol gestur pemain + Gunakan gestur untuk melaraskan kecerahan dan volume pemain + Cadangan carian + Tunjukkan cadangan semasa mencari + Sejarah carian + Simpan pertanyaan carian secara lokal + Sejarah & Cache + Simpan senarai video yang telah ditonton + Teruskan apabila fokus + Teruskan bermain selepas gangguan (contohnya panggilan telefon) + Muat turun + Seterusnya + Paparkan video \'Seterusnya\' dan \'Berkaitan\' + Tunjukkan tip \"Pegang untuk menambahkan\" + Tunjukkan tip apabila butang latar belakang atau popup ditekan pada halaman butiran video + URL tidak disokong + Negara kandungan utama + Perkhidmatan + Bahasa kandungan utama + Pemain + Tingkah laku + Video & audio + Sejarah & cache + Popup + Penampilan + Lain-lain + Debug + Kemas kini + Bermain di latar belakang + Bermain dalam mod popup + Beratur pada pemain latar belakang + Beratur pada pemain popup + Main + Kandungan + Kandungan terhad umur + Tunjukkan video terhad umur. Membenarkan bahan tersebut boleh dilakukan dari Tetapan. + LANGSUNG + Muat turun + Muat turun + Laporan ralat + Semua + Saluran + Saluran + Senarai main + Senarai main + + Video + + Trek + Pengguna + Peristiwa + Ya + Nanti + Dinyahdayakan + Penapis + Segarkan + Bersihkan + Mengubah saiz + Resolusi terbaik + Undo + Fail dipadam + Mainkan Semua + Sentiasa + Hanya sekali + Fail + Pemberitahuan NewPipe + Pemberitahuan untuk pemain latar belakang dan pemain popup NewPipe + Pemberitahuan Kemas Kini App + Pemberitahuan untuk versi NewPipe baru + [Tidak diketahui] + Beralih Orientasi + Beralih ke Latar Belakang + Beralih ke Popup + Beralih ke Latar Utama + Import pangkalan data + Export pangkalan data + Timpa sejarah dan langganan semasa anda + Mengeksport sejarah, langganan dan senarai main + Hapuskan sejarah tontonan + Hapuskan sejarah strim yang telah dimain + Padamkan seluruh sejarah tontonan\? + Sejarah tontonan dipadamkan. + Hapuskan sejarah carian + Padamkan sejarah kata kunci carian + Padamkan seluruh sejarah carian\? + Sejarah carian dipadamkan. + Ralat + Penyimpanan luaran tidak tersedia + Tidak mampu Memuat turun ke kad SD luar. Tetapkan semula lokasi folder muat turun\? + Ralat rangkaian + Tidak dapat memuat semua thumbnail + Tidak dapat menyahsulit tanda tangan URL video + Tidak dapat menghuraikan laman web + Tidak dapat menghuraikan laman web sepenuhnya + Kandungan tidak tersedia + Disekat oleh GEMA + Tidak dapat menyediakan menu muat turun + Siaran langsung belum disokong + Tidak boleh mendapat sebarang strim + Tidak dapat memuat imej + App/UI terhempas + Tidak dapat memain strim ini + Ralat pemain yang tidak dapat dipulihkan telah berlaku + Memulihkan dari ralat pemain + Pemain luar tidak menyokong jenis pautan ini + URL tidak sah + Tiada strim video yang dijumpai + Tiada strim audio yang dijumpai + Tiada folder itu + Tiada fail/sumber kandungan itu + Fail tidak wujud atau tiada kebenaran untuk membaca atau menulis kepadanya + Nama fail tidak boleh kosong + Ralat berlaku: %1$s + Tiada strim yang tersedia untuk dimuat turun + Menggunakan tab utama, ralat semasa membaca tab tersimpan + Kembali kepada asal + Adakah anda mahu kembali kepada asal\? + Maaf, itu tidak sepatutnya berlaku. + Laporkan ralat melalui e-mel + Maaf, ada ralat yang berlaku. + LAPOR + Maklumat: + Apa yang berlaku: + Apa:\\nPermintaan:\\nKandungan +\nBahasa:\\nPerkhidmatan:\\nGMT +\nMasa:\\nPakej:\\nVersi:\\nVersi OS: + Komen anda (dalam bahasa Inggeris): + Butiran: + Thumbnail pratonton video + Thumbnail pratonton video + Thumbnail avatar pemuat + Suka + Tidak suka + Gunakan Tor + (Eksperimen) Memaksa memuat turun lalu lintas melalui Tor untuk meningkatkan privasi (video streaming belum disokong). + Laporkan Ralat + Laporan pengguna + Tiada keputusan + Tiada apa-apa di sini tetapi jangkrik + Seret untuk menyusun semula + Tidak dapat membuat direktori muat turun \'%1$s\' + Direktori muat turun dibuat \'%1$s\' + Video + Audio + Cuba semula + Kebenaran akses storan ditolak + K + J + B + Tiada pelanggan + + %s pelanggan + + Kira pelanggan tidak tersedia + Tiada tontonan + + %s tontonan + + Tiada video + Mula + Jeda + Main + Buat + Padam + Padamkan Satu + Padamkan Semua + Checksum + Buangkan + Namakan semula + Misi baru + OK + Nama fail + Thread + Ralat + Server tidak disokong + Fail sudah wujud + URL yang salah atau Internet tidak tersedia + NewPipe sedang memuat turun + Ketuk untuk butiran + Sila tunggu… + Disalin ke papan klip + Sila pilih folder muat turun yang tersedia + Kebenaran ini diperlukan untuk +\nbuka dalam mod popup + 1 item dipadamkan. + reCAPTCHA + Cabaran reCAPTCHA + Meminta kod reCAPTCHA + Muat turun + Karakter yang dibenarkan dalam nama fail + Karakter tidak sah digantikan dengan nilai ini + Karakter pengganti + Huruf dan angka + Karakter yang paling istimewa + Tiada app dipasang untuk memainkan fail ini + Tentang NewPipe + Tetapan + Tentang + Lesen Pihak Ketiga + © %1$s oleh %2$s di bawah %3$s + Tidak dapat memuatkan lesen + Buka laman web + Tentang + Penyumbang + Lesen + Aplikasi strim yang percuma dan ringan untuk Android. + Sumbang + Sama ada anda mempunyai idea; terjemahan, perubahan reka bentuk, pembersihan kod, atau perubahan kod sebenar yang berat-bantuan sentiasa dialu-alukan. Semakin banyak yang dilakukan semakin baik! + Lihat di GitHub + Derma + NewPipe dibangunkan oleh sukarelawan menghabiskan masa membawa pengalaman terbaik. Beri balik untuk membantu pemaju membuat NewPipe lebih baik sambil menikmati secawan kopi. + Bagi balik + Laman Web + Lawati Laman Web NewPipe untuk maklumat lanjut dan berita. + Dasar Privasi NewPipe + Projek NewPipe mengambil perhatian privasi anda dengan sangat serius. Oleh itu, aplikasi tidak mengumpulkan sebarang data tanpa persetujuan anda. +\nDasar privasi NewPipe menerangkan secara terperinci apa data dihantar dan disimpan apabila anda menghantar laporan ranap. + Baca dasar privasi + Lesen NewPipe + NewPipe adalah perisian copyleft percuma: Anda boleh menggunakan, berkongsi kajian dan memperbaikinya mengikut kehendak. Khususnya anda boleh mengagihkan semula dan / atau mengubahnya di bawah syarat GNU General Public License seperti yang diterbitkan oleh Free Software Foundation, sama ada versi 3 dari Lesen, atau (pada pilihan anda) versi yang lebih baru. + Baca lesen + Sejarah + Dicari + Ditonton + Sejarah dimatikan + Sejarah + Sejarah kosong + Sejarah dihapuskan + Item dipadamkan + Adakah anda mahu memadamkan item ini dari sejarah carian\? + Adakah anda mahu memadamkan item ini dari sejarah tontonan\? + Adakah anda pasti mahu memadamkan semua item dari sejarah\? + Terakhir dimainkan + Kebanyakan dimainkan + Kandungan halaman utama + Tab apa yang ditunjukkan pada halaman utama + Pemilihan + Halaman Kosong + Halaman Kiosk + Halaman Langganan + Halaman Feed + Halaman Saluran + Pilih saluran + Belum ada langganan saluran + Pilih kiosk + Dieksport + Diimport + Tiada fail ZIP yang sah + Amaran: Tidak dapat mengimport semua fail. + Ini akan menimpa tetapan semasa anda. + Adakah anda juga mahu mengimport tetapan\? + Kiosk + Sohor Kini + Top 50 + Baru & panas + Persidangan + Pemain latar belakang + Pemain popup + Hapuskan + Butiran + Tetapan Audio + Pegang untuk beratur + Beratur apabila di latar belakang + Beratur pada popup baru + Mula bermain di sini + Mula di sini apabila di latar belakang + Mula di sini pada popup baru + Buka Laci + Tutup Laci + Sesuatu akan muncul di sini tidak lama lagi ;D + Tindakan \'buka\' yang diinginkan + Tindakan utama apabila membuka kandungan — %s + Pemain video + Pemain latar belakang + Pemain popup + Selalu bertanya + Mendapatkan maklumat… + Memuatkan kandungan yang diminta + Senarai Main Baru + Padam + Namakan semula + Nama + Tambah ke Senarai Main + Tetapkan sebagai Thumbnail Senarai Main + Menanda senarai main + Hapuskan Penanda Halaman + Padamkan senarai main ini\? + Senarai main dibuat + Ditambah ke senarai main + Thumbnail senarai main berubah. + Tidak dapat memadamkan senarai main. + Tiada Kapsyen + Fit + Isi + Zum + Dibina secara automatik + Kapsyen + Ubah suai skala teks kapsyen pemain dan gaya latar belakang. Memerlukan aplikasi dimulakan semula untuk mula berkuatkuasa. + Dayakan LeakCanary + Pemantauan kebocoran memori boleh menyebabkan aplikasinya menjadi tidak bertindak balas semasa heap dumping + Laporkan kesilapan out-of-lifecycle + Memaksa pelaporan Rx yang tidak dapat dihantar di luar fragmen atau kitaran hayat aktiviti selepas pelupusan + Import/eksport + Import + Import dari + Eksport ke + Mengimport… + Mengeksport… + Import fail + Eksport terdahulu + Tidak dapat mengimport langganan + Tidak dapat mengeksport langganan + Import langganan YouTube dengan memuat turun fail eksport: +\n +\n1. Pergi ke URL ini: %1$s +\n2. Log masuk apabila ditanya +\n3. Muat turun harus bermula (itulah file eksport) + Import profil SoundCloud dengan menaip sama ada URL atau ID anda: +\n +\n1. Dayakan \"mod desktop\" dalam pelayar web (laman web tidak tersedia untuk peranti mudah alih) +\n2. Pergi ke URL ini: %1$s +\n3. Log masuk apabila ditanya +\n4. Salin URL profil yang diarahkan ke. + idAnda, soundcloud.com/idanda + Ingatkan bahawa operasi ini boleh menggunakan banyak data. +\n +\nAdakah anda mahu meneruskan\? + Kawalan Kelajuan Pemain + Tempo + Nada + Nyahpaut (mungkin menyebabkan herotan) + Cepat ke hadapan semasa berdiam diri + Langkah + Tetapkan semula + Untuk mematuhi Peraturan Perlindungan Data Umum Eropah (GDPR), kami dengan ini menarik perhatian anda kepada dasar privasi NewPipe. Sila baca dengan teliti. +\nAnda mesti menerimanya untuk menghantar laporan bug kepada kami. + Terima + Tolak + Tiada had + Had resolusi apabila menggunakan data mudah alih + Kemas kini + Tunjukkan pemberitahuan untuk mengemaskini aplikasi apabila versi baru tersedia + Kurangkan apabila beralih app + Tindakan apabila beralih ke app lain dari pemain video utama — %s + Tiada + Kurangkan ke pemain latar belakang + Kurangkan ke pemain popup + Mod pandangan senarai + Senarai + Grid + Auto + Tukar Pandangan + Kemas kini NewPipe Tersedia! + Ketik untuk muat turun + Selesai + Dalam barisan + dijeda + telah beratur + pemprosesan-pasca + Beratur + Tindakan ditolak oleh sistem + Muat turun gagal + Muat turun selesai + %s muat turun selesai + Menjana nama yang unik + Timpa + Fail yang dimuat turun dengan nama ini sudah wujud + Terdapat muat turun yang sedang berjalan dengan nama ini + Tunjukkan kesilapan + Kod + Fail tidak boleh dibuat + Folder destinasi tidak boleh dibuat + Kebenaran ditolak oleh sistem + Sambungan selamat gagal + Tidak dapat mencari server + Tidak dapat menyambung ke server + Server tidak menghantar data + Server tidak menerima muat turun berbilang thread, cuba lagi dengan @string/msg_threads = 1 + Julat yang diminta tidak memuaskan + Tidak ditemui + Pemprosesan-pasca gagal + Hapuskan senarai muat turun yang selesai + Teruskan %s pemindahan anda yang menunggu dari muat turun + Berhenti + Percubaan maksimum + Jumlah percubaan maksimum sebelum membatalkan muat turun + Jeda semasa beralih ke data mudah alih + Muat turun yang tidak dapat dihentikan akan dimulakan semula + \ 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 4bb790b1b..baaa48ca8 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -1,4 +1,4 @@ - + %1$s visninger Publisert den %1$s @@ -21,8 +21,8 @@ Mappe lagrede nedlastinger skal puttes i Skriv inn nedlastingssti for videoer - Nedlastingssti for lyd - Sti å lagre nedlastet lyd i + Nedlastingsmappe for lyd + Nedlastet lyd lagres her Skriv inn nedlastingssti for lydfiler Forvalgt oppløsning @@ -37,8 +37,8 @@ Lys Last ned - Neste video - Vis \"neste\" og \"lignende\" videoer + Neste + Vis \"Neste\" og \"Lignende\" -videoer Nettadressen støttes ikke Foretrukket innholdsspråk Video og lyd @@ -62,8 +62,8 @@ Automatisk avspilling Spiller en video når NewPipe blir forespurt av et annet program Innhold - Vis innhold med aldersgrense - Videoen har aldersgrense. Skru på videoer med aldersgrenser i innstillingene først. + Aldersbegrenset innhold + Vis aldersbegrenset video. Å tillate slikt materiale kan gjøres fra innstillingene. Feil Kunne ikke laste inn alle miniatyrbilder Kunne ikke dekryptere signaturen til videoens nettadresse @@ -72,7 +72,7 @@ Innholdet er ikke tilgjengelig Blokkert av GEMA Kunne ikke sette opp nedlastingsmeny - Dette er en direkteoverføring. Disse støttes ikke enda. + Direktesendinger støttes ikke enda. Kunne ikke finne noen strømmer Beklager, dette skal ikke skje. Rapporter feil via e-post @@ -91,7 +91,7 @@ Audio Prøv igjen Tilgang til lagring nektet - direkteoverført + Direkteoverført Nedlastinger Nedlastinger @@ -110,7 +110,7 @@ Filnavn Tråder Feil - Tjener ustøttet + Ustøttet tjener Fila finnes allerede NewPipe laster ned Trykk for detaljer @@ -154,7 +154,7 @@ reCAPTCHA-oppgave forespurt Gammel innebygd Mediaframework-avspiller -Noen oppløsninger vil IKKE ha lyd når dette valget er påslått +Fjerner lyd ved NOEN oppløsninger Abonner Abonnert Kanalabonnent oppsagt @@ -233,8 +233,8 @@ Ingen videoer - %s video - %s videoer + video + videoer Vis på GitHub @@ -272,7 +272,7 @@ Detaljer Lydinnstillinger Hold for å legge i kø -Vis \"hold for å legge til\" -tips +Vis \"Hold for å legge til\" -tips Vis tips når bakgrunns- eller oppsårettsknapp trykkes på siden for videodetaljer Lagt i kø for bakgrunnsavspiller Lagt i kø for oppsprettsspiller @@ -284,11 +284,11 @@ Strømside Abonnerer ikke på noen kanaler enda På vei opp - Legg i bakgrunnskø - Legg i oppsprettskø + Legg i kø når henvist til bakgrunnen + Legg i kø ved nytt oppsprett Start avspilling her - Start her i bakgrunnen - Start her i oppsprettsvindu + Start her når i bakgrunnen + Start her ved nytt oppsprettsvindu Doner NewPipe utvikles av frivillige som bruker deres fritid til å gi deg den beste opplevelsen. Gi tilbake for å hjelpe utviklere å gjøre NewPipe enda bedre, mens de nyter en varm kopp kaffe. Bidra @@ -303,7 +303,7 @@ Åpne skuff Lukk skuff - Ingen strømmespiller installert (du kan installere VLC for å spille den) + Ingen strømmespiller installert (du kan installere VLC for å spille den). Alltid Kun én gang @@ -321,18 +321,18 @@ Laster forespurt innhold Importer database Eksporter database - Vil overstyre din nåværende historikk og abonnementsliste + Overstyrer din nåværende historikk og abonnementsliste Eksporter historikk, abonnementer og spillelister - Eksport fullført - Import fullført + Eksportert + Importert Ingen gyldig ZIP-fil ADVARSEL: Kunne ikke importere alle filer. Dette vil overskrive ditt nåværende oppsett. - Last ned strøm-fil. + Last ned strøm-fil Vis info - Bokmerker + Bokmerkede spillelister Legg til i @@ -351,9 +351,9 @@ Alltid spør - Opprett ny spilleliste - Slett spilleliste - Gi spilleliste nytt navn + Ny spilleliste + Slett + Gi nytt navn Navn Legg til i spilleliste Sett som miniatyrbilde for spilleliste @@ -361,11 +361,11 @@ Bokmerk spilleliste Fjern bokmerke - Ønsker du å slette denne spillelisten? + Slett denne spillelisten\? Spilleliste opprettet Lagt til i spilleliste - Miniatyrbilde for spilleliste endret - Kunne ikke slette spilleliste + Miniatyrbilde for spilleliste endret. + Kunne ikke slette spilleliste. Ingen bildetekster @@ -381,10 +381,10 @@ Feilretting Fil - Ugyldig mappe - Ugyldig fil/innholdskilde + Ingen slik mappe + Ingen slik fil/innholdskilde Filen finnes ikke eller så har du ikke tilgang til å lese eller skrive til den - Filnavn kan ikke være tomt + Filnavn kan ikke være tomt. En feil inntraff: %1$s Auto-generert @@ -426,18 +426,18 @@ Forvalg Tøm avspillingshistorikk Slett historikken for avspilte strømmer - Slett hele visningshistorikken. + Slett hele visningshistorikken\? Visningshistorikk slettet. Tøm søkehistorikk Sletter historikken for søkte nøkkelord - Slett hele søkehistorikken. + Slett hele søkehistorikken\? Søkehistorikk slettet. Ett element slettet. Inget program installert for avspilling av denne filen Undertekster - Endre undertekststørrelse og bakgrunnsstiler. Krever omstart av programmet for å tre i effekt + Endre undertekststørrelse og bakgrunnsstiler. Krever omstart av programmet for å tre i effekt. NewPipe er copyleft, fri programvare: Du kan bruke, studere og forbedre etter egen vilje. Spesifikt kan du redistribuere og/eller modifisere det i henhold til vilkårene gitt i GNU General Public-lisensen, som publisert av Free Software Foundation, enten versjon 3 av lisensen, eller (etter eget ønske) enhver senere versjon. Ønsker du også å importere innstillinger? @@ -456,8 +456,8 @@ \n2. Logg inn når forespurt \n4. Kopier profil-nettadressen du ble videresendt til. Unøyaktig blafring tillater spilleren å blafre til posisjoner raskere med redusert nøyaktighet - Skru av for å stoppe alle miniatyrbilder fra innlasting og spare data og minnebruke. Endring av dette vil tømme både disk- og minne-hurtiglager - Legg til en relatert strøm ved avspilling av forrige strøm i ikke-repeterende kø + Skru av for å stoppe innlasting av miniatyrbilder, noe som sparer data- og minnebruk. Endring av dette vil tømme både disk- og minne-hurtiglager. + Legg til en relatert strøm ved avspilling av forrige strøm i ikke-repeterende kø. Minnelekkasjeoppsyn kan forårsake programmet å opptre uresponsivt under haugdumping Rapporter feil som opptrer utenfor sin levetid @@ -488,5 +488,68 @@ Hurtig foroverspoling ved stillhet Steg Tilbakestill - - + Opphev abonnement + Ny fane + Velg fane + Håndvendingskontroll for lydstyrke + Bruk håndvendinger for å kontrollere avspillerens lydstyrke + Håndvendingskontroll for lysstyrke + Bruk håndvendinger for å kontrollere avspillerens lysstyrke + Oppdateringer + Hendelser + Fil slettet + Programoppgraderingsmerknad + Merknader for nye NewPipe-versjoner + Ekstern lagring utilgjengelig + Nedlasting til eksternt SD-kort er ikke mulig enda. Tilbakestill plassering av nedlastingsmappe\? + Bruker forvalgte faner, feil under lagring av lagrede faner. + Gjenopprett forvalg + Ønsker du å gjenopprette alt til forvalgene\? + Abonnementsantall ikke tilgjengelig + Hvilke faner vises på hovedsiden + Utvalg + Konferanser + Oppdatering + Vis en merknad for spørring om programoppdatering når en ny versjon er tilgjengelig + Listevisningmodus + Liste + Rutenett + Auto + Veksle visning + Ny NewPipe-versjon tilgjengelig. + Trykk for å laste ned + Fullført + I kø + pauset + i kø + etterbehandling + + Handling avvist av systemet + Nedlasting mislyktes + Nedlasting fullført + %s nedlastinger fullført + Generer unikt navn + Overskriv + Nedlastet fil ved dette navnet finnes allerede + Nedlasting med dette navnet underveis allerede + Vis feil + Kode + Filen kan ikke opprettes + Målmappen kan ikke opprettes + Tilgang nektet av systemet + Sikker tilkobling mislyktes + Fant ikke tjeneren + Kan ikke koble til tjeneren + Tjeneren sender ikke data + "Tjeneren godtar ikke flertrådede nedlastinger, prøv igjen med @string/msg_threads = 1 " + Forespurt nummerområde kan ikke innvilges + Ikke funnet + Etterbehandling mislyktes + Tøm fullførte nedlastinger + Fortsett dine %s ventende overføringer fra Nedlastinger + Stopp + Maksimalt antall forsøk + Maksimalt antall tilkoblingsforsøk før nedlastingen avblåses + Pause ved veksling til mobildata + Nedlastinger som ikke kan pauses vil bli startet på nytt + \ No newline at end of file diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 9f1d796fd..6eff6b040 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -1,51 +1,46 @@ - -Tik op zoeken voor te beginnen + + + Tik op zoeken voor te beginnen %1$s keer bekeken Gepubliceerd op %1$s Gene speler met streamondersteuning gevonden. Wilt ge VLC installeren? - Gene speler met streamondersteuning gevonden (ge kunt VLC installeren voor het af te spelen) + Gene speler met streamondersteuning gevonden (ge kunt VLC installeren voor af te spelen). Installeren Annuleren In browser openen Openen in pop-upmodus Delen Downloaden - Streambestand downloaden. + Streambestand downloaden Zoeken Instellingen - Bedoelde ge: %1$s ? + Bedoelde ge: %1$s\? Delen met Kies nen browser rotatie Externe videospeler gebruiken - Sommige resoluties zullen geen geluid hebben als deze optie is ingeschakeld + Verwijdert het geluid bij SOMMIGE resoluties Externen audiospeler gebruiken NewPipe-pop-upmodus Abonneer Geabonneerd Abonnement opgezegd - Kan het abonnement niet veranderen - Kan het abonnement niet vernieuwen + Kan abonnement niet wijzigen + Kan abonnement niet bijwerken Info tonen - Start Abonnementen - Bladwijzers - + Bijgehouden afspeellijsten Nieuw - Achtergrond Pop-up Toevoegen aan - Downloadlocatie voor video’s Locatie voor gedownloade video’s in op te slaan Voer downloadlocatie in voor video’s - - Downloadlocatie voor audio - Locatie voor gedownloade muziek in op te slaan + Downloadmap voor audio + Gedownloade audio wordt hier opgeslagen Voer downloadlocatie voor audiobestanden in - Automatisch afspelen Speeld video’s af wanneer da NewPipe vanuit nen anderen app word g’opend Standaardresolutie @@ -68,15 +63,15 @@ Snel, minder exact spoelen gebruiken Minder exact spoelen laat de speler sneller posities zoeken met verminderde precisie Miniatuurvoorbeelden laden - Schakelt dit uit voor alle miniatuurvoorbeelden niet meer te laden; dit bespaart gegevens en geheugen. Het wijzigen van deze instelling wist het geheugen en de afbeeldingscache + Schakelt dit uit voor het laden van miniatuurvoorbeelden te verhinderen; dit bespaart mobiele gegevens en geheugen. Het wijzigen van deze instelling wist het geheugen en de afbeeldingscache. Afbeeldingscache gewist Gecachete metagegevens wissen Alle gecachete webpagina-gegevens wissen Metagegevens-cache gewist Volgende stream automatisch in wachtrij plaatsen - Automatisch ne gerelateerde stream toevoegen bij het afspelen van de laatste stream in een niet-herhalende wachtlijst - Bewegingscontrole - Gebruikt bewegingen voor helderheid en volume van de speler aan te passen + Automatisch ne gerelateerde stream toekennen bij het afspelen van de laatste stream in een niet-herhalende wachtlijst. + Veegbesturing + Gebruikt vegen voor de helderheid en het volume van de speler aan te passen Zoeksuggesties Toon suggesties bij zoeken Zoekgeschiedenis @@ -86,10 +81,10 @@ Hervat bij focus Ga verder met afspelen na onderbrekingen (zoals telefoongesprekken) Downloaden - Volgende video - Toond ‘volgende’ en ‘vergelijkbare’ video’s - Toond tip voor ingedrukt houden voor toe te voegen - Toon tip wanneer dat den achtergrond- of pop-upknop is ingedrukt op de video-detailpagina + Volgende + Toont ‘Volgende’ en ‘Vergelijkbare’ video’s + Toont tip ‘Ingedrukt houden voor toe te voegen’ + Toont tip wanneer dat den achtergrond- of pop-upknop wordt ingedrukt op de videogegevenspagina URL wordt niet ondersteund Standaardinhoudsland Dienst @@ -108,9 +103,9 @@ Toegevoegd aan wachtrij voor pop-upspeler Afspelen Inhoud - Toon inhoud met leeftijdsbeperking - Video heeft leeftijdsbeperking. Leeftijdsbeperkte video’s kunnen ingeschakeld worden in de instellingen. - live + Inhoud met leeftijdsbeperking + Toont video met leeftijdsbeperking. Toelaten van deze soort video’s kan ingeschakeld worden in de Instellingen. + LIVE Downloads Downloads Foutrapport @@ -130,20 +125,16 @@ Altijd Eenmalig Bestand - NewPipe-melding Meldingen voor NewPipe-achtergrond- en pop-upspelers - [Onbekend] - Oriëntatie wijzigen Verplaatsen naar achtergrond Verplaatsen naar pop-up Verplaatsen naar normaal - Databank importeren Databank exporteren - Dit gaat uw huidige geschiedenis en abonnementen overschrijven + Dit overschrijft uw huidige geschiedenis en abonnementen Exporteert geschiedenis, abonnementen en speellijsten Fout Netwerkfout @@ -154,7 +145,7 @@ Inhoud niet beschikbaar Geblokkeerd door GEMA Kon downloadmenu niet instellen - Dit is ne LIVESTREAM, deze worden nog niet ondersteund. + Livestreams worden nog niet ondersteund Kon geen streams vinden Kon afbeelding niet laden App/UI gecrasht @@ -165,13 +156,12 @@ Ongeldige URL Geen videostreams gevonden Geen audiostreams gevonden - Ongeldige map - Ongeldig bestand/ongeldigen inhoudsbron - Het bestand bestaat niet of ge beschikt niet over voldoende machtiging voor het te lezen/ernaar te schrijven - Den bestandsnaam mag niet leeg zijn + Deze map bestaat niet + Bestand/inhoudsbron bestaat niet + Het bestand bestaat niet of ge zijt onvoldoende gemachtigd voor het te lezen/dernaar te schrijven + Den bestandsnaam mag niet blanco zijn Der is een fout opgetreden: %1$s Geen streams beschikbaar voor downloaden - Sorry, dit zou niet mogen gebeuren. Fout melden via e-mail Sorry, der traden enkele fouten op. @@ -181,8 +171,6 @@ Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem: Uw opmerking (in het Engels): Details: - - Videovoorbeeldminiatuur Videovoorbeeldminiatuur Avatarminiatuur van uploader @@ -195,39 +183,32 @@ Geen resultaten Niks te zien Versleep voor de volgorde te wijzigen - Kan downloadmap ‘%1$s’ niet aanmaken Downloadmap ‘%1$s’ aangemaakt - Video Geluid Opnieuw proberen Toegang tot opslag geweigerd Gebruik oude speler Verouderden ingebouwde Mediaframework-speler - K M B - Geen abonnees - %s abonnee - %s abonnees - - + %s abonnee + %s abonnees + Geen weergaven - %s weergave - %s weergaven - - + %s weergave + %s weergaven + Geen video’s - %s video - %s video’s - - + Video + Video’s + Begin Pauzeren Afspelen @@ -238,10 +219,8 @@ Controlesom Sluiten Hernoemen - Nieuwe missie Oké - Bestandsnaam Threads Fout @@ -254,21 +233,16 @@ Gekopieerd naar klembord Kies een beschikbare downloadmap Deze toestemming is vereist voor te openen in pop-upmodus - reCAPTCHA reCAPTCHA-uitdaging reCAPTCHA-uitdaging gevraagd - Download Toegelaten tekens in bestandsnamen Ongeldige tekens worden vervangen door deze waarde Vervangend teken - Letters en cijfers Meeste speciale tekens - Genen app gevonden voor dit bestand mee af te spelen - Over NewPipe Instellingen Over @@ -290,8 +264,6 @@ Bezoekt de website van NewPipe voor meer informatie en ’t laatste nieuws. Licentie van NewPipe Licentie lezen - - Geschiedenis Gezocht Gekeken @@ -305,7 +277,6 @@ Wilt ge alle items uit uw geschiedenis verwijderen? Laatst afgespeeld Meest afgespeeld - Content van hoofdpagina Blanco pagina Kioskpagina @@ -315,12 +286,11 @@ Selecteer een kanaal Nog niet geabonneerd op een kanaal Selecteer ne kiosk - Export voltooid - Import voltooid + Geëxporteerd + Geïmporteerd Geen geldig ZIP-bestand Opgelet: kon niet alle bestanden importeren. Dit zal uw huidige configuratie overschrijven. - Kiosk Trending Top 50 @@ -330,76 +300,57 @@ Verwijderen Details Audio-instellingen - Houd ingedrukt voor toe te voegen aan wachtrij - Toevoegen aan wachtrij in achtergrond - Toevoegen aan wachtrij in pop-up - Hier beginnen spelen - Hier beginnen in achtergrond - Hier beginnen in pop-up - + Houdt ingedrukt voor toe te voegen aan wachtrij + Toevoegen aan wachtrij wanneer op de achtergrond + Toevoegen aan wachtrij bij nieuwe pop-up + Begint hier met afspelen + Begint hier met afspelen wanneer op de achtergrond + Begint hier met afspelen in nieuwe pop-up Menu openen Menu sluiten Hier zal der binnenkort iets verschijnen ;D - - Voorkeursactie voor openen Standaardactie bij openen van inhoud — %s - Videospeler Achtergrondspeler Pop-upspeler Altijd vragen - Info ophalen… Bezig me laden van gevraagden inhoud - - Nieuwen afspeellijst aanmaken - Afspeellijst verwijderen - Afspeellijst hernoemen + Nieuwen afspeellijst + Verwijderen + Hernoemen Naam Toevoegen aan afspeellijst Instellen als miniatuur voor afspeellijst - Afspeellijst toevoegen aan bladwijzers Bladwijzer verwijderen - - Wild ge dezen afspeellijst verwijderen? + Dezen afspeellijst verwijderen\? Afspeellijst aangemaakt Toegevoegd aan afspeellijst - Miniatuur voor afspeellijst gewijzigd - Kon afspeellijst nie’ verwijderen - + Miniatuur voor afspeellijst gewijzigd. + Den afspeellijst kon niet verwijderd worden. Geen bijschriften - Passen Opvullen Inzoomen - Automatisch gegenereerd - - Koppen - Koptekstgrootte en achtergrondstijlen wijzigen. Vereist nen herstart van den app - + Bijschriften + Bijschriftgrootte en achtergrondstijlen wijzigen. Vereist nen herstart van den app. LeakCanary inschakelen Het monitoren van geheugenlekken kan dervoor zorgen da’ den app nie’ goe meer reageerd - - Out-of-Lifecycle-fouten melden + Out-of-lifecycle-fouten melden Forceerd het melden van nie-bezorgbare Rx-uitzonderingen die gebeuren buiten fragments- of activiteitscyclus - Importeren/exporteren Importeren Importeren uit Exporteren naar - Bezig met importeren… Bezig met exporteren… - Bestand importeren Vorige exportering - Kon abonnementen nie importeren Kon abonnementen nie exporteren - Importeerd uw YouTube-abonnementen door het exportbestand te downloaden: \n \n1. Ga naar dit adres: %1$s @@ -412,30 +363,26 @@ \n3. Logd in op uwen account \n4. Kopieerd de koppeling van de pagina waarop da’ ge terechtkomd (da’s uwe profiel-URL). uwenID, soundbutt.com/uwenid - Let op: deze actie kan veel MB’s van uw netwerk gebruiken. \n \nWild ge doorgaan? - Afspeelsnelheidsbesturing Tempo Toon Ontkoppelen (kan ruis veroorzaken) Nightcore Standaard -Kijkgeschiedenis wissen + Kijkgeschiedenis wissen Verwijdert de geschiedenis van afgespeelde streams - Verwijdert de ganse kijkgeschiedenis. + De ganse kijkgeschiedenis verwijderen\? Kijkgeschiedenis verwijderd. Zoekgeschiedenis wissen Verwijdert de gebruikte zoektermen - Verwijdert de ganse geschiedenis. + De ganse zoekgeschiedenis verwijderen\? Zoekgeschiedenis verwijderd. 1 item verwijderd. - - NewPipe is vrije software: ge kund het gebruiken, bestuderen, delen en verbeteren zoveel als da’ ge maar wild. Ge kund het opnieuw uitgeven en/of aanpassen volgens de voorwaarden van de GNU General Public License, gepubliceerd door de Free Software Foundation, versie 3 van de licentie, of (indien gewenst) gelijk welke latere versie. + NewPipe is vrije software: ge kunt het gebruiken, bestuderen, delen en verbeteren zoveel als dat ge maar wilt. Ge kunt het terug uitgeven en/of aanpassen volgens de voorwaarden van de GNU General Public License, gepubliceerd door de Free Software Foundation, versie 3 van de licentie, of (indien gewenst) eender welke latere versie. Wild ge d’instellingen ook importeren? - Privacybeleid van NewPipe ’t NewPipe-project neemt uw privacy ter harte. Daarom verzameld den app geen gegevens zonder uw toestemming. \n’t Privacybeleid van NewPipe legd in detail uit welke gegevens da’ der worden verzonden en opgeslagen wanneer da’ g’een crashrappor indiend. @@ -444,20 +391,82 @@ \nGe moet ’t aanvaarden voor ons ’t bugrapport te sturen. Aanvaarden Weigeren -Onbeperkt + Onbeperkt Resolutie beperken bij gebruik van mobiele gegevens Minimaliseren bij overschakelen naar anderen app Actie bij overschakelen van videospeler naar anderen app — %s Geen Afspelen in achtergrond Afspelen in pop-up - -Doorspoelen tijdens stilte + Doorspoelen tijdens stilte Stap Standaardwaarden herstellen - Kanalen Afspeellijsten Nummers Gebruikers - + Abonnement opzeggen + Nieuw tabblad + Kiest een tabblad + Veegbesturing voor volume + Gebruikt vegen voor het volume van de speler aan te passen + Veegbesturing voor helderheid + Gebruikt vegen voor de helderheid van de speler aan te passen + Updates + Gebeurtenissen + Bestand verwijderd + Appupdatemelding + Meldingen voor nieuwe versies van NewPipe + Externe opslag niet beschikbaar + Downloaden naar externe SD-kaart is nog niet mogelijk. Downloadmap terug instellen\? + Standaardtabbladen worden gebruikt, fout bij het lezen van de opgeslagen tabbladen + Standaardinstellingen herstellen + Wilt ge de standaardinstellingen herstellen\? + Aantal abonnees niet beschikbaar + Welke tabbladen er worden weergegeven op de hoofdpagina + Selectie + Conferenties + Updates + Toont een melding voor den app bij te werken wanneer dat er een nieuwe versie beschikbaar is + Lijstweergavemodus + Lijst + Raster + Auto + Weergave wisselen + NewPipe-update beschikbaar! + Tikt voor te downloaden + Voltooid + In wachtrij + gepauzeerd + toegevoegd aan wachtrij + nabewerking + Wachtrij + Actie geweigerd door het systeem + Download mislukt + Download voltooid + %s downloads voltooid + Unieke naam genereren + Overschrijven + Der bestaat al een gedownload bestand met deze naam + Der is al een download met deze naam bezig + Foutmelding weergeven + Code + Het bestand kan niet aangemaakt worden + De doelmap kan niet aangemaakt worden + Toelating geweigerd door het systeem + Beveiligde verbinding is mislukt + Kon de server niet vinden + Kan geen verbinding maken met de server + De server verzendt geen gegevens + De server aanvaardt geen meerdradige downloads, probeert het opnieuw met @string/msg_threads = 1 + Gevraagd bereik niet beschikbaar + Niet gevonden + Nabewerking mislukt + Voltooide downloads wissen + Zet uw %s wachtende downloads verder via Downloads + Stoppen + Maximaal aantal pogingen + Maximaal aantal pogingen vooraleer dat den download wordt geannuleerd + Pauzeren bij overschakelen naar mobiele gegevens + Downloads die dat niet kunnen gepauzeerd worden gaan herstart worden + \ 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 32a361205..db3eb00df 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,4 +1,4 @@ - + %1$s keer bekeken Gepubliceerd op %1$s @@ -21,38 +21,34 @@ Afspelen met Kodi Kore-app niet gevonden. Installeren? \"Afspelen met Kodi\"-optie tonen - Toont een optie om een video af te spelen op een Kodi-mediastation + Toon een optie om een video af te spelen via Kodi media center Audio Standaardaudioformaat Downloaden - Volgende video + Volgende URL wordt niet ondersteund ‘volgende’ en ‘vergelijkbare’ video’s weergeven Standaardtaal voor inhoud Externe videospeler gebruiken Externe audiospeler gebruiken Audio en video - Videovoorbeeldminiatuur Videovoorbeeldminiatuur Gebruikersafbeelding van uploader Vind-ik-niet-leuks - Downloadlocatie voor audio - Locatie om gedownloade muziek in op te slaan + Downloadfolder voor audio + Gedownloade muziek is hier opgeslagen Voer downloadlocatie voor audiobestanden in - Thema Donker Licht - Uiterlijk Overig Speelt af op achtergrond Afspelen Inhoud - Inhoud met leeftijdsbeperking tonen - De video heeft een leeftijdsbeperking. Toestaan van dit soort video\'s kan worden ingeschakeld in de instellingen. - + Inhoud met leeftijdsbeperking + Toon video met leeftijdsbeperking. Toestaan van dit soort video’s kan worden ingeschakeld in de Instellingen. Fout Netwerkfout Kan niet alle miniatuurvoorbeelden laden @@ -61,13 +57,10 @@ Inhoud niet beschikbaar Geblokkeerd door GEMA Kan downloadmenu niet instellen - Dit is een LIVESTREAM; deze worden nog niet ondersteund. - - + Livestreams zijn nog niet ondersteund Vind-ik-leuks Tor gebruiken (Experimenteel) Dwing downloadverkeer door Tor voor verhoogde privacy (streamen van video\'s wordt nog niet ondersteund). - Kan downloadmap \'%1$s\' niet creëren Downloadmap \'%1$s\' gecreëerd Kan website niet volledig verwerken @@ -80,36 +73,29 @@ Wat er is gebeurd: Je opmerking (in het Engels): Details: - - Video Geluid Opnieuw proberen Druk op zoeken om te beginnen Automatisch afspelen Speelt video’s af als NewPipe vanuit een andere app wordt geopend - live + LIVE Downloads Downloads Foutrapport - Kan afbeelding niet laden App/UI gecrasht Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem: Meld een probleem Gebruikersrapport - Toegang tot opslag geweigerd Begin Pauzeren Afspelen Verwijderen Controlesom - Nieuwe missie Oké - - Bestandsnaam Threads Fout @@ -121,61 +107,44 @@ Even geduld… Gekopieerd naar klembord Kies een beschikbare downloadmap - - Zwart - reCAPTCHA reCAPTCHA-uitdaging reCAPTCHA-uitdaging gevraagd - Openen in pop-upmodus Alles Kanaal Ja Later - - K M B - Deze machtiging is vereist om te \nopenen in pop-upmodus - NewPipe-pop-upmodus - Speelt af in pop-upmodus Oude speler gebruiken Verouderde ingebouwde Mediaframework-speler Standaard videoformaat Uitgeschakeld - - Standaardresolutie van pop-up Hogere resoluties tonen 2K-/4K-video\'s worden slechts op sommige apparaten ondersteund Achtergrond Pop-up - Filter Verversen Wissen - Onthoud grootte en positie van pop-up Onthoud laatste grootte en positie van pop-up - Pop-up Bezig met wijzigen van grootte - - Sommige resoluties hebben GEEN geluid hebben als deze optie is ingeschakeld + Verwijdert geluid bij SOMMIGE resoluties Zoeksuggesties Toon suggesties bij zoeken - - Bewegingscontrole - Gebruik bewegingen om helderheid en volume van de speler aan te passen -Beste resolutie - + Gebaarbesturing + Gebruik gebaren om de helderheid en het volume van de speler aan te passen + Beste resolutie Over NewPipe Instellingen Over @@ -186,42 +155,34 @@ Over Bijdragers Licenties - Vrij en licht streamen voor Android. + Vrij en lichtgewicht streamen op 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! Licentie lezen Bijdragen -Download + Download Toegestane tekens in bestandsnamen Ongeldige tekens worden vervangen door deze waarde Vervangend teken - Letters en cijfers Speciaalste tekens - Abonneren Geabonneerd - Gedeabonneerd + Abonnement opgezegd Kan abonnement niet wijzigen Kan abonnement niet bijwerken - Startpagina Abonnementen - Nieuw - Zoekgeschiedenis Sla zoekopdrachten lokaal op Geschiedenis en cache Kijkgeschiedenis bijhouden Hervat bij focus Ga verder met afspelen na onderbrekingen (zoals telefoongesprekken) - - NewPipe-melding Meldingen voor NewPipe-achtergrond- en pop-upspelers - Geschiedenis Gezocht Bekeken @@ -229,46 +190,38 @@ Geschiedenis De geschiedenis is leeg Geschiedenis gewist - -Speler + Speler Gedrag Geschiedenis en cache Afspeellijst Ongedaan maken - Geen resultaten Niets, maar dan ook niets te zien - Geen abonnees - %s abonnee - %s abonnees - - + %s abonnee + %s abonnees + Geen weergaven - %s weergave - %s weergaven - - + %s weergave + %s weergaven + Geen video\'s - %s video - %s video’s - - + Video + Video’s + Item verwijderd -Wil je dit item verwijderen uit je zoekgeschiedenis? -Tip tonen voor ingedrukt houden om toe te voegen + Wil je dit item verwijderen uit je zoekgeschiedenis? + Toon tip \"Ingedrukt houden om toe te voegen\" Toon tip als achtergrond- of pop-upknop wordt ingedrukt op de videogegevenspagina Toegevoegd aan wachtrij voor achtergrondspeler Toegevoegd aan wachtrij voor pop-upspeler Alles afspelen - Deze stream kan niet worden afgespeeld Onherstelbare spelerfout opgetreden Bezig met herstellen na spelerfout - Inhoud van hoofdpagina Blanco pagina Kioskpagina @@ -278,7 +231,6 @@ Kies een kanaal Nog niet geabonneerd op een kanaal Kies een kiosk - Kiosk Populair Top 50 @@ -289,14 +241,13 @@ Details Audio-instellingen Houd ingedrukt om toe te voegen aan wachtrij -[Onbekend] - - Toevoegen aan wachtrij in achtergrond - Toevoegen aan wachtrij in pop-up + [Onbekend] + Toevoegen aan wachtrij wanneer in de achtergrond + Toevoegen aan wachtrij bij nieuwe pop-up Begin hier met afspelen - Begin hier met afspelen op achtergrond - Begin hier met afspelen in pop-up -Doneren + Begin hier met afspelen wanneer op de achtergrond + Begin hier met afspelen in nieuwe 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 Website @@ -307,121 +258,94 @@ Verplaatsen naar achtergrond Verplaatsen naar pop-up Verplaatsen naar hoofdvenster - Menu openen Menu sluiten - Geen speler met streamondersteuning gevonden (je kan VLC installeren om af te spelen) + Geen speler met streamondersteuning gevonden (je kan VLC installeren om af te spelen). Altijd Eenmalig - Externe spelers ondersteunen dit soort links niet Ongeldige URL Geen videostreams gevonden Geen audiostreams gevonden - Videospeler Achtergrondspeler Pop-upspeler Altijd vragen - Bezig met ophalen van informatie… Bezig met laden van gevraagde inhoud -Databank importeren + Databank importeren Databank exporteren Dit overschrijft je huidige geschiedenis en abonnementen Exporteer geschiedenis, abonnementen en afspeellijsten - Exporteren voltooid - Importeren voltooid + Geëxporteerd + Geïmporteerd Geen geldig ZIP-bestand Let op: niet alle bestanden konden worden geïmporteerd. Dit overschrijft je huidige configuratie. - - Streambestand downloaden. + Streambestand downloaden Informatie tonen - - Bladwijzers - + Bijgehouden afspeellijsten Toevoegen aan - Versleep om de volgorde te wijzigen - Creëren Eén verwijderen Alles verwijderen Sluiten Naam wijzigen - Wil je dit item verwijderen uit je kijkgeschiedenis? Wil je alle items verwijderen uit je geschiedenis? Laatst afgespeeld Meest afgespeeld - Altijd vragen - - Nieuwe afspeellijst creëren - Afspeellijst verwijderen - Afspeellijstnaam wijzigen + Nieuwe afspeellijst + Verwijderen + Naam wijzigen Naam Toevoegen aan afspeellijst Instellen als miniatuur voor afspeellijst - Afspeellijst toevoegen aan bladwijzers Bladwijzer verwijderen - - Wil je deze afspeellijst verwijderen? + Deze afspeellijst verwijderen\? Afspeellijst gecreëerd Toegevoegd aan afspeellijst - Miniatuur voor afspeellijst gewijzigd - De afspeellijst kan niet worden verwijderd - + Miniatuur voor afspeellijst gewijzigd. + De afspeellijst kan niet worden verwijderd. Geen bijschriften - Inpassen Opvullen Inzoomen - Lettergrootte van bijschrift Kleiner lettertype Normaal lettertype Groter lettertype - - Hier zal binnenkort iets verschijnen ;D -Foutopsporing + Hier zal binnenkort iets verschijnen ;D + Foutopsporing Automatisch gegenereerd LeakCanary inschakelen Het monitoren van geheugenlekken kan ervoor zorgen dat de app niet goed meer reageert - - Out-of-Lifecycle-fouten melden + Out-of-lifecycle-fouten melden Forceer het melden van niet-bezorgbare Rx-uitzonderingen buiten fragment of activiteitscyclus - -Snelle, minder exact spoelen gebruiken + Snelle, minder exact spoelen gebruiken Minder exact spoelen laat de speler sneller posities zoeken met verminderde precisie Volgende stream automatisch in wachtrij plaatsen - Automatisch een gerelateerde stream toekennen bij het afspelen van de laatste stream in een niet-herhalende afspeelwachtlijst + Automatisch een gerelateerde stream toekennen bij het afspelen van de laatste stream in een niet-herhalende afspeelwachtlijst. SYNCHRONISEREN - Bestand - - Ongeldige map - Ongeldig bestand/Ongeldige inhoudsbron + Deze map bestaat niet + Bestand/Inhoudsbron bestaat niet Het bestand bestaat niet of je bent onvoldoende gemachtigd om het te lezen/er naar te schrijven De bestandsnaam mag niet blanco zijn Er is een fout opgetreden: %1$s - - Importeren/Exporteren + Importeren/exporteren Importeren Importeren uit Exporteren naar - Bezig met importeren… Bezig met exporteren… - Bestand importeren Vorige exportering - De abonnementen kunnen niet worden geïmporteerd De abonnementen kunnen niet worden geëxporteerd - Importeer je YouTube-abonnementen door het exportbestand te downloaden: \n \n1. Ga naar dit adres: %1$s @@ -434,12 +358,11 @@ \n3. Log in op je account \n4. Kopieer de koppeling van de pagina waar je op terechtkomt (dat is je profiel-URL). jouwID, soundcloud.com/jouwid - Let op: deze actie kan veel MB’s van je mobiele netwerk gebruiken. \n \nWil je doorgaan? -Miniatuurvoorbeelden laden - Schakel dit uit om alle miniatuurvoorbeelden niet meer te laden; dit bespaart gegevens en geheugen. Het wijzigen van deze instelling wist het geheugen en de afbeeldingscache + Miniatuurvoorbeelden laden + Schakel dit uit om het laden van miniatuurvoorbeelden te verhinderen; dit bespaart mobiele data en geheugen. Het wijzigen van deze instelling wist het geheugen en de afbeeldingscache. Afbeeldingscache gewist Gecachete metagegevens wissen Alle gecachete webpagina-gegevens wissen @@ -450,30 +373,23 @@ Ontlinken (kan ruis veroorzaken) Nightcore Standaard -Voorkeursactie voor openen + Voorkeursactie voor openen Standaardactie bij openen van inhoud — %s - Geen streams beschikbaar voor downloaden - Bijschriften - Bijschriftgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app - + Bijschriftgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app. Er is geen app geïnstalleerd die dit bestand kan afspelen - Kijkgeschiedenis wissen Verwijdert de geschiedenis van afgespeelde streams - - Verwijdert de gehele kijkgeschiedenis. + De gehele kijkgeschiedenis wissen\? Kijkgeschiedenis gewist. Zoekgeschiedenis wissen Verwijdert de gebruikte zoektermen - Verwijdert de gehele geschiedenis. + De gehele zoekgeschiedenis wissen\? Zoekgeschiedenis gewist. 1 item verwijderd. - NewPipe is vrije software: je kan het gebruiken, bestuderen, delen en verbeteren zoveel je maar wil. Je kan het opnieuw uitgeven en/of aanpassen volgens de voorwaarden van de GNU General Public License, gepubliceerd door de Free Software Foundation, versie 3 van de licentie, of (indien gewenst) om het even welke latere versie. Wil je ook de instellingen importeren? - NewPipe\'s privacybeleid Het NewPipe-project neemt privacy serieus. Daarom verzamelt de app geen gegevens zonder jouw toestemming. \nNewPipe\'s privacybeleid legt gedetailleerd uit welke gegevens verstuurd en opgeslagen worden als je een crashrapport verstuurt. @@ -482,20 +398,82 @@ \nJe moet het beleid accepteren om ons het foutrapport te kunnen sturen. Accepteren Weigeren -Ongelimiteerd + Ongelimiteerd Resolutie beperken bij gebruik van mobiele gegevens - Minimaliseren bij overschakelen naar andere app + Minimaliseer bij overschakelen naar andere app Actie bij overschakelen van videospeler naar andere app — %s Geen Afspelen op achtergrond Afspelen in pop-upvenster - -Vooruitspoelen tijdens stilte + Vooruitspoelen tijdens stilte Stap Standaardwaarden - Kanalen Afspeellijsten Nummers Gebruikers - + Afmelden + Nieuw tabblad + Kies tabblad + Gebaarbesturing voor volume + Gebruik gebaren om het volume van de speler aan te passen + Gebaarbesturing voor helderheid + Gebruik gebaren om de helderheid van de speler aan te passen + Updates + Bestand verwijderd + Appupdatemelding + Meldingen voor nieuwe versies van NewPipe + Externe opslag niet beschikbaar + Downloaden naar externe SD-kaart is nog niet mogelijk. Downloadmap opnieuw instellen\? + Standaard tabbladen worden gebruikt, fout bij het lezen van de opgeslagen tabbladen + Standaardinstellingen herstellen + Wilt u de standaardinstellingen herstellen\? + Aantal abonnees niet beschikbaar + Welke tabbladen worden weergegeven op de hoofdpagina + Selectie + Updates + Toon een melding om de applicatie te updaten wanneer er een nieuwe versie beschikbaar is + Lijstweergavemodus + Lijst + Raster + Auto + Wissel van weergave + NewPipe-update beschikbaar! + Tik om te downloaden + Voltooid + In de wachtrij + gepauzeerd + aan de wachtrij toegevoegd + nabewerking + Wachtrij + Actie door het systeem geweigerd + Downloaden mislukt + Downloaden voltooid + %s downloads voltooid + Genereer een unieke naam + Overschrijven + Er bestaat al een gedownload bestand met deze naam + Er is een download aan de gang met deze naam + Toon foutmelding + Code + Het bestand kan niet worden gemaakt + De doelmap kan niet worden gemaakt + Toestemming door het systeem geweigerd + Beveiligde connectie is mislukt + Kon de server niet vinden + Kan niet met de server verbinden + De server verzendt geen gegevens + De server accepteert geen multi-threaded downloads, probeer het opnieuw met @string/msg_threads = 1 + Gevraagde bereik niet beschikbaar + Niet gevonden + Nabewerking mislukt + Voltooide downloads wissen + Zet je %s wachtende downloads voort via Downloads + Stop + Maximum aantal keer proberen + Maximum aantal pogingen voordat de download wordt geannuleerd + Pauzeren bij overschakelen naar mobiele data + Downloads die niet kunnen worden gepauzeerd zullen worden herstart + Gebeurtenissen + Conferenties + \ 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 d25acce8d..e1c03d75b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,62 +1,57 @@ - + - Dotknij wyszukaj, aby rozpocząć + Naciśnij Szukaj, aby zacząć Instaluj Anuluj Otwórz w przeglądarce Udostępnij Pobierz - Wyszukaj + Szukaj Ustawienia - Miałeś na myśli: %1$s ? + Miałeś na myśli: %1$s\? Udostępnij przez Wybierz przeglądarkę obrót Użyj zewnętrznego odtwarzacza wideo Użyj zewnętrznego odtwarzacza audio - %1$s wyświetleń Opublikowano %1$s - Nie znaleziono odtwarzacza strumieni. Zainstalować VLC? - Ścieżka zapisu wideo - Ścieżka zapisu pobranych wideo - Podaj ścieżkę zapisu wideo - - Ścieżka zapisu audio - Ścieżka zapisu pobranych audio - Podaj ścieżkę zapisu audio - + Nie znaleziono odtwarzacza strumieni. Czy chcesz zainstalować VLC\? + Ścieżka pobierania filmów + Ścieżka do przechowywania pobranych filmów + Podaj ścieżkę pobierania filmów + Ścieżka pobierania dźwięków + Pobrany dźwięk jest przechowywany tutaj + Podaj ścieżkę zapisu dźwięku Autoodtwarzanie Odtwórz wideo, kiedy NewPipe zostanie wywołany z innej aplikacji Domyślna rozdzielczość Odtwórz w Kodi - Aplikacja Kore nie została znaleziona. Zainstalować ją? + Nie znaleziono aplikacji Kore. Zainstalować ją\? Pokaż opcję „Odtwórz z Kodi” - Wyświetl opcję, aby odtworzyć wideo przez Kodi - Audio - Domyślny format audio + Wyświetl opcję odtwarzania filmów za pośrednictwem centrum multimedialnego Kodi + Dźwięk + Domyślny format dźwięku Motyw Ciemny Jasny - Pobrane - Następny film - Pokaż \'następne\' i \'podobne\' filmy - URL nieobsługiwany - Domyślny język zawartości + Następny + Pokaż \"następne\" i \"podobne\" filmy + Nieobsługiwany adres URL + Domyślny język treści Wideo i audio Wygląd Inne Odtwarzanie w tle Odtwórz Zawartość - Pokaż zawartość z ograniczeniem wieku - Film z ograniczeniami wiekowymi. Najpierw zezwól na filmy z ograniczeniem wiekowym w ustawieniach. + Treści z ograniczeniem wiekowym + Pokaż wideo z ograniczeniem wiekowym. Zezwalanie na takie materiały jest możliwe w Ustawieniach. Na żywo Pobrane Pobrane - Raport błędu - + Raport o błędach Błąd Błąd sieci Nie można załadować wszystkich miniatur @@ -66,7 +61,7 @@ Zawartość niedostępna Zablokowane przez GEMA Nie można ustawić menu pobierania - To jest film NA ŻYWO. Te nie są jeszcze wspierane. + Transmisje na żywo nie są jeszcze obsługiwane Nie można otrzymać żadnego strumienia Przepraszamy, to nie powinno mieć miejsca. Zgłoś błąd przez e-mail @@ -77,59 +72,50 @@ Co:\\nRequest:\\nJęzyk treści:\\nUsługa:\\nCzas GMT:\\nPakiet:\\nWersja:\\nWersja systemu: Twój komentarz (po angielsku): Szczegóły: - - Miniatura filmu Miniatura filmu Miniatura zdjęcia wysyłającego Polubienia - Łapki w dół + Łapka w dół Użyj Tora Zgłoś błąd Raport użytkownika - Nie można utworzyć katalogu pobierania \'%1$s\' Utworzono katalog pobierania \'%1$s\' - - Wideo - Audio + Film + Dźwięk Ponów - Nie uzyskano pozwolenia dostępu do pamięci - - Pauza - Widok + Odmowa dostępu do pamięci + Wstrzymaj + Odtwórz Usuń Suma kontrolna - Nowa misja OK - Nazwa pliku Wątki Błąd - Serwer niewspierany + Nieobsługiwany serwer Plik już istnieje - Zniekształcony URL lub brak internetu + Nieprawidłowo utworzony adres URL lub Internet nie jest dostępny Pobieranie NewPipe Dotknij, aby zobaczyć szczegóły Proszę czekać… Skopiowano do schowka Proszę wybrać dostępny katalog pobierania - Nie można załadować obrazu Awaria aplikacji/interfejsu - (Eksperymentalne) Wymuś pobieranie przez Tora dla zwiększonej prywatności (strumieniowanie wideo nie jest jeszcze wspierane). + (Eksperymentalne) Wymuś pobieranie przez Tora w celu zwiększenia prywatności (strumieniowe wideo nie jest jeszcze obsługiwane). Start CAPTCHA - Rozwiąż reCAPTCHA - Prośba o reCAPTCHA - - Niektóre rozdzielczości nie będą miały dźwięku, jeśli ta opcja jest włączona - W tle + Wyzwanie reCAPTCHA + Wymagane wyzwanie dotyczące reCAPTCHA + Usuwa dźwięk w niektórych rozdzielczościach + Tło Domyślna rozdzielczość dla trybu okienkowego Pokaż wyższe rozdzielczości - Tylko niektóre urządzenia wspierają odtwarzanie wideo 2K/4K - Domyślny format wideo + Tylko niektóre urządzenia obsługują odtwarzanie filmów 2K/4K + Domyślny format filmu Czarny Zapamiętaj rozmiar i pozycję trybu okienkowego Zapamiętaj ostatni rozmiar i pozycję trybu okienkowego @@ -137,7 +123,6 @@ Użyj gestów, aby sterować jasnością i głośnością odtwarzacza Podpowiedzi wyszukiwania Pokazuj sugestie podczas wyszukiwania - Tryb okienkowy Odtwarzanie w trybie okienkowym Wszystkie @@ -149,24 +134,15 @@ Odśwież Wyczyść Zmiana rozmiaru - - Użyj starego odtwarzacza - Stary odtwarzacz wbudowany w Mediaframework - - K M B - To pozwolenie jest wymagane, aby \notworzyć w trybie okienkowym - Odtwórz w trybie okienkowym Tryb okienkowy NewPipe Tryb okienkowy - -Najlepsza rozdzielczość - + Najlepsza rozdzielczość Pobierz Niepoprawne znaki są zamienione na tę wartość Litery i cyfry @@ -178,38 +154,31 @@ Otwórz stronę O programie Licencje - Wolne, lekkie przesyłanie strumieniowania na Androidzie. + Lekkie przesyłanie strumieniowe w systemie Android. Zobacz na GitHubie Licencja NewPipe Jeżeli masz pomysł na tłumaczenie, zmiany w wyglądzie aplikacji, oczyszczenie kodu źródłowego, pomoc jest zawsze mile widziana. Im więcej jest zrobione, tym lepiej! Przeczytaj licencję Wkład -Dozwolone znaki w nazwach plików + Dozwolone znaki w nazwach plików Znak zamienny - ©%1$s %2$s na licencji %3$s Subskrybuj Subskrybujesz Anulowano subskrypcję kanału Nie można zmienić subskrypcji - Nie można uaktualnić subskrypcji - + Nie można zaktualizować subskrypcji Główna Subskrypcje - Co nowego - Historia wyszukiwania Zapisuj lokalnie historię wyszukiwania Historia i pamięć podręczna Zapisuj historię oglądania Wznów gdy na pierwszym planie Kontynuuj odtwarzanie po przerwaniu (np. po rozmowie telefonicznej) - - Powiadomienia NewPipe - Powiadomienia dla odtwarzacza NewPipe w tle i w okienku - + Powiadomienia dla NewPipe w tle i trybie wyskakujących okien odtwarzania Współautorzy Historia Wyszukiwane @@ -218,59 +187,48 @@ Historia Historia jest pusta Historia została wyczyszczona - -Odtwarzacz + Odtwarzacz Zachowanie Historia i pamięć podręczna Playlista Cofnij - Brak wyników Brak wyświetleń - Pokaż wskazówkę „Przytrzymaj, aby dodać” + Pokaż wskazówkę \"Przytrzymaj, aby dodać\" Pokaż wskazówkę podczas naciśnięcia odtwarzania na stronie szczegółów filmu W kolejce odtwarzania w tle W kolejce odtwarzania okienkowego Odtwórz wszystkie - - [Nieznany] - + [Nieznane] Nie można odtworzyć strumienia Wystąpił nieodwracalny błąd odtwarzacza Odzyskiwanie po błędzie odtwarzacza - - Nic tu nie ma. Słychać świerszcze… - + Nic tu nie ma. Słychać świerszcze Brak subskrybentów - %s subskrybent - %s subskrybentów - %s subskrybentów - - + %s subskrybent + %s subskrybentów + %s subskrybentów + - %s odtworzenie - %s odtworzenia - %s odtworzeń - - + %s odtworzenie + %s odtworzenia + %s odtworzeń + Brak filmów - %s film - %s filmy - %s filmów - - + film + filmy + filmów + Większość znaków specjalnych - Dotacja - NewPipe rozwijane jest przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment, aby wesprzeć programistów i sprawić, by program był jeszcze lepszy, nie przerywając przy tym popijania kawy. - Daj od siebie + NewPipe rozwijane jest przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić Ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment, aby wesprzeć programistów i sprawić, by program był jeszcze lepszy, delektując się filiżanką kawy. + Wspomóż Witryna By otrzymać więcej informacji oraz najnowsze wiadomości o NewPipe, odwiedź naszą stronę. Pozycja usunięta Czy chcesz usunąć tę pozycję z historii wyszukiwania? - Zawartość strony głównej Pusta strona Strona „kiosku” @@ -278,14 +236,13 @@ Strona kanału Strona kanału Wybierz kanał - Brak subskrybowanych kanałów + Brak subskrypcji kanałów Wybierz „kiosk” - „Kiosk” - Na czasie + Najpopularniejsze 50 najlepszych Nowe i gorące - Odtwarzacz w tle + Odtwarzanie w tle Odtwarzacz w trybie okienkowym Usuń Szczegóły @@ -293,136 +250,103 @@ Przytrzymaj, aby zakolejkować Kolejkuj w tle Kolejkuj w okienku - Odtwórz teraz + Zacznij odtwarzać tutaj Odtwórz w tle - Odtwórz w okienku -Nie znaleziono odtwarzacza strumieniowego (żeby odtworzyć, możesz zainstalować VLC) - Domyślny kraj zawartości + Zacznij tutaj w nowym wyskakującym okienku + Nie znaleziono odtwarzacza strumieniowego (żeby odtworzyć, możesz zainstalować VLC). + Domyślny kraj treści Usługa Zawsze Tylko raz - Przełącz orientację ekranu Odtwarzaj w tle Zewnętrzne odtwarzacze nie obsługują linków tego typu - Nieprawidłowy URL - Nie znaleziono strumieni wideo - Nie znaleziono strumieni audio - + Nieprawidłowy adres URL + Nie znaleziono strumieni filmu + Nie znaleziono strumieni dźwięku Odtwarzacz wideo Odtwarzacz w tle - Pytaj za każdym razem - Informacje… Ładowanie żądanej zawartości -Pobierz plik strumienia. + Pobierz plik strumienia Pokaż informacje - Dodaj do - - Zakładki - + Ulubione playlisty Debugowanie Odtwarzaj w okienku Odtwarzaj na pierwszym planie - Importuj dane Eksportuj dane - Nadpisuje bieżącą historię i subskrypcje + Zastępuje Twoją bieżącą historię i subskrypcje Eksportuje bieżącą historię, subskrypcje i playlisty Przeciągnij, aby zmienić kolejność - Utwórz Usuń bieżący Usuń wszystkie Cofnij Zmień nazwę - Czy chcesz usunąć tę pozycję z historii odtwarzania? Czy na pewno usunąć wszystkie pozycje z historii? Ostatnio odtwarzane Najczęściej odtwarzane - - Eksport zakończony - Import zakończony + Eksportowanie + Importowanie Niepoprawne archiwum ZIP Ostrzeżenie: Nie udało się zaimportować wszystkich plików. Nadpisuje obecne ustawienia. - Otwórz menu Zamknij menu Niebawem coś tutaj się pojawi - - Odtwarzacz w okienku Zawsze pytaj - - Utwórz playlistę - Usuń playlistę - Zmień nazwę playlisty + Nowa playlista + Usuń + Zmień Nazwa Dodaj do playlisty Ustaw jako miniaturę playlisty - Dodaj do zakładek Usuń z zakładek - - Czy chcesz usunąć playlistę? + Usunąć tę listę odtwarzania\? Playlista utworzona - Dodano do playlisty - Miniaturka playlisty zmieniona - Nie można usunąć playlisty - + Playlista + Miniaturka playlisty zmieniona. + Nie można usunąć playlisty. Bez napisów - Dopasuj Wypełnij Powiększ - Wygenerowane automatycznie - Rozmiar czcionki etykiet - Mniejszy rozmiar - Normalny rozmiar - Większy rozmiar - Włącz LeakCanary Monitorowanie wycieków pamięci może powodować niestabilność aplikacji podczas zrzutu pamięci - - Raportuj błędy Out-of-lifecycle + Zgłaszanie błędów poza cyklem życia Wymusza raportowanie niedostarczonych wyjątków Rx poza cyklem życia fragmentu lub aktywności - -Użyj szybkiego niedokładnego wyszukiwania + Użyj szybkiego niedokładnego wyszukiwania Szybkie wyszukiwanie pozwala przeskoczyć do wybranej pozycji szybciej, lecz jest mniej precyzyjne Załaduj miniatury - Wyłącz, by aplikacja nie ściągała miniatur. Oszczędza transfer i pamięć. Zmiana tej opcji spowoduje wyczyszczenie pamięci podręcznej miniatur + Wyłącz, aby nie ładować miniaturek, oszczędzając dane i zużycie pamięci. Zmienia wyczyszczenie pamięci podręcznej obrazów zarówno w pamięci, jak i na dysku. Wyczyszczono pamięć podręczną miniatur Wyczyść pamięć podręczną metadanych Wyczyść pamięć podręczną stron Wyczyszczono pamięć podręczną metadanych - Automatycznie dołącz kolejny stream - Automatycznie dodaj kolejny powiązany stream w momencie rozpoczęcia odtwarzania ostatniego elementu w niezapętlonej kolejce + Automatyczne kolejkowanie następnego strumienia + Automatycznie dodaj kolejny powiązany strumień podczas odtwarzania ostatniego strumienia w niezapętlonej kolejce. Plik - - Nieprawidłowy katalog - Nieprawidłowy plik/źródło treści - Plik nie istnieje lub brak wystarczających uprawnień do zapisu/odczytu + Nie ma takiego folderu + Nie ma takiego źródła plików/treści + Plik nie istnieje lub brakuje mu uprawnień do odczytu lub zapisu Nazwa pliku nie może być pusta Wystąpił błąd: %1$s - - Import/Eksport + Import/eksport Import Importuj z Eksportuj do - Importowanie… Eksportowanie… - Importuj z pliku Poprzedni eksport - Import subskrypcji nie powiódł się Eksport subskrypcji nie powiódł się - Aby zaimportować subskrypcje YouTube, potrzebny jest plik eksportu subskrypcji. Możesz go wygenerować w następujący sposób: \n \n1. Odwiedź stronę: %1$s @@ -431,15 +355,11 @@ Ta operacja może wygenerować duże użycie danych. \n \nCzy chcesz kontynuować? - Kontrola prędkości odtwarzania Tempo Wysokość dźwięku - Domyślna -twojeID, soundcloud.com/twojeid - - Odczep (może powodować zniekształcenia) - Nightcore + 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: @@ -449,36 +369,29 @@ \n3. Zaloguj się na swoje konto \n4. Skopiuj adres, na który przeglądarka przekieruje cię po zalogowaniu (to jest adres twojego profilu). Brak źródeł do pobrania - - Preferowana akcja podczas \'otwierania\' - Domyślna akcja podczas otwierania materiału - %s - + Preferowana akcja \'otwórz\' + Domyślna akcja podczas otwierania zawartości - %s Napisy - Zmień kolor tekstu i tła napisów. Wymaga restartu aplikacji - + Zmodyfikuj skalę tekstu napisów i style tła. Wymaga ponownego uruchomienia aplikacji. Wyczyść historię oglądania Usuwa historię odtworzonych strumieni - Usuń całą historię oglądania. + Usunąć całą historię oglądania\? Usunięto historię oglądania. Wyczyść historię wyszukiwania Usuwa historię wyszukiwania słów kluczowych - Usuń całą historię wyszukiwania. + Usunąć całą historię wyszukiwania\? Usunięto historię wyszukiwania. Usunięto jedną pozycję. - Nie zainstalowano aplikacji do odtworzenia tego pliku - - NewPipe jest wolnym i bezpłatnym oprogramowaniem: Możesz używać, brać udział oraz udoskonalać je według własnego uznania. W szczególności możesz redystrybuować lub/i modyfikować pod zasadami GNU General Public License opublikowanej przez Free Software Fundation w wersji 3 lub (w zależności od ciebie) dowolnej późniejszej wersji. + 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 programu NewPipe + 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. 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. Akceptuj Odrzuć - Brak limitu Limit przy użyciu danych mobilnych Kanały @@ -488,11 +401,73 @@ Przewiń w przód podczas ciszy Krok Zresetuj - Zminimalizuj podczas przełączenia aplikacji - "Akcja podczas przełączenia do innej aplikacji z głównego odtwarzacza — %s" + Akcja po przejściu do innej aplikacji z głównego odtwarzacza wideo — %s Zminimalizuj Zminimalizuj do odtwarzania w tle Zminimalizuj do odtwarzania w okienku - - + Zrezygnuj z subskrypcji + Nowa karta + Wybierz kartę + Kontrola gestów głośności + Użyj gestów do sterowania głośnośnością odtwarzania + Kontrola gestów jasności + Użyj gestów do sterowania jasnością odtwarzacza + Aktualizacje + Plik został usunięty + Powiadomienie o aktualizacji aplikacji + Powiadomienia o nowej wersji NewPipe + Pamięć zewnętrzna jest niedostępna + Pobieranie na zewnętrzną kartę SD nie jest jeszcze możliwe. Zresetować lokalizację folderu pobierania\? + Korzystanie z domyślnych kart, błąd podczas czytania zapisanych kart + Przywróć domyślne + Czy chcesz przywrócić ustawienia domyślne\? + Subskrybenci nie są dostępni + Karty wyświetlane na stronie głównej + Wybierz + Aktualizacje + Pokaż powiadomienie, aby monitować aktualizację aplikacji, gdy dostępna jest nowa wersja + Tryb widoku listy + Lista + Siatka + Automatycznie + Przełącz widok + Dostępna jest aktualizacja NewPipe! + Stuknij, aby pobrać + Gotowe + W kolejce + wstrzymane + w kolejce + przetwarzanie końcowe + Kolejka + Akcja odrzucona przez system + Pobieranie nie powiodło się + Pobieranie zakończone + %s pobieranie zostało zakończone + Wygeneruj unikalną nazwę + Zastąp + Pobrany plik o tej nazwie już istnieje + Trwa pobieranie z tą nazwą + Pokaż błąd + Kod + Nie można utworzyć pliku + Nie można utworzyć folderu docelowego + Odmowa dostępu do systemu + Bezpieczne połączenie nie powiodło się + Nie można znaleźć serwera + Nie można połączyć się z serwerem + Serwer nie wysyła danych + Serwer nie akceptuje pobierania wielowątkowego, spróbuj ponownie za pomocą @string/msg_threads = 1 + Żądany zakres jest niewłaściwy + Nie znaleziono + Przetwarzanie końcowe nie powiodło się + Wyczyść ukończone pobieranie + Kontynuuj %s oczekujące transfery z plików do pobrania + Zatrzymaj + Maksymalna liczba prób + Maksymalna liczba prób przed anulowaniem pobierania + Przerwij przełączanie na dane mobilne + Pobierane pliki, których nie można wstrzymać, zostaną ponownie uruchomione + Zdarzenia + Konferencje + \ 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 82a54c90c..2c73758b1 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,4 +1,4 @@ - + Áudio Não foi possível descriptografar assinatura de URL do vídeo @@ -7,7 +7,7 @@ Informações: %1$s visualizações Reproduzir - Vídeo com restrição de idade. Permissão para vídeos com essa restrição podem ser feitas no menu configurações. + Mostar vídeo com restrição de idade. Permissão para vídeos com essa restrição podem ser feitas no menu Configurações. Vídeo Reproduz o vídeo quando o NewPipe for aberto a partir de outro aplicativo Reproduzir automaticamente @@ -48,7 +48,7 @@ Servidor não suportado Aguarde… Erro de rede - Próximo vídeo + Próximo Abrir no navegador Pausar reCAPTCHA @@ -64,8 +64,8 @@ Vídeo & Áudio Compartilhar Compartilhar com - Exibir conteúdo com restrição de idade - Exibir \'próximo\' vídeo e \'relacionados\' + Conteúdo com restrição de idade + Exibir \'Próximo\' vídeo e \'Relacionados\' Desculpe, isto não deveria ter acontecido. Iniciar Permissão para acessar armazenamento negada @@ -76,7 +76,7 @@ ao vivo Downloads Downloads - Você quis dizer: %1$s ? + Você quis dizer: %1$s\? Nova missão App/interface parou Reproduzindo em segundo plano @@ -84,15 +84,15 @@ Thumbnail do vídeo Miniatura do usuário que enviou o vídeo Informe o local para download de áudios - Local para salvar áudios baixados - Local de download de áudio + Áudios baixados são gravados aqui + Pasta de download de áudio Informe o local para download de vídeos Local para salvar vídeos baixados Local de download de vídeo Aplicativo Kore não instalado. Instalar? Não foi possível interpretar completamente o site Miniatura do vídeo - Isto é uma transmissão ao vivo, a qual ainda não é suportada. + "Transmissões ao vivo ainda não são suportadas " Toque em pesquisar para começar Arquivo já existe Threads @@ -104,7 +104,7 @@ Reproduzir Reproduzir com Kodi Buscar - Exibir opção para reproduzir vídeo pelo Kodi + Exibir uma opção para reproduzir o vídeo via centro de mídia Kodi Usar reprodutor de áudio externo Usar reprodutor de vídeo externo (Experimental) Forçar o download de conteúdo através do Tor para maior privacidade (streaming de vídeos ainda não suportado). @@ -125,9 +125,6 @@ Depois Desabilitado - Usar player antigo - Antigo player interno Mediaframework - K M B @@ -150,7 +147,7 @@ abrir em modo popup Popup Redimensionamento - Algumas resoluções não terão áudio quando esta opção estiver habilitada + Remove o áudio em ALGUMAS resoluções Controle do player por gestos Usar gestos para controlar o brilho da tela e volume do player Sugestões de busca @@ -231,8 +228,8 @@ abrir em modo popup Nenhum video - %s vídeo - %s vídeos + %s Vídeo + %s Vídeos Item excluído @@ -254,7 +251,7 @@ abrir em modo popup Em Alta Top 50 Novos e tendências -"Mostrar dica \"mantenha pressionado para enfileirar\"" +Mostrar dica \"Mantenha pressionado para enfileirar\" Mostrar dica quando o botão de plano de fundo ou de popup for pressionado na página de detalhes do vídeo Adicionado a fila do reprodutor em plano de fundo Adicionado a fila no reprodutor popup @@ -275,14 +272,14 @@ abrir em modo popup Adicionar a fila em Plano de Fundo Adicionar a fila em Popup Iniciar a reproduzir à partir daqui - Iniciar aqui em Plano de Fundo - Iniciar aqui em popup + Iniciar aqui quando estiver em Plano de Fundo + Iniciar aqui em novo popup Doar NewPipe é desenvolvido por voluntários que usam seu tempo para trazer a melhor experiência para você. Retribua para ajudar os desenvolvedores a tornarem o NewPipe ainda melhor enquanto desfrutam uma xícara de café. Retribuir Site oficial Visite o site do NewPipe para mais informações e novidades. - Nenhum reprodutor de stream encontrado (você pode instalar o VLC para reproduzir isto) + Nenhum reprodutor de stream encontrado (você pode instalar o VLC para reproduzir isto). País do conteúdo padrão Serviço Sempre @@ -301,24 +298,23 @@ abrir em modo popup Reprodutor de vídeo Reprodutor em plano de fundo Reprodutor popup - Sempre perguntar Obtendo informações… Carregando o conteúdo requisitado Importar base de dados Exportar base de dados - Isso irá sobrescrever seu histórico e inscrições + Sobrescreve seu histórico e inscrições Exportar histórico, inscrições e listas de reprodução - Exportação completa - Importação completa + Exportado + Importado Não há nenhum arquivo ZIP válido Aviso: Não foi possível importar todos arquivos. Isso irá sobrescrever suas configurações atuais. - Baixar arquivo de stream. + Baixar arquivo de stream Mostrar informações - Favoritos + Playlists favoritas Adicionar a @@ -337,9 +333,9 @@ abrir em modo popup Sempre perguntar - Criar nova Lista de Reprodução - Apagar Lista de Reprodução - Renomear Lista de Reprodução + Nova Lista de Reprodução + Apagar + Renomear Nome Adicionar a Lista de Reprodução Definir como Miniatura da Lista de Reprodução @@ -347,23 +343,17 @@ abrir em modo popup Favoritar Lista de Reprodução Remover Favorito - Deseja remover esta lista de reprodução? + Deletar esta lista de reprodução\? Lista de Reprodução criada Adicionado a lista de reprodução - Miniatura para a lista de reprodução alterada - Falha ao apagar lista de reprodução + Miniatura da lista de reprodução alterada. + Falha ao apagar lista de reprodução. Sem Legendas Ajustar Preencher Zoom - - Tamanho da fonte da legenda - Fonte menor - Fonte normal - Maior fonte -Depurar Algo irá aparecer aqui em breve ;D @@ -377,13 +367,13 @@ abrir em modo popup Usar índice de indexação rápido porém não preciso Usar índice de indexação inexato Adicionar a próxima stream à fila automaticamente - Auto anexar uma stream relacionada quando a reprodução iniciar na última stream em uma fila não repetitiva - Sincronizar + Auto anexar uma stream relacionada quando a reprodução iniciar na última stream em uma fila não repetitiva. + Arquivo - Diretório inválido - Origem do arquivo/conteúdo inválido + Pasta não encontrada + Origem do arquivo/conteúdo não econtrada Arquivo não existe ou não há permissão para ler ou escrever nele Nome do arquivo não pode ser vazio Um erro ocorreu: %1$s @@ -425,10 +415,9 @@ abrir em modo popup Cache de metadados foi limpo Controles de Velocidade de Reprodução "Tempo " - Desabilite para para de carregar todas as miniaturas e economizar dados e uso de memória. Alterar esta configuração irá limpar o cache de imagens na memória e em disco + Quando desligado miniaturas não carregarão, economizando uso de dados e memória. Alterar esta configuração irá limpar o cache de imagens na memória e em disco. Passo Desvincular (pode causar distorção) - Padrão Ação de \'abrir\' preferida Ação padrão quando abrir conteúdo — %s @@ -437,22 +426,21 @@ abrir em modo popup Abrir gaveta Fechar gaveta Legendas - Modifique o tamanho da legenda e o estilo da tela de fundo. Necessário reiniciar o aplicativo para ter efeito + Modifique o tamanho da legenda e o estilo da tela de fundo. Necessário reiniciar o aplicativo para ter efeito. - Night-core Nenhum player instalado para reproduzir este arquivo "Limpar histórico de já assistidos " Deleta o histórico de videos já reproduzidos - Deleta todo o histórico de já reproduzidos. + Deletar todo o histórico de já reproduzidos\? Histórico de já assistidos deletado. Limpar histórico de pesquisa Deleta histórico de palavras chave pesquisadas - Deletar todo o histórico de pesquisa. + Deletar todo o histórico de pesquisa\? Histórico de pesquisa deletado. 1 item deletado. - NewPipe is copyleft libre software: Você pode usar, estudar, compartilhar e melhorar ele a vontade. Mais especificamente você pode redistribuir e/ou modificar ele sob os termos da GNU General Public License como publicada pela Free Software Foundation, tanto a versão 3 dessa Licença, ou (a sua escolha) qualquer outra versão posterior. + NewPipe é software livre copyleft: Você pode usar, estudar, compartilhar e melhorar ele a vontade. Mais especificamente você pode redistribuir e/ou modificar ele sob os termos da GNU General Public License como publicada pela Free Software Foundation, tanto a versão 3 dessa Licença, ou (a sua escolha) qualquer outra versão posterior. Você também quer importar as configurações? Política de privacidade do NewPipe @@ -480,4 +468,69 @@ abrir em modo popup Listas de reprodução Faixas Usuários - + Cancelar inscrição + Nova Aba + Selecionar aba + Gesto de controle do volume + Usar gestos para controlar o volume do reprodutor + Gesto para controle do brilho + Usar gestos para controlar o brilho do reprodutor + Debugar + Atualizações + Eventos + Arquivo apagado + Notificação de Atualização do Aplicativo + Notificações para a versão do NewPipe + Armazenamento externo indisponível + Baixar para o cartão SD externo ainda não é possivel. Resetar o local da pasta de download\? + Usando abas padrão, erro ao ler abas salvas + Restaurar padrões + Deseja restaurar os padrões\? + Contagem de inscritos não disponível + Abas que são mostradas na página principal + Seleção + Conferências + Atualizações + Mostrar uma notificação para solicitar atualização do aplicativo quando uma nova versão estiver disponível + Modo de visualização em lista + Lista + Grade + Automático + Alterar visualização + Atualização do NewPipe Disponivel! + Toque para baixar + Finalizado + Na fila + pausado + adicionado na fila + pós processamento + Fila + Ação negada pelo sistema + Falha ao baixar + Download finalizado + %s downloads terminados + Gerar nome único + "Sobrescrever " + Um arquivo baixado com esse nome já existe + Existe um download em progresso com esse nome + Mostrar erro + Código + O arquivo não pode ser criado + A pasta de destino não pode ser criada + Permissão negada pelo sistema + "Falha na conexão segura " + Não foi possível encontrar o servidor + Não foi possível conectar ao servidor + O servidor não envia dados + "O servidor não aceita downloads em multi-thread, tente com @string/msg_threads = 1 " + Intervalo solicitado não satisfazível + Não encontrado + Falha no pós processamento + Limpar downloads finalizados + Continuar seus %s downloads pendentes + Parar + Máximo de tentativas + Número máximo de tentativas antes de cancelar o download + Pausar quando trocar para dados móveis + Downloads que não puderem ser pausados serão reiniciados + \ 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 b27715fa3..99156d49f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,4 +1,4 @@ - + %1$s visualizações Publicado em %1$s @@ -27,8 +27,8 @@ Áudio Formato áudio padrão Descarregar - Vídeo seguinte - Mostrar vídeos \'seguintes\' e \'semelhantes\' + Seguinte + Mostrar vídeos \'Seguintes\' e \'Semelhantes\' URL não suportado Idioma padrão do conteúdo Vídeo e áudio @@ -50,7 +50,7 @@ Usar Tor (Experimental) Usar a rede Tor para aumentar a privacidade (ainda não é suportada a emissão de vídeos). - Local para a descarga de áudio + Pasta para a descarga de áudio Local para guardar o áudio descarregado Digite o caminho para os ficheiros de áudio @@ -61,34 +61,34 @@ Incapaz de descodificar a assinatura do vídeo Incapaz de processar o site Conteúdo não disponível - Bloqueado pela GEMA + Bloqueado por GEMA Conteúdo Restringir conteúdo por idade - Vídeo com restrição de idade. É possível permitir este material através das Definições. + Mostrar vídeo com restrição de idade. É possível permitir tal material a nas Opções. Não foi possível processar totalmente o site Não foi possível configurar o menu de descargas - Esta é uma emissão em direto, as quais ainda não são suportadas. + As emissões em direto ainda não são suportadas Não foi possível obter a emissão - Desculpe, isto não deveria ter acontecido. + Desculpe mas isto não deveria ter acontecido. Reportar erro por e-mail Ocorreram alguns erros. Relatório Info: O que ocorreu: - Comentários (em Inglês): + Comentários (em inglês): Detalhes: Vídeo Áudio Tentar novamente - Permissão para aceder ao armazenamento foi negada + A permissão para aceder ao armazenamento foi recusada Toque para iniciar a pesquisa Reprodução automática Reproduzir vídeo se o NewPipe for invocado por outra aplicação - direto + Direto Reportar um erro Relatório @@ -119,7 +119,7 @@ OK Processos Descarga do NewPipe - Não foi possível carregar a Imagem + Não foi possível carregar a imagem Aplicação encerrada O quê:\\nPedido:\\nIdioma do conteúdo:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão do SO: @@ -136,58 +136,56 @@ M MM - Esta permissão é necessária -\npara o modo \"popup\" + Esta permissão é necessária +\npara o modo \'popup\' reCAPTCHA Desafio reCAPTCHA Desafio reCAPTCHA solicitado - Modo \"popup\" do NewPipe + Modo \'popup\' do NewPipe Reproduzir em modo \"popup\" - Usar reprodutor antigo - Versão antiga do reprodutor Mediaframework - Formato de vídeo preferido + Formato de vídeo padrão Desativado - Resolução padrão do \"popup\" + Resolução padrão do \'popup\' Mostrar resoluções mais altas Apenas alguns dispositivos possuem suporte a vídeos 2K/4K Popup - Lembrar tamanho e posição do \"popup\" + Lembrar tamanho e posição do \'popup\' Popup Filtrar - Atualizar + Recarregar Limpar Segundo plano - Algumas resoluções não terão áudio se esta opção estiver ativa - Lembrar último tamanho e posição do \"popup\" + Remove o áudio em algumas resoluções + Lembrar último tamanho e posição do \'popup\' Redimensionar -Controlos de gesto do reprodutor - Usar gestos para controlar o brilho e o volume do reprodutor +Controlo de reprodução por gestos + Utilizar gestos para controlar o brilho e o volume do reprodutor Sugestões de pesquisa - Apresentar sugestões ao procurar + Mostrar sugestões ao pesquisar Melhor resolução - Sobre NewPipe + Acerca de NewPipe Definições Sobre Licenças de terceiros © %1$s de %2$s nos termos da %3$s Não foi possível carregar a licença - Abrir website - Sobre + Abrir site + Acerca Colaboradores Licenças - Aplicação leve livre de YouTube para Android. + Aplicação de reprodução de emissões para sistemas Android. Ver no GitHub Licença do NewPipe - Se tem ideias de tradução, alterações de design, limpeza de código ou alterações de código pesado—ajuda é sempre bem-vinda. Quanto mais se faz melhor fica! + Se tem ideias para: tradução, alterações de design, limpeza de código ou alterações ao código fonte - todas as ajudas são bem-vindas. Quanto mais se faz, melhor ficará! Ler licença Participar Subscrever @@ -203,7 +201,7 @@ Histórico de pesquisa Guardar termos de pesquisa localmente - Histórico e Cache + Histórico e cache Guardar histórico de vídeos assistidos Retomar ao ganhar foco Continuar reprodução após interrupções (ex. chamadas) @@ -213,7 +211,7 @@ Lista de reprodução Desfazer - Notificação do NewPipe + Notificação NewPipe Notificações para o NewPipe e para os reprodutores \"popup\" Sem resultados @@ -221,8 +219,8 @@ Sem subscritores - %s subscrito - %s subscritos + %s subscritor + %s subscritores Sem visualizações @@ -233,8 +231,8 @@ Sem vídeos - %s vídeo - %s vídeos + vídeo + vídeos Descarregar @@ -247,11 +245,11 @@ Histórico Pesquisado - Visto - Histórico está desativado + Visualizado + Histórico desativado Histórico O histórico está vazio - Histórico eliminado + Histórico apagado Item apagado Deseja apagar este item do histórico de pesquisa? Reproduzir todos @@ -262,7 +260,7 @@ A recuperar de um erro do reprodutor Conteúdo da página principal - Página em branco + Página vazia Página de subscrições Página do canal Selecione um canal @@ -274,16 +272,16 @@ Top 50 Novo e popular Reprodutor em segundo plano - Reprodutor \"popup\" + Reprodutor \'popup\' Remover Detalhes Definições de áudio Iniciar reprodução aqui - Iniciar aqui em segundo plano - Iniciar aqui em \"popup\" + Iniciar aqui se em segundo plano + Iniciar aqui em novo \'pop-up\' Mostrar informação - Favoritos + Listas de reprodução favoritas Serviço Sempre @@ -292,12 +290,12 @@ Mudar orientação Importar base de dados Exportar base de dados - Irá sobrepor o seu histórico atual e subscrições + Substitui o histórico e as subscrições atuais Exportar histórico, subscrições e listas de reprodução Em lista de espera no reprodutor em segundo plano Em lista de espera no reprodutor popup Mudar para segundo plano - Mudar para \"popup\" + Mudar para \'popup\' Mudar para principal Incapaz de reproduzir este vídeo @@ -311,33 +309,33 @@ Renomear Doar - Nenhum reprodutor encontrado (pode instalar o reprodutor VLC) - Descarregar ficheiro da emissão. + Nenhum reprodutor encontrado (pode instalar o reprodutor VLC). + Descarregar ficheiro da emissão Adicionar a Utilizar pesquisa rápida - A pesquisa rápida permite que a pesquisa seja mais rápida mas diminui a qualidade da precisão + Esta opção permite que a pesquisa seja mais rápida mas diminui a qualidade da precisão Carregar miniaturas - Desative para parar o carregamento das miniaturas e poupar dados e memória. Se alterar esta opção limpa a cache de memória e do disco + Desative para parar o carregamento das miniaturas e poupar dados e memória. Se alterar esta opção limpa a cache de memória e do disco. Cache de imagens limpa País padrão para o conteúdo Depuração Não foram encontradas emissões de vídeo Não foram encontradas emissões de áudio - Diretório inválido - Origem de conteúdo ou ficheiro inválida - Ficheiro inexistente ou permissões insuficientes para ler ou escrever + Diretório não existe + Não existe ficheiro/fonte de conteúdo + O ficheiro não existe ou as permissões para ler ou escrever faltam O nome do ficheiro não pode estar vazio Ocorreu um erro: %1$s Não existem emissões para descarregar Descartar Site - Visite ao website NewPipe para obter mais informações e saber as novidades. + Visite ao site NewPipe para obter mais informações e saber as novidades. Página \"kiosk\" Página da fonte - Exportação terminada - Importação terminada + Exportados + Importados Ficheiro ZIP inválido Aviso: nem todos os ficheiros foram importados. Está prestes a substituir a configuração atual. @@ -345,13 +343,13 @@ Abrir menu Fechar menu Nome - Apagar metadados em cache - Remover todos os dados da página em cache - Metadados em cache apagados + Apagar meta-dados em cache + Remover todos os dados em cache + Meta-dados em cache apagados Ficheiro - Pretende apagar este item do histórico de visualizações? - Tem a certeza que quer apagar todos os itens do histórico? + Deseja apagar este item do histórico de visualizações\? + Tem a certeza de que deseja apagar todos os itens do histórico\? Última reprodução Mais reproduzido @@ -360,33 +358,33 @@ Reprodutor de vídeo Reprodutor em segundo plano - Reprodutor em popup + Reprodutor \'popup\' Perguntar sempre A obter informação… - O conteúdo requisitado está carregando + A carregar o conteúdo... - Criar Nova Lista de Reprodução - Apagar Lista de Reprodução - Renomear Lista de Reprodução - Adicionar a Lista de Reprodução - Guardar Lista de Reprodução nos Marcadores - Remover Marcador + Nova lista de reprodução + Apagar + Renomear + Adicionar à lista de reprodução + Guardar lista de reprodução como favorita + Remover marcador - Deseja apagar esta lista de reprodução? - Lista de Reprodução criada com sucesso - Adicionado à lista de reprodução - Thumbnail da Lista de Reprodução modificada - Sem Legenda + Apagar esta lista de reprodução\? + Lista de reprodução criada com sucesso + Colocado na lista de reprodução + Miniatura alterada. + Sem legendas - Zoom + Ampliar Gerado automaticamente - Legenda - Importar/Exportar + Legendas + Importar/exportar Importar - Importar a partir de + Importar de Exportar para A importar… @@ -395,50 +393,157 @@ Importar ficheiro Exportação anterior - Importação de subscrições falhou - Exportação de subscrições falhou + Não foi possível importar as subscrições + Não foi possível exportar as subscrições - Para importar as tuas subscrições do Youtube vais precisar do ficheiro de exportação, que pode ser descarregado com auxílio destas instruções: + Importe as subscrições do YouTube descarregando o ficheiro exportado: \n -\n1. Vai a esta hiperligação: %1$s -\n2. Inicia a tua sessão quando requisitado -\n3. O descarregamento deve começar (esse é o ficheiro de exportação) - Para importar as contas SoundCloud, vais precisar do link ou id do seu perfil que pode ser descarregado com auxílio destas instruções: +\n1. Aceda a este URL: %1$s +\n2. Inicie a sessão +\n3. A descarga deve ser iniciada (esse é o ficheiro de exportação) + Importe o seu perfil do SoundCloud digitando o URL ou a sua ID: \n -\n1. Ative \"modo desktop\" num navegador da internet (o site não está disponível para dispositivos móveis) -\n2. Vá a este url: %1$s -\n3. Inicie sessão na sua conta quando solicitado -\n4. Copie o link para o qual foi redirecionado. - seuID, soundcloud.com/seuID +\n1. Ative o modo \'desktop\' no navegador web (o site não está disponível para dispositivos móveis) +\n2. Aceda a este URL: %1$s +\n3. Inicie a sessão +\n4. Copie o URL do seu perfil. + suaID, soundcloud.com/suaID - Controlo de velocidade de reprodução - Tempo - Nightcore - Predefinido -Limpar histórico de exibição - Auto anexar um fluxo relacionado quando jogar o último fluxo em uma fila não repetitiva - Mostrar dica \"mantenha pressionado para enfileirar\" - Mostrar dica quando o botão de plano de fundo ou de popup for pressionado na página de detalhes do vídeo + Controlos para velocidade de reprodução + Ritmo +Limpar histórico de visualizações + Adicionar automaticamente à fila uma emissão relacionada se em filas não repetíveis. + Mostrar dica \"Toque longo para colocar na fila\" + Mostrar dica quando o botão de fundo ou de \'popup\' for premido na página de detalhes do vídeo Canais Listas de reprodução Faixas Utilizadores - Deleta o histórico de videos já reproduzidos - Deleta o histórico de videos já reproduzidos. - Histórico de já assistidos deletado. - Deleta histórico de pesquisa - Deleta histórico de palavras chave pesquisadas - Deleta histórico de pesquisa completo. - Histórico de pesquisa deletado. - 1 elemento deletado. + Apaga o histórico dos vídeos reproduzidos + Apagar todo o histórico de visualizações\? + Histórico de vídeos apagado. + Apagar histórico de pesquisas + Apaga o histórico de palavras-chave pesquisadas + Apagar todo o histórico de pesquisa\? + Histórico de pesquisa apagado. + 1 elemento apagado. - Nehum aplicativo instalada para reproduzir este arquivo + Não existe uma aplicação para reproduzir este ficheiro - NewPipe é desenvolvido por voluntários que usam seu tempo para trazer a melhor experiência para você. Retribua para ajudar os desenvolvedores a tornarem o NewPipe ainda melhor enquanto desfrutam uma xícara de café. + NewPipe é desenvolvido por voluntários que usam o tempo livre para lhe proporcionar uma melhor experiência. Retribua para ajudar os programadores a tornarem o NewPipe ainda melhor. Retribuir Política de privacidade do NewPipe O projeto NewPipe leva a sua privacidade muito a sério. Sendo assim, o aplicativo não coleta nenhum dado sem seu consentimento. \nA polícia de privacidade do NewPipe explica em detalhes qual dado é enviado e salvo quando você envia um relatório de erros. Ler a política de privacidade - Próximo stream automaticamente em lista de espera - + Colocar emissão seguinte na fila + NewPipe é copyleft libre software: você pode usar, estudar, partilhar e melhorar a aplicação. Especificamente, você pode redistribuir e/ou modificar a aplicação nos termos da GNU General Public License, conforme publicada pela Free Software Foundation, tanto a versão 3 da licença ou (por sua opção) qualquer versão posterior. + Deseja também importar as definições\? + + Toque longo para colocar na fila + Colocar em fila se estiver em segundo plano + Colocar em novo \'popup\' + Ação \'abrir\' preferida + Ação padrão para abrir o conteúdo — %s + + Definir como miniatura da lista de reprodução + + Não foi possível apagar a lista de reprodução. + + Ajustar + Preencher + Modificar escala das legendas e o estilo de fundo. Tem que reiniciar a aplicação para aplicar as alterações. + + Ativar LeakCanary + A monitorização de memória pode tornar a aplicação instável + + Relatar erros \'out-of-lifecycle\' + Forçar relatórios de exceções de Rx não entregues fora do ciclo de vida de fragmento ou atividade após a eliminação + + Tenha em atenção que esta operação pode sobrecarregar a sua rede. +\n +\nDeseja continuar\? + + Velocidade + Dissociar (pode causar distorção) + Avanço rápido durante silêncio + Passo + Repor + + Para cumprir o Regulamento Geral sobre a Proteção de Dados (RGPD), chamamos a sua atenção para a política de privacidade do NewPipe. Por favor, leia com atenção. +\nTem que aceitar esta política para nos poder enviar o seu relatório. + Aceitar + Recusar + + Ilimitado + Limitar resolução se estiver a usar dados móveis + Minimizar ao trocar de aplicação + Ação a executar ao trocar para outra aplicação a partir do menu principal - % s + Nenhuma + Ativar o reprodutor em segundo plano + Ativar o reprodutor \'popup\' + Cancelar subscrição + Novo separador + Escolher separador + Gestos para controle de volume + Utilizar gestos para controlar o volume do reprodutor + Gestos para controlar o brilho + Utilizar gestos para controlar o brilho do reprodutor + Atualizações + Ficheiro apagado + Notificação de atualização + Notificações para uma nova versão do NewPipe + Armazenamento externo indisponível + Ainda não é possível descarrgar ao cartão SD. Repor localização da pasta de descargas\? + Erro ao ler os separadores guardados e serão usados os separadores padrão + Restaurar predefinições + Deseja restaurar as predefinições\? + Número de subscritores não disponível + Separadores a mostrar na página principal + Seleção + Atualizações + Mostrar uma notificação para pedir a atualização da aplicação se existir uma nova versão + Modo de exibição de lista + Lista + Grelha + Automático + Alternar vista + Atualização do NewPipe disponível! + Toque para descarregar + Terminada + Na fila + em pausa + na fila + pós-processamento + Fila + Ação recusada pelo sistema + Falha ao descarregar + Descarga terminada + %s descargas terminadas + Gerar nome único + Sobrescrever + Um ficheiro descarregado com este nome já existe + Já existe uma descarga em curso com este nome + Mostrar erro + Código + O ficheiro não pode ser criado + A pasta de destino não pode ser criada + Permissão negada pelo sistema + Ligação segura falhou + Não foi possível encontrar o servidor + Não é possível conectar ao servidor + O servidor não envia dados + O servidor não aceita descargas multi-threaded, tente novamente com @string/msg_threads = 1 + Intervalo solicitado não satisfatório + Não encontrado + Pós-processamento falhado + Limpar descargas terminadas + Continue suas %s transferências pendentes de descarregamentos + Parar + Máximo de tentativas + Número máximo de tentativas antes de cancelar a descarga + Pausa na comutação para dados móveis + Descarregamentos que não podem ser pausados serão reiniciados + Eventos + Conferências + \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index cf7b5510a..8e9f83fdf 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,4 +1,4 @@ - + %1$s vizionări Încărcat pe %1$s @@ -10,7 +10,7 @@ Descărcare Căutare Setări - V-ați referit la: %1$s ? + V-ați referit la: %1$s\? Partajează cu Alegeți browser-ul rotație @@ -21,7 +21,7 @@ Locul în care se vor descărca videoclipurile Introduceți locația în care se vor descărca videoclipurile - Locația audio-ului descărcat + Directorul audio-ului descărcat Locul în care se va descărca audio-ul Introduceți locația în care se va descărca fişierele audio @@ -38,7 +38,7 @@ Luminos Descărcați - Următorul videoclip + Următorul Arată videoclipurile care urmează URL nesuportat Limba dorită a conținutului @@ -48,8 +48,8 @@ Redare în fundal Redați Conținut - Arată conținutul restricționat în funcție de vârstă - Videoclipul este restricționat în funcție de vârstă. Permiterea vizionării este posibilă din Setări. + Conținut restricționat în funcție de vârstă + Arată videoclipul restricționat în funcție de vârstă. Permiterea vizionării este posibilă din Setări. Eroare Eroare de rețea @@ -59,7 +59,7 @@ Conținut indisponibil Blocat de către GEMA Imposibil de inițializat meniul pentru descărcări - Acesta este un LIVE STREAM, care încă nu este suportat. + LIVE STREAM-uri încă nu sunt suportate Thumbnail-ul videoclipului @@ -73,7 +73,7 @@ Nu s-a putut crea directorul de descărcare \'%1$s\' Apăsați căutare pentru a începe Redare automată - Redă automat un videoclip atunci când NewPipe este deschis din altă aplicație + Redă un videoclip atunci când NewPipe este deschis din altă aplicație În direct Descărcări Descărcări @@ -147,8 +147,6 @@ pentru a deschide în mod pop-up Nu s-a putut încărca imaginea App/UI eroare Ce:\\nCerere:\\nLimba Conținutului:\\nServiciu:\\nTimp GMT:\\nPachet:\\nVersiune:\\nVersiune OS: - Folosește player vechi - Player-ul implicit învechit Mediaframework K @@ -186,18 +184,18 @@ pentru a deschide în mod pop-up Istoric de căutări Stochează local căutările - Istoric + Istoric și cache Reține videoclipurile vizionate Reluați la refocalizare Continuă redarea după întreruperi (ex. după apeluri) Player Comportament - Istoric & Cache + Istoric și cache Playlist Anulează Notificare NewPipe - Notificări pentru Playere de fundal și pop-up + Notificări pentru playere de fundal și pop-up Fără rezultate Nimic aici în afară de sunetul greierilor @@ -241,7 +239,7 @@ pentru a deschide în mod pop-up Despre Contributori Licențe - Un player Youtube \"uşor\" gratuit, pentru Android. + Un player de streaming „uşor” liber, pentru Android. Vedeți pe GitHub Licența NewPipe Dacă aveți idei, doriți să traduceți, să schimbați design-ul, să curățați codul sau să schimbați codul, ajutorul este mereu bine primit. Cu cât mai mult, cu atât mai bine! @@ -274,25 +272,25 @@ pentru a deschide în mod pop-up Serviciu Adăugat în player de fundal Adăugat în player pop-up - Niciun player pentru streaming găsit. (Totuși, puteți instala VLC) - Descărcați fișierul de streaming. + Niciun player pentru streaming găsit. (Totuși, puteți instala VLC). + Descărcați fișierul de streaming Arată informații - Marcaje + Marcaje lista de vizionare Adaugă La Folosește parcurgerea inexactă - Derularea inexactă permite player-ului să îl poziţionezi mai rapid dar cu o precizie mai redusă. + Derularea inexactă permite player-ului să fie poziţionat mai rapid dar cu o precizie mai redusă Încarcă miniaturi Dezactivați pentru a opri încărcarea și salvarea tuturor thumbnail-urilor, pentru a economisi consumul de date și de memorie. Schimbarea acestei opțiuni va curăța tot cache-ul din memorie și de pe disc. - + Cache-ul de imagini a fost curățat Șterge cache-ul pentru metadata Șterge cache-ul pentru datele de pagini web Cache pentru metadata șters Adaugă următorul stream în coadă automat - Adaugă automat un stream asociat când redarea începe pe ultimul stream într-o coadă non-repetitivă. - Arată sfatul Țineți apăsat pentru a adăuga + Adaugă automat un stream asociat când se redă ultimul stream într-o coadă non-repetitivă. + Arată sfatul „Țineți apăsat pentru a adăuga” Arată sfatul când butonul de background sau de popup este apăsat în pagina de informații a videoclipului Țara implicită pentru conținut Debug @@ -311,7 +309,7 @@ pentru a deschide în mod pop-up Importează baza de date Exportează baza de date Va înlocui istoricul și abonamentele curente - Exportează istoricul, abonamentele și playlist-urile. + Exportează istoricul, abonamentele și playlist-urile Nu s-a putut reda acest stream A apărut o eroare de player irecuperabilă Recuperare după eroare player @@ -325,23 +323,23 @@ pentru a deschide în mod pop-up Numele fișierului nu poate fi gol O eroare a apărut: %1$s - NewPipe este creat de dezvoltatori şi voluntari care işi petrec timpul liber să vă aducă cea mai buna experienţă. Acum e timpul să le dăm ceva înapoi pentru a ne asigura că dezvolatori noştri pot face NewPipe şi mai bun în timp ce se bucură de \"o cană de Java\" ! + NewPipe este creat de dezvoltatori şi voluntari care îşi petrec timpul liber să vă aducă cea mai buna experienţă. Dați ceva înapoi pentru a ajuta dezvolatorii noştri în a pot face NewPipe şi mai bun în timp ce se bucură de o cană de cafea. A da înapoi Site-ul - Pentru mai multe informaţi şi ultimele ştiri despre NewPipe vizitaţi site-ul nostru. + "Vizitaţi site-ul nostru pentru mai multe informaţi şi ultimele ştiri despre NewPipe." Doriţi să ştergeţi acest element din istoricul de vizionare ? Sunteţi sigur că vreţi să ştergeţi toate elementele din istoric ? Ultimul cântec ascultat "Cel mai ascultat " - Exportare completă - "Importare completă " + Exportat + Importat Nici-un fişier ZIP valid Avertisment: Nu se pot importa fişierele. Acest lucru o să vă reseteze setup-ul curent. Player în fundal - Player Popup + Player popup Şterge Detalii Setări Audio @@ -350,7 +348,7 @@ pentru a deschide în mod pop-up Adăugaţi în Popup Începeţi să redaţi de aici Începeţi de aici în Fundal - Începeţi de aici în Popup + Începeţi de aici în popup Deschdeţi sertarul Închideţi sertarul @@ -358,8 +356,7 @@ pentru a deschide în mod pop-up Opţiunea prestabilită când se deschide contentul -%s Player Video - Player Fundal -\n + Player Fundal Player Popup Întreabă întotdeauna @@ -388,5 +385,27 @@ pentru a deschide în mod pop-up Import fișier Controlul vitezei de redare - implicit - + Canale + Utilizatori + Playlist-uri + Titluri + Șterge istoricul vizionărilor +\n + Șterge istoricul stream-urilor redate + Șterge întregul istoric al vizionărilor\? + 1 element șters. + Playlist nou + Șterge + Adăugați la Playlist + Importă + Importă din + Exportă spre + Se importă… + Se exportă… + Ultimul export + Nu s-au putut importa abonamentele + Nu s-au putut exporta abonamentele + Viteză + Acceptă + Refuză + \ 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 3fad6b288..32d57db8b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,4 +1,4 @@ - + %1$s просмотров Опубликовано %1$s @@ -11,21 +11,19 @@ Поиск Настройки Возможно, вы имели в виду: %1$s? - Поделиться с помощью + Поделиться в Выбрать браузер поворот Путь загрузки видео - Папка для хранения загруженных видео + Путь для сохранения загруженных видео Введите путь к папке для загрузки видео - Разрешение по умолчанию + Стандартное качество Воспроизвести в Kodi Приложение Kore не найдено. Установить его? \"Воспроизвести в Kodi\" Показать опцию воспроизведения через медиацентр Kodi Аудио Формат аудио по умолчанию - WebM — свободный - M4A — выше качество Скачать Следующее видео URL не поддерживается @@ -34,7 +32,6 @@ Видео и аудио Внешний вид Другое - Миниатюра видео-превью Миниатюра видео-превью Миниатюра аватара пользователя @@ -46,15 +43,12 @@ Тема Тёмная Светлая - Воспроизвести Ошибка сети - Использовать Tor Путь загрузки аудио Папка для хранения загруженных аудио Введите путь к папке для загрузки аудио - Начните с поиска Подождите… Файл уже существует @@ -64,7 +58,6 @@ Пауза Удалить Контрольная сумма - Имя файла Ошибка Сервер не поддерживается @@ -73,8 +66,6 @@ Подробнее Скопировано в буфер обмена Выберите доступную папку для загрузки - - Контент 18+ Ошибка Ваш комментарий (English): @@ -82,18 +73,17 @@ Автовоспроизведение Воспроизводить видео при вызове NewPipe из другого приложения Контент - Видео с возрастными ограничениями. Разрешить подобный контент можно в настройках. - вживую + Видео с возрастными ограничениями. Разрешить подобный контент можно в \"Настройках\". + Трансляция Загрузки Загрузки Отчёт об ошибке - Не удалось разобрать веб-сайт Не удалось полностью разобрать веб-сайт Контент недоступен Заблокировано GEMA Не удалось создать меню загрузки - Это прямая трансляция, они пока не поддерживаются. + Это прямая трансляция, пока не поддерживается Не удалось загрузить изображение Падение приложения/UI Простите, это не должно было произойти. @@ -103,14 +93,10 @@ Информация: Что произошло: Подробности: - - (Экспериментально) Загружать через Tor для повышения конфиденциальности (прямые трансляции пока не поддерживаются). Сообщить об ошибке Сообщить о нарушении - Создана папка для загрузок \"%1$s\" - Видео Аудио Повторить попытку @@ -118,14 +104,10 @@ Не удалось загрузить все миниатюры Не удалось расшифровать подпись URL у видео Не удалось найти ни одного потока - Воспроизвести - - В фоне В окне - - Только некоторые устройства могут воспроизводить видео в 2K/4K + Только некоторые устройства поддерживают видео в 2K/4K Формат видео по умолчанию Чёрная Восстановить окно @@ -136,39 +118,29 @@ Да Обновить Очистить - Старый плеер Управление жестами Всё Фильтр - - Новая цель Что:\\nЗапрос:\\nЯзык контента:\\nСервис:\\nВремя по Гринвичу:\\nПакет:\\nВерсия:\\nВерсия ОС: Это разрешение нужно для \nвоспроизведения в окне - reCAPTCHA - Открыть в отдельном окне + Открыть в режиме окна Отображать подсказки при поиске - Позже Отключено Изменение размера - В некоторых разрешениях НЕ будет звука, если включено  млн.  млрд. -  тыс. Разрешение очереди \"В окне\" - Запоминать размер и положение всплывающего окна + Помнить последние размер и позицию \"В окне\" Варианты поиска -Лучшее разрешение - - Использовать старый встроенный плеер на Mediaframework + Лучшее разрешение Запрос reCAPTCHA Запрошен ввод reCAPTCHA - Высокие разрешения NewPipe в окне О NewPipe @@ -187,35 +159,26 @@ Приветствуется всё — идеи, перевод, изменения дизайна, чистка кода или огромные изменения в коде. Чем больше сделано, тем лучше! © %1$s %2$s под лицензией %3$s Помощь проекту -Подписаться + Подписаться Не удалось изменить подписку Не удалось обновить подписку - Главная Подписки - Что нового - История поиска Хранить запросы поиска локально История и кэш Запоминать воспроизведённые потоки Возобновить при фокусе Возобновлять воспроизведение после перерывов (например, телефонных звонков) - - Уведомление NewPipe - Уведомления для NewPipe в фоне и во всплывающем окне - + Уведомление для NewPipe в фоне и во всплывающем окне Загрузки Допустимые символы имён файлов - - Заменяет недопустимые символы> + Заменяет недопустимые символы> Символ для замены - Буквы и цифры Большинство спецсимволов - История История поиска Просмотрено @@ -223,40 +186,34 @@ История История пуста История очищена - -Плеер + Плеер Поведение История и кэш Плейлист Отмена - Нет результатов Ничего нет - Нет подписчиков - %s подписчик - %s подписчика - %s подписчиков - - + %s подписчик + %s подписчика + %s подписчиков + Нет просмотров - %s просмотр - %s просмотра - %s просмотров - - + %s просмотр + %s просмотра + %s просмотров + Нет видео - %s видео - %s видео - %s видео - - + %s видео + %s видео + %s видео + Элемент удалён -Удалить этот элемент из истории поиска? -Контент главной страницы + Удалить этот элемент из истории поиска? + Главная страница Пустая страница Киоск Подписки @@ -264,7 +221,6 @@ Канал Выберите канал Выберите киоск - Киоск Тренды Топ 50 @@ -272,7 +228,6 @@ Добавлено в очередь в фоне Добавлено в очередь в окне Играть всё - Не удалось воспроизвести этот поток Сведения Настройки звука @@ -283,9 +238,7 @@ \"Зажмите, чтобы добавить\" Показать подсказку при нажатии \"В окне\" или \"В фоне\" на странице сведений о видео [Неизвестно] - Восстановление после ошибки плеера - В фоне В окне Зажмите, чтобы добавить в очередь @@ -294,23 +247,20 @@ Начать отсюда в плеере Начать отсюда в фоне Начать отсюда в окне -Потоковый плеер не найден (вы можете установить VLC) + Потоковый плеер не найден (можно установить VLC) Страна контента по умолчанию Сервис Всегда Только сейчас - Переключить ориентацию Перейти в фон Перейти в окно Перейти в плеер - Ошибка плеера без возможности восстановления Внешние плееры не поддерживают ссылки этих типов Неверная ссылка Потоки видео не найдены Потоки аудио не найдены - Пожертвовать Разработчики NewPipe ценой своего свободного времени делают вашу жизнь чуть удобнее. Отплатите им тем же — наслаждаясь чашечкой кофе, они смогут сделать NewPipe ещё лучше. Воздать должное @@ -318,30 +268,21 @@ Для получения более подробной информации и последних новостей о NewPipe посетите наш веб-сайт. Открыть боковую панель Закрыть боковую панель - Видеоплеер Фоновый плеер Плеер в окне - Всегда спрашивать - Получение сведений… Загрузка запрошенного контента -Загрузка файла прямой трансляции. + Скачать файл прямой трансляции Показать сведения - Закладки - Добавить к - Быстрый поиск позиции Неточный поиск позволяет плееру искать позицию быстрее, но менее точно Автодополнение очереди - Добавлять похожие потоки в очередь при воспроизведении последнего потока, если не включён повтор - Отладка Файл - Импорт данных Экспорт данных Текущие подписки, плейлисты и история будут заменены @@ -351,132 +292,98 @@ Файл не существует или нет разрешения на его чтение или запись Имя файла не может быть пустым Произошла ошибка: %1$s - Перетащите, чтобы изменить порядок - Создать Удалить одно Удалить всё Отклонить Переименовать - Удалить этот элемент из истории поиска? Удалить все элементы из истории? Недавно проигранные Часто проигрываемые - Экспорт завершён Импорт завершён Нет верного Zip-файла Внимание: не все файлы были импортированы. Текущие данные будут заменены. - Скоро здесь кое-что появится ;D - - Всегда спрашивать - Создать плейлист - Удалить плейлист - Переименовать плейлист + Удалить + Переименовать Имя Добавить в плейлист На миниатюру плейлиста - Добавить закладку Удалить закладку - - Удалить этот плейлист? + Удалить плейлист\? Плейлист создан Добавлено в плейлист Миниатюра плейлиста изменена Не удалось удалить плейлист - Без титров - Подогнать Заполнить Приблизить - Созданы автоматически - Размер шрифта субтитров - Маленький шрифт - Обычный шрифт - Большой шрифт - Синхронизировать - Включить LeakCanary Мониторинг утечки памяти может привести к зависанию приложения - Сообщать об ошибках жизненного цикла Принудительно сообщать о недоставляемых Rx-исключениях вне фрагмента или жизненного цикла после удаления - Импорт и экспорт Импорт Импорт из Экспорт в - Импорт… Экспорт… - Импорт файла Предыдущий экспорт - Не удалось импортировать подписки Не удалось экспортировать подписки - - Импорт подписок из YouTube загрузкой файла экспорта: + Импортируйте подписки YouTube, загрузив файл экспорта: +\n +\n1. Перейдите по ссылке %1$s +\n2. Выполните вход. +\n3. Дождитесь завершения загрузки файла экспорта. + Импортируйте профиль SoundCloud, введя его URL или ID: \n -\n1. Перейдите на: %1$s -\n2. Войдите, если необходимо -\n3. Должна начаться загрузка (это будет файл экспорта) - Импорт подписок из SoundCloud набрав либо URL, либо ваш ID: -\n -\n1. Включите \"режим рабочего стола\" в браузере (сайт недоступен на телефоне) -\n2. Пройдите на: %1$s -\n3. Войдите, если надо -\n4. Скопируйте адрес из адресной строки. +\n1. Включите режим \"Полная версия сайта\" в браузере. +\n2. Перейдите по ссылке %1$s +\n3. Выполните вход. +\n4. Скопируйте URL профиля из адресной строки. вашID, soundcloud.com/вашID - Это действие может вызвать большой расход трафика. \n \nПродолжить? -Загружать миниатюры - Отключите, чтобы не загружать миниатюры и сэкономить трафик и память. Изменение настройки очистит кэш изображений + Загружать миниатюры + Отключите, чтобы не загружать миниатюры и сэкономить трафик и память. Изменение настройки очистит кэш изображений. Кэш изображений очищен Очистить кэш метаданных Кэш метаданных очищен - Управление скоростью воспроизведения + Скорость воспроизведения Темп Тон Независимо (искажения) - Nightcore - По умолчанию -Удалить все загруженные данные веб-страниц + Удалить все загруженные данные веб-страниц При открытии ссылки на контент — %s - Нет потоков, доступных для загрузки - Титры Приложение для воспроизведения этого файла не установлено - Изменить размер текста и стиль титров. Нужен перезапуск - Очистить историю просмотров - Вся история просмотров будет удалена. + Удалить всю историю просмотров\? История просмотров удалена Очистить историю поиска Удалить историю запросов поиска Удалить историю воспроизведённых потоков - Вся история поиска будет удалена. - История поиска удалена. + Удалить всю историю поиска\? + История поиска удалена 1 элемент удалён. - NewPipe — свободное программное обеспечение: вы можете использовать, изучать и улучшать его по своему усмотрению. В частности, вы можете распространять и/или изменять его в соответствии с условиями GNU General Public License, опубликованной Free Software Foundation, либо версии 3, либо (по вашему выбору) любой более поздней версии. При открытии ссылки Хотите импортировать настройки? - Политика конфиденциальности NewPipe Проект NewPipe очень серьёзно относится к вашей конфиденциальности. Поэтому приложение не собирает никаких данных без вашего согласия. \nПолитика конфиденциальности NewPipe подробно объясняет, какие данные отправляются и хранятся при отправке отчёта о сбоях. @@ -485,7 +392,6 @@ \nВам необходимо принять её условия, чтобы отправить нам отчёт об ошибке. Принять Отклонить - Без ограничений Предел разрешения в мобильной сети Каналы @@ -496,21 +402,18 @@ Проматывать тишину Шаг Сброс - При сворачивании плеера При переключении со встроенного плеера на другое приложение — %s Ничего не делать Фоновый плеер Плеер в окне - Вид списка Список Сетка - Автоматически - + Автоматически Менять яркость плеера жестом Жест яркости - Загрузка на внешний накопитель невозможна. Сбросить расположение папки загрузки? + Загрузка на внешний накопитель пока невозможна. Сбросить расположение папки загрузки\? Внешний накопитель недоступен Вкладки, видимые на главной странице По умолчанию @@ -524,5 +427,48 @@ Отписаться Менять громкость плеера жестом Жест громкости - - + Обновления + Файл удален + Уведомление об обновлении + Уведомления о новой версии NewPipe + Обновления + Показывать уведомление с подтверждением обновления, когда доступна новая версия + Доступна новая версия NewPipe! + Нажмите, чтобы скачать + Завершено + приостановлено + Добавлено в очередь + Очередь + Действие запрещено системой + Ошибка скачивания + Перезаписать + Файл с таким именем уже существует + Файл с таким именем уже скачивается + Показать текст ошибки + Код + Файл не может быть создан + Целевая папка не может быть создана + Доступ запрещен системой + Сервер не найден + Сервер не поддерживает многопотоковое скачивание, попробуйте с @string/msg_threads = 1 + Запрашиваемый диапазон недопустим + Не найдено + Очистить завершенные + Остановить + События + Конференции + Завершающая обработка + На очереди + Загрузка завершена + " %s загрузок завершено" + Создать уникальное имя + Продолжить ожидающие загрузки (%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 ddf3888f5..e99fa65d7 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -15,25 +15,25 @@ Välj webbläsare rotation Använd extern videospelare - Några upplösningar kommer INTE ha ljud när det här alternativet är aktiverat + Tar bort ljud vid VISSA upplösningar Använd extern ljudspelare NewPipe popup-läge Bakgrund Extrafönster - Genväg för nerladdning av video - Genväg för att lagra nerladdade videor i - Fyll i genvägen som videor ska laddas ner till + Sökväg för nerladdning av video + Sökväg för lagring av nerladdade videor + Ange sökväg för nedladdning av videor - Genväg för nerladdning av ljud - Genväg för att lagra nerladdade ljudfiler i - Fyll i genvägen som ljudfiler ska laddas ner till + Sökväg för nerladdning av ljud + Nedladdat ljud lagras här + Ange sökväg för nedladdning av ljudfiler - Automatiskt spelar en video upp när NewPipe öppnas av en annan app + Spelar automatiskt upp videon när NewPipe öppnas av en annan app Standardupplösning Standardupplösning för popup Visa högre upplösningar - Det finns endast ett fåtal enheter som har stöd för uppspelning av 2K/4K-videor + Endast ett fåtal enheter har stöd för uppspelning av 2K/4K-videor Spela upp med Kodi Kore-appen hittades inte. Installera den? Visa alternativet \"Spela upp med Kodi\" @@ -42,8 +42,8 @@ Standardformat för ljud Videoformat som föredras Tema - Ljus - Mörk + Ljust + Mörkt Svart Kom ihåg popupstorlek och position Kom ihåg popup-rutans senaste storlek och position @@ -52,10 +52,10 @@ Sökförslag Visa förslag i samband med sökning - Ladda ner + Ladda ned - Nästa video - Visa \'nästkommande\' och \'liknande\' videor + Nästa + Visa \'Nästa\' och \'Liknande\' videor Webbadressen stöds inte Standard innehållsspråk Video & Ljud @@ -66,11 +66,11 @@ Spelar upp i popup-läge Spela upp Innehåll - Visa åldersbegränsat innehåll - Videon är åldersbegränsad. Du kan aktivera åldersbegränsade videor i inställningarna. - direkt - Nerladdningar - Nerladdningar + Åldersbegränsat innehåll + Videon är åldersbegränsad. Du kan aktivera åldersbegränsade videor i \"inställningar\". + LIVE + Nedladdningar + Nedladdningar Felrapport Alla Kanal @@ -89,10 +89,10 @@ Det gick inte att analysera webbplatsen helt Innehållet är inte tillgängligt Blockerat av GEMA - Kunde inte ställa in nerladdningsmenyn - Det här är en DIREKTSÄNDNING vilket ännu inte stöds. + Kunde inte ställa in nedladdningsmenyn + Direktsändningar stöds inte än Kunde inte ladda Bild - App/AnvändarGränssnitt kraschade + App/Användargränssnittet kraschade Oj, det där skulle inte ha hänt. Tyvärr så inträffade det några fel. RAPPORTERA @@ -102,8 +102,8 @@ Detaljer: - Gillanden - Ogillanden + Gillar + Ogillar Använd Tor Rapportera ett fel %1$s visningar @@ -119,17 +119,17 @@ Vad är nytt Spela upp automatiskt - Sök historik + Sökhistorik Spara sökfrågor lokalt Historik & Cacheminne Håll koll på videor som du tittat på - Fortsätt då fokus fås + Återuppta när fokus återfås Fortsätta spela efter avbrott (t.ex. telefonsamtal) - Visa \"håll för att lägga till\" tips + Visa \"Håll för att lägga till\" tips Visa tips när bakgrunds- eller popup-knappen trycks på sidan för videodetaljer Spelare Beteende - Historik & Cacheminne + Historik & cacheminne Tillagd till bakgrunds-spelar kön Tillagd till popup-spelar kön Spellista @@ -149,11 +149,11 @@ Återhämtar sig från spelarfel Rapportera fel via e-post - Vad:\\nBegäran:\\nInnehålls Språk:\\nTjänst:\\nGMT Tid:\\nPaket:\\nVersion:\\nOS-version: + Vad:\\nBegäran:\\nInnehållsspråk:\\nTjänst:\\nGMT Tid:\\nPaket:\\nVersion:\\nOS-version: Videons miniatyrbild Videons miniatyrbild Uppladdarens avatar miniatyrbild - (Experimentellt) Tvinga nedladdningstrafik via Tor för ökad integritet (strömmande videon stöds inte ännu). + (Experimentellt) Tvinga nedladdningstrafiken via Tor för ökad integritet (videostreaming stöds inte än). Användarrapport Inga resultat Här va\' det tomt @@ -165,8 +165,6 @@ Ljud Försök igen Tillgång till lagringsområde nekades - Använd gamla spelaren - Gamla inbyggda Mediaframework-spelaren k mn @@ -202,7 +200,7 @@ Filnamn Trådar Fel - Serveren stöds inte + Servern stöds inte Filen finns redan Felaktig webbadress eller Internet inte tillgängligt NewPipe nedladdning @@ -235,10 +233,10 @@ Om Medverkande Licenser - Öppet och enkel Android app för mediastreaming. + Öppen och enkel Android app för mediastreaming. Visa på GitHub NewPipes licens - Vad du än har för idéer gällande översättning, designändringar, kod rengöring eller riktigt tunga så är hjälp alltid välkommet. Ju mer som görs desto bättre blir det! + Vad du än har för idéer; översättningar, designändringar, kodstädning eller riktiga stora kodändringar—hjälp är alltid välkommen. Ju mer som görs desto bättre blir det! Läs hela licensen Bidra @@ -259,18 +257,18 @@ Flödessida Kanal-sida Välj en kanal - Ingen kanal prenumererad än + Inga kanal prenumerationer ännu Välj en kiosk Kiosk Trend Topp 50 Aktuellt - Bakgrunds-spelare + Bakgrundsspelare Popup-spelare Ta bort Detaljer - Ljud inställningar + Ljudinställningar Håll för att placera i kön Placera i bakgrunds-kön Placera i popup-kön @@ -284,30 +282,30 @@ För att få mer information och de senaste nyheterna om NewPipe, besök vår webbplats. Visa info - Bokmärken + Bokmärkta Spellistor Lägg till - Använda snabb inexakt sökning + Använd snabb inexakt sökning Ladda miniatyrbilder - Inaktivera för att stoppa alla miniatyrbilder från att ladda och spara på data och minnesanvändning. Ändring av detta kommer att rensa cache-minnet - Bild cacheminnet var rensad + Inaktivera för att stänga av laddning av miniatyrbilder, sparar data och minnesanvändning. Förändringar kommer att rensa cache-minnet. + Bild cacheminnet rensad Tjänst Debug Alltid Bara en gång Fil - Byta orientationen + Växla orienteringen Rensa metadatan i cacheminnet - Ingen strömspelare hittades (du kan installera VLC för att spela upp) - Ladda ned sändning. - "Inexakt sökning tillåter spelaren att söka positioner snabbare med minskad precision " + Ingen strömspelare hittades (du kan installera VLC för att spela upp). + Ladda ned sändning + Inexact sökning ger möjligheten att söka snabbare med mindre precision Ta bort alla cachade webbsidor Metadata cache rensad "Köa nästa ström automatiskt " - Lägg automatiskt till en relaterad ström när du spelar den sista strömmen i en ej upprepad kö - Standard innehåll land + Lägg automatiskt till en relaterad ström när du spelar den sista strömmen i en ej upprepad kö. + Standard innehållsland Kanaler Spellistor Spår @@ -318,15 +316,15 @@ Importera databas Exportera databas - Kommer att skriva över din nuvarande historik och prenumerationer + Skriver över din nuvarande historik och prenumerationer Exportera historik, prenumerationer och spellistor Rensa visningshistorik Tar bort historiken för spelade videoklipp - Ta bort hela visningshistoriken. + Ta bort hela visningshistoriken\? Visningshistorik borttagen. Rensa sökhistorik Tar bort historiken för sökta nyckelord - Ta bort hela sökhistoriken. + Ta bort hela sökhistoriken\? Sökhistorik borttagen. Externa spelare stöder inte dessa typer av länkar Ogiltig URL @@ -334,7 +332,7 @@ Inga ljudspår hittades Ogiltig katalog Ogiltig fil/innehålls källa - Filen finns inte eller otillräcklig behörighet att läsa eller skriva till den + Filen finns inte eller behörighet att läsa eller skriva till den saknas Filnamnet får inte vara tomt Ett fel uppstod: %1$s Inga strömmar är tillgängliga för nedladdning @@ -345,14 +343,14 @@ Ta bort en Ta bort alla Avfärda - Döp om + Byt namn 1 objekt borttaget. Ingen app installerad för att spela upp filen NewPipes Sekretesspolicy - "NewPipe projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. NewPipes Sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport." + NewPipe projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. NewPipes Sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport. Läs sekretesspolicy NewPipe är copyleft fri programvara: Du kan använda, studera, dela och förbättra den som du vill. Specifikt kan du distribuera och/eller modifiera det under villkoren för GNU General Public License som publicerats av Free Software Foundation, antingen version 3 av licensen, eller (om du så önskar) en senare version. Vill du ta bort det här föremålet från visningshistoriken? @@ -360,9 +358,9 @@ Senast spelade Mest spelade - Exporteringen har slutförts - Importeringen har slutförts - Ingen giltig ZIP-fil + Exporterad + Importerad + Ogiltig ZIP-fil Varning: det gick inte att importera alla filer. Det här kommer skriva över dina nuvarande inställningar. Vill du också importera inställningar? @@ -372,7 +370,7 @@ Något kommer att visas här snart ;D - Föredra \'öppna\' åtgärden + Föredragen \'öppna\' åtgärd Standardåtgärden när du öppnar innehåll — %s Videospelare @@ -383,9 +381,9 @@ Hämtar information… Laddar begärt innehåll - Skapa ny spellista - Radera spellista - Byt namn på spellista + Ny spellista + Radera + Byt namn Namn Lägg till i spellistan Använd som spellistans miniatyrbild @@ -393,11 +391,11 @@ Bokmärk spellistan Ta bort bokmärke - Vill du ta bort den här spellistan? + Ta bort spellista\? Spellistan skapades Tillagad i spellistan - Spellistans miniatyrbild förändrades - Kunde inte ta bort spellistan + Spellistans miniatyrbild förändrades. + Kunde inte ta bort spellistan. Ingen textning @@ -405,18 +403,18 @@ Fyll Zoom - Auto-genererade + Autogenererade Textning - Ändra spelaren textskala och bakgrundsstil. Kräver att appen startar om för att träder i kraft + Ändra spelarens textskala och bakgrundsstil. Kräver att appen startar om för att träder i kraft. Aktivera LeakCanary Minnesläcka övervakning kan orsaka att appen inte svarar under heap dumpning - Rapportera Out-of-lifecycle fel + Rapportera out-of-lifecycle fel Tvinga rapportering av otillåtna Rx-undantag utanför fragment eller aktivitetslivscykel efter uppstädning - Importera/Exportera + Importera/exportera Importera Importera från Exportera till diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 09056c21f..28c84fc9e 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -1,6 +1,6 @@ - + -தொடங்குவதற்கு தேடல் பொத்தானை அழுத்தவும் + தொடங்குவதற்கு தேடல் பொத்தானை அழுத்தவும் "%1$s பார்வைகள்" "%1$s அன்று வெளியிடப்பட்டது" ஸ்டீரீம் பிளேயர் கண்டறியப்படவில்லை. வில்சி நிருவ வேண்டுமா? @@ -14,4 +14,146 @@ பகிர உலாவியை தேர்ந்தெடு சுழற்சி - + எந்த ஒரு இயக்கியும் கிடைக்கவில்லை (VLC-ஐ பயன்படுத்தவும்). + திரைமேல் நிலையில் காணவும் + தாரை கோப்பை பதிவிறக்கு + நீங்கள் கூறியது: %1$s இதுதானா\? + வெளி காணொலி இயக்கியை பயன்படுத்தவும் + வெளி ஒலி இயக்கியை பயன்படுத்தவும் + NewPipe திரைமேல் நிலை + குழுசேர் + குழு சேர்க்கப்பட்டது + சேனல் குழுவிளகப்பட்டது + குழுசேர்தலை மாற்ற இயலவில்லை + குழுசேர்தலை புதுப்பிக்க இயலவில்லை + தகவல் காண்பி + முதன்மை + குழுசேர்ப்புகள் + குறிக்கப்பட்ட காணொலி பட்டியல்கள் + புதிதாக + பின்னால் + திரைமேல் + சேர் + காணிலி தரவிறக்கப் பாதை + தரவிறக்கப்பட்ட காணொலிகளின் சேமிப்புப் பாதை + காணொலியின் தரவிறக்கப் பாதையை உள்ளிடு + ஒலி பதிவிறக்க அடைவு + தரவிறக்கப்பட்ட ஒலி இங்கே சேமிக்கப்பட்டுள்ளது + ஒலி கோப்புகளுக்கான தரவிறக்கப் பாதையை உள்ளிடு + தானே இயக்கு + NewPipe மற்றொரு செயலியில் இருந்து அழைக்கப்படும் போது காணொலியை இயக்கும் + முதல் பிரிதிறன் + முதல் திரைமேல் நிலை பிரிதிறன் + மேம்பட்ட பிரிதிறன்களைக் காண்பி + Kodi கொண்டு இயக்கு + Kore செயலி காணவில்லை. நிறுவலாமா\? + \"Kodi கொண்டு இயக்கு\" இடப்பை காண்பி + ஒலி + முதல் ஒலி வடிவம் + முதல் காணிலி வடிவம் + M4A - மேம்பட்ட தரம் + வார்ப்புரு + வெளிர் + அடர் + கருப்பு + திரைமேல் அளவையும் இடத்தையும் நினைவுகொள் + திரைமேல் நிலையின் கடைசி அளவையும் இடத்தையும் நினைவுகொள் + வில்லைப்படத்தைக் காண்பி + பட பதுக்ககம் அழிக்கப்பட்டது + மேல்நிலைத்தரவின் பதுக்ககம் அழிக்கப்பட்டது + பதுக்ககத்திலிருக்கும் வலைப்பக்கத் தரவு அழிக்கப்பட்டது + மேல்நிலைத் தரவு பதுக்ககம் அழிக்கப்பட்டது + ஆலோசனைகளை தேடு + தேடல் வரலாறு + வரலாறு மற்றும் பதுக்ககம் + பார்த்த காணொலிகளை குறிப்பிடு + தரவிறக்கு + அடுத்து + சேவை + இயக்கி + பண்பு + ஒலி மற்றும் காணொலி + வரலாறு மற்றும் பதுக்ககம் + திரைமேல் + தோற்றம் + மற்றவை + பிண்ணணியில் ஓடுகிறது + திரைமேல் நிலையில் ஓடுகிறது + இயக்கு + நேரடி ஒளிபரப்பு + தரவிறக்கங்கள் + தரவிறக்கங்கள் + அனைத்தும் + காணொலி பட்டியல் + காணொலி பட்டியல்கள் + பயனர்கள் + ஆம் + பின்னர் + நீக்கு + எப்பொழுதும் + ஒரு முறை + கோப்பு + பார்த்த வரலாற்றை நீக்கு + பார்த்த வரலாறு அழிக்கப்பட்டது. + பார்த்த வரலாற்றை நீக்கு + தேடல் வரலாறு அழிக்கப்பட்டது. + கோப்பு பெயர் காலியாக இருக்க முடியாது + மன்னியுங்கள். சிறிய பிழை நிகழ்ந்தது. + தகவல்: + விவரங்கள்: + விருப்பங்கள் + Tor பயன்படுத்து + முடிவுகள் இல்லை + எந்த முடிவுகளும் இல்லை + இழுத்து வரிசைமாற்று + தரவிறக்க அடைவு உருவாக்கப்பட்டது \'%1$s\' + காணொலி + ஒலி + மீண்டும் முயற்சி + சில பிரிதிறன்கலில் ஒலி நீக்கப்படும் + சில சாதனங்கள் மட்டுமெ 2k/4k காணொளிகலை இயக்கும் + காணொளிகலை Kodi media center கொண்டு இயக்கும் இடப்பை காண்பி + வேகமான பொருத்தமற்ற தேடலை பயன்படுத்து + இயக்கியின் சைகை கட்டுப்பாடுகள் + "இயைக்கியின் பிரகாசம் மற்றும் ஒலியினை சைகைமூலம் கட்டுப்படுத்து" + தேடும்போது பரிந்துரைகளை கான்பி + "தொலைபேசி அழைப்பு போன்ற குறுக்கீடுகளுக்கு பிறகு தொடரவும் " + \'அடுத்து\' மற்றும் \'ஒப்பான\' காணொளிகலை காண்பி + தேடப்பட்ட வாக்கியத்தை அமைவிடத்தில் சேமிக்கவும் + ஆதரிக்கப்படாத URL + இயல்புநிலை தகவல்களின் நாடு + தகவல்களின் இயல்பு மொழி + பிழைதிருத்து + உள்ளடக்கம் + வயது வரம்புக்கு உட்பட்டது + அடுத்த தாரையில் தானாக சேர் + "பின்னணி இயக்கியின் வரிசையில் சேர்க்கப்பட்டது " + அமைப்புகள் மூலம் வயது வரையறுக்கப்பட்ட வீடியோக்கலை காணலாம். + பிழை அறிக்கை + சேனல் + சேனல்கள் + செயலிழக்கச் செய்யப்பட்டுள்ளது + வடிகட்டு + புதுப்பி + மறுஅளவாக்கம் + முந்தய நிலைக்குச் செல் + அனைத்தையும் இயக்கு + NewPipe அறிவிப்புகள் + [அறியப்படவில்லை] + நோக்குநிலை மாற்று + பின்னனிக்கு மாறு + \"சேர்ப்பதர்க்கு அழுத்தவும்\" அறிவிப்பை காண்பி + தகவல்கலை இறக்குமதி செய் + தகவல்கலை ஏற்றுமதி செய் + "தற்போதைய வரலாறு மற்றும் சந்தாக்கள் பதிலாக சேர்க்கப்படும் " + வரலாறு, சந்தாக்கள் மற்றும் பட்டியல்கலை ஏற்றுமதி செய் + பார்த்த அனைத்து வரலாற்றயும் அழிக்கவா\? + தேடப்பட்ட வார்த்தைகளின் வரலாற்றை அழி + அனைத்து வரலாற்றயும் அழிக்கவா\? + பிழை + சிறந்த திரைத் தெளிவுத்திறன் + பாப் அப் இயக்கியின் வரிசையில் சேர்க்கப்பட்டது + "NewPipe பின்னனி மற்றும் பாப்அப் இயக்கிகளின் அறிவிப்புகள்" + "பாப்அப் இயக்கிக்கு மாறு " + குழுவிலகு + \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index bffad3ed8..a2dd72807 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,11 +1,11 @@ - + Başlamak için aramaya dokun %1$s görüntüleme - Yayımlanma: %1$s - Akış oynatıcı bulunamadı. VLC\'yi kurmak ister misiniz? - Kur - İptal + Yayınlanma: %1$s + Akış oynatıcısı bulunamadı. VLC\'yi yüklemek istiyor musunuz\? + Yükle + İptal et Tarayıcıda aç Paylaş İndir @@ -13,411 +13,339 @@ Ayarlar Bunu mu demek istediniz: %1$s\? Şununla paylaş - Tarayıcı seç + Tarayıcı seçin döndürme - Harici video oynatıcı kullan - Harici ses oynatıcı kullan - + Harici video oynatıcı kullanın + Harici ses oynatıcı kullanın Video indirme konumu - İndirilen videoların saklanacağı konum - Videolar için indirme konumu girin - - Ses indirme konumu - İndirilmiş seslerin saklanacağı konum - Ses dosyaları için indirme konumu girin - - Kendiliğinden Oynat - NewPipe başka uygulamadan çağırıldığında videoyu oynatır - Öntanımlı çözünürlük + İndirilen videoları saklamak için konum + Video indirme konumunu giriniz + Ses indirme klasörü + İndirilen sesler burada depolanır + Ses dosyaları için indirme konumunu giriniz + Otomatik oynat + NewPipe başka bir uygulamadan çağrıldığında bir video oynatır + Varsayılan çözünürlük Kodi ile oynat - Kore uygulaması bulunamadı. Kurulsun mu? + Kore uygulaması bulunamadı. Yüklensin mi\? \"Kodi ile oynat\" seçeneğini göster - Kodi ortam merkezi aracılığıyla video oynatmak için bir seçenek görüntüler - Öntanımlı ses biçimi + Kodi medya merkezi üzerinden video oynatmak için bir seçenek görüntüleyin + Varsayılan ses biçimi Tema Koyu Açık - İndir - Sonraki video - \'Sonraki\' ve \'benzer\' videoları göster - URL desteklenmiyor - Öntanımlı içerik dili + "Sonraki " + \'Sonraki\' ve \'Benzer\' videoları göster + Desteklenmeyen URL + Varsayılan içerik dili Ses - Video ve Ses + Video ve ses Görünüm Diğer Arka planda oynatıyor Oynat İçerik - Yaş sınırlı içeriği göster - Yaş Sınırlı Video. Bu gibi materyallere Ayarlar\'dan izin verilebilir. - canlı + Yaş kısıtlamalı içerik + Yaş kısıtlamalı videoyu göster. Bu tür materyallere Ayarlar\'dan izin verilebilir. + CANLI İndirilenler İndirilenler Hata bildirimi - Hata Ağ hatası - Küçük resimlerin tümü yüklenemedi - Video URL imzası çözülemedi + Tüm küçük resimler yüklenemedi + Video URL imzasının şifresi çözülemedi Web sitesi ayrıştırılamadı - Web sitesi tümüyle ayrıştırılamadı - İçerik kullanılabilir değil + Web sitesi tamamen ayrıştırılamadı + İçerik kullanılamıyor GEMA tarafından engellendi - Bu, henüz desteklenmeyen bir CANLI AKIŞ. + Canlı akışlar henüz desteklenmiyor Herhangi bir akış alınamadı - Resim yüklenemedi - Uygulama/arayüz çöktü + Görüntü yüklenemedi + Uygulama/kullanıcı arayüzü çöktü Üzgünüz, bu olmamalıydı. - Hatayı e-postayla bildir + Hatayı e-postay aracılığıyla bildir Üzgünüz, bazı hatalar oluştu. BİLDİR Bilgi: Ne oldu: Ne:\\nİstek:\\nİçerik Dili:\\nHizmet:\\nGMT Zamanı:\\nPaket:\\nSürüm:\\nİşletim sistemi sürümü: Video ön izleme küçük resmi - Yükleyenin küçük resmi + Yükleyicinin avatar küçük resmi Beğeni Beğenmeme - Tor kullan + Tor kullanın (Deneysel) Artırılmış gizlilik için indirme trafiğini Tor\'dan geçmesi için zorla (video yayımlama henüz desteklenmemektedir). Bir hata bildir - Kullanıcı bildirimi - + Kullanıcı raporu İndirme dizini \'%1$s\' oluşturulamıyor - İndirme dizini \'%1$s\' oluşturuldu - + İndirme dizini oluşturuldu \'%1$s\' Video Ses Yeniden dene Depolama erişim izni reddedildi - Başlat Duraklat Oynat Sil Sağlama - Yeni görev Tamam - - Dosya adı İş parçacığı Hata - Sunucu desteklenmiyor + Desteklenmeyen sunucu Dosya zaten var - Hatalı biçimlendirilmiş URL veya İnternet yok - NewPipe İndiriyor - Ayrıntılar için dokun + Hatalı biçimlendirilmiş URL veya İnternet mevcut değil + NewPipe İndiriliyor + Ayrıntılar için dokunun Lütfen bekleyin… Panoya kopyalandı Lütfen uygun bir indirme klasörü seçin - - İndirme menüsü ayarlanamadı - Açılır oynatıcı kipinde aç - NewPipe açılır oynatıcı kipi - - Öntanımlı açılır oynatıcı çözünürlüğü - Daha yüksek çözünürlükleri göster - Yalnızca bazı aygıtlar 2K/4K video oynatmayı destekler - Öntanımlı video biçimi + Açılır pencere kipinde aç + NewPipe açılır pencere kipi + Varsayılan açılır pencere çözünürlüğü + Yüksek çözünürlükleri göster + Sadece bazı cihazlar 2K/4K video oynatmayı destekliyor + Varsayılan video biçimi Siyah - - Açılır oynatıcı kipinde oynatılıyor + Açılır pencere kipinde oynatılıyor Tümü Kanal Evet Sonra Devre dışı - Yorumunuz (İngilizce): Ayrıntılar: - - Video ön izleme küçük resmi Eski oynatıcıyı kullan Eski içe gömülü Mediaframework oynatıcısı - - - K + B M - B - - Bu izin açılır oynatıcı kipinde -\naçmak için gerekli - + MR + Bu izin, açılır pencere kipinde +\naçmak için gereklidir reCAPTCHA - reCAPTCHA Formu - reCAPTCHA Formu istendi - - Arka Plan - Açılır Oynatıcı - - Süz + reCAPTCHA mücadelesi + reCAPTCHA mücadelesi istendi + Arka plan + Açılır pencere + Filtrele Yenile Temizle - - Açılır oynatıcı boyutunu ve konumunu hatırla - Açılır oynatıcının ayarlandığı son boyutu ve konumu hatırla - - Açılır Oynatıcı + Açılır pencere boyutunu ve konumunu hatırla + Açılan pencerenin son boyutunu ve konumunu hatırlar + Açılır pencere Boyutlandırılıyor - - Bu seçenek etkinken bazı çözünürlüklerin sesi olmayacaktır - Oynatıcının parlaklığını ve sesini yönetmek için el hareketlerini kullan - Oynatıcı el hareketi denetimleri + BAZI çözünürlüklerde ses kaldırılır + Oynatıcının parlaklığını ve sesini kontrol etmek için hareketleri kullanın + Oynatıcı hareket kontrolü Arama önerileri - Aramada önerileri göster - -En iyi çözünürlük - + Arama yaparken önerileri göster + En iyi çözünürlük NewPipe Hakkında Ayarlar Hakkında - Üçüncü Taraf Lisanslar + Üçüncü Taraf Lisansları © %1$s, %2$s tarafından %3$s altında Lisans yüklenemedi Web sitesini aç Hakkında Katkıda bulunanlar Lisanslar - Android\'de özgür, hafif akış oynatımı. + Libre, Android\'de hafif bir oynatıcı. GitHub\'da gör NewPipe\'ın Lisansı Fikirleriniz; çeviri, tasarım değişiklikleri, kod temizliği ya da gerçek köklü kod değişikleri olsun yardımınıza her zaman açığız. Ne kadar çok yapılırsa o kadar iyi olur! Lisansı oku Katkıda bulun -İndirme + İndir Dosya adlarında izin verilen karakterler Geçersiz karakterler bu değer ile değiştirilir Değiştirme karakteri - Harfler ve rakamlar - Özel karakterlerin çoğu - + En özel karakterler Abone ol - Abone olundu + Abone Kanal aboneliğinden çıktınız - Abonelik değiştirilemiyor - Abonelik güncellenemiyor - + Abonelik değiştirilemedi + Abonelik güncellenemedi Ana Abonelikler - - Neler Yeni - + Yenilikler Arama geçmişi - Arama sorgularını yerel olarak sakla - Geçmiş ve Önbellek - İzlenen videoların kaydını tut + Arama sorgularını yerel olarak saklayın + Geçmiş ve önbellek + İzlenen videoları takip edin Odaklanıldığında sürdür - Kesilmelerden (ör: Telefon çağrıları) sonra oynatmayı sürdür + Kesintilerden sonra (örneğin telefon çağrısı) oynatmaya devam et Oynatıcı Davranış - Geçmiş ve Önbellek + Geçmiş ve önbellek Oynatma Listesi Geri Al - NewPipe Bildirimi - NewPipe Arka Plan ve Açılır Oynatıcılar için Bildirimler - + NewPipe arka plan ve açılır pencere oynatıcıları için bildirimler Sonuç yok - Burada Cırcır Böceklerinden Başka Şey Yok - + Burada cırcır böceklerinden başka bir şey yok Abone yok - %s abone - %s abone - - + %s abone + %s abone + Görüntüleme yok - %s görüntüleme - %s görüntüleme - - + %s görüntüleme + %s görüntüleme + Video yok - %s video - %s video - - + Video + Video + Geçmiş Aranan İzlenen - Geçmiş devre dışı + Geçmiş kapalı Geçmiş Geçmiş boş Geçmiş temizlendi Öge silindi -Bu içeriği arama geçmişinden silmek istiyor musunuz? -\"Kuyruğa almak için basılı tut\" ipucunu göster - Video ayrıntıları sayfasında arka plan veya açılır oynatıcı düğmesine basıldığında ipucu göster - Arka plan oynatıcıda kuyruğa eklendi - Açılır oynatıcıda kuyruğa eklendi + Bu içeriği arama geçmişinden silmek istiyor musunuz\? + \"Eklemek için basılı tutun\" ipucunu göster + Video ayrıntıları sayfasında arka plan veya açılır pencere düğmesine basıldığında ipucu gösterilir + Arka plan oynatıcı kuyruğuna eklendi + Açılır pencere oynatıcısı kuyruğa eklendi Tümünü Oynat - [Bilinmeyen] - Bu akış oynatılamadı - Kurtarılamaz oynatıcı hatası oluştu + Kurtarılamayan oynatıcı hatası oluştu Oynatıcı hatasından kurtarılıyor - Ana sayfanın içeriği Boş Sayfa - Köşk Sayfası + Kiosk Sayfası Abonelik Sayfası Besleme Sayfası Kanal Sayfası - Kanal seç - Henüz abone olunan kanal yok + Kanal seçin + Henüz kanal aboneliği yok Köşk seç - Köşk - Trendler - En İyi 50 - Yeni ve sıcak - Arka Plan Oynatıcı - Açılır Oynatıcı + Popüler + En iyi 50 + En yeniler + Arkaplan oynatıcı + Açılır oynatıcı Kaldır Ayrıntılar Ses Ayarları - Kuyruğa Almak İçin Basılı Tut - Arka Planda Kuyruğa Al - Açılır Oynatıcıda Kuyruğa Al - Burada Oynatmaya Başla - Burada Arka Planda Başlat - Burada Açılır Oynatıcıda Başlat -Bağış yapın - NewPipe, size en iyi deneyimi sunmak için zamanını harcayan gönüllüler tarafından geliştirilmiştir. Bir fincan kahveyi yudumlarken NewPipe\'ı daha da iyi yapmaları için geliştiricilere yardımcı olun. - Geri ver + Kuyruğa eklemek için basılı tutun + Arka planda kuyruğa ekle + Yeni açılan oynatıcıda kuyruğa al + Burada oynatmaya başla + Burada arka planda başlat + Burada yeni açılır oynatıcıda başlat + Bağış yapın + NewPipe, size en iyi deneyimi getiren zaman harcama gönüllüler tarafından geliştirilmiştir. Bir fincan kahvenin tadını çıkarırken geliştiricilerin New Pipe\'ı daha iyi hale getirmelerine yardımcı olun. + Bağış yap Web sitesi - Daha çok bilgi ve haber için NewPipe Web Sitesini ziyaret edin. - Öntanımlı içerik ülkesi + Daha çok bilgi ve haber için NewPipe web sitesini ziyaret edin. + Varsayılan içerik ülkesi Hizmet - Yönelimi Değiştir - Arka Plana Geç - Açılır Oynatıcıya Geç - Ana Görünüme Geç - - Çekmeceyi Aç - Çekmeceyi Kapat - Akış oynatıcı bulunamadı (oynatmak için VLC\'yi kurabilirsiniz) + Yönlendirmeyi değiştir + Arka plana geç + Açılır pencereye geç + Ana görünüme geç + Çekmeceyi aç + Çekmeceyi kapat + Akış oynatıcı bulunamadı (Bunu oynamak için VLC yükleyebilirsiniz). Her Zaman Yalnızca Bir Kez - - Harici oynatıcılar bu türdeki bağlantıları desteklemiyor + Harici oynatıcılar bu tür bağlantıları desteklemez Geçersiz URL Video akışı bulunamadı Ses akışı bulunamadı - Video oynatıcı Arka plan oynatıcı Açılır oynatıcı Her zaman sor - Bilgi alınıyor… İstenen içerik yükleniyor -Veri tabanını içe aktar + Veri tabanını içe aktar Veri tabanını dışa aktar - Şu anki geçmişinizi ve aboneliklerinizi geçersiz kılar + Geçerli geçmişinizi ve aboneliklerinizi geçersiz kılar Geçmişi, abonelikleri ve oynatma listelerini dışa aktar - Dışa aktarım bitti - İçe aktarım bitti + Dışa aktarıldı + İçe aktarıldı Geçerli ZIP dosyası yok Uyarı: Tüm dosyalar içe aktarılamadı. - Bu, şu anki kurulumunuzu geçersiz kılacak. - - Akış dosyasını indir. - Bilgileri göster - - Yer İmleri - - Listeye Ekle - - Yeniden sıralamak için sürükle - + Bu, var olan kurulumunuzu geçersiz kılacaktır. + Akış dosyasını indir + Bilgi göster + Yer İmlenen Oynatma Listeleri + Ekle + Yeniden düzenlemek için sürükleyin Oluştur Birini Sil Tümünü Sil - Görmezden gel + Reddet Yeniden adlandır - - Bu ögeyi izleme geçmişinden silmek ister misiniz? - Tüm ögeleri geçmişten silmek istediğinize emin misiniz? + Bu ögeyi izleme geçmişinden silmek ister misiniz\? + Tüm ögeleri geçmişten silmek istediğinize emin misiniz\? Son Oynatılan En Çok Oynatılan - Her zaman sor - - Yeni Oynatma Listesi Oluştur - Oynatma Listesini Sil - Oynatma Listesini Yeniden Adlandır + Yeni Oynatma Listesi + Sil + Yeniden adlandır Ad Oynatma Listesine Ekle - Oynatma Listesi Küçük Resmi Olarak Belirle - - Oynatma Listesini İmle - Yer İmini Kaldır - - Bu oynatma listesini silmek istiyor musunuz? + Oynatma listesi küçük resmi olarak ayarla + Oyn. listesini imle + Yer imini kaldır + Bu oynatma listesi silinsin mi\? Oynatma listesi oluşturuldu - Oynatma listesine eklendi - Oynatma listesi küçük resmi değiştirildi - Oynatma listesi silinemedi - - Alt Yazı Yok - + Oynatma listesinde + Oynatma listesinin küçük resmi değiştirildi. + Oynatma listesi silinemedi. + Altyazı yok Sığdır Doldur - Yaklaştır - + Yakınlaştır Alt yazı boyutu Daha küçük yazı tipi Normal yazı tipi Daha büyük yazı tipi -Hata Ayıklama - Yakında burada bir şeyler görünecek :) - - - Kendiliğinden Üretilmiş - LeakCanary\'i Etkinleştir - Bellek sızıntı gözlemlemesi, yığın boşaltımı sırasında uygulamanın tepkisiz kalmasına neden olabilir - - Olağan Dışı İşleyiş Hatalarını Bildir + Hata ayıklama + Yakında bir şeyler burada görünecek ;D + Kendiliğinden Oluşturulan + LeakCanary\'i etkinleştir + Bellek sızıntısı izleme, yığın boşaltımı sırasında uygulamanın yanıt vermemesine neden olabilir + Yaşam dışı döngü hatalarını bildir Parçanın dışında veya atımdan sonraki etkinlik yaşam döngüsündeki teslim edilemeyen Rx beklentilerinin bildirimini zorla - -Hızlı isabetsiz konumlama kullan - İsabetsiz konumlama, oynatıcının azaltılmış kesinlikle daha hızlı konumlama yapmasını sağlar - Sonraki akışı kendiliğinden kuyruğa ekle - Yinelemeyen bir kuyruktaki son akış oynatılırken ilgili bir akışı kendiliğinden sonuna ekle + Hızlı isabetsiz konumlama kullan + İsabetsiz konumlama, oynatıcının daha düşük hassasiyetle daha hızlı pozisyon aramasını sağlar + Sonraki akışı otomatik kuyruğa ekle + Yinelenmeyen bir kuyruktaki son akışı oynatırken ilgili akışı otomatik ekler. EŞZAMANLA - Dosya - - Geçersiz dizin - Geçersiz dosya/içerik kaynağı - Dosya yok ya da okuma veya yazma izni yetersiz + Böyle bir dizin yok + Dosya/içerik kaynağı değil + Dosya yok ya da okuma veya yazma izni yok Dosya adı boş olamaz Hata oluştu: %1$s - - İçe/Dışa Aktar - İçe Aktar + İçe/dışa aktar + İçe aktar Şuradan içe aktar Şuna dışa aktar - İçe aktarılıyor… Dışa aktarılıyor… - Dosyayı içe aktar Önceki dışa aktarım - Abonelikler içe aktarılamadı Abonelikler dışa aktarılamadı - Dışa aktarım dosyasını indirerek YouTube aboneliklerinizi içe aktarın: \n \n1. Şu adrese gidin: %1$s @@ -430,67 +358,122 @@ \n3. Sorulduğunda giriş yapın \n4. Yönlendirildiğiniz profil URL\'sini kopyalayın. kimliginiz, soundcloud.com/kimliginiz - Bu sürecin ağa yük olabileceğini unutmayın. \n \nDevam etmek istiyor musunuz? -Küçük resimleri yükle - Küçük resimlerin tümünün yüklenmesini engellemek, bellek ve veri kullanımını azaltmak için devre dışı bırakın. Bunu değiştirmek, hem bellekteki hem de diskteki resim önbelleğini temizler - Resim önbelleği temizlendi - Önbelleklenmiş üst veriyi temizle - Önbelleklenmiş tüm web sayfası verisini kaldır + Küçük resimleri yükle + Küçük resimlerin yüklenmesini önlemek, veri ve hafıza kullanımından tasarruf etmek için kapatın. Değişiklikler, hem bellek içi hem de diskteki görüntü önbelleğini temizler. + Görüntü önbelleği silindi + Önbelleğe alınmış meta verilerini temizle + Önbelleğe alınmış tüm web sayfası verilerini kaldır Üst veri önbelleği temizlendi Oynatım Hızı Denetimleri Hız Öntanımlı -Ses titreşimi - Bağlantıyı kes (bozulmalara neden olabilir) + Ses titreşimi + Bağlantısız (bozulmaya neden olabilir) Nightcore - İndirmeye uygun akış yok - - Yeğlenen \'aç\' eylemi + İndirilebilecek akış yok + Tercih edilen \'aç\' eylemi İçerik açılırken öntanımlı eylem — %s - - Ek Açıklamalar - Oynatıcı ek açıklamalar metin boyutunu ve arka plan biçimlerini düzenle. Etki için uygulamayı yeniden başlatmak gerekir - - Bu dosyayı oynatmak için kurulan uygulama yok - + Açıklamalar + Oynatıcı altyazı metin ölçeğini ve arka plan biçiimini değiştirin. Etkili olması için uygulama yeniden başlatma gerektirir. + Bu dosyayı oynatmak için uygulama yüklü değil İzleme geçmişini temizle Oynatılan akışların geçmişini siler - Tüm izleme geçmişini sil. + İzleme geçmişinin tamamı silinsin mi\? İzleme geçmişi silindi. Arama geçmişini temizle - Aranan anahtar sözcüklerin geçmişini siler - Tüm arama geçmişini sil. + Aramada kullanılan anahtar kelimelerin geçmişini siler + Tüm arama geçmişi silinsin mi\? Arama geçmişi silindi. 1 öge silindi. - - NewPipe, telif müsaadeli özgür yazılımdır: İstediğiniz gibi kullanabilir, öğrenebilir, paylaşabilir, iyileştirebilirsiniz. Özellikle; Özgür Yazılım Vakfı tarafından yayımlanan GNU Genel Kamu Lisansı\'nın, lisansın 3. sürümüyle veya (isterseniz) daha sonraki sürümünün koşulları altında yeniden dağıtabilir ve/veya düzenleyebilirsiniz. + NewPipe, telif müsaadeli özgür yazılımdır: İstediğiniz gibi kullanabilir, öğrenebilir, paylaşabilir ve geliştirebilirsiniz. Özellikle, Özgür Yazılım Vakfı tarafından yayımlanan GNU Genel Kamu Lisansı 3. sürümü veya (isterseniz) daha sonraki sürümleri koşulları altında yeniden dağıtabilir ve/veya değiştirebilirsiniz. Ayarları da içe aktarmak istiyor musunuz? - NewPipe\'ın Gizlilik İlkesi - NewPipe projesi, gizliliğinizi çok ciddiye alır. Bu nedenle, uygulama sizin izniniz olmadan herhangi bir veri toplamaz. -\nNewPipe\'ın gizlilik ilkesi, bir çökme bildirimi gönderdiğinizde hangi verilerin gönderilip saklandığını ayrıntılı olarak açıklar. + NewPipe projesi, gizliliğinizi çok ciddiye alıyor. Bu nedenle, uygulama sizin izniniz olmadan herhangi bir veri toplamaz. +\nNewPipe\'ın gizlilik ilkesi, çökme raporu gönderdiğinizde hangi verilerin gönderildiğini ve saklandığını ayrıntılı olarak açıklar. Gizlilik ilkesini oku Avrupa Genel Veri Koruma Yönetmeliğine (GDPR) uymak için, dikkatinizi NewPipe\'ın gizlilik ilkesine çekiyoruz. Lütfen dikkatlice okuyun. \nBize hata bildirimini göndermek için kabul etmelisiniz. Kabul et - Kabul etme -Sınırsız + Reddet + Sınır yok Mobil veri kullanırken çözünürlüğü sınırla Uygulama geçişinde küçült - Ana video oynatıcıdan başka bir uygulamaya geçişteki eylem — %s + Ana video oynatıcıdan diğer uygulamaya geçiş yaparken eylem — %s Yok - Arka plan oynatıcıya küçült + Arka plan oynatıcısını küçült Açılır oynatıcıya küçült - -Sessizlik sırasında hızlı ileri + Sessizlik sırasında hızlı ileri Adım Sıfırla - - Kanallar - Oynatma Listeleri - Parçalar - Kullanıcılar - + Kanal + Oynatma Listesi + Parça + Kullanıcı + Abonelikten çık + Yeni Sekme + Sekmeyi Seçin + Ses hareketi kontrolü + Oynatıcının sesini kontrol etmek için hareketleri kullanın + Parlaklık hareket kontrolü + Oynatıcının parlaklığını kontrol etmek için hareketleri kullanın + Güncellemeler + Dosya silindi + Uygulama Güncelleme Bildirimi + Yeni NewPipe sürümü için bildirimler + Harici depolama kullanılamıyor + Harici SD karta indirmek henüz mümkün değil. İndirme klasörü konumu sıfırlansın mı\? + Varsayılan sekmeleri kullanarak, kaydedilen sekmeleri okurken hata + Varsayılanları geri yükle + Varsayılanları geri yüklemek istiyor musunuz\? + Abone sayısı mevcut değil + Ana sayfada hangi sekmeler gösterilir + Seçim + Güncellemeler + Yeni bir sürüm mevcut olduğunda uygulama güncellemesi için bir bildirim göster + Liste görünümü modu + Liste + Izgara + Otomatik + Görünümü Değiştir + NewPipe Güncellemesi Var! + İndirmek için dokunun + Tamamlandı + Sırada + durdurulmuş + sırada + son işlemler uygulanıyor + Kuyruk + Sistem tarafından reddedilen işlem + İndirme başarısız + İndirme bitti + %s indirme bitti + Benzersiz ad oluştur + Üzerine yaz + Bu ada sahip indirilen bir dosya zaten var + Bu ad ile devam eden bir indirme var + Hatayı göster + Kod + Dosya oluşturulamıyor + Hedef klasör oluşturulamıyor + İzin sistem tarafından reddedildi + Güvenli bağlantı başarısız + Sunucu bulunamadı + Sunucuya bağlanılamıyor + Sunucu veri göndermiyor + Sunucu, çok iş parçacıklı indirmeleri kabul etmez, @string/msg_threads = 1 ile yeniden deneyin + İstenen aralık karşılanamaz + Bulunamadı + İşlem sonrası başarısız + Tamamlanan indirmeleri temizle + Beklemedeki %s transferinize İndirmeler\'den devam edin + Durdur + Maksimum deneme sayısı + İndirmeyi iptal etmeden önce maksimum deneme sayısı + Mobil veriye geçerken duraklat + Duraklatılamayan indirmeler yeniden başlatılacak + Olaylar + Konferanslar + \ 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 1dccd25cf..eaca5719a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1,9 +1,9 @@ - + %1$s переглядів Опубліковано %1$s - Стримінґового програвача не знайдено. Чи встановити VLC? - Установити + Потокового програвача не знайдено. Чи бажаєте встановити VLC\? + Встановити Скасувати Відкрити у переглядачеві Поширити @@ -15,7 +15,7 @@ Оберіть переглядач обертання Зовнішній відео-програвач - Зовнішній авдіо-програвач + Зовнішній авдіопрогравач Шлях для завантаження відеозапису Вкажіть шлях для завантаження відеозаписів @@ -23,19 +23,17 @@ Вкажіть шлях для завантаження авдіофайлів Шлях де зберігатимуться завантажені відеозаписи - Шлях для завантаження авдіо - Шлях де зберігатимуться завантажені авдіофайли + Тека для завантаженого аудіо + Завантажені авдіофайли зберігатимуться тут Автоматично відтворювати Відтворює відеозапис коли NewPipe викликано з іншого застосунку Типова роздільна здатність Відтворювати за допомогою Kodi Застосунок Kore не знайдено. Встановити? - Відтворювти у Kodi + Відтворювати у Kodi Показувати опцію відтворення відеозапису за допомогою Kodi media center - Авдіо + Аудіо Типовий авдіоформат - WebM — вільний формат - M4A — ліпша якість Тема Темна Світла @@ -53,24 +51,24 @@ У доступі відмовлено Контент Контент з віковими обмеженнями - Відеозапис має вікові обмеження. Спершу активуйте опцію для програвання таких записів у налаштуваннях. - наживо + Показувати відеозаписи, які мають вікові обмеження. Спершу активуйте опцію для програвання таких записів у \"налаштуваннях\". + НАЖИВО - Хиба - Хиба мережі + Помилка + Помилка мережі Не вдалося завантажити всі ескізи Не вдалося розшифрувати URL підпис відеозапису Не вдалося проаналізувати веб-сайт Не вдалося повністю проаналізувати веб-сайт - Контент не доступний + Контент недоступний Заблоковано GEMA Не вдалося налаштувати меню завантаження - Трансляції НАЖИВО ще не підтримуються. + Трансляції НАЖИВО ще не підтримуються Не вдалося отримати жодного стриму Шкода, цього не мало статися. - Зазвітувати помилку за допомогою пошти + Повідомити про помилку за допомогою пошти На жаль, трапилась помилка. - ЗАЗВІТУВАТИ + ПОВІДОМИТИ Інформація: Що сталося: Натисніть на пошук аби почати @@ -95,17 +93,17 @@ Ескіз попереднього перегляду відео Використовувати Tor (Експериментально) Перенаправляти трафік через Tor для підвищення конфіденційності (трансляція відео ще не підтримується). - Зазвітувати про помилку + Повідомити про помилку Не вдалося створити теку для завантаження \'%1$s\' Створити теку для завантаження \'%1$s\' Відео - Авдіо + Аудіо Повторити Використовувати старий програвач - К - М - Б + т + млн + мрд Почати Павза @@ -115,19 +113,19 @@ ОК Назва файлу - Нитки - Хиба + Гілки + Помилка Сервер не підтримується Файл уже існує NewPipe завантажує Натисніть для подробиць Будь ласка, зачекайте… - Скопійовано до сховку + Копійовано до сховку Будь ласка, оберіть теку для завантаження -Стримінґового програвача не знайдено (ви можете встановити VLC для відтворення) +Потокового програвача не знайдено (ви можете встановити VLC для відтворення). Відкрити у віконному режимі - Певні роздільності НЕ матимуть звуку якщо цей параметр увімкнено + Усувається звук ПЕВНИХ роздільностей NewPipe у віконному режимі Підписатися Ви підписалися @@ -145,30 +143,30 @@ Типова роздільна здатність вікна Не всі пристрої підтримують відтворення 2K/4K відеозаписи - Більші роздільні здатності + Вищі роздільні здатності Типовий формат відеозапису Пам\'ятати розмір та позицію вікна Пам\'ятати останній розмір вікна Керування жестами Використовувати жести для контролю яскравості та гучності програвача Шукати схожі - Показувати схожі під час пошуку + Показувати пропозиції під час пошуку Історія пошуків Зберігати пошукові запити локально Історія та кеш Вести облік перегляду відеозаписів Відновити відтворення Продовжувати відтворення опісля переривання (наприклад телефонного дзвінка) - \"Утримуй аби додати\" підказка + \"Утримуй для додавання\" підказка Усталена країна контенту Сервіс Програвач Поведінка Історія та кеш Вікно - Відворення у вікні + Відтворення у вікні Додано до тлового відтворення - Додано до чергу у вікно + Додано до черги у вікно Плейлист Фільтрувати Оновити @@ -177,11 +175,11 @@ Найліпша роздільна здатність Відміна Грати всі - Щоразу + Завжди Тільки тепер NewPipe сповіщення - "Сповіщення для NewPipe\'пових тлового і віконного програвачів " + "Сповіщення для NewPipe-ових тлового і віконного програвачів " [Невідомо] @@ -191,18 +189,18 @@ Імпортувати базу Експортувати базу - Це перепише чинну історію та підписання - Експортувати історію, підписання та плейлисти + Перепише поточну історію та підписки + Експортувати історію, підписки та плейлисти Неможливо відтворити цей стрим Відновлююсь після помилки програвача Помилкова URL - Відео-струмів не було знайдено - Не знайдено жодних авдіострумів + Відеостримів не знайдено + Не знайдено аудіопотоків Звіт користувача Без підписників - Відео нема - Помилкова URL або інтернет не є доступним + Немає відео + Помилкова URL або інтернет недоступний Цей дозвіл має бути відкритим \nу вікні @@ -215,7 +213,7 @@ Літери та цифри Більш специфічні символи - Щодо NewPipe + Про NewPipe Налаштування Візитівка Неможливо завантажити ліцензію @@ -226,8 +224,8 @@ Веб-сайт Історія Історію стерто - Експортування доконано - Імпортування доконано + Експортовано + Імпортовано Топ 50 Новинки Деталі @@ -236,27 +234,26 @@ Відеопрогравач Тловий програвач Віконний програвач - Щоразу питати Отримую інформацію… Завантажується запитаний контент -Завантажити стримінґовий файл. - Показати інфо +Завантажити потоковий файл + Показати інформацію - Закладки + Закладкові плейлисти Додати до Показувати підказку коли натиснута кнопка тла або вікна на сторінці інформації відеозапису Перемкнути орієнтацію - Фатальна хиба програвача - Зовнішні програвачі не підтримують такі види ланок + Фатальна помилка програвача + Зовнішні програвачі не підтримують такі види посилань Що:\\nЗапит:\\nМова змісту:\\nСервіс:\\nЧас GMT:\\nПакунок:\\nВерсія:\\nВерсія ОС: Ескіз аватару користувача Сподобалося Не сподобалося Нічого не знайдено - Перетягніть для зміни шикування + Перетягніть для зміни сортування %s підписник @@ -281,10 +278,8 @@ Візитівка Вільний та легковагий стримінґ для Андроїду. Які б не були Ваші ідеї: переклад, дизайн, легкий чи глобальний рефакторинґ - будь-яка допомога завжди у нагоді. Що більше зроблено, то ліпшим NewPipe стає! - Моніторинг витоку памяті вимкнено Усунення вад Нічого нема - Старий убудований медія-фреймворк програвач Перегляди відсутні @@ -294,12 +289,12 @@ Нове завдання - reCAPTCHA челендж - запит на челендж reCAPTCHA + Виклик reCAPTCHA + Запит на виклик reCAPTCHA © %1$s by %2$s under %3$s Учасники - NewPipe розробний добровольцями, які витрачають власний час заради вашого задоволення. Допоможіть розробникам зробити NewPipe ще ліпшим, насолоджуючись філіжанкою кави. + NewPipe розроблений добровольцями, які витрачають власний час заради вашого задоволення. Допоможіть розробникам зробити NewPipe ще ліпшим, насолоджуючись філіжанкою кави. Ваша допомога Завітайте на офіційний сайт, аби отримати більше інформацій та новин. Ліцензія NewPipe @@ -312,9 +307,9 @@ Історія Історія відсутня Елемент видалено - Чи ви хочете видалити цей елемент з історії пошуку? - Чи ви хочете видалити цей елемент з історії переглядів? - Чи ви певні що хочете видали всі елементи з історії? + Чи ви хочете видалити цей елемент з історії пошуку\? + Чи ви хочете видалити цей елемент з історії переглядів\? + Чи ви впевнені, що хочете видали всі елементи з історії\? Програвалося останнім Програвалося найбільше @@ -325,34 +320,34 @@ Нове Сторінка каналу Обрати канал - Ви не підписані до жодного з каналів + Немає підписок на канали Обрати kiosk Недійсний ZIP-файл Увага: не можливо здійснити імпортування всіх файлів. - Це перепише ваш чинний сетап. + Це перепише ваші поточні налаштування. Кіоски Набуває популярності Тловий програвач Віконний програвач Усунути - Затиснути, аби зняти з черги - Зняти з черги у тловому програвачеві - Зняти з черги у віконному програвачеві + Утримуйте, для додавання до черги + Додати до черги тлового відтворення + Додати до черги нового віконного відтворення Розпочати відтворення звідси - Розпочати відтворення у тловому програвачеві + Розпочати звідси у тловому програвачеві Розпочати відтворення у вікні звідси - Відчинити шухляду - Зачинити шухляду - Незабаром ми тут щось матимемо ;D + Відкрити шухляду + Закрити шухляду + Незабаром тут щось буде ;D Завжди питати - Створити новий плейлист - Видалити плейлиста - Змінити назву плейлиста + Новий плейлист + Видалити + Змінити назву Назва Додати до плейлиста Установити як ескіз плейлиста @@ -360,11 +355,11 @@ Додати плейлист до закладок Усунути закладку - Чи бажаєте видалити цього плейлиста? + Чи видалити цього плейлиста\? Плейлист було створено Додано до плейлиста - Ескіз плейлиста було змінено - Неможливо видалити плейлист + Ескіз плейлиста змінився. + Неможливо видалити плейлист. Субтитри відсутні @@ -373,32 +368,27 @@ Збільшити Створено автоматичним шляхом - Розмір шрифту опису - Малий шрифт - Звичайний шрифт - Великий шрифт Увімкнути LeakCanary Моніторування витіків пам\'яті може призвести до нереагівності застосунку - Зазвітувати Out-of-lifecycle хиби + Зазвітувати out-of-lifecycle хиби Примусове звітування про неможливість доставлення Rx винятків, які відбуваються за межами фраґменту або діяльності життєвого циклу після усунення -Використовувати неточне шукання - Неточне шукання дозволяє програвачеві рухатися позиціями швидше, проте з меншою точністю - Чи наступний стрим у черзі - Автоматично додавати пов\'язаний стрим під час відтворення останнього у неповторювальній черзі - СИНХРОНІЗАЦІЯ +Використовувати неточний пошук + Неточний пошук дозволяє програвачеві рухатися позиціями швидше, проте з меншою точністю + Додавати в чергу наступний стрим + Автоматично додавати пов\'язаний стрим під час відтворення останнього у черзі без повторювань. - Теки + Файл - Неправильна тека - Неправильний файл/контент джерела - Файл не існує, або немає дозволу на його запис чи читання - Ім\'я файлу не повинно бути порожнім - Хиба: %1$s + Такої теки не існує + Не існує файлу/джерела контенту + Файл не існує, або немає дозволу на його запис або читання + Назва файлу не може бути порожньою + Помилка: %1$s - Імпортування/Експортування + Імпортування/експортування Імпортування Імпортувати з Експортувати до @@ -429,43 +419,41 @@ \n \nПродовжуватимете? Завантажити ескізи - Відключити аби зупинити завантаження ескізів та заощадити використання ресурсів та пам\'яті. Увімкнення функції призведе до повного вичищення кешу зображень + При вимкненому завантаженні ескізів, заощадується трафік та внутрішня пам\'ять. Зміни призведуть очищення кешу зображень. Кеш зображень стерто Стерти кеш метаданих - "Усунути всі кешовані дані веб-сторінки " + "Усунути всі кешовані дані вебсторінки " Кеш метаданих стерто Реґулятори швидкісті відтворення Темп Тон Від\'єднати (може спричинити спотворення) - Nightcore - Усталено -Струми недоступні для завантаження +Стрими недоступні для завантаження Переважний спосіб \"відкриття\" Типова дія під час відкриття вмісту — %s Субтитри - Змінення маштабу субтитрового тексту та тлових стилів. Увімкнення функції потребує перезавантаження застосунку + Змінення маштабу субтитрового тексту та тлових стилів. Увімкнення функції потребує перезавантаження застосунку. - Не знайдено відповідного застосунку для відтворення цього файла + Не знайдено відповідного застосунку для відтворення цього файлу Очистити історію переглядів Видаляє історію відтворень - Видалити всю історію переглядів. + Чи видалити всю історію переглядів\? Історію переглядів було видалено. Очистити історію пошуків - Видаляє історію шуканих ключових слів - Видалити всю пошукову історію. - Пошукову історію було видалено. - Видалено один фраґмент. + Видаляє історію пошукових ключових слів + Чи видалити всю пошукову історію\? + Пошукову історію видалено. + Видалено один фрагмент. - "NewPipe є вільною копілефт програмою: Ви можете використовувати її, поширювати та вдосконавлювати за власним розсудом. Зокрема ви можете перерозподіляти та/або змінювати її за умов використання GNU General Public License, опублікованою Free Software Foundation, під 3-ю версією ліцензії, або (на ваш вибір) будь-якою пізнішою версією." - Чи ви також бажаєте імпортувати налаштування? + "NewPipe є вільною копілефт програмою: Ви можете використовувати її, поширювати та вдосконалювати з розсудом. Зокрема ви можете перерозподіляти та/або змінювати її за умов використання GNU General Public License, опублікованою Free Software Foundation, під 3-ю версією ліцензії, або (на ваш вибір) будь-якою пізнішою версією." + Бажаєте імпортувати з налаштуваннями\? - Політика приватності NewPipe\'у - Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому цей застосунок не збирає ніяких даних без вашої згоди -\nПолітика приватності NewPipe пояснюється у деталях, які дані було відіслано та збережено, під час відсилання крахового звіту. + NewPipe\'ова політика приватності + Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому застосунок не збирає ніяких даних без вашої згоди +\nПолітика приватності NewPipe пояснює у деталях, які дані було відіслано та збережено, під час відсилання крахового звіту. Читати політику приватності Аби дотриматися Норм загального захисту даних ЄС (General Data Protection Regulation, GDPR), ми просимо звернути вашу увагу на NewPipe\'ову політику приватності. Будь ласка, прочитайте уважно \nВи маєте підтвердити її аби надіслати нам баґового звіту. @@ -478,7 +466,7 @@ Скинути Зменшити при перемкненні застосунку - Дія при перемкненні до інших застосунків з головного відеопрогравача — %s + Дія при перемкненні до іншого застосунку з головного відеопрогравача — %s Жодних До тлового програвача Зменшити до віконного програвачу @@ -487,8 +475,8 @@ Плейлисти Стежки Користувачі - Вигляд списку Список Сiтка + diff --git a/app/src/main/res/values-v21/styles_services.xml b/app/src/main/res/values-v21/styles_services.xml index e3d6c24e2..6c118bc09 100644 --- a/app/src/main/res/values-v21/styles_services.xml +++ b/app/src/main/res/values-v21/styles_services.xml @@ -31,4 +31,22 @@ @color/dark_soundcloud_accent_color + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index b5203fbc0..df246a5df 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,33 +1,31 @@ - -Nhấp tìm kiếm để bắt đầu + + + Nhấn tìm kiếm để bắt đầu %1$s lượt xem Đăng vào %1$s - Không tìm thấy trình phát. Bạn có muốn cài đặt VLC? + Không tìm thấy trình phát luồng. Bạn có muốn cài đặt VLC\? Cài đặt Hủy Mở trong trình duyệt - Mở trong chế độ popup + Mở trong trình phát popup Chia sẻ Tải về Tìm kiếm Cài đặt - Ý của bạn là %1$s ? + Ý của bạn là %1$s\? Chia sẻ với Chọn trình duyệt Sử dụng trình phát video bên ngoài - Một số độ phân giải sẽ KHÔNG có âm thanh khi chế độ này - Sử dụng trình phát âm thanh bên ngoài + Loại bỏ âm thanh ở một vài độ phân giải video + Sử dụng trình phát audio bên ngoài Chế độ popup của NewPipe - Chế độ Popup - - Đường dẫn tải xuống video - Đường dẫn để lưu trữ video đã tải xuống - Nhập đường dẫn tải xuống cho video - - Đường dẫn tải audio - Đường dẫn để lưu trữ âm thanh đã tải xuống - Nhập đường dẫn tải xuống cho tệp âm thanh - + Popup + Đường dẫn tải về video + Đường dẫn để lưu video đã tải về + Nhập đường dẫn tải về cho video + Thư mục tải về audio + Audio đã tải về được lưu ở đây + Nhập đường dẫn tải về cho audio Tự động phát Phát video khi NewPipe được gọi từ một ứng dụng khác Độ phân giải mặc định @@ -35,7 +33,7 @@ Hiển thị độ phân giải cao hơn Chỉ một số thiết bị hỗ trợ chơi các video 2K / 4K Phát với Kodi - Không tìm thấy ứng dụng Kore. Cài đặt nó? + Không tìm thấy ứng dụng Kore. Bạn có muốn cài đặt nó\? Hiển thị tùy chọn \"Phát với Kodi\" Hiển thị tùy chọn để phát video qua trung tâm media Kodi Âm thanh @@ -46,27 +44,25 @@ Sáng Tối Đen - Nhớ kích thước và vị trí bật lên - Nhớ kích thước và vị trí bật lên cuối cùng + Nhớ kích thước và vị trí của popup + Nhớ kích thước và vị trí cuối của popup Điều khiển cử chỉ trình phát Sử dụng cử chỉ để kiểm soát độ sáng và âm lượng của trình phát Đề xuất tìm kiếm Hiển thị các đề xuất khi tìm kiếm - Tải về - - Video tiếp theo - Hiển thị video \'tiếp theo\' và \'tương tự\' + Tiếp + Hiển thị video \'Tiếp\' và \'Tương tự\' URL không được hỗ trợ Hiển thị Khác Phát ở chế độ nền - Phát ở chế độ cửa sổ bật lên (Popup) + Phát ở chế độ popup Phát Nội dung - Hiển thị nội dung bị hạn chế độ tuổi - Video giới hạn độ tuổi người xem. Cho phép các tài liệu đó có thể từ Cài đặt. - Trực tiếp + Nội dung có giới hạn độ tuổi + Hiện video có giới hạn độ tuổi. Có thể bật cài đặt này trong phần Cài đặt. + TRỰC TIẾP Tải xuống Tải xuống Báo lỗi @@ -80,7 +76,6 @@ Xóa Thay đổi kích thước Độ phân giải tốt nhất - Lỗi Lỗi kết nối mạng Không thể tải tất cả các thumbnails @@ -89,8 +84,8 @@ Không thể phân tích cú pháp hoàn toàn trang web Nội dung không khả dụng Chặn bởi GEMA - Không thể thiết lập menu tải xuống - Đây là STREAM LIVE, chưa được hỗ trợ. + Không thể thiết lập menu tải về + Livestream chưa được hỗ trợ Không thể lấy bất kỳ luồng nào Không thể tải hình ảnh Ứng dụng / Giao diện người dùng bị lỗi @@ -103,60 +98,49 @@ Gì: \\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version: Nhận xét của bạn (bằng tiếng Anh): Chi tiết: - - Hình thu nhỏ xem trước video Hình thu nhỏ xem trước video - Hình thu nhỏ người dùng của người tải lên + Hình thu nhỏ của avatar người tải lên Lượt thích Dislike Dùng Tor - (Thử nghiệm) Buộc tải thông tin lưu lượng truy cập thông qua Tor để tăng tính riêng tư (streaming video chưa được hỗ trợ). + (Thử nghiệm) Buộc tải về thông qua Tor để tăng tính bảo mật (chưa hỗ trợ xem video trực tiếp). Báo lỗi Báo cáo người dùng - - Không thể tạo thư mục tải xuống \'%1$s\' - Đã tạo thư mục tải xuống \'%1$s\' - + Không thể tạo thư mục tải về \'%1$s\' + Đã tạo thư mục tải về \'%1$s\' Video Âm thanh Thử lại - Quyền truy cập vào bộ nhớ đã bị từ chối + Quyền truy cập bộ nhớ đã bị từ chối Sử dụng trình phát cũ Máy nghe nhạc Mediaframework tích hợp sẵn - - ngàn triệu tỉ - Bắt đầu Dừng Chơi Xóa checksum - Nhiệm vụ mới - Được - + OK Tên file Chủ đề Lỗi - Sever không được hỗ trợ + Server không được hỗ trợ Tập tin đã tồn tại URL không hợp lệ hoặc Internet không khả dụng NewPipe đang tải xuống Chạm để biết chi tiết Vui lòng đợi … Sao chép vào clipboard - Hãy chọn một thư mục tải về có sẵn. - Sự cho phép này là cần thiết để -\nMở trong chế độ bật lên - + Chọn một thư mục tải về có sẵn + Cần quyền này để +\nmở trong chế độ popup ReCAPTCHA - ReCAPTCHA Challenge + reCAPTCHA Yêu cầu reCAPTCHA - Giới thiệu về NewPipe Cài đặt Về @@ -167,64 +151,59 @@ Về Cộng tác viên Giấy phép - Giao diện trực quan nhẹ cho Android. + Trình phát nội dung nhẹ và mã nguồn mở cho Android. Xem trên GitHub Giấy phép của NewPipe - Cho dù bạn có ý tưởng, dịch, thay đổi thiết kế, làm sạch mã hoặc thay đổi mã, sự trợ giúp luôn được hoan nghênh. Càng làm nhiều thì càng tốt! + Sự đóng góp luôn được hoan nghênh – cho dù bạn dịch, có ý tưởng thiết kế, dọn code, hay thay đổi rất nhiều phần code. Càng làm nhiều thì ứng dụng này sẽ càng tốt! Đọc giấy phép - Sự đóng góp -Quay + Đóng góp + xoay màn hình Ngôn ngữ nội dung ưu tiên - Video & Âm thanh - Cửa sổ + Video & âm thanh + Popup Lịch sử & bộ nhớ cache Lịch sử & bộ nhớ cache - Danh sách + Playlist Không tìm thấy - Theo dõi - Đang theo dõi - Đã dừng theo dõi kênh - Không thể thay đổi tình trạng theo dõi - Không thể cập nhật tình trạng theo dõi - - Không tìm thấy trình phát luồng nào (bạn có thể cài đặt VLC để phát) - Tải xuống tệp luồng. + Đăng ký + Đã đăng ký + Đã hủy đăng ký kênh + Không thể thay đổi tình trạng đăng ký + Không thể cập nhật tình trạng đăng ký + Không tìm thấy trình phát luồng nào (bạn có thể cài đặt VLC để phát). + Tải về tệp luồng Hiển thị thông tin - main Đăng ký - Dấu trang - + Playlist đã đánh dấu Có gì mới - Thêm vào - Sử dụng tìm kiếm không chính xác nhanh Tìm kiếm không chính xác cho phép người chơi tìm kiếm vị trí nhanh hơn với độ chính xác giảm Tải hình thu nhỏ - Vô hiệu hóa để ngăn chặn tất cả các hình thu nhỏ tải và lưu dữ liệu và sử dụng bộ nhớ. Thay đổi điều này sẽ xóa bộ nhớ cache hình ảnh trong bộ nhớ và trên đĩa + Tắt để không tải về các hình thu nhỏ, tiết kiệm lưu lượng mạng và bộ nhớ. Thay đổi điều này sẽ xóa bộ nhớ đệm hình ảnh cả trong RAM và trong bộ nhớ. Đã xóa bộ nhớ cache hình ảnh Xóa siêu dữ liệu đã lưu vào bộ nhớ cache Xóa tất cả dữ liệu trang web được lưu trong bộ nhớ cache Đã xóa bộ nhớ cache siêu dữ liệu Tự động phát tiếp theo theo hàng - Tự động thêm một luồng có liên quan khi phát luồng cuối cùng trong hàng đợi không lặp lại + Tự động thêm một luồng có liên quan khi phát luồng cuối cùng trong hàng đợi không lặp lại. Lịch sử tìm kiếm Lưu trữ truy vấn tìm kiếm cục bộ Theo dõi các video đã xem Tiếp tục lấy tiêu điểm Tiếp tục phát sau khi bị gián đoạn (ví dụ: cuộc gọi điện thoại) - Hiển thị mẹo \"giữ để nối thêm\" - Hiển thị mẹo khi nhấn nút nền hoặc bật lên trên trang chi tiết video + Hiển thị mẹo \"Giữ để nối thêm\" + Hiển thị mẹo khi nhấn nút phát trong nền hoặc phát trên popup trong trang chi tiết video Quốc gia nội dung mặc định Dịch vụ Phát Hành vi Gỡ lỗi Đã xếp hàng đợi trên trình phát nền - Xếp hàng đợi trên trình phát bật lên + Đã thêm vào hàng chờ của popup Kênh - Danh sách phát + Playlist Bản nhạc Người dùng Hủy bỏ @@ -232,28 +211,24 @@ Luôn luôn Chỉ một lần Tập tin - Thông báo NewPipe - Thông báo cho nền mới và Trình phát Popup - + Thông báo cho trình phát popup và trình phát nền [Không xác định] - Chuyển đổi hướng màn hình Chuyển sang nền Chuyển sang Popup Chuyển sang Main - Nhập cơ sở dữ liệu Xuất cơ sở dữ liệu - Sẽ ghi đè lịch sử và đăng ký hiện tại của bạn - Xuất lịch sử, đăng ký và danh sách phát + Ghi đè lịch sử và danh sách đăng ký hiện tại của bạn + Xuất lịch sử, đăng ký và playlist Xóa lịch sử xem Xóa lịch sử của các luồng đã phát - Xóa toàn bộ lịch sử xem. + Xóa toàn bộ lịch sử xem\? Đã xóa lịch sử xem. Xóa lịch sử tìm kiếm Xóa lịch sử của từ khóa tìm kiếm - Xóa toàn bộ lịch sử tìm kiếm. + Xóa toàn bộ lịch sử tìm kiếm\? Đã xóa lịch sử tìm kiếm. Không thể phát luồng này Đã xảy ra lỗi trình phát không thể khôi phục @@ -261,50 +236,40 @@ Người chơi bên ngoài không hỗ trợ các loại liên kết này URL không hợp lệ Không tìm thấy luồng video nào - Không tìm thấy luồng âm thanh nào + Không tìm thấy luồng audio nào Thư mục không hợp lệ - Nguồn tệp / nội dung không hợp lệ - Tệp không tồn tại hoặc không đủ quyền đọc hoặc ghi vào tệp + Tệp / nguồn nội dung không hợp lệ + Tệp không tồn tại hoặc không có quyền đọc / ghi Tên tệp không được để trống Đã xảy ra lỗi: %1$s - Không có luồng nào để tải xuống - - Không có gì ở đây Nhưng dế + Không có luồng nào để tải về + Không có gì ở đây Kéo để sắp xếp lại - Không có người đăng ký - %s người đăng kí - - + %s người đăng kí + Không có lượt xem nào - %s lượt xem - - + %s lượt xem + Không có video nào - %s video - - + Video + Tạo nên Xóa một Xóa hết Bỏ qua Đổi tên - Đã xóa 1 mục. - Tải về Các ký tự được cho phép trong tên tệp Ký tự không hợp lệ được thay thế bằng giá trị này Ký tự thay thế - Chữ cái và chữ số Hầu hết các ký tự đặc biệt - Không có ứng dụng nào được cài đặt để phát tệp này - Đóng góp NewPipe được phát triển bởi các tình nguyện viên dành thời gian mang lại cho bạn những trải nghiệm tốt nhất. Hãy trở lại để giúp các nhà phát triển làm cho NewPipe thậm chí còn tốt hơn trong khi thưởng thức một tách cà phê. Trả lại @@ -314,11 +279,11 @@ Dự án NewPipe rất coi trọng quyền riêng tư của bạn. Do đó, ứng dụng không thu thập bất kỳ dữ liệu nào mà không có sự đồng ý của bạn. \nChính sách bảo mật của NewPipe giải thích chi tiết dữ liệu nào được gửi và lưu trữ khi bạn gửi báo cáo sự cố. Đọc chính sách bảo mật - NewPipe là phần mềm miễn phí copyleft: Bạn có thể sử dụng, chia sẻ nghiên cứu và cải thiện nó theo ý muốn của bạn. Cụ thể bạn có thể phân phối lại và / hoặc sửa đổi nó theo các điều khoản của Giấy phép Công cộng GNU như được xuất bản bởi Quỹ Phần mềm Tự do, hoặc phiên bản 3 của Giấy phép, hoặc (tùy chọn của bạn) bất kỳ phiên bản nào sau này. + NewPipe là phần mềm miễn phí copyleft: Bạn có thể sử dụng, nghiên cứu, chia sẻ và cải thiện nó theo ý của bạn. Nói cụ thể hơn, bạn có thể phân phối lại và/hoặc sửa đổi nó theo các điều khoản trong Giấy phép Công cộng GNU (GPL) được xuất bản bởi Quỹ Phần mềm Tự do (FSF), theo phiên bản 3 hoặc bất kì phiên bản nào sau này của Giấy phép (tùy ý bạn). Lịch sử Đã tìm kiếm Đã xem - Lịch sử bị tắt + Đã tắt lịch sử Lịch sử Lịch sử trống Đã xóa lịch sử @@ -328,7 +293,6 @@ Bạn có chắc chắn muốn xóa tất cả các mục khỏi lịch sử không? Lần chơi cuối Hầu hết phát - Nội dung trang chính Trang trống Trang chủ @@ -336,98 +300,78 @@ Trang nguồn cấp dữ liệu Trang kênh Chọn kênh - Chưa có kênh nào được đăng ký + Chưa đăng ký kênh nào Chọn Trang chủ - Xuất xong - Nhập hoàn tất + Đã xuất + Đã nhập Không có tệp ZIP hợp lệ Cảnh báo: Không thể nhập tất cả các tệp. Thao tác này sẽ ghi đè cài đặt hiện tại của bạn. Bạn cũng muốn nhập cài đặt? - Trang chủ Xu hướng Mới & hot Trình phát nền - Trình phát Popup + Trình phát popup Tẩy xoá Chi tiết Cài đặt âm thanh - Giữ để Enqueue - Phát trên nền - Phát qua cửa sổ - Bắt đầu chơi ở đây - Bắt đầu ở đây trên nền - Bắt đầu ở đây trên Popup - + Giữ để nối tiếp + Thêm vào trình phát nền + Thêm vào trình phát popup + Bắt đầu phát ở đây + Bắt đầu từ đây trong nền + Bắt đầu từ đây trên trình phát popup Mở ngăn kéo Đóng ngăn Một cái gì đó sẽ xuất hiện ở đây sớm ;D - - Hành động \'mở\' được ưu tiên Hành động mặc định khi mở nội dung — %s - Trình phát video Trình phát nền - Trình phát Popup + Trình phát popup Luôn luôn hỏi - Đang nhận thông tin… Đang tải nội dung được yêu cầu - - Tạo danh sách mới - Xóa danh sách phát - Đổi tên danh sách phát + Tạo playlist mới + Xóa playlist + Đổi tên playlist Tên - Thêm vào danh sách phát - Đặt làm Hình thu nhỏ của danh sách phát - - Đánh dấu trang danh sách phát + Thêm vào playlist + Đặt làm hình thu nhỏ của playlist + Đánh dấu playlist này Xóa dấu trang - - Bạn có muốn xóa danh sách phát này không? - Đã tạo danh sách phát - Đã thêm vào danh sách phát - Đã thay đổi hình thu nhỏ của danh sách phát - Không thể xóa danh sách phát - + Xóa playlist này\? + Đã tạo playlist + Đã thêm vào playlist + Đã thay đổi hình thu nhỏ của playlist. + Không thể xóa playlist. Không có phụ đề - Phù hợp Lấp đầy Thu phóng - Tự động tạo ra - Phụ đề - Sửa đổi tỷ lệ văn bản chú thích của người chơi và kiểu nền. Yêu cầu khởi động lại ứng dụng để có hiệu lực - + Sửa cỡ chữ và kiểu màu nền phụ đề. Yêu cầu khởi động lại ứng dụng để có hiệu lực. Bật LeakCanary Theo dõi rò rỉ bộ nhớ có thể khiến ứng dụng trở nên không phản hồi khi đổ xô đống - - Báo cáo lỗi ngoài vòng đời + Báo các lỗi out-of-lifecycle Buộc báo cáo ngoại lệ Rx không thể gửi được bên ngoài vòng đời của mảnh hoặc hoạt động sau khi xử lý - - Nhập khẩu/xuất khẩu + Nhập/xuất Nhập Nhập từ Xuất sang - Đang nhập… Đang xuất … - Nhập tệp Xuất trước - Không thể nhập đăng ký Không thể xuất đăng ký - - Nhập đăng ký YouTube bằng cách tải xuống tệp xuất: + Nhập danh sách đăng ký YouTube bằng cách tải xuống tệp xuất: \n \n1. Truy cập URL này: %1$s -\n2. Đăng nhập khi được hỏi -\n3. Quá trình tải xuống sẽ bắt đầu (đó là tệp xuất) +\n2. Đăng nhập khi được yêu cầu +\n3. Một tệp sẽ được tải về (đó là tệp xuất) Nhập hồ sơ SoundCloud bằng cách nhập URL hoặc ID của bạn: \n \n1. Bật \"chế độ màn hình\" trong trình duyệt web (trang web không khả dụng cho thiết bị di động) @@ -437,7 +381,6 @@ Hãy nhớ rằng hoạt động này có thể là mạng đắt tiền. \n \nBạn có muốn tiếp tục? - Điều khiển tốc độ phát lại Speed Chiều cao @@ -445,18 +388,79 @@ Tua đi nhanh trong khi im lặng Tiếp theo Cài lại - Để tuân thủ Quy định bảo vệ dữ liệu chung của châu Âu (GDPR), chúng tôi sẽ thu hút sự chú ý của bạn đến chính sách bảo mật của NewPipe. Vui lòng đọc kỹ. \nBạn phải chấp nhận nó để gửi cho chúng tôi báo cáo lỗi. Chấp nhận Từ chối - Không giới hạn Giới hạn độ phân giải khi sử dụng dữ liệu di động - Giảm thiểu trên công tắc ứng dụng - Hành động khi chuyển sang ứng dụng khác từ trình phát video chính — %s + Thu nhỏ khi chuyển qua ứng dụng khác + Hành động khi chuyển sang ứng dụng khác từ trình phát chính — %s không ai Thu nhỏ xuống trình phát nền - Thu nhỏ trình phát bật lên - - + Thu nhỏ vào trình phát popup + Hủy đăng ký + Tab mới + Chọn tab + Điều khiển âm lượng bằng cử chỉ + Sử dụng cử chỉ để điều khiển âm lượng của trình nghe nhạc + Điều khiển độ sáng màn hình bằng cử chỉ + Sử dụng cử chỉ để điều khiển độ sáng màn hình của trình phát nhạc + Cập nhật + Sự kiện + Đã xóa tập tin + Thông báo cập nhật ứng dụng + Thông báo phiên bản NewPipe mới + Bộ nhớ ngoài không khả dụng + Hiện tại chưa thể tải vào thẻ SD ngoài. Đặt lại vị trí tải về\? + Khôi phục lại các tab mặc định do danh sách các tab đã lưu không hợp lệ + Khôi phục về mặc định + Bạn có muốn khôi phục về mặc định\? + Số người đăng ký không khả dụng + Chọn các tab để hiện trên trang chủ + Lựa chọn + + Nhập ID SoundCloud hoặc link soundcloud.com/<ID của bạn> + Cập nhật + Hiện thông báo khi có bản cập nhật ứng dụng + Chế độ hiển thị danh sách + Danh sách + Lưới + Tự động + Đổi chế độ hiển thị + Đã có bản cập nhật NewPipe! + Nhấn để tải về + Xong + Trong hàng chờ + đã tạm dừng + trong hàng đợi + đang xử lý + Hàng chờ + Thao tác bị từ chối bởi hệ thống + Tải về không thành công + Đã tải về + %s tải về đã xong + Tạo tên riêng biệt + Ghi đè + Có một tệp đã tải về trùng tên + Có một tệp trùng tên đang tải về + Hiện lỗi + Không thể tạo tệp + Không thể tạo thư mục đích + Quyền bị từ chối bởi hệ thống + Không thể tạo kết nối an toàn + Không thể tìm máy chủ + Không thế kết nối với máy chủ + Máy chủ không gửi dữ liệu về + Máy chủ không chấp nhận tải đa luồng, thử lại với số luồng = 1 + Không thể đáp ứng dãy đã yêu cầu + Không tìm thấy + Xử lý thất bại + Dọn các tải về đã hoàn thành + Hãy tiếp tục %s tải về đang chờ + Dừng + Số lượt thử lại tối đa + Số lượt thử lại trước khi hủy tải về + Tạm dừng tải khi chuyển qua dữ liệu di động + Các tải về không thể tạm dừng được sẽ bắt đầu lại từ đầu + \ 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 e8a9e714c..2d46f4516 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,4 +1,4 @@ - + 點播 %1$s 次 %1$s 發布 @@ -10,7 +10,7 @@ 下載 搜尋 設定 - 您是不是要找: %1$s ? + 您是不是要找:%1$s? 分享影片 選擇瀏覽器 旋轉 @@ -23,7 +23,7 @@ 用 Kodi 播放 顯示用 Kodi 媒體中心播放影片的選項 聲音 - 找不到 Kore ,您要安裝 Kore 嗎? + 找不到 Kore,您要安裝 Kore 嗎? 顯示「用 Kodi 播放」的選項 預設音訊格式 主題 @@ -31,7 +31,7 @@ 明亮 下載 - 下一部影片 + 下一部 顯示「下一部」與「相關」的影片 不支援此網址 預設內容語言 @@ -49,15 +49,15 @@ 不喜歡 使用 Tor (實驗性) 強迫下載流量繞經 Tor 以加強隱私 (暫未支援串流影片)。 - 音訊下載路徑 - 已下載音訊的存放路徑 + 音訊下載資料夾 + 已下載的音訊存放存儲在這裡\t 輸入音訊檔案的下載路徑 無法建立下載目錄「%1$s」 已建立下載目錄「%1$s」 輕觸搜尋按鈕開始使用 NewPipe 以懸浮視窗開啟 - 勾選後,部分解析度的影片將沒有聲音 + 移除某些解析度的音訊 NewPipe 懸浮視窗模式 背景播放 自動播放 @@ -77,8 +77,8 @@ 懸浮視窗 以懸浮視窗播放中 內容 - 顯示具有年齡限制的內容 - 有年齡限制的影片。可於設定中選擇允許此種內容。 + 年齡限制內容 + 顯示有年齡限制的影片。可於設定中選擇允許此種內容。 下載 下載 錯誤回報 @@ -101,7 +101,7 @@ 內容無法使用 已被 GEMA 阻擋 無法設定下載選單 - 尚未支援現場直播。 + 尚未支援現場串流 無法取得串流 無法載入圖片 應用程式或界面已停止運作 @@ -159,7 +159,7 @@ 懸浮視窗 - 現場直播 + 直播 訂閱 已訂閱 已取消訂閱頻道 @@ -201,7 +201,7 @@ 沒有影片 - %s 部影片 + 影片 下載 @@ -232,13 +232,13 @@ 歷史紀錄 已搜尋 已觀看 - 歷史紀錄已被停用 + 歷史紀錄已關閉 歷史紀錄 沒有歷史紀錄 已清除歷史紀錄 項目已刪除 確定要刪除此項搜尋紀錄嗎? -找不到串流播放器(您可以安裝 VLC 播放) +找不到串流播放器(您可以安裝 VLC 播放)。 顯示「長按以新增」提示 預設內容國家 服務 @@ -268,7 +268,7 @@ 網站 匯入資料庫 匯出資料庫 - 將覆蓋您目前的歷史記錄和訂閱 + 覆蓋您目前的歷史記錄和訂閱 匯出歷史記錄、訂閱和播放清單 回饋 如欲了解更多有關 NewPipe 的資訊和新聞,請造訪我們的網站。 @@ -281,8 +281,8 @@ 選擇頻道 尚未訂閱任何頻道 選擇互動導覽 - 匯出已完成 - 匯入已完成 + 已匯出 + 已匯入 無有效的 ZIP 檔案 警告:無法匯入所有檔案。 這將覆蓋您目前的設定。 @@ -296,11 +296,11 @@ 移除 詳細資訊 音訊設定 - 新增至背景佇列 - 新增至懸浮視窗佇列 + 當背景時佇列 + 在新懸浮視窗時佇列 從這裡開始播放 - 從這裡開始以背景播放 - 從這裡開始以懸浮視窗播放 + 當背景時從這裡開始 + 懸浮視窗時從這裡開始 長按以新增至佇列 NewPipe 由志願者所開發,他們耗費時間務求為您帶來最佳體驗。現在是時候回過頭來,讓我們的開發人員能夠在使 NewPipe 更臻完美的同時,享受一杯咖啡。 @@ -314,10 +314,10 @@ 正在取得資訊… 正在載入要求的內容 -下載串流檔案。 +下載串流檔案 顯示資訊 - 書籤 + 書籤已加入播放清單 新增至 @@ -336,9 +336,9 @@ 總是詢問 - 建立新的播放清單 - 刪除播放清單 - 重新命名播放清單 + 新的播放清單 + 刪除 + 重新命名 名稱 新增至播放清單 設為播放清單縮圖 @@ -346,11 +346,11 @@ 將播放清單加入書籤 移除書籤 - 您是否要刪除此播放清單? + 刪除此播放清單? 已建立播放清單 - 已新增至播放清單 - 播放清單縮圖已更改 - 無法刪除播放清單 + 已增至播放清單 + 播放清單縮圖已更改。 + 無法刪除播放清單。 沒有字幕 @@ -380,12 +380,12 @@ 使用粗略但快速的尋找 粗略的尋找能讓播放器以降低的精確度更快找到影片的進度位置 自動將下一部影片新增至佇列 - 在非重複播放佇列中最後一個串流開始播放時,自動新增相關串流 + 在非重複播放佇列中最後一個串流開始播放時,自動新增相關串流。 同步 檔案 - 無效的目錄 + 無效的資料夾 無效的檔案/內容來源 檔案名稱不能留空 發生錯誤: %1$s @@ -404,12 +404,12 @@ 之前的匯出 - 檔案不存在或權限不足以讀取或寫入該檔案 - 透過下載匯出檔案來匯入您的 YouTube 訂閱: + 檔案不存在或讀取或寫入權限不足 + 透過下載匯出檔來匯入您的 YouTube 訂閱: \n \n1. 移至此網址:%1$s -\n2. 當被詢問時登入 -\n3. 下載應該開始 ( 這就是匯出的檔案 ) +\n2. 當被提示時登入帳號 +\n3. 應該會開始下載(這就是匯出檔 ) yourID, soundcloud.com/yourid 請記住,此操作可造成昂貴網路花費。 @@ -419,10 +419,10 @@ \n \n1. 在瀏覽器中啟用「桌面模式」(該網站不適用於行動裝置) \n2. 移至此網址: %1$s -\n3. 當被詢問時登入 +\n3. 當被提示時登入帳號 \n4. 複製您被重新導向到的個人設定檔網址。 載入縮圖 - 停用後 NewPipe 將不再載入縮圖,減少數據和儲存空間的用量。改變此選項時將清除記憶體和磁碟上的縮圖快取 + 關閉以防止載入縮圖,減少數據和儲存空間的用量。改變時將清除記憶體和磁碟上的縮圖快取。 已清除圖片快取 清除快取中介資料 移除所有網頁的快取資料 @@ -439,17 +439,17 @@ 沒有可供下載的串流 字幕 - 調整播放器字幕文字大小與背景樣式。必須重新啟動應用程式才會生效 + 調整播放器字幕文字大小與背景樣式。必須重新啟動應用程式才會生效。 未安裝可播放此檔案的應用程式 清除觀看歷史 刪除播放過的串流歷史 - 刪除所有觀看歷史。 + 刪除所有觀看歷史記錄? 觀看歷史已刪除。 清除搜尋歷史 刪除搜尋關鍵字的歷史 - 刪除所有搜尋歷史。 + 刪除所有搜尋歷史記錄? 搜尋歷史已刪除。 已刪除 1 個項目。 @@ -466,8 +466,8 @@ 拒絕 沒有限制 使用行動網路時限制解析度 - 切換應用程式時最小化 - 從主影片播放器切換到其他應用程式時要執行的動作 — %s + 切換 app 時最小化 + 從主影片播放器切換到其他 app 時要執行的動作 — %s 最小化為背景播放器 最小化為彈出式播放器 @@ -480,4 +480,68 @@ 播放清單 使用者 - + 取消訂閱 + 新分頁 + 選擇分頁 + 音量手勢控制 + 使用手勢控制播放器音量 + 亮度手勢控制 + 使用手勢控制播放器亮度 + 更新 + 已刪除檔案 + 應用程式更新通知 + 新 NewPipe 版本通知 + 外部儲存不可用 + 目前無法下載到外部 SD 卡。重設下載資料夾位置? + 使用預設分頁,讀取已儲存的分頁時發生錯誤 + 恢復預設值 + 您想要恢復預設值嗎? + 訂閱數不可用 + 要在首頁顯示哪些分頁 + 選擇 + 更新 + 當有新版本可用時顯示通知以告知應用程式更新 + 清單檢視模式 + 清單 + 網格 + 自動 + 切換檢視 + 有可用的 NewPipe 更新! + 輕觸以下載 + 結束 + 在佇列中 + 已暫停 + 已排入佇列 + 正在後處理 + 佇列 + 動作被系統拒絕 + 下載失敗 + 下載已結束 + %s 個下載已結束 + 生成獨特的名稱 + 覆寫 + 已有此名稱的已下載檔案 + 已有此名稱的當案的下載正在進行 + 顯示錯誤 + 代碼 + 無法建立檔案 + 無法建立目的地資料夾 + 被系統拒絕的權限 + 安全連線失敗 + 找不到伺服器 + 無法連線到伺服器 + 伺服器沒有傳送資料 + 伺服器不接受多執行緒下載,請以 @string/msg_threads = 1 重試 + 請求範圍無法滿足 + 找不到 + 後處理失敗 + 清除已結束的下載 + 繼續從您所擱置中的下載 %s 傳輸 + 停止 + 最高的重試次數 + 在取消下載前的最大嘗試數 + 切換到行動數據時暫停 + 無法暫停下載,將重新開始 + 事件 + 會議 + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 7b879fb4c..865b68c24 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -38,6 +38,10 @@ + + + + diff --git a/app/src/main/res/values/colors_services.xml b/app/src/main/res/values/colors_services.xml index 761b721d0..ea90cb083 100644 --- a/app/src/main/res/values/colors_services.xml +++ b/app/src/main/res/values/colors_services.xml @@ -22,4 +22,15 @@ #FFFFFF #ff9100 + + #9e9e9e + #616161 + #000000 + #afafaf + + #9e9e9e + #616161 + #FFFFFF + #afafaf + \ No newline at end of file diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 300217c09..b6c214caf 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -138,6 +138,7 @@ show_search_suggestions show_play_with_kodi show_next_video + show_comments show_hold_to_append en GB @@ -222,6 +223,10 @@ @string/always_ask_open_action_key + + update_app_key + update_pref_screen_key + af diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ec366ebed..e64f3124d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - + NewPipe Tap search to get started @@ -76,7 +76,9 @@ Use fast inexact seek Inexact seek allows the player to seek to positions faster with reduced precision Load thumbnails - When off no thumbnails load, saving data and memory usage. Changes clear both in-memory and on-disk image cache. + Show comments + Disable to stop showing comments + Turn off to prevent loading thumbnails, saving data and memory usage. Changes clear both in-memory and on-disk image cache. Image cache wiped Wipe cached metadata Remove all cached webpage data @@ -87,6 +89,8 @@ Use gestures to control the volume of the player Brightness gesture control Use gestures to control the brightness of the player + Player gesture controls + Use gestures to control the brightness and volume of the player Search suggestions Show suggestions when searching Search history @@ -96,7 +100,8 @@ Resume on focus gain Continue playing after interruptions (e.g. phone calls) Download - Next + Up next + Autoplay Show \'Next\' and \'Similar\' videos Show \"Hold to append\" tip Show tip when background or popup button is pressed on video details page @@ -112,6 +117,7 @@ Appearance Other Debug + Updates Playing in background Playing in popup mode Queued on background player @@ -120,8 +126,8 @@ Play Content Age restricted content - Show age Restricted Video. Allowing such material is possible from \"Settings\". - live + Show age restricted video. Allowing such material is possible from Settings. + LIVE LIVE Downloads Downloads @@ -132,8 +138,10 @@ Playlist Playlists Videos + Comments Tracks Users + Events Yes Later Disabled @@ -153,6 +161,10 @@ NewPipe Notification Notifications for NewPipe background and popup players + newpipeAppUpdate + App Update Notification + Notifications for new NewPipe version + [Unknown] Toggle Orientation @@ -175,7 +187,7 @@ Error External storage unavailable - Download to external SD card is not possible yet. Reset download folder location? + Downloading to external SD card not yet possible. Reset download folder location\? Network error Could not load all thumbnails Could not decrypt video URL signature @@ -230,6 +242,7 @@ User report No results @string/no_videos + @string/no_comments Nothing here but crickets Drag to reorder @@ -261,8 +274,14 @@ No videos - %s video - %s videos + Video + Videos + + + No comments + + %s comment + %s comments @@ -383,12 +402,14 @@ Warning: Could not import all files. This will override your current setup. Do you want to also import settings? + Could not load comments Kiosk Trending Top 50 New & hot + Conferences %1$s/%2$s @@ -436,7 +457,7 @@ Bookmark Playlist Remove Bookmark - Delete this playlist? + Delete this playlist\? Playlist created Playlisted Playlist thumbnail changed. @@ -513,6 +534,10 @@ 144p + + Updates + Show a notification to prompt app update when a new version is available + Minimize on app switch Action when switching to other app from main video player — %s @@ -525,16 +550,21 @@ Auto Switch View + + NewPipe Update Available! + Tap to download + + Finished In queue - + paused queued post-processing - + Queue - + Action denied by the system @@ -555,20 +585,20 @@ The destination folder can not be created Permission denied by the system Secure connection failed - Can not found the server + Could not find the server Can not connect to the server The server does not send data The server does not accept multi-threaded downloads, retry with @string/msg_threads = 1 - Requested Range Not Satisfiable + Requested range not satisfiable Not found Post-processing failed Clear finished downloads - You have %s pending downloads, goto Downloads to continue + Continue your %s pending transfers from Downloads Stop - Maximum retry + Maximum retries Maximum number of attempts before canceling the download Pause on switching to mobile data - Not all downloads can be suspended, in those cases, will be restarted + Downloads that can not be paused will be restarted - + \ 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 87e19cede..a7686dedc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -5,7 +5,7 @@ @android:color/transparent @android:color/transparent - @color/dark_background_color + @drawable/splash_background @@ -22,7 +22,6 @@ @drawable/ic_info_outline_black_24dp @drawable/ic_bug_report_black_24dp @drawable/ic_headset_black_24dp - @drawable/ic_delete_sweep_white_24dp @drawable/ic_file_download_black_24dp @drawable/ic_share_black_24dp @drawable/ic_cast_black_24dp @@ -54,6 +53,10 @@ @drawable/ic_add_black_24dp @drawable/ic_settings_backup_restore_black_24dp @drawable/ic_blank_page_black_24dp + @drawable/ic_list_black_24dp + @drawable/ic_grid_black_24dp + @drawable/ic_delete_black_24dp + @drawable/ic_settings_update_black @color/light_separator_color @color/light_contrast_background_color @@ -82,7 +85,6 @@ @drawable/ic_headset_white_24dp @drawable/ic_info_outline_white_24dp @drawable/ic_bug_report_white_24dp - @drawable/ic_delete_sweep_black_24dp @drawable/ic_file_download_white_24dp @drawable/ic_share_white_24dp @drawable/ic_cast_white_24dp @@ -114,6 +116,10 @@ @drawable/ic_add_white_24dp @drawable/ic_settings_backup_restore_white_24dp @drawable/ic_blank_page_white_24dp + @drawable/ic_list_white_24dp + @drawable/ic_grid_white_24dp + @drawable/ic_delete_white_24dp + @drawable/ic_settings_update_white @color/dark_separator_color @color/dark_contrast_background_color diff --git a/app/src/main/res/values/styles_services.xml b/app/src/main/res/values/styles_services.xml index 7ca9dacde..257b1905d 100644 --- a/app/src/main/res/values/styles_services.xml +++ b/app/src/main/res/values/styles_services.xml @@ -9,6 +9,7 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/appearance_settings.xml b/app/src/main/res/xml/appearance_settings.xml index 437736ab0..b5f222130 100644 --- a/app/src/main/res/xml/appearance_settings.xml +++ b/app/src/main/res/xml/appearance_settings.xml @@ -1,9 +1,11 @@ + + diff --git a/app/src/main/res/xml/debug_settings.xml b/app/src/main/res/xml/debug_settings.xml index c0bb1505d..7059ee8ce 100644 --- a/app/src/main/res/xml/debug_settings.xml +++ b/app/src/main/res/xml/debug_settings.xml @@ -1,16 +1,19 @@ diff --git a/app/src/main/res/xml/main_settings.xml b/app/src/main/res/xml/main_settings.xml index 4196a98d3..cd9dc3278 100644 --- a/app/src/main/res/xml/main_settings.xml +++ b/app/src/main/res/xml/main_settings.xml @@ -1,35 +1,49 @@ + + + + + + + diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml index f4492d33d..4e1b1f8b2 100644 --- a/app/src/main/res/xml/video_audio_settings.xml +++ b/app/src/main/res/xml/video_audio_settings.xml @@ -1,9 +1,11 @@ + + + + + image/svg+xml + + + + + + + + + diff --git a/assets/pure_logo.svg b/assets/pure_logo.svg new file mode 100644 index 000000000..4455b19c6 --- /dev/null +++ b/assets/pure_logo.svg @@ -0,0 +1,67 @@ + + + +image/svg+xml + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/71.txt b/fastlane/metadata/android/en-US/changelogs/71.txt new file mode 100644 index 000000000..51b31102d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/71.txt @@ -0,0 +1,11 @@ +### Improvements +* Add app update notification for GitHub build (#1608 by @krtkush) +* Various improvements to the downloader (#1944 by @kapodamy): + * add missing white icons and use hardcored way for change the icon colors + * check if the iterator is initialized (fixes #2031) + * allow retry downloads with "post-processing failed" error in the new muxer + * new MPEG-4 muxer fixing non-synchronous video and audio streams (#2039) + +### Fixed +* YouTube live streams stop playing after a short time (#1996 by @yausername) +