diff --git a/app/build.gradle b/app/build.gradle index f8fc1565f..5da8c9ff0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,6 +53,7 @@ ext { okHttpLibVersion = '3.12.6' icepickLibVersion = '3.2.0' stethoLibVersion = '1.5.0' + markwonVersion = '4.2.1' } dependencies { @@ -62,7 +63,7 @@ dependencies { exclude module: 'support-annotations' }) - implementation 'com.github.TeamNewPipe:NewPipeExtractor:ff61e284' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:9112a10' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.23.0' @@ -108,4 +109,7 @@ dependencies { implementation "com.squareup.okhttp3:okhttp:${okHttpLibVersion}" debugImplementation "com.facebook.stetho:stetho-okhttp3:${stethoLibVersion}" + + implementation "io.noties.markwon:core:${markwonVersion}" + implementation "io.noties.markwon:linkify:${markwonVersion}" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 21a846494..f27f4bad0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -112,7 +112,7 @@ <activity android:name=".ReCaptchaActivity" - android:label="@string/reCaptchaActivity"/> + android:label="@string/recaptcha"/> <provider android:name="androidx.core.content.FileProvider" diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java index 0a2d51b53..d72f729b5 100644 --- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java +++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java @@ -1,20 +1,25 @@ package org.schabi.newpipe; -import android.app.Activity; import android.content.Intent; -import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import androidx.core.app.NavUtils; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; + +import android.util.Log; +import android.view.Menu; import android.view.MenuItem; import android.webkit.CookieManager; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; +import org.schabi.newpipe.util.ThemeHelper; + +import javax.annotation.Nonnull; + /* * Created by beneth <bmauduit@beneth.fr> on 06.12.16. * @@ -37,48 +42,46 @@ import android.webkit.WebViewClient; public class ReCaptchaActivity extends AppCompatActivity { public static final int RECAPTCHA_REQUEST = 10; public static final String RECAPTCHA_URL_EXTRA = "recaptcha_url_extra"; - public static final String TAG = ReCaptchaActivity.class.toString(); public static final String YT_URL = "https://www.youtube.com"; - private String url; + private WebView webView; + private String foundCookies = ""; @Override protected void onCreate(Bundle savedInstanceState) { + ThemeHelper.setTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_recaptcha); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); - url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA); + String url = getIntent().getStringExtra(RECAPTCHA_URL_EXTRA); if (url == null || url.isEmpty()) { url = YT_URL; } - - // Set return to Cancel by default + // set return to Cancel by default setResult(RESULT_CANCELED); - Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setTitle(R.string.reCaptcha_title); - actionBar.setDisplayShowTitleEnabled(true); - } + webView = findViewById(R.id.reCaptchaWebView); - WebView myWebView = findViewById(R.id.reCaptchaWebView); - - // Enable Javascript - WebSettings webSettings = myWebView.getSettings(); + // enable Javascript + WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); - ReCaptchaWebViewClient webClient = new ReCaptchaWebViewClient(this); - myWebView.setWebViewClient(webClient); + webView.setWebViewClient(new WebViewClient() { + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + handleCookies(url); + } + }); - // Cleaning cache, history and cookies from webView - myWebView.clearCache(true); - myWebView.clearHistory(); + // cleaning cache, history and cookies from webView + webView.clearCache(true); + webView.clearHistory(); android.webkit.CookieManager cookieManager = CookieManager.getInstance(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cookieManager.removeAllCookies(aBoolean -> {}); @@ -86,77 +89,82 @@ public class ReCaptchaActivity extends AppCompatActivity { cookieManager.removeAllCookie(); } - myWebView.loadUrl(url); + webView.loadUrl(url); } - private class ReCaptchaWebViewClient extends WebViewClient { - private final Activity context; - private String mCookies; + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_recaptcha, menu); - ReCaptchaWebViewClient(Activity ctx) { - context = ctx; + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(false); + actionBar.setTitle(R.string.title_activity_recaptcha); + actionBar.setSubtitle(R.string.subtitle_activity_recaptcha); } - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - // TODO: Start Loader - super.onPageStarted(view, url, favicon); - } + return true; + } - @Override - public void onPageFinished(WebView view, String url) { - String cookies = CookieManager.getInstance().getCookie(url); - - // TODO: Stop Loader - - // find cookies : s_gl & goojf and Add cookies to Downloader - if (find_access_cookies(cookies)) { - // Give cookies to Downloader class - DownloaderImpl.getInstance().setCookies(mCookies); - - // Closing activity and return to parent - setResult(RESULT_OK); - finish(); - } - } - - private boolean find_access_cookies(String cookies) { - boolean ret = false; - String c_s_gl = ""; - String c_goojf = ""; - - String[] parts = cookies.split("; "); - for (String part : parts) { - if (part.trim().startsWith("s_gl")) { - c_s_gl = part.trim(); - } - if (part.trim().startsWith("goojf")) { - c_goojf = part.trim(); - } - } - if (c_s_gl.length() > 0 && c_goojf.length() > 0) { - ret = true; - //mCookies = c_s_gl + "; " + c_goojf; - // Youtube seems to also need the other cookies: - mCookies = cookies; - } - - return ret; - } + @Override + public void onBackPressed() { + saveCookiesAndFinish(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { - case android.R.id.home: { - Intent intent = new Intent(this, org.schabi.newpipe.MainActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - NavUtils.navigateUpTo(this, intent); + case R.id.menu_item_done: + saveCookiesAndFinish(); return true; - } default: return false; } } + + private void saveCookiesAndFinish() { + handleCookies(webView.getUrl()); // try to get cookies of unclosed page + if (!foundCookies.isEmpty()) { + // give cookies to Downloader class + DownloaderImpl.getInstance().setCookies(foundCookies); + setResult(RESULT_OK); + } + + Intent intent = new Intent(this, org.schabi.newpipe.MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + NavUtils.navigateUpTo(this, intent); + } + + + + private void handleCookies(String url) { + String cookies = CookieManager.getInstance().getCookie(url); + if (MainActivity.DEBUG) Log.d(TAG, "handleCookies: url=" + url + "; cookies=" + (cookies == null ? "null" : cookies)); + if (cookies == null) return; + + addYoutubeCookies(cookies); + // add other methods to extract cookies here + } + + private void addYoutubeCookies(@Nonnull String cookies) { + if (cookies.contains("s_gl=") || cookies.contains("goojf=") || cookies.contains("VISITOR_INFO1_LIVE=")) { + // youtube seems to also need the other cookies: + addCookie(cookies); + } + } + + private void addCookie(String cookie) { + if (foundCookies.contains(cookie)) { + return; + } + + if (foundCookies.isEmpty() || foundCookies.endsWith("; ")) { + foundCookies += cookie; + } else if (foundCookies.endsWith(";")) { + foundCookies += " " + cookie; + } else { + foundCookies += "; " + cookie; + } + } } diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java index 9e23d9d3d..edfc54375 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.java @@ -32,18 +32,20 @@ public class AboutActivity extends AppCompatActivity { * List of all software components */ private static final SoftwareComponent[] SOFTWARE_COMPONENTS = new SoftwareComponent[]{ - new SoftwareComponent("Giga Get", "2014", "Peter Cai", "https://github.com/PaperAirplane-Dev-Team/GigaGet", StandardLicenses.GPL2), - new SoftwareComponent("NewPipe Extractor", "2017", "Christian Schabesberger", "https://github.com/TeamNewPipe/NewPipeExtractor", StandardLicenses.GPL3), + new SoftwareComponent("Giga Get", "2014 - 2015", "Peter Cai", "https://github.com/PaperAirplane-Dev-Team/GigaGet", StandardLicenses.GPL2), + new SoftwareComponent("NewPipe Extractor", "2017 - 2020", "Christian Schabesberger", "https://github.com/TeamNewPipe/NewPipeExtractor", StandardLicenses.GPL3), new SoftwareComponent("Jsoup", "2017", "Jonathan Hedley", "https://github.com/jhy/jsoup", StandardLicenses.MIT), new SoftwareComponent("Rhino", "2015", "Mozilla", "https://www.mozilla.org/rhino/", StandardLicenses.MPL2), new SoftwareComponent("ACRA", "2013", "Kevin Gaudin", "http://www.acra.ch", StandardLicenses.APACHE2), new SoftwareComponent("Universal Image Loader", "2011 - 2015", "Sergey Tarasevich", "https://github.com/nostra13/Android-Universal-Image-Loader", StandardLicenses.APACHE2), - new SoftwareComponent("CircleImageView", "2014 - 2017", "Henning Dodenhof", "https://github.com/hdodenhof/CircleImageView", StandardLicenses.APACHE2), + new SoftwareComponent("CircleImageView", "2014 - 2020", "Henning Dodenhof", "https://github.com/hdodenhof/CircleImageView", StandardLicenses.APACHE2), new SoftwareComponent("NoNonsense-FilePicker", "2016", "Jonas Kalderstam", "https://github.com/spacecowboy/NoNonsense-FilePicker", StandardLicenses.MPL2), - new SoftwareComponent("ExoPlayer", "2014-2017", "Google Inc", "https://github.com/google/ExoPlayer", StandardLicenses.APACHE2), - new SoftwareComponent("RxAndroid", "2015", "The RxAndroid authors", "https://github.com/ReactiveX/RxAndroid", StandardLicenses.APACHE2), - new SoftwareComponent("RxJava", "2016-present", "RxJava Contributors", "https://github.com/ReactiveX/RxJava", StandardLicenses.APACHE2), - new SoftwareComponent("RxBinding", "2015", "Jake Wharton", "https://github.com/JakeWharton/RxBinding", StandardLicenses.APACHE2) + new SoftwareComponent("ExoPlayer", "2014 - 2020", "Google Inc", "https://github.com/google/ExoPlayer", StandardLicenses.APACHE2), + new SoftwareComponent("RxAndroid", "2015 - 2018", "The RxAndroid authors", "https://github.com/ReactiveX/RxAndroid", StandardLicenses.APACHE2), + new SoftwareComponent("RxJava", "2016 - 2020", "RxJava Contributors", "https://github.com/ReactiveX/RxJava", StandardLicenses.APACHE2), + new SoftwareComponent("RxBinding", "2015 - 2018", "Jake Wharton", "https://github.com/JakeWharton/RxBinding", StandardLicenses.APACHE2), + new SoftwareComponent("PrettyTime", "2012 - 2020", "Lincoln Baxter, III", "https://github.com/ocpsoft/prettytime", StandardLicenses.APACHE2), + new SoftwareComponent("Markwon", "2017 - 2020", "Noties", "https://github.com/noties/Markwon", StandardLicenses.APACHE2) }; /** 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 f59cfaef0..3c594bdfa 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 @@ -2,7 +2,6 @@ package org.schabi.newpipe.fragments.detail; import android.app.Activity; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; @@ -18,7 +17,6 @@ import androidx.fragment.app.Fragment; import androidx.core.content.ContextCompat; import androidx.viewpager.widget.ViewPager; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.text.Html; import android.text.Spanned; @@ -58,6 +56,7 @@ 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; +import org.schabi.newpipe.extractor.stream.Description; import org.schabi.newpipe.extractor.stream.Stream; import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamType; @@ -96,6 +95,8 @@ import java.util.List; import java.util.concurrent.TimeUnit; import icepick.State; +import io.noties.markwon.Markwon; +import io.noties.markwon.linkify.LinkifyPlugin; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -483,7 +484,6 @@ public class VideoDetailFragment videoUploadDateView = rootView.findViewById(R.id.detail_upload_date_view); videoDescriptionView = rootView.findViewById(R.id.detail_description_view); videoDescriptionView.setMovementMethod(LinkMovementMethod.getInstance()); - videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS); thumbsUpTextView = rootView.findViewById(R.id.detail_thumbs_up_count_view); thumbsUpImageView = rootView.findViewById(R.id.detail_thumbs_up_img_view); @@ -919,28 +919,41 @@ public class VideoDetailFragment return sortedVideoStreams != null ? sortedVideoStreams.get(selectedVideoStreamIndex) : null; } - private void prepareDescription(final String descriptionHtml) { - if (TextUtils.isEmpty(descriptionHtml)) { + private void prepareDescription(Description description) { + if (TextUtils.isEmpty(description.getContent()) || description == Description.emptyDescription) { return; } - disposables.add(Single.just(descriptionHtml) - .map((@io.reactivex.annotations.NonNull String description) -> { - Spanned parsedDescription; - if (Build.VERSION.SDK_INT >= 24) { - parsedDescription = Html.fromHtml(description, 0); - } else { - //noinspection deprecation - parsedDescription = Html.fromHtml(description); - } - return parsedDescription; - }) - .subscribeOn(Schedulers.computation()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe((@io.reactivex.annotations.NonNull Spanned spanned) -> { - videoDescriptionView.setText(spanned); - videoDescriptionView.setVisibility(View.VISIBLE); - })); + if (description.getType() == Description.HTML) { + disposables.add(Single.just(description.getContent()) + .map((@io.reactivex.annotations.NonNull String descriptionText) -> { + Spanned parsedDescription; + if (Build.VERSION.SDK_INT >= 24) { + parsedDescription = Html.fromHtml(descriptionText, 0); + } else { + //noinspection deprecation + parsedDescription = Html.fromHtml(descriptionText); + } + return parsedDescription; + }) + .subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe((@io.reactivex.annotations.NonNull Spanned spanned) -> { + videoDescriptionView.setText(spanned); + videoDescriptionView.setVisibility(View.VISIBLE); + })); + } else if (description.getType() == Description.MARKDOWN) { + final Markwon markwon = Markwon.builder(getContext()) + .usePlugin(LinkifyPlugin.create()) + .build(); + markwon.setMarkdown(videoDescriptionView, description.getContent()); + videoDescriptionView.setVisibility(View.VISIBLE); + } else { + //== Description.PLAIN_TEXT + videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS); + videoDescriptionView.setText(description.getContent(), TextView.BufferType.SPANNABLE); + videoDescriptionView.setVisibility(View.VISIBLE); + } } private void setHeightThumbnail() { 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 index 4d94ec392..58f1ab90d 100644 --- 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 @@ -1,9 +1,15 @@ package org.schabi.newpipe.info_list.holder; -import androidx.appcompat.app.AppCompatActivity; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; import android.text.util.Linkify; +import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; import org.jsoup.helper.StringUtil; import org.schabi.newpipe.R; @@ -120,6 +126,21 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { itemBuilder.getOnCommentsSelectedListener().selected(item); } }); + + + itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + + ClipboardManager clipboardManager = (ClipboardManager) itemBuilder.getContext() + .getSystemService(Context.CLIPBOARD_SERVICE); + clipboardManager.setPrimaryClip(ClipData.newPlainText(null,commentText)); + Toast.makeText(itemBuilder.getContext(), R.string.msg_copied, Toast.LENGTH_SHORT).show(); + return true; + + } + }); + } private void ellipsize() { diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java index 8f67367aa..761fa4360 100644 --- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java @@ -1,8 +1,11 @@ package org.schabi.newpipe.local.bookmark; import android.app.AlertDialog; +import android.app.AlertDialog.Builder; import android.os.Bundle; import android.os.Parcelable; +import android.util.Log; +import android.widget.EditText; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentManager; @@ -10,6 +13,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import io.reactivex.disposables.Disposable; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; import org.schabi.newpipe.NewPipeDatabase; @@ -118,8 +122,7 @@ public final class BookmarkFragment @Override public void held(LocalItem selectedItem) { if (selectedItem instanceof PlaylistMetadataEntry) { - showLocalDeleteDialog((PlaylistMetadataEntry) selectedItem); - + showLocalDialog((PlaylistMetadataEntry) selectedItem); } else if (selectedItem instanceof PlaylistRemoteEntity) { showRemoteDeleteDialog((PlaylistRemoteEntity) selectedItem); } @@ -247,14 +250,30 @@ public final class BookmarkFragment // Utils /////////////////////////////////////////////////////////////////////////// - private void showLocalDeleteDialog(final PlaylistMetadataEntry item) { - showDeleteDialog(item.name, localPlaylistManager.deletePlaylist(item.uid)); - } - private void showRemoteDeleteDialog(final PlaylistRemoteEntity item) { showDeleteDialog(item.getName(), remotePlaylistManager.deletePlaylist(item.getUid())); } + private void showLocalDialog(PlaylistMetadataEntry selectedItem) { + View dialogView = View.inflate(getContext(), R.layout.dialog_bookmark, null); + EditText editText = dialogView.findViewById(R.id.playlist_name_edit_text); + editText.setText(selectedItem.name); + + Builder builder = new AlertDialog.Builder(activity); + builder.setView(dialogView) + .setPositiveButton(R.string.rename_playlist, (dialog, which) -> { + changeLocalPlaylistName(selectedItem.uid, editText.getText().toString()); + }) + .setNegativeButton(R.string.cancel, null) + .setNeutralButton(R.string.delete, (dialog, which) -> { + showDeleteDialog(selectedItem.name, + localPlaylistManager.deletePlaylist(selectedItem.uid)); + dialog.dismiss(); + }) + .create() + .show(); + } + private void showDeleteDialog(final String name, final Single<Integer> deleteReactor) { if (activity == null || disposables == null) return; @@ -271,6 +290,23 @@ public final class BookmarkFragment .show(); } + private void changeLocalPlaylistName(long id, String name) { + if (localPlaylistManager == null) { + return; + } + + if (DEBUG) { + Log.d(TAG, "Updating playlist id=[" + id + + "] with new name=[" + name + "] items"); + } + + localPlaylistManager.renamePlaylist(id, name); + final Disposable disposable = localPlaylistManager.renamePlaylist(id, name) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(longs -> {/*Do nothing on success*/}, this::onError); + disposables.add(disposable); + } + private static List<PlaylistLocalItem> merge(final List<PlaylistMetadataEntry> localPlaylists, final List<PlaylistRemoteEntity> remotePlaylists) { List<PlaylistLocalItem> items = new ArrayList<>( diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java index 9f21e05ff..17599a1ca 100644 --- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java @@ -388,8 +388,10 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt this.name = name; setTitle(name); - Log.d(TAG, "Updating playlist id=[" + playlistId + + if (DEBUG) { + Log.d(TAG, "Updating playlist id=[" + playlistId + "] with new name=[" + name + "] items"); + } final Disposable disposable = playlistManager.renamePlaylist(playlistId, name) .observeOn(AndroidSchedulers.mainThread()) @@ -404,8 +406,10 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt R.string.playlist_thumbnail_change_success, Toast.LENGTH_SHORT); - Log.d(TAG, "Updating playlist id=[" + playlistId + + if (DEBUG) { + Log.d(TAG, "Updating playlist id=[" + playlistId + "] with new thumbnail url=[" + thumbnailUrl + "]"); + } final Disposable disposable = playlistManager .changePlaylistThumbnail(playlistId, thumbnailUrl) @@ -472,8 +476,10 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt } } - Log.d(TAG, "Updating playlist id=[" + playlistId + + if (DEBUG) { + Log.d(TAG, "Updating playlist id=[" + playlistId + "] with [" + streamIds.size() + "] items"); + } final Disposable disposable = playlistManager.updateJoin(playlistId, streamIds) .observeOn(AndroidSchedulers.mainThread()) diff --git a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java index 0e62810c5..75b55cd73 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/DataReader.java +++ b/app/src/main/java/org/schabi/newpipe/streams/DataReader.java @@ -137,6 +137,7 @@ public class DataReader { position = 0; readOffset = readBuffer.length; + readCount = 0; } public boolean canRewind() { diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java index 818f6148e..57a7aaa9c 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java @@ -11,6 +11,7 @@ import org.schabi.newpipe.streams.io.SharpStream; import java.io.IOException; import java.nio.ByteBuffer; +import java.util.ArrayList; /** * @author kapodamy @@ -23,7 +24,6 @@ public class Mp4FromDashWriter { private final static byte SAMPLES_PER_CHUNK = 6;// ffmpeg uses 2, basic uses 1 (with 60fps uses 21 or 22). NewPipe will use 6 private final static long THRESHOLD_FOR_CO64 = 0xFFFEFFFFL;// near 3.999 GiB private final static int THRESHOLD_MOOV_LENGTH = (256 * 1024) + (2048 * 1024); // 2.2 MiB enough for: 1080p 60fps 00h35m00s - private final static short SINGLE_CHUNK_SAMPLE_BUFFER = 256; private final long time; @@ -46,6 +46,8 @@ public class Mp4FromDashWriter { private int overrideMainBrand = 0x00; + private ArrayList<Integer> compatibleBrands = new ArrayList<>(5); + public Mp4FromDashWriter(SharpStream... sources) throws IOException { for (SharpStream src : sources) { if (!src.canRewind() && !src.canRead()) { @@ -57,6 +59,10 @@ public class Mp4FromDashWriter { readers = new Mp4DashReader[sourceTracks.length]; readersChunks = new Mp4DashChunk[readers.length]; time = (System.currentTimeMillis() / 1000L) + EPOCH_OFFSET; + + compatibleBrands.add(0x6D703431);// mp41 + compatibleBrands.add(0x69736F6D);// isom + compatibleBrands.add(0x69736F32);// iso2 } public Mp4Track[] getTracksFromSource(int sourceIndex) throws IllegalStateException { @@ -104,8 +110,8 @@ public class Mp4FromDashWriter { } } - public void setMainBrand(int brandId) { - overrideMainBrand = brandId; + public void setMainBrand(int brand) { + overrideMainBrand = brand; } public boolean isDone() { @@ -159,7 +165,13 @@ public class Mp4FromDashWriter { tablesInfo[i] = new TablesInfo(); } - boolean singleChunk = tracks.length == 1 && tracks[0].kind == TrackKind.Audio; + int single_sample_buffer; + if (tracks.length == 1 && tracks[0].kind == TrackKind.Audio) { + // near 1 second of audio data per chunk, avoid split the audio stream in large chunks + single_sample_buffer = tracks[0].trak.mdia.mdhd_timeScale / 1000; + } else { + single_sample_buffer = -1; + } for (int i = 0; i < readers.length; i++) { @@ -210,31 +222,10 @@ public class Mp4FromDashWriter { readers[i].rewind(); - int tmp = tablesInfo[i].stsz - SAMPLES_PER_CHUNK_INIT; - tablesInfo[i].stco = (tmp / SAMPLES_PER_CHUNK) + 1;// +1 for samples in first chunk - - tmp = tmp % SAMPLES_PER_CHUNK; - if (singleChunk) { - // avoid split audio streams in chunks - tablesInfo[i].stsc = 1; - tablesInfo[i].stsc_bEntries = new int[]{ - 1, tablesInfo[i].stsz, 1 - }; - tablesInfo[i].stco = 1; - } else if (tmp == 0) { - tablesInfo[i].stsc = 2;// first chunk (init) and succesive chunks - tablesInfo[i].stsc_bEntries = new int[]{ - 1, SAMPLES_PER_CHUNK_INIT, 1, - 2, SAMPLES_PER_CHUNK, 1 - }; + if (single_sample_buffer > 0) { + initChunkTables(tablesInfo[i], single_sample_buffer, single_sample_buffer); } else { - tablesInfo[i].stsc = 3;// first chunk (init) and successive chunks and remain chunk - tablesInfo[i].stsc_bEntries = new int[]{ - 1, SAMPLES_PER_CHUNK_INIT, 1, - 2, SAMPLES_PER_CHUNK, 1, - tablesInfo[i].stco + 1, tmp, 1 - }; - tablesInfo[i].stco++; + initChunkTables(tablesInfo[i], SAMPLES_PER_CHUNK_INIT, SAMPLES_PER_CHUNK); } sampleCount[i] = tablesInfo[i].stsz; @@ -259,7 +250,7 @@ public class Mp4FromDashWriter { boolean is64 = read > THRESHOLD_FOR_CO64; - // calculate the moov size; + // calculate the moov size int auxSize = make_moov(defaultMediaTime, tablesInfo, is64); if (auxSize < THRESHOLD_MOOV_LENGTH) { @@ -272,11 +263,6 @@ public class Mp4FromDashWriter { final int ftyp_size = make_ftyp(); // reserve moov space in the output stream - /*if (outStream.canSetLength()) { - long length = writeOffset + auxSize; - outStream.setLength(length); - outSeek(length); - } else {*/ if (auxSize > 0) { int length = auxSize; byte[] buffer = new byte[64 * 1024];// 64 KiB @@ -292,10 +278,10 @@ public class Mp4FromDashWriter { } // tablesInfo contains row counts - // and after returning from make_moov() will contain table offsets + // and after returning from make_moov() will contain those table offsets make_moov(defaultMediaTime, tablesInfo, is64); - // write tables: stts stsc + // write tables: stts stsc sbgp // reset for ctts table: sampleCount sampleExtra for (int i = 0; i < readers.length; i++) { writeEntryArray(tablesInfo[i].stts, 2, sampleCount[i], defaultSampleDuration[i]); @@ -305,6 +291,7 @@ public class Mp4FromDashWriter { sampleCount[i] = 1;// the index is not base zero sampleExtra[i] = -1; } + writeEntryArray(tablesInfo[i].sbgp, 1, sampleCount[i]); } if (auxBuffer == null) { @@ -314,8 +301,8 @@ public class Mp4FromDashWriter { outWrite(make_mdat(totalSampleSize, is64)); int[] sampleIndex = new int[readers.length]; - int[] sizes = new int[singleChunk ? SINGLE_CHUNK_SAMPLE_BUFFER : SAMPLES_PER_CHUNK]; - int[] sync = new int[singleChunk ? SINGLE_CHUNK_SAMPLE_BUFFER : SAMPLES_PER_CHUNK]; + int[] sizes = new int[single_sample_buffer > 0 ? single_sample_buffer : SAMPLES_PER_CHUNK]; + int[] sync = new int[single_sample_buffer > 0 ? single_sample_buffer : SAMPLES_PER_CHUNK]; int written = readers.length; while (written > 0) { @@ -329,8 +316,8 @@ public class Mp4FromDashWriter { long chunkOffset = writeOffset; int syncCount = 0; int limit; - if (singleChunk) { - limit = SINGLE_CHUNK_SAMPLE_BUFFER; + if (single_sample_buffer > 0) { + limit = single_sample_buffer; } else { limit = sampleIndex[i] == 0 ? SAMPLES_PER_CHUNK_INIT : SAMPLES_PER_CHUNK; } @@ -342,6 +329,7 @@ public class Mp4FromDashWriter { if (sample == null) { if (tablesInfo[i].ctts > 0 && sampleExtra[i] >= 0) { writeEntryArray(tablesInfo[i].ctts, 1, sampleCount[i], sampleExtra[i]);// flush last entries + outRestore(); } sampleIndex[i] = -1; break; @@ -390,10 +378,6 @@ public class Mp4FromDashWriter { } else { tablesInfo[i].stco = writeEntryArray(tablesInfo[i].stco, 1, (int) chunkOffset); } - - if (singleChunk) { - tablesInfo[i].stco = -1; - } } outRestore(); @@ -470,7 +454,42 @@ public class Mp4FromDashWriter { } } + private void initChunkTables(TablesInfo tables, int firstCount, int succesiveCount) { + // tables.stsz holds amount of samples of the track (total) + int totalSamples = (tables.stsz - firstCount); + float chunkAmount = totalSamples / (float) succesiveCount; + int remainChunkOffset = (int) Math.ceil(chunkAmount); + boolean remain = remainChunkOffset != (int) chunkAmount; + int index = 0; + tables.stsc = 1; + if (firstCount != succesiveCount) { + tables.stsc++; + } + if (remain) { + tables.stsc++; + } + + // stsc_table_entry = [first_chunk, samples_per_chunk, sample_description_index] + tables.stsc_bEntries = new int[tables.stsc * 3]; + tables.stco = remainChunkOffset + 1;// total entrys in chunk offset box + + tables.stsc_bEntries[index++] = 1; + tables.stsc_bEntries[index++] = firstCount; + tables.stsc_bEntries[index++] = 1; + + if (firstCount != succesiveCount) { + tables.stsc_bEntries[index++] = 2; + tables.stsc_bEntries[index++] = succesiveCount; + tables.stsc_bEntries[index++] = 1; + } + + if (remain) { + tables.stsc_bEntries[index++] = remainChunkOffset + 1; + tables.stsc_bEntries[index++] = totalSamples % succesiveCount; + tables.stsc_bEntries[index] = 1; + } + } private void outWrite(byte[] buffer) throws IOException { outWrite(buffer, buffer.length); @@ -585,19 +604,29 @@ public class Mp4FromDashWriter { private int make_ftyp() throws IOException { - byte[] buffer = new byte[]{ - 0x00, 0x00, 0x00, 0x1C, 0x66, 0x74, 0x79, 0x70,// ftyp - 0x6D, 0x70, 0x34, 0x32,// mayor brand (mp42) - 0x00, 0x00, 0x02, 0x00,// default minor version (512) - 0x6D, 0x70, 0x34, 0x31, 0x69, 0x73, 0x6F, 0x6D, 0x69, 0x73, 0x6F, 0x32// compatible brands: mp41 isom iso2 - }; + int size = 16 + (compatibleBrands.size() * 4); + if (overrideMainBrand != 0) size += 4; - if (overrideMainBrand != 0) - ByteBuffer.wrap(buffer).putInt(8, overrideMainBrand); + ByteBuffer buffer = ByteBuffer.allocate(size); + buffer.putInt(size); + buffer.putInt(0x66747970);// "ftyp" - outWrite(buffer); + if (overrideMainBrand == 0) { + buffer.putInt(0x6D703432);// mayor brand "mp42" + buffer.putInt(512);// default minor version + } else { + buffer.putInt(overrideMainBrand); + buffer.putInt(0); + buffer.putInt(0x6D703432);// "mp42" compatible brand + } - return buffer.length; + for (Integer brand : compatibleBrands) { + buffer.putInt(brand);// compatible brand + } + + outWrite(buffer.array()); + + return size; } private byte[] make_mdat(long refSize, boolean is64) { @@ -740,13 +769,12 @@ public class Mp4FromDashWriter { .array() ); - make_mdia(tracks[index].trak.mdia, tables, is64); + make_mdia(tracks[index].trak.mdia, tables, is64, tracks[index].kind == TrackKind.Audio); lengthFor(start); } - private void make_mdia(Mdia mdia, TablesInfo tablesInfo, boolean is64) throws IOException { - + private void make_mdia(Mdia mdia, TablesInfo tablesInfo, boolean is64, boolean isAudio) throws IOException { int start_mdia = auxOffset(); auxWrite(new byte[]{0x00, 0x00, 0x00, 0x00, 0x6D, 0x64, 0x69, 0x61});// mdia auxWrite(mdia.mdhd); @@ -766,7 +794,7 @@ public class Mp4FromDashWriter { // And stsz can be empty if has a default sample size // if (moovSimulation) { - make(0x73747473, -1, 2, 1); + make(0x73747473, -1, 2, 1);// stts if (tablesInfo.stss > 0) { make(0x73747373, -1, 1, tablesInfo.stss); } @@ -789,6 +817,11 @@ public class Mp4FromDashWriter { tablesInfo.stco = make(is64 ? 0x636F3634 : 0x7374636F, -1, is64 ? 2 : 1, tablesInfo.stco); } + if (isAudio) { + auxWrite(make_sgpd()); + tablesInfo.sbgp = make_sbgp();// during simulation the returned offset is ignored + } + lengthFor(start_stbl); lengthFor(start_minf); lengthFor(start_mdia); @@ -816,6 +849,48 @@ public class Mp4FromDashWriter { return buffer.array(); } + private int make_sbgp() throws IOException { + int offset = auxOffset(); + + auxWrite(new byte[] { + 0x00, 0x00, 0x00, 0x1C,// box size + 0x73, 0x62, 0x67, 0x70,// "sbpg" + 0x00, 0x00, 0x00, 0x00,// default box flags + 0x72, 0x6F, 0x6C, 0x6C,// group type "roll" + 0x00, 0x00, 0x00, 0x01,// group table size + 0x00, 0x00, 0x00, 0x00,// group[0] total samples (to be set later) + 0x00, 0x00, 0x00, 0x01// group[0] description index + }); + + return offset + 0x14; + } + + private byte[] make_sgpd() { + /* + * Sample Group Description Box + * + * ¿whats does? + * the table inside of this box gives information about the + * characteristics of sample groups. The descriptive information is any other + * information needed to define or characterize the sample group. + * + * ¿is replicabled this box? + * NO due lacks of documentation about this box but... + * most of m4a encoders and ffmpeg uses this box with dummy values (same values) + */ + + ByteBuffer buffer = ByteBuffer.wrap(new byte[] { + 0x00, 0x00, 0x00, 0x1A,// box size + 0x73, 0x67, 0x70, 0x64,// "sgpd" + 0x01, 0x00, 0x00, 0x00,// box flags (unknown flag sets) + 0x72, 0x6F, 0x6C, 0x6C, // ¿¿group type?? + 0x00, 0x00, 0x00, 0x02,// ¿¿?? + 0x00, 0x00, 0x00, 0x01,// ¿¿?? + (byte)0xFF, (byte)0xFF// ¿¿?? + }); + + return buffer.array(); + } class TablesInfo { @@ -827,5 +902,6 @@ public class Mp4FromDashWriter { int stsz_default; int stss; int stco; + int sbgp; } } diff --git a/app/src/main/res/drawable/ic_done_black_24dp.xml b/app/src/main/res/drawable/ic_done_black_24dp.xml new file mode 100644 index 000000000..7affe9ba9 --- /dev/null +++ b/app/src/main/res/drawable/ic_done_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/> +</vector> diff --git a/app/src/main/res/drawable/ic_done_white_24dp.xml b/app/src/main/res/drawable/ic_done_white_24dp.xml new file mode 100644 index 000000000..cab2aed1a --- /dev/null +++ b/app/src/main/res/drawable/ic_done_white_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#FFFFFF" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/> +</vector> diff --git a/app/src/main/res/layout/activity_recaptcha.xml b/app/src/main/res/layout/activity_recaptcha.xml index 411ada498..759e1f296 100644 --- a/app/src/main/res/layout/activity_recaptcha.xml +++ b/app/src/main/res/layout/activity_recaptcha.xml @@ -14,9 +14,7 @@ android:minHeight="?attr/actionBarSize" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar" - app:titleTextAppearance="@style/Toolbar.Title"> - - </androidx.appcompat.widget.Toolbar> + app:titleTextAppearance="@style/Toolbar.Title"/> <WebView android:id="@+id/reCaptchaWebView" diff --git a/app/src/main/res/layout/dialog_bookmark.xml b/app/src/main/res/layout/dialog_bookmark.xml new file mode 100644 index 000000000..08bf20610 --- /dev/null +++ b/app/src/main/res/layout/dialog_bookmark.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <EditText + android:id="@+id/playlist_name_edit_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:importantForAutofill="no" + android:inputType="text" + android:maxLines="1" + android:layout_margin="10dp" + android:hint="@string/playlist_name_input"/> + +</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/menu/menu_recaptcha.xml b/app/src/main/res/menu/menu_recaptcha.xml new file mode 100644 index 000000000..07ad07b38 --- /dev/null +++ b/app/src/main/res/menu/menu_recaptcha.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <item + android:id="@+id/menu_item_done" + android:title="@string/recaptcha_done_button" + android:icon="?attr/ic_done" + app:showAsAction="always"/> +</menu> \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 02f79c8ab..4d91b40da 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -187,7 +187,7 @@ <string name="no_available_dir">يرجى تحديد مجلد التنزيل لاحقا في الإعدادات</string> <string name="msg_popup_permission">هذا الإذن مطلوب \nللفتح في وضع النافذة المنبثقة</string> - <string name="reCaptchaActivity">اختبار reCAPTCHA</string> + <string name="recaptcha">اختبار reCAPTCHA</string> <string name="settings_file_charset_title">السماح بالرموز في أسماء الملفات</string> <string name="settings_file_replacement_character_summary">يتم استبدال الرموز غير المسموح بها بهذه القيمة</string> <string name="settings_file_replacement_character_title">استبدال الحرف</string> @@ -235,7 +235,7 @@ <string name="play_queue_audio_settings">الإعدادات الصوتية</string> <string name="start_here_on_main">تشغيل هنا</string> <string name="start_here_on_popup">بدأ التشغيل في نافذة منبثقة جديدة</string> - <string name="reCaptcha_title">تحدي الكابتشا</string> + <string name="title_activity_recaptcha">تحدي الكابتشا</string> <string name="hold_to_append">ضغط مطول للإدراج الى قائمة الانتظار</string> <plurals name="views"> <item quantity="zero">%s بدون مشهادة</item> diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml index 08b22c616..5ddfa7ead 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -58,8 +58,8 @@ <string name="short_billion">Mil mill.</string> <string name="msg_popup_permission">Precísase esti permisu \np\'abrir nel mou ventanu</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Retu de reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Retu de reCAPTCHA</string> <string name="recaptcha_request_toast">Solicitóse\'l retu de reCAPTCHA</string> <string name="controls_background_title">En segundu planu</string> <string name="controls_popup_title">Ventanu</string> diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml index 9fbc08493..d4119e83c 100644 --- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml +++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml @@ -110,7 +110,7 @@ <string name="msg_running_detail">点击了解详情</string> <string name="msg_wait">请稍候…</string> <string name="msg_copied">复制至剪贴板</string> - <string name="reCaptchaActivity">reCAPTCHA验证码</string> + <string name="recaptcha">reCAPTCHA验证码</string> <string name="controls_popup_title">悬浮窗播放</string> <string name="title_activity_about">关于NewPipe</string> <string name="action_settings">设置</string> @@ -207,7 +207,7 @@ <string name="no_available_dir">请稍后在设置中设定下载目录</string> <string name="msg_popup_permission">用悬浮窗模式 \n需要此权限</string> - <string name="reCaptcha_title">reCAPTCHA验证</string> + <string name="title_activity_recaptcha">reCAPTCHA验证</string> <string name="recaptcha_request_toast">请求的新的CAPTCHA验证</string> <string name="popup_mode_share_menu_title">NewPipe 悬浮窗模式</string> <string name="popup_playing_toast">在悬浮窗中播放</string> diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 1cf3abd7e..b3a09cb8f 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -247,8 +247,8 @@ <string name="msg_popup_permission">Гэтае разрозненне трэба для \nпрайгравання ў акне</string> <string name="one_item_deleted">1 элемент выдалены.</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Запыт reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Запыт reCAPTCHA</string> <string name="recaptcha_request_toast">Запытаны ўвод reCAPTCHA</string> <string name="settings_category_downloads_title">Загрузкі</string> <string name="settings_file_charset_title">Дапушчальныя сімвалы назвы файлаў</string> diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 1eb9222ec..7c813d0a9 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -269,8 +269,8 @@ <string name="msg_popup_permission">Това разрешение се изисква за \nвъзпроизвеждане в отделен прозорец</string> <string name="one_item_deleted">1 елемент е изтрит.</string> - <string name="reCaptchaActivity">преКАПЧА</string> - <string name="reCaptcha_title">reCAPTCHA заявка</string> + <string name="recaptcha">преКАПЧА</string> + <string name="title_activity_recaptcha">reCAPTCHA заявка</string> <string name="recaptcha_request_toast">Изисква се въвеждане на reCAPTCHA</string> <string name="settings_category_downloads_title">Изтегляне</string> <string name="charset_most_special_characters">Повечето специални символи</string> diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 3a623f2c3..37938334c 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -145,8 +145,8 @@ <!-- Checksum types --> <!-- <string name="md5" translatable="false">MD5</string> --> <!-- <string name="sha1" translatable="false">SHA1</string> --> - <string name="reCaptchaActivity">রিক্যাপচা</string> - <string name="reCaptcha_title">reCAPTCHA চ্যালেঞ্জ</string> + <string name="recaptcha">রিক্যাপচা</string> + <string name="title_activity_recaptcha">reCAPTCHA চ্যালেঞ্জ</string> <string name="recaptcha_request_toast">reCAPTCHA চ্যালেঞ্জ অনুরোধ করা হয়েছে</string> <!-- End of GigaGet's Strings --> <string name="info_labels">কি:\\nঅনুরোধ:\\nকন্টেন্ট ভাষা:\\nসার্ভিস:\\nসময়(GMT এ):\\nপ্যাকেজ:\\nসংস্করণ:\\nওএস সংস্করণ:\\nআইপি পরিসর:</string> diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index bcc816577..20deb3160 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -67,7 +67,7 @@ <string name="finish">D\'acord</string> <string name="msg_name">Nom de fitxer</string> <string name="msg_error">Error</string> - <string name="reCaptchaActivity">reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> <string name="settings_category_downloads_title">Baixades</string> <string name="action_settings">Paràmetres</string> <string name="action_about">Quant a</string> @@ -307,7 +307,7 @@ <string name="msg_running_detail">Feu un toc aquí per a més detalls</string> <string name="no_available_dir">Defineix una carpeta de baixades més endavant als paràmetres</string> <string name="msg_popup_permission">Es necessita aquest permís per a obrir el mode emergent</string> - <string name="reCaptcha_title">Camp reCAPTCHA</string> + <string name="title_activity_recaptcha">Camp reCAPTCHA</string> <string name="recaptcha_request_toast">S\'ha sol·licitat l\'emplenament d\'un camp reCAPTCHA</string> <string name="settings_file_replacement_character_summary">Se substituiran els caràcters no vàlids amb aquest valor</string> <string name="settings_file_replacement_character_title">Caràcter de substitució</string> diff --git a/app/src/main/res/values-cmn/strings.xml b/app/src/main/res/values-cmn/strings.xml new file mode 100644 index 000000000..878efa9f2 --- /dev/null +++ b/app/src/main/res/values-cmn/strings.xml @@ -0,0 +1,504 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="main_bg_subtitle">点击搜索按钮即可开始使用</string> + <string name="view_count_text">%1$s 次观看</string> + <string name="upload_date_text">发布于 %1$s</string> + <string name="no_player_found">找不到媒体播放器。您要安装 VLC 吗?</string> + <string name="no_player_found_toast">找不到媒体播放器(您可以安装 VLC 来播放)。</string> + <string name="install">安装</string> + <string name="cancel">取消</string> + <string name="open_in_browser">在浏览器中打开</string> + <string name="open_in_popup_mode">在悬浮窗模式下打开</string> + <string name="share">分享</string> + <string name="download">下载</string> + <string name="controls_download_desc">下载媒体文件</string> + <string name="search">搜索</string> + <string name="settings">设置</string> + <string name="did_you_mean">您是不是要找:%1$s?</string> + <string name="share_dialog_title">分享至</string> + <string name="choose_browser">选择浏览器</string> + <string name="screen_rotation">旋转</string> + <string name="use_external_video_player_title">使用外部视频播放器</string> + <string name="use_external_video_player_summary">删除某些分辨率下的音频</string> + <string name="use_external_audio_player_title">使用外部音频播放器</string> + <string name="popup_mode_share_menu_title">NewPipe 悬浮窗模式</string> + <string name="subscribe_button_title">订阅</string> + <string name="subscribed_button_title">已订阅</string> + <string name="channel_unsubscribed">退订成功</string> + <string name="subscription_change_failed">无法更改订阅</string> + <string name="subscription_update_failed">无法更新订阅</string> + <string name="show_info">显示信息</string> + <string name="tab_main">主页</string> + <string name="tab_subscriptions">订阅</string> + <string name="tab_bookmarks">已添加书签到播放列表</string> + <string name="fragment_whats_new">新功能</string> + <string name="controls_background_title">转到后台</string> + <string name="controls_popup_title">悬浮窗</string> + <string name="controls_add_to_playlist_title">添加到</string> + <string name="download_path_title">视频下载文件夹</string> + <string name="download_path_summary">已下载的视频储存在此处</string> + <string name="download_path_dialog_title">选择视频文件的下载文件夹</string> + <string name="download_path_audio_title">音频下载文件夹</string> + <string name="download_path_audio_summary">已下载的音频存储在此处</string> + <string name="download_path_audio_dialog_title">选择音频文件的下载文件夹</string> + <string name="autoplay_by_calling_app_title">自动播放</string> + <string name="autoplay_by_calling_app_summary">NewPipes被其它程序调用时播放视频</string> + <string name="default_resolution_title">默认分辨率</string> + <string name="default_popup_resolution_title">默认悬浮窗分辨率</string> + <string name="show_higher_resolutions_title">显示更高的分辨率</string> + <string name="show_higher_resolutions_summary">只有部分设备支持播放 2K/4K 视频</string> + <string name="play_with_kodi_title">用 Kodi 播放</string> + <string name="kore_not_found">没找到 Kore 应用,需要安装它吗?</string> + <string name="show_play_with_kodi_title">显示“用 Kodi 播放”选项</string> + <string name="show_play_with_kodi_summary">显示以 Kodi 媒体中心播放视频的选项</string> + <string name="play_audio">音频</string> + <string name="default_audio_format_title">默认音频格式</string> + <string name="default_video_format_title">默认视频格式</string> + <string name="theme_title">主题</string> + <string name="light_theme_title">亮色</string> + <string name="dark_theme_title">酷黑</string> + <string name="black_theme_title">黑色</string> + <string name="popup_remember_size_pos_title">记住悬浮窗的尺寸与位置</string> + <string name="popup_remember_size_pos_summary">记住上一次悬浮窗的位置以及大小</string> + <string name="thumbnail_cache_wipe_complete_notice">已清除图像缓存</string> + <string name="minimize_on_exit_popup_description">最小化悬浮窗播放器</string> + <string name="clear_views_history_title">清除观看历史</string> + <string name="search_history_deleted">搜索记录已删除。</string> + <string name="general_error">错误</string> + <string name="network_error">网络错误</string> + <string name="report_error">举报错误</string> + <string name="search_no_results">没有结果</string> + <string name="start">开始</string> + <string name="pause">暂停</string> + <string name="view">播放</string> + <string name="create">创建</string> + <string name="delete">删除</string> + <string name="delete_all">删除所有</string> + <string name="add">新任务</string> + <string name="finish">好 +\n</string> + <string name="msg_error">错误 +\n</string> + <string name="msg_server_unsupported">不支持的服务器</string> + <string name="msg_exists">文件已存在</string> + <string name="msg_running">NewPipe 下载中</string> + <string name="msg_wait">请稍等…</string> + <string name="charset_letters_and_digits">字母与数字</string> + <string name="charset_most_special_characters">最特别的字符</string> + <string name="toast_no_player">这个文件里没有已下载应用程式</string> + <string name="title_activity_about">关于NewPipe</string> + <string name="action_settings">设置</string> + <string name="action_about">关于</string> + <string name="title_licenses">第三方执照</string> + <string name="action_open_website">打开网页</string> + <string name="unbookmark_playlist">删除书签</string> + <string name="delete_playlist_prompt">确定删除该播放列表吗?</string> + <string name="playlist_creation_success">已创建播放列表</string> + <string name="playlist_add_stream_success">播放列表</string> + <string name="playback_step">步骤</string> + <string name="playback_reset">重置</string> + <string name="start_accept_privacy_policy">为了遵守欧洲通用数据保护法规(GDPR,我们请你注意NewPipe的隐私政策.请仔细阅读. +\n你必须接受它才能将错误报告发送给我们.</string> + <string name="accept">接受</string> + <string name="decline">拒绝</string> + <string name="limit_data_usage_none_description">没有限制</string> + <string name="limit_mobile_data_usage_title">使用移动数据时的解析度限制</string> + <string name="minimize_on_exit_title">最小化应用程序切换</string> + <string name="minimize_on_exit_summary">从主视频播放器切换到其他应用时的操作 - %s</string> + <string name="minimize_on_exit_none_description">没有</string> + <string name="minimize_on_exit_background_description">最小化后台播放</string> + <string name="use_inexact_seek_title">使用快速粗略定位</string> + <string name="use_inexact_seek_summary">粗略定位功能允许播放器以略低的精确度为代价换取更快的定位速度</string> + <string name="download_thumbnail_title">下载缩略图</string> + <string name="metadata_cache_wipe_title">清除缓存的元数据</string> + <string name="metadata_cache_wipe_summary">移除所有缓存的网页数据</string> + <string name="metadata_cache_wipe_complete_notice">已清除缓存的元数据</string> + <string name="download_thumbnail_summary">不加载缩略图时,可以节省数据和存储空间。更改后将清除存储空间和扩展空间的缓存。</string> + <string name="auto_queue_title">自动排列下一个媒体</string> + <string name="auto_queue_summary">在非重复排列中播放最后一个媒体时自动推荐相关媒体</string> + <string name="player_gesture_controls_title">玩家手势控制</string> + <string name="player_gesture_controls_summary">使用手势控制播放器的亮度和音量</string> + <string name="show_search_suggestions_title">搜索建议</string> + <string name="show_search_suggestions_summary">搜索时显示建议</string> + <string name="enable_search_history_title">搜索历史记录</string> + <string name="enable_search_history_summary">在本地存储搜索</string> + <string name="enable_watch_history_title">观看历史</string> + <string name="enable_watch_history_summary">记录观看过的视频</string> + <string name="resume_on_audio_focus_gain_title">取得视窗焦点时继续播放</string> + <string name="resume_on_audio_focus_gain_summary">在被打断后继续播放(例如有来电)</string> + <string name="download_dialog_title">下载</string> + <string name="next_video_title">下一部</string> + <string name="show_next_and_similar_title">显示「下一部」及「相关」的视频</string> + <string name="show_hold_to_append_title">显示「长按以新增」的提示</string> + <string name="show_hold_to_append_summary">在视频详细信息页按下后台播放或悬浮窗按钮时提示</string> + <string name="url_not_supported_toast">不支持该网址</string> + <string name="default_content_country_title">默认内容的国家</string> + <string name="service_title">服务</string> + <string name="settings_category_player_title">播放器</string> + <string name="settings_category_player_behavior_title">行为</string> + <string name="settings_category_video_audio_title">视频与音频</string> + <string name="settings_category_history_title">历史记录和缓存数据</string> + <string name="settings_category_popup_title">悬浮窗</string> + <string name="settings_category_appearance_title">外观</string> + <string name="settings_category_other_title">其他</string> + <string name="settings_category_debug_title">调试</string> + <string name="background_player_playing_toast">在后台播放</string> + <string name="popup_playing_toast">在悬浮窗下播放</string> + <string name="background_player_append">已添加到后台播放队列</string> + <string name="popup_playing_append">已添加到悬浮窗播放队列</string> + <string name="play_btn_text">播放</string> + <string name="content">内容</string> + <string name="show_age_restricted_content_title">年龄限制内容</string> + <string name="video_is_age_restricted">显示有年龄限制的视频。可以从设置中允许该内容。</string> + <string name="duration_live">直播</string> + <string name="downloads">下载</string> + <string name="downloads_title">下载</string> + <string name="error_report_title">错误报告</string> + <string name="all">所有</string> + <string name="channel">频道</string> + <string name="channels">频道</string> + <string name="playlist">播放列表</string> + <string name="playlists">播放列表</string> + <string name="tracks">曲目</string> + <string name="users">用户</string> + <string name="yes">是的</string> + <string name="later">稍等</string> + <string name="disabled">不适用</string> + <string name="filter">过滤</string> + <string name="refresh">刷新</string> + <string name="clear">清除</string> + <string name="popup_resizing_indicator_title">调整</string> + <string name="best_resolution">最佳分辨率</string> + <string name="undo">复原</string> + <string name="play_all">全部播放</string> + <string name="always">总是</string> + <string name="just_once">仅一次</string> + <string name="file">文件</string> + <string name="notification_channel_name">NewPipe 通知</string> + <string name="notification_channel_description">NewPipe 后台播放和悬浮窗播放的通知</string> + <string name="unknown_content">[未知]</string> + <string name="toggle_orientation">切换方向</string> + <string name="switch_to_background">切换到后台</string> + <string name="switch_to_popup">切换到悬浮窗</string> + <string name="switch_to_main">切换到首页</string> + <string name="import_data_title">导入数据库</string> + <string name="export_data_title">导出数据库</string> + <string name="import_data_summary">覆盖您当前的历史记录和订阅</string> + <string name="export_data_summary">导出历史记录、订阅和播放列表</string> + <string name="clear_views_history_summary">删除播放过的媒体的历史记录及回放位置</string> + <string name="delete_view_history_alert">确定要清除所有观看历史记录吗?</string> + <string name="watch_history_deleted">观看历史记录已清除。</string> + <string name="clear_search_history_title">清除搜索历史记录</string> + <string name="clear_search_history_summary">清除搜索关键词的历史记录</string> + <string name="delete_search_history_alert">确定要清除所有搜索历史记录吗?</string> + <string name="could_not_load_thumbnails">无法加载所有缩略图</string> + <string name="youtube_signature_decryption_error">无法解析视频网址签名</string> + <string name="parsing_error">无法解析网站</string> + <string name="light_parsing_error">无法完全解析网站</string> + <string name="content_not_available">内容不可用</string> + <string name="could_not_setup_download_menu">无法设置下载菜单</string> + <string name="live_streams_not_supported">目前还不支持观看直播</string> + <string name="could_not_get_stream">无法获得任何媒体</string> + <string name="could_not_load_image">无法加载图片</string> + <string name="app_ui_crash">应用程序或界面出现崩溃了</string> + <string name="player_stream_failure">无法播放此媒体</string> + <string name="player_unrecoverable_failure">发生了无法恢复的播放器错误</string> + <string name="player_recoverable_failure">正在从播放器错误中恢复</string> + <string name="external_player_unsupported_link_type">外部播放器不支持此类型的链接</string> + <string name="invalid_url_toast">无效的网址</string> + <string name="video_streams_empty">找不到视频串流</string> + <string name="audio_streams_empty">找不到音频串流</string> + <string name="invalid_directory">无效的文件夹</string> + <string name="invalid_source">无效的文件/内容来源</string> + <string name="invalid_file">该文件不存在或缺少读写权限</string> + <string name="file_name_empty_error">文件名不能为空</string> + <string name="error_occurred_detail">发生错误:%1$s</string> + <string name="no_streams_available_download">没有可供下载的串流</string> + <string name="sorry_string">抱歉,这不应该发生的。</string> + <string name="error_report_button_text">通过电子邮件报告错误</string> + <string name="error_snackbar_message">抱歉,发生了一些错误。</string> + <string name="error_snackbar_action">报告</string> + <string name="what_device_headline">信息:</string> + <string name="what_happened_headline">发生了什么:</string> + <string name="info_labels">事件:\\n请求:\\n内容语言:\\n服务:\\nGMT 时间:\\n组件:\\n版本:\\n系统版本:</string> + <string name="your_comment">您的评论(请用英语):</string> + <string name="error_details_headline">详细:</string> + <string name="list_thumbnail_view_description">视频预览缩略图</string> + <string name="detail_thumbnail_view_description">视频预览缩略图</string> + <string name="detail_uploader_thumbnail_view_description">上传者的头像缩略图</string> + <string name="detail_likes_img_view_description">喜欢</string> + <string name="detail_dislikes_img_view_description">不喜欢</string> + <string name="use_tor_title">使用 Tor</string> + <string name="use_tor_summary">(实验性)通过 Tor 强制下载流量以增加隐私(暂不支持视频媒体)。</string> + <string name="user_report">用户报告</string> + <string name="empty_subscription_feed_subtitle">这里什么都没有</string> + <string name="detail_drag_description">拖动以重新排序</string> + <string name="err_dir_create">无法创建下载目录「%1$s」</string> + <string name="info_dir_created">已成功创建下载目录「%1$s」</string> + <string name="video">视频</string> + <string name="audio">音频</string> + <string name="retry">重试</string> + <string name="storage_permission_denied">手机存储访问权限被拒绝</string> + <string name="short_thousand">千</string> + <string name="short_million">万</string> + <string name="short_billion">十亿</string> + <string name="no_subscribers">没有订阅者</string> + <plurals name="subscribers"> + <item quantity="one">%s 位订阅者</item> + <item quantity="other"/> + </plurals> + <string name="no_views">无观看次数</string> + <plurals name="views"> + <item quantity="one">%s 次观看</item> + <item quantity="other"/> + </plurals> + <string name="no_videos">没有视频</string> + <string name="delete_one">删除</string> + <string name="checksum">校验</string> + <string name="dismiss">退出</string> + <string name="rename">重命名</string> + <string name="msg_name">文件名</string> + <string name="msg_threads">线程</string> + <string name="msg_url_malform">错误的网址或网络不可用</string> + <string name="msg_running_detail">点按以查看详细信息</string> + <string name="msg_copied">复制到剪贴板</string> + <string name="no_available_dir">请稍后在设置中定义一个下载文件夹</string> + <string name="msg_popup_permission">在悬浮窗模式打开 +\n需要此权限</string> + <string name="one_item_deleted">已删除一个项目。</string> + <string name="recaptcha">reCAPTCHA 验证</string> + <string name="title_activity_recaptcha">reCAPTCHA 验证</string> + <string name="recaptcha_request_toast">需完成 reCAPTCHA 验证</string> + <string name="settings_category_downloads_title">下载</string> + <string name="settings_file_charset_title">文件名中允许的字符</string> + <string name="settings_file_replacement_character_summary">无效字符将替换为该值</string> + <string name="settings_file_replacement_character_title">替换字符</string> + <string name="copyright" formatted="true">© %1$s 由 %2$s 使用 %3$s 版权所有</string> + <string name="error_unable_to_load_license">无法加载许可证</string> + <string name="tab_about">关于</string> + <string name="tab_contributors">贡献者</string> + <string name="tab_licenses">许可证</string> + <string name="app_description">安卓上开源且轻便的媒体播放器。</string> + <string name="contribution_title">贡献</string> + <string name="contribution_encouragement">您是否有想法帮助我们:翻译、界面设计、代码优化以及真正繁重的功能扩展 - 我们随时欢迎您提供帮助。让 NewPipe 越变越好!</string> + <string name="view_on_github">在 GitHub 上查看</string> + <string name="donation_title">捐赠</string> + <string name="donation_encouragement">NewPipe 由社区人员维护和开发额,他们耗费时间务求为您带来最佳体验。现在是时候回过头来,让我们的开发人员能够在使 NewPipe 更加完美的同时,享受一杯咖啡。</string> + <string name="give_back">回馈</string> + <string name="website_title">网站</string> + <string name="website_encouragement">访问 NewPipe 网站了解更多信息和新闻。</string> + <string name="privacy_policy_title">NewPipe 的隐私政策</string> + <string name="privacy_policy_encouragement">NewPipe 项目是非常重视您的隐私。因此,未经您的同意,该应用程序不会收集任何数据。 +\nNewPipe 的隐私政策详细说明了当您发送崩溃报告时,什么资料会被传送及储存。</string> + <string name="read_privacy_policy">阅读隐私政策</string> + <string name="app_license_title">NewPipe 的许可证</string> + <string name="app_license">NewPipe 是一个 Copyleft 的自由软件:您可以随意使用、研究、分享或改进它。在遵守由自由软件基金会所发布的 GNU 通用公共授权条款的状况下,您可以自由地再发布或修改它;授权条款预设使用第三版,但您也可以选择更新的版本。</string> + <string name="read_full_license">阅读许可证</string> + <string name="title_activity_history">历史记录</string> + <string name="title_history_search">搜索</string> + <string name="title_history_view">观看</string> + <string name="history_disabled">历史记录被关闭了</string> + <string name="action_history">历史记录</string> + <string name="history_empty">没有历史记录</string> + <string name="history_cleared">清除历史记录</string> + <string name="item_deleted">项目已删除</string> + <string name="delete_item_search_history">确定要从搜索历史记录中删除该项吗?</string> + <string name="delete_stream_history_prompt">确定要从观看历史记录中删除该项吗?</string> + <string name="delete_all_history_prompt">您确定要删除历史记录中的所有项吗?</string> + <string name="title_last_played">上一次播放</string> + <string name="title_most_played">最受欢迎</string> + <string name="main_page_content">首页内容</string> + <string name="blank_page_summary">空白页面</string> + <string name="kiosk_page_summary">互动页面</string> + <string name="subscription_page_summary">订阅页面</string> + <string name="feed_page_summary">Feed 页面</string> + <string name="channel_page_summary">频道页面</string> + <string name="select_a_channel">选择一个频道</string> + <string name="no_channel_subscribed_yet">尚未订阅任何频道</string> + <string name="select_a_kiosk">选择一个互动</string> + <string name="export_complete_toast">输出</string> + <string name="import_complete_toast">接入</string> + <string name="no_valid_zip_file">无效的压缩文件</string> + <string name="could_not_import_all_files">警告:无法导入所有文件。</string> + <string name="override_current_data">这将覆盖您当前的设定。</string> + <string name="import_settings">您是否要导入设定?</string> + <string name="kiosk">互动</string> + <string name="trending">趋势</string> + <string name="top_50">前 50</string> + <string name="new_and_hot">最新和热门</string> + <string name="title_activity_background_player">转到后台播放</string> + <string name="title_activity_popup_player">悬浮窗播放</string> + <string name="play_queue_remove">移除</string> + <string name="play_queue_stream_detail">详细</string> + <string name="play_queue_audio_settings">音频设置</string> + <string name="hold_to_append">长按加入队列</string> + <string name="enqueue_on_background">加入后台播放列表</string> + <string name="enqueue_on_popup">加入悬浮窗播放列表</string> + <string name="start_here_on_main">从这里开始播放</string> + <string name="start_here_on_background">开始在后台播放</string> + <string name="start_here_on_popup">开始在新悬浮窗播放</string> + <string name="drawer_open">打开抽屉</string> + <string name="drawer_close">关闭抽屉</string> + <string name="drawer_header_action_paceholder_text">很快就会出现在这里 ;D</string> + <string name="preferred_open_action_settings_title">偏好的「开启」动作</string> + <string name="preferred_open_action_settings_summary">开启内容时的默认动作 - %s</string> + <string name="video_player">视频播放器</string> + <string name="background_player">后台播放器</string> + <string name="popup_player">悬浮窗播放器</string> + <string name="always_ask_open_action">总是询问</string> + <string name="preferred_player_fetcher_notification_title">正在获取信息…</string> + <string name="preferred_player_fetcher_notification_message">正在载入请求的内容</string> + <string name="create_playlist">新的播放列表</string> + <string name="delete_playlist">删除</string> + <string name="rename_playlist">重命名</string> + <string name="playlist_name_input">名称</string> + <string name="append_playlist">添加到播放列表</string> + <string name="set_as_playlist_thumbnail">设为播放列表缩略图</string> + <string name="bookmark_playlist">将播放列表加入书签</string> + <string name="playlist_thumbnail_change_success">播放列表缩略图已更改。</string> + <string name="playlist_delete_failure">无法删除播放列表。</string> + <string name="caption_none">没有字幕</string> + <string name="resize_fit">合适</string> + <string name="resize_fill">填满</string> + <string name="resize_zoom">缩放</string> + <string name="caption_auto_generated">自动生成</string> + <string name="caption_setting_title">字幕</string> + <string name="caption_setting_description">修改播放器字幕文本比列和背景样式。需要重启才能生效。</string> + <string name="enable_leak_canary_title">启用 LeakCanary</string> + <string name="enable_leak_canary_summary">内存泄漏监视可能导致应用程序在存储时无响应</string> + <string name="enable_disposed_exceptions_title">报告活动周期外错误</string> + <string name="enable_disposed_exceptions_summary">强制报告在处理完片段或活动周期外发生的无法传递的 Rx 异常</string> + <string name="import_export_title">导入/导出</string> + <string name="import_title">导入</string> + <string name="import_from">导入至</string> + <string name="export_to">导出到</string> + <string name="import_ongoing">正在导入…</string> + <string name="export_ongoing">正在导出…</string> + <string name="import_file_title">导入文件</string> + <string name="previous_export">之前的导出</string> + <string name="subscriptions_import_unsuccessful">无法导入订阅</string> + <string name="subscriptions_export_unsuccessful">无法导出订阅</string> + <string name="import_youtube_instructions">通过下载导出文件来导入 YouTube 订阅: +\n +\n1.移至该网址:%1$s +\n2.当被询问时登入帐号 +\n3.应该开始下载(这是导出文件)</string> + <string name="import_soundcloud_instructions">通过输入 URL 或 ID 来导入 SoundCloud的配置文件: +\n +\n1.在浏览器中启用「桌面模式」(该网站不适用于移动设备) +\n2.移至该网址:%1$s +\n3.当被询问时登入帐号 +\n4.复制您重定向的配置文件到网址。</string> + <string name="import_soundcloud_instructions_hint">您的 ID,soundcloud.com/yourid</string> + <string name="import_network_expensive_warning">请记住,此操作可能造成昂贵的网络花费。 +\n +\n您是否要继续?</string> + <string name="playback_speed_control">播放速度控制</string> + <string name="playback_tempo">速度</string> + <string name="playback_pitch">音量</string> + <string name="unhook_checkbox">取消链接(可能会导致扭曲)</string> + <string name="skip_silence_checkbox">静音时快进</string> + <string name="unsubscribe">退订</string> + <string name="tab_new">新标签</string> + <string name="tab_choose">选择标签</string> + <string name="volume_gesture_control_title">音量手势控制</string> + <string name="volume_gesture_control_summary">用手势控制播放器的音量</string> + <string name="brightness_gesture_control_title">手势控制亮度</string> + <string name="brightness_gesture_control_summary">用手势控制播放器的亮度</string> + <string name="content_language_title">默认的内容语言</string> + <string name="settings_category_updates_title">升级</string> + <string name="file_deleted">文件已删除</string> + <string name="app_update_notification_channel_name">应用升级通知</string> + <string name="app_update_notification_channel_description">新 NewPipe 版本通知</string> + <string name="download_to_sdcard_error_title">外储存不可行</string> + <string name="download_to_sdcard_error_message">无法下载到外部SD卡。重置下载文件夹位置?</string> + <string name="restore_defaults">恢复默认</string> + <string name="restore_defaults_confirmation">您真的要恢复至默认吗?</string> + <string name="selection">选择</string> + <string name="updates_setting_title">升级</string> + <string name="list">列表</string> + <string name="auto">自动</string> + <string name="app_update_notification_content_text">轻按以下载</string> + <string name="missions_header_finished">已完成</string> + <string name="missions_header_pending">有待</string> + <string name="paused">已暂停</string> + <string name="queued">已加入队列</string> + <string name="post_processing">后处理</string> + <string name="enqueue">队列</string> + <string name="permission_denied">系统拒绝该行动</string> + <string name="download_failed">下载失败</string> + <string name="download_finished">下载完成</string> + <string name="download_finished_more">%s已下载完毕</string> + <string name="generate_unique_name">生成独特的名字</string> + <string name="overwrite">覆写</string> + <string name="overwrite_finished_warning">同名的已下载文件已经存在</string> + <string name="download_already_running">同名下载进行中</string> + <string name="show_error">显示错误</string> + <string name="label_code">代码</string> + <string name="error_file_creation">无法创建该文件</string> + <string name="error_permission_denied">系统拒绝此批准</string> + <string name="error_ssl_exception">安全连接失败</string> + <string name="error_unknown_host">找不到服务器</string> + <string name="error_connect_host">连不上服务器</string> + <string name="error_http_no_content">伺服器没回送数据</string> + <string name="error_http_not_found">找不到</string> + <string name="error_postprocessing_failed">后处理失败</string> + <string name="clear_finished_download">清除已完毕的下载</string> + <string name="stop">停</string> + <string name="max_retry_msg">重试上限</string> + <string name="max_retry_desc">取消下载前可以尝试的最多次数</string> + <string name="pause_downloads_on_mobile">换成手机数据时中断</string> + <string name="events">事件</string> + <string name="saved_tabs_invalid_json">使用默认选项卡, 读取保存的选项卡时出错</string> + <string name="subscribers_count_not_available">订阅者计数不可用</string> + <string name="main_page_content_summary">主页上显示的选项卡</string> + <string name="conferences">会议</string> + <string name="updates_setting_description">显示通知, 以便在新版本可用时提示应用更新</string> + <string name="list_view_mode">列表视图模式</string> + <string name="grid">网格</string> + <string name="switch_view">切换视图</string> + <string name="app_update_notification_content_title">NewPipe 更新可用!</string> + <string name="error_path_creation">无法创建目标文件夹</string> + <string name="error_http_unsupported_range">服务器不接受多线程下载, 请使用 @string/msg_threads = 1重试</string> + <string name="pause_downloads_on_mobile_desc">切换至移动数据时有用,尽管一些下载无法被暂停</string> + <string name="show_comments_title">显示评论</string> + <string name="show_comments_summary">禁用停止显示评论</string> + <string name="autoplay_title">自动播放</string> + <plurals name="comments"> + <item quantity="one">评论</item> + <item quantity="other"/> + </plurals> + <string name="no_comments">没有评论</string> + <string name="error_unable_to_load_comments">无法加载评论</string> + <string name="close">关闭</string> + <string name="enable_playback_resume_title">继续播放</string> + <string name="enable_playback_resume_summary">恢复上次播放位置</string> + <string name="enable_playback_state_lists_title">列表中的位置</string> + <string name="enable_playback_state_lists_summary">在列表中显示播放位置指示符</string> + <string name="settings_category_clear_data_title">清除数据</string> + <string name="watch_history_states_deleted">播放位置已删除。</string> + <string name="missing_file">文件被移动或删除</string> + <string name="overwrite_unrelated_warning">已存在具有此名称的文件</string> + <string name="overwrite_failed">无法覆盖该文件</string> + <string name="download_already_pending">同名文件正在等待下载</string> + <string name="error_postprocessing_stopped">处理此文件时 NewPipe 已关闭</string> + <string name="error_insufficient_storage">设备上没有剩余空间</string> + <string name="error_progress_lost">进度丢失,因为文件已被删除</string> + <string name="error_timeout">连接超时</string> + <string name="confirm_prompt">你确定吗?</string> + <string name="enable_queue_limit">限制下载队列</string> + <string name="enable_queue_limit_desc">同时只有一个下载进行</string> + <string name="start_downloads">开始全部下载</string> + <string name="pause_downloads">暂停全部下载</string> + <string name="downloads_storage_ask_title">询问下载位置</string> + <string name="downloads_storage_ask_summary">每次下载将询问保存的位置</string> + <string name="downloads_storage_ask_summary_kitkat">每次下载将询问保存的位置. +\n如果要下载到外部SD卡,请选择外部存储访问框架</string> + <string name="downloads_storage_use_saf_title">使用存储访问框架</string> + <string name="downloads_storage_use_saf_summary">存储访问框架(SAF)允许下载文件到外部SD卡。 +\n注:一些设备不兼容SAF</string> + <string name="clear_playback_states_title">删除回放位置</string> + <string name="clear_playback_states_summary">删除所有回放位置</string> + <string name="delete_playback_states_alert">删除所有的回放位置吗?</string> + <string name="download_choose_new_path">更改要生效的下载文件夹</string> +</resources> \ 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 548358473..0f18e0e1c 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -102,8 +102,8 @@ <string name="view">Přehrát</string> <string name="add">Nová mise</string> <string name="finish">OK</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Výzva reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Výzva reCAPTCHA</string> <string name="recaptcha_request_toast">Požadována výzva reCAPTCHA</string> <string name="black_theme_title">Černé</string> <string name="checksum">Kontrolní součet</string> diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 5e44aab61..ff2fea8c9 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -249,8 +249,8 @@ <string name="no_available_dir">Vælg venligst en tilgængelig downloadmappe</string> <string name="msg_popup_permission">Denne tilladelse er nødvendig for at kunne åbne i pop op-tilstand</string> <string name="one_item_deleted">1 element slettet.</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA-udfordring</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA-udfordring</string> <string name="recaptcha_request_toast">Der blev anmodet om en reCAPTCHA-udfordring</string> <string name="settings_category_downloads_title">Download</string> <string name="settings_file_charset_title">Tilladte tegn i filnavne</string> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1fab90386..a8ae69c61 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -110,9 +110,9 @@ <string name="msg_running">NewPipe lädt herunter</string> <string name="msg_running_detail">Für Details antippen</string> <string name="msg_url_malform">Ungültige URL oder Internet nicht verfügbar</string> - <string name="reCaptchaActivity">reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> <string name="black_theme_title">Schwarz</string> - <string name="reCaptcha_title">reCAPTCHA-Aufgabe</string> + <string name="title_activity_recaptcha">reCAPTCHA-Aufgabe</string> <string name="recaptcha_request_toast">reCAPTCHA-Aufgabe angefordert</string> <string name="later">Später</string> <string name="yes">Ja</string> diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 3d2397a0c..915e1902d 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -251,8 +251,8 @@ <string name="msg_popup_permission">Αυτή η άδεια είναι απαραίτητη για \nτο άνοιγμα αναδυόμενων παραθύρων</string> <string name="one_item_deleted">1 αντικείμενο διαγράφηκε.</string> - <string name="reCaptchaActivity">Αυτόματο τεστ</string> - <string name="reCaptcha_title">Πρόκληση reCAPTCHA</string> + <string name="recaptcha">Αυτόματο τεστ</string> + <string name="title_activity_recaptcha">Πρόκληση reCAPTCHA</string> <string name="recaptcha_request_toast">Ζητήθηκε πρόκληση reCAPTCHA</string> <string name="settings_file_charset_title">Επιτρεπόμενοι χαρακτήρες σε ονόματα αρχείων</string> <string name="settings_file_replacement_character_summary">Οι μη έγκυροι χαρακτήρες αντικαθίστανται με αυτήν την τιμή</string> diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index fe63caf1b..6370c5e0e 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -109,8 +109,8 @@ <string name="error_report_title">Erarosignalo</string> <string name="could_not_load_image">Ne povis ŝarĝi bildon</string> <string name="app_ui_crash">Apo kraŝis</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA defio</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA defio</string> <string name="recaptcha_request_toast">reCAPTCHA defio petita</string> <string name="all">Ĉiuj</string> <string name="channel">Kanalo</string> diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5b3265cd7..89723fbcf 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -115,11 +115,11 @@ <string name="short_thousand">k</string> <string name="short_million">M</string> <string name="short_billion">MM</string> - <string name="reCaptchaActivity">reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> <string name="open_in_popup_mode">Abrir en modo emergente</string> <string name="msg_popup_permission">Se necesita este permiso \npara abrir en modo emergente</string> - <string name="reCaptcha_title">Reto reCAPTCHA</string> + <string name="title_activity_recaptcha">Reto reCAPTCHA</string> <string name="recaptcha_request_toast">Reto reCAPTCHA requerido</string> <string name="popup_mode_share_menu_title">Modo emergente de NewPipe</string> <string name="popup_playing_toast">Reproduciendo en modo emergente</string> diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 99dc6cc80..79442f421 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -238,7 +238,7 @@ <string name="msg_popup_permission">Need õigused on vajalikud \nhüpikakna avamiseks</string> <string name="one_item_deleted">Kustutati 1 element.</string> - <string name="reCaptchaActivity">"reCAPTCHA "</string> + <string name="recaptcha">"reCAPTCHA "</string> <string name="settings_category_downloads_title">Laadi alla</string> <string name="settings_file_charset_title">Lubatud tähemärgid failinimedes</string> <string name="settings_file_replacement_character_summary">Vigased tähemärgid asendatakse selle väärtusega</string> @@ -370,7 +370,7 @@ <string name="tracks">Lood</string> <string name="users">Kasutajad</string> <string name="switch_to_main">Lülitu peamisele</string> - <string name="reCaptcha_title">reCAPTCHA nõue</string> + <string name="title_activity_recaptcha">reCAPTCHA nõue</string> <string name="recaptcha_request_toast">reCAPTCHA nõude taotlus</string> <string name="copyright" formatted="true">© %1$s %2$s %3$s alla</string> <string name="app_description">Vaba kergekaaluline Androidi voogesitus.</string> diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 7563e1be5..96745ee23 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -139,8 +139,8 @@ <string name="no_available_dir">Ezarri deskargetarako karpeta bat ezarpenetan geroago</string> <string name="msg_popup_permission">Baimen hau beharrezkoa da \nlaster-leiho moduan irekitzeko</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA erronka</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA erronka</string> <string name="recaptcha_request_toast">reCAPTCHA erronka eskatu da</string> <string name="title_activity_about">NewPipe aplikazioari buruz</string> <string name="action_settings">Ezarpenak</string> diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index b2a04e14c..790c47669 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -296,7 +296,7 @@ <string name="use_inexact_seek_title">زمان فعلی پخش کننده را به صورت تقریبی و سریع جلو ببر</string> <string name="use_inexact_seek_summary">این گزینه باعث می شود هنگام جلو/عقب کردن زمان تصویر، به جای زمان دقیق انتخاب شده، به زمان غیر دقیق و نزدیک به مکان انتخاب شده برود که این کار سریع تر انجام می شود</string> <string name="app_ui_crash">کاره یا رابط کاربری با خطا مواجه شد</string> - <string name="reCaptchaActivity">ریکپچا</string> + <string name="recaptcha">ریکپچا</string> <string name="settings_category_downloads_title">بارگیری</string> <string name="toggle_orientation">تغییر جهت</string> <string name="switch_to_background">تغییر وضعیت به پسزمینه</string> @@ -361,7 +361,7 @@ <string name="undo">بازگردانی</string> <string name="background_player_append">در صف پخش کننده پسزمینه قرار گرفت</string> <string name="info_labels">چه:\\nدرخواست:\\nزبان درخواست:\\nخدمت:\\nزمان GMT:\\nنگارش:\\nنگارش س.ع:\\nبازه آیپی:</string> - <string name="reCaptcha_title">چالش ریکپچا</string> + <string name="title_activity_recaptcha">چالش ریکپچا</string> <string name="recaptcha_request_toast">نیاز به چالش ریکپچا است</string> <string name="msg_popup_permission">این مجوز مورد نیاز است \nتا بتوان به حالت تصویر در تصویر رفت</string> diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 1e91fa55a..edf10c6f0 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -173,8 +173,8 @@ <string name="msg_copied">Kopioitu leikepöydälle</string> <string name="no_available_dir">Valitse saatavilla oleva latauskansio</string> <string name="msg_popup_permission">Tämä käyttöoikeus tarvitaan ponnahdusikkunan käytölle</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA Haaste</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA Haaste</string> <string name="recaptcha_request_toast">reCAPTCHA Haaste pyydetty</string> <string name="settings_category_downloads_title">Lataus</string> <string name="settings_file_charset_title">Sallitut merkit tiedostonimissä</string> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 7695fe31c..da0cc5f83 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -105,11 +105,11 @@ <string name="no_available_dir">Veuillez définir ultérieurement un dossier de téléchargement dans les paramètres</string> <string name="could_not_load_image">Impossible de charger l’image</string> <string name="app_ui_crash">L’application a planté</string> - <string name="reCaptchaActivity">reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> <string name="black_theme_title">Noir</string> <string name="all">Tout</string> <string name="channel">Chaîne</string> - <string name="reCaptcha_title">Défi reCAPTCHA</string> + <string name="title_activity_recaptcha">Défi reCAPTCHA</string> <string name="recaptcha_request_toast">Défi reCAPTCHA demandé</string> <string name="open_in_popup_mode">Ouvrir en mode flottant</string> <string name="popup_mode_share_menu_title">Mode flottant NewPipe</string> diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 899a9be10..6427e1378 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -266,8 +266,8 @@ \npara abrir o vídeo no modo «popup»</string> <string name="one_item_deleted">1 elemento foi eliminado.</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Desafío reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Desafío reCAPTCHA</string> <string name="recaptcha_request_toast">Desafío reCAPTCHA solicitado</string> <string name="settings_category_downloads_title">Descarregar</string> diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 7a1338f60..35b86ec2d 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -192,8 +192,8 @@ <string name="no_available_dir">נא לציין תיקיית הורדה בהגדרות בהמשך</string> <string name="msg_popup_permission">הרשאה זו נדרשת לטובת \nפתיחה בחלון צף</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">אתגר reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">אתגר reCAPTCHA</string> <string name="recaptcha_request_toast">התקבלה בקשה לאתגר reCAPTCHA</string> <string name="settings_category_downloads_title">הורדה</string> <string name="settings_file_charset_title">רשימת תווים אפשרית בשמות קבצים</string> diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 82b2db1b5..a7746330a 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -206,8 +206,8 @@ <string name="msg_copied">क्लिपबोर्ड पर कॉपी हो गया है</string> <string name="no_available_dir">कृपया बाद में सेटिंग्स में डाउनलोड स्थान चुने</string> <string name="msg_popup_permission">पॉपअप के तरीके में खोलने के लिए अनुमति की जरुरत है</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA चुनौती</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA चुनौती</string> <string name="recaptcha_request_toast">reCAPTCHA चुनौती का अनुरोध किया</string> <string name="settings_category_downloads_title">डाउनलोड</string> <string name="settings_file_charset_title">फाइल के नाम के लिए आवश्यक characters(जैसे - १२३, abc) की अनुमति है</string> diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index a981dcf5e..beb2bdd02 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -153,8 +153,8 @@ <string name="no_available_dir">Molimo odaberite dostupnu mapu za preuzimanje</string> <string name="msg_popup_permission">Ova dozvola je potrebna za \notvaranje skočnog prozora</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA zadatak</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA zadatak</string> <string name="recaptcha_request_toast">Traži se reCAPTCHA zadatak</string> <string name="settings_category_downloads_title">Preuzimanja</string> <string name="settings_file_charset_title">Dozvoljeni znakovi u nazivima datoteka</string> diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 3587ad136..1fda2a515 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -232,8 +232,8 @@ <string name="rename">Átnevezés</string> <string name="msg_popup_permission">Ez az engedély szükséges a felugró ablakban történő megnyitáshoz</string> <string name="one_item_deleted">1 elem törölve.</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA rejtvény</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA rejtvény</string> <string name="recaptcha_request_toast">reCAPTCHA rejtvény igényelve</string> <string name="settings_category_downloads_title">Letöltés</string> <string name="settings_file_charset_title">Fájlnevekben engedélyezett karakterek</string> diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index dd8413be8..36929856e 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -105,8 +105,8 @@ <string name="info_labels">Apa:\\nPermintaan:\\nBahasa Konten:\\nLayanan:\\nWaktu GMT:\\nPaket:\\nVersi:\\nVersi OS:</string> <string name="user_report">Laporan pengguna</string> <string name="msg_threads">Thread</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Tantangan reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Tantangan reCAPTCHA</string> <string name="recaptcha_request_toast">Meminta kode reCAPTCHA</string> <string name="black_theme_title">Hitam</string> <string name="all">Semua</string> diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 9d9241045..5acc513e7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -106,8 +106,8 @@ <string name="could_not_load_image">Impossibile caricare l\'immagine</string> <string name="app_ui_crash">L\'app/UI si è interrotta</string> <string name="info_labels">Cosa:\\nRichiesta:\\nLingua contenuto:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO:</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Risoluzione reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Risoluzione reCAPTCHA</string> <string name="black_theme_title">Nero</string> <string name="all">Tutto</string> <string name="channel">Canale</string> diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index fdab646b2..cf63e33e1 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -106,8 +106,8 @@ <string name="could_not_load_image">画像を読み込みできません</string> <string name="app_ui_crash">アプリ/UI がクラッシュしました</string> <string name="info_labels">何:\\\\n提案:\\\\nコンテンツ言語:\\\\nサービス:\\\\nGMT 時間:\\\\nパッケージ:\\\\nバージョン:\\\\nOSバージョン:</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA の要求</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA の要求</string> <string name="recaptcha_request_toast">reCAPTCHA を要求しました</string> <string name="black_theme_title">ブラック</string> <string name="all">すべて</string> diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index e2010c50f..54437a375 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -180,7 +180,7 @@ <string name="no_available_dir">다운로드 할 폴더를 설정에서 지정하세요</string> <string name="msg_popup_permission">이 권한은 팝업 모드에서 \n열기 위해 필요합니다</string> - <string name="reCaptchaActivity">reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> <string name="recaptcha_request_toast">reCAPTCHA 확인 요청됨</string> <string name="settings_category_downloads_title">다운로드</string> <string name="settings_file_charset_title">파일명에 허용되는 문자</string> @@ -274,7 +274,7 @@ <string name="delete_all">모두 삭제하기</string> <string name="dismiss">취소</string> <string name="rename">이름 바꾸기</string> - <string name="reCaptcha_title">reCAPTCHA 확인</string> + <string name="title_activity_recaptcha">reCAPTCHA 확인</string> <string name="delete_stream_history_prompt">이 항목을 시청 기록에서 삭제하시겠습니까?</string> <string name="delete_all_history_prompt">모든 항목을 시청 기록에서 삭제하시겠습니까?</string> <string name="title_last_played">마지막으로 재생</string> diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index 9a061bab7..cd73601fb 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -215,8 +215,8 @@ <string name="no_available_dir">تکایە فۆڵدەرێک بۆ شوێنی داگرتن دیاریبکە لە ڕێکخستنەکان</string> <string name="msg_popup_permission">ئەم دەسەڵاتە پێویستە بۆ \nکردنەوەی پەنجەرەی بچووک</string> - <string name="reCaptchaActivity" translatable="false">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA داواکاری</string> + <string name="recaptcha" translatable="false">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA داواکاری</string> <string name="recaptcha_request_toast">reCAPTCHA داواکراوە</string> <string name="settings_category_downloads_title">داگرتن</string> <string name="charset_letters_and_digits">پیت و ژمارەکان</string> diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 43fe9d862..f84a3c23c 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -153,8 +153,8 @@ <string name="no_available_dir">Prašome pasirinkti galimą atsisiuntimų aplankalą</string> <string name="msg_popup_permission">Šis leidimas nereikalingas, kad atidarytiviššokančio lango rėžime</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA iššūkis</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA iššūkis</string> <string name="recaptcha_request_toast">reCAPTCHA prašomas iššūkis</string> <string name="subscribe_button_title">Prenumeruoti</string> diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index c9388a78a..96b4c8819 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -230,8 +230,8 @@ <string name="no_available_dir">Одберете достапна локација за превземања</string> <string name="msg_popup_permission">Оваа привилегија е потребна за \nотворање во подпрозорче</string> - <string name="reCaptchaActivity">„reCAPTCHA“</string> - <string name="reCaptcha_title">reCAPTCHA Предизвик</string> + <string name="recaptcha">„reCAPTCHA“</string> + <string name="title_activity_recaptcha">reCAPTCHA Предизвик</string> <string name="recaptcha_request_toast">Потребен е reCAPTCHA предизвик</string> <string name="settings_category_downloads_title">Превземања</string> <string name="settings_file_charset_title">Дозволени знаци во имињата на датотеките</string> diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 354e7b7de..f53450e13 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -258,8 +258,8 @@ <string name="msg_popup_permission">Kebenaran ini diperlukan untuk \nbuka dalam mod popup</string> <string name="one_item_deleted">1 item dipadamkan.</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Cabaran reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Cabaran reCAPTCHA</string> <string name="recaptcha_request_toast">Meminta kod reCAPTCHA</string> <string name="settings_category_downloads_title">Muat turun</string> <string name="settings_file_charset_title">Karakter yang dibenarkan dalam nama fail</string> diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 61e4b4574..fa39ae466 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -106,8 +106,8 @@ <string name="add">Nytt mål</string> <string name="msg_url_malform">Feilaktig nettadresse eller manglende internettilknytning</string> <string name="no_available_dir">Definer en nedlastingsmappe senere i innstillingene</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA-oppgave</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA-oppgave</string> <string name="open_in_popup_mode">Åpne i oppsprettsmodus</string> <string name="popup_mode_share_menu_title">NewPipe oppsprettsmodus</string> <string name="default_popup_resolution_title">Forvalgt oppsprettsoppløsning</string> diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 198979def..de96152ec 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -230,8 +230,8 @@ <string name="msg_copied">Gekopieerd naar klembord</string> <string name="no_available_dir">Kies een beschikbare downloadmap</string> <string name="msg_popup_permission">Deze toestemming is vereist voor te openen in pop-upmodus</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA-uitdaging</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA-uitdaging</string> <string name="recaptcha_request_toast">reCAPTCHA-uitdaging gevraagd</string> <string name="settings_category_downloads_title">Download</string> <string name="settings_file_charset_title">Toegelaten tekens in bestandsnamen</string> diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 9ecc936eb..1cd1391a0 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -107,8 +107,8 @@ <string name="msg_copied">Gekopieerd naar klembord</string> <string name="no_available_dir">Kies een beschikbare downloadmap</string> <string name="black_theme_title">Zwart</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA-uitdaging</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA-uitdaging</string> <string name="recaptcha_request_toast">reCAPTCHA-uitdaging gevraagd</string> <string name="open_in_popup_mode">Openen in pop-upmodus</string> <string name="all">Alles</string> diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 0e579720a..7e39321e0 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -237,8 +237,8 @@ <string name="no_available_dir">ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਵਿਚੋਂ ਇੱਕ ਡਾਉਨਲੋਡ ਫੋਲਡਰ ਨੂੰ ਚੁਣੋ</string> <string name="msg_popup_permission">ਪੌਪ-ਅਪ ਮੋਡ ਵਿੱਚ ਖੋਲ੍ਹਣ ਵਾਸਤੇ ਇਸ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ</string> <string name="one_item_deleted">1 ਆਈਟਮ ਮਿਟਾਈ ਗਈ.</string> - <string name="reCaptchaActivity">ReCaptcha</string> - <string name="reCaptcha_title">ReCaptcha ਚੁਣੌਤੀ</string> + <string name="recaptcha">ReCaptcha</string> + <string name="title_activity_recaptcha">ReCaptcha ਚੁਣੌਤੀ</string> <string name="recaptcha_request_toast">ReCaptcha ਚੁਣੌਤੀ ਲਈ ਬੇਨਤੀ</string> <string name="settings_category_downloads_title">ਡਾਊਨਲੋਡ</string> <string name="settings_file_charset_title">ਫਾਈਲ ਨਾਮ ਵਿੱਚ ਪ੍ਰਵਾਨਿਤ ਅੱਖਰ</string> diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 4d2b38b5f..f1abf0f87 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -106,8 +106,8 @@ <string name="app_ui_crash">Awaria aplikacji/interfejsu</string> <string name="use_tor_summary">(Eksperymentalne) Wymuś pobieranie przez Tora w celu zwiększenia prywatności (strumieniowe wideo nie jest jeszcze obsługiwane).</string> <string name="start">Start</string> - <string name="reCaptchaActivity">CAPTCHA</string> - <string name="reCaptcha_title">Wyzwanie reCAPTCHA</string> + <string name="recaptcha">CAPTCHA</string> + <string name="title_activity_recaptcha">Wyzwanie reCAPTCHA</string> <string name="recaptcha_request_toast">Wymagane wyzwanie dotyczące reCAPTCHA</string> <string name="use_external_video_player_summary">Usuwa dźwięk w niektórych rozdzielczościach</string> <string name="controls_background_title">Tło</string> diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 45fe51010..04c4e3960 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -50,8 +50,8 @@ <string name="next_video_title">Próximo</string> <string name="open_in_browser">Abrir no navegador</string> <string name="pause">Pausar</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Desafio reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Desafio reCAPTCHA</string> <string name="recaptcha_request_toast">Desafio reCAPTCHA solicitado</string> <string name="report_error">Reportar um erro</string> <string name="retry">Tentar novamente</string> diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 7d3fb68e3..3c4977a06 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -117,8 +117,8 @@ <string name="short_billion">B</string> <string name="msg_popup_permission">Esta permissão é necessária \npara o modo de janela</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Desafio reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Desafio reCAPTCHA</string> <string name="recaptcha_request_toast">Desafio reCAPTCHA solicitado</string> <string name="popup_mode_share_menu_title">Modo de janela autónoma do NewPipe</string> <string name="popup_playing_toast">Reproduzir no modo de janela autónoma</string> diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 358de0ca8..e304e862d 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -106,8 +106,8 @@ <string name="open_in_popup_mode">Deschide in modul popup</string> <string name="msg_popup_permission">Aceasta permisiune este necesara pentru a deschide în mod pop-up</string> - <string name="reCaptchaActivity">ReCAPTCHA</string> - <string name="reCaptcha_title">Provocare reCAPTCHA</string> + <string name="recaptcha">ReCAPTCHA</string> + <string name="title_activity_recaptcha">Provocare reCAPTCHA</string> <string name="recaptcha_request_toast">reCAPTCHA nouă cerută</string> <string name="popup_mode_share_menu_title">NewPipe mod pop-up</string> <string name="default_popup_resolution_title">"Rezoluție pop-up inițială "</string> diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 63d0e7699..807351a52 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -124,7 +124,7 @@ <string name="info_labels">Что:\\nЗапрос:\\nЯзык контента:\\nСервис:\\nВремя по Гринвичу:\\nПакет:\\nВерсия:\\nВерсия ОС:</string> <string name="msg_popup_permission">Это разрешение нужно для \nвоспроизведения в окне</string> - <string name="reCaptchaActivity">reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> <string name="open_in_popup_mode">Открыть во всплывающем окне</string> <string name="show_search_suggestions_summary">Предлагать варианты при поиске</string> <string name="later">Позже</string> @@ -138,7 +138,7 @@ <string name="popup_remember_size_pos_summary">Помнить последние размер и позицию всплывающего окна</string> <string name="show_search_suggestions_title">Поисковые предложения</string> <string name="best_resolution">Лучшее разрешение</string> - <string name="reCaptcha_title">Запрос reCAPTCHA</string> + <string name="title_activity_recaptcha">Запрос reCAPTCHA</string> <string name="recaptcha_request_toast">Запрошен ввод reCAPTCHA</string> <string name="show_higher_resolutions_title">Высокие разрешения</string> <string name="popup_mode_share_menu_title">NewPipe во всплывающем окне</string> diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 6624f7a3b..1652aefa1 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -106,8 +106,8 @@ <string name="could_not_load_image">Nemožno načítať obrázok</string> <string name="app_ui_crash">Aplikácia/UP zlyhalo</string> <string name="info_labels">Čo:\\nPožiadavka:\\nJazyk obsahu:\\nSlužba:\\nČas v GMT:\\nBalík:\\nVerzia:\\nVerzia OS:</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Výzva reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Výzva reCAPTCHA</string> <string name="black_theme_title">Čierna</string> <string name="all">Všetko</string> <string name="channel">Kanál</string> diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index a67b48a62..f318ca77e 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -124,8 +124,8 @@ <string name="could_not_load_image">Slike ni mogoče naložiti</string> <string name="app_ui_crash">Program se je sesul!</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">Izziv reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">Izziv reCAPTCHA</string> <string name="recaptcha_request_toast">Zahteva izziva reCAPTCHA</string> <string name="info_labels">Predmet:\\nZahteva:\\nJezik vsebine:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS:</string> diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index d5f031ad8..a8abb98e9 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -107,8 +107,8 @@ <string name="could_not_load_image">Не могох да учитам слику</string> <string name="app_ui_crash">Апликација/УИ је краховала</string> <string name="info_labels">Шта:\\nЗахтев:\\nЈезик садржаја:\\nУслуга:\\nГМТ време:\\nПакет:\\nИздање:\\nИздање ОС-а:\\nГлоб. ИП распон:</string> - <string name="reCaptchaActivity">Стопка</string> - <string name="reCaptcha_title">reCAPTCHA стопка</string> + <string name="recaptcha">Стопка</string> + <string name="title_activity_recaptcha">reCAPTCHA стопка</string> <string name="recaptcha_request_toast">Решите reCAPTCHA стопку</string> <string name="black_theme_title">Црна</string> <string name="all">Сви</string> diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 89d51493e..e130ae1de 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -186,8 +186,8 @@ <string name="no_available_dir">Ange en hämtningsmapp senare i inställningar</string> <string name="msg_popup_permission">Denna tillåtelse behövs för att \nöppna i popup-läge</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA utmaning</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA utmaning</string> <string name="recaptcha_request_toast">reCAPTCHA utmaning begärd</string> <string name="settings_category_downloads_title">Nedladdning</string> <string name="settings_file_charset_title">Tillåtna tecken i filnamn</string> diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c6603382d..ee070eb81 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -124,8 +124,8 @@ <string name="short_billion">B</string> <string name="msg_popup_permission">Bu izin, açılır pencere modunda \naçmak için gereklidir</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA formu</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA formu</string> <string name="recaptcha_request_toast">reCAPTCHA formu istendi</string> <string name="controls_background_title">Arka plan</string> <string name="controls_popup_title">Açılır pencere</string> diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 6aea1ad79..ef5dbee53 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -184,7 +184,7 @@ <string name="msg_url_malform">Помилковий URL або немає доступу в Інтернет</string> <string name="msg_popup_permission">Цей дозвіл потрібен для перегляду \nу віконному режимі</string> - <string name="reCaptchaActivity">reCAPTCHA</string> + <string name="recaptcha">reCAPTCHA</string> <string name="settings_category_downloads_title">Завантаження</string> <string name="settings_file_charset_title">Допустимі символи у іменах файлів</string> <string name="settings_file_replacement_character_summary">Недопустимі символи замінити на цей</string> @@ -256,7 +256,7 @@ <item quantity="many">%s переглядів</item> </plurals> <string name="add">Нове завдання</string> - <string name="reCaptcha_title">Перевірка reCAPTCHA</string> + <string name="title_activity_recaptcha">Перевірка reCAPTCHA</string> <string name="recaptcha_request_toast">Запит на перевірку reCAPTCHA</string> <string name="copyright" formatted="true">© %1$s, %2$s під %3$s</string> <string name="tab_contributors">Учасники</string> diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index e0149f2d8..627def4d3 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -228,9 +228,7 @@ <string name="msg_wait">براۓ مہربانی انتظار کريں…</string> <string name="msg_copied">کلپ بورڈ میں نقل ہوا</string> <string name="no_available_dir">براہ کرم بعد میں ترتیبات میں ڈاؤن لوڈ فولڈر کی وضاحت رکھیں</string> - <string name="msg_popup_permission">پوپ اپ موڈ میں کھولنے کیلئے/nاس اجازت کی ضرورت ہے</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA چیلنج</string> + <string name="msg_popup_permission">پوپ اپ موڈ میں کھولنے کیلئے اس اجازت کی ضرورت ہے</string> <string name="recaptcha_request_toast">reCAPTCHA چیلینج کی درخواست کی گئی</string> <string name="settings_category_downloads_title">ڈاؤن لوڈ</string> <string name="settings_file_charset_title">فائل کے ناموں میں ان حروف کی اجازت ہے</string> @@ -537,4 +535,4 @@ <string name="clear_download_history">ڈاؤن لوڈ کی سرگزشت صاف کریں</string> <string name="delete_downloaded_files">ڈاؤن لوڈ شدہ فائلیں حذف کریں</string> <string name="deleted_downloads">%1$s ڈاؤن لوڈز کو حذف کیا گیا</string> -</resources> \ No newline at end of file +</resources> diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index ab0983e7a..bfde056b0 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -135,8 +135,8 @@ <string name="no_available_dir">Chọn một thư mục tải về có sẵn trong cài đặt</string> <string name="msg_popup_permission">Cần quyền này để \nmở trong chế độ popup</string> - <string name="reCaptchaActivity">ReCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA</string> + <string name="recaptcha">ReCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA</string> <string name="recaptcha_request_toast">Yêu cầu reCAPTCHA</string> <string name="title_activity_about">Giới thiệu về NewPipe</string> <string name="action_settings">Cài đặt</string> diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d0405b57d..0282e6c92 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1,540 +1,457 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version='1.0' encoding='UTF-8'?> <resources> - <string name="main_bg_subtitle">点击搜索按钮即可开始使用</string> - <string name="view_count_text">%1$s 次观看</string> - <string name="upload_date_text">发布于 %1$s</string> - <string name="open_in_browser">在浏览器中打开</string> - <string name="open_in_popup_mode">在悬浮窗模式下打开</string> - <string name="did_you_mean">您是不是要找:%1$s?</string> - <string name="no_player_found_toast">找不到串流播放器 (您可以安装 VLC 进行播放)。</string> - <string name="controls_download_desc">下载串流文件</string> + <string name="view_count_text">点播%1$s次</string> + <string name="upload_date_text">%1$s发布</string> + <string name="no_player_found">找不到播放器。您是否要安装 VLC?</string> <string name="install">安装</string> <string name="cancel">取消</string> + <string name="open_in_browser">用浏览器打开</string> <string name="share">分享</string> <string name="download">下载</string> <string name="search">搜索</string> <string name="settings">设置</string> - <string name="share_dialog_title">分享给...</string> + <string name="did_you_mean">您是不是要找: %1$s ?</string> + <string name="share_dialog_title">分享视频</string> <string name="choose_browser">选择浏览器</string> + <string name="screen_rotation">旋转</string> + <string name="use_external_video_player_title">使用外置视频播放器</string> + <string name="use_external_audio_player_title">使用外置音频播放器</string> <string name="download_path_title">视频下载路径</string> - <string name="download_path_summary">已下载的视频存储在这里</string> - <string name="download_path_dialog_title">请选择下载视频的保存位置</string> - <string name="download_path_audio_summary">已下载的音频存储在这里</string> - <string name="download_path_audio_dialog_title">选择下载音频的储存位置</string> - <string name="autoplay_by_calling_app_title">自动播放</string> - <string name="play_with_kodi_title">使用Kodi播放</string> + <string name="download_path_summary">下载视频的存储路径</string> + <string name="download_path_dialog_title">输入视频存储路径</string> + <string name="default_resolution_title">默认分辨率</string> + <string name="play_with_kodi_title">用Kodi播放</string> + <string name="kore_not_found">找不到Kore,您要安装Kore吗?</string> + <string name="show_play_with_kodi_title">显示“用Kodi播放”的选项</string> + <string name="show_play_with_kodi_summary">显示 Kodi 媒体中心播放视频的选项</string> + <string name="play_audio">音频</string> + <string name="default_audio_format_title">默认音频格式</string> <string name="theme_title">主题</string> - <string name="light_theme_title">浅色</string> - <string name="dark_theme_title">暗黑</string> - <string name="black_theme_title">黑色</string> + <string name="dark_theme_title">灰暗</string> + <string name="light_theme_title">明亮</string> + <string name="download_dialog_title">下载</string> - <string name="next_video_title">下一个</string> - <string name="url_not_supported_toast">不支持的 URL</string> + <string name="next_video_title">即将播放</string> + <string name="show_next_and_similar_title">显示下一部和相似的视频</string> + <string name="url_not_supported_toast">不支援此网址</string> + <string name="content_language_title">默认内容语言</string> + <string name="settings_category_video_audio_title">视频和音频</string> <string name="settings_category_appearance_title">外观</string> <string name="settings_category_other_title">其他</string> - <string name="all">全部</string> - <string name="channel">频道</string> - <string name="yes">是</string> - <string name="later">稍后</string> + <string name="background_player_playing_toast">后台播放</string> + <string name="play_btn_text">播放</string> <string name="network_error">网络错误</string> - <plurals name="videos"> - <item quantity="one">%s 个视频</item> - <item quantity="other">%s 个视频</item> - </plurals> - <string name="disabled">禁用</string> - <string name="controls_background_title">后台播放</string> - <string name="filter">过滤器</string> - <string name="refresh">刷新</string> - <string name="show_search_suggestions_title">搜索建议</string> - <string name="subscribe_button_title">订阅</string> - <string name="subscribed_button_title">已订阅</string> - <string name="enable_watch_history_title">观看历史</string> - <string name="settings_category_player_title">播放器</string> - <string name="settings_category_history_title">历史记录与缓存</string> - <string name="playlist">播放列表</string> - <string name="undo">撤销</string> - <string name="play_all">全部播放</string> - <string name="always">总是</string> - <string name="just_once">仅一次</string> - <string name="controls_add_to_playlist_title">添加至</string> - <string name="file">文件</string> - <string name="download_thumbnail_title">加载缩略图</string> - <string name="clear_views_history_title">清除观看记录</string> - <string name="minimize_on_exit_none_description">无</string> - <string name="minimize_on_exit_background_description">最小化后台播放器</string> - <string name="minimize_on_exit_popup_description">最小化悬浮窗播放器</string> - <string name="channels">频道</string> - <string name="playlists">播放列表</string> - <string name="unsubscribe">取消订阅</string> - <string name="tab_new">新标签</string> - <string name="settings_category_updates_title">更新</string> - <string name="file_deleted">文件已删除</string> - <string name="subscribers_count_not_available">无法得知订阅人数</string> - <string name="updates_setting_description">每推出新版本时,弹出应用升级通知</string> - <string name="grid">网格</string> - <string name="app_update_notification_content_title">新版 NewPipe 已可升级!</string> - <string name="error_http_unsupported_range">服务器不接受 接收 multi-threaded 下载, 以 @string/msg_threads = 1 重试</string> - <string name="autoplay_title">自动播放</string> - <string name="settings_category_clear_data_title">清除数据</string> - <string name="watch_history_deleted">观看记录已删除</string> + + <string name="list_thumbnail_view_description">视频预览缩略图</string> + <string name="detail_thumbnail_view_description">视频预览缩略图</string> + <string name="detail_uploader_thumbnail_view_description">上传者的头像缩图</string> <string name="detail_likes_img_view_description">喜欢</string> <string name="detail_dislikes_img_view_description">不喜欢</string> - <string name="use_tor_title">使用Tor</string> - <string name="use_tor_summary">(实验性)通过 Tor 强制下载流量以增强隐私(暂不支持串流视频)。</string> + <string name="use_tor_title">使用 Tor</string> + <string name="use_tor_summary">(实验性)强制下载流量使用 Tor 加强隐私(暂不支援流媒体视频)。</string> + <string name="download_path_audio_title">音频存储路径</string> + <string name="download_path_audio_summary">下载音频的存储路径</string> + <string name="download_path_audio_dialog_title">输入音频文件存储路径</string> + + <string name="err_dir_create">未能建立下载路径 “%1$s”</string> + <string name="info_dir_created">已创建下载目录 “%1$s”</string> + <string name="content">内容</string> + <string name="show_age_restricted_content_title">显示年龄限制内容</string> + <string name="video_is_age_restricted">视频有年龄限制。请先在设置中启用\"显示年龄限制内容\"。</string> + <string name="general_error">错误</string> + <string name="could_not_load_thumbnails">无法加载所有缩略图</string> + <string name="youtube_signature_decryption_error">无法解密视频网址签名</string> + <string name="parsing_error">无法解析网站</string> + <string name="light_parsing_error">无法完全解析网站</string> + <string name="content_not_available">内容不可用</string> + <string name="could_not_setup_download_menu">无法设置下载菜单</string> + <string name="live_streams_not_supported">这是一个在线流媒体,尚不支持。</string> + <string name="could_not_get_stream">无法获取任何流媒体</string> + <string name="sorry_string">抱歉,这本不应该发生。</string> + <string name="error_report_button_text">使用邮件报告错误</string> + <string name="error_snackbar_message">抱歉,发生了一些错误。</string> + <string name="error_snackbar_action">报告</string> + <string name="what_device_headline">信息:</string> + <string name="what_happened_headline">发生什么:</string> + <string name="your_comment">您的注释(英文):</string> + <string name="error_details_headline">详细信息:</string> + + <string name="report_error">报告错误</string> <string name="user_report">用户报告</string> - <string name="err_dir_create">无法创建下载目录\"%1$s\"</string> - <string name="info_dir_created">已成功创建下载目录「%1$s」</string> + <string name="video">视频</string> <string name="audio">音频</string> <string name="retry">重试</string> - <string name="storage_permission_denied">存储访问权限已被拒绝</string> - <plurals name="views"> - <item quantity="one">%s 次观看</item> - <item quantity="other">%s 次观看</item> - </plurals> - <string name="short_thousand">千</string> - <string name="short_million">百万</string> + <string name="storage_permission_denied">无权访问存储空间</string> + <string name="autoplay_by_calling_app_title">自动播放</string> + <string name="autoplay_by_calling_app_summary">当NewPipe被其他应用调用时,自动播放视频</string> + <string name="duration_live">直播</string> + + <string name="main_bg_subtitle">点击搜索开始NewPipe</string> <string name="start">开始</string> <string name="pause">暂停</string> <string name="view">播放</string> <string name="delete">删除</string> - <string name="checksum">校验</string> - <string name="add">新任务</string> - <string name="finish">OK</string> + <string name="checksum">校验和</string> + + <string name="finish">确定</string> + <string name="msg_name">文件名</string> - <string name="msg_threads">线程数</string> + <string name="msg_threads">线程</string> <string name="msg_error">错误</string> - <string name="msg_server_unsupported">不支持的服务器</string> - <string name="msg_exists">文件已存在</string> - <string name="msg_running_detail">点击了解详情</string> + <string name="msg_server_unsupported">服务器不支持</string> + <string name="msg_exists">文件已经存在</string> + <string name="msg_url_malform">网址不正确或网络不可用</string> + <string name="msg_running">NewPipe 正在下载</string> + <string name="msg_running_detail">点击了解细节</string> <string name="msg_wait">请稍候…</string> - <string name="msg_copied">复制至剪贴板</string> - <string name="reCaptchaActivity">reCAPTCHA验证码</string> - <string name="controls_popup_title">悬浮窗播放</string> - <string name="title_activity_about">关于NewPipe</string> - <string name="action_settings">设置</string> - <string name="action_about">关于</string> - <string name="title_licenses">第三方许可</string> - <string name="copyright" formatted="true">© %1$s :作者 %2$s (使用 %3$s )</string> - <string name="error_unable_to_load_license">无法加载许可证</string> - <string name="action_open_website">打开网站</string> - <string name="tab_about">关于</string> - <string name="tab_contributors">贡献者</string> - <string name="tab_licenses">许可证</string> - <string name="settings_category_downloads_title">下载</string> - <string name="settings_file_charset_title">文件名中允许的字符</string> - <string name="settings_file_replacement_character_summary">无效字符将会被替换为此</string> - <string name="charset_letters_and_digits">字母和数字</string> - <string name="charset_most_special_characters">最特殊字符</string> - <string name="search_no_results">没有结果</string> - <string name="no_subscribers">没有订阅者</string> - <plurals name="subscribers"> - <item quantity="one">%s 位订阅者</item> - <item quantity="other">%s 位订阅者</item> - </plurals> - <string name="no_videos">没有视频</string> - <string name="videos">视频</string> - <string name="detail_drag_description">拖动以重新排序</string> - <string name="create">创建</string> - <string name="delete_one">仅删除一个</string> - <string name="delete_all">全部删除</string> - <string name="dismiss">解除</string> - <string name="rename">重 命名</string> - <string name="toast_no_player">未安装用于播放此文件的应用程序</string> - <string name="one_item_deleted">已删除1个项目。</string> - <string name="main_page_content_summary">哪些标签需要在主页上展示</string> - <string name="list_view_mode">列表视图模式</string> - <string name="missions_header_finished">已完成</string> - <string name="missions_header_pending">等待中…</string> - <string name="paused">已暂停</string> - <string name="queued">排队中</string> - <string name="enqueue">加入队列</string> - <string name="permission_denied">操作已被系统拒绝</string> - <string name="download_failed">下载失败</string> - <string name="download_finished">下载完成</string> - <string name="download_finished_more">%s 次下载已完成</string> - <string name="no_comments">没有评论</string> - <string name="drawer_header_description">切换服务,当前选择:</string> - <string name="no_player_found">找不到串流播放器。您想安装 VLC 吗?</string> - <string name="screen_rotation">旋转</string> - <string name="use_external_video_player_title">使用外部视频播放器</string> - <string name="use_external_audio_player_title">使用外部音频播放器</string> - <string name="download_path_audio_title">音频下载文件夹</string> - <string name="autoplay_by_calling_app_summary">从其他应用调用 NewPipe 时播放视频</string> - <string name="default_resolution_title">默认分辨率</string> - <string name="kore_not_found">找不到Kore。是否安装?</string> - <string name="show_play_with_kodi_title">显示“用Kodi播放”选项</string> - <string name="show_play_with_kodi_summary">显示“通过Kodi media center播放视频的选项”</string> - <string name="play_audio">音频</string> - <string name="default_audio_format_title">默认音频格式</string> - <string name="show_next_and_similar_title">显示“下一个”和“类似的”视频</string> - <string name="settings_category_video_audio_title">视频和音频</string> - <string name="background_player_playing_toast">在后台播放</string> - <string name="play_btn_text">播放</string> - <string name="content">内容</string> - <string name="show_age_restricted_content_title">受年龄限制的内容</string> - <string name="video_is_age_restricted">显示受年龄限制的视频。可从设置允许此类内容。</string> - <string name="duration_live">直播</string> + <string name="msg_copied">已复制到剪贴板</string> + <string name="no_available_dir">请选择一个可用的下载目录</string> + + <string name="add">新任务</string> <string name="downloads">下载</string> <string name="downloads_title">下载</string> <string name="error_report_title">错误报告</string> - <string name="general_error">错误</string> - <string name="could_not_load_thumbnails">无法加载所有缩略图</string> - <string name="youtube_signature_decryption_error">无法解密视频的 URL 签名</string> - <string name="parsing_error">无法解析网址</string> - <string name="light_parsing_error">无法完全解析网址</string> - <string name="content_not_available">内容不可用</string> - <string name="could_not_setup_download_menu">无法设置下载菜单</string> - <string name="live_streams_not_supported">暂时不支持观看直播</string> - <string name="could_not_get_stream">无法获得任何信息流</string> + <string name="could_not_load_image">无法加载图像</string> - <string name="app_ui_crash">App UI 崩溃</string> - <string name="sorry_string">抱歉,这不应该发生的。</string> - <string name="error_report_button_text">通过电子邮件报告错误</string> - <string name="error_snackbar_message">抱歉,发生了一些错误。</string> - <string name="error_snackbar_action">报告</string> - <string name="what_device_headline">信息:</string> - <string name="what_happened_headline">发生了什么:</string> - <string name="info_labels">详情:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:</string> - <string name="your_comment">您的注释(请用英文):</string> - <string name="error_details_headline">详细信息:</string> - <string name="list_thumbnail_view_description">视频预览缩略图</string> - <string name="detail_thumbnail_view_description">播放视频,时长:</string> - <string name="detail_uploader_thumbnail_view_description">视频上传者的头像缩略图</string> - <string name="short_billion">字节</string> - <string name="msg_url_malform">错误的 URL 或未联网</string> - <string name="msg_running">NewPipe下载中</string> - <string name="no_available_dir">请稍后在设置中设定下载目录</string> - <string name="msg_popup_permission">用悬浮窗模式 -\n需要此权限</string> - <string name="reCaptcha_title">reCAPTCHA验证</string> - <string name="recaptcha_request_toast">请求的新的CAPTCHA验证</string> - <string name="popup_mode_share_menu_title">NewPipe 悬浮窗模式</string> - <string name="popup_playing_toast">在悬浮窗中播放</string> - <string name="default_popup_resolution_title">默认悬浮窗分辨率</string> - <string name="show_higher_resolutions_title">使用更高的分辨率</string> - <string name="show_higher_resolutions_summary">仅某些设备支持播放2K / 4K视频</string> - <string name="clear">清除</string> - <string name="popup_remember_size_pos_title">记住悬浮窗的尺寸与位置</string> - <string name="popup_remember_size_pos_summary">记住最后一次使用悬浮窗的大小和位置</string> - <string name="settings_category_popup_title">悬浮窗</string> - <string name="popup_resizing_indicator_title">调整大小</string> - <string name="use_external_video_player_summary">隐藏部分没有音频的分辨率</string> - <string name="player_gesture_controls_title">播放器手势控制</string> - <string name="player_gesture_controls_summary">使用手势控制播放器的亮度和音量</string> - <string name="show_search_suggestions_summary">显示搜索建议</string> - <string name="best_resolution">最佳分辨率</string> - <string name="app_description">开源小巧的Android媒体播放器。</string> - <string name="view_on_github">在GitHub上查看</string> - <string name="app_license_title">NewPipe开源许可证</string> - <string name="contribution_encouragement">你是否有想:翻译、设计、清理或重型代码更改 ——我们始终欢迎你来贡献!</string> - <string name="read_full_license">阅读许可证</string> - <string name="contribution_title">贡献</string> - <string name="settings_file_replacement_character_title">替换字符</string> - <string name="channel_unsubscribed">取消订阅频道</string> - <string name="subscription_change_failed">无法修改订阅</string> + <string name="app_ui_crash">应用/界面已崩溃</string> + <string name="info_labels">原因:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA 验证</string> + + <string name="recaptcha_request_toast">需要 reCAPTCHA 验证</string> + +<string name="open_in_popup_mode">以悬浮窗打开</string> + <string name="use_external_video_player_summary">选项启用时,某分辨率的视频将没有声音</string> + <string name="popup_mode_share_menu_title">NewPipe悬浮窗模式</string> + <string name="subscribe_button_title">订阅</string> + <string name="subscribed_button_title">已订阅</string> + <string name="channel_unsubscribed">已取消订阅频道</string> + <string name="subscription_change_failed">无法更改订阅</string> <string name="subscription_update_failed">无法更新订阅</string> - <string name="tab_main">主页</string> + + <string name="tab_main">首页</string> <string name="tab_subscriptions">订阅</string> - <string name="fragment_whats_new">最新</string> - <string name="resume_on_audio_focus_gain_title">恢复前台焦点</string> - <string name="resume_on_audio_focus_gain_summary">中断后继续播放(例如突然来电后)</string> - <string name="enable_search_history_title">搜索历史记录</string> - <string name="enable_search_history_summary">在本地存储搜索查询记录</string> - <string name="enable_watch_history_summary">记录已观看视频</string> - <string name="title_activity_history">历史</string> - <string name="title_history_search">已搜索</string> - <string name="title_history_view">已观看</string> - <string name="history_disabled">历史记录功能已关闭</string> - <string name="action_history">历史</string> - <string name="history_empty">历史记录为空</string> - <string name="history_cleared">清除历史记录</string> + + <string name="fragment_whats_new">新鲜事</string> + + <string name="controls_background_title">后台播放</string> + <string name="controls_popup_title">悬浮窗</string> + + <string name="default_popup_resolution_title">窗口模式默认分辨率</string> + <string name="show_higher_resolutions_title">显示更高的分辨率</string> + <string name="show_higher_resolutions_summary">只有部分设备支持 2K/4K 视频</string> + <string name="default_video_format_title">首选视频格式</string> + <string name="black_theme_title">纯黑</string> + <string name="popup_remember_size_pos_title">记住悬浮窗大小和位置</string> + <string name="popup_remember_size_pos_summary">记住上次悬浮窗的大小和位置</string> + <string name="player_gesture_controls_title">播放手势控制</string> + <string name="player_gesture_controls_summary">使用手势操作控制播放器的亮度和音量</string> + <string name="show_search_suggestions_title">搜索建议</string> + <string name="show_search_suggestions_summary">在搜索时显示搜索建议</string> + <string name="enable_search_history_title">搜索记录</string> + <string name="enable_search_history_summary">在本地存储搜索请求</string> + <string name="enable_watch_history_title">历史和缓存</string> + <string name="enable_watch_history_summary">记住观看的视频</string> + <string name="resume_on_audio_focus_gain_title">焦点恢复</string> + <string name="resume_on_audio_focus_gain_summary">在打扰(例如来电)过后恢复视频播放</string> + + + <string name="settings_category_popup_title">窗口模式</string> + <string name="popup_playing_toast">以窗口模式播放</string> + <string name="all">所有</string> + <string name="channel">频道</string> + <string name="yes">是的</string> + <string name="later">稍后</string> + <string name="disabled">已禁用</string> + <string name="filter">筛选器</string> + <string name="refresh">刷新</string> + <string name="clear">清除</string> + <string name="popup_resizing_indicator_title">重新调整大小</string> + <string name="best_resolution">最佳分辨率</string> + <string name="notification_channel_name">NewPipe 通知</string> - <string name="notification_channel_description">NewPipe 后台播放和悬浮窗播放的通知</string> - <string name="default_video_format_title">默认视频格式</string> + <string name="notification_channel_description">NewPipe 后台播放和窗口播放器的通知</string> + + <string name="short_thousand">K</string> + <string name="short_million">M</string> + <string name="short_billion">B</string> + + <string name="msg_popup_permission">该项权限用于 +\n以窗口模式打开</string> + + <string name="settings_category_downloads_title">下载</string> + <string name="settings_file_charset_title">在文件名中允许的字符</string> + <string name="settings_file_replacement_character_summary">无效的字符将以该值取代</string> + <string name="settings_file_replacement_character_title">替换字符</string> + + <string name="charset_letters_and_digits">字母和数字</string> + <string name="charset_most_special_characters">特殊字符</string> + + <string name="title_activity_about">关于 NewPipe</string> + <string name="action_settings">设置</string> + <string name="action_about">关于</string> + <string name="title_licenses">第三方许可</string> + <string name="copyright" formatted="true">© %1$s by %2$s under %3$s</string> + <string name="error_unable_to_load_license">无法加载许可</string> + <string name="action_open_website">打开网站</string> + <string name="tab_about">关于</string> + <string name="tab_contributors">贡献者</string> + <string name="tab_licenses">许可</string> + <string name="app_description">开源的轻量级流媒体Android客户端。</string> + <string name="view_on_github">在 GitHub 上查看</string> + <string name="app_license_title">NewPipe 许可</string> + <string name="contribution_encouragement">无论你有什么想法:翻译程序,改进设计,优化代码或是想做出大量修改——我们都随时欢迎。做得越多它将变得越好!</string> + <string name="read_full_license">阅读许可</string> + <string name="contribution_title">贡献</string> + + <string name="title_activity_history">历史记录</string> + <string name="title_history_search">搜索记录</string> + <string name="title_history_view">观看记录</string> + <string name="history_disabled">历史记录已禁用</string> + <string name="action_history">历史记录</string> + <string name="history_empty">没有历史记录</string> + <string name="history_cleared">历史记录已清除</string> + +<string name="settings_category_player_title">播放器</string> <string name="settings_category_player_behavior_title">行为</string> - <string name="empty_subscription_feed_subtitle">空空如也...</string> - <string name="no_views">0次观看</string> + <string name="settings_category_history_title">历史记录 & 缓存</string> + <string name="background_player_append">在后台播放器上排队</string> + <string name="popup_playing_append">在弹出播放器上排队</string> + <string name="playlist">播放列表</string> + <string name="undo">撤销</string> + <string name="play_all">全部播放</string> + + <string name="unknown_content">[未知]</string> + + <string name="player_stream_failure">无法播放此流媒体</string> + <string name="player_unrecoverable_failure">发生无法解决的播放器错误</string> + <string name="search_no_results">没有结果</string> + <string name="empty_subscription_feed_subtitle">空空如也</string> + + <string name="no_subscribers">无订阅者</string> + <plurals name="subscribers"> + <item quantity="other">%s 位订阅者</item> +</plurals> + + <string name="no_views">无观看次数</string> + <plurals name="views"> + <item quantity="other">%s 次观看</item> +</plurals> + + <string name="no_videos">没有视频</string> + <plurals name="videos"> + <item quantity="other">%s 部视频</item> +</plurals> + <string name="item_deleted">项目已删除</string> - <string name="delete_item_search_history">是否要从搜索历史记录中删除此项目?</string> - <string name="main_page_content">显示在主页面内容</string> + <string name="no_player_found_toast">找不到播放器(你可以安装 VLC 来播放)</string> + <string name="controls_download_desc">下载串流文件。</string> + <string name="show_info">显示详情</string> + + <string name="tab_bookmarks">书签</string> + + <string name="controls_add_to_playlist_title">添入</string> + + <string name="use_inexact_seek_title">使用粗略但快速的寻找</string> + <string name="use_inexact_seek_summary">粗略寻找让播放器更快找到视频的进度位置</string> + <string name="download_thumbnail_title">加载缩略图</string> + <string name="download_thumbnail_summary">停用后,NewPipe將不再加载缩略图,减少数据使用和腾空存储空间,亦会清除内存和内存卡上的缩略图缓存</string> + <string name="thumbnail_cache_wipe_complete_notice">已清除图像缓存</string> + <string name="metadata_cache_wipe_title">清除缓存元数据</string> + <string name="metadata_cache_wipe_summary">移除所有网页的缓存数据</string> + <string name="metadata_cache_wipe_complete_notice">已清除元数据缓存</string> + <string name="auto_queue_title">自动播放队列中下一个视频</string> + <string name="auto_queue_summary">当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表</string> + <string name="show_hold_to_append_title">显示\"长按添加\"提示</string> + <string name="show_hold_to_append_summary">当视频详情页中的背景或悬浮按钮被按下的时候显示提示</string> + <string name="default_content_country_title">默认内容国家</string> + <string name="service_title">服务</string> + <string name="settings_category_debug_title">调试</string> + <string name="always">总是</string> + <string name="just_once">仅一次</string> + <string name="file">文件</string> + + <string name="toggle_orientation">切换方向</string> + <string name="switch_to_background">切换到后台</string> + <string name="switch_to_popup">切换到悬浮窗</string> + <string name="switch_to_main">切换到主页</string> + + <string name="import_data_title">导入数据库</string> + <string name="export_data_title">导出数据库</string> + <string name="import_data_summary">将覆盖你现有历史记录和订阅</string> + <string name="export_data_summary">导出历史记录,订阅和播放列表</string> + <string name="player_recoverable_failure">从播放器错误中恢复</string> + <string name="external_player_unsupported_link_type">外部播放器不支持这些链接类型</string> + <string name="invalid_url_toast">无效的链接</string> + <string name="video_streams_empty">未找到视频</string> + <string name="audio_streams_empty">未找到音频</string> + <string name="invalid_directory">无效的目录</string> + <string name="invalid_source">无效的文件/内容来源</string> + <string name="invalid_file">文件不存在或无读写权限</string> + <string name="file_name_empty_error">文件名不能为空</string> + <string name="error_occurred_detail">发生了一个错误:%1$s</string> + <string name="no_streams_available_download">无视频媒体可以下载</string> + + <string name="detail_drag_description">拖拽以重新排列</string> + + <string name="create">创建</string> + <string name="delete_one">删除一个</string> + <string name="delete_all">删除全部</string> + <string name="dismiss">解除</string> + <string name="rename">重命名</string> + + <string name="donation_title">捐赠</string> + <string name="donation_encouragement">NewPipe 是一群志愿者花费业余时间开发的,目的是为您带来最佳体验。你的一点心意,可以让开发者们在享受一杯 Java 的咖啡的同时让 NewPipe 变得更好用。</string> + <string name="give_back">捐赠</string> + <string name="website_title">网页</string> + <string name="website_encouragement">访问 NewPipe 网站以获取更多的信息和新闻。</string> + <string name="delete_item_search_history">你想从搜索历史中删除此项吗?</string> + <string name="delete_stream_history_prompt">你想从观看历史中删除此项吗?</string> + <string name="delete_all_history_prompt">确实要删除历史记录的所有项目吗?</string> + <string name="title_last_played">上一次播放</string> + <string name="title_most_played">最多播放</string> + + <string name="main_page_content">主页内容</string> <string name="blank_page_summary">空白页</string> - <string name="kiosk_page_summary">『时下流行』页-自定义</string> + <string name="kiosk_page_summary">Kiosk 页</string> <string name="subscription_page_summary">订阅页</string> - <string name="feed_page_summary">Feed 页面</string> + <string name="feed_page_summary">Feed 页</string> <string name="channel_page_summary">频道页</string> - <string name="select_a_channel">选择一个频道</string> - <string name="no_channel_subscribed_yet">尚未订阅频道</string> - <string name="select_a_kiosk">选择一个时下流行页</string> - <string name="kiosk">『时下流行』</string> - <string name="trending">趋势</string> + <string name="select_a_channel">选择频道</string> + <string name="no_channel_subscribed_yet">还没有订阅的频道</string> + <string name="select_a_kiosk">选择 kiosk</string> + <string name="export_complete_toast">导出完成</string> + <string name="import_complete_toast">导入完成</string> + <string name="no_valid_zip_file">无有效的 ZIP 文件</string> + <string name="could_not_import_all_files">警告:无法导入所有文件。</string> + <string name="override_current_data">将覆盖你现有设置。</string> + + <string name="kiosk">Kiosk</string> + <string name="trending">流行的</string> <string name="top_50">前50</string> - <string name="new_and_hot">最新与热门</string> - <string name="show_hold_to_append_title">显示 \"长按添加\" 说明</string> - <string name="show_hold_to_append_summary">在视频详情页中,按下背景播放或悬浮窗播放按钮时显示提示</string> - <string name="background_player_append">已加入后台播放播放列表</string> - <string name="popup_playing_append">已加入悬浮窗播放列表</string> - <string name="player_stream_failure">无法播放此串流</string> - <string name="player_unrecoverable_failure">发生无法恢复播放器错误</string> - <string name="player_recoverable_failure">恢复播放器错误</string> - <string name="title_activity_background_player">后台播放</string> + <string name="new_and_hot">最新 & 最热</string> + <string name="title_activity_background_player">后台播放器</string> <string name="title_activity_popup_player">悬浮窗播放器</string> <string name="play_queue_remove">移除</string> <string name="play_queue_stream_detail">详情</string> <string name="play_queue_audio_settings">音频设置</string> - <string name="hold_to_append">长按队列</string> - <string name="unknown_content">[未知]</string> - <string name="enqueue_on_background">添加到后台部分队列</string> - <string name="enqueue_on_popup">添加至新悬浮窗列表</string> - <string name="start_here_on_main">开始在此处开始播放</string> - <string name="start_here_on_background">开始后台播放</string> - <string name="start_here_on_popup">开始在新悬浮窗中播放</string> - <string name="donation_title">捐赠</string> - <string name="donation_encouragement">NewPipe 是由志愿者花费时间为您带来最佳体验开发的。回馈帮助开发人员在享用一杯咖啡的同时,让 NewPipe 变得更好。</string> - <string name="give_back">回馈</string> - <string name="website_title">网站</string> - <string name="website_encouragement">请访问 NewPipe 网站了解更多信息和讯息。</string> - <string name="default_content_country_title">默认国家/地区</string> - <string name="toggle_orientation">切换方向</string> - <string name="switch_to_background">切换到背景播放</string> - <string name="switch_to_popup">切换到悬浮窗播放</string> - <string name="switch_to_main">切换到主页面</string> - <string name="service_title">服务</string> - <string name="drawer_open">打开抽屉</string> - <string name="drawer_close">关闭抽屉</string> - <string name="external_player_unsupported_link_type">第三方播放器不支持此类型链接</string> - <string name="invalid_url_toast">无效 URL</string> - <string name="video_streams_empty">未找到视频串流</string> - <string name="audio_streams_empty">找不到音频串流</string> + <string name="hold_to_append">按住以队列</string> + <string name="enqueue_on_background">在后台队列</string> + <string name="enqueue_on_popup">在悬浮窗队列</string> + <string name="start_here_on_main">从这里播放</string> + <string name="start_here_on_background">从这里在后台播放</string> + <string name="start_here_on_popup">从这里在悬浮窗播放</string> + + <string name="drawer_open">打开侧栏菜单</string> + <string name="drawer_close">关闭侧栏菜单</string> + <string name="drawer_header_action_paceholder_text">精彩内容即将呈现 ;D</string> + + + <string name="preferred_open_action_settings_title">偏好\"打开\"动作</string> + <string name="preferred_open_action_settings_summary">打开内容的默认动作 — %s</string> + <string name="video_player">视频播放器</string> <string name="background_player">后台播放器</string> <string name="popup_player">悬浮窗播放器</string> - <string name="preferred_player_fetcher_notification_title">正在获取信息…</string> - <string name="preferred_player_fetcher_notification_message">正在加载请求的内容</string> - <string name="import_data_title">导入数据库</string> - <string name="export_data_title">导出数据库</string> - <string name="import_data_summary">覆盖当前历史记录和订阅</string> - <string name="export_data_summary">导出历史记录、订阅和播放列表</string> - <string name="export_complete_toast">导出成功</string> - <string name="import_complete_toast">导入成功</string> - <string name="no_valid_zip_file">没有有效的ZIP文件</string> - <string name="could_not_import_all_files">警告:无法导入所有文件。</string> - <string name="override_current_data">这将覆盖当前设置。</string> - <string name="show_info">显示信息</string> - <string name="tab_bookmarks">书签</string> - <string name="delete_stream_history_prompt">确定要从观看历史记录中删除该项吗?</string> - <string name="delete_all_history_prompt">是否确实要从历史记录中删除所有项目?</string> - <string name="title_last_played">最后播放</string> - <string name="title_most_played">播放最多</string> - <string name="always_ask_open_action">总是寻问</string> - <string name="create_playlist">新建播放列表</string> - <string name="delete_playlist">删除</string> - <string name="rename_playlist">重 命名</string> + <string name="always_ask_open_action">总是询问</string> + + <string name="preferred_player_fetcher_notification_title">获取信息中…</string> + <string name="preferred_player_fetcher_notification_message">正在加载请求内容</string> + + <string name="create_playlist">创建新播放列表</string> + <string name="delete_playlist">删除播放列表</string> + <string name="rename_playlist">重命名播放列表</string> <string name="playlist_name_input">名称</string> - <string name="append_playlist">添加到播放列表</string> - <string name="set_as_playlist_thumbnail">设为播放列表缩略图</string> - <string name="bookmark_playlist">收藏播放列表</string> - <string name="unbookmark_playlist">删除收藏</string> - <string name="delete_playlist_prompt">删除此播放列表?</string> - <string name="playlist_creation_success">新建播放列表成功</string> - <string name="playlist_add_stream_success">加入播放列表成功</string> - <string name="playlist_thumbnail_change_success">播放列表缩略图更改成功。</string> + <string name="append_playlist">加入播放列表</string> + <string name="set_as_playlist_thumbnail">设置为播放列表缩略图</string> + + <string name="bookmark_playlist">书签播放列表</string> + <string name="unbookmark_playlist">移除书签</string> + + <string name="delete_playlist_prompt">你想删除此播放列表吗?</string> + <string name="playlist_creation_success">播放列表已创建</string> + <string name="playlist_add_stream_success">加入播放列表</string> + <string name="playlist_thumbnail_change_success">播放列表缩略图已更改</string> <string name="playlist_delete_failure">无法删除播放列表</string> + <string name="caption_none">无字幕</string> + <string name="resize_fit">适应屏幕</string> <string name="resize_fill">填充屏幕</string> - <string name="resize_zoom">缩放</string> - <string name="drawer_header_action_paceholder_text">敬请等待</string> - <string name="settings_category_debug_title">调试</string> + <string name="resize_zoom">放大填充</string> + <string name="caption_auto_generated">自动生成</string> - <string name="enable_leak_canary_title">启用LeakCanary</string> - <string name="enable_leak_canary_summary">『内存泄漏监视』可能导致应用在『核心转储』时无响应</string> - <string name="enable_disposed_exceptions_title">报告『提前结束Android生命周期』错误</string> - <string name="enable_disposed_exceptions_summary">强制报告处理后的未送达的Activity或Fragment生命周期之外的Rx异常</string> - <string name="use_inexact_seek_title">使用快速不精确搜索</string> - <string name="use_inexact_seek_summary">粗略定位播放:允许播放器以略低的精确度为代价换取更快的定位速度</string> - <string name="auto_queue_title">自动播放下一个</string> - <string name="auto_queue_summary">当播放完非循环列表中的最后一个视频时,自动加入一个相关视频到播放列表</string> - <string name="invalid_directory">没有此文件夹</string> - <string name="invalid_source">无相似文件/内容源</string> - <string name="invalid_file">该文件不存在 或 缺少读写该文件的权限</string> - <string name="file_name_empty_error">文件名不能为空</string> - <string name="error_occurred_detail">发生错误: %1$s</string> + + <string name="enable_leak_canary_title">启用 LeakCanary</string> + <string name="enable_leak_canary_summary">内存泄露监测可能会在heap dumping时导致应用失去响应</string> + + <string name="enable_disposed_exceptions_title">报告生命周期外的错误</string> + <string name="enable_disposed_exceptions_summary">处理完无法送达的、发生在Fragment或activity生命周期之外的Rx异常后强制报告</string> + <string name="import_export_title">导入/导出</string> <string name="import_title">导入</string> - <string name="import_from">从...导入</string> - <string name="export_to">导出到...</string> - <string name="import_ongoing">正在导入…</string> - <string name="export_ongoing">正在导出…</string> + <string name="import_from">从导入</string> + <string name="export_to">导出至</string> + + <string name="import_ongoing">导入中…</string> + <string name="export_ongoing">导出中…</string> + <string name="import_file_title">导入文件</string> - <string name="previous_export">以前的导出</string> + <string name="previous_export">之前的导出</string> + <string name="subscriptions_import_unsuccessful">无法导入订阅</string> <string name="subscriptions_export_unsuccessful">无法导出订阅</string> - <string name="import_youtube_instructions">通过下载导出文件来导入 YouTube 订阅: -\n -\n1. 转到此网站: %1$s -\n2. 登录(如果需要) -\n3. 应该立即开始下载(即导出文件)</string> - <string name="import_soundcloud_instructions">通过键入网址或你的 ID 导入 SoundCloud 配置文件: -\n -\n1. 在浏览器中启用\"电脑模式\"(该网站不适用于移动设备) -\n2. 转到此 URL: %1$s -\n3. 登录(如果需要) -\n4. 复制重定向的配置文件下载地址。</string> - <string name="import_soundcloud_instructions_hint">你的 ID:soundcloud.com/[你的ID]</string> - <string name="import_network_expensive_warning">该操作消耗大量流量, -\n你想继续吗?</string> - <string name="download_thumbnail_summary">关闭可防止加载缩略图,节已省数据和内存使用。(若现在更改会清除内存和储存中缓存)</string> - <string name="thumbnail_cache_wipe_complete_notice">清空图像缓存成功</string> - <string name="metadata_cache_wipe_title">清空已缓存元数据</string> - <string name="metadata_cache_wipe_summary">清空已缓存的网页数据</string> - <string name="metadata_cache_wipe_complete_notice">清空元数据缓存成功</string> + + <string name="import_youtube_instructions">通过下载导出文件导入 YouTube 订阅: +\n1. 在浏览器打开URL:%1$s +\n2. 登录账户 +\n3. 下载应该会马上开始(这个就是导出文件)</string> + <string name="import_soundcloud_instructions">通过输入URL或您的ID导入SoundCloud配置: +\n1. 在浏览器中开启\"桌面模式\"(该网站不适用于移动设备) +\n2. 打开URL:%1$s +\n3. 登录账号 +\n3. 复制重定向后的URL。</string> + <string name="import_soundcloud_instructions_hint">你的ID 或 soundcloud.com/你的ID</string> + + <string name="import_network_expensive_warning">请注意该操作可能消耗大量网络流量。 +\n您希望继续吗?</string> + <string name="playback_speed_control">播放速度控制</string> - <string name="playback_tempo">节奏</string> + <string name="playback_tempo">速度</string> <string name="playback_pitch">音调</string> - <string name="unhook_checkbox">解除关联(可能导致失真)</string> - <string name="preferred_open_action_settings_title">首选“打开”操作</string> - <string name="preferred_open_action_settings_summary">打开内容时默认操作: = %s</string> - <string name="no_streams_available_download">无可下载的串流内容</string> + <string name="unhook_checkbox">Unhook(可能导致失真)</string> + <string name="playback_default">默认</string> +<string name="toast_no_player">未安装能播放此文件的应用</string> + <string name="caption_setting_title">字幕</string> - <string name="caption_setting_description">修改播放器字幕比例和背景样式。需要重新启动应用程序才能生效。</string> - <string name="clear_views_history_summary">删除串流的播放历史和播放位置</string> - <string name="delete_view_history_alert">删除全部观看记录?</string> - <string name="clear_search_history_title">清除搜索历史记录</string> - <string name="clear_search_history_summary">清除搜索关键词的历史记录</string> - <string name="delete_search_history_alert">是否删除全部搜索历史记录?</string> - <string name="search_history_deleted">搜索历史记录已删除。</string> - <string name="app_license">NewPipe 是版权自由软件:您可以随时使用、研究共享和改进它。您可以根据自由软件基金会发布的 GNU 通用公共许可证GPLv3或(由您选择的)任何更高版本的许可证重新分发或修改该许可证。</string> - <string name="import_settings">是否要同时导入设置?</string> - <string name="privacy_policy_title">NewPipe的隐私政策</string> - <string name="privacy_policy_encouragement">NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。 -\nNewPipe 的隐私政策详细解释了在发送崩溃报告时发送和存储的数据。</string> - <string name="read_privacy_policy">阅读隐私政策</string> - <string name="start_accept_privacy_policy">为了遵守欧盟的《通用数据保护条例》(GDPR),我们特此提醒您注意 NewPipe 的隐私政策。请您仔细阅读。 -\n您必须在同意以后才能向我们发送错误报告。</string> + <string name="caption_setting_description">修改播放器的字幕文本大小和背景样式。需要重启应用程序以生效</string> + + <string name="clear_views_history_title">清除观看记录</string> + <string name="clear_views_history_summary">删除视频观看记录</string> + <string name="delete_view_history_alert">删除全部观看记录。</string> + <string name="watch_history_deleted">观看记录已删除。</string> + <string name="clear_search_history_title">清除搜索记录</string> + <string name="clear_search_history_summary">删除搜索关键词记录</string> + <string name="delete_search_history_alert">删除全部搜索记录。</string> + <string name="search_history_deleted">搜索记录已删除。</string> + <string name="one_item_deleted">已删除1项。</string> + + <string name="privacy_policy_title">NewPipe的隐私策略</string> + <string name="privacy_policy_encouragement">NewPipe 项目非常重视您的隐私。因此, 未经您的同意,应用程序不会收集任何您的数据。 NewPipe 的隐私策略详细解释了您在发送崩溃报告时会发送和存储的哪些数据。</string> + <string name="read_privacy_policy">阅读隐私策略</string> + <string name="app_license">NewPipe 是 copyleft 的自由软件: 你可以按照自己的意愿使用、学习、分享和改进它。具体地说, 您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款(第3版或者任何更高版本), 重新发布和/或修改本软件。</string> + <string name="import_settings">您是否希望同时导入设置?</string> + + <string name="start_accept_privacy_policy">为了遵守欧洲通用数据保护条例(GDPR),我们提醒您注意NewPipe的隐私政策。 请仔细阅读。 +\n您必须接受它才能向我们发送错误报告。</string> <string name="accept">接受</string> <string name="decline">拒绝</string> - <string name="limit_data_usage_none_description">无限制</string> + + <string name="limit_data_usage_none_description">不限制</string> <string name="limit_mobile_data_usage_title">使用移动数据时限制分辨率</string> - <string name="minimize_on_exit_title">退出应用时最小化</string> - <string name="minimize_on_exit_summary">从主播放器切换到其他应用时的操作 - %s</string> - <string name="skip_silence_checkbox">静音时快进</string> - <string name="playback_step">滑块[比例尺]</string> - <string name="playback_reset">重 置</string> - <string name="tracks">曲目</string> - <string name="users">用户</string> - <string name="tab_choose">选择标签</string> - <string name="volume_gesture_control_title">音量手势控制</string> - <string name="volume_gesture_control_summary">使用手势控制播放器的音量</string> - <string name="brightness_gesture_control_title">亮度手势控制</string> - <string name="brightness_gesture_control_summary">使用手势控制播放器的亮度</string> - <string name="content_language_title">视频默认语言</string> - <string name="app_update_notification_channel_name">应用更新通知</string> - <string name="app_update_notification_channel_description">NewPipe有新版本的通知</string> - <string name="download_to_sdcard_error_title">外置存储不可用</string> - <string name="download_to_sdcard_error_message">无法下载到外部 SD 卡。重置下载文件夹位置?</string> - <string name="saved_tabs_invalid_json">读取已保存标签时发生错误,因此使用者默认标签</string> - <string name="restore_defaults">恢复默认</string> - <string name="restore_defaults_confirmation">是否恢复默认值?</string> - <string name="selection">选择</string> - <string name="updates_setting_title">更新</string> - <string name="list">列表</string> - <string name="auto">自动</string> - <string name="switch_view">切换视图</string> - <string name="app_update_notification_content_text">点击下载</string> - <string name="post_processing">后期处理</string> - <string name="generate_unique_name">生成唯一名称</string> - <string name="overwrite">覆盖</string> - <string name="download_already_running">正在使用此名称进行下载</string> - <string name="show_error">显示错误</string> - <string name="label_code">代码</string> - <string name="error_path_creation">无法创建目标文件夹</string> - <string name="error_file_creation">无法创建文件</string> - <string name="error_permission_denied">权限被系统拒绝</string> - <string name="error_ssl_exception">安全连接失败</string> - <string name="error_unknown_host">找不到服务器</string> - <string name="error_connect_host">无法连接到服务器</string> - <string name="error_http_no_content">服务器未发送数据</string> - <string name="error_http_not_found">找不到 NOT FOUND</string> - <string name="error_postprocessing_failed">后期处理失败</string> - <string name="clear_finished_download">清除已完成的下载</string> - <string name="stop">停止</string> - <string name="max_retry_msg">最大重试次数</string> - <string name="max_retry_desc">取消下载前的最多尝试次数</string> - <string name="pause_downloads_on_mobile">在切换到移动流量网络时中断播放</string> - <string name="pause_downloads_on_mobile_desc">切换至移动数据时可能有用,尽管一些下载无法被暂停</string> - <string name="events">事件</string> - <string name="conferences">近期大会</string> - <string name="show_comments_title">显示评论</string> - <string name="show_comments_summary">禁用,以停止显示评论</string> - <plurals name="comments"> - <item quantity="one">%s 条评论</item> - <item quantity="other">%s 条评论</item> - </plurals> - <string name="error_unable_to_load_comments">无法加载评论</string> - <string name="close">关闭</string> - <string name="enable_playback_resume_title">恢复播放</string> - <string name="enable_playback_resume_summary">恢复上次播放位置</string> - <string name="enable_playback_state_lists_title">列表中的位置</string> - <string name="enable_playback_state_lists_summary">在列表中,显示视频最后一次播放时的播放位置</string> - <string name="watch_history_states_deleted">已删除播放位置记录。</string> - <string name="missing_file">文件被已移动或删除</string> - <string name="overwrite_unrelated_warning">该名称的文件已经存在</string> - <string name="overwrite_finished_warning">命名冲突,已存在具有此名称文件</string> - <string name="overwrite_failed">无法覆盖文件</string> - <string name="download_already_pending">有此名称的已暂停下载</string> - <string name="error_postprocessing_stopped">NewPipe 在处理文件时被关闭</string> - <string name="error_insufficient_storage">设备上没有剩余储存空间</string> - <string name="error_progress_lost">进度丢失,文件已被删除</string> - <string name="error_timeout">连接超时</string> - <string name="confirm_prompt">是否要清除下载历史记录或删除所有下载的文件?</string> - <string name="enable_queue_limit">最大下载队列</string> - <string name="enable_queue_limit_desc">同时只允许一个下载进行</string> - <string name="start_downloads">开始下载</string> - <string name="pause_downloads">暂停下载</string> - <string name="downloads_storage_ask_title">询问下载位置</string> - <string name="downloads_storage_ask_summary">系统将询问您将每次下载的保存位置</string> - <string name="downloads_storage_ask_summary_kitkat">系统将询问您将每次下载的保存位置。 -\n(如果要下载到外部 SD 卡,请选择 SAF)</string> - <string name="downloads_storage_use_saf_title">使用 SAF</string> - <string name="downloads_storage_use_saf_summary">存储访问框架(SAF)允许下载文件到外部SD卡。 -\n注:一些设备不兼容SAF</string> - <string name="clear_playback_states_title">删除播放位置记录</string> - <string name="clear_playback_states_summary">删除所有播放位置记录</string> - <string name="delete_playback_states_alert">删除所有播放位置记录?</string> - <string name="download_choose_new_path">更改下载目录让内容生效</string> - <string name="default_kiosk_page_summary">『时下流行』页-默认</string> - <string name="no_one_watching">没有人在观看</string> - <plurals name="watching"> - <item quantity="one">%s 人在观看</item> - <item quantity="other">%s 人在观看</item> - </plurals> - <string name="no_one_listening">没有人在听</string> - <plurals name="listening"> - <item quantity="one">%s 人在听</item> - <item quantity="other">%s 人在听</item> - </plurals> - <string name="localization_changes_requires_app_restart">重新启动应用后,语言将更改。</string> - <string name="peertube_instance_url_title">PeerTube 服务器</string> - <string name="peertube_instance_url_summary">设置自己喜欢的PeerTube服务器</string> - <string name="peertube_instance_url_help">查找最适合你的服务器%s</string> - <string name="peertube_instance_add_title">添加服务器</string> - <string name="peertube_instance_add_help">输入服务器网址(URL)</string> - <string name="peertube_instance_add_fail">无法验证服务器</string> - <string name="peertube_instance_add_https_only">仅支持 HTTPS和URL</string> - <string name="peertube_instance_add_exists">该服务器已存在</string> - <string name="local">本地</string> - <string name="recently_added">最近添加</string> - <string name="most_liked">最喜欢的</string> - <string name="playlist_no_uploader">自动生成的(未找到上传者)</string> - <string name="recovering">正在恢复</string> - <string name="error_download_resource_gone">无法恢复此下载</string> - <string name="choose_instance_prompt">选择一个服务器</string> - <string name="seek_duration_title">快进 / 快退的单位时间</string> - <string name="enable_lock_screen_video_thumbnail_title">在锁屏上显示视频缩略图</string> - <string name="enable_lock_screen_video_thumbnail_summary">在后台播放时,锁屏上将会显示视频的缩略图</string> - <string name="clear_download_history">清除下载历史记录</string> - <string name="delete_downloaded_files">删除下载了的文件</string> - <string name="deleted_downloads">已删除 %1$s 下载</string> -</resources> \ No newline at end of file + <string name="channels">更多频道</string> + <string name="playlists">更多频道</string> + <string name="users">用户们</string> + </resources> diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 3294094dc..20b14d7ea 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -120,8 +120,8 @@ <string name="info_labels">事件:\\n請求:\\n內容語言:\\n服務:\\nGMT 時間:\\nPackage:\\n版本:\\n作業系統版本:</string> <string name="short_thousand">K</string> <string name="short_million">M</string> - <string name="reCaptchaActivity">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA 挑戰</string> + <string name="recaptcha">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA 挑戰</string> <string name="msg_popup_permission">畫中畫模式需要此權限</string> <string name="recaptcha_request_toast">需完成 reCAPTCHA 挑戰</string> <string name="use_external_video_player_summary">啟用此選項將導致某些解像度的影片失去聲音</string> diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b82736f90..6457d4baf 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -136,8 +136,8 @@ <string name="msg_copied">已複製至剪貼簿</string> <string name="no_available_dir">稍後請在設定中選擇下載資料夾</string> <string name="msg_popup_permission">使用懸浮視窗模式需要此權限</string> - <string name="reCaptchaActivity">reCAPTCHA 驗證</string> - <string name="reCaptcha_title">reCAPTCHA 驗證</string> + <string name="recaptcha">reCAPTCHA 驗證</string> + <string name="title_activity_recaptcha">reCAPTCHA 驗證</string> <string name="recaptcha_request_toast">已請求 reCAPTCHA 驗證</string> <string name="controls_popup_title">懸浮視窗</string> <string name="duration_live">直播</string> diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index c64ed1256..88925a598 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -45,6 +45,7 @@ <attr name="ic_grid" format="reference"/> <attr name="ic_delete" format="reference"/> <attr name="ic_settings_update" format="reference"/> + <attr name="ic_done" format="reference"/> <attr name="progress_horizontal_drawable" format="reference"/> <!-- Can't refer to colors directly in drawable's xml--> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 763eb7426..dab9bde10 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -327,10 +327,12 @@ <!-- Checksum types --> <string name="md5" translatable="false">MD5</string> <string name="sha1" translatable="false">SHA-1</string> - <string name="reCaptchaActivity" translatable="false">reCAPTCHA</string> - <string name="reCaptcha_title">reCAPTCHA challenge</string> + <!-- reCAPTCHA --> + <string name="recaptcha" translatable="false">reCAPTCHA</string> + <string name="title_activity_recaptcha">reCAPTCHA challenge</string> + <string name="subtitle_activity_recaptcha">Press \"Done\" when solved</string> <string name="recaptcha_request_toast">reCAPTCHA challenge requested</string> - <!-- End of GigaGet's Strings --> + <string name="recaptcha_done_button">Done</string> <!-- Downloads --> <string name="settings_category_downloads_title">Download</string> <string name="settings_file_charset_title">Allowed characters in filenames</string> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 679d4d1cd..8047ef7f4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -60,6 +60,7 @@ <item name="ic_grid">@drawable/ic_grid_black_24dp</item> <item name="ic_delete">@drawable/ic_delete_black_24dp</item> <item name="ic_settings_update">@drawable/ic_settings_update_black</item> + <item name="ic_done">@drawable/ic_done_black_24dp</item> <item name="separator_color">@color/light_separator_color</item> <item name="contrast_background_color">@color/light_contrast_background_color</item> @@ -129,6 +130,7 @@ <item name="ic_delete">@drawable/ic_delete_white_24dp</item> <item name="pause">@drawable/ic_pause_white_24dp</item> <item name="ic_settings_update">@drawable/ic_settings_update_white</item> + <item name="ic_done">@drawable/ic_done_white_24dp</item> <item name="separator_color">@color/dark_separator_color</item> <item name="contrast_background_color">@color/dark_contrast_background_color</item>