diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2c79d62cd..4137c7635 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ liberapay: TeamNewPipe +custom: 'https://newpipe.net/donate/' diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index de16c5cf0..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -name: Bug report -about: Create a bug report to help us improve -labels: bug -assignees: '' - ---- - - - - - - - -### Checklist - - -- [x] I am using the latest version - x.xx.x -- [ ] I checked, but didn't find any duplicates (open OR closed) of this issue in the repo. -- [ ] I have read the contribution guidelines given at https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md. -- [ ] This issue contains only one bug. I will open one issue for every bug report I want to file. - -### Steps to reproduce the bug - - - - - - -### Actual behavior - - - - -### Expected behavior - - - - -### Screenshots/Screen recordings - - - - - - -### Logs - - - - - - - - -### Device info - - - Android version/Custom ROM version: - - Device model: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..a0a9f9ef5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,113 @@ +name: Bug report +description: Create a bug report to help us improve +labels: [bug] +body: + - type: markdown + attributes: + value: | + Thank you for helping to make NewPipe better by reporting a bug. :hugs: + + Please fill in as much information as possible about your bug so that we don't have to play "information ping-pong" and can help you immediately. + + - type: checkboxes + id: checklist + attributes: + label: "Checklist" + options: + - label: "I am able to reproduce the bug with the [latest version](https://github.com/TeamNewPipe/NewPipe/releases/latest)." + required: true + - label: "I made sure that there are *no existing issues* - [open](https://github.com/TeamNewPipe/NewPipe/issues) or [closed](https://github.com/TeamNewPipe/NewPipe/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to." + required: true + - label: "I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise." + required: true + - label: "This issue contains only one bug." + required: true + - label: "I have read and understood the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/CONTRIBUTING.md)." + required: true + + - type: input + id: app-version + attributes: + label: Affected version + description: "In which NewPipe version did you encounter the bug?" + placeholder: "x.xx.x - Can be seen in the app from the 'About' section in the sidebar" + validations: + required: true + + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to reproduce the bug + description: | + What did you do for the bug to show up? + + If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug. + placeholder: | + 1. Go to '...' + 2. Press on '....' + 3. Swipe down to '....' + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + description: | + Tell us what you expect to happen. + + - type: textarea + id: actual-behavior + attributes: + label: Actual behavior + description: | + Tell us what happens with the steps given above. + + - type: textarea + id: screen-media + attributes: + label: Screenshots/Screen recordings + description: | + A picture or video is worth a thousand words. + + If applicable, add screenshots or a screen recording to help explain your problem. + GitHub supports uploading them directly in the text box. + If your file is too big for Github to accept, try to compress it (ZIP-file) or feel free to paste a link to an image/video hoster here instead. + + :heavy_exclamation_mark: DON'T POST SCREENSHOTS OF THE ERROR PAGE. + Instead, follow the instructions in the "Logs" section below. + + - type: textarea + id: logs + attributes: + label: Logs + description: | + If your bug includes a crash (where you're shown the Error Report page with a bunch of info), tap on "Copy formatted report" at the bottom and paste it here. + + - type: input + id: device-os-info + attributes: + label: Affected Android/Custom ROM version + description: | + With what operating system (+ version) did you encounter the bug? + placeholder: "Example: Android 12 / LineageOS 18.1" + + - type: input + id: device-model-info + attributes: + label: Affected device model + description: | + On what device did you encounter the bug? + placeholder: "Example: Huawei P20 lite (ANE-LX1) / Samsung Galaxy S20" + + - type: textarea + id: additional-information + attributes: + label: Additional information + description: | + Any other information you'd like to include, for instance that + * the affected device is foldable or a TV + * you have disabled all animations on your device + * your cat disabled your network connection + * ... + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 6664ed276..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -labels: enhancement -assignees: '' - ---- - - - - -### Checklist - - -- [x] I checked, but didn't find any duplicates (open OR closed) of this issue in the repo. -- [ ] I have read the contribution guidelines given at https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md. -- [ ] This issue contains only one feature request. I will open one issue for every feature I want to request. - -#### What feature do you want? - - - -#### Why do you want this feature? - diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..83d6f0299 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,51 @@ +name: Feature request +description: Suggest an idea for this project +labels: [enhancement] +body: + - type: markdown + attributes: + value: | + Thank you for helping to make NewPipe better by suggesting a feature. :hugs: + + Your ideas are highly welcome! The app is made for you, the users, after all. + + - type: checkboxes + id: checklist + attributes: + label: "Checklist" + options: + - label: "I made sure that there are *no existing issues* - [open](https://github.com/TeamNewPipe/NewPipe/issues) or [closed](https://github.com/TeamNewPipe/NewPipe/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to." + required: true + - label: "I'm aware that this is a request for NewPipe itself and that requests for adding a new service need to be made at [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor/issues)." + required: true + - label: "I have taken the time to fill in all the required details. I understand that the feature request will be dismissed otherwise." + required: true + - label: "This issue contains only one feature request." + required: true + - label: "I have read and understood the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/CONTRIBUTING.md)." + required: true + + + - type: textarea + id: feature-description + attributes: + label: Feature description + description: | + Explain how you want the app's look or behavior to change to suit your needs. + validations: + required: true + + - type: textarea + id: why-is-the-feature-requested + attributes: + label: Why do you want this feature? + description: | + Describe any problem or limitation you come across while using the app which would be solved by this feature. + validations: + required: true + + - type: textarea + id: additional-information + attributes: + label: Additional information + description: Any other information you'd like to include, for instance sketches, mockups, pictures of cats, etc. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md deleted file mode 100644 index 5582fd407..000000000 --- a/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Question -about: Ask about anything NewPipe-related -labels: question -assignees: '' - ---- - - - - - -### Checklist - - -- [x] I checked, but didn't find any duplicates (open OR closed) of this issue in the repo. -- [ ] I have read the contribution guidelines given at https://github.com/TeamNewPipe/NewPipe/blob/HEAD/.github/CONTRIBUTING.md. - -#### What's your question(s)? - - -#### Additional context - diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 000000000..4c42ab26a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,35 @@ +name: Question +description: Ask about anything NewPipe-related +labels: [question] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this issue! :hugs: + + Note that you can also ask questions on our [IRC channel](https://web.libera.chat/#newpipe). + + - type: checkboxes + id: checklist + attributes: + label: "Checklist" + options: + - label: "I made sure that there are *no existing issues* - [open](https://github.com/TeamNewPipe/NewPipe/issues) or [closed](https://github.com/TeamNewPipe/NewPipe/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to." + required: true + - label: "I have taken the time to fill in all the required details. I understand that the question will be dismissed otherwise." + required: true + - label: "I have read and understood the [contribution guidelines](https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/CONTRIBUTING.md)." + required: true + + - type: textarea + id: what-is-the-question + attributes: + label: What is/are your question(s)? + validations: + required: true + + - type: textarea + id: additional-information + attributes: + label: Additional information + description: Any other information you'd like to include, for instance sketches, mockups, pictures of cats, etc. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 49e78e997..7dbfadc0b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,19 +7,25 @@ on: - dev - master paths-ignore: - - 'README*.md' + - 'README.md' + - 'doc/**' - 'fastlane/**' - 'assets/**' - '.github/**/*.md' + - '.github/FUNDING.yml' + - '.github/ISSUE_TEMPLATE/**' push: branches: - dev - master paths-ignore: - - 'README*.md' + - 'README.md' + - 'doc/**' - 'fastlane/**' - 'assets/**' - '.github/**/*.md' + - '.github/FUNDING.yml' + - '.github/ISSUE_TEMPLATE/**' jobs: build-and-test-jvm: diff --git a/.github/workflows/image-minimizer.js b/.github/workflows/image-minimizer.js new file mode 100644 index 000000000..80cc5294c --- /dev/null +++ b/.github/workflows/image-minimizer.js @@ -0,0 +1,130 @@ +/* + * Script for minimizing big images (jpg,gif,png) when they are uploaded to GitHub and not edited otherwise + */ +module.exports = async ({github, context}) => { + const IGNORE_KEY = ''; + const IGNORE_ALT_NAME_END = 'ignoreImageMinify'; + // Targeted maximum height + const IMG_MAX_HEIGHT_PX = 600; + // maximum width of GitHub issues/comments + const IMG_MAX_WIDTH_PX = 800; + // all images that have a lower aspect ratio (-> have a smaller width) than this will be minimized + const MIN_ASPECT_RATIO = IMG_MAX_WIDTH_PX / IMG_MAX_HEIGHT_PX + + // Get the body of the image + let initialBody = null; + if (context.eventName == 'issue_comment') { + initialBody = context.payload.comment.body; + } else if (context.eventName == 'issues') { + initialBody = context.payload.issue.body; + } else { + console.log('Aborting: No body found'); + return; + } + console.log(`Found body: \n${initialBody}\n`); + + // Check if we should ignore the currently processing element + if (initialBody.includes(IGNORE_KEY)) { + console.log('Ignoring: Body contains IGNORE_KEY'); + return; + } + + // Regex for finding images (simple variant) ![ALT_TEXT](https://*.githubusercontent.com//.) + const REGEX_IMAGE_LOOKUP = /\!\[(.*)\]\((https:\/\/[-a-z0-9]+\.githubusercontent\.com\/\d+\/[-0-9a-f]{32,512}\.(jpg|gif|png))\)/gm; + + // Check if we found something + let foundSimpleImages = REGEX_IMAGE_LOOKUP.test(initialBody); + if (!foundSimpleImages) { + console.log('Found no simple images to process'); + return; + } + + console.log('Found at least one simple image to process'); + + // Require the probe lib for getting the image dimensions + const probe = require('probe-image-size'); + + var wasMatchModified = false; + + // Try to find and replace the images with minimized ones + let newBody = await replaceAsync(initialBody, REGEX_IMAGE_LOOKUP, async (match, g1, g2) => { + console.log(`Found match '${match}'`); + + if (g1.endsWith(IGNORE_ALT_NAME_END)) { + console.log(`Ignoring match '${match}': IGNORE_ALT_NAME_END`); + return match; + } + + let shouldModify = false; + try { + console.log(`Probing ${g2}`); + let probeResult = await probe(g2); + if (probeResult == null) { + throw 'No probeResult'; + } + if (probeResult.hUnits != 'px') { + throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`; + } + if (probeResult.height <= 0) { + throw `Unexpected probeResult.height (height is invalid: ${probeResult.height})`; + } + if (probeResult.wUnits != 'px') { + throw `Unexpected probeResult.wUnits (expected px but got ${probeResult.wUnits})`; + } + if (probeResult.width <= 0) { + throw `Unexpected probeResult.width (width is invalid: ${probeResult.width})`; + } + console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`); + + shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && (probeResult.width / probeResult.height) < MIN_ASPECT_RATIO; + } catch(e) { + console.log('Probing failed:', e); + // Immediately abort + return match; + } + + if (shouldModify) { + wasMatchModified = true; + console.log(`Modifying match '${match}'`); + return `${g1}`; + } + + console.log(`Match '${match}' is ok/will not be modified`); + return match; + }); + + if (!wasMatchModified) { + console.log('Nothing was modified. Skipping update'); + return; + } + + // Update the corresponding element + if (context.eventName == 'issue_comment') { + console.log('Updating comment with id', context.payload.comment.id); + await github.rest.issues.updateComment({ + comment_id: context.payload.comment.id, + owner: context.repo.owner, + repo: context.repo.repo, + body: newBody + }) + } else if (context.eventName == 'issues') { + console.log('Updating issue', context.payload.issue.number); + await github.rest.issues.update({ + issue_number: context.payload.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: newBody + }); + } + + // Asnyc replace function from https://stackoverflow.com/a/48032528 + async function replaceAsync(str, regex, asyncFn) { + const promises = []; + str.replace(regex, (match, ...args) => { + const promise = asyncFn(match, ...args); + promises.push(promise); + }); + const data = await Promise.all(promises); + return str.replace(regex, () => data.shift()); + } +} diff --git a/.github/workflows/image-minimizer.yml b/.github/workflows/image-minimizer.yml new file mode 100644 index 000000000..77b1faecf --- /dev/null +++ b/.github/workflows/image-minimizer.yml @@ -0,0 +1,29 @@ +name: Image Minimizer + +on: + issue_comment: + types: [created, edited] + issues: + types: [opened, edited] + +jobs: + try-minimize: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v2 + with: + node-version: 16 + + - name: Install probe-image-size + run: npm i probe-image-size@7.2.3 --ignore-scripts + + - name: Minimize simple images + uses: actions/github-script@v5 + timeout-minutes: 3 + with: + script: | + const script = require('.github/workflows/image-minimizer.js'); + await script({github, context}); diff --git a/.gitignore b/.gitignore index 40e7d2c03..1352b6917 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,8 @@ captures/ *~ .weblate *.class -**/debug/ -**/release/ +app/debug/ +app/release/ # vscode / eclipse files *.classpath diff --git a/README.md b/README.md index ac961eaac..28be82192 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@

WebsiteBlogFAQPress


-*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* +*Read this in other languages: [English](README.md), [Español](doc/README.es.md), [한국어](doc/README.ko.md), [Soomaali](doc/README.so.md), [Português Brasil](doc/README.pt_BR.md), [Polski](doc/README.pl.md), [日本語](doc/README.ja.md), [Română](doc/README.ro.md), [Türkçe](doc/README.tr.md), [正體中文](doc/README.zh_TW.md).* WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY. @@ -140,7 +140,7 @@ Therefore, the app does not collect any data without your consent. NewPipe's pri ## License [![GNU GPLv3 Image](https://www.gnu.org/graphics/gplv3-127x51.png)](https://www.gnu.org/licenses/gpl-3.0.en.html) -NewPipe is Free Software: You can use, study share and improve it at your +NewPipe is Free Software: You can use, study, share, and improve it at will. Specifically you can redistribute and/or modify it under the terms of the [GNU General Public License](https://www.gnu.org/licenses/gpl.html) as published by the Free Software Foundation, either version 3 of the License, or diff --git a/app/build.gradle b/app/build.gradle index d085d9f7e..2ed7015e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,16 +8,16 @@ plugins { } android { - compileSdkVersion 30 + compileSdk 30 buildToolsVersion '30.0.3' defaultConfig { applicationId "org.schabi.newpipe" resValue "string", "app_name", "NewPipe" - minSdkVersion 19 - targetSdkVersion 29 - versionCode 981 - versionName "0.21.15" + minSdk 19 + targetSdk 29 + versionCode 983 + versionName "0.22.0" multiDexEnabled true @@ -65,7 +65,7 @@ android { } } - lintOptions { + lint { checkReleaseBuilds false // Or, if you prefer, you can continue to check for errors in release builds, // but continue the build even when errors are found: @@ -98,7 +98,7 @@ android { } ext { - checkstyleVersion = '9.2' + checkstyleVersion = '9.2.1' androidxLifecycleVersion = '2.3.1' androidxRoomVersion = '2.3.0' @@ -190,7 +190,7 @@ dependencies { // name and the commit hash with the commit hash of the (pushed) commit you want to test // This works thanks to JitPack: https://jitpack.io/ implementation 'com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751' - implementation 'com.github.TeamNewPipe:NewPipeExtractor:10f6cc71' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:v0.21.14' /** Checkstyle **/ checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}" @@ -263,7 +263,7 @@ dependencies { implementation "com.nononsenseapps:filepicker:4.2.1" // Crash reporting - implementation "ch.acra:acra-core:5.7.0" + implementation "ch.acra:acra-core:5.8.4" // Properly restarting implementation 'com.jakewharton:process-phoenix:2.1.2' diff --git a/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt b/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt index c32a43b2a..24be0f868 100644 --- a/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt +++ b/app/src/androidTest/java/org/schabi/newpipe/local/history/HistoryRecordManagerTest.kt @@ -97,14 +97,23 @@ class HistoryRecordManagerTest { assertThat(database.searchHistoryDAO().all.blockingFirst()).isEmpty() } - @Test - fun getRelatedSearches_emptyQuery() { + private fun insertShuffledRelatedSearches(relatedSearches: Collection) { + + // shuffle to make sure the order of items returned by queries depends only on + // SearchHistoryEntry.creationDate, not on the actual insertion time, so that we can + // verify that the `ORDER BY` clause does its job + database.searchHistoryDAO().insertAll(relatedSearches.shuffled()) + // make sure all entries were inserted - database.searchHistoryDAO().insertAll(RELATED_SEARCHES_ENTRIES) assertEquals( - RELATED_SEARCHES_ENTRIES.size, + relatedSearches.size, database.searchHistoryDAO().all.blockingFirst().size ) + } + + @Test + fun getRelatedSearches_emptyQuery() { + insertShuffledRelatedSearches(RELATED_SEARCHES_ENTRIES) // make sure correct number of searches is returned and in correct order val searches = manager.getRelatedSearches("", 6, 4).blockingFirst() @@ -117,14 +126,29 @@ class HistoryRecordManagerTest { } @Test - fun getRelatedSearched_nonEmptyQuery() { - // make sure all entries were inserted - database.searchHistoryDAO().insertAll(RELATED_SEARCHES_ENTRIES) - assertEquals( - RELATED_SEARCHES_ENTRIES.size, - database.searchHistoryDAO().all.blockingFirst().size + fun getRelatedSearches_emptyQuery_manyDuplicates() { + insertShuffledRelatedSearches( + listOf( + SearchHistoryEntry(time.minusSeconds(9), 3, "A"), + SearchHistoryEntry(time.minusSeconds(8), 3, "AB"), + SearchHistoryEntry(time.minusSeconds(7), 3, "A"), + SearchHistoryEntry(time.minusSeconds(6), 3, "A"), + SearchHistoryEntry(time.minusSeconds(5), 3, "BA"), + SearchHistoryEntry(time.minusSeconds(4), 3, "A"), + SearchHistoryEntry(time.minusSeconds(3), 3, "A"), + SearchHistoryEntry(time.minusSeconds(2), 0, "A"), + SearchHistoryEntry(time.minusSeconds(1), 2, "AA"), + ) ) + val searches = manager.getRelatedSearches("", 9, 3).blockingFirst() + assertThat(searches).containsExactly("AA", "A", "BA") + } + + @Test + fun getRelatedSearched_nonEmptyQuery() { + insertShuffledRelatedSearches(RELATED_SEARCHES_ENTRIES) + // make sure correct number of searches is returned and in correct order val searches = manager.getRelatedSearches("A", 3, 5).blockingFirst() assertThat(searches).containsExactly( diff --git a/app/src/debug/java/org/schabi/newpipe/settings/DebugSettingsBVDLeakCanary.java b/app/src/debug/java/org/schabi/newpipe/settings/DebugSettingsBVDLeakCanary.java new file mode 100644 index 000000000..a2d65f6f4 --- /dev/null +++ b/app/src/debug/java/org/schabi/newpipe/settings/DebugSettingsBVDLeakCanary.java @@ -0,0 +1,20 @@ +package org.schabi.newpipe.settings; + +import android.content.Intent; + +import leakcanary.LeakCanary; + +/** + * Build variant dependent (BVD) leak canary API implementation for the debug settings fragment. + * This class is loaded via reflection by + * {@link DebugSettingsFragment.DebugSettingsBVDLeakCanaryAPI}. + */ +@SuppressWarnings("unused") // Class is used but loaded via reflection +public class DebugSettingsBVDLeakCanary + implements DebugSettingsFragment.DebugSettingsBVDLeakCanaryAPI { + + @Override + public Intent getNewLeakDisplayActivityIntent() { + return LeakCanary.INSTANCE.newLeakDisplayActivityIntent(); + } +} diff --git a/app/src/main/java/org/apache/commons/text/similarity/FuzzyScore.java b/app/src/main/java/org/apache/commons/text/similarity/FuzzyScore.java new file mode 100644 index 000000000..bbab7fd78 --- /dev/null +++ b/app/src/main/java/org/apache/commons/text/similarity/FuzzyScore.java @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.text.similarity; + +import java.util.Locale; + +/** + * A matching algorithm that is similar to the searching algorithms implemented in editors such + * as Sublime Text, TextMate, Atom and others. + * + *

+ * One point is given for every matched character. Subsequent matches yield two bonus points. + * A higher score indicates a higher similarity. + *

+ * + *

+ * This code has been adapted from Apache Commons Lang 3.3. + *

+ * + * @since 1.0 + * + * Note: This class was forked from + * + * apache/commons-text (8cfdafc) FuzzyScore.java + * + */ +public class FuzzyScore { + + /** + * Locale used to change the case of text. + */ + private final Locale locale; + + + /** + * This returns a {@link Locale}-specific {@link FuzzyScore}. + * + * @param locale The string matching logic is case insensitive. + A {@link Locale} is necessary to normalize both Strings to lower case. + * @throws IllegalArgumentException + * This is thrown if the {@link Locale} parameter is {@code null}. + */ + public FuzzyScore(final Locale locale) { + if (locale == null) { + throw new IllegalArgumentException("Locale must not be null"); + } + this.locale = locale; + } + + /** + * Find the Fuzzy Score which indicates the similarity score between two + * Strings. + * + *
+     * score.fuzzyScore(null, null)                          = IllegalArgumentException
+     * score.fuzzyScore("not null", null)                    = IllegalArgumentException
+     * score.fuzzyScore(null, "not null")                    = IllegalArgumentException
+     * score.fuzzyScore("", "")                              = 0
+     * score.fuzzyScore("Workshop", "b")                     = 0
+     * score.fuzzyScore("Room", "o")                         = 1
+     * score.fuzzyScore("Workshop", "w")                     = 1
+     * score.fuzzyScore("Workshop", "ws")                    = 2
+     * score.fuzzyScore("Workshop", "wo")                    = 4
+     * score.fuzzyScore("Apache Software Foundation", "asf") = 3
+     * 
+ * + * @param term a full term that should be matched against, must not be null + * @param query the query that will be matched against a term, must not be + * null + * @return result score + * @throws IllegalArgumentException if the term or query is {@code null} + */ + public Integer fuzzyScore(final CharSequence term, final CharSequence query) { + if (term == null || query == null) { + throw new IllegalArgumentException("CharSequences must not be null"); + } + + // fuzzy logic is case insensitive. We normalize the Strings to lower + // case right from the start. Turning characters to lower case + // via Character.toLowerCase(char) is unfortunately insufficient + // as it does not accept a locale. + final String termLowerCase = term.toString().toLowerCase(locale); + final String queryLowerCase = query.toString().toLowerCase(locale); + + // the resulting score + int score = 0; + + // the position in the term which will be scanned next for potential + // query character matches + int termIndex = 0; + + // index of the previously matched character in the term + int previousMatchingCharacterIndex = Integer.MIN_VALUE; + + for (int queryIndex = 0; queryIndex < queryLowerCase.length(); queryIndex++) { + final char queryChar = queryLowerCase.charAt(queryIndex); + + boolean termCharacterMatchFound = false; + for (; termIndex < termLowerCase.length() + && !termCharacterMatchFound; termIndex++) { + final char termChar = termLowerCase.charAt(termIndex); + + if (queryChar == termChar) { + // simple character matches result in one point + score++; + + // subsequent character matches further improve + // the score. + if (previousMatchingCharacterIndex + 1 == termIndex) { + score += 2; + } + + previousMatchingCharacterIndex = termIndex; + + // we can leave the nested loop. Every character in the + // query can match at most one character in the term. + termCharacterMatchFound = true; + } + } + } + + return score; + } + + /** + * Gets the locale. + * + * @return The locale + */ + public Locale getLocale() { + return locale; + } + +} diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java index 26b50855e..6b02e21ca 100644 --- a/app/src/main/java/org/schabi/newpipe/App.java +++ b/app/src/main/java/org/schabi/newpipe/App.java @@ -13,13 +13,8 @@ import androidx.preference.PreferenceManager; import com.jakewharton.processphoenix.ProcessPhoenix; import org.acra.ACRA; -import org.acra.config.ACRAConfigurationException; -import org.acra.config.CoreConfiguration; import org.acra.config.CoreConfigurationBuilder; -import org.schabi.newpipe.error.ErrorInfo; -import org.schabi.newpipe.error.ErrorUtil; import org.schabi.newpipe.error.ReCaptchaActivity; -import org.schabi.newpipe.error.UserAction; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.downloader.Downloader; import org.schabi.newpipe.ktx.ExceptionUtils; @@ -210,16 +205,9 @@ public class App extends MultiDexApplication { return; } - try { - final CoreConfiguration acraConfig = new CoreConfigurationBuilder(this) - .setBuildConfigClass(BuildConfig.class) - .build(); - ACRA.init(this, acraConfig); - } catch (final ACRAConfigurationException exception) { - exception.printStackTrace(); - ErrorUtil.openActivity(this, new ErrorInfo(exception, - UserAction.SOMETHING_ELSE, "Could not initialize ACRA crash report")); - } + final CoreConfigurationBuilder acraConfig = new CoreConfigurationBuilder(this) + .withBuildConfigClass(BuildConfig.class); + ACRA.init(this, acraConfig); } private void initNotificationChannels() { diff --git a/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java b/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java index fcad0b612..fde006a60 100644 --- a/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java +++ b/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java @@ -14,6 +14,7 @@ import org.schabi.newpipe.local.dialog.PlaylistDialog; import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueueItem; import org.schabi.newpipe.util.NavigationHelper; +import org.schabi.newpipe.util.SaveUploaderUrlHelper; import java.util.Collections; @@ -61,11 +62,13 @@ public final class QueueItemMenuUtil { return true; case R.id.menu_item_channel_details: - // An intent must be used here. - // Opening with FragmentManager transactions is not working, - // as PlayQueueActivity doesn't use fragments. - NavigationHelper.openChannelFragmentUsingIntent(context, item.getServiceId(), - item.getUploaderUrl(), item.getUploader()); + SaveUploaderUrlHelper.saveUploaderUrlIfNeeded(context, item, + // An intent must be used here. + // Opening with FragmentManager transactions is not working, + // as PlayQueueActivity doesn't use fragments. + uploaderUrl -> NavigationHelper.openChannelFragmentUsingIntent( + context, item.getServiceId(), uploaderUrl, item.getUploader() + )); return true; case R.id.menu_item_share: shareText(context, item.getTitle(), item.getUrl(), diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt index a8fdcae26..1e5bd8799 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt @@ -185,7 +185,11 @@ class AboutActivity : AppCompatActivity() { SoftwareComponent( "RxJava", "2016 - 2020", "RxJava Contributors", "https://github.com/ReactiveX/RxJava", StandardLicenses.APACHE2 - ) + ), + SoftwareComponent( + "SearchPreference", "2018", "ByteHamster", + "https://github.com/ByteHamster/SearchPreference", StandardLicenses.MIT + ), ) private const val POS_ABOUT = 0 private const val POS_LICENSE = 1 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 05630ef79..2d9abc6dc 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 @@ -500,6 +500,10 @@ public final class VideoDetailFragment break; case R.id.detail_thumbnail_root_layout: autoPlayEnabled = true; // forcefully start playing + // FIXME Workaround #7427 + if (isPlayerAvailable()) { + player.setRecovery(); + } openVideoPlayerAutoFullscreen(); break; case R.id.detail_title_root_layout: diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java index 4319d42ee..3c2e65bb7 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java @@ -352,7 +352,7 @@ public abstract class BaseListFragment extends BaseStateFragment } final List entries = new ArrayList<>(); - if (PlayerHolder.getInstance().isPlayerOpen()) { + if (PlayerHolder.getInstance().isPlayQueueReady()) { entries.add(StreamDialogEntry.enqueue); if (PlayerHolder.getInstance().getQueueSize() > 1) { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java index 85c47ec74..640d08064 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java @@ -149,7 +149,7 @@ public class PlaylistFragment extends BaseListInfoFragment { final ArrayList entries = new ArrayList<>(); - if (PlayerHolder.getInstance().isPlayerOpen()) { + if (PlayerHolder.getInstance().isPlayQueueReady()) { entries.add(StreamDialogEntry.enqueue); if (PlayerHolder.getInstance().getQueueSize() > 1) { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index 15424334d..055c27733 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -25,7 +25,6 @@ import android.view.View; import android.view.ViewGroup; import android.view.animation.DecelerateInterpolator; import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; @@ -34,7 +33,6 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.TooltipCompat; -import androidx.core.content.ContextCompat; import androidx.core.text.HtmlCompat; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.ItemTouchHelper; @@ -65,6 +63,7 @@ import org.schabi.newpipe.settings.NewPipeSettings; import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.ExtractorHelper; +import org.schabi.newpipe.util.KeyboardUtil; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.ServiceHelper; @@ -670,31 +669,15 @@ public class SearchFragment extends BaseListFragment animateAlpha(enterOrExit, duration, delay, execOnEnd) AnimationType.SCALE_AND_ALPHA -> animateScaleAndAlpha(enterOrExit, duration, delay, execOnEnd) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt index 905290b48..e6da0d545 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt @@ -362,7 +362,7 @@ class FeedFragment : BaseStateFragment() { if (context == null || context.resources == null || activity == null) return val entries = ArrayList() - if (PlayerHolder.getInstance().isPlayerOpen) { + if (PlayerHolder.getInstance().isPlayQueueReady) { entries.add(StreamDialogEntry.enqueue) if (PlayerHolder.getInstance().queueSize > 1) { diff --git a/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java index 43a5fcf3c..73682d5d5 100644 --- a/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java @@ -338,7 +338,7 @@ public class StatisticsPlaylistFragment final ArrayList entries = new ArrayList<>(); - if (PlayerHolder.getInstance().isPlayerOpen()) { + if (PlayerHolder.getInstance().isPlayQueueReady()) { entries.add(StreamDialogEntry.enqueue); if (PlayerHolder.getInstance().getQueueSize() > 1) { 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 87d913b3b..feb5b2f96 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 @@ -753,7 +753,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment entries = new ArrayList<>(); - if (PlayerHolder.getInstance().isPlayerOpen()) { + if (PlayerHolder.getInstance().isPlayQueueReady()) { entries.add(StreamDialogEntry.enqueue); if (PlayerHolder.getInstance().getQueueSize() > 1) { diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 81ef25db1..e0debc4e7 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -51,9 +51,6 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.animation.ObjectAnimator; -import android.animation.PropertyValuesHolder; -import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; @@ -154,6 +151,7 @@ import org.schabi.newpipe.info_list.StreamSegmentAdapter; import org.schabi.newpipe.ktx.AnimationType; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.player.MainPlayer.PlayerType; +import org.schabi.newpipe.player.event.DisplayPortion; import org.schabi.newpipe.player.event.PlayerEventListener; import org.schabi.newpipe.player.event.PlayerGestureListener; import org.schabi.newpipe.player.event.PlayerServiceEventListener; @@ -188,6 +186,7 @@ import org.schabi.newpipe.util.StreamTypeUtil; import org.schabi.newpipe.util.external_communication.KoreUtils; import org.schabi.newpipe.util.external_communication.ShareUtils; import org.schabi.newpipe.views.ExpandableSurfaceView; +import org.schabi.newpipe.views.player.PlayerFastSeekOverlay; import java.io.IOException; import java.util.ArrayList; @@ -247,6 +246,7 @@ public final class Player implements public static final int DEFAULT_CONTROLS_DURATION = 300; // 300 millis public static final int DEFAULT_CONTROLS_HIDE_TIME = 2000; // 2 Seconds public static final int DPAD_CONTROLS_HIDE_TIME = 7000; // 7 Seconds + public static final int SEEK_OVERLAY_DURATION = 450; // 450 millis /*////////////////////////////////////////////////////////////////////////// // Other constants @@ -260,7 +260,8 @@ public final class Player implements // Playback //////////////////////////////////////////////////////////////////////////*/ - private PlayQueue playQueue; + // play queue might be null e.g. while player is starting + @Nullable private PlayQueue playQueue; private PlayQueueAdapter playQueueAdapter; private StreamSegmentAdapter segmentAdapter; @@ -313,7 +314,6 @@ public final class Player implements private PlayerBinding binding; - private ValueAnimator controlViewAnimator; private final Handler controlsVisibilityHandler = new Handler(); // fullscreen player @@ -365,6 +365,7 @@ public final class Player implements private int maxGestureLength; // scaled private GestureDetectorCompat gestureDetector; + private PlayerGestureListener playerGestureListener; /*////////////////////////////////////////////////////////////////////////// // Listeners and disposables @@ -449,6 +450,8 @@ public final class Player implements initPlayer(true); } initListeners(); + + setupPlayerSeekOverlay(); } private void initViews(@NonNull final PlayerBinding playerBinding) { @@ -525,9 +528,9 @@ public final class Player implements binding.resizeTextView.setOnClickListener(this); binding.playbackLiveSync.setOnClickListener(this); - final PlayerGestureListener listener = new PlayerGestureListener(this, service); - gestureDetector = new GestureDetectorCompat(context, listener); - binding.getRoot().setOnTouchListener(listener); + playerGestureListener = new PlayerGestureListener(this, service); + gestureDetector = new GestureDetectorCompat(context, playerGestureListener); + binding.getRoot().setOnTouchListener(playerGestureListener); binding.queueButton.setOnClickListener(this); binding.segmentsButton.setOnClickListener(this); @@ -569,15 +572,83 @@ public final class Player implements }); // PlaybackControlRoot already consumed window insets but we should pass them to - // player_overlays too. Without it they will be off-centered + // player_overlays and fast_seek_overlay too. Without it they will be off-centered. binding.playbackControlRoot.addOnLayoutChangeListener( - (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> - binding.playerOverlays.setPadding( - v.getPaddingLeft(), - v.getPaddingTop(), - v.getPaddingRight(), - v.getPaddingBottom())); + (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { + binding.playerOverlays.setPadding( + v.getPaddingLeft(), + v.getPaddingTop(), + v.getPaddingRight(), + v.getPaddingBottom()); + binding.fastSeekOverlay.setPadding( + v.getPaddingLeft(), + v.getPaddingTop(), + v.getPaddingRight(), + v.getPaddingBottom()); + }); } + + /** + * Initializes the Fast-For/Backward overlay. + */ + private void setupPlayerSeekOverlay() { + binding.fastSeekOverlay + .seekSecondsSupplier( + () -> (int) (retrieveSeekDurationFromPreferences(this) / 1000.0f)) + .performListener(new PlayerFastSeekOverlay.PerformListener() { + + @Override + public void onDoubleTap() { + animate(binding.fastSeekOverlay, true, SEEK_OVERLAY_DURATION); + } + + @Override + public void onDoubleTapEnd() { + animate(binding.fastSeekOverlay, false, SEEK_OVERLAY_DURATION); + } + + @Override + public FastSeekDirection getFastSeekDirection( + @NonNull final DisplayPortion portion + ) { + if (exoPlayerIsNull()) { + // Abort seeking + playerGestureListener.endMultiDoubleTap(); + return FastSeekDirection.NONE; + } + if (portion == DisplayPortion.LEFT) { + // Check if it's possible to rewind + // Small puffer to eliminate infinite rewind seeking + if (simpleExoPlayer.getCurrentPosition() < 500L) { + return FastSeekDirection.NONE; + } + return FastSeekDirection.BACKWARD; + } else if (portion == DisplayPortion.RIGHT) { + // Check if it's possible to fast-forward + if (currentState == STATE_COMPLETED + || simpleExoPlayer.getCurrentPosition() + >= simpleExoPlayer.getDuration()) { + return FastSeekDirection.NONE; + } + return FastSeekDirection.FORWARD; + } + /* portion == DisplayPortion.MIDDLE */ + return FastSeekDirection.NONE; + } + + @Override + public void seek(final boolean forward) { + playerGestureListener.keepInDoubleTapMode(); + if (forward) { + fastForward(); + } else { + fastRewind(); + } + } + }); + playerGestureListener.doubleTapControls(binding.fastSeekOverlay); + } + //endregion @@ -1796,71 +1867,6 @@ public final class Player implements return binding != null && binding.playbackControlRoot.getVisibility() == View.VISIBLE; } - /** - * Show a animation, and depending on goneOnEnd, will stay on the screen or be gone. - * - * @param drawableId the drawable that will be used to animate, - * pass -1 to clear any animation that is visible - * @param goneOnEnd will set the animation view to GONE on the end of the animation - */ - public void showAndAnimateControl(final int drawableId, final boolean goneOnEnd) { - if (DEBUG) { - Log.d(TAG, "showAndAnimateControl() called with: " - + "drawableId = [" + drawableId + "], goneOnEnd = [" + goneOnEnd + "]"); - } - if (controlViewAnimator != null && controlViewAnimator.isRunning()) { - if (DEBUG) { - Log.d(TAG, "showAndAnimateControl: controlViewAnimator.isRunning"); - } - controlViewAnimator.end(); - } - - if (drawableId == -1) { - if (binding.controlAnimationView.getVisibility() == View.VISIBLE) { - controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder( - binding.controlAnimationView, - PropertyValuesHolder.ofFloat(View.ALPHA, 1.0f, 0.0f), - PropertyValuesHolder.ofFloat(View.SCALE_X, 1.4f, 1.0f), - PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.4f, 1.0f) - ).setDuration(DEFAULT_CONTROLS_DURATION); - controlViewAnimator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(final Animator animation) { - binding.controlAnimationView.setVisibility(View.GONE); - } - }); - controlViewAnimator.start(); - } - return; - } - - final float scaleFrom = goneOnEnd ? 1f : 1f; - final float scaleTo = goneOnEnd ? 1.8f : 1.4f; - final float alphaFrom = goneOnEnd ? 1f : 0f; - final float alphaTo = goneOnEnd ? 0f : 1f; - - - controlViewAnimator = ObjectAnimator.ofPropertyValuesHolder( - binding.controlAnimationView, - PropertyValuesHolder.ofFloat(View.ALPHA, alphaFrom, alphaTo), - PropertyValuesHolder.ofFloat(View.SCALE_X, scaleFrom, scaleTo), - PropertyValuesHolder.ofFloat(View.SCALE_Y, scaleFrom, scaleTo) - ); - controlViewAnimator.setDuration(goneOnEnd ? 1000 : 500); - controlViewAnimator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(final Animator animation) { - binding.controlAnimationView.setVisibility(goneOnEnd ? View.GONE : View.VISIBLE); - } - }); - - - binding.controlAnimationView.setVisibility(View.VISIBLE); - binding.controlAnimationView.setImageDrawable( - AppCompatResources.getDrawable(context, drawableId)); - controlViewAnimator.start(); - } - public void showControlsThenHide() { if (DEBUG) { Log.d(TAG, "showControlsThenHide() called"); @@ -1905,6 +1911,7 @@ public final class Player implements } private void showHideShadow(final boolean show, final long duration) { + animate(binding.playbackControlsShadow, show, duration, AnimationType.ALPHA, 0, null); animate(binding.playerTopShadow, show, duration, AnimationType.ALPHA, 0, null); animate(binding.playerBottomShadow, show, duration, AnimationType.ALPHA, 0, null); } @@ -2048,7 +2055,7 @@ public final class Player implements if (currentState == STATE_BLOCKED) { changeState(STATE_BUFFERING); } - simpleExoPlayer.setMediaSource(mediaSource); + simpleExoPlayer.setMediaSource(mediaSource, false); simpleExoPlayer.prepare(); } @@ -2102,8 +2109,8 @@ public final class Player implements startProgressLoop(); } - controlsVisibilityHandler.removeCallbacksAndMessages(null); - animate(binding.playbackControlRoot, false, DEFAULT_CONTROLS_DURATION); + // if we are e.g. switching players, hide controls + hideControls(DEFAULT_CONTROLS_DURATION, 0); binding.playbackSeekBar.setEnabled(false); binding.playbackSeekBar.getThumb() @@ -2130,8 +2137,6 @@ public final class Player implements updateStreamRelatedViews(); - showAndAnimateControl(-1, true); - binding.playbackSeekBar.setEnabled(true); binding.playbackSeekBar.getThumb() .setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_IN)); @@ -2179,18 +2184,21 @@ public final class Player implements stopProgressLoop(); } - showControls(400); - binding.loadingPanel.setVisibility(View.GONE); - - animate(binding.playPauseButton, false, 80, AnimationType.SCALE_AND_ALPHA, 0, - () -> { - binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow); - animatePlayButtons(true, 200); - if (!isQueueVisible) { - binding.playPauseButton.requestFocus(); - } - }); + // Don't let UI elements popup during double tap seeking. This state is entered sometimes + // during seeking/loading. This if-else check ensures that the controls aren't popping up. + if (!playerGestureListener.isDoubleTapping()) { + showControls(400); + binding.loadingPanel.setVisibility(View.GONE); + animate(binding.playPauseButton, false, 80, AnimationType.SCALE_AND_ALPHA, 0, + () -> { + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow); + animatePlayButtons(true, 200); + if (!isQueueVisible) { + binding.playPauseButton.requestFocus(); + } + }); + } changePopupWindowFlags(IDLE_WINDOW_FLAGS); // Remove running notification when user does not want minimization to background or popup @@ -2208,7 +2216,6 @@ public final class Player implements if (DEBUG) { Log.d(TAG, "onPausedSeek() called"); } - showAndAnimateControl(-1, true); animatePlayButtons(false, 100); binding.getRoot().setKeepScreenOn(true); @@ -2517,23 +2524,11 @@ public final class Player implements Log.e(TAG, "ExoPlayer - onPlayerError() called with:", error); saveStreamProgressState(); - - // create error notification - final ErrorInfo errorInfo; - if (currentMetadata == null) { - errorInfo = new ErrorInfo(error, UserAction.PLAY_STREAM, - "Player error[type=" + error.type + "] occurred, currentMetadata is null"); - } else { - errorInfo = new ErrorInfo(error, UserAction.PLAY_STREAM, - "Player error[type=" + error.type + "] occurred while playing " - + currentMetadata.getMetadata().getUrl(), - currentMetadata.getMetadata()); - } - ErrorUtil.createNotification(context, errorInfo); + boolean isCatchableException = false; switch (error.type) { case ExoPlaybackException.TYPE_SOURCE: - processSourceError(error.getSourceException()); + isCatchableException = processSourceError(error.getSourceException()); break; case ExoPlaybackException.TYPE_UNEXPECTED: setRecovery(); @@ -2546,22 +2541,60 @@ public final class Player implements break; } + if (isCatchableException) { + return; + } + + createErrorNotification(error); + if (fragmentListener != null) { fragmentListener.onPlayerError(error); } } - private void processSourceError(final IOException error) { - if (exoPlayerIsNull() || playQueue == null) { - return; + private void createErrorNotification(@NonNull final ExoPlaybackException error) { + final ErrorInfo errorInfo; + if (currentMetadata == null) { + errorInfo = new ErrorInfo(error, UserAction.PLAY_STREAM, + "Player error[type=" + error.type + "] occurred, currentMetadata is null"); + } else { + errorInfo = new ErrorInfo(error, UserAction.PLAY_STREAM, + "Player error[type=" + error.type + "] occurred while playing " + + currentMetadata.getMetadata().getUrl(), + currentMetadata.getMetadata()); } + ErrorUtil.createNotification(context, errorInfo); + } + + /** + * Process an {@link IOException} returned by {@link ExoPlaybackException#getSourceException()} + * for {@link ExoPlaybackException#TYPE_SOURCE} exceptions. + * + *

+ * This method sets the recovery position and sends an error message to the play queue if the + * exception is not a {@link BehindLiveWindowException}. + *

+ * @param error the source error which was thrown by ExoPlayer + * @return whether the exception thrown is a {@link BehindLiveWindowException} ({@code false} + * is always returned if ExoPlayer or the play queue is null) + */ + private boolean processSourceError(final IOException error) { + if (exoPlayerIsNull() || playQueue == null) { + return false; + } + setRecovery(); if (error instanceof BehindLiveWindowException) { - reloadPlayQueueManager(); - } else { - playQueue.error(); + simpleExoPlayer.seekToDefaultPosition(); + simpleExoPlayer.prepare(); + // Inform the user that we are reloading the stream by switching to the buffering state + onBuffering(); + return true; } + + playQueue.error(); + return false; } //endregion @@ -2838,7 +2871,6 @@ public final class Player implements } seekBy(retrieveSeekDurationFromPreferences(this)); triggerProgressUpdate(); - showAndAnimateControl(R.drawable.ic_fast_forward, true); } public void fastRewind() { @@ -2847,7 +2879,6 @@ public final class Player implements } seekBy(-retrieveSeekDurationFromPreferences(this)); triggerProgressUpdate(); - showAndAnimateControl(R.drawable.ic_fast_rewind, true); } //endregion @@ -4202,6 +4233,7 @@ public final class Player implements } + @Nullable public PlayQueue getPlayQueue() { return playQueue; } @@ -4279,6 +4311,10 @@ public final class Player implements return binding.currentDisplaySeek; } + public PlayerFastSeekOverlay getFastSeekOverlay() { + return binding.fastSeekOverlay; + } + @Nullable public WindowManager.LayoutParams getPopupLayoutParams() { return popupLayoutParams; diff --git a/app/src/main/java/org/schabi/newpipe/player/event/BasePlayerGestureListener.kt b/app/src/main/java/org/schabi/newpipe/player/event/BasePlayerGestureListener.kt index 29ae7c5c3..c89eabb47 100644 --- a/app/src/main/java/org/schabi/newpipe/player/event/BasePlayerGestureListener.kt +++ b/app/src/main/java/org/schabi/newpipe/player/event/BasePlayerGestureListener.kt @@ -411,7 +411,7 @@ abstract class BasePlayerGestureListener( var doubleTapControls: DoubleTapListener? = null private set - val isDoubleTapEnabled: Boolean + private val isDoubleTapEnabled: Boolean get() = doubleTapDelay > 0 var isDoubleTapping = false @@ -459,10 +459,6 @@ abstract class BasePlayerGestureListener( doubleTapControls?.onDoubleTapFinished() } - fun enableMultiDoubleTap(enable: Boolean) = apply { - doubleTapDelay = if (enable) DOUBLE_TAP_DELAY else 0 - } - // /////////////////////////////////////////////////////////////////// // Utils // /////////////////////////////////////////////////////////////////// diff --git a/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java b/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java index 25ace1c05..794fe9b3c 100644 --- a/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java +++ b/app/src/main/java/org/schabi/newpipe/player/event/PlayerGestureListener.java @@ -55,12 +55,10 @@ public class PlayerGestureListener player.hideControls(0, 0); } - if (portion == DisplayPortion.LEFT) { - player.fastRewind(); + if (portion == DisplayPortion.LEFT || portion == DisplayPortion.RIGHT) { + startMultiDoubleTap(event); } else if (portion == DisplayPortion.MIDDLE) { player.playPause(); - } else if (portion == DisplayPortion.RIGHT) { - player.fastForward(); } } @@ -232,10 +230,10 @@ public class PlayerGestureListener if (DEBUG) { Log.d(TAG, "onPopupResizingStart called"); } - player.showAndAnimateControl(-1, true); player.getLoadingPanel().setVisibility(View.GONE); player.hideControls(0, 0); + animate(player.getFastSeekOverlay(), false, 0); animate(player.getCurrentDisplaySeek(), false, 0, ALPHA, 0); } diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java index 708b72ff2..a2f0d7149 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerDataSource.java @@ -9,6 +9,7 @@ import com.google.android.exoplayer2.source.SingleSampleMediaSource; import com.google.android.exoplayer2.source.dash.DashMediaSource; import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource; import com.google.android.exoplayer2.source.hls.HlsMediaSource; +import com.google.android.exoplayer2.source.hls.playlist.DefaultHlsPlaylistTracker; import com.google.android.exoplayer2.source.smoothstreaming.DefaultSsChunkSource; import com.google.android.exoplayer2.source.smoothstreaming.SsMediaSource; import com.google.android.exoplayer2.upstream.DataSource; @@ -17,9 +18,18 @@ import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy; import com.google.android.exoplayer2.upstream.TransferListener; public class PlayerDataSource { + + public static final int LIVE_STREAM_EDGE_GAP_MILLIS = 10000; + + /** + * An approximately 4.3 times greater value than the + * {@link DefaultHlsPlaylistTracker#DEFAULT_PLAYLIST_STUCK_TARGET_DURATION_COEFFICIENT default} + * to ensure that (very) low latency livestreams which got stuck for a moment don't crash too + * early. + */ + private static final double PLAYLIST_STUCK_TARGET_DURATION_COEFFICIENT = 15; private static final int MANIFEST_MINIMUM_RETRY = 5; private static final int EXTRACTOR_MINIMUM_RETRY = Integer.MAX_VALUE; - public static final int LIVE_STREAM_EDGE_GAP_MILLIS = 10000; private final DataSource.Factory cacheDataSourceFactory; private final DataSource.Factory cachelessDataSourceFactory; @@ -44,8 +54,13 @@ public class PlayerDataSource { public HlsMediaSource.Factory getLiveHlsMediaSourceFactory() { return new HlsMediaSource.Factory(cachelessDataSourceFactory) .setAllowChunklessPreparation(true) - .setLoadErrorHandlingPolicy( - new DefaultLoadErrorHandlingPolicy(MANIFEST_MINIMUM_RETRY)); + .setLoadErrorHandlingPolicy(new DefaultLoadErrorHandlingPolicy( + MANIFEST_MINIMUM_RETRY)) + .setPlaylistTrackerFactory((dataSourceFactory, loadErrorHandlingPolicy, + playlistParserFactory) -> + new DefaultHlsPlaylistTracker(dataSourceFactory, loadErrorHandlingPolicy, + playlistParserFactory, PLAYLIST_STUCK_TARGET_DURATION_COEFFICIENT) + ); } public DashMediaSource.Factory getLiveDashMediaSourceFactory() { diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java index 10e315667..06a2e52ab 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java @@ -38,12 +38,12 @@ public final class PlayerHolder { private static final boolean DEBUG = MainActivity.DEBUG; private static final String TAG = PlayerHolder.class.getSimpleName(); - private PlayerServiceExtendedEventListener listener; + @Nullable private PlayerServiceExtendedEventListener listener; private final PlayerServiceConnection serviceConnection = new PlayerServiceConnection(); private boolean bound; - private MainPlayer playerService; - private Player player; + @Nullable private MainPlayer playerService; + @Nullable private Player player; /** * Returns the current {@link MainPlayer.PlayerType} of the {@link MainPlayer} service, @@ -70,12 +70,25 @@ public final class PlayerHolder { return player != null; } + /** + * Use this method to only allow the user to manipulate the play queue (e.g. by enqueueing via + * the stream long press menu) when there actually is a play queue to manipulate. + * @return true only if the player is open and its play queue is ready (i.e. it is not null) + */ + public boolean isPlayQueueReady() { + return player != null && player.getPlayQueue() != null; + } + public boolean isBound() { return bound; } public int getQueueSize() { - return isPlayerOpen() ? player.getPlayQueue().size() : 0; + if (player == null || player.getPlayQueue() == null) { + // player play queue might be null e.g. while player is starting + return 0; + } + return player.getPlayQueue().size(); } public void setListener(@Nullable final PlayerServiceExtendedEventListener newListener) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java index e363469c8..e08562908 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java @@ -2,7 +2,6 @@ package org.schabi.newpipe.settings; import android.content.ActivityNotFoundException; import android.content.Intent; -import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.widget.Toast; @@ -15,14 +14,10 @@ import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.ThemeHelper; public class AppearanceSettingsFragment extends BasePreferenceFragment { - private static final boolean CAPTIONING_SETTINGS_ACCESSIBLE = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; - - private String captionSettingsKey; @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { - addPreferencesFromResource(R.xml.appearance_settings); + addPreferencesFromResourceRegistry(); final String themeKey = getString(R.string.theme_key); // the key of the active theme when settings were opened (or recreated after theme change) @@ -51,16 +46,11 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment { } else { removePreference(nightThemeKey); } - - captionSettingsKey = getString(R.string.caption_settings_key); - if (!CAPTIONING_SETTINGS_ACCESSIBLE) { - removePreference(captionSettingsKey); - } } @Override public boolean onPreferenceTreeClick(final Preference preference) { - if (captionSettingsKey.equals(preference.getKey()) && CAPTIONING_SETTINGS_ACCESSIBLE) { + if (preference.getKey().equals(getString(R.string.caption_settings_key))) { try { startActivity(new Intent(Settings.ACTION_CAPTIONING_SETTINGS)); } catch (final ActivityNotFoundException e) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java b/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java index a745861ad..619579f3a 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java @@ -28,6 +28,11 @@ public abstract class BasePreferenceFragment extends PreferenceFragmentCompat { super.onCreate(savedInstanceState); } + protected void addPreferencesFromResourceRegistry() { + addPreferencesFromResource( + SettingsResourceRegistry.getInstance().getPreferencesResId(this.getClass())); + } + @Override public void onViewCreated(@NonNull final View rootView, @Nullable final Bundle savedInstanceState) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java index 1c8eb5cd2..47458ad3f 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java @@ -1,5 +1,8 @@ package org.schabi.newpipe.settings; +import static org.schabi.newpipe.extractor.utils.Utils.isBlank; +import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; + import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -21,7 +24,6 @@ import org.schabi.newpipe.DownloaderImpl; import org.schabi.newpipe.NewPipeDatabase; import org.schabi.newpipe.R; import org.schabi.newpipe.error.ErrorUtil; -import org.schabi.newpipe.error.ReCaptchaActivity; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.localization.ContentCountry; import org.schabi.newpipe.extractor.localization.Localization; @@ -38,9 +40,6 @@ import java.util.Date; import java.util.Locale; import java.util.Objects; -import static org.schabi.newpipe.extractor.utils.Utils.isBlank; -import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; - public class ContentSettingsFragment extends BasePreferenceFragment { private static final String ZIP_MIME_TYPE = "application/zip"; @@ -70,7 +69,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment { importExportDataPathKey = getString(R.string.import_export_data_path); youtubeRestrictedModeEnabledKey = getString(R.string.youtube_restricted_mode_enabled); - addPreferencesFromResource(R.xml.content_settings); + addPreferencesFromResourceRegistry(); final Preference importDataPreference = requirePreference(R.string.import_data); importDataPreference.setOnPreferenceClickListener((Preference p) -> { @@ -105,21 +104,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment { .getPreferredContentCountry(requireContext()); initialLanguage = defaultPreferences.getString(getString(R.string.app_language_key), "en"); - final Preference clearCookiePref = requirePreference(R.string.clear_cookie_key); - clearCookiePref.setOnPreferenceClickListener(preference -> { - defaultPreferences.edit() - .putString(getString(R.string.recaptcha_cookies_key), "").apply(); - DownloaderImpl.getInstance().setCookie(ReCaptchaActivity.RECAPTCHA_COOKIES_KEY, ""); - Toast.makeText(getActivity(), R.string.recaptcha_cookies_cleared, - Toast.LENGTH_SHORT).show(); - clearCookiePref.setVisible(false); - return true; - }); - - if (defaultPreferences.getString(getString(R.string.recaptcha_cookies_key), "").isEmpty()) { - clearCookiePref.setVisible(false); - } - findPreference(getString(R.string.download_thumbnail_key)).setOnPreferenceChangeListener( (preference, newValue) -> { PicassoHelper.setShouldLoadImages((Boolean) newValue); diff --git a/app/src/debug/java/org/schabi/newpipe/settings/DebugSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/DebugSettingsFragment.java similarity index 51% rename from app/src/debug/java/org/schabi/newpipe/settings/DebugSettingsFragment.java rename to app/src/main/java/org/schabi/newpipe/settings/DebugSettingsFragment.java index d8f48784d..dd9f5fb1f 100644 --- a/app/src/debug/java/org/schabi/newpipe/settings/DebugSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/DebugSettingsFragment.java @@ -1,5 +1,6 @@ package org.schabi.newpipe.settings; +import android.content.Intent; import android.os.Bundle; import androidx.preference.Preference; @@ -11,13 +12,17 @@ import org.schabi.newpipe.error.UserAction; import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.local.feed.notifications.NotificationWorker; -import leakcanary.LeakCanary; +import java.util.Optional; public class DebugSettingsFragment extends BasePreferenceFragment { + private static final String DUMMY = "Dummy"; + @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { - addPreferencesFromResource(R.xml.debug_settings); + addPreferencesFromResourceRegistry(); + final Preference allowHeapDumpingPreference + = findPreference(getString(R.string.allow_heap_dumping_key)); final Preference showMemoryLeaksPreference = findPreference(getString(R.string.show_memory_leaks_key)); final Preference showImageIndicatorsPreference @@ -31,6 +36,7 @@ public class DebugSettingsFragment extends BasePreferenceFragment { final Preference createErrorNotificationPreference = findPreference(getString(R.string.create_error_notification_key)); + assert allowHeapDumpingPreference != null; assert showMemoryLeaksPreference != null; assert showImageIndicatorsPreference != null; assert checkNewStreamsPreference != null; @@ -38,10 +44,22 @@ public class DebugSettingsFragment extends BasePreferenceFragment { assert showErrorSnackbarPreference != null; assert createErrorNotificationPreference != null; - showMemoryLeaksPreference.setOnPreferenceClickListener(preference -> { - startActivity(LeakCanary.INSTANCE.newLeakDisplayActivityIntent()); - return true; - }); + final Optional optBVLeakCanary = getBVDLeakCanary(); + + allowHeapDumpingPreference.setEnabled(optBVLeakCanary.isPresent()); + showMemoryLeaksPreference.setEnabled(optBVLeakCanary.isPresent()); + + if (optBVLeakCanary.isPresent()) { + final DebugSettingsBVDLeakCanaryAPI pdLeakCanary = optBVLeakCanary.get(); + + showMemoryLeaksPreference.setOnPreferenceClickListener(preference -> { + startActivity(pdLeakCanary.getNewLeakDisplayActivityIntent()); + return true; + }); + } else { + allowHeapDumpingPreference.setSummary(R.string.leak_canary_not_available); + showMemoryLeaksPreference.setSummary(R.string.leak_canary_not_available); + } showImageIndicatorsPreference.setOnPreferenceChangeListener((preference, newValue) -> { PicassoHelper.setIndicatorsEnabled((Boolean) newValue); @@ -54,19 +72,46 @@ public class DebugSettingsFragment extends BasePreferenceFragment { }); crashTheAppPreference.setOnPreferenceClickListener(preference -> { - throw new RuntimeException(); + throw new RuntimeException(DUMMY); }); showErrorSnackbarPreference.setOnPreferenceClickListener(preference -> { ErrorUtil.showUiErrorSnackbar(DebugSettingsFragment.this, - "Dummy", new RuntimeException("Dummy")); + DUMMY, new RuntimeException(DUMMY)); return true; }); createErrorNotificationPreference.setOnPreferenceClickListener(preference -> { ErrorUtil.createNotification(requireContext(), - new ErrorInfo(new RuntimeException("Dummy"), UserAction.UI_ERROR, "Dummy")); + new ErrorInfo(new RuntimeException(DUMMY), UserAction.UI_ERROR, DUMMY)); return true; }); } + + /** + * Tries to find the {@link DebugSettingsBVDLeakCanaryAPI#IMPL_CLASS} and loads it if available. + * @return An {@link Optional} which is empty if the implementation class couldn't be loaded. + */ + private Optional getBVDLeakCanary() { + try { + // Try to find the implementation of the LeakCanary API + return Optional.of((DebugSettingsBVDLeakCanaryAPI) + Class.forName(DebugSettingsBVDLeakCanaryAPI.IMPL_CLASS) + .getDeclaredConstructor() + .newInstance()); + } catch (final Exception e) { + return Optional.empty(); + } + } + + /** + * Build variant dependent (BVD) leak canary API for this fragment. + * Why is LeakCanary not used directly? Because it can't be assured + */ + public interface DebugSettingsBVDLeakCanaryAPI { + String IMPL_CLASS = + "org.schabi.newpipe.settings.DebugSettingsBVDLeakCanary"; + + Intent getNewLeakDisplayActivityIntent(); + } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java index 681aee409..fe327e1b5 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java @@ -54,7 +54,7 @@ public class DownloadSettingsFragment extends BasePreferenceFragment { @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { - addPreferencesFromResource(R.xml.download_settings); + addPreferencesFromResourceRegistry(); downloadPathVideoPreference = getString(R.string.download_path_video_key); downloadPathAudioPreference = getString(R.string.download_path_audio_key); diff --git a/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java index 33e0ba16b..86e651e2b 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/HistorySettingsFragment.java @@ -8,9 +8,11 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.preference.Preference; +import org.schabi.newpipe.DownloaderImpl; import org.schabi.newpipe.R; import org.schabi.newpipe.error.ErrorInfo; import org.schabi.newpipe.error.ErrorUtil; +import org.schabi.newpipe.error.ReCaptchaActivity; import org.schabi.newpipe.error.UserAction; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.util.InfoCache; @@ -29,7 +31,7 @@ public class HistorySettingsFragment extends BasePreferenceFragment { @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { - addPreferencesFromResource(R.xml.history_settings); + addPreferencesFromResourceRegistry(); cacheWipeKey = getString(R.string.metadata_cache_wipe_key); viewsHistoryClearKey = getString(R.string.clear_views_history_key); @@ -37,6 +39,21 @@ public class HistorySettingsFragment extends BasePreferenceFragment { searchHistoryClearKey = getString(R.string.clear_search_history_key); recordManager = new HistoryRecordManager(getActivity()); disposables = new CompositeDisposable(); + + final Preference clearCookiePref = requirePreference(R.string.clear_cookie_key); + clearCookiePref.setOnPreferenceClickListener(preference -> { + defaultPreferences.edit() + .putString(getString(R.string.recaptcha_cookies_key), "").apply(); + DownloaderImpl.getInstance().setCookie(ReCaptchaActivity.RECAPTCHA_COOKIES_KEY, ""); + Toast.makeText(getActivity(), R.string.recaptcha_cookies_cleared, + Toast.LENGTH_SHORT).show(); + clearCookiePref.setEnabled(false); + return true; + }); + + if (defaultPreferences.getString(getString(R.string.recaptcha_cookies_key), "").isEmpty()) { + clearCookiePref.setEnabled(false); + } } @Override diff --git a/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java index 12599b828..d7fb559d6 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/MainSettingsFragment.java @@ -1,8 +1,11 @@ package org.schabi.newpipe.settings; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; -import androidx.preference.Preference; +import androidx.annotation.NonNull; import org.schabi.newpipe.App; import org.schabi.newpipe.CheckForNewAppVersion; @@ -12,16 +15,58 @@ import org.schabi.newpipe.R; public class MainSettingsFragment extends BasePreferenceFragment { public static final boolean DEBUG = MainActivity.DEBUG; + private SettingsActivity settingsActivity; + @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { - addPreferencesFromResource(R.xml.main_settings); + addPreferencesFromResourceRegistry(); + setHasOptionsMenu(true); // Otherwise onCreateOptionsMenu is not called + + // Check if the app is updatable if (!CheckForNewAppVersion.isReleaseApk(App.getApp())) { - final Preference update - = findPreference(getString(R.string.update_pref_screen_key)); - getPreferenceScreen().removePreference(update); + getPreferenceScreen().removePreference( + findPreference(getString(R.string.update_pref_screen_key))); defaultPreferences.edit().putBoolean(getString(R.string.update_app_key), false).apply(); } + + // Hide debug preferences in RELEASE build variant + if (!DEBUG) { + getPreferenceScreen().removePreference( + findPreference(getString(R.string.debug_pref_screen_key))); + } + } + + @Override + public void onCreateOptionsMenu( + @NonNull final Menu menu, + @NonNull final MenuInflater inflater + ) { + super.onCreateOptionsMenu(menu, inflater); + + // -- Link settings activity and register menu -- + settingsActivity = (SettingsActivity) getActivity(); + + inflater.inflate(R.menu.menu_settings_main_fragment, menu); + + final MenuItem menuSearchItem = menu.getItem(0); + + settingsActivity.setMenuSearchItem(menuSearchItem); + + menuSearchItem.setOnMenuItemClickListener(ev -> { + settingsActivity.setSearchActive(true); + return true; + }); + } + + @Override + public void onDestroy() { + // Unlink activity so that we don't get memory problems + if (settingsActivity != null) { + settingsActivity.setMenuSearchItem(null); + settingsActivity = null; + } + super.onDestroy(); } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/NotificationSettingsFragment.kt b/app/src/main/java/org/schabi/newpipe/settings/NotificationSettingsFragment.kt new file mode 100644 index 000000000..6bea8b69e --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/NotificationSettingsFragment.kt @@ -0,0 +1,19 @@ +package org.schabi.newpipe.settings + +import android.os.Build +import android.os.Bundle +import androidx.preference.Preference +import org.schabi.newpipe.R + +class NotificationSettingsFragment : BasePreferenceFragment() { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + addPreferencesFromResourceRegistry() + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + val colorizePref: Preference? = findPreference(getString(R.string.notification_colorize_key)) + colorizePref?.let { + preferenceScreen.removePreference(it) + } + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/PlayerNotificationSettingsFragment.kt b/app/src/main/java/org/schabi/newpipe/settings/PlayerNotificationSettingsFragment.kt index 1789606d1..3549bff42 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/PlayerNotificationSettingsFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/PlayerNotificationSettingsFragment.kt @@ -7,7 +7,7 @@ import org.schabi.newpipe.R class PlayerNotificationSettingsFragment : BasePreferenceFragment() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - addPreferencesFromResource(R.xml.player_notification_settings) + addPreferencesFromResourceRegistry() if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { val colorizePref: Preference? = findPreference(getString(R.string.notification_colorize_key)) diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java index a766ee074..383390506 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SelectKioskFragment.java @@ -1,6 +1,5 @@ package org.schabi.newpipe.settings; -import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -51,16 +50,11 @@ public class SelectKioskFragment extends DialogFragment { private SelectKioskAdapter selectKioskAdapter = null; private OnSelectedListener onSelectedListener = null; - private OnCancelListener onCancelListener = null; public void setOnSelectedListener(final OnSelectedListener listener) { onSelectedListener = listener; } - public void setOnCancelListener(final OnCancelListener listener) { - onCancelListener = listener; - } - /*////////////////////////////////////////////////////////////////////////// // Init //////////////////////////////////////////////////////////////////////////*/ @@ -91,14 +85,6 @@ public class SelectKioskFragment extends DialogFragment { // Handle actions //////////////////////////////////////////////////////////////////////////*/ - @Override - public void onCancel(@NonNull final DialogInterface dialogInterface) { - super.onCancel(dialogInterface); - if (onCancelListener != null) { - onCancelListener.onCancel(); - } - } - private void clickedItem(final SelectKioskAdapter.Entry entry) { if (onSelectedListener != null) { onSelectedListener.onKioskSelected(entry.serviceId, entry.kioskId, entry.kioskName); @@ -114,10 +100,6 @@ public class SelectKioskFragment extends DialogFragment { void onKioskSelected(int serviceId, String kioskId, String kioskName); } - public interface OnCancelListener { - void onCancel(); - } - private class SelectKioskAdapter extends RecyclerView.Adapter { private final List kioskList = new Vector<>(); diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java index 02e2538c5..7510bb3bc 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java @@ -1,22 +1,49 @@ package org.schabi.newpipe.settings; +import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; + +import android.content.Context; import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import com.jakewharton.rxbinding4.widget.RxTextView; + +import org.schabi.newpipe.App; +import org.schabi.newpipe.CheckForNewAppVersion; +import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; import org.schabi.newpipe.databinding.SettingsLayoutBinding; +import org.schabi.newpipe.settings.preferencesearch.PreferenceParser; +import org.schabi.newpipe.settings.preferencesearch.PreferenceSearchConfiguration; +import org.schabi.newpipe.settings.preferencesearch.PreferenceSearchFragment; +import org.schabi.newpipe.settings.preferencesearch.PreferenceSearchItem; +import org.schabi.newpipe.settings.preferencesearch.PreferenceSearchResultHighlighter; +import org.schabi.newpipe.settings.preferencesearch.PreferenceSearchResultListener; +import org.schabi.newpipe.settings.preferencesearch.PreferenceSearcher; import org.schabi.newpipe.util.DeviceUtils; +import org.schabi.newpipe.util.KeyboardUtil; import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.views.FocusOverlayView; -import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; +import java.util.concurrent.TimeUnit; + +import icepick.Icepick; +import icepick.State; /* * Created by Christian Schabesberger on 31.08.15. @@ -38,21 +65,54 @@ import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; * along with NewPipe. If not, see . */ -public class SettingsActivity extends AppCompatActivity - implements BasePreferenceFragment.OnPreferenceStartFragmentCallback { +public class SettingsActivity extends AppCompatActivity implements + PreferenceFragmentCompat.OnPreferenceStartFragmentCallback, + PreferenceSearchResultListener { + private static final String TAG = "SettingsActivity"; + private static final boolean DEBUG = MainActivity.DEBUG; + + @IdRes + private static final int FRAGMENT_HOLDER_ID = R.id.settings_fragment_holder; + + private PreferenceSearchFragment searchFragment; + + @Nullable + private MenuItem menuSearchItem; + + private View searchContainer; + private EditText searchEditText; + + // State + @State + String searchText; + @State + boolean wasSearchActive; + @Override protected void onCreate(final Bundle savedInstanceBundle) { setTheme(ThemeHelper.getSettingsThemeStyle(this)); assureCorrectAppLanguage(this); + super.onCreate(savedInstanceBundle); + Icepick.restoreInstanceState(this, savedInstanceBundle); + final boolean restored = savedInstanceBundle != null; final SettingsLayoutBinding settingsLayoutBinding = SettingsLayoutBinding.inflate(getLayoutInflater()); setContentView(settingsLayoutBinding.getRoot()); + initSearch(settingsLayoutBinding, restored); setSupportActionBar(settingsLayoutBinding.settingsToolbarLayout.toolbar); - if (savedInstanceBundle == null) { + if (restored) { + // Restore state + if (this.wasSearchActive) { + setSearchActive(true); + if (!TextUtils.isEmpty(this.searchText)) { + this.searchEditText.setText(this.searchText); + } + } + } else { getSupportFragmentManager().beginTransaction() .replace(R.id.settings_fragment_holder, new MainSettingsFragment()) .commit(); @@ -63,6 +123,12 @@ public class SettingsActivity extends AppCompatActivity } } + @Override + protected void onSaveInstanceState(@NonNull final Bundle outState) { + super.onSaveInstanceState(outState); + Icepick.saveInstanceState(this, outState); + } + @Override public boolean onCreateOptionsMenu(final Menu menu) { final ActionBar actionBar = getSupportActionBar(); @@ -74,10 +140,25 @@ public class SettingsActivity extends AppCompatActivity return super.onCreateOptionsMenu(menu); } + @Override + public void onBackPressed() { + if (isSearchActive()) { + setSearchActive(false); + return; + } + super.onBackPressed(); + } + @Override public boolean onOptionsItemSelected(final MenuItem item) { final int id = item.getItemId(); if (id == android.R.id.home) { + // Check if the search is active and if so: Close it + if (isSearchActive()) { + setSearchActive(false); + return true; + } + if (getSupportFragmentManager().getBackStackEntryCount() == 0) { finish(); } else { @@ -91,14 +172,223 @@ public class SettingsActivity extends AppCompatActivity @Override public boolean onPreferenceStartFragment(final PreferenceFragmentCompat caller, final Preference preference) { - final Fragment fragment = Fragment - .instantiate(this, preference.getFragment(), preference.getExtras()); + showSettingsFragment(instantiateFragment(preference.getFragment())); + return true; + } + + private Fragment instantiateFragment(@NonNull final String className) { + return getSupportFragmentManager() + .getFragmentFactory() + .instantiate(this.getClassLoader(), className); + } + + private void showSettingsFragment(final Fragment fragment) { getSupportFragmentManager().beginTransaction() .setCustomAnimations(R.animator.custom_fade_in, R.animator.custom_fade_out, R.animator.custom_fade_in, R.animator.custom_fade_out) - .replace(R.id.settings_fragment_holder, fragment) + .replace(FRAGMENT_HOLDER_ID, fragment) .addToBackStack(null) .commit(); - return true; } + + @Override + protected void onDestroy() { + setMenuSearchItem(null); + searchFragment = null; + super.onDestroy(); + } + + /*////////////////////////////////////////////////////////////////////////// + // Search + //////////////////////////////////////////////////////////////////////////*/ + //region Search + + private void initSearch( + final SettingsLayoutBinding settingsLayoutBinding, + final boolean restored + ) { + searchContainer = + settingsLayoutBinding.settingsToolbarLayout.toolbar + .findViewById(R.id.toolbar_search_container); + + // Configure input field for search + searchEditText = searchContainer.findViewById(R.id.toolbar_search_edit_text); + RxTextView.textChanges(searchEditText) + // Wait some time after the last input before actually searching + .debounce(200, TimeUnit.MILLISECONDS) + .subscribe(v -> runOnUiThread(this::onSearchChanged)); + + // Configure clear button + searchContainer.findViewById(R.id.toolbar_search_clear) + .setOnClickListener(ev -> resetSearchText()); + + ensureSearchRepresentsApplicationState(); + + // Build search configuration using SettingsResourceRegistry + final PreferenceSearchConfiguration config = new PreferenceSearchConfiguration(); + + + // Build search items + final Context searchContext = getApplicationContext(); + assureCorrectAppLanguage(searchContext); + final PreferenceParser parser = new PreferenceParser(searchContext, config); + final PreferenceSearcher searcher = new PreferenceSearcher(config); + + // Find all searchable SettingsResourceRegistry fragments + SettingsResourceRegistry.getInstance().getAllEntries().stream() + .filter(SettingsResourceRegistry.SettingRegistryEntry::isSearchable) + // Get the resId + .map(SettingsResourceRegistry.SettingRegistryEntry::getPreferencesResId) + // Parse + .map(parser::parse) + // Add it to the searcher + .forEach(searcher::add); + + if (restored) { + searchFragment = (PreferenceSearchFragment) getSupportFragmentManager() + .findFragmentByTag(PreferenceSearchFragment.NAME); + if (searchFragment != null) { + // Hide/Remove the search fragment otherwise we get an exception + // when adding it (because it's already present) + hideSearchFragment(); + } + } + if (searchFragment == null) { + searchFragment = new PreferenceSearchFragment(); + } + searchFragment.setSearcher(searcher); + } + + /** + * Ensures that the search shows the correct/available search results. + *
+ * Some features are e.g. only available for debug builds, these should not + * be found when searching inside a release. + */ + private void ensureSearchRepresentsApplicationState() { + // Check if the update settings are available + if (!CheckForNewAppVersion.isReleaseApk(App.getApp())) { + SettingsResourceRegistry.getInstance() + .getEntryByPreferencesResId(R.xml.update_settings) + .setSearchable(false); + } + + // Hide debug preferences in RELEASE build variant + if (DEBUG) { + SettingsResourceRegistry.getInstance() + .getEntryByPreferencesResId(R.xml.debug_settings) + .setSearchable(true); + } + } + + public void setMenuSearchItem(final MenuItem menuSearchItem) { + this.menuSearchItem = menuSearchItem; + + // Ensure that the item is in the correct state when adding it. This is due to + // Android's lifecycle (the Activity is recreated before the Fragment that registers this) + if (menuSearchItem != null) { + menuSearchItem.setVisible(!isSearchActive()); + } + } + + public void setSearchActive(final boolean active) { + if (DEBUG) { + Log.d(TAG, "setSearchActive called active=" + active); + } + + // Ignore if search is already in correct state + if (isSearchActive() == active) { + return; + } + + wasSearchActive = active; + + searchContainer.setVisibility(active ? View.VISIBLE : View.GONE); + if (menuSearchItem != null) { + menuSearchItem.setVisible(!active); + } + + if (active) { + getSupportFragmentManager() + .beginTransaction() + .add(FRAGMENT_HOLDER_ID, searchFragment, PreferenceSearchFragment.NAME) + .addToBackStack(PreferenceSearchFragment.NAME) + .commit(); + + KeyboardUtil.showKeyboard(this, searchEditText); + } else if (searchFragment != null) { + hideSearchFragment(); + getSupportFragmentManager() + .popBackStack( + PreferenceSearchFragment.NAME, + FragmentManager.POP_BACK_STACK_INCLUSIVE); + + KeyboardUtil.hideKeyboard(this, searchEditText); + } + + resetSearchText(); + } + + private void hideSearchFragment() { + getSupportFragmentManager().beginTransaction().remove(searchFragment).commit(); + } + + private void resetSearchText() { + searchEditText.setText(""); + } + + private boolean isSearchActive() { + return searchContainer.getVisibility() == View.VISIBLE; + } + + private void onSearchChanged() { + if (!isSearchActive()) { + return; + } + + if (searchFragment != null) { + searchText = this.searchEditText.getText().toString(); + searchFragment.updateSearchResults(searchText); + } + } + + @Override + public void onSearchResultClicked(@NonNull final PreferenceSearchItem result) { + if (DEBUG) { + Log.d(TAG, "onSearchResultClicked called result=" + result); + } + + // Hide the search + setSearchActive(false); + + // -- Highlight the result -- + // Find out which fragment class we need + final Class targetedFragmentClass = + SettingsResourceRegistry.getInstance() + .getFragmentClass(result.getSearchIndexItemResId()); + + if (targetedFragmentClass == null) { + // This should never happen + Log.w(TAG, "Unable to locate fragment class for resId=" + + result.getSearchIndexItemResId()); + return; + } + + // Check if the currentFragment is the one which contains the result + Fragment currentFragment = + getSupportFragmentManager().findFragmentById(FRAGMENT_HOLDER_ID); + if (!targetedFragmentClass.equals(currentFragment.getClass())) { + // If it's not the correct one display the correct one + currentFragment = instantiateFragment(targetedFragmentClass.getName()); + showSettingsFragment(currentFragment); + } + + // Run the highlighting + if (currentFragment instanceof PreferenceFragmentCompat) { + PreferenceSearchResultHighlighter + .highlight(result, (PreferenceFragmentCompat) currentFragment); + } + } + + //endregion } diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsResourceRegistry.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsResourceRegistry.java new file mode 100644 index 000000000..1d4badcac --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsResourceRegistry.java @@ -0,0 +1,149 @@ +package org.schabi.newpipe.settings; + +import androidx.annotation.NonNull; +import androidx.annotation.XmlRes; +import androidx.fragment.app.Fragment; + +import org.schabi.newpipe.R; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +/** + * A registry that contains information about SettingsFragments. + *
+ * includes: + *
    + *
  • Class of the SettingsFragment
  • + *
  • XML-Resource
  • + *
  • ...
  • + *
+ * + * E.g. used by the preference search. + */ +public final class SettingsResourceRegistry { + + private static final SettingsResourceRegistry INSTANCE = new SettingsResourceRegistry(); + + private final Set registeredEntries = new HashSet<>(); + + private SettingsResourceRegistry() { + add(MainSettingsFragment.class, R.xml.main_settings).setSearchable(false); + + add(AppearanceSettingsFragment.class, R.xml.appearance_settings); + add(ContentSettingsFragment.class, R.xml.content_settings); + add(DebugSettingsFragment.class, R.xml.debug_settings).setSearchable(false); + add(DownloadSettingsFragment.class, R.xml.download_settings); + add(HistorySettingsFragment.class, R.xml.history_settings); + add(NotificationSettingsFragment.class, R.xml.notifications_settings); + add(PlayerNotificationSettingsFragment.class, R.xml.player_notification_settings); + add(UpdateSettingsFragment.class, R.xml.update_settings); + add(VideoAudioSettingsFragment.class, R.xml.video_audio_settings); + } + + private SettingRegistryEntry add( + @NonNull final Class fragmentClass, + @XmlRes final int preferencesResId + ) { + final SettingRegistryEntry entry = + new SettingRegistryEntry(fragmentClass, preferencesResId); + this.registeredEntries.add(entry); + return entry; + } + + public SettingRegistryEntry getEntryByFragmentClass( + final Class fragmentClass + ) { + Objects.requireNonNull(fragmentClass); + return registeredEntries.stream() + .filter(e -> Objects.equals(e.getFragmentClass(), fragmentClass)) + .findFirst() + .orElse(null); + } + + public SettingRegistryEntry getEntryByPreferencesResId(@XmlRes final int preferencesResId) { + return registeredEntries.stream() + .filter(e -> Objects.equals(e.getPreferencesResId(), preferencesResId)) + .findFirst() + .orElse(null); + } + + public int getPreferencesResId(@NonNull final Class fragmentClass) { + final SettingRegistryEntry entry = getEntryByFragmentClass(fragmentClass); + if (entry == null) { + return -1; + } + return entry.getPreferencesResId(); + } + + public Class getFragmentClass(@XmlRes final int preferencesResId) { + final SettingRegistryEntry entry = getEntryByPreferencesResId(preferencesResId); + if (entry == null) { + return null; + } + return entry.getFragmentClass(); + } + + public Set getAllEntries() { + return new HashSet<>(registeredEntries); + } + + public static SettingsResourceRegistry getInstance() { + return INSTANCE; + } + + + public static class SettingRegistryEntry { + @NonNull + private final Class fragmentClass; + @XmlRes + private final int preferencesResId; + + private boolean searchable = true; + + public SettingRegistryEntry( + @NonNull final Class fragmentClass, + @XmlRes final int preferencesResId + ) { + this.fragmentClass = Objects.requireNonNull(fragmentClass); + this.preferencesResId = preferencesResId; + } + + @SuppressWarnings("HiddenField") + public SettingRegistryEntry setSearchable(final boolean searchable) { + this.searchable = searchable; + return this; + } + + public Class getFragmentClass() { + return fragmentClass; + } + + public int getPreferencesResId() { + return preferencesResId; + } + + public boolean isSearchable() { + return searchable; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final SettingRegistryEntry that = (SettingRegistryEntry) o; + return getPreferencesResId() == that.getPreferencesResId() + && getFragmentClass().equals(that.getFragmentClass()); + } + + @Override + public int hashCode() { + return Objects.hash(getFragmentClass(), getPreferencesResId()); + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java index bc183d08a..04bad3815 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java @@ -38,7 +38,7 @@ public class UpdateSettingsFragment extends BasePreferenceFragment { @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { - addPreferencesFromResource(R.xml.update_settings); + addPreferencesFromResourceRegistry(); findPreference(getString(R.string.update_app_key)) .setOnPreferenceChangeListener(updatePreferenceChange); diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index c0d274fe0..039f00c1d 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -23,7 +23,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { - addPreferencesFromResource(R.xml.video_audio_settings); + addPreferencesFromResourceRegistry(); updateSeekOptions(); diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java new file mode 100644 index 000000000..7c231cafb --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java @@ -0,0 +1,111 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import android.text.TextUtils; + +import org.apache.commons.text.similarity.FuzzyScore; + +import java.util.Comparator; +import java.util.Locale; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Stream; + +public class PreferenceFuzzySearchFunction + implements PreferenceSearchConfiguration.PreferenceSearchFunction { + + private static final FuzzyScore FUZZY_SCORE = new FuzzyScore(Locale.ROOT); + + @Override + public Stream search( + final Stream allAvailable, + final String keyword + ) { + final int maxScore = (keyword.length() + 1) * 3 - 2; // First can't get +2 bonus score + + return allAvailable + // General search + // Check all fields if anyone contains something that kind of matches the keyword + .map(item -> new FuzzySearchGeneralDTO(item, keyword)) + .filter(dto -> dto.getScore() / maxScore >= 0.3f) + .map(FuzzySearchGeneralDTO::getItem) + // Specific search - Used for determining order of search results + // Calculate a score based on specific search fields + .map(item -> new FuzzySearchSpecificDTO(item, keyword)) + .sorted(Comparator.comparing(FuzzySearchSpecificDTO::getScore).reversed()) + .map(FuzzySearchSpecificDTO::getItem) + // Limit the amount of search results + .limit(20); + } + + static class FuzzySearchGeneralDTO { + private final PreferenceSearchItem item; + private final float score; + + FuzzySearchGeneralDTO( + final PreferenceSearchItem item, + final String keyword) { + this.item = item; + this.score = FUZZY_SCORE.fuzzyScore( + TextUtils.join(";", item.getAllRelevantSearchFields()), + keyword); + } + + public PreferenceSearchItem getItem() { + return item; + } + + public float getScore() { + return score; + } + } + + static class FuzzySearchSpecificDTO { + private static final Map, Float> WEIGHT_MAP = Map.of( + // The user will most likely look for the title -> prioritize it + PreferenceSearchItem::getTitle, 1.5f, + // The summary is also important as it usually contains a larger desc + // Example: Searching for '4k' → 'show higher resolution' is shown + PreferenceSearchItem::getSummary, 1f, + // Entries are also important as they provide all known/possible values + // Example: Searching where the resolution can be changed to 720p + PreferenceSearchItem::getEntries, 1f + ); + + private final PreferenceSearchItem item; + private final float score; + + FuzzySearchSpecificDTO( + final PreferenceSearchItem item, + final String keyword) { + this.item = item; + + float attributeScoreSum = 0; + int countOfAttributesWithScore = 0; + for (final Map.Entry, Float> we + : WEIGHT_MAP.entrySet()) { + final String valueToProcess = we.getKey().apply(item); + if (valueToProcess.isEmpty()) { + continue; + } + + attributeScoreSum += + FUZZY_SCORE.fuzzyScore(valueToProcess, keyword) * we.getValue(); + countOfAttributesWithScore++; + } + + if (countOfAttributesWithScore != 0) { + this.score = attributeScoreSum / countOfAttributesWithScore; + } else { + this.score = 0; + } + } + + public PreferenceSearchItem getItem() { + return item; + } + + public float getScore() { + return score; + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceParser.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceParser.java new file mode 100644 index 000000000..1f507c7f1 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceParser.java @@ -0,0 +1,199 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.XmlRes; +import androidx.preference.PreferenceManager; + +import org.xmlpull.v1.XmlPullParser; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Parses the corresponding preference-file(s). + */ +public class PreferenceParser { + private static final String TAG = "PreferenceParser"; + + private static final String NS_ANDROID = "http://schemas.android.com/apk/res/android"; + private static final String NS_SEARCH = "http://schemas.android.com/apk/preferencesearch"; + + private final Context context; + private final Map allPreferences; + private final PreferenceSearchConfiguration searchConfiguration; + + public PreferenceParser( + final Context context, + final PreferenceSearchConfiguration searchConfiguration + ) { + this.context = context; + this.allPreferences = PreferenceManager.getDefaultSharedPreferences(context).getAll(); + this.searchConfiguration = searchConfiguration; + } + + public List parse( + @XmlRes final int resId + ) { + final List results = new ArrayList<>(); + final XmlPullParser xpp = context.getResources().getXml(resId); + + try { + xpp.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); + xpp.setFeature(XmlPullParser.FEATURE_REPORT_NAMESPACE_ATTRIBUTES, true); + + final List breadcrumbs = new ArrayList<>(); + while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) { + if (xpp.getEventType() == XmlPullParser.START_TAG) { + final PreferenceSearchItem result = parseSearchResult( + xpp, + joinBreadcrumbs(breadcrumbs), + resId + ); + + if (!searchConfiguration.getParserIgnoreElements().contains(xpp.getName()) + && result.hasData() + && !"true".equals(getAttribute(xpp, NS_SEARCH, "ignore"))) { + results.add(result); + } + if (searchConfiguration.getParserContainerElements().contains(xpp.getName())) { + // This code adds breadcrumbs for certain containers (e.g. PreferenceScreen) + // Example: Video and Audio > Player + breadcrumbs.add(result.getTitle() == null ? "" : result.getTitle()); + } + } else if (xpp.getEventType() == XmlPullParser.END_TAG + && searchConfiguration.getParserContainerElements() + .contains(xpp.getName())) { + breadcrumbs.remove(breadcrumbs.size() - 1); + } + + xpp.next(); + } + } catch (final Exception e) { + Log.w(TAG, "Failed to parse resid=" + resId, e); + } + return results; + } + + private String joinBreadcrumbs(final List breadcrumbs) { + return breadcrumbs.stream() + .filter(crumb -> !TextUtils.isEmpty(crumb)) + .collect(Collectors.joining(" > ")); + } + + private String getAttribute( + final XmlPullParser xpp, + @NonNull final String attribute + ) { + final String nsSearchAttr = getAttribute(xpp, NS_SEARCH, attribute); + if (nsSearchAttr != null) { + return nsSearchAttr; + } + return getAttribute(xpp, NS_ANDROID, attribute); + } + + private String getAttribute( + final XmlPullParser xpp, + @NonNull final String namespace, + @NonNull final String attribute + ) { + return xpp.getAttributeValue(namespace, attribute); + } + + private PreferenceSearchItem parseSearchResult( + final XmlPullParser xpp, + final String breadcrumbs, + @XmlRes final int searchIndexItemResId + ) { + final String key = readString(getAttribute(xpp, "key")); + final String[] entries = readStringArray(getAttribute(xpp, "entries")); + final String[] entryValues = readStringArray(getAttribute(xpp, "entryValues")); + + return new PreferenceSearchItem( + key, + tryFillInPreferenceValue( + readString(getAttribute(xpp, "title")), + key, + entries, + entryValues), + tryFillInPreferenceValue( + readString(getAttribute(xpp, "summary")), + key, + entries, + entryValues), + TextUtils.join(",", entries), + breadcrumbs, + searchIndexItemResId + ); + } + + private String[] readStringArray(@Nullable final String s) { + if (s == null) { + return new String[0]; + } + if (s.startsWith("@")) { + try { + return context.getResources().getStringArray(Integer.parseInt(s.substring(1))); + } catch (final Exception e) { + Log.w(TAG, "Unable to readStringArray from '" + s + "'", e); + } + } + return new String[0]; + } + + private String readString(@Nullable final String s) { + if (s == null) { + return ""; + } + if (s.startsWith("@")) { + try { + return context.getString(Integer.parseInt(s.substring(1))); + } catch (final Exception e) { + Log.w(TAG, "Unable to readString from '" + s + "'", e); + } + } + return s; + } + + private String tryFillInPreferenceValue( + @Nullable final String s, + @Nullable final String key, + final String[] entries, + final String[] entryValues + ) { + if (s == null) { + return ""; + } + if (key == null) { + return s; + } + + // Resolve value + Object prefValue = allPreferences.get(key); + if (prefValue == null) { + return s; + } + + /* + * Resolve ListPreference values + * + * entryValues = Values/Keys that are saved + * entries = Actual human readable names + */ + if (entries.length > 0 && entryValues.length == entries.length) { + final int entryIndex = Arrays.asList(entryValues).indexOf(prefValue); + if (entryIndex != -1) { + prefValue = entries[entryIndex]; + } + } + + return String.format(s, prefValue.toString()); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchAdapter.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchAdapter.java new file mode 100644 index 000000000..02fbf9577 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchAdapter.java @@ -0,0 +1,87 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import org.schabi.newpipe.databinding.SettingsPreferencesearchListItemResultBinding; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +class PreferenceSearchAdapter + extends RecyclerView.Adapter { + private List dataset = new ArrayList<>(); + private Consumer onItemClickListener; + + @NonNull + @Override + public PreferenceViewHolder onCreateViewHolder( + @NonNull final ViewGroup parent, + final int viewType + ) { + return new PreferenceViewHolder( + SettingsPreferencesearchListItemResultBinding.inflate( + LayoutInflater.from(parent.getContext()), + parent, + false)); + } + + @Override + public void onBindViewHolder( + @NonNull final PreferenceViewHolder holder, + final int position + ) { + final PreferenceSearchItem item = dataset.get(position); + + holder.binding.title.setText(item.getTitle()); + + if (TextUtils.isEmpty(item.getSummary())) { + holder.binding.summary.setVisibility(View.GONE); + } else { + holder.binding.summary.setVisibility(View.VISIBLE); + holder.binding.summary.setText(item.getSummary()); + } + + if (TextUtils.isEmpty(item.getBreadcrumbs())) { + holder.binding.breadcrumbs.setVisibility(View.GONE); + } else { + holder.binding.breadcrumbs.setVisibility(View.VISIBLE); + holder.binding.breadcrumbs.setText(item.getBreadcrumbs()); + } + + holder.itemView.setOnClickListener(v -> { + if (onItemClickListener != null) { + onItemClickListener.accept(item); + } + }); + } + + void setContent(final List items) { + dataset = new ArrayList<>(items); + this.notifyDataSetChanged(); + } + + @Override + public int getItemCount() { + return dataset.size(); + } + + void setOnItemClickListener(final Consumer onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + static class PreferenceViewHolder extends RecyclerView.ViewHolder { + final SettingsPreferencesearchListItemResultBinding binding; + + PreferenceViewHolder(final SettingsPreferencesearchListItemResultBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchConfiguration.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchConfiguration.java new file mode 100644 index 000000000..5835dcab5 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchConfiguration.java @@ -0,0 +1,43 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceScreen; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; + +public class PreferenceSearchConfiguration { + private PreferenceSearchFunction searcher = new PreferenceFuzzySearchFunction(); + + private final List parserIgnoreElements = Arrays.asList( + PreferenceCategory.class.getSimpleName()); + private final List parserContainerElements = Arrays.asList( + PreferenceCategory.class.getSimpleName(), + PreferenceScreen.class.getSimpleName()); + + + public void setSearcher(final PreferenceSearchFunction searcher) { + this.searcher = Objects.requireNonNull(searcher); + } + + public PreferenceSearchFunction getSearcher() { + return searcher; + } + + public List getParserIgnoreElements() { + return parserIgnoreElements; + } + + public List getParserContainerElements() { + return parserContainerElements; + } + + @FunctionalInterface + public interface PreferenceSearchFunction { + Stream search( + Stream allAvailable, + String keyword); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchFragment.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchFragment.java new file mode 100644 index 000000000..308abbc4e --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchFragment.java @@ -0,0 +1,80 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; + +import org.schabi.newpipe.databinding.SettingsPreferencesearchFragmentBinding; + +import java.util.ArrayList; +import java.util.List; + +/** + * Displays the search results. + */ +public class PreferenceSearchFragment extends Fragment { + public static final String NAME = PreferenceSearchFragment.class.getSimpleName(); + + private PreferenceSearcher searcher; + + private SettingsPreferencesearchFragmentBinding binding; + private PreferenceSearchAdapter adapter; + + public void setSearcher(final PreferenceSearcher searcher) { + this.searcher = searcher; + } + + @Nullable + @Override + public View onCreateView( + @NonNull final LayoutInflater inflater, + @Nullable final ViewGroup container, + @Nullable final Bundle savedInstanceState + ) { + binding = SettingsPreferencesearchFragmentBinding.inflate(inflater, container, false); + + binding.searchResults.setLayoutManager(new LinearLayoutManager(getContext())); + + adapter = new PreferenceSearchAdapter(); + adapter.setOnItemClickListener(this::onItemClicked); + binding.searchResults.setAdapter(adapter); + + return binding.getRoot(); + } + + public void updateSearchResults(final String keyword) { + if (adapter == null || searcher == null) { + return; + } + + final List results = + !TextUtils.isEmpty(keyword) + ? searcher.searchFor(keyword) + : new ArrayList<>(); + + adapter.setContent(new ArrayList<>(results)); + + setEmptyViewShown(results.isEmpty()); + } + + private void setEmptyViewShown(final boolean shown) { + binding.emptyStateView.setVisibility(shown ? View.VISIBLE : View.GONE); + binding.searchResults.setVisibility(shown ? View.GONE : View.VISIBLE); + } + + public void onItemClicked(final PreferenceSearchItem item) { + if (!(getActivity() instanceof PreferenceSearchResultListener)) { + throw new ClassCastException( + getActivity().toString() + " must implement SearchPreferenceResultListener"); + } + + ((PreferenceSearchResultListener) getActivity()).onSearchResultClicked(item); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchItem.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchItem.java new file mode 100644 index 000000000..52935ef8e --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchItem.java @@ -0,0 +1,102 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import androidx.annotation.NonNull; +import androidx.annotation.XmlRes; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * Represents a preference-item inside the search. + */ +public class PreferenceSearchItem { + /** + * Key of the setting/preference. E.g. used inside {@link android.content.SharedPreferences}. + */ + @NonNull + private final String key; + /** + * Title of the setting, e.g. 'Default resolution' or 'Show higher resolutions'. + */ + @NonNull + private final String title; + /** + * Summary of the setting, e.g. '480p' or 'Only some devices can play 2k/4k'. + */ + @NonNull + private final String summary; + /** + * Possible entries of the setting, e.g. 480p,720p,... + */ + @NonNull + private final String entries; + /** + * Breadcrumbs - a hint where the setting is located e.g. 'Video and Audio > Player' + */ + @NonNull + private final String breadcrumbs; + /** + * The xml-resource where this item was found/built from. + */ + @XmlRes + private final int searchIndexItemResId; + + public PreferenceSearchItem( + @NonNull final String key, + @NonNull final String title, + @NonNull final String summary, + @NonNull final String entries, + @NonNull final String breadcrumbs, + @XmlRes final int searchIndexItemResId + ) { + this.key = Objects.requireNonNull(key); + this.title = Objects.requireNonNull(title); + this.summary = Objects.requireNonNull(summary); + this.entries = Objects.requireNonNull(entries); + this.breadcrumbs = Objects.requireNonNull(breadcrumbs); + this.searchIndexItemResId = searchIndexItemResId; + } + + public String getKey() { + return key; + } + + public String getTitle() { + return title; + } + + public String getSummary() { + return summary; + } + + public String getEntries() { + return entries; + } + + public String getBreadcrumbs() { + return breadcrumbs; + } + + public int getSearchIndexItemResId() { + return searchIndexItemResId; + } + + boolean hasData() { + return !key.isEmpty() && !title.isEmpty(); + } + + public List getAllRelevantSearchFields() { + return Arrays.asList( + getTitle(), + getSummary(), + getEntries(), + getBreadcrumbs()); + } + + + @Override + public String toString() { + return "PreferenceItem: " + title + " " + summary + " " + key; + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchResultHighlighter.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchResultHighlighter.java new file mode 100644 index 000000000..418a3ea46 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchResultHighlighter.java @@ -0,0 +1,127 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.RippleDrawable; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; +import android.util.TypedValue; + +import androidx.appcompat.content.res.AppCompatResources; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceGroup; +import androidx.recyclerview.widget.RecyclerView; + +import org.schabi.newpipe.R; + + +public final class PreferenceSearchResultHighlighter { + private static final String TAG = "PrefSearchResHighlter"; + + private PreferenceSearchResultHighlighter() { + } + + /** + * Highlight the specified preference. + *
+ * Note: This function is Thread independent (can be called from outside of the main thread). + * + * @param item The item to highlight + * @param prefsFragment The fragment where the items is located on + */ + public static void highlight( + final PreferenceSearchItem item, + final PreferenceFragmentCompat prefsFragment + ) { + new Handler(Looper.getMainLooper()).post(() -> doHighlight(item, prefsFragment)); + } + + private static void doHighlight( + final PreferenceSearchItem item, + final PreferenceFragmentCompat prefsFragment + ) { + final Preference prefResult = prefsFragment.findPreference(item.getKey()); + + if (prefResult == null) { + Log.w(TAG, "Preference '" + item.getKey() + "' not found on '" + prefsFragment + "'"); + return; + } + + final RecyclerView recyclerView = prefsFragment.getListView(); + final RecyclerView.Adapter adapter = recyclerView.getAdapter(); + if (adapter instanceof PreferenceGroup.PreferencePositionCallback) { + final int position = ((PreferenceGroup.PreferencePositionCallback) adapter) + .getPreferenceAdapterPosition(prefResult); + if (position != RecyclerView.NO_POSITION) { + recyclerView.scrollToPosition(position); + recyclerView.postDelayed(() -> { + final RecyclerView.ViewHolder holder = + recyclerView.findViewHolderForAdapterPosition(position); + if (holder != null) { + final Drawable background = holder.itemView.getBackground(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP + && background instanceof RippleDrawable) { + showRippleAnimation((RippleDrawable) background); + return; + } + } + highlightFallback(prefsFragment, prefResult); + }, 200); + return; + } + } + highlightFallback(prefsFragment, prefResult); + } + + /** + * Alternative highlighting (shows an → arrow in front of the setting)if ripple does not work. + * + * @param prefsFragment + * @param prefResult + */ + private static void highlightFallback( + final PreferenceFragmentCompat prefsFragment, + final Preference prefResult + ) { + // Get primary color from text for highlight icon + final TypedValue typedValue = new TypedValue(); + final Resources.Theme theme = prefsFragment.getActivity().getTheme(); + theme.resolveAttribute(android.R.attr.textColorPrimary, typedValue, true); + final TypedArray arr = prefsFragment.getActivity() + .obtainStyledAttributes( + typedValue.data, + new int[]{android.R.attr.textColorPrimary}); + final int color = arr.getColor(0, 0xffE53935); + arr.recycle(); + + // Show highlight icon + final Drawable oldIcon = prefResult.getIcon(); + final boolean oldSpaceReserved = prefResult.isIconSpaceReserved(); + final Drawable highlightIcon = + AppCompatResources.getDrawable( + prefsFragment.requireContext(), + R.drawable.ic_play_arrow); + highlightIcon.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)); + prefResult.setIcon(highlightIcon); + + prefsFragment.scrollToPreference(prefResult); + + new Handler(Looper.getMainLooper()).postDelayed(() -> { + prefResult.setIcon(oldIcon); + prefResult.setIconSpaceReserved(oldSpaceReserved); + }, 1000); + } + + private static void showRippleAnimation(final RippleDrawable rippleDrawable) { + rippleDrawable.setState( + new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}); + new Handler(Looper.getMainLooper()) + .postDelayed(() -> rippleDrawable.setState(new int[]{}), 1000); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchResultListener.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchResultListener.java new file mode 100644 index 000000000..1f0636454 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearchResultListener.java @@ -0,0 +1,7 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import androidx.annotation.NonNull; + +public interface PreferenceSearchResultListener { + void onSearchResultClicked(@NonNull PreferenceSearchItem result); +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearcher.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearcher.java new file mode 100644 index 000000000..176dc5d14 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceSearcher.java @@ -0,0 +1,35 @@ +package org.schabi.newpipe.settings.preferencesearch; + +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class PreferenceSearcher { + private final List allEntries = new ArrayList<>(); + + private final PreferenceSearchConfiguration configuration; + + public PreferenceSearcher(final PreferenceSearchConfiguration configuration) { + this.configuration = configuration; + } + + public void add(final List items) { + allEntries.addAll(items); + } + + List searchFor(final String keyword) { + if (TextUtils.isEmpty(keyword)) { + return new ArrayList<>(); + } + + return configuration.getSearcher() + .search(allEntries.stream(), keyword) + .collect(Collectors.toList()); + } + + public void clear() { + allEntries.clear(); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/package-info.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/package-info.java new file mode 100644 index 000000000..00929235e --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/package-info.java @@ -0,0 +1,10 @@ +/** + * Contains classes for searching inside the preferences. + *
+ * This code is based on + * ByteHamster/SearchPreference + * (MIT license) but was heavily modified/refactored for our use. + * + * @author litetex + */ +package org.schabi.newpipe.settings.preferencesearch; diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java index 95f7f50ba..490e299bd 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java @@ -44,8 +44,6 @@ import java.util.List; import static org.schabi.newpipe.settings.tabs.Tab.typeFrom; public class ChooseTabsFragment extends Fragment { - private static final int MENU_ITEM_RESTORE_ID = 123456; - private TabsManager tabsManager; private final List tabList = new ArrayList<>(); @@ -110,21 +108,14 @@ public class ChooseTabsFragment extends Fragment { @NonNull final MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - final MenuItem restoreItem = menu.add(Menu.NONE, MENU_ITEM_RESTORE_ID, Menu.NONE, - R.string.restore_defaults); + final MenuItem restoreItem = menu.add(R.string.restore_defaults); restoreItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); restoreItem.setIcon(AppCompatResources.getDrawable(requireContext(), R.drawable.ic_settings_backup_restore)); - } - - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - if (item.getItemId() == MENU_ITEM_RESTORE_ID) { + restoreItem.setOnMenuItemClickListener(ev -> { restoreDefaults(); return true; - } - - return super.onOptionsItemSelected(item); + }); } /*////////////////////////////////////////////////////////////////////////// diff --git a/app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java b/app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java new file mode 100644 index 000000000..71c0d3944 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/KeyboardUtil.java @@ -0,0 +1,43 @@ +package org.schabi.newpipe.util; + +import android.app.Activity; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +import androidx.core.content.ContextCompat; + +/** + * Utility class for the Android keyboard. + *

+ * See also https://stackoverflow.com/q/1109022 + *

+ */ +public final class KeyboardUtil { + private KeyboardUtil() { + } + + public static void showKeyboard(final Activity activity, final EditText editText) { + if (activity == null || editText == null) { + return; + } + + if (editText.requestFocus()) { + final InputMethodManager imm = ContextCompat.getSystemService(activity, + InputMethodManager.class); + imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); + } + } + + public static void hideKeyboard(final Activity activity, final EditText editText) { + if (activity == null || editText == null) { + return; + } + + final InputMethodManager imm = ContextCompat.getSystemService(activity, + InputMethodManager.class); + imm.hideSoftInputFromWindow(editText.getWindowToken(), + InputMethodManager.RESULT_UNCHANGED_SHOWN); + + editText.clearFocus(); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/SaveUploaderUrlHelper.java b/app/src/main/java/org/schabi/newpipe/util/SaveUploaderUrlHelper.java new file mode 100644 index 000000000..3c7b1ce91 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/SaveUploaderUrlHelper.java @@ -0,0 +1,94 @@ +package org.schabi.newpipe.util; + +import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; + +import android.content.Context; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import org.schabi.newpipe.NewPipeDatabase; +import org.schabi.newpipe.R; +import org.schabi.newpipe.error.ErrorInfo; +import org.schabi.newpipe.error.ErrorUtil; +import org.schabi.newpipe.error.UserAction; +import org.schabi.newpipe.extractor.stream.StreamInfoItem; +import org.schabi.newpipe.player.playqueue.PlayQueueItem; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.schedulers.Schedulers; + +/** + * Utility class for putting the uploader url into the database - when required. + */ +public final class SaveUploaderUrlHelper { + private SaveUploaderUrlHelper() { + } + + // Public functions which call the function that does + // the actual work with the correct parameters + public static void saveUploaderUrlIfNeeded(@NonNull final Fragment fragment, + @NonNull final StreamInfoItem infoItem, + @NonNull final SaveUploaderUrlCallback callback) { + saveUploaderUrlIfNeeded(fragment.requireContext(), + infoItem.getServiceId(), + infoItem.getUrl(), + infoItem.getUploaderUrl(), + callback); + } + public static void saveUploaderUrlIfNeeded(@NonNull final Context context, + @NonNull final PlayQueueItem queueItem, + @NonNull final SaveUploaderUrlCallback callback) { + saveUploaderUrlIfNeeded(context, + queueItem.getServiceId(), + queueItem.getUrl(), + queueItem.getUploaderUrl(), + callback); + } + + /** + * Fetches and saves the uploaderUrl if it is empty (meaning that it does + * not exist in the video item). The callback is called with either the + * fetched uploaderUrl, or the already saved uploaderUrl, but it is always + * called with a valid uploaderUrl that can be used to show channel details. + * + * @param context Context + * @param serviceId The serviceId of the item + * @param url The item url + * @param uploaderUrl The uploaderUrl of the item, if null or empty, it + * will be fetched using the item url. + * @param callback The callback that returns the fetched or existing + * uploaderUrl + */ + private static void saveUploaderUrlIfNeeded(@NonNull final Context context, + final int serviceId, + @NonNull final String url, + // Only used if not null or empty + @Nullable final String uploaderUrl, + @NonNull final SaveUploaderUrlCallback callback) { + if (isNullOrEmpty(uploaderUrl)) { + Toast.makeText(context, R.string.loading_channel_details, + Toast.LENGTH_SHORT).show(); + ExtractorHelper.getStreamInfo(serviceId, url, false) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(result -> { + NewPipeDatabase.getInstance(context).streamDAO() + .setUploaderUrl(serviceId, url, result.getUploaderUrl()) + .subscribeOn(Schedulers.io()).subscribe(); + callback.onCallback(result.getUploaderUrl()); + }, throwable -> ErrorUtil.createNotification(context, + new ErrorInfo(throwable, UserAction.REQUESTED_CHANNEL, + "Could not load channel details") + )); + } else { + callback.onCallback(uploaderUrl); + } + } + + public interface SaveUploaderUrlCallback { + void onCallback(@NonNull String uploaderUrl); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java b/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java index bb1cbbeae..1b4c8046c 100644 --- a/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java +++ b/app/src/main/java/org/schabi/newpipe/util/StreamDialogEntry.java @@ -3,12 +3,10 @@ package org.schabi.newpipe.util; import android.content.Context; import android.net.Uri; import android.util.Log; -import android.widget.Toast; import androidx.fragment.app.Fragment; import androidx.preference.PreferenceManager; -import org.schabi.newpipe.NewPipeDatabase; import org.schabi.newpipe.R; import org.schabi.newpipe.database.stream.model.StreamEntity; import org.schabi.newpipe.extractor.stream.StreamInfoItem; @@ -27,36 +25,14 @@ import java.util.function.Consumer; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.schedulers.Schedulers; -import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; - public enum StreamDialogEntry { ////////////////////////////////////// // enum values with DEFAULT actions // ////////////////////////////////////// show_channel_details(R.string.show_channel_details, (fragment, item) -> { - if (isNullOrEmpty(item.getUploaderUrl())) { - final int serviceId = item.getServiceId(); - final String url = item.getUrl(); - Toast.makeText(fragment.getContext(), R.string.loading_channel_details, - Toast.LENGTH_SHORT).show(); - ExtractorHelper.getStreamInfo(serviceId, url, false) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(result -> { - NewPipeDatabase.getInstance(fragment.requireContext()).streamDAO() - .setUploaderUrl(serviceId, url, result.getUploaderUrl()) - .subscribeOn(Schedulers.io()).subscribe(); - openChannelFragment(fragment, item, result.getUploaderUrl()); - }, throwable -> Toast.makeText( - // TODO: Open the Error Activity - fragment.getContext(), - R.string.error_show_channel_details, - Toast.LENGTH_SHORT - ).show()); - } else { - openChannelFragment(fragment, item, item.getUploaderUrl()); - } + SaveUploaderUrlHelper.saveUploaderUrlIfNeeded(fragment, item, + uploaderUrl -> openChannelFragment(fragment, item, uploaderUrl)); }), /** diff --git a/app/src/main/java/org/schabi/newpipe/views/player/CircleClipTapView.kt b/app/src/main/java/org/schabi/newpipe/views/player/CircleClipTapView.kt new file mode 100644 index 000000000..e3d142916 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/views/player/CircleClipTapView.kt @@ -0,0 +1,89 @@ +package org.schabi.newpipe.views.player + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.Path +import android.util.AttributeSet +import android.view.View + +class CircleClipTapView(context: Context?, attrs: AttributeSet) : View(context, attrs) { + + private var backgroundPaint = Paint() + + private var widthPx = 0 + private var heightPx = 0 + + // Background + + private var shapePath = Path() + private var arcSize: Float = 80f + private var isLeft = true + + init { + requireNotNull(context) { "Context is null." } + + backgroundPaint.apply { + style = Paint.Style.FILL + isAntiAlias = true + color = 0x30000000 + } + + val dm = context.resources.displayMetrics + widthPx = dm.widthPixels + heightPx = dm.heightPixels + + updatePathShape() + } + + fun updateArcSize(baseView: View) { + val newArcSize = baseView.height / 11.4f + if (arcSize != newArcSize) { + arcSize = newArcSize + updatePathShape() + } + } + + fun updatePosition(newIsLeft: Boolean) { + if (isLeft != newIsLeft) { + isLeft = newIsLeft + updatePathShape() + } + } + + private fun updatePathShape() { + val halfWidth = widthPx * 0.5f + + shapePath.reset() + + val w = if (isLeft) 0f else widthPx.toFloat() + val f = if (isLeft) 1 else -1 + + shapePath.moveTo(w, 0f) + shapePath.lineTo(f * (halfWidth - arcSize) + w, 0f) + shapePath.quadTo( + f * (halfWidth + arcSize) + w, + heightPx.toFloat() / 2, + f * (halfWidth - arcSize) + w, + heightPx.toFloat() + ) + shapePath.lineTo(w, heightPx.toFloat()) + + shapePath.close() + invalidate() + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + widthPx = w + heightPx = h + updatePathShape() + } + + override fun onDraw(canvas: Canvas?) { + super.onDraw(canvas) + + canvas?.clipPath(shapePath) + canvas?.drawPath(shapePath, backgroundPaint) + } +} diff --git a/app/src/main/java/org/schabi/newpipe/views/player/PlayerFastSeekOverlay.kt b/app/src/main/java/org/schabi/newpipe/views/player/PlayerFastSeekOverlay.kt new file mode 100644 index 000000000..649b60494 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/views/player/PlayerFastSeekOverlay.kt @@ -0,0 +1,145 @@ +package org.schabi.newpipe.views.player + +import android.content.Context +import android.util.AttributeSet +import android.util.Log +import android.view.LayoutInflater +import androidx.annotation.NonNull +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.END +import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.PARENT_ID +import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.START +import androidx.constraintlayout.widget.ConstraintSet +import org.schabi.newpipe.MainActivity +import org.schabi.newpipe.R +import org.schabi.newpipe.player.event.DisplayPortion +import org.schabi.newpipe.player.event.DoubleTapListener + +class PlayerFastSeekOverlay(context: Context, attrs: AttributeSet?) : + ConstraintLayout(context, attrs), DoubleTapListener { + + private var secondsView: SecondsView + private var circleClipTapView: CircleClipTapView + private var rootConstraintLayout: ConstraintLayout + + private var wasForwarding: Boolean = false + + init { + LayoutInflater.from(context).inflate(R.layout.player_fast_seek_overlay, this, true) + + secondsView = findViewById(R.id.seconds_view) + circleClipTapView = findViewById(R.id.circle_clip_tap_view) + rootConstraintLayout = findViewById(R.id.root_constraint_layout) + + addOnLayoutChangeListener { view, _, _, _, _, _, _, _, _ -> + circleClipTapView.updateArcSize(view) + } + } + + private var performListener: PerformListener? = null + + fun performListener(listener: PerformListener) = apply { + performListener = listener + } + + private var seekSecondsSupplier: () -> Int = { 0 } + + fun seekSecondsSupplier(supplier: () -> Int) = apply { + seekSecondsSupplier = supplier + } + + // Indicates whether this (double) tap is the first of a series + // Decides whether to call performListener.onAnimationStart or not + private var initTap: Boolean = false + + override fun onDoubleTapStarted(portion: DisplayPortion) { + if (DEBUG) + Log.d(TAG, "onDoubleTapStarted called with portion = [$portion]") + + initTap = false + + secondsView.stopAnimation() + } + + override fun onDoubleTapProgressDown(portion: DisplayPortion) { + val shouldForward: Boolean = + performListener?.getFastSeekDirection(portion)?.directionAsBoolean ?: return + + if (DEBUG) + Log.d( + TAG, + "onDoubleTapProgressDown called with " + + "shouldForward = [$shouldForward], " + + "wasForwarding = [$wasForwarding], " + + "initTap = [$initTap], " + ) + + /* + * Check if a initial tap occurred or if direction was switched + */ + if (!initTap || wasForwarding != shouldForward) { + // Reset seconds and update position + secondsView.seconds = 0 + changeConstraints(shouldForward) + circleClipTapView.updatePosition(!shouldForward) + secondsView.setForwarding(shouldForward) + + wasForwarding = shouldForward + + if (!initTap) { + initTap = true + } + } + + performListener?.onDoubleTap() + + secondsView.seconds += seekSecondsSupplier.invoke() + performListener?.seek(forward = shouldForward) + } + + override fun onDoubleTapFinished() { + if (DEBUG) + Log.d(TAG, "onDoubleTapFinished called with initTap = [$initTap]") + + if (initTap) performListener?.onDoubleTapEnd() + initTap = false + + secondsView.stopAnimation() + } + + private fun changeConstraints(forward: Boolean) { + val constraintSet = ConstraintSet() + with(constraintSet) { + clone(rootConstraintLayout) + clear(secondsView.id, if (forward) START else END) + connect( + secondsView.id, if (forward) END else START, + PARENT_ID, if (forward) END else START + ) + secondsView.startAnimation() + applyTo(rootConstraintLayout) + } + } + + interface PerformListener { + fun onDoubleTap() + fun onDoubleTapEnd() + /** + * Determines if the playback should forward/rewind or do nothing. + */ + @NonNull + fun getFastSeekDirection(portion: DisplayPortion): FastSeekDirection + fun seek(forward: Boolean) + + enum class FastSeekDirection(val directionAsBoolean: Boolean?) { + NONE(null), + FORWARD(true), + BACKWARD(false); + } + } + + companion object { + private const val TAG = "PlayerFastSeekOverlay" + private val DEBUG = MainActivity.DEBUG + } +} diff --git a/app/src/main/java/org/schabi/newpipe/views/player/SecondsView.kt b/app/src/main/java/org/schabi/newpipe/views/player/SecondsView.kt new file mode 100644 index 000000000..d209d24da --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/views/player/SecondsView.kt @@ -0,0 +1,181 @@ +package org.schabi.newpipe.views.player + +import android.animation.Animator +import android.animation.ValueAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import org.schabi.newpipe.R +import org.schabi.newpipe.databinding.PlayerFastSeekSecondsViewBinding +import org.schabi.newpipe.util.DeviceUtils + +class SecondsView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) { + + companion object { + const val ICON_ANIMATION_DURATION = 750L + } + + var cycleDuration: Long = ICON_ANIMATION_DURATION + set(value) { + firstAnimator.duration = value / 5 + secondAnimator.duration = value / 5 + thirdAnimator.duration = value / 5 + fourthAnimator.duration = value / 5 + fifthAnimator.duration = value / 5 + field = value + } + + var seconds: Int = 0 + set(value) { + binding.tvSeconds.text = context.resources.getQuantityString( + R.plurals.seconds, value, value + ) + field = value + } + + // Done as a field so that we don't have to compute on each tab if animations are enabled + private val animationsEnabled = DeviceUtils.hasAnimationsAnimatorDurationEnabled(context) + + val binding = PlayerFastSeekSecondsViewBinding.inflate(LayoutInflater.from(context), this) + + init { + orientation = VERTICAL + layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) + } + + fun setForwarding(isForward: Boolean) { + binding.triangleContainer.rotation = if (isForward) 0f else 180f + } + + fun startAnimation() { + stopAnimation() + + if (animationsEnabled) { + firstAnimator.start() + } else { + // If no animations are enable show the arrow(s) without animation + showWithoutAnimation() + } + } + + fun stopAnimation() { + firstAnimator.cancel() + secondAnimator.cancel() + thirdAnimator.cancel() + fourthAnimator.cancel() + fifthAnimator.cancel() + + reset() + } + + private fun reset() { + binding.icon1.alpha = 0f + binding.icon2.alpha = 0f + binding.icon3.alpha = 0f + } + + private fun showWithoutAnimation() { + binding.icon1.alpha = 1f + binding.icon2.alpha = 1f + binding.icon3.alpha = 1f + } + + private val firstAnimator: ValueAnimator = CustomValueAnimator( + { + binding.icon1.alpha = 0f + binding.icon2.alpha = 0f + binding.icon3.alpha = 0f + }, + { + binding.icon1.alpha = it + }, + { + secondAnimator.start() + } + ) + + private val secondAnimator: ValueAnimator = CustomValueAnimator( + { + binding.icon1.alpha = 1f + binding.icon2.alpha = 0f + binding.icon3.alpha = 0f + }, + { + binding.icon2.alpha = it + }, + { + thirdAnimator.start() + } + ) + + private val thirdAnimator: ValueAnimator = CustomValueAnimator( + { + binding.icon1.alpha = 1f + binding.icon2.alpha = 1f + binding.icon3.alpha = 0f + }, + { + binding.icon1.alpha = 1f - binding.icon3.alpha + binding.icon3.alpha = it + }, + { + fourthAnimator.start() + } + ) + + private val fourthAnimator: ValueAnimator = CustomValueAnimator( + { + binding.icon1.alpha = 0f + binding.icon2.alpha = 1f + binding.icon3.alpha = 1f + }, + { + binding.icon2.alpha = 1f - it + }, + { + fifthAnimator.start() + } + ) + + private val fifthAnimator: ValueAnimator = CustomValueAnimator( + { + binding.icon1.alpha = 0f + binding.icon2.alpha = 0f + binding.icon3.alpha = 1f + }, + { + binding.icon3.alpha = 1f - it + }, + { + firstAnimator.start() + } + ) + + private inner class CustomValueAnimator( + start: () -> Unit, + update: (value: Float) -> Unit, + end: () -> Unit + ) : ValueAnimator() { + + init { + duration = cycleDuration / 5 + setFloatValues(0f, 1f) + + addUpdateListener { update(it.animatedValue as Float) } + addListener(object : AnimatorListener { + override fun onAnimationStart(animation: Animator?) { + start() + } + + override fun onAnimationEnd(animation: Animator?) { + end() + } + + override fun onAnimationCancel(animation: Animator?) = Unit + + override fun onAnimationRepeat(animation: Animator?) = Unit + }) + } + } +} diff --git a/app/src/main/res/drawable/ic_play_seek_triangle.xml b/app/src/main/res/drawable/ic_play_seek_triangle.xml new file mode 100644 index 000000000..1aee026db --- /dev/null +++ b/app/src/main/res/drawable/ic_play_seek_triangle.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/app/src/main/res/layout-large-land/player.xml b/app/src/main/res/layout-large-land/player.xml index f3b1056d2..71a325cf3 100644 --- a/app/src/main/res/layout-large-land/player.xml +++ b/app/src/main/res/layout-large-land/player.xml @@ -54,11 +54,21 @@ tools:ignore="ContentDescription" tools:visibility="visible" /> + + + @@ -469,8 +479,8 @@ android:padding="@dimen/player_main_buttons_padding" android:scaleType="fitCenter" android:visibility="gone" - app:tint="@color/white" app:srcCompat="@drawable/ic_fullscreen" + app:tint="@color/white" tools:ignore="ContentDescription,RtlHardcoded" tools:visibility="visible" /> @@ -493,8 +503,8 @@ android:clickable="true" android:focusable="true" android:scaleType="fitCenter" - app:tint="@color/white" app:srcCompat="@drawable/ic_previous" + app:tint="@color/white" tools:ignore="ContentDescription" /> @@ -505,8 +515,8 @@ android:layout_weight="1" android:background="?attr/selectableItemBackgroundBorderless" android:scaleType="fitCenter" - app:tint="@color/white" app:srcCompat="@drawable/ic_pause" + app:tint="@color/white" tools:ignore="ContentDescription" /> @@ -572,8 +582,8 @@ android:focusable="true" android:padding="10dp" android:scaleType="fitXY" - app:tint="@color/white" - app:srcCompat="@drawable/ic_close" /> + app:srcCompat="@drawable/ic_close" + app:tint="@color/white" /> - - - - - + + diff --git a/app/src/main/res/layout/player.xml b/app/src/main/res/layout/player.xml index c2d1c84ff..180292fb1 100644 --- a/app/src/main/res/layout/player.xml +++ b/app/src/main/res/layout/player.xml @@ -54,11 +54,21 @@ tools:ignore="ContentDescription" tools:visibility="visible" /> + + + @@ -633,24 +643,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + + diff --git a/app/src/main/res/layout/player_fast_seek_overlay.xml b/app/src/main/res/layout/player_fast_seek_overlay.xml new file mode 100644 index 000000000..1e0640eb7 --- /dev/null +++ b/app/src/main/res/layout/player_fast_seek_overlay.xml @@ -0,0 +1,27 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/player_fast_seek_seconds_view.xml b/app/src/main/res/layout/player_fast_seek_seconds_view.xml new file mode 100644 index 000000000..57f5aa787 --- /dev/null +++ b/app/src/main/res/layout/player_fast_seek_seconds_view.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/settings_layout.xml b/app/src/main/res/layout/settings_layout.xml index 33237d7b0..1b7b8b5e2 100644 --- a/app/src/main/res/layout/settings_layout.xml +++ b/app/src/main/res/layout/settings_layout.xml @@ -6,14 +6,14 @@ android:orientation="vertical" tools:context="org.schabi.newpipe.MainActivity"> + + - - diff --git a/app/src/main/res/layout/settings_preferencesearch_fragment.xml b/app/src/main/res/layout/settings_preferencesearch_fragment.xml new file mode 100644 index 000000000..89a25b217 --- /dev/null +++ b/app/src/main/res/layout/settings_preferencesearch_fragment.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/settings_preferencesearch_list_item_result.xml b/app/src/main/res/layout/settings_preferencesearch_list_item_result.xml new file mode 100644 index 000000000..2e20f274c --- /dev/null +++ b/app/src/main/res/layout/settings_preferencesearch_list_item_result.xml @@ -0,0 +1,36 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_settings_main_fragment.xml b/app/src/main/res/menu/menu_settings_main_fragment.xml new file mode 100644 index 000000000..fbe3b4e09 --- /dev/null +++ b/app/src/main/res/menu/menu_settings_main_fragment.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index ffd2b92b0..1cbf5dda5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -98,7 +98,7 @@ تراجع تشغيل الكل تنبيهات NewPipe - تنبيهات مشغل NewPipe للخلفية والنوافذ المنبثقة + تنبيهات مشغل NewPipe [غير معروف] تعذر إعداد قائمة التنزيل تعطل التطبيق / واجهة المستخدم @@ -107,7 +107,7 @@ استرداد المشغل من الخطأ عذرًا، لم ينبغِ أن يحدث ذلك. الإبلاغ عن هذا الخطأ عبر البريد الإلكتروني - عذرا، حدث خطأ ما. + عذرًا، حدث خطأ ما. أبلِغ معلومات: ماذا حدث: @@ -157,7 +157,7 @@ التراخيص تطبيق مجاني خفيف البث على أندرويد. ساهم - إذا كانت لديك أفكار؛ أو ترجمة، أو تغييرات تخص التصميم، أو تنظيف و تحسين الشفرة البرمجية ، أو تعديلات عميقة عليها، فتذكر أنّ مساعدتك دائما موضع ترحيب. وكلما أتممنا شيئا كلما كان ذلك أفضل ! + إذا كانت لديك أفكار؛ أو ترجمة، أو تغييرات تخص التصميم، أو تنظيف و تحسين الشفرة البرمجية، أو تعديلات عميقة عليها، فتذكر أنّ مساعدتك دائما موضع ترحيب. وكلما أتممنا شيئا كلما كان ذلك أفضل! عرض على GitHub تبرع يتم تطوير NewPipe من قبل متطوعين يقضون وقت فراغهم لتقديم أفضل تجربة لك. حان الوقت لرد المساعدة مع المطورين وجعل NewPipe أكثر و أفضل بينما يستمتعون بفنجان من القهوة. @@ -214,7 +214,7 @@ استيراد قاعدة البيانات تصدير قاعدة البيانات يلغي السجل الحالي والاشتراكات وقوائم التشغيل والإعدادات (اختياريًا) - تصديرالسجل، وقوائم تشغيل، والإعدادات، والاشتراكات + تصدير السجل، وقوائم تشغيل، والإعدادات، والاشتراكات عرض المعلومات إضافة إلى تحليل @@ -238,7 +238,7 @@ هل تريد حذف قائمة التشغيل هذه؟ تم إنشاء قائمة التشغيل تمت إضافتها إلى قائمة التشغيل - ملئ الشاشة + ملء الشاشة تكبير تنزيل ملف البث الإشارات المرجعية @@ -255,9 +255,9 @@ تناسب مع الشاشة توليد تلقائي إستيراد - إستعادة مِن + استعادة مِن تصدير إلى - عملية الإستعادة جارية … + عملية الاستعادة جارية … عملية التصدير جارية … إستيراد ملف معرفك, soundcloud.com/هويتك @@ -290,7 +290,7 @@ لا يوجد بث متاح للتنزيل تم حذف عنصر واحد. لم يتم تثبيت أي تطبيق لتشغيل هذا الملف - NewPipe هو برنامج مفتوح المصدر و بحقوق متروكة: يمكنك استخدام الكود ودراسته وتحسينه كما شئت. و على وجه التحديد يمكنك إعادة توزيعه / أو تعديله تحت شروط رخصة GNU العمومية والتي نشرتها مؤسسة البرمجيات الحرة، سواء الإصدار 3 من الرخصة، أو (باختيارك) أي إصدار جديد. + NewPipe هو برنامج مفتوح المصدر وبحقوق متروكة: يمكنك استخدام الكود ودراسته وتحسينه كما شئت. وعلى وجه التحديد يمكنك إعادة توزيعه / أو تعديله تحت شروط رخصة GNU العمومية والتي نشرتها مؤسسة البرمجيات الحرة، سواء الإصدار 3 من الرخصة، أو (باختيارك) أي إصدار جديد. آخر ما تم تشغيله الأكثر تشغيلا هذا سوف يُزيل إعداداتك الحالية. @@ -325,10 +325,10 @@ إلغاء الإرتباط (قد يسبب تشويه) هل تريد أيضا استيراد الإعدادات؟ سياسة خصوصية NewPipe - يأخذ مشروع NewPipe خصوصيتك على محمل الجد. لذلك ، لا يجمع التطبيق أي بيانات دون موافقتك. + يأخذ مشروع NewPipe خصوصيتك على محمل الجد. لذلك، لا يجمع التطبيق أي بيانات دون موافقتك. \nتوضح سياسة خصوصية NewPipe بالتفصيل البيانات التي يتم إرسالها وتخزينها عند إرسال تقرير الأعطال. الإطلاع على سياسة الخصوصية - من أجل الامتثال للائحة الأوروبية العامة لحماية البيانات (GDPR) ، فإننا نلفت انتباهك إلى سياسة خصوصية NewPipe. يرجى قراءتها بعناية. + من أجل الامتثال للائحة الأوروبية العامة لحماية البيانات (GDPR)، فإننا نلفت انتباهك إلى سياسة خصوصية NewPipe. يرجى قراءتها بعناية. \nو يجب عليك قبولها لإرسال تقرير الأخطاء إلينا. قبول رفض @@ -353,7 +353,7 @@ استخدام الإيماءات للتحكم بسطوع المشغّل التحديثات تم حذف الملف - تتبيه تحديث التطبيق + تنبيه تحديث التطبيق إيماء التحكم بالصوت الأحداث إشعارات لإصدار NewPipe الجديد @@ -378,7 +378,7 @@ متوقف في قائمة الانتظار قيد المعالجة - طابور + قائمة الانتظار تم رفضها من قبل النظام فشل التنزيل إنشاء اسم فريد @@ -411,7 +411,7 @@ المواضع في القوائم إظهار مؤشّرات وضع التشغيل في القوائم امسح البيانات - تم حذف وضع التشغيل + تم حذف كل مواقف التشغيل نقل الملف أو حذفه يوجد ملف بهذا الاسم مسبقاً لا يمكن الكتابة فوق الملف @@ -420,11 +420,11 @@ لم يتبقى مساحة في الجهاز تم فقد التقدم بسبب حذف الملف انتهى وقت الاتصال - هل تريد محو سجل التنزيل أو حذف جميع الملفات التي تم تنزيلها؟ + هل تريد محو سجل التنزيل، أم تريد حذف جميع الملفات التي تم تنزيلها؟ حد قائمة انتظار التنزيل سيتم تشغيل تنزيل واحد في نفس الوقت بدء التنزيلات - إيقاف التحميل مؤقتا + إيقاف التحميل مؤقتًا اسأل عن مكان التنزيل سيتم سؤالك عن مكان حفظ كل تنزيل. \nتمكين منتقي مجلد النظام (SAF) إذا كنت تريد التنزيل إلى بطاقة SD خارجية @@ -433,7 +433,7 @@ حذف مواقف التشغيل حذف كل مواقف التشغيل حذف كل مواقف التشغيل؟ - تبديل الخدمة ، المحدد حاليًا: + تبديل الخدمة، المحدد حاليًا: الكشك الافتراضي لا توجد مشاهدة لا أحد يستمع @@ -465,7 +465,7 @@ محلي أُضيف مؤخرًا الأكثر إعجابًا - تم إنشاؤه-تلقائيًا (لم يتم العثور على برنامج تحميل) + مُنشأة تلقائيًا (لم يتم العثور على رافع) استرد لا يمكن استرداد هذا التنزيل اختيار مثيل @@ -480,21 +480,21 @@ الفيديوهات %d ثانية - %d ثواني - %d ثواني + %d ثانية + %d ثانية %d ثواني - %d ثواني - %d ثواني + %d ثانية + %d ثانية - هل تعتقد تحميل تغذية بطيء جدا؟ إذا كان الأمر كذلك ، فحاول تمكين التحميل السريع (يمكنك تغييره في الإعدادات أو بالضغط على الزر أدناه). + هل تعتقد أن تحميل التغذية بطيءٌ جدًا؟ إذا كان الأمر كذلك، فحاول تمكين التحميل السريع (يمكنك تغييره في الإعدادات أو بالضغط على الزر أدناه). \n \nيقدم NewPipe استراتيجيتين لتحميل الخلاصة: -\n• جلب قناة الاشتراك بأكملها ، وهي بطيئة ولكنها كاملة. -\n• استخدام نقطة نهاية خدمة مخصصة ، وهي سريعة ولكنها عادة لا تكتمل. +\n• جلب قناة الاشتراك بأكملها، وهي بطيئة ولكنها كاملة. +\n• استخدام نقطة نهاية خدمة مخصصة، وهي سريعة ولكنها عادةً لا تكتمل. \n -\nالفرق بين الاثنين هو أن العنصر السريع عادة ما يفتقر إلى بعض المعلومات ، مثل مدة العنصر أو نوعه (لا يمكن التمييز بين مقاطع الفيديو المباشرة والأخرى العادية) وقد يعيد عناصر أقل. +\nالفرق بين الاثنين هو أن العنصر السريع عادة ما يفتقر إلى بعض المعلومات، مثل مدة العنصر أو نوعه (لا يمكن التمييز بين مقاطع الفيديو المباشرة والأخرى العادية) وقد يعيد عناصر أقل. \n -\n يوتيوب هو مثال على الخدمة التي تقدمها هذه طريقة سريعة مع تغذية RSS الخاصة بها. +\nيوتيوب هو مثال على الخدمة التي تقدمها هذه طريقة سريعة مع تغذية RSS الخاصة بها. \n \nلذا فإن الاختيار يتلخص في ما تفضله: السرعة أو المعلومات الدقيقة. تعطيل الوضع السريع @@ -525,35 +525,35 @@ مجموعات القنوات %d يوم - %d أيام + %d يوم %d أيام %d أيام - %d أيام - %d أيام + %d يومًا + %d يومًا %d ساعة - %d ساعات - %d ساعات + %d ساعة + %d ساعة %d ساعات - %d ساعات - %d ساعات + %d ساعة + %d ساعة %d دقيقة - %d الدقائق - %d الدقائق - %d الدقائق - %d الدقائق - %d الدقائق + %d دقيقة + %d دقيقة + %d دقائق + %d دقيقة + %d دقيقة نظرا لقيود مشغل ExoPlayer مدة التقديم تم ضبطها الى %d ثانية إلغاء كتم الصوت كتم الصوت مساعدة - هذا المحتوى ليس مدعوم من قبل NewPipe. + هذا المحتوى ليس مدعومًا من قبل NewPipe. \n -\nنأمل أن يكون مدعوما في التحديثات القادمة. +\nنأمل أن يكون مدعومًا في التحديثات القادمة. ∞ فيديو +100 فيديو الفنانين @@ -577,7 +577,7 @@ إظهار الاشتراكات غير المجمعة فقط لا توجد إشارات مرجعية لقائمة التشغيل حتى الآن اختر قائمة تشغيل - يرجى مراجعة ما إذا توجد بالفعل مشكلة تناقش التحطم الموجود بالفعل.عند إنشاء تذاكر مكررة، فإنك تستغرق منا وقتًا يمكن أن نقضيه في إصلاح الخطأ الفعلي. + يرجى مراجعة ما إذا توجد بالفعل مشكلة تناقش التحطم الموجود بالفعل. عند إنشاء تذاكر مكررة، فإنك تستغرق منا وقتًا يمكن أن نقضيه في إصلاح الخطأ الفعلي. تقرير على GitHub نسخ التقرير مُنسق عرض نتائج ل: %s @@ -593,7 +593,7 @@ لا شيء جارٍ التحميل خلط - كرّر + تكرار يمكنك تحديد ثلاثة إجراءات كحد أقصى لإظهارها في الإشعار المضغوط! قم بتحرير كل إشعار أدناه من خلال النقر عليه. حدد ما يصل إلى ثلاثة منها لتظهر في الإشعار المضغوط باستخدام مربعات الاختيار الموجودة على اليمين زر الإجراء الخامس @@ -617,7 +617,7 @@ إظهار الصورة المصغرة قم بإيقاف التشغيل لإخفاء مربعات المعلومات الوصفية بمعلومات إضافية حول منشئ، البث أو محتوى البث أو طلب البحث إظهار معلومات التعريف - الأخيرة + حديثة حساب التجزئة إشعارات لتقدم تجزئة الفيديو إشعار تجزئة الفيديو @@ -630,19 +630,19 @@ إظهار الوصف فتح مع يتوفر هذا المحتوى فقط للمستخدمين الذين قاموا بالدفع، لذلك لا يمكن بثه أو تنزيله عبر NewPipe. - يتوفر هذا الفيديو فقط لأعضاء YouTube Music Premium ، لذلك لا يمكن بثه أو تنزيله من قبل NewPipe. + يتوفر هذا الفيديو فقط لأعضاء YouTube Music Premium، لذلك لا يمكن بثه أو تنزيله من قبل NewPipe. هذا المحتوى خاص، لذلك لا يمكن دفقه أو تنزيله بواسطة NewPipe. - هذا هو مسار SoundCloud Go+ ، على الأقل في بلدك ، لذلك لا يمكن بثها أو تنزيلها من قبل NewPipe. + هذا مسار SoundCloud Go+، على الأقل في بلدك، لذلك لا يمكن دفقه أو تنزيله بواسطة NewPipe. هذا المحتوى غير متوفر في بلدك. اغلق التطبيق قسريا هذا الفيديو مقيد بالفئة العمرية. -\nنظرا لسياسات YouTube الجديدة المتعلقة بمقاطع الفيديو المقيدة بالفئة العمرية، لا يمكن ل NewPipe الوصول إلى أي من مقاطع الفيديو الخاصة بها وبالتالي يتعذر تشغيلها. +\nنظرا لسياسات YouTube الجديدة المتعلقة بمقاطع الفيديو المقيدة بالفئة العمرية، لا يمكن لـNewPipe الوصول إلى أي من مقاطع الفيديو الخاصة بها وبالتالي لا يمكن تشغيلها. إذاعة المميزة حل بدأ التنزيل يمكنك اختيار نسقك الليلي المفضل أدناه - حدد موضوعك الليلي المفضل - %s + حدد موضوعك الليلي المفضل — %s تلقائي (سمة الجهاز) الثيم الليلي إظهار تفاصيل القناة @@ -652,14 +652,14 @@ خاص غير مدرج عامة - عنوان URL للصورة المصغرة + رابط الصورة المصغرة المضيف الدعم اللغة الحد العمري الخصوصيّة الرخصة - الفئة + الوسوم الصنف تعطيل تحديد النص في الوصف تمكين تحديد نص في الوصف @@ -671,12 +671,12 @@ حساب منشئ المحتوى قد تم إنهائه. \nلن يتمكن NewPipe من تحميل هذه الخلاصة في المستقبل. \nهل تريد إلغاء الاشتراك من هذه القناة؟ - تعذر تحميل تغذية ل \'%s\'. + تعذر تحميل تغذية لـ\'%s\'. خطأ في تحميل الخلاصة - بدءًا من Android 10 ، يتم دعم \"Storage Access Framework\" فقط - لا يتم دعم \"Storage Access Framework\" على Android KitKat والإصدارات الأقدم + بدءًا من Android 10، يتم دعم \"Storage Access Framework\" فقط + \"Storage Access Framework\" غير مدعوم على Android KitKat والإصدارات الأقدم سيتم سؤالك عن مكان حفظ كل تنزيل - لم يتم تعيين مجلد التحميل ، الرجاء اختيار مجلد التحميل الافتراضي الآن + لم يتم تعيين مجلد التحميل، الرجاء اختيار مجلد التحميل الافتراضي الآن إيقاف تشغيل وضع الجهاز اللوحي @@ -687,7 +687,7 @@ جودة عالية (أكبر) معاينة مصغرة على شريط التمرير علّمه كفيديو تمت مشاهدته - اعجب بها منشئ المحتوى + أعجب بها منشئ المحتوى جاري تحميل تفاصيل القناة… خطأ في عرض تفاصيل القناة أظهر أشرطة ملونة لبيكاسو أعلى الصور تشير إلى مصدرها: الأحمر للشبكة والأزرق للقرص والأخضر للذاكرة @@ -696,12 +696,12 @@ اقتراحات البحث المحلية اسحب العناصر لإزالتها - اكتمل %1$s التنزيل - اكتمل %1$s التنزيل - اكتمل %1$s التنزيل - اكتملت %1$s التنزيلات - اكتملت %1$s التنزيلات - اكتملت %1$s التنزيلات + اكتمل %1$s تنزيل + اكتمل %1$s تنزيل + اكتمل %1$s تنزيل + اكتملت %1$s تنزيلات + اكتمل %1$s تنزيل + اكتمل %1$s تنزيل اكتمل التنزيل @@ -720,9 +720,20 @@ التحقق يدويا من وجود إصدارات جديدة جاري التحقق من وجود تحديثات… عناصر تغذية جديدة - الإبلاغ عن أخطاء المشغل إظهار خيار تعطل عند استخدام المشغل إظهار \"تعطل المشغل\" تحطيم المشغل - رفع تقرير لأخطاء المشغل بالتفصيل الكامل بدلا من إظهار رسالة اشعار قصيرة الأجل (مفيدة لتشخيص المشاكل) + إشعار الإبلاغ عن الأخطاء + التنبيهات المتعلقة بالإبلاغ عن الأخطاء + واجه NewPipe خطأ، اضغط للتقرير + حدث خطأ، انظر للإشعار + قم بإنشاء تنبيه بالخطأ + لم يتم العثور على مدير ملفات مناسب لهذا الإجراء. +\nالرجاء تثبيت مدير ملفات أو محاولة تعطيل \"%s\" في إعدادات التنزيل. + إظهار خطأ snackbar + لم يتم العثور على مدير ملفات مناسب لهذا الإجراء. +\nالرجاء تثبيت مدير ملفات متوافق مع Storage Access Framework. + يتم تشغيله في الخلفية + تعليق مثبت + LeakCanary غير متوفر \ No newline at end of file diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml index be31d04a8..0cdc1f2f5 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 @@ -33,7 +33,7 @@ %s 个视频 - 停用 + 已停用 后台播放 显示搜索建议 订阅 @@ -58,7 +58,7 @@ 更新 文件已删除 无法得知订阅人数 - 发布新版本时,通知我升级应用 + 有新版本时,显示通知提示更新应用 网格 NewPipe 可更新! 服务器不接受多线程下载, 使用 @string/msg_threads = 1 重试 @@ -115,7 +115,7 @@ 等待中 已暂停 已加入队列 - 排队 + 加入队列 操作已被系统拒绝 下载失败 没有评论 @@ -148,7 +148,7 @@ App/UI 崩溃 抱歉, 这本不该发生。 使用电子邮件反馈错误 - 抱歉, 发生了一些错误。 + 抱歉,发生了一些错误。 反馈 信息: 发生了什么: @@ -174,7 +174,7 @@ 部分分辨率下没有音频 选择搜索时显示的建议 最佳分辨率 - 开源且小巧的 Android 媒体播放器。 + 自由且小巧的 Android 媒体播放器。 在 GitHub 上查看 NewPipe 的许可证 你是否想过要翻译、设计、清理或重构代码——我们始终欢迎你来贡献! @@ -194,7 +194,7 @@ 历史记录 历史记录 NewPipe 通知 - NewPipe 在后台播放和悬浮窗播放时在通知栏中显示通知 + NewPipe 播放器的通知 默认视频格式 行为 空空如也 @@ -249,7 +249,7 @@ 导入成功 没有有效的 ZIP 文件 警告:无法导入所有文件。 - 此操作会覆盖当前设置 + 此操作会覆盖当前设置。 显示信息 收藏 最近观看 @@ -272,8 +272,8 @@ 缩放画面 调试 自动生成 - 『内存泄漏监视』可能导致应用在『核心转储』时无响应 - 报告『提前结束Android生命周期』错误 + 内存泄漏监测可能会导致应用在堆转储时无响应 + 报告超出生命周期的错误 强制报告处理后的未送达的 Activity 或 Fragment 生命周期之外的 Rx 异常 使用快速寻址(不精确) 快速寻址定位允许播放器以较低精确度为代价换取更快的寻址定位速度。此功能不适用于以 5、15 或 25 秒为隔的寻址定位 @@ -300,8 +300,8 @@ \n3. 单击“包含所有数据”,然后单击“取消全选”,然后仅选择“订阅”并单击“确定” \n4. 点击“下一步”,然后点击“创建导出作业” \n5. 出现“下载”按钮后点击它 -\n6. 单击下面的导入文件并选择下载的 zip 文件 -\n7.【如果 zip 导入失败】解压 .csv文件(通常在“YouTube和YouTube Music/subscriptions/subscriptions.csv”下),点击下方的导入文件,选择解压出来的 csv 文件 +\n6. 单击下面的导入文件并选择下载的 .zip 文件 +\n7.(如果 .zip 导入失败)解压 .csv文件(通常在“YouTube和YouTube Music/subscriptions/subscriptions.csv”下),点击下方的导入文件,选择解压出来的 csv 文件 通过输入网址或你的 ID 导入 SoundCloud 配置文件: \n \n1. 在浏览器中启用“电脑模式“(该网站未适配移动设备); @@ -332,7 +332,7 @@ 清空搜索历史关键词 是否删除全部搜索历史? 搜索历史已删除 - NewPipe 是版权自由软件:您可以随时使用、研究共享和改进它。您可以根据自由软件基金会发布的 GNU 通用公共许可证 GPLv3 或(由您选择的)任何更高版本的许可证重新分发或修改该许可证。 + NewPipe 是 Copyleft 的自由软件:您可以随时使用、研究共享和改进它。您可以根据自由软件基金会发布的 GNU 通用公共许可证 GPLv3 或(由您选择的)任何更高版本的许可证重新分发或修改该许可证。 是否要导入设置? NewPipe 隐私政策 NewPipe 项目非常重视您的隐私。因此,未经您的同意,应用程序不会收集任何数据。 @@ -358,7 +358,7 @@ 使用手势控制播放器的亮度 视频默认语言 应用更新通知 - 当 NewPipe 有新版本时发送通知 + NewPipe 新版本的通知 外置存储不可用 无法下载到外部 SD 卡,修改下载文件夹位置? 读取已保存标签时发生错误,因此使用默认标签 @@ -521,7 +521,7 @@ 移除看过的视频? 移除看过的视频 来自服务的原始文本将在串流项目中可见 - 显示原始时间 + 在项目上显示原始时间 启用 YouTube“受限模式” 仅显示未分组订阅 播放列表页 @@ -660,9 +660,20 @@ 检查更新中… 检查更新 新订阅源条目 - 完整报告播放器错误,而不是弹出一个临时Toast(对诊断应用很有用) 显示\"使播放器崩溃\" 在使用播放器时显示一个崩溃选项 使播放器崩溃 - 报告播放器错误 + 错误报告通知 + 提示报告错误的通知 + 发生错误,详见通知 + 显示错误警示SnackBar + 创建一条错误通知 + 找不到适合此操作的文件管理器。 +\n请安装一文件管理器或尝试在下载设置中禁用“%s”。 + 找不到适合此操作的文件管理器。 +\n请安装与存储访问框架(SAF)兼容的文件管理器。 + NewPipe 遇到了一个错误,点击此处报告此错误 + 已经在后台播放 + 置顶评论 + LeakCanary 不可用 \ No newline at end of file diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 40e30928a..7287aeb3d 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -126,7 +126,7 @@ S\'ha eliminat la memòria cau d\'imatges Elimina les metadades de la memòria cau S\'ha esborrat la memòria cau de metadades - Afegeix vídeos relacionats a la cua + Posa a la cua el següent flux Suggeriments de cerca Mostra suggeriments durant la cerca Historial de cerca @@ -136,8 +136,8 @@ Llengua per defecte dels continguts S\'està reproduint en rerefons S\'està reproduint en mode emergent - Notificació del NewPipe - Notificacions dels reproductors en rerefons o emergents del NewPipe + Notificació de NewPipe + Notificacions per al reproductor de NewPipe No s\'han pogut carregar totes les miniatures No s\'ha pogut desxifrar la signatura de l\'URL del vídeo No s\'ha pogut processar el lloc web @@ -270,7 +270,7 @@ Desvincula (pot causar deformació) Elimina totes les dades de llocs web de la memòria cau Acaba de reproduir la cua (sense repetició) quan s\'hi afegeixi un vídeo relacionat - Mostra els missatges d\'ajuda + Mostra l\'indicador «Mantenir per posar a la cua» Mostra un missatge d\'ajuda quan el botó de mode en segon pla o emergent estigui premut a la pàgina de detalls d\'un vídeo Què ha passat:\\nPetició:\\nIdioma del contingut:\\nPaís del contingut:\\nLlengua de l\'aplicació:\\nServei:\\nHora GMT:\\nPaquet:\\nVersió:\\nVersió del SO: Acció d\'obertura preferida @@ -285,7 +285,8 @@ \n3. Premeu \"Totes les dades incloses\", després \"Dessel·lecciona-ho tot\", llavors sel·leccioneu només \"Subscripcions\" i finalment premeu \"D\'acord\". \n4. Premeu \"Pas següent\" i llavors a \"Crea una exportació\" \n5. Premeu el botó \"Baixa\" un cop hagi aparegut -\n6. Del fitxer comprimit baixat, extreieu-ne el fitxer subscripcions.json (es troba a \"Takeout/YouTube i YouTube Music/subscripcions/subscripcions.json\") i importeu-lo aquí. +\n6. Premeu a IMPORTA EL FITXER i sel·leccioneu el fitxer .zip descarregat +\n7. [En cas que la importació del fitxer .zip hagi fallat] extreieu-ne el fitxer subscripcions.csv (es troba generalment a \"Takeout/YouTube i YouTube Music/subscripcions/subscripcions.csv\"), premeu a IMPORTA EL FITXER i sel·leccioneu el fitxer .csv extret. Importeu un perfil del SoundCloud mitjançant l\'URL o l\'identificador del vostre perfil: \n \n1. Activeu el «Mode d\'ordinador» en un navegador (el lloc web no està disponible per a dispositius mòbils) @@ -401,7 +402,8 @@ Limita la cua de baixades Inicia les baixades Pausa les baixades - Si us demanarà la ubicació de cada baixada + Se us demanarà la ubicació de cada baixada. +\nHeu d\'activar el SAF si voleu descarregar-ho a una targeta SD externa Posicions a les llistes Mostra els indicadors de posició de reproducció a les llistes Neteja les dades @@ -414,9 +416,8 @@ S\'ha esborrat les posicions de reproducció El fitxer s\'ha mogut o suprimit Només una baixada alhora - Utilitza SAF - El SAF (Storage Access Framework; estructura d\'accés a l\'emmagatzematge) us permet realitzar baixades a una memòria externa com una targeta SD. -\nAlguns dispositius no en són compatibles + Fes servir el SAF + El SAF (Storage Access Framework; estructura d\'accés a l\'emmagatzematge) us permet realitzar baixades a una memòria externa com una targeta SD. Esborra les posicions de reproducció Esborra totes les posicions de reproducció Voleu suprimir tots els punts de reproducció\? @@ -482,7 +483,7 @@ \nEn definitiva, l\'elecció depèn de si preferiu rapidesa a assegurar-vos que l\'informació és precisa. Desactiva el mode ràpid Activa el mode ràpid - Disponible en alguns serveis, normalment és més ràpid, però podria només incloure un nombre limitat de contingut i sovint informació incomplerta (per exemple, sense durada, tipus…). + Disponible en alguns serveis, normalment és més ràpid, però podria només incloure un nombre limitat de contingut i sovint informació incomplerta (per exemple, sense durada, tipus…) Recupera des d\'un feed dedicat si és possible Actualitza sempre Temps que ha de passar perquè una subscripció es consideri obsoleta — %s @@ -558,7 +559,7 @@ YouTube proporciona un \"mode restringit\" que amaga contingut potencialment inadequat per a infants Mostra contingut que podria ser inadequat pels infants No s\'ha pogut reconèixer l\'adreça URL. Obrir-la amb una altra aplicació\? - Cua automàtica + Posa a la cua automàticament Desactiveu-ho per deixar de mostrar les metadades, que contenen informació addicional sobre el creador del directe, el contingut o una sol·licitud de cerca Mostra les metadades La cua de reproducció activa serà sobreescrita @@ -651,4 +652,40 @@ Inicia el reproductor principal en pantalla completa Llisqueu els elements per eliminar-los Si la rotació automàtica està bloquejada, no inicieu vídeos al mini reproductor, sinó que aneu directament al mode de pantalla completa. Podeu accedir igualment al mini reproductor sortint de pantalla completa + Ja s\'està reproduint en segon pla + Notificació d\'informe d\'error + Tancar abruptament el reproductor + Comprovar si hi ha actualitzacions + Comprovar manualment si hi ha noves versions + + Baixada finalitzada + %s baixades finalitzades + + Vista prèvia de les miniatures de la barra de cerca + No s\'ha trobat cap gestor de fitxers adequat per a aquesta acció. +\nInstal·leu un gestor de fitxers compatible amb l\'entorn d\'accés d\'emmagatzematge. + No s\'ha trobat cap gestor de fitxers adequat per a aquesta acció. +\nInstal·leu un gestor de fitxers o intenteu desactivar «%s» als paràmetres de baixada. + S\'ha produït un error, consulteu la notificació + Afegit el següent vídeo a la cua + NewPipe ha trobat un error, toca per informar + Posa a la cua el següent vídeo + Crear una notificació d\'error + Error en mostrar els detalls del canal + Notificacions per informar d\'errors + Mostra una barra d\'errors + S\'estan comprovant les actualitzacions… + + S\'ha suprimit %1$s baixada + S\'han suprimit %1$s baixades + + El \"Sistema d\'Accés a l\'Emmagatzematge\" no està implementat a Android KitKat i a versions anteriors + A partir de l\'Android 10 només s\'admet el \"Sistema d\'Accés a l\'Emmagatzematge\" + Elements de feed nous + El mode d\'alimentació ràpida no proporciona més informació sobre això. + Comentari fixat + Mostrar \"tancar de forma violenta el reproductor\" + Mostra una opció de fallada quan s\'utilitza el reproductor + Mostra les cintes de color Picasso a la part superior de les imatges que indiquen la seva font: vermell per a la xarxa, blau per al disc i verd per a la memòria + El LeakCanary no està disponible \ No newline at end of file diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index e42f10aa5..7f173bc60 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -45,7 +45,7 @@ سڕینەوەی مێژووی گەڕان هەڵە ئەمە لەسەر ڕێکخستنەکانی ئێستات جێگیر دەبێت. - ئاگانامەکانی نیوپایپ + پەیامەکانی نیوپایپ نیوپایپ لەلایەن چەند خۆبەخشێکەوە دروستکراوە کە کاته‌كانی خۆیان پێ بەخشیووە تاکو باشترین خزمەتگوزاریت پێشکەش بکەن. هیچ نەبێت بە کڕینی کوپێک قاوە یارمەتی گەشەپێدەرەکانمان بدە بۆ ئەوەی کاتی زیاتر تەرخان بکەین بۆ بەرەوپێشبردنی نیوپایپ. ملیار گەڕانی پێشنیارکراوەکان @@ -191,7 +191,7 @@ بینراو نییە ئەو فایله‌ بوونی نییە یان دەسەڵاتی خوێندنەوە و نوسینی لاوازە ناتوانرێت ماڵپەڕ شیبکرێتەوە - ڕه‌نووسه‌ ڕێ پێدراوه‌كانله‌ فایله‌ ناوییه‌كاندا + ڕه‌نووسه‌ ڕێپێدراوه‌كان له‌ فایله‌ ناوییه‌كاندا ئایدییەکەت ، soundcloud.com/yourid یارمەتی چی نوێ هه‌یه‌ @@ -237,9 +237,9 @@ كردنه‌وه‌ له‌ وێبگه‌ر ڕاژەکە هیچ داتایەک نانێرێت شوێنی کارپێکراوەکان سڕانەوە - ئاگانامەکانی وەشانی نوێی نیوپایپ + پەیامەکانی وەشانە نوێیەکانی نیوپایپ تەنها چەند مۆبایلێک پشتگیری لێدانی ڤیدیۆی 2K/4K دەکەن - ئاگانامەکانی پاشبنەمای نیوپایپ و لێدانه‌كانی پەنجەرە + پەیامەکانی لێدەری نیوپایپ لەهەندێ خزمەتگوزاریدا بەردەستە، بەزۆری خێراترینە بەڵام ڕەنگە هەندێک لە بابەتەکان زانیارییەکانیان ناتەواو بێت (وەک نەبوونی ماوە، جۆری بابەت ، نەبوونی پەخش) %d چرکە @@ -275,7 +275,7 @@ هیچ پەخشێکی ڤیدیۆیی نەدۆزرایەوە هاوردە لە كرتە بکە لەسەر ”كرا” کاتێك کە چارەسەرکرا - ئاگانامەی نوێکاری بەرنامە + پەیامی نوێکردنەوەی بەرنامە ناتوانرێت هەموو وێنۆچکەکان باربکرێن هەناردەی پێشووتر فایلی ZIP دروست نییە @@ -394,7 +394,7 @@ نیشانه‌كردنی خشته‌لێدان ناوی فایل ناکرێت بەتاڵ بێت ناتوانرێت واژووی بەستەری ڤیدیۆ بخوێنرێتەوە - پیشاندانی ئاگانامەیەک بۆ ئامادەبوونی به‌رنامه‌ لەکاتی بەردەست بوونی وەشانی نوێ + پیشاندانی پەیامێک بۆ ئامادەبوونی به‌رنامه‌ لەکاتی بەردەست بوونی وەشانی نوێ مێژووی سەیرکردن سکاڵا لەسەر کێشەکان خۆکار-دانراو (هیچ بەرزکەرەوەیەک نەدۆزرایەوە) @@ -462,9 +462,9 @@ ڕه‌نووسی جێگۆڕین ڕێكخستنه‌كان دابه‌زێنراو - بۆ هاورده‌ كردنی بەژداربوونەکانی یوتوب له‌ گووگڵه‌وه‌: + بۆ هاورده‌كردنی بەژداربوونەکانی یوتوب له‌ گووگڵه‌وه‌: \n -\n1. ئەم بەستەرە بکەوە: %1$s +\n1. ئەم بەستەرە بکەرەوە: %1$s \n2. بچۆرەژوورەوە گەر داوای‌ کرد \n3. كرته‌ بكه‌ له‌ \"All data included\"، پاشان كرته‌ بكه‌ له‌ \"Deselect all\" ، پاشان ته‌نیا \"subscriptions\" هه‌ڵبژێره‌ پاشان كرته‌ له‌ \"OK\" بكه‌ \n4. كرته‌ بكه‌ له‌ \"Next step\" و دواتر له‌ \"Create export\" @@ -551,14 +551,14 @@ نێوانگری تێکەڵکردن دووبارە - دەتوانیت تا سێ كردار دیار بكه‌یت تا پیشان بدرێن له‌ ئاگانامه‌كه‌دا! - ده‌ستكاری هه‌ر یه‌كێك له‌م كردارانه‌ی خواره‌وه‌ بكه‌ له‌ڕێگه‌ی كرته‌ له‌سه‌ریان. ده‌توانیت تا زیاتر له‌ سێ دانه‌یان هه‌ڵبژێریت له‌ ڕێگای چوارگۆشه‌كانی لای ڕاسته‌وه‌یان، تا پیشان بدرێن له‌ ئاگانامه‌كاندا + دەتوانیت تا سێ كردار دیار بكه‌یت تا پیشان بدرێن له‌ پەیامەکەدا! + ده‌ستكاری هه‌ر یه‌كێك له‌م كردارانه‌ی خواره‌وه‌ بكه‌ له‌ڕێگه‌ی كرته‌ له‌سه‌ریان. ده‌توانیت تا زیاتر له‌ سێ دانه‌یان هه‌ڵبژێریت له‌ ڕێگای چوارگۆشه‌كانی لای ڕاسته‌وه‌یان، تا پیشان بدرێن له‌ پەیامەکاندا پێنجه‌م كرداری دوگمه‌ چواره‌م كرداری دوگمه‌ سێیه‌م كرداری دوگمه‌ دووه‌م كرداری دوگمه‌ یه‌كه‌م كرداری دوگمه‌ - وێنۆچكه‌ی ڤیدیۆ پێوانه‌ ده‌كرێته‌وه‌ له‌ ئاگانامه‌كاندا له‌ ڕه‌هه‌ندی 16:9 ه‌وه‌ بۆ ڕه‌هه‌ندی 1:1 + وێنۆچكه‌ی ڤیدیۆ پێوانه‌ ده‌كرێته‌وه‌ له‌ پەیامەکاندا له‌ ڕه‌هه‌ندی 16:9 ه‌وه‌ بۆ ڕه‌هه‌ندی 1:1 پێوانەكردنی وێنۆچكه‌ بۆ ڕه‌هه‌ندی 1:1 پیشاندانی ئەنجامەکانی: %s كردنه‌وه‌ له‌ @@ -567,8 +567,8 @@ ناكارایبكه‌ بۆ شاردنه‌وه‌ی دیسکریپشن له‌سه‌ر ڤیدیۆ و زانیاری زیاتر پیشاندانی دیسکریپشن ڕووكاری شه‌و - ئه‌ندرۆید ڕه‌نگی ئاگانامه‌ دڵخواز ده‌كات به‌پێی ڕه‌نگی سه‌ره‌كی وێنۆچكه‌كه‌ ( ڕه‌چاوی ئه‌وه‌ بكه‌ كه‌ ئه‌م تایبه‌تمه‌ندییه‌ هه‌موو ئامێرێك ناگرێته‌وه‌ ) - ڕه‌نگكردنی ئاگانامه‌ + ئه‌ندرۆید ڕه‌نگی پەیام دڵخواز ده‌كات به‌پێی ڕه‌نگی سه‌ره‌كی وێنۆچكه‌كه‌ ( ڕه‌چاوی ئه‌وه‌ بكه‌ كه‌ ئه‌م تایبه‌تمه‌ندییه‌ هه‌موو ئامێرێك ناگرێته‌وه‌ ) + ڕه‌نگكردنی پەیام یوتوب ”دۆخی قه‌ده‌غه‌كراو” پێشكه‌ش ده‌كات كه‌ بابەتە نه‌شیاوه‌كان ده‌شارێته‌وه‌ ئه‌ژماركردنی هاش لێدوانه‌كان ناكاراكراون @@ -580,8 +580,8 @@ خاوێنكردنه‌وی ئه‌و شه‌كرۆكانه‌ی كه‌ له‌ نیوپایپ كۆگاكراون ، ئه‌مه‌ش له‌دوای شیكار كردنی reCAPTCHA شه‌كرۆكه‌كانی reCAPTCHA خاوێنكرانه‌وه‌ سڕینه‌وه‌ی شه‌كرۆكه‌كانی reCAPTCHA - ئاگانامه‌كانی ئه‌نجامدانی هاشكردنی ڤیدیۆ - ئاگانامه‌ی هاشی ڤیدیۆ + پەیامەکانی ئه‌نجامدانی هاش كردنی ڤیدیۆ + پەیامی هاش ڤیدیۆ ناکاراکردنی دیار کردنی نوسینی نێو دیسکریبشن کاراکردنی دیار کردنی نوسینی نێو دیسکریبشن لە ئێستادا دەتوانیت نوسینی نێو دیسکریپشن دیار بکەیت. بەڵام ڕەچاوی ئەوە بکە کە ئەو پەڕەیە ڕەنگە تێکبچێت و لینکەکان کرتەیان لەسەر نەکرێت لە دۆخی دیار کردندا. @@ -620,7 +620,7 @@ هیچ به‌رنامه‌یه‌كی نێو مۆبایله‌كه‌ت ناتوانێت ئه‌مه‌ بكاته‌وه‌ به‌شه‌كان دواین - وێنۆچكه‌كه‌ بۆ پاشبنه‌مای ڕوونماداخراو و ئاگانامه‌كان به‌كاربهێنرێن + وێنۆچكه‌كه‌ بۆ پاشبنه‌مای ڕوونماداخراو و پەیامەکان به‌كاردەهێنرێن پیشاندانی وێنۆچكه‌ تەماشاکراوەکان پیشان بدرێن بۆ دابه‌زاندنی هه‌ر بابه‌تێك پرست پێ ده‌كرێت له‌باره‌ی شوێنی دابه‌زاندنیان @@ -667,4 +667,24 @@ لە نۆبەت دانان بۆ دواتر لە نۆبەت دانرا بۆ دواتر جێبەجێ دەکرێت... ڕەنگە ساتێک بخایەنێت + دەپشکنرێت بۆ نوێکردنەوە… + پشکنینی خۆیی بۆ وەشانی نوێ + بژاردەی کڕاش کردن پیشان دەدات لەکاتی بەکارهێنانی لێدەرەکە + کێشەیەک ڕوویدا ، پەیامەکە ببینە + نیوپایپ تووشی کێشەیەک بوو ، کرتە بکە بۆ سکاڵاکردن + پیشاندانی ”کڕاش کردنی لێدەرەکە“ + سازاندنی پەیامی کێشەیەک + پشکنین بۆ نوێکردنەوە + وا لە پاشبنەمادا لێدەدرێت + کێشە لە سکاڵا کردنی پەیام + پەیامەکانی سکاڵاکردن لە کێشەکان + بابەتە نوێیەکانی فیید + لێدوانی هەڵواسراو + کڕاش کردنی لێدەر + پیشاندانی هەڵەی سناکباڕ + هیچ ڕێکخەرێکی فایلی گونجاو نەدۆزرایەوە بۆ ئەم کردارە. +\nتکایە ڕێکخەری فایلییەک دابمەزرێنە لۆ هەوڵدانی ناکاراکردنی \'%s\' لە ڕێکخستنەکانی دابەزاندندا. + LeakCanary بەردەست نییە + هیچ ڕێکخەرێکی فایلی گونجاو نەدۆزرایەوە بۆ ئەم کردارە. +\nتکایە ڕێکخەرێکی فایلی دابمەزرێنە کە گونجاوبێت لەگەڵ دەسەڵاتی گەیشتن بە بیرگە. \ 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 98b632692..2e2747632 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -123,7 +123,7 @@ Nejlepší rozlišení Vrátit Oznámení NewPipe - Oznámení pro NewPipe přehrávače v pozadí a v okně + Oznámení pro NewPipe přehrávač Žádné výsledky Je tu sranda jak v márnici mld. @@ -164,7 +164,7 @@ Podílet se Historie Historie - Zobrazovat tip \"Podržet pro přidání\" + Zobrazit tip \"Podržet pro vložení do fronty\" Ukázat tip po stisku na pozadí nebo na popup tlačítko v \"Podrobnostech\" o videu Přehrát vše Tento stream nelze přehrát @@ -258,7 +258,7 @@ Vymazat metadata v mezipaměti Odebrat všechna data uložená v mezipaměti Mezipaměť metadat vymazána - Automatická fronta dalšího streamu + Další stream automaticky vložit do fronty Pokračovat konečnou (neopakující se) frontu playbacku připojením souvisejícího streamu Soubor Neexistující složka @@ -275,15 +275,15 @@ Předchozí export Odběry nelze importovat Odběry nelze exportovat - Importovat YouTube odběry stáhnutím exportního souboru: + Importovat YouTube odběry z Google: \n \n1. Přejděte na tuto URL adresu: %1$s \n2. Na vyžádání se přihlašte -\n3. Klikněte na \"Jsou zahrnuta všechna data z YouTube\" pak na \"Zrušit výběr všech\" a pak vyberte jen \"odběry\" a klikněte na OK +\n3. Klikněte na \"Jsou zahrnuta všechna data\", \"Zrušit výběr všech\" a pak vyberte jen \"odběry\" a klikněte na OK \n4. Klikněte na \"Další krok\" a pak na \"Vytvořit export\" \n5. Vyčkejte než se objeví tlačítko \"Stáhnout\" a klikněte na něj \n6. Klikněte IMPORTOVAT SOUBOR a vyberte stažený .zip soubor z předchozího kroku -\n7. [Pokud se import .zip souboru nezdaří] Rozbalte soubor subscriptions.csv (měl by se nacházet v adresáři \"YouTube and YouTube Music/subscriptions/subscriptions.csv\"), stiskněte IMPORTOVAT SOUBOR níže a vyberte rozbalený soubor subscriptions.csv +\n7. [Pokud se import .zip souboru nezdaří] Rozbalte soubor .csv (měl by to být soubor \"YouTube and YouTube Music/subscriptions/subscriptions.csv\"), stiskněte IMPORTOVAT SOUBOR níže a vyberte rozbalený csv soubor Importovat SoundCloud profil zadáním URL adresy nebo vašeho ID: \n \n1. Ve svém prohlížeči povolte \"režim pro PC\" (pro mobilní zařízení není stránka dostupná) @@ -346,7 +346,7 @@ Aktualizace Soubor smazán Oznámení o aktualizaci aplikace - Oznámení o nové verzi NewPipe + Oznámení o nových verzích NewPipe Externí úložiště není k dispozici Nelze načíst uložené karty, takže se použijí výchozí karty Obnovit do výchozího nastavení @@ -680,4 +680,23 @@ Tažením položky odstraníte Spustit hlavní přehrávač na celé obrazovce Zpracovávám... může trvat moment + Ručně zkontrolovat zda je k dispozici nová verze + Kontrola aktualizací + NewPipe narazil na problém, klikněte pro nahlášení + Došlo k chybě, více v oznámení + Vytvořit oznámení o chybě + Kontrola aktualizací… + Ukázat \"Zřícení přehávače\" + Hraje již v pozadí + Nové položky feedů + Pro tuto akci nebyl nalezen žádný vhodný správce souborů. +\nProsím, nainstalujte správce souborů kompatibilní se Storage Access Framework. + Oznámení o hlášení chyb + Oznámení za účelem hlášení chyb + Pro tuto akci nebyl nalezen žádný vhodný správce souborů. +\nProsím, nainstalujte správce souborů nebo zkuste vypnout %s v nastaveních stahování. + Ukáže volbu pro zřícení během používání přehrávače + Ukázat krátké oznámení o chybě + Připnutý komentář + Zřícení přehrávače \ No newline at end of file diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 7e75ca57b..d348dc4a2 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -1,8 +1,8 @@ - Tryk søg for at komme i gang + Tryk på forstørrelsesglasset for at komme i gang. Udgivet %1$s - Ingen streamafspiller blev fundet. Vil du installere VLC\? + Ingen streamafspiller blev fundet. Installer VLC\? Ingen streamafspiller fundet (du kan installere VLC for at afspille den). Installer Annuller @@ -396,4 +396,5 @@ Tredje handlingstast Viser resultater for: %s Åben med + LeakCanary er ikke tilgængelig \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7786d9d8b..d181094a6 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -139,7 +139,7 @@ Abonnement konnte nicht aktualisiert werden Nach Unterbrechungen (z.B. Telefonaten) Wiedergabe fortsetzen NewPipe-Benachrichtigung - Benachrichtigungen für NewPipe-Hintergrund- und Pop-up Wiedergabe + Benachrichtigungen für den NewPipe-Player Verhalten Verlauf und Cache Rückgängig machen @@ -346,8 +346,8 @@ Wiedergabebenachrichtigung Konfiguriert die Benachrichtigung zum aktuell abgespielten Stream Datei gelöscht - Aktualisierungsbenachrichtigung - Benachrichtigung bei neuer NewPipe-Version + Benachrichtigung über App-Update + Benachrichtigungen über neue NewPipe-Versionen Kein externer Speicher verfügbar Herunterladen auf externe SD-Karte ist nicht möglich. Downloadordner zurücksetzen\? Konnte gespeicherte Tabs nicht lesen, daher werden die Voreinstellungen genutzt @@ -372,7 +372,7 @@ pausiert eingereiht Nachbearbeitung - Warteschlange + In Wiedergabe einreihen System verweigert den Zugriff Herunterladen fehlgeschlagen Eindeutigen Namen erzeugen @@ -583,8 +583,8 @@ Vorschaubild für Sperrbildschirmhintergrund und Benachrichtigungen verwenden Vorschaubild anzeigen Hash wird berechnet - Benachrichtigungen für den Video-hashing Fortschritt - Video Hash Benachrichtigung + Benachrichtigungen über den Hashing-Fortschritt von Videos + Video-Hash Benachrichtigung Letzte Metadaten anzeigen Deaktiviere diese Option, um Meta-Infofelder mit zusätzlichen Informationen zum Stream-Ersteller, zum Stream-Inhalt oder zu einer Suchanforderung auszublenden @@ -601,7 +601,7 @@ Dieses Video ist nur für YouTube Music Premium-Mitglieder verfügbar und kann daher nicht von NewPipe gestreamt oder heruntergeladen werden. Dies ist ein SoundCloud Go+ Track, zumindest in deinem Land, kann er von NewPipe nicht gestreamt oder heruntergeladen werden. Dieser Inhalt ist in deinem Land nicht verfügbar. - Absturz der App + App abstürzen lassen Dieses Video ist altersbeschränkt. \nAufgrund neuer YouTube-Richtlinien mit altersbeschränkten Videos kann NewPipe auf keinen dieser Videostreams zugreifen und ist daher nicht in der Lage, es abzuspielen. Radio @@ -674,9 +674,20 @@ Suche nach Aktualisierungen… Manuelle Prüfung auf neue Versionen Neue Feed-Elemente - \"Absturz des Players\" anzeigen - Absturz des Players - Meldet Playerfehler mit allen Details, anstatt eine kurzlebige Popupmeldung anzuzeigen (nützlich für die Diagnose von Problemen) + \"Player abstürzen lassen\" anzeigen + Player abstürzen lassen Zeigt eine Absturzoption an, wenn der Player verwendet wird - Playerfehler melden + Benachrichtigung über Fehlerberichte + Benachrichtigungen zur Meldung von Fehlern + Bei NewPipe ist ein Fehler aufgetreten. Zum Melden antippen + Ein Fehler ist aufgetreten, siehe die Benachrichtigung + Eine Fehlermeldung erstellen + Fehler-Kurzmeldung anzeigen + Es wurde kein geeigneter Dateimanager für diese Aktion gefunden. +\nBitte installiere einen Dateimanager oder versuche, \'%s\' in den Downloadeinstellungen zu deaktivieren. + Es wurde kein geeigneter Dateimanager für diese Aktion gefunden. +\nBitte installiere einen Storage Access Framework kompatiblen Dateimanager. + Wird bereits im Hintergrund abgespielt + Angehefteter Kommentar + LeakCanary ist nicht verfügbar \ No newline at end of file diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 46ef00f66..6a29a8a84 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -79,7 +79,7 @@ Αδύνατη η αλλαγή της εγγραφής Αδύνατη η ενημέρωση της εγγραφής Συνδρομές - Αγαπημένες λίστες αναπαραγωγής + Λίστες αναπαραγωγής με σελιδοδείκτες Τι νέο υπάρχει Στο παρασκήνιο Αναδυόμενο παράθυρο @@ -130,7 +130,7 @@ Μόνο μία φορά Αρχείο Ειδοποίηση NewPipe - Ειδοποιήσεις αναπαραγωγής παρασκηνίου και αναδυόμενου παραθύρου + Ειδοποιήσεις του αναπαραγωγέα του NewPipe [Άγνωστο] Αλλαγή σε Παρασκήνιο Αλλαγή σε Αναδυόμενο Παράθυρο @@ -343,7 +343,7 @@ Ενημερώσεις Συμβάντα Το αρχείο διαγράφηκε - Ειδοποίηση Ενημέρωσης Εφαρμογής + Ειδοποίηση ενημέρωσης εφαρμογής Ειδοποίηση για νεότερη έκδοση του NewPipe Εξωτερική μνήμη αποθήκευσης μη διαθέσιμη Η αποθήκευση στην SD κάρτα δεν είναι δυνατή. Επαναφορά στην αρχική τοποθεσία λήψης; @@ -366,7 +366,7 @@ σε παύση σε ουρά σε μετεπεξεργασία - Ουρά + Προσθήκη σε ουρά Η ενέργεια απορρίφθηκε από το σύστημα Η λήψη απέτυχε Δημιουργία μοναδικού ονόματος @@ -672,9 +672,20 @@ Χειροκίνητος έλεγχος για νέα έκδοση Έλεγχος αναβάθμισης Νέα αντικείμενα τροφοδοσίας - Εμφάνιση «κατάρρευσης αναπαραγωγέα» + Εμφάνιση «Κατάρρευσης αναπαραγωγέα» Εμφανίζει μια επιλογή κατάρρευσης κατά τη χρήση του αναπαραγωγέα - Αναφορά σφαλμάτων αναπαραγωγέα - Αναφορά σφαλμάτων αναπαραγωγέα με λεπτομέρειες αντί για ένα σύντομο μήνυμα (χρήσιμο για διάγνωση προβλημάτων) Κατάρρευση αναπαραγωγέα + Ειδοποίηση αναφοράς σφάλματος + Ειδοποιήσεις για την αναφορά σφαλμάτων + Συνέβη ένα σφάλμα. Δείτε την ειδοποίηση + Δημιουργία ειδοποίησης σφάλματος + Δε βρέθηκε κατάλληλος διαχειριστής αρχείων για αυτή την ενέργεια. +\nΕγκαταστήστε έναν ή δοκιμάστε να απενεργοποιήσετε το \'%s\' στις ρυθμίσεις λήψεων. + Δε βρέθηκε κατάλληλος διαχειριστής αρχείων για αυτή την ενέργεια. +\nΕγκαταστήστε έναν συμβατό με το Πλαίσιο Πρόσβασης Αποθήκευσης. + Το NewPipe παρουσίασε ένα σφάλμα. Πατήστε για αναφορά + Εμφάνιση μιας snackbar σφάλματος + Αναπαράγεται ήδη στο παρασκήνιο + Καρφιτσωμένο σχόλιο + Το LeakCanary δεν είναι διαθέσιμο \ No newline at end of file diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 2fc6954fd..b1c3d0187 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -16,8 +16,9 @@ \n2. Log in when asked \n3. Click on ‘All data included’, then on ‘Deselect all’, then select only ‘subscriptions’ and click ‘OK’ \n4. Click on ‘Next step’ and then on ‘Create export’ -\n5. Click on the ‘Download’ button after it appears and -\n6. From the downloaded takeout zip extract the .json file (usually under ‘YouTube and YouTube Music/subscriptions/subscriptions.json’) and import it here. +\n5. Click on the ‘Download’ button after it appears +\n6. Click on IMPORT FILE below and select the downloaded .zip file +\n7. [If the .zip import fails] Extract the .csv file (usually under ‘YouTube and YouTube Music/subscriptions/subscriptions.csv’), click on IMPORT FILE below and select the extracted csv file Press ‘Done’ when solved This video is age restricted. \n diff --git a/app/src/main/res/values-enm/strings.xml b/app/src/main/res/values-enm/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-enm/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 78d6713e9..4c3e587ce 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -139,7 +139,7 @@ Historial Historial Notificación de NewPipe - Notificaciones para reproductores en segundo plano y emergentes de NewPipe + Notificaciones para el reproductor de NewPipe Reproductor Funcionamiento Historial y caché @@ -396,7 +396,7 @@ Actualizaciones Eventos Notificación de actualización de la aplicación - Notificaciones de versiones nuevas de NewPipe + Notificaciones de nuevas versiones de NewPipe Almacenamiento externo no disponible No es posible descargar a una tarjeta SD externa. \¿Restablecer la ubicación de la carpeta de descarga\? No se pudo leer las pestañas guardadas, se usarán las pestañas predefinidas @@ -588,7 +588,7 @@ Transmisiones relacionadas Comentarios Notificaciones sobre el progreso del hashing del vídeo - Notificación del hash de vídeo + Notificación de hash de vídeo Mostrar metainformación Mostrar descripción Abrir con @@ -676,8 +676,19 @@ Buscando actualizaciones… Nuevos elementos en el muro Cerrar abruptamente el reproductor - Informar de errores del reproductor Muestra una opción de cierre abrupto al usar el reproductor - Informar de errores del reproductor con detalle en lugar de mostrar un mensaje emergente efímero (útil para diagnosticar problemas) Mostrar \"Cerrar abruptamente el reproductor\" + Notificaciones para informar errores + Notificación de informe de errores + NewPipe ha detectado un error, pulse aquí para informar + Se produjo un error, vea la notificación + Crear una notificación de error + Mostrar un snackbar de error + No se encontró ningún gestor de archivos adecuado para esta acción. +\nPor favor instale un gestor de archivos o intente deshabilitar \"%s\" en lo ajustes de descargas. + No se encontró ningún gestor de archivos adecuado para esta acción. +\nPor favor instale un gestor de archivos compatible con \"Sistema de Acceso al Almacenamiento\". + Comentario fijado + Ya se reproduce en segundo plano + LeakCanary no está disponible \ No newline at end of file diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 0468a982b..1cc443b09 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -103,7 +103,7 @@ Üks kord Fail NewPipe teavitus - Teavitused NewPipe tausta- ja hüpikpleierile + Teavitused NewPipe pleierile [Tundmatu] Lülita taustale Lülita hüpikpleierile @@ -287,8 +287,8 @@ \n3. Klõpsa \"Kõigi andmetega\", vali \"Tühista kõik\", vali ainult \"Tellimused\" ja klõpsa \"OK\". \n4. Klõpsa \"Järgmine samm\" ja seejärel \"Loo eksport\". \n5. Klõpsa nupul \"Laadi alla\" siis, kui ta ilmub. -\n6. Klõpsi siitsamast \"Impordi fail\" linki ning vali allalaaditud zip fail. -\n7. Kui zip faili importimine ei toimi, siis paki .csv fail lahti (tavaliselt on see fail \"YouTube ja YouTube Muusika/tellimused/tellimused\" või \"YouTube and YouTube Music/subscriptions/subscriptions\") ja klõpsi siitsamast \"Impordi fail\" linki ning vali lahtipakitud csv fail. +\n6. Klõpsi siitsamast \"Impordi fail\" linki ning vali allalaaditud .zip fail. +\n7. Kui .zip faili importimine ei toimi, siis paki .csv fail lahti (tavaliselt on see fail \"YouTube ja YouTube Muusika/tellimused/tellimused\" või \"YouTube and YouTube Music/subscriptions/subscriptions\") ja klõpsi siitsamast \"Impordi fail\" linki ning vali lahtipakitud csv fail. See toiming võib põhjustada suurt võrguliiklust. \n \nKas jätkata? @@ -312,11 +312,11 @@ Anneta NewPipe võtab privaatsust väga tõsiselt. Seetõttu ei kogu rakendus ilma nõusolekuta mingeid andmeid. \nNewPipe privaatsuspoliitika selgitab üksikasjalikult, milliseid andmeid saadetakse ja kogutakse veateate saatmisel. - NewPipe vaba avatud koodiga tarkvara. Seada võib kasutada, uurida, jagada ja parandada. Täpsemalt - seda võib levitada ja/või muuta vastavalt Vaba Tarkvara Sihtasutuse avaldatud GNU Üldise Avaliku Litsentsi v.3 (või hilisem) tingimustele. + NewPipe vaba avatud koodiga tarkvara. Seada võid kasutada, uurida, jagada ja parandada nii, nagu õigemaks pead. Täpsemalt - seda võid levitada ja/või muuta vastavalt Vaba Tarkvara Sihtasutuse avaldatud GNU Üldise Avaliku Litsentsi v.3 (või sinu valikul hilisema versiooni) tingimustele. Teavita elutsüklist väljas vigadest Impordi SoundCloudi profiil trükkides URL või oma ID: \n -\n1. Luba \"töölaua režiim\" veebilehitsejas (lmobiilsete seadmete jaoks leht pole kättesaadav) +\n1. Luba \"töölaua režiim\" veebilehitsejas (mobiilsete seadmete jaoks leht pole kättesaadav) \n2. Ava URL: %1$s \n3. Logi sisse \n4. Kopeeri suunatud profiili URL. @@ -343,8 +343,8 @@ Uuendused Sündmused Fail kustutati - Rakenduse värskenduse teatis - NewPipe uuest versioonist teavitamine + Rakenduse värskenduse teavitus + Teavitus NewPipe uuetest versioonidest Väline andmekandja pole saadaval Allalaadimine välisele SD-kaardile ei ole võimalik. Kas lähtestada allalaadimiste kataloogi asukoht\? Tõrge salvestatud vahekaaride lugemisel; kasutatakse vaikeväärtusi @@ -366,7 +366,7 @@ peatatud järjekorras järeltöötlus - Esitusjärjekord + Lisa esitusjärjekorda Tegevus keelati süsteemi poolt Allalaadimine nurjus Loo kordumatu nimi @@ -672,4 +672,20 @@ Kontrolli uuendusi Kontrolli uuendusi käsitsi Uued andmevoo kirjed + Näita „Jooksuta meediamängija kokku“ nupukest + Näitab valikut meediamängija kokkujooksutamiseks + NewPipe töös tekkis viga, sellest teavitamiseks klõpsi + Jooksuta meediamängija kokku + Näita veateate akent + Meedia esitamine taustal toimib juba + Teavitus vigadest + Teavitused vigadest informeerimiseks + Tekkis viga, vaata vastavat teadet + Koosta veateade + Selle tegevuse jaoks ei leidunud sobilikku failihaldurit. +\nPalun paigalda nutiseadmesse failihaldur või proovi allalaadimiste seadistustest „%s“ välja lülitada. + Selle tegevuse jaoks ei leidunud sobilikku failihaldurit. +\nPalun paigalda nutiseadmesse failihaldur, mis järgib Storage Access Framework reeglistikku. + Esiletõstetud kommentaar + LeakCanary pole saadaval \ No newline at end of file diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 97b407275..f03d5d81c 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -141,7 +141,7 @@ Portaera Historia eta cache-a Desegin - Atzeko planoko eta laster-leihoko NewPipe erreproduzigailuen jakinarazpenak + NewPipe erreproduzigailuaren jakinarazpenak Emaitzarik ez Kilkerrak besterik ez daude hemen Harpidedunik ez @@ -217,7 +217,7 @@ Ezabatu cacheko metadatuak Kendu cachetik webguneen datu guztiak Metadatuen cachea ezabatuta - Gehitu ilarara hurrengo jarioa + Gehitu hurrengo jarioa ilarara Jarraitu bukaerako (errepikapenik gabe) ilara erlazionatutako jario bat gehituz Arazketa Fitxategia @@ -292,7 +292,7 @@ \n4. Egin klik \"Hurrengo pausua\"-n eta \"Sortu esportazioa\" \n5. Egin klik \"Deskargatu\" botoian agertzen denean \n6. Egin klik INPORTATU FITXATEGIA botoian eta hautatu deskargatutako zip fitxategia -\n6. [Zip inportazioak huts egiten badu] Erauzi .csv fitxategia deskargatutako takeout zip-etik (normalean \"Youtube eta Youtube Music/harpidetzak/harpidetzak.csv\"), egin klik INPORTATU FITXATEGIA botoian eta hautatu erauzitako csv fitxategia
+\n7. [.zip inportazioak huts egiten badu] Erauzi .csv fitxategia deskargatutako takeout zip-etik (normalean \"Youtube eta Youtube Music/harpidetzak/harpidetzak.csv\"), egin klik INPORTATU FITXATEGIA botoian eta hautatu erauzitako csv fitxategia
Inportatu SoundCloud profila URL-a edo zure ID-a idatziz: \n \n1. Gaitu \"mahaigain modua\" web nabigatzailean (gunea ez dabil mugikorretan) @@ -343,7 +343,7 @@ Eguneraketak Gertaerak Fitxategia ezabatu da - Aplikazioaren eguneraketaren jakinarazpena + Aplikazioaren eguneraketen jakinarazpena NewPipe aplikazioaren bertsio berrien jakinarazpena Kanpo biltegiratzea ez dago eskuragarri Ezin da SD txartel batera deskargatu. Deskargen karpeta berrezarri nahi duzu\? @@ -366,7 +366,7 @@ pausatuta ilaran post-prozesua - Gehitu ilarara + Enkargatu Ekintza sistemak ukatu du Deskargak huts egin du Sortu izen bakana @@ -667,4 +667,24 @@ Hasi erreproduzitzaile nagusia pantaila osoan Isatsari bideo hau erantsita Gehitu bideo hau isatsari + Erakutsi \"itxi erreproduzigailua\" + Prozesatzen... Itxoin mesedez + Atzeko planoan erreproduzitzen dagoeneko + Erroreen txostenen jakinarazpena + Jakinarazpenak erroreen berri emateko + NewPipe-k errore bat aurkitu du, sakatu berri emateko + Errore bat gertatu da, ikusi jakinarazpena + Bilatu eguneraketak + Bilatu bertsio berriak eskuz + Elementu berriak jarioan + Ez da fitxategi kudeatzaile bat aurkitu ekintza honetarako. +\nMesedez, instalatu Storage Access Framework-ekin bateragarria den fitxategi kudeatzaile bat. + Ainguratutako iruzkina + Itxi erreproduzigailua + Eguneraketak bilatzen… + Ez da fitxategi kudeatzaile bat aurkitu ekintza honetarako. +\nMesedez, instalatu fitxategi kudeatzaile bat edo saiatu \'%s\' desgaitzen deskarga ezarpenetan. + Erreproduzigailua erabiltzean ustekabean ixteko aukera ematen du + Erakutsi errore barra bat + Sortu errore jakinarazpen bat \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 48a41c588..9ea419322 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -14,12 +14,12 @@ هم‌رسانی با استفاده از پخش‌کنندهٔ ویدیوی خارجی استفاده از پخش‌کنندهٔ صدای خارجی - پوشه بارگیری ویدیو - ویدیوهای بارگیری شده اینجا ذخیره می‌شوند - پوشه بارگیری ویدیوها را انتخاب کنید - پوشه بارگیری صدا - صداهای بارگیری شده در این‌جا ذخیره می‌شوند - پوشه بارگیری صداها را انتخاب کنید + شاخهٔ بارگیری ویدیو + پرونده‌های ویدیویی بارگرفته این‌جا ذخیره می‌شوند + گزینش شاخه برای بارگیری پرونده‌های ویدیویی + شاخهٔ بارگیری صدا + پرونده‌های صوتی بارگرفته این‌جا ذخیره می‌شوند + گزینش شاخهٔ بارگیری برای پرونده‌های صوتی وضوح پیش‌گزیده پخش با کودی کارهٔ کُره (Kore) پیدا نشد. نصب شود؟ @@ -78,9 +78,9 @@ لطفاً صبر کنید… در حافظه رونوشت شد پوشه بارگیری را بعدا در تنظیمات مشخص کنید - هیچ پخش کننده جریانی پیدا نشد (شما می‌توانید برنامه وی‌ال‌سی را برای پخش آن نصب کنید). - بارگیری پرونده جریان - حذف صدا در برخی کیفیت‌ها + هیچ پخش کنندهٔ جریانی پیدا نشد (می‌توانید برای پخشش وی‌ال‌سی را نصب کنید). + بارگیری پروندهٔ جریان + صدا را در برخی وضوح‌ها برمی‌دارد اشتراک مشترک شده اشتراک کانال لغو شد @@ -88,11 +88,11 @@ ناتوانی در به‌روزرسانی اشتراک نمایش اطلاعات اشتراک‌ها - فهرست‌های پخش دارای نشانک + سیاههٔ پخش‌های نشان شده موارد جدید - پس زمینه + پس‌زمینه افزودن به - نمایش کیفیت بالاتر + نمایش وضوح‌های بالاتر تنها برخی دستگاه‌ها توانایی پخش ویدیوهای 2K و 4K را دارند قالب ویدیویی پیش‌گزیده سیاه @@ -116,7 +116,7 @@ همیشه فقط یک‌بار پرونده - اعلان نیوپایپ + آگاهی نیوپایپ [ناشناخته] وارد کردن پایگاه‌داده صادرکردن @@ -225,14 +225,14 @@ بدون توضیحات توضحیات لغو اشتراک - انتخاب زبانه + گزینش زبانه تاریخچه تماشا تاریخچه و حافظه نهان اشکال‌زدایی به‌روزرسانی‌ها - گشودن در حالت تصویر در تصویر - دقّت پیش‌گزیدهٔ تصویر در تصویر - تصویر در تصویر + گشودن در حالت تصویردرتصویر + وضوح پیش‌گزیدهٔ تصویردرتصویر + تصویردرتصویر به یاد داشتن ویژگی‌های تصویر در تصویر به یاد داشتن آخرین اندازه و موقعیت تصویر در تصویر زمان فعلی پخش کننده را به صورت تقریبی و سریع جلو ببر @@ -246,8 +246,8 @@ می‌خواهید تنظیمات را نیز وارد کنید؟ گام پرونده پاک شد - اعلان به‌روزرسانی کاره - اعلان‌ها برای نسخه جدید نیوپایپ + آگاهی به‌روزرسانی کاره + آگاهی‌ها برای نگارش‌های جدید نیوپایپ بازنشانی پیش‌فرض‌ها می‌خواهید پیش‌فرض‌ها را بازنشانی کنید؟ به‌روزرسانی‌ها @@ -259,7 +259,7 @@ برای بارگیری، لمس کنید تمام در انتظار - صف + صف‌گذاری بارگیری ناموفق بود یافت نشد شکست در پساپردازش @@ -280,7 +280,7 @@ نمایش شاخص موقعیت پخش در فهرست‌ها پاک کردن داده‌ها پخش بعد از قطع ناگهانی (مثل برقراری تماس) ادامه یابد - نمایش نکته «برای افزودن، نگه‌دارید» + نمایش نکته «برای صف‌گذاری، نگه‌دارید» نمایش راهنما هنگام فشردن پس زمینه یا دکمهٔ تصویر در تصویر در «جزییات:» ویدیو برای در صف قرار دادن، نگه دارید کنترل اشاره ای صدا @@ -297,7 +297,7 @@ پروانه‌های شخص سوم © %1$s توسط %2$s تحت %3$s اگر ایده‌ای برای ترجمه، تغییر طراحی، پاک‌سازی کد و یا تغییرات واقعا سنگین کدنویسی دارید، از کمک‌تان همواره استقبال می‌کنیم. هر چه بیشتر کار کنیم، نتایج بهتری می‌گیریم! - آگاهی‌ها برای پخش‌کنندهٔ پس‌زمینه و تصویر در تصویر نیوپایپ + آگاهی‌ها برای پخش‌کنندهٔ نیوپایپ چیزی جز کریکت اینجا نیست فاقد مشترک خطای عدم احیای پخش‌کننده رخ داد @@ -353,7 +353,7 @@ کنش پیش‌فرض در زمان باز کردن محتوا — %s تغییر سبک پس‌زمینه و اندازه متن توضیحات پخش‌کننده. برای تأثیر، نیازمند آغاز دوبارهٔ کاره است پاک کردن تاریخچه جریان‌های پخش شه و موقعیت‌های پخش - نیوپایپ، یک نرم‌افزار آزاد کپی‌لِفت است: شما می‌توانید از آن استفاده، آن را بررسی کرده و به دیگران بدهید و اگر مایل باشید، بهترش کنید. به طور خاص، شما می‌توانید آن را تحت پروانه عمومی همگانی گنو نسخه ۳ و یا در صورت تمایل بالاتر، که توسط بنیاد نرم‌افزار آزاد منتشر شده تغییر داده و بازنشر دهید. + نیوپایپ یک نرم‌افزار آزاد کپی‌لفتی است: می‌توانید به دلخواه خود استفاده، بررسی، هم‌رسانی و بهترش کنید. به طور خاص می‌توانید ذیل نگارش ۳ یا هر نگارش بالاتری از پروانهٔ جامع همگانی گنو که به دست بنیاد نرم‌افزار آزاد منتشر شده، تغییر و بازنشرش دهید. حریم شخصی شما برای پروژه نیویایپ بسیاری جدی است. در نتیجه، این برنامه هیچ اطلاعاتی را بدون رضایت شما گردآوری نمی‌کند. \nسیاست‌های حریم شخصی نیوپایپ با جزئیات توضیح می‌دهد که وقتی گزارش یک خطا را می‌فرستید، چه داده‌هایی ذخیره و فرستاده می‌شود. به منظور هماهنگی با مقررات حفاظت داده عمومی اروپا (GDPR) در اینجا توجه شما را به سیاست حریم شخصی نیوپایپ جلب می‌کنیم. لطفا آن را به دقت مطالعه کنید. @@ -370,7 +370,7 @@ متوقف در صف در حال پساپردازش - این کنش توسط سیستم متوقف شد + کنش به دست سامانه متوقف شد تولید نام یگانه بازنویسی یک بارگیری دیگر با همین نام در جریان است @@ -439,8 +439,8 @@ جدید می‌خواهید این گروه را پاک کنید؟ - %d مورد انتخاب شده - %d مورد انتخاب شده + %d مورد گزیده + %d مورد گزیده پردازش خوراک… بارگیری خوراک… @@ -549,9 +549,9 @@ تغییر پخش کننده می‌تواند باعث جایگزین شدن صف شود پیش از پاک کردن صف، سوال شود هیچ - برزنی + بُرزنی تکرار - حداکثر تا سه کنش را می‌توانید برای نمایش در اعلان فشرده انتخاب کنید! + می‌توانید تا سه کنش را برای نمایش در آگاهی فشرده برگزینید! هر کنش آگاهی را با لمس کردنش ویرایش کنید. با استفاده از جعبه‌های تیک، تا سه کنش را برای نمایش در آگاهی فشرده بگزینید پنجمین دکمه کنشی چهارمین دکمه کنشی @@ -609,7 +609,7 @@ زمینهٔ شب رنگی کردن آگاهی گشودن با - نشانه به عنوان دیده‌شده + نشانه به عنوان دیده شده نمایش روبان‌های رنگی پیکاسو در بالای تصویرها کهنشانگر منبعشان است: قرمز برای شبکه ، آبی برای دیسک و سبز برای حافظه درخواست از اندروید برای سفارشی‌سازی رنگ آگاهی براساس رنگ اصلی در بندانگشتی (توجّه داشته باشید که روی همهٔ افزاره‌ها در دسترس نیست) این ویدیو محدود به سن است. @@ -673,8 +673,19 @@ بررسی کردن به‌روز رسانی‌ها… موارد خوراک جدید فروپاشی پخش‌کننده - گزارش خطاهای پخش کننده نمایش یک گزینهٔ فروپاشی هنگام استفاده از پخش کننده - گزارش خطاهای پخش کننده با جزییات کامل به جای نشان دادن پیامی با عمر کوتاه (مناسب برای تشخیص مشکلات) نمایش «فروپاشی پخش کننده» + مدیر پروندهٔ مناسبی برای این کنش یافت نشد. +\nلطفاً مدیر پرونده‌ای نصب کرده یا در تنظیمات بارگیری، «%s» را خاموش کنید. + آگاهی گزارش خطا + آگاهی برای گزارش‌خطاها + نمایش یک نوار خطا + ایجاد یک آگاهی خطا + مدیر پروندهٔ مناسبی برای این کنش یافت نشد. +\nلطفاً مدیر پرونده‌ای سازگار با چارچوب‌دسترسی ذخیره‌ساز نصب کنید. + نیوپایپ به خطایی برخورد. برای گزارش، بزنید + خطایی رخ داد. آگاهی را ببینید + نظر سنجاق شده + در حال پخش در پس‌زمینه + لیک‌کاناری موجود نیست \ No newline at end of file diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 7373acdf9..4d0e28cd2 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -78,8 +78,8 @@ Pyyhi Paras resoluutio Peru - NewPipe Ilmoitus - Ilmoitukset NewPipen tausta- ja ponnahdusikkunasoittimille + NewPipe ilmoitus + Ilmoitukset NewPipen soittimille Virhe Verkkovirhe Kaikkia esikatselukuvia ei voitu ladata @@ -304,7 +304,7 @@ \n3. Klikkaa \"Kaikki Youtube-data valittuna\", sitten \"Poista kaikki valinnat\", sitten ainoastaan \"tilaukset\" ja klikkaa \"OK\" \n4. Klikkaa \"Seuraava vaihe\" ja \"Luo vienti\" \n5. Klikkaa \"Lataa\"-painiketta tämän ilmestyessä -\n6. Klikkaa TUO TIEDOSTO alhaalta ja valitse ladattu tiedosto +\n6. Klikkaa TUO TIEDOSTO alhaalta ja valitse ladattu .zip-tiedosto \n7. [Jos zip-tiedoston tuonti epäonnistuu] Pura .csv-tiedosto (yleensä sijainnissa \"Youtube ja Youtube Musiikki/tilaukset/tilaukset.csv\") ja klikkaa TUO TIEDOSTO alhaalta ja valitse purettu csv-tiedosto Tuo SoundCloud-profiili kirjoittamalla joko osoite tai ID:si: \n @@ -337,7 +337,7 @@ Peru tilaus Valitse välilehti Valmis - Jono + Lisää jonoon Eteen-/taaksepäinkelauksen aika-askeleen pituus Hiljattain lisätyt Paikalliset @@ -369,7 +369,7 @@ Lataaminen ulkoiselle SD-kortille ei ole mahdollista. Nollataanko latauskansion sijainti\? Ulkoinen tallennustila ei käytettävissä Ohje - Ilmoitukset uudesta NewPipe-versiosta + Ilmoitukset uusista NewPipe-versioista Sovelluspäivitysilmoitus Tiedosto poistettu Esittäjät @@ -671,4 +671,20 @@ Tarkista päivitykset Tarkista manuaalisesti onko uusia versioita saatavilla Tarkistetaan päivityksiä… + Ilmoitukset, joilla raportoidaan virheistä + Kiinnitetty kommentti + Virheraportti-ilmoitus + NewPipe kohtasi virheen, näpäytä raportoidaksesi + Tapahtui virhe, katso ilmoitus + Luo virheilmoitus + LeakCanary ei ole saatavilla + Näytä \"Kaada soitin\" + Kaada soitin + Toiminnolle ei löytynyt sopivaa tiedostonhallintaohjelmaa. +\nAsenna tiedostonhallintaohjelma, joka on yhteensopiva Storage Access Frameworkin kanssa. + Toiminnolle ei löytynyt sopivaa tiedostonhallintaohjelmaa. +\nAsenna tiedostonhallintaohjelma tai kokeile asettaa \'%s\' pois käytöstä latausasetuksista. + Näytä soitinta käytettäessä soittimen kaatamisen vaihtoehto + Näytä virheen ponnahdusilmoitus + Uudet syötteet \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index da3a33a36..5ac53560d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -142,7 +142,7 @@ Lecteur Comportement Historique et cache - Notifications pour les lecteurs en arrière-plan et flottant de NewPipe + Notifications pour le lecteur de NewPipe Aucun résultat Aucun contenu Aucun abonné @@ -310,7 +310,7 @@ Voulez-vous supprimer entièrement l’historique de recherche \? Historique de recherche supprimé 1 élément supprimé. - NewPipe est un logiciel sous licence libre copyleft : vous pouvez l’utiliser, l’étudier, le partager et l’améliorer comme bon vous semble. Plus précisément, vous pouvez le redistribuer ou le modifier sous les termes de la licence générale publique GNU, comme publiée par la Free Software Foundation, dans sa version 3, ou, à votre convenance, dans une quelconque version ultérieure. + NewPipe est un logiciel sous licence libre copyleft : vous pouvez l’utiliser, l’étudier, le partager, et l’améliorer comme bon vous semble. Plus précisément, vous pouvez le redistribuer ou le modifier sous les termes de la licence générale publique GNU, comme publiée par la Free Software Foundation, dans sa version 3, ou, à votre convenance, dans une quelconque version ultérieure. Politique de confidentialité de NewPipe Lire la politique de confidentialité Voulez-vous également importer les paramètres \? @@ -343,7 +343,7 @@ Mises à jour Fichier supprimé Notification de mise à jour de l’application - Notifications pour une nouvelle version de NewPipe + Notifications pour des nouvelles versions de NewPipe Stockage externe indisponible Restaurer les valeurs par défaut Voulez-vous restaurer les valeurs par défaut \? @@ -383,7 +383,7 @@ Utile lors du basculement aux données mobiles, bien que certains téléchargements ne peuvent pas être suspendus Mode de vue en liste post-traitement - Liste de lecture + Mettre en file d\'attente Action refusée par le système Le post-traitement a échoué Nombre d’essais maximum @@ -674,9 +674,20 @@ Vérification des mises à jour… Vérifier les mises à jours Nouveaux éléments du flux - Reporter les erreurs du lecteur en détail au lieu de montrer un bref message éphémère (utile pour diagnostiquer les problèmes) - Reporter des erreurs du lecteur - Couper le lecteur - Montrer \"Couper le lecteur\" - Montrer une option couper lors de l\'utilisation du lecteur + Faire planter le lecteur + Afficher « Faire planter le lecteur » + Montrer une option de plantage lors de l\'utilisation du lecteur + Notification de rapport d\'erreur + Notifications pour signaler les erreurs + NewPipe a rencontré une erreur, appuyez pour la signaler + Une erreur s\'est produite, voir la notification + Créer une notification d\'erreur + Aucun gestionnaire de fichiers approprié n\'a été trouvé pour cette action. +\nVeuillez installer un gestionnaire de fichiers compatible avec l\'Infrastructure d\'accès au stockage. + Afficher une barre d\'erreur + Aucun gestionnaire de fichier approprié n\'a été trouvé pour cette action. +\nVeuillez installer un gestionnaire de fichiers ou essayez de désactiver \'%s\' dans les paramètres de téléchargement. + Commentaire épinglé + Une lecture est déjà en arrière-plan + LeakCanary n\'est pas disponible \ No newline at end of file diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 6d3c1f1b0..ba09d8292 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -73,7 +73,7 @@ Continuar reproducindo o vídeo despois das interrupcións (como, por exemplo, as chamadas) Descarregar Mostrar vídeos \"seguintes\" e \"semellantes\" - Mostrar a suxestión \"Manteña presionado para engadir á cola\" + Mostrar a suxestión \"Manteña presionado para engadir á fila\" Amosar o consello ao premer o fondo ou o botón emerxente \"Detalles:\" no vídeo URL non soportado País predeterminado para o contido @@ -86,7 +86,7 @@ Reproducindo en segundo plano Reproducindo en modo «popup» Contido - Contido restrinxido para certa idade + Mostrar contido con restrición de idade En directo Descargas Descargas @@ -106,15 +106,15 @@ Só unha vez Ficheiro Notificación do NewPipe - Notificacións para os reprodutores de fondo e reprodutores emerxentes de NewPipe + Notificacións para o reprodutor de NewPipe [Descoñecido] Mudar para o segundo plano Mudar para o «popup» Mudar para principal Importar base de datos Exportar base de datos - Anula o teu historial e subscricións actuais - Exportar historial, subscricións e listas de reprodución + Anula o seu historial, subscricións, listas de reprodución e (opcionalmente) configuracións + Exportar historial, subscricións, listas de reprodución e configuración Limpar historial de reproducións Elimina o historial de transmisións reproducidas e as posicións da reprodución Eliminar todo o historial de reproducións\? @@ -145,7 +145,7 @@ Non hai emisións para descargar Deculpe, isto non debería ter acontecido. Informar deste erro por enderezo electrónico - Desculpe, ocorreron algúns erros. + Desculpe, algo foi mal. Informe Información: Que ocorreu: @@ -227,7 +227,7 @@ \nA política de privacidade do NewPipe explica con máis detalle que datos son enviados e gardados cando envía un relatorio de erros. Ler a política de privacidade Licenza do NewPipe - NewPipe é un software libre copyleft: Podes usar, estudar compartir e melloralo a vontade. En concreto, pode redistribuír e / ou modificala segundo os termos da Licenza Pública Xeral GNU publicada pola Free Software Foundation, xa sexa a versión 3 da licenza, ou (na súa opción) calquera outra versión posterior. + NewPipe é un software libre copyleft: Pode usar, estudar compartir e melloralo a vontade. En concreto, pode redistribuír e / ou modificala segundo os termos da Licenza Pública Xeral GNU publicada pola Free Software Foundation, xa sexa a versión 3 da licenza, ou (na súa opción) calquera outra versión posterior. Ler a licenza Historial Historial @@ -494,7 +494,7 @@ Non hai dispoñible conta de subscritores Cambiar o servizo actualmente seleccionado: Verifique se xa existe un problema que fala do seu fallo. Ao crear billetes duplicados, gasta o tempo que nós poderiamos gastar en solucionar o erro real. - Informar dun erro en GitHub + Reportar en GitHub Copia o informe con formato Dar permiso para mostrar noutros aplicativos Quere restaurar os valores predeterminados\? @@ -508,7 +508,7 @@ Eliminas todas as posicións de reprodución\? Elimina todas as posicións de reprodución Elimina as posicións de reprodución - Notificacións para a nova versión de NewPipe + Notificacións para as novas versións de NewPipe Notificación da actualización do aplicativo Ficheiro eliminado Artistas @@ -518,8 +518,8 @@ Vídeos Este vídeo está restrinxido por idade. \n -\nSe desexa visualizalo, habilite \"%1$s\" nos axustes. - Modo restrinxido de YouTube +\nSe desexa visualizalo, habilite \"%1$s\" nas opcións. + Activar modo restrinxido de YouTube Actualizacións A instancia xa existe Non se puido validar a instancia @@ -542,7 +542,7 @@ Amosando resultados para: %s Procesando Repetir - Podes seleccionar como máximo tres accións para amosar na notificación compacta! + Pode seleccionar como máximo tres accións para amosar na notificación compacta! Primeiro botón de acción Segundo botón de acción Terceiro botón de acción @@ -566,7 +566,7 @@ Categoría Deshabilitar a selección do texto da descrición Habilitar a selección do texto na descrición - Agora podes seleccionar o texto na descrición. Teña en conta que a páxina pode cintilar e as ligazóns poden non ser clicábeis no modo selección. + Agora pode seleccionar o texto na descrición. Teña en conta que a páxina pode cintilar e as ligazóns poden non ser clicábeis no modo selección. Automático (Tema do dispositivo) Radio %s dá este motivo: @@ -616,7 +616,7 @@ Prendido Provedor Destacado - Este contido só está dispoñíbel para usuarios que pagaran por el, así que non pode ser transmitido ou decarregado por NewPipe. + Este contido só está dispoñíbel para usuarios que pagaran por el, así que non pode ser transmitido ou descarregado por NewPipe. Será preguntado onde desexa gardar cada descarga Non mostrar Baixa calidade (máis pequeno) @@ -655,4 +655,20 @@ Cambiar dun reprodutor a outro pode substituír a súa cola Barallar Edite cada acción da notificación premendo nela. Seleccione ata tres delas para seren mostradas na notificación compacta usando as checkboxes da dereita + Enfileirar o seguinte vídeo + Inciar reprodutor principal en pantalla completa + Non iniciar vídeos no reprodutor mini, mais cambiar a pantalla completa directamente, se a rotación estiver bloqueada. Aínda pode acceder o reprodutor mini ao saír da pantalla completa + Deslice os elementos para removelos + Non foi atopado ningún xestor de arquivos adecuado para esta acción. +\nPor favor instale un ou tente deshabilitar \'%s\' nas opcións de descarregamento. + Non foi atopado ningún xestor de arquivos adecuado para esta acción. +\nPor favor instale un compatíbel co Sistema de Acceso ao Almacenamento. + Valorado polo creador + Ocorreu un erro, vexa a notificación + Auto-enfileirar + Esta é unha pista de SoundCloud Go+, polo menos no seu país, así que non pode ser transmitida ou descarregada por NewPipe. + Notificación de relatorio de erros + Notificacións para reportar erros + NewPipe atopou un erro, presione para reportar + Comentario fixado \ No newline at end of file diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index b629f4f7a..a7ef20da4 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -98,7 +98,7 @@ ביטול לנגן הכול התראה מ־NewPipe - התראות עבור נגן הרקע והנגן הצף של NewPipe + התראות עבור הנגן של NewPipe [לא ידוע] נגינת התזרים לא הצליחה אירעה תקלה בנגן ממנה לא ניתן להשתקם @@ -144,7 +144,7 @@ גיבוב לאימות אישור שם קובץ - תת־דיונים + תהליכי משנה שגיאה NewPipe בהורדה יש לגעת לפרטים נוספים @@ -265,8 +265,8 @@ \n3. ללחוץ על „All data included”, ואז על „Deselect all”, לאחר מכן לבחור רק את „subscriptions” וללחוץ על „OK” \n4. ללחוץ על „Next step” ואז על „Create export” \n5. ללחוץ על כפתור ה־„Download” כשהוא מופיע -\n6. ללחוץ על „ייבוא קובץ” להלן ולבחור בקובץ ה־zip שהורדת -\n7. (אם ייבוא ה־zip נכשל) יש לחלץ את קובץ ה־‎.csv (בדרך כלל תחת „YouTube and YouTube Music/subscriptions/subscriptions.csv”), ללחוץ על „ייבוא קובץ” להלן וללחוץ על קובץ ה־csv שחולץ +\n6. ללחוץ על „ייבוא קובץ” להלן ולבחור בקובץ ה־‎.zip שהורדת +\n7. (אם ייבוא ה־‎.zip נכשל) יש לחלץ את קובץ ה־‎.csv (בדרך כלל תחת „YouTube and YouTube Music/subscriptions/subscriptions.csv”), ללחוץ על „ייבוא קובץ” להלן וללחוץ על קובץ ה־csv שחולץ
קצב שימוש בחיפוש מהיר ולא מדויק חיפוש גס מאפשר לנגן לחפש נקודת זמן מהר יותר, ברמת דיוק נמוכה יותר. חיפוש של 5, 15 או 25 שניות לא עובד עם ההגדרה הזאת @@ -336,7 +336,7 @@ עדכונים קובץ נמחק התראת עדכון יישומון - התראות על גרסה חדשה של NewPipe + התראות על גרסאות חדשות של NewPipe האחסון החיצוני אינו זמין אין אפשרות להוריד לכרטיס SD. לאפס את מיקום תיקיית ההורדה\? לא ניתן לקרוא לשוניות שמורות, לכן נעשה שימוש באלו של ברירת המחדל @@ -371,7 +371,7 @@ מושהה בתור עיבוד מאוחר - תור + הוספה לתור הפעולה נדחתה על ידי המערכת ההורדה נכשלה יצירת שם ייחודי @@ -566,7 +566,7 @@ להתחיל לנגן אוטומטית — %s לנגן את התור לא ניתן לזהות את הכתובת. לפתוח אותה ביישומון אחר\? - תור אוטומטי + הוספה אוטומטית לתור התור מהנגן הפעיל יוחלף מעבר מנגן אחד למשנהו עלול להחליף את התור שלך לבקש אישור לפני מחיקת התור @@ -698,7 +698,18 @@ פריטים חדשים בהזנה להקריס את הנגן הצגת „להקריס את הנגן” - דיווח על שגיאות בנגן - מדווח על שגיאות בנגן בפירוט מלא במקום להציג הודעה שקופצת למסך לזמן קצר (יעיל לניתוח תקלות) הצגת אפשרות קריסה בעת שימוש בנגן + התראות לדיווח על שגיאות + הצגת חלונית בזק עם שגיאה + יצירת התראת שגיאה + NewPipe נתקל בשגיאה, לחיצה תדווח על כך + אירעה שגיאה, נא לקרוא את ההתראה + לא נמצא מנהל קבצים מתאים לפעולה זו. +\nנא להתקין מנהל קבצים או לנסות להשבית את ‚%s’ בהגדרות ההורדה. + התראת דיווח שגיאה + לא נמצאו מנהלי קבצים שמתאימים לפעולה הזאת. +\nנא להתקין מנהל קבצים שתומך בתשתית גישה לאחסון. + כבר מתנגן ברקע + הערה ננעצה + LeakCanary אינה זמינה \ No newline at end of file diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 162dc77ad..9d5662ab0 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -139,7 +139,7 @@ Povijest Povijest NewPipe obavijest - Obavijesti za NewPipe pozadinske i skočne reproduktore + Obavijesti za NewPipe reproduktore Reproduktor Ponašanje Povijest i predmemorija @@ -280,8 +280,8 @@ \n3. Pritisni „Uključeni svi podaci”, zatim „Poništi odabir svih”, a zatim odaberi samo „pretplate” i pritisni „U redu” \n4. Pritisni na „Nastavi”, a zatim „Stvori izvoz” \n5. Pritisni na „Preuzmi” -\n6. Dolje pritisni na UVEZI DATOEKU i odaberi zip datoteku za peuzimanje -\n7. [Ako uvoz zip datoteke ne uspije] Izdvoji .csv datoteku (pod \"YouTube and YouTube Music/subscriptions/subscriptions.json\"). Dolje pritisni UVEZI DATOTEKU i odaberi izdvojenu csv datoteku
+\n6. Dolje pritisni na UVEZI DATOEKU i odaberi .zip datoteku za peuzimanje +\n7. [Ako uvoz .zip datoteke ne uspije] Izdvoji .csv datoteku (pod \"YouTube and YouTube Music/subscriptions/subscriptions.json\"). Dolje pritisni UVEZI DATOTEKU i odaberi izdvojenu csv datoteku
vašID, soundcloud.com/vašID Uzmite u obzir da ova operacija može uzrokovat veliku potrošnju prometa. \n @@ -304,7 +304,7 @@ Ažuriranja Događaji Datoteka obrisana - Obavijest za novu verziju NewPipe-a + Obavijest za nove NewPipe verzije Briše povijest ključnih riječi pretraživanja Vanjska pohrana nije dostupna Ažuriranja @@ -683,4 +683,11 @@ Prijedlozi lokalne pretrage Traži nove verzije Nemoj pokretati videa u mini reproduktoru, već se izravno pokreni cjeloekranski prikaz, ako je automatsko okretanje zaključano. Mini reproduktoru i dalje možeš pristupiti izlaskom iz cjeloekranskog prikaza + Novi feedovi + Obavijest o prijavi greške + Obavijesti za prijavu grešaka + Stvori obavijest o grešci + NewPipe je naišao na grešku, dodirni za prijavu + Došlo je do greške, pogledaj obavijest + Prekini rad playera \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 4b7871d79..f907214b9 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,7 +1,7 @@ Közzétéve: %1$s - Nem megfelelő médialejátszó. Szeretné telepíti a VLC médialejátszót\? + Nem található megfelelő médialejátszó. Telepíti a VLC-t\? Telepítés Mégse Megnyitás böngészőben @@ -9,75 +9,75 @@ Letöltés Keresés Beállítások - Erre gondoltál: %1$s\? + Erre gondolt: „%1$s”\? Megosztás ezzel Videofájlok letöltési mappája - A letöltött videók itt lesznek tárolva + A letöltött videófájlok itt lesznek tárolva Válasszon letöltési mappát a videófájloknak Alapértelmezett felbontás - Lejátszás Kodi-val - Telepíted a Kore lejátszót\? - \"Lejátszás Kodi-val\" opció mutatása - Opció mutatása a videók Kodi médiaközponttal való lejátszására + Lejátszás Kodival + Telepíti a hiányzó Kore alkalmazást\? + A „Lejátszás Kodival” lehetőség megjelenítése + A videók Kodi médiaközponttal történő lejátszásának megjelenítése Hang - Alapértelmezett hang formátum + Alapértelmezett hangformátum Letöltés - Nem támogatott webcím + Nem támogatott URL Külső videólejátszó használata Külső hanglejátszó használata - Válaszd ki a hangfájlok letöltési helyét + Válassza ki a hangfájlok letöltési helyét Hálózati hiba - Lejátszás háttérben + Lejátszás a háttérben Videó és hang Megjelenés - Tartalom preferált nyelve - \'Következő\' és \'Hasonló\' videók mutatása + Tartalom alapértelmezett nyelve + „Következő” és „Hasonló” videók megjelenítése Sötét Világos Téma Hangfájlok letöltési mappája - A letöltött hangfájlok itt találhatóak + A letöltött hangfájlok itt lesznek tárolva Tetszik Nem tetszik Videó lejátszása, hossz: - Fetöltő profilképe + Fetöltő profilképének bélyegképe Tartalom Korhatáros tartalom megjelenítése Hiba - A tartalom nem elérhető + A tartalom nem érhető el Élő Jelentés Információ: Ez történt: - Megjegyzésed (angolul): + Az Ön megjegyzése (angolul): Részletek: - Sajnos hiba történt. + Elnézet, valami balul sült el. Elnézést, ennek nem kellett volna megtörténnie. Hiba bejelentése e-mailben - Nem sikerült a letöltés menü beállítása - Nem sikerült a videó URL aláírás azonosítása + Nem sikerült a letöltési menü beállítása + Nem sikerült a videó URL aláírásának feloldása Újra Videó - Audio - A kezdéshez koppints a \"Keresés\"-re. - Nem sikerült az összes előnézeti kép betöltése - Nem sikerült a weblap betöltése + Hang + A kezdéshez koppintson a nagyítóra. + Nem sikerült az összes bélyegkép betöltése + Nem sikerült a weblap feldolgozása Letöltések Letöltések - Hibabejelentés - Indít - Szünet + Hibajelentés + Indítás + Szüneteltetés Törlés - Ellenőrző összeg + Ellenőrzőösszeg Rendben Fájlnév - Threadek + Szálak Hiba NewPipe letöltés folyamatban - Katt a részletekért - Kérlek várj… + Koppintson a részletekért + Kis türelmet… Vágólapra másolva - Kérlek, válassz egy létező könyvtárat a letöltésekhez + Adjon meg később egy letöltési mappát a beállításokban Csatornáról leiratkozva Nem sikerült megváltoztatni a feliratkozást Nem sikerült frissíteni a feliratkozást @@ -86,25 +86,25 @@ Újdonságok Háttér Felugró ablak - Nem található stream lejátszó alkalmazás (feltelepítheted a VLC-t a lejátszáshoz). + Nem található lejátszó a közvetítéshez (feltelepítheti a VLC-t a lejátszáshoz). Megnyitás felugró módban Néhány felbontásnál eltávolítja a hangot Feliratkozás Feliratkozva - Több infó - Alapértelmezett felugró ablak felbontása - Mutassa a magasabb felbontásokat - Csak néhány eszköz tud lejátszani 2K/4K videókat - Alapértelmezett videó formátum + További infó + Felugró ablak alapértelmezett felbontása + Magasabb felbontások megjelenítése + Csak bizonyos eszközök tudnak 2K/4K-s videókat lejátszani + Alapértelmezett videoformátum Fekete - Jegyezze meg a felugró ablak helyét és méretét - Jegyezze meg a felugró ablak előző helyét és méretét + Felugró ablak tulajdonságainak megjegyzése + A felugró ablak előző helyének és méretének megjegyzése Keresési javaslatok - Mutasson javaslatokat keresés közben + Válassza ki a keresési javaslatokat keresés közben Keresési előzmények - Előzmények - Megnézett videók nyomon követése - Lejátszás folytatása félbeszakítás után (pl.: telefonhívás) + Megtekintési előzmények + Megtekintett videók nyomon követése + Lejátszás folytatása félbeszakítások után (például telefonhívás) Lejátszó Működés Előzmények és gyorsítótár @@ -119,32 +119,32 @@ Összes lejátszása Mindig Csak egyszer - NewPipe Értesítés - Értesítések a NewPipe háttér- és felugró ablak lejátszójához + NewPipe értesítés + Értesítések a NewPipe lejátszójához [Ismeretlen] Adatbázis importálása Adatbázis exportálása - Felülírja a jelenlegi előzményeket, feliratkozásokat, lejátszási listákat és (választható) beállításokat + Felülírja a jelenlegi előzményeket, feliratkozásokat, lejátszási listákat és (választhatóan) a beállításokat Előzmények, feliratkozások, lejátszási listák és beállítások exportálása - Alkalmazás/Kezelő felület összeomlott - Videó lejátszása sikertelen - A külső lejátszó nem támogatja az ilyen típusú linkeket - Nem található videó formátum - Nem található hang csatorna + Az alkalmazás/kezelőfelület összeomlott + Nem sikerült a videó lejátszása + A külső lejátszó nem támogatja az ilyen típusú hivatkozásokat + Nem található videó adatfolyam + Nem található hang adatfolyam Mi:\\nKérés:\\nTartalom nyelve:\\nTartalom származási országa:\\nAlkalmazás nyelve:\\nSzolgáltatás:\\nGMT idő:\\nCsomag:\\nVerzió:\\nOperációs rendszer verzió: Nincs találat - Adatfolyam fájl letöltése + Közvetítési fájl letöltése Hozzáadás ehhez Gyorsabb, de pontatlan tekerés használata - A pontatlan tekerés lehetővé teszi, hogy gyorsabban ugorjon a pozíciókra, de kevesebb pontossággal. Az 5, 15, vagy 25 másodperces tekerés nem működik ebben a módban. + A pontatlan tekerés lehetővé teszi, hogy gyorsabban ugorjon a pozíciókra, de kisebb pontossággal. Az 5, 15, vagy 25 másodperces tekerés nem működik ebben a módban. Bélyegképek betöltése - Kapcsold ki, hogy a megelőzzed bélyegképek betöltését, így csökkentve az adat és memória használatot. Ennek az értéknek a megváltoztatása törli a memóriában és a meghajtón lévő bélyegkép gyorsítótárat. + Kapcsolja ki, hogy a megelőzze a bélyegképek betöltését, így csökkentve az adat- és memóriahasználatot. A megváltoztatása törli a memóriában és a meghajtón lévő képgyorsítótárat. A bélyegkép gyorsítótár törölve - Gyorsítótárazott metaadat törlése - Minden gyorsítótárazott weboldal adat törlése - A metaadat gyorsítótár törölve lett - Következő videó automatikus lejátszása - Keresési előzmények tárolása az eszközön + Gyorsítótárazott metaadatok törlése + Minden gyorsítótárazott weboldaladat törlése + A metaadatok gyorsítótára törölve lett + Következő videó automatikus sorba állítása + Keresési előzmények helyi tárolása Csatornák Lejátszási listák Zeneszámok @@ -153,26 +153,26 @@ Folytatás a háttérben Folytatás felugró ablakban Megtekintési előzmények törlése - Eltávolítja a megtekintési előzményeket és a lejátszási pozíciókat - Törlöd az összes megtekintési előzményt\? - Megtekintési előzmények törölve. + Törli a megtekintési előzményeket és a lejátszási pozíciókat + Törli az összes megtekintési előzményt\? + Megtekintési előzmények törölve Keresési előzmények törlése - Eltávolítja a kereséshez használt kifejezéseket az előzményekből - Törlöd az összes keresési előzményt\? - Keresési előzmények törölve. - Lejátszási hiba történt - Lejátszási hiba helyreállítása + Eltávolítja a keresési kulcsszavakat az előzményekből + Törli az összes keresési előzményt\? + Keresési előzmények törölve + Helyreállíthatatlan lejátszóhiba történt + Lejátszóhiba helyreállítása Nincs ilyen mappa - Nincs ilyen fájl vagy tartalom forrás - A fájl nem létezik vagy jogosultság az olvasáshoz és íráshoz hiányzik - A fájl neve nem lehet üres + Nincs ilyen fájl- vagy tartalomforrás + A fájl nem létezik, vagy hiányzik az olvasási vagy írási jogosultság + A fájlnév nem lehet üres Hiba történt: %1$s - Nincs letölthető adatforrás + Nincs letölthető adatfolyam Nincs itt semmi pár tücskön kívül Húzza az átrendezéshez e - M - Mrd + m + M Nincs feliratkozó %s feliratkozó @@ -186,7 +186,7 @@ Nincs videó %s videó - %s videók + %s videó Létrehozás Átnevezés @@ -194,107 +194,108 @@ \na felugró ablakban történő megnyitáshoz 1 elem törölve. reCAPTCHA rejtvény - reCAPTCHA rejtvény igényelve + reCAPTCHA rejtvény kérve Letöltés Fájlnevekben engedélyezett karakterek - Érvénytelen karakterek ezzel az értékkel kerülnek helyettesítésre + Az érvénytelen karakterek erre az értékre lesznek lecserélve Csere karakter Betűk és számok Legtöbb speciális karakter Nincs a fájl lejátszásához szükséges alkalmazás telepítve - A NewPipe alkalmazásról - Az alkalmazásról - Engedélyek - Ingyenes, egyszerű streamelés Androidon. + A NewPipe névjegye + Névjegy + Licencek + Szabad, egyszerű közvetítésnézés Androidon. Közreműködés - Legyen ötleted a fordítással, a megjelenéssel, a forrás kód tisztításával vagy komolyabb átszervezésével kapcsolatban, bármilyen segítséget szívesen fogadunk. Járulj hozzá az alkalmazás fejlesztéséhez! - Megtekintés GitHubon + Legyen ötleted a fordítással, a dizájnnal, a forráskód tisztításával vagy egy komolyabb átszervezésével kapcsolatban, bármilyen segítséget szívesen fogadunk. Minél több minden készül el, annál jobb lesz! + Megtekintés a GitHubon Adományozás - A NewPipe alkalmazást önkéntesek fejlesztik az ő szabadidejükben, hogy a lehető legjobb felhasználói élményt hozzák el neked. Járulj hozzá, hogy segítsd a fejlesztőket amíg ők egy csésze kávét szürcsölnek, hogy még jobbá tehessük a NewPipe-ot. + A NewPipe alkalmazást önkéntesek fejlesztik a szabadidejükben, hogy a lehető legjobb felhasználói élményt nyújtsák. Járuljon hozzá, hogy a fejlesztők még jobbá tegyék alkalmazást, miközben egy csésze kávét szürcsölnek. Hozzájárulás Honlap - Látogasd meg a NewPipe honlapját további információkért és hírekért! + Látogassa meg a NewPipe honlapját további információkért és hírekért. A NewPipe adatvédelmi irányelvei - A NewPipe projekt komolyan veszi az adataid védelmét. Az alkalmazás nem gyűjt semmilyen adatot a beleegyezésed nélkül. + A NewPipe projekt komolyan veszi az adatvédelmét. Az alkalmazás nem gyűjt semmilyen adatot a beleegyezése nélkül. \nA NewPipe adatvédelmi irányelve részletesen elmagyarázza, mely adatok kerülnek elküldésre és tárolásra az alkalmazás összeomlásának jelentésekor. - Az adatvédelmi irányelvek elolvasása + Adatvédelmi irányelvek elolvasása A NewPipe licence Licenc elolvasása Előzmények Előzmények - Törölni kívánja ezt az elemet a keresési előzmények közül\? + Törli ezt az elemet a keresési előzmények közül\? Utoljára lejátszott Legtöbbet lejátszott Főoldal tartalma Üres oldal Újságárus oldal - Csatorna oldal - Csatorna választása - Még nincs csatorna feliratkozás - Újságárus választása + Csatornaoldal + Válasszon egy csatornát + Még nincs csatornafeliratkozás + Válasszon egy újságárust Exportálva Importálva - Nem érvényes ZIP fájl + Nem érvényes ZIP-fájl Figyelmeztetés: nem sikerült az összes fájl importálása. Ez felül fogja írni a jelenlegi beállításokat. - A beállításokat is importálni kívánja\? + A beállításokat is importálja\? Felkapott Top 50 - Új és friss + Új és népszerű Eltávolítás Részletek - Hang beállítások + Hangbeállítások Alapértelmezett tevékenység „%s” típusú tartalom megnyitásakor Videólejátszó Lejátszás háttérben Felugró ablakos lejátszás - Mindig kérdezz rá + Mindig kérdezzen Információk gyűjtése… Kért tartalom betöltése Új lejátszási lista Átnevezés Név Lejátszási listához adás - Beállítás lejátszási lista indexképeként - Könyvjelző törlése - Törlődjön ez a lejátszási lista\? - Lejátszási listsa létrehozva - Hozzáadva lejátszási listához - Lejátszási lista előképe megváltozott. - Felirat kikapcsolva - Illeszkedés + Beállítás a lejátszási lista bélyegképeként + Könyvjelző eltávolítása + Törli ezt a lejátszási listát\? + Lejátszási lista létrehozva + Lejátszási listához adva + A lejátszási lista bélyegképe megváltozott. + Nincs felirat + Igazítás Kitöltés - Közelítés + Nagyítás Automatikusan létrehozott Feliratok - Feliratok méretének és hátterének stílusbeli módosítása. A módosítások életbelépésehez az alkalmazás újraindítása szükséges. - Import + Feliratok méretének és hátterének stílusbeli módosítása. A módosítások életbe lépésehez az alkalmazás újraindítása szükséges. + Importálás Importálás a következőből Exportálás a következőbe Importálás… Exportálás… Fájl importálása Előző exportálás - Sikertelen a feliratkozások importálása - Sikertelen a feliratkozások exportálása - YouTube feliratkozások importálása Google takeout-ból: + A feliratkozások importálása nem sikerült + A feliratkozások exportálása nem sikerült + YouTube feliratkozások importálása a Google Takeoutból: \n -\n1. Navigálj erre az oldalra: %1$s -\n2. Jelentkezz be -\n3. Kattints a \"All data included/Minden adat\"-ra, majd a \"Deselect all/MInden kijelölés megszüntetése\" gombra, majd válaszd ki a \"subscriptions/feliratkozások\" és kattints az \"OK\"-ra -\n4. Kattints a \"Next step/Következő lépés\", majd az \"Create export/Export létrehozása\" gombra -\n5. Kattints a \"Download/Letöltés\" gombra, mikor megjelenik, majd -\n6. A letöltött zip fájlból csomagold ki a .json fájlt (általában: \"YouTube and YouTube Music/subscriptions/subscriptions.json\"), majd importáld itt. - Importálja SoundCloud profilját az URL vagy az azonosítójának begépelésével: +\n1. Navigáljon erre az oldalra: %1$s +\n2. Jelentkezzen be, ha kérik +\n3. Kattintson „Az összes adatot tartalmazza” gombra, majd a „Kijelölések megszüntetése” gombra, majd válassza ki a „feliratkozások” lehetőséget és kattintson az „OK” gombra +\n4. Kattintson a „Következő lépés”, majd az \"Exportálás indítása” gombra +\n5. Kattintson a „Letöltés” gombra, amikor megjelenik, +\n6. Kattintson a lenti FÁJL IMPORTÁLÁSA gombra, és válassza ki a letöltött ZIP-fájlt +\n7. [Ha a ZIP-fájl importálása nem sikerül] Bontsa ki a .csv fájlt (általában: „YouTube és YouTube Music/feliratkozások/feliratkozások.csv\"), majd kattintson lent a FÁJL IMPORTÁLÁSA gombra, és válassza az exportált CSV-fájlt + SoundCloud-profil importálása az URL vagy az azonosítójának begépelésével: \n -\n1. Az oldal mobileszközökön nem elérhető, így „asztali böngésző mód” szükséges -\n2. Navigáljon erre az oldalra: %1$s -\n3. Jelentkezzen be +\n1. A webböngészőben engedélyezze az „asztali módot” (az oldal nem érhető el mobileszközökön) +\n2. Navigáljon erre az URL-re: %1$s +\n3. Jelentkezzen be, ha kéri \n4. Másolja ki a profil URL-t, ahova át lett irányítva. - azonosítód, soundcloud.com/azonosítód - Ez a művelet adatforgalom igényes lehet. + saját azonosítója, soundcloud.com/azonosító + Ez a művelet adatforgalom-igényes lehet. \n -\nFolytatni kívánja\? +\nBiztos, hogy folytatja\? Ütem Hangmagasság Előrepörgetés csend alatt @@ -303,142 +304,143 @@ Elfogadás Elutasítás Nincs korlát - Felbontás korlátozása mobilinternet használata esetén - Művelet alkalmazás váltásakor a fő videólejátszóról — %s + Felbontás korlátozása mobil adatkapcsolat használata esetén + A fő videólejátszóról más alkalmazásra történő váltáskor teendő művelet — %s Ne tegyen semmit Lejátszás folytatása a háttérben Lejátszás folytatása felugró ablakban Lejátszás folytatása - Mutassa a \"Tartsa lenyomva a hozzáadáshoz\" tippet + A „Tartsa lenyomva a sorba állításhoz\" tipp megjelenítése Leiratkozás - Válassz fület - Kommentek mutatása - Kapcsold ki a kommentek elrejtéséhez - Alapértelmezett ország tartalom + Válasszon lapot + Megjegyzések megjelenítése + Kapcsolja ki a megjegyzések elrejtéséhez + Tartalom alapértelmezett országa Folytatás főnézetben - Figyelmen kívül hagy - Lejátszási lista könyvjelzők közé - Hasonló videó beadása az utolsó videó után egy nem ismétlődő sorban + Eltüntetés + Lejátszási lista könyvjelzőzése + Egy hasonló videó hozzáadása a befejeződő (nem ismétlődő) lejátszási sorhoz Sor a fájl nem írható felül Az előre- és visszatekerés időtartama Utolsó lejátszási pozíció visszaállítása Lejátszás folytatása - Jelentés új NewPipe verzióról - Alkalmazás-frissítés jelzése - File törölve + Értesítések az új NewPipe verziókról + Alkalmazásfrissítés értesítése + Fájl törölve Frissítések - Tipp mutatása háttér vagy felbukkanó gomb megnyomásakor a videó részletei oldalon + Tipp megjelenítése, ha megnyomja a hátteret vagy a felugró gombot a videó részleteinél Automatikus lejátszás Adatok törlése - Lejátszási pozíciók mutatása a listákban + Lejátszási pozíciók megjelenítése a listákban Pozíciók a listákban - Gesztusvezérlés használata fényerő szabályzásra + Gesztusok használata a fényerő szabályozásához Fényerő gesztus - Gesztusvezérlés használata hangerő szabályzásra + Gesztusok használata a lejátszó hangerejének szabályzásához Hangerő gesztus - A rendszer megkérdezi, hogy hova mentse el az egyes letöltéseket + Meg fogja kérdezni, hogy hova mentse el az egyes letöltéseket. +\nEngedélyezze a rendszermappa-választót (SAF), ha külső SD-kártyára akar letölteni Kérdezze meg, hova töltse le Letöltések szüneteltetése Letöltések indítása - Egyszerre egy letöltés fog futni ugyanabban az időben - Korlátozza a letöltési sort - Bezár - Hasznos, amikor átvált a mobil adatokra, bár néhány letöltést nem lehet felfüggeszteni - Megszakítás a mért hálózatokon - A letöltés megszakítása előtti kísérletek maximális száma - Maximális próbálkozások - Állj + Egyszerre csak egy letöltés fog futni + Letöltési sor korlátozása + Bezárás + Hasznos, ha mobil adatkapcsolatra vált, bár néhány letöltést nem lehet felfüggeszteni + Félbehagyás a forgalomkorlátos hálózatokon + A letöltés megszakítása előtti kísérletek legnagyobb száma + Próbálkozások legnagyobb száma + Leállítás Letöltött fájlok törlése Törli a letöltési előzményeket, vagy törli az összes letöltött fájlt\? Letöltési előzmények törlése - A letöltést nem lehet visszaállítani - Kapcsolat időtúllépés - A folyamat elveszett, mert a fájlt törölték + A letöltést nem lehet helyrehozni + Kapcsolati időtúllépés + Az előrehaladás elveszett, mert a fájlt törölték Nincs hely az eszközön - NewPipe leállt a fájl feldolgozása közben + A NewPipe leállt a fájl feldolgozása közben Utófeldolgozás sikertelen Nincs talalat - A szerver nem fogad többszálú letöltést, próbálkozzon újra @ string / msg_threads = 1 - A szerver nem küld adatokat - Nem lehet csatlakozni a szerverhez - A szerver nem talalható + A kiszolgáló nem fogad többszálú letöltést, próbálkozzon újra ezzel: @string/msg_threads = 1 + A kiszolgáló nem küld adatokat + Nem lehet csatlakozni a kiszolgálóhoz + A kiszolgáló nem található Nem sikerült biztonságos kapcsolatot létesíteni A célmappa nem hozható létre A fájlt nem lehet létrehozni Hiba megjelenítése - Ezzel a névvel egy letötés már várakozás alatt áll + Ezzel a névvel egy letöltés már várakozik Ezzel a névvel egy letöltés már folyamatban van - Az ilyen névvel letöltött fájl már létezik - Az ilyen névű fájl már létezik - Átír - Generáljon egyedi nevet + Ilyen névű letöltött fájl már létezik + Ilyen névű fájl már létezik + Felülírás + Egyedi név előállítása Letöltés sikertelen - Helyrehozás - Utófeldolgozás - Sorban álló - Szünet + helyrehozás + utófeldolgozás + sorba állítva + szüneteltetve Függőben lévő Befejezett - Kattints a letöltéshez - NewPipe frissítés elérhető! - Auto + Kattintson a letöltéshez + NewPipe frissítés érhető el! + Automatikus Rács Lista Lista nézet - File áthelyezve vagy törölve - Külső SD-kártyára mentés nem lehetséges. Visszaállítsuk a letöltési mappa helyét\? - Külső tárhely nem elérhető - Lejátszási pozíciók törölve. - Összes lejátszási pozíció törlése\? + A fájl áthelyezve vagy törölve + A külső SD-kártyára történő mentés nem lehetséges. Visszaállítja a letöltési mappa helyét\? + A külső tárhely nem érhető el + Lejátszási pozíciók törölve + Törli az összes lejátszási pozíciót\? Összes lejátszási pozíció törlése Lejátszási pozíciók törlése Találatok a következőre: %s - Bélyegkép méretezése 1:1 arányra + Bélyegkép méretezése 1:1-es arányra Értesítés színezése Semmi Keverés Ismétlés Leírás megjelenítése - Bufferelés + Pufferelés Megnyitás ezzel - Az URL-t nem lehetett felismerni. Megnyitás másik alkalmazással\? + Az URL-t nem lehetett felismerni. Megnyitja másik alkalmazással\? Automatikus sorba állítás - "Kikapcsolása elrejti a videó leírását és a kapcsolódó információt" - Vissza akarod állítani az alapértelmezéseket\? + Kapcsolja ki, hogy elrejtse a videó leírását és a további információkat + Visszaállítja az alapértelmezéseket\? Ez a videó korhatáros. -\nÚj, korhatáros videókkal kapcsolatos YouTube irányelvek miatt a NewPipe nem férhet hozzá a videóhoz, így nem tudja lejátszani. +\nAz új, korhatáros videókkal kapcsolatos YouTube irányelvek miatt a NewPipe nem férhet hozzá a videóhoz, így nem tudja lejátszani. Leírás Megjegyzések - Formázott jelentése másolása - Adj engedélyt a más alkalmazások feletti megjelenéshez - Még nincsenek lejátszási lista könyvjelzők + Formázott jelentés másolása + Adjon engedélyt a más alkalmazások feletti megjelenéshez + Még nincs könyvjelző lejátszási listához Némítás megszüntetése Némítás Nincs betöltve: %d Üres csoportnév - Törölni szeretnéd ezt a csoportot\? + Törli ezt a csoportot\? Mindig frissítsen Készítette: %s - Lejátszási listák oldala + Lejátszási lista oldal Bélyegkép használata a zárképernyőn és az értesítéseken is Rádió - Válaszd ki kedvenc éjszakai témád — %s - Kiválaszthatod a kedvenc éjszakai témádat lentebb + Válassza ki a kedvenc éjszakai témáját — %s + Lent kiválaszthatja a kedvenc éjszakai témáját Nemrég hozzáadott Az ExoPlayer korlátai miatt az előre- és visszatekerés időtartama %d másodpercre lett állítva - Csatorna csoportok - Rendszer által alapértelmezett - Az Általános adatvédelmi rendeletnek (GDPR) való megfelelés érdekében felhívjuk figyelmed a NewPipe adatvédelmi nyilatkozatára. Kérjük olvasd el figyelmesen. -\nEl kell fogadnod, ha jelenteni szeretnél programhibákat. + Csatornacsoportok + Rendszer alapértelmezése + Az Általános adatvédelmi rendeletnek (GDPR) való megfelelés érdekében felhívjuk figyelmét a NewPipe adatvédelmi nyilatkozatára. Olvassa el figyelmesen. +\nEl kell fogadnia, ha hibajelentést szeretne küldeni. Alkalmazás összeomlasztása - Memóriaszivárgások mutatása - A memóriaszivárgás-monitorozás az alkalmazás megállását okozhatja amíg a dinamikus memória mentése folyik + Memóriaszivárgások megjelenítése + A memóriaszivárgás-monitorozás az alkalmazás megállását okozhatja, amíg a dinamikus memória mentése folyik Automatikusan létrehozott (feltöltő nem található) Lejátszási sor Konferenciák - Legtöbbet lájkolt - Mely oldalak kerülnek a főoldalon megjelenítésre + Legkedveltebb + Mely oldalak jelennek meg a főoldalon %s hallgató %s hallgató @@ -449,57 +451,56 @@ %s néző Senki sem nézi - Feliratkozók száma nem érhető el + A feliratkozók száma nem érhető el Helyi - A nyelv meg fog változni amint az alkalmazás újra lesz indítva. + A nyelv az alkalmazás újraindításakor fog megváltozni Megjegyzések betöltése sikertelen - Lejátszási lista kiválasztása + Válasszon egy lejátszási listát Lejátszás automatikus indítása — %s Lejátszás sebességének beállítása - Lejátszó váltása törölheti a lejátszási sort + Az egyik lejátszóról a másikra váltás törölheti a lejátszási sort Csak Wi-Fi-hálózaton - SAF használata - A \'Storage Access Framework\' lehetővé teszi a letöltések külső SD-kártyára történő mentését. -\nBizonyos eszközökön nem támogatott - A műveletet letiltotta a rendszer + Rendszermappa-választó (SAF) használata + A „Storage Access Framework” lehetővé teszi a letöltések külső SD-kártyára történő mentését + A rendszer megtagadta a műveletet Soha Feliratkozások kiválasztása © %1$s %2$s, %3$s licenc alatt Harmadik féltől származó licencek Kész - Nincsenek megjegyzések + Nincs megjegyzés ∞ videó 100+ videó - Jelentés GitHub-on - Alapértékek visszaállítása - Segítség - Sütik törlése, amelyeket a NewPipe akkor ment, amikor megoldasz egy reCAPTCHA-t + Jelentés a GitHubon + Alapértelmezések visszaállítása + Súgó + Sütik törlése, amelyeket a NewPipe akkor ment, amikor megold egy reCAPTCHA-t reCAPTCHA sütik törölve reCAPTCHA sütik törlése Előadók Albumok - Dalok + Számok Események Videók Ez a videó korhatáros. \n -\nEngedélyezd a(z) \"%1$s\" beállítást ha meg szeretnéd tekinteni. - Gyermekek számára potenciálisan nem megfelelő, korhatáros tartalom mutatása (pl. 18+) - Csak HTTPS URL-ek támogatottak - Metaadatok mutatása +\nEngedélyezze a(z) „%1$s” beállítást, ha meg szeretné tekinteni. + Gyermekek számára esetlegesen nem megfelelő, korhatáros tartalom megjelenítése (például 18+) + Csak a HTTPS URL-ek támogatottak + Metainformációk megjelenítése A jelenleg aktív lejátszási sor le lesz cserélve - Kérjen megerősítést a lejátszási sor törlése előtt + Megerősítés kérése a lejátszási sor törlése előtt Éjszakai téma - Értesítés az alkalmazás frissítéséhez, amikor egy új verzió érhető el + Frissítési értesítés megjelenítése, amikor egy új verzió érhető el Frissítések - Az Android igazítsa az értesítés színét a bélyegkép meghatározó színéhez (nem minden eszközön elérhető) - Legfeljebb három választható művelet jeleníthető meg a kompakt értesítésben! - Szabd személyre, hogy az értesítésben megjelenő akciógombok mit csinálnak. Válassz ki legfeljebb hármat a jobb oldali jelölőnégyzetekkel, amelyek a kompakt értesítésben is megjelennek. - Ötödik akciógomb - Negyedik akciógomb - Harmadik akciógomb - Második akciógomb - Első akciógomb + Az Android igazítsa az értesítés színét a bélyegkép meghatározó színéhez (nem minden eszközön érhető el) + Legfeljebb három művelet jeleníthető meg a kompakt értesítésben. + Koppintással szerkesztheti az egyes értesítéseken megjelenő műveleteket. Válasszon ki legfeljebb hármat a jobb oldali jelölőnégyzetekkel, amelyek a kompakt értesítéseken is megjelennek. + Ötödik műveletgomb + Negyedik műveletgomb + Harmadik műveletgomb + Második műveletgomb + Első műveletgomb Alkalmazás nyelve %d másodperc @@ -523,47 +524,168 @@ %d kiválasztva Új - Ez a tartalmat még nem támogatja a NewPipe. + Ezt a tartalmat még nem támogatja a NewPipe. \n \nRemélhetőleg egy következő verzióban már támogatott lesz. - Nincs a készülékeden olyan alkalmazás, amely meg tudja nyitni ezt - Ez a videó csak YouTube Music Prémium előfizetők számára érhető el, így nem megtekinthető és nem letölthető NewPipe segítségével. + Nincs a készülékén olyan alkalmazás, amely meg tudja ezt nyitni + Ez a videó csak YouTube Music Prémium előfizetők számára érhető el, így nem tekinthető meg és nem tölthető le a NewPipe-pal. Automatikus (rendszertéma) - Ez a tartalom csak előfizetőknek érhető el, nem megtekinthető és nem letölthető a NewPipe segítségével. - Ez a tartalom nem érhető el az országodban. - Ez a tartalom privát, így nem megtekinthető és nem letölthető a NewPipe segítségével. + Ez a tartalom csak előfizetőknek érhető el, nem tekinthető meg és nem tölthető le a NewPipe-pal. + Ez a tartalom nem érhető el az országában. + Ez a tartalom privát, így nem tekinthető meg és nem tölthető le a NewPipe-pal. A letöltés elkezdődött - Értesítésben megjelenő bélyegkép átméretezése 16:9 helyett 1:1 arányra (torzítással járhat) + Értesítésben megjelenő bélyegkép átméretezése 16:9-es helyett 1:1-es arányra (torzítással járhat) Fejezetek - Bélyegkép mutatása - Lejátszás felugró ablakban - Lejátszás a háttérben - Sorhoz hozzáadva - Sorhoz adás - Mentett fülek olvasása sikertelen, alapértelmezettek használata - Értesítések a videó hashelési folyamathoz - Videó hash értesítés - YouTube biztosít egy \"Korlátozott Módot\" ami elrejti a lehetséges felnőtteknek szóló tartalmat - YouTube \"Korlátozott Mód\"-jának bekapcsolása + Bélyegkép megjelenítése + Lejátszás indítása felugró ablakban + Lejátszás indítása a háttérben + Sorba állítva + Sorba állítás + Nem sikerült a mentett lapok olvasása, alapértelmezettek használata + Értesítések a videók ujjlenyomatkészítési folyamatához + Videó ujjlenyomat-készítési értesítése + A YouTube biztosít egy „Korlátozott módot”, amely elrejti a lehetséges felnőtteknek szóló tartalmat + A YouTube „Korlátozott módjának” bekapcsolása A példány már létezik - Pédány érvényesítése nem sikerült - Példány URL megadása + A példány érvényesítése nem sikerült + Adja meg a példány URL-ét Példány hozzáadása - A neked tetsző példányokat megtalálhatod itt: %s - Válaszd ki a kedvenc PeerTube példányaidat + Találjon önnek tetsző példányokat itt: %s + Válassza ki a kedvenc PeerTube példányait PeerTube példányok Életciklusából kifutott hibák jelentése - Preferált \'nyitási\' cselekedet + Előnyben részesített „megnyitási” művelet Fiók bezárása Fiók megnyitása Csatorna részleteinek megjelenítése - Tartsd hogy sorba állítsd - Alap Kiosk - A NewPipe egy copyleft szabad szoftver: Felhasználhatod, tanulmányozhatod, megoszthatod és fejlesztheted akaratod szerint. Konkrétan továbbadhatod és/vagy módosíthatod a GNU General Public License feltételei alatt ami a Free Software Foundation álltal lett publikálva, vagy a 3. verzióját a licensznek, vagy (a saját opciód szerint), bármelyik későbbi verzióját. + Tartsa a sorba állításhoz + Alapértelmezett újságárus + A NewPipe egy copyleft szabad szoftver: tetszése szerint felhasználhatja, tanulmányozhatja, megoszthatja és fejlesztheti. Egész pontosan a Free Software Foundation által kiadott GNU General Public License 3-as, vagy (választható módon) újabb verziójának feltételei szerint módosíthatja vagy adhatja tovább. Megoldás - Nyomj a \"Kész\"-re amikor meg van oldva - Hash számítása - Összefüggő elemek - Kérlek ellenőrizd, hogy egy hiba, ami az összeomlásodat írja le, létezik-e már. Ha duplikált jegyet adsz be, időt veszel el tőlünk amit arra tudnánk fordítani, hogy kijavítsuk magát a bugot. - Lekicsinyítés alkalmazás váltáskor + Nyomja meg a „Kész” gombot, ha megoldotta + Ujjlenyomat számítása + Kapcsolódó elemek + Ellenőrizze, hogy létezik-e már olyan jegy, amely az összeomlásával foglalkozik. Ha duplikált jegyet ad fel, akkor olyan időt vesz el tőlünk, amelyet a hiba javítására tudnánk fordítani. + Minimalizálás alkalmazásváltáskor + A(z) %s ezt az okot adta meg: + Helyi keresési javaslatok + Távoli keresési javaslatok + A fő lejátszó teljes képernyős indítása + A videókat ne a kis lejátszóban indítsa el, hanem kapcsolja be a teljes képernyős módot, ha az automatikus forgatás zárolva van. Továbbra is elérheti a kis lejátszót, ha kilép a teljes képernyőből. + Szolgáltatás be/ki, jelenleg kiválasztott: + A megjegyzések ki vannak kapcsolva + Húzza oldalra az elemeket az eltávolításukhoz + A következő sorba állítása + A következő sorba állítva + Feldolgozás… Ez eltarthat egy ideig. + Az eltávolítás utáni, fragment vagy activity életcikluson kívüli, nem kézbesíthető Rx kivételek jelentésének kényszerítése + Eredeti „ennyi ideje” megjelenítése az elemeken + Tiltsa le a médiacsatornázást, ha fekete képernyőt vagy akadozást tapasztal videólejátszáskor + Picasso színes szalagok megjelenítése a képek fölött, megjelölve a forrásukat: piros a hálózathoz, kék a lemezhez, zöld a memóriához + Minden letöltésnél meg fogja kérdezni, hogy hova mentse el + A „Storage Access Framework” nem támogatott Android KitKaten vagy régebbin + Válasszon egy példányt + Lista legutóbbi frissítése: %s + Lista betöltése… + Csak a nem csoportosított feliratkozások megjelenítése + Lista + Lista frissítési küszöb + A legutóbbi frissítés óta eltelt idő, ami után a feliratkozás elavultnak számít – %s + A szerző fiókját eltávolították. +\nA NewPipe nem fogja tudni betölteni ezt a listát a jövőben. +\nLeiratkozik erről a csatornáról\? + A gyors listamód nem ad ennél több információt. + Lekérés egy dedikált listából, ha lehetséges + Gyors mód engedélyezése + Úgy gondolja, hogy a lista betöltése lassú\? Ha így van, akkor próbálja engedélyezni a gyors betöltést (ezt a beállításokban változtathatja meg, vagy a lenti gomb megnyomásával). +\n +\nA NewPipe két listabetöltési stratégiát kínál: +\n• A teljes feliratkozott csatorna lekérése, amely lassú, de teljes. +\n• Egy dedikált szolgáltatási végpont, amely gyors, de általában nem teljes. +\n +\nA különbség a kettő között az, hogy a gyorsból általában hiányoznak egyes információk, mint az elem hossza vagy a típusa (nem lehet megkülönböztetni az élő videókat a normálaktól), valamint kevesebb elemet adhat vissza. +\n +\nA YouTube például egy olyan szolgáltatás, amely ezt a gyors módot RSS hírcsatornával kínálja. +\n +\nÍgy a választása azon múlik, hogy melyiket tartja fontosabbnak: a sebességet vagy a pontos információkat. + Csatorna profilképének bélyegképe + Legutóbbi + Kiemelt + Most már kijelölheti a leírásban lévő szöveg. Vegye figyelembe, hogy kijelölési módban az oldal villoghat, és a hivatkozások nem biztos, hogy kattinthatók lesznek. + Szöveg kijelölésének letiltása a leírásban + Licenc + Korhatár + Kiszolgáló + Bélyegkép URL + Nyilvános + Nem listázott + Ki + Csatornarészletek betöltése… + Nem található megfelelő fájlkezelő ehhez a művelethez. +\nTelepítsen egy fájlkezelőt, vagy próbálja meg letiltani a következőt a letöltési beállításokban: „%s”. + + Letöltés befejezve + %s letöltés befejezve + + Lista feldolgozása… + Egyes szolgáltatásoknál érhető el, általában sokkal gyorsabb, és korlátozott számú elemet adhat vissza, gyakran hiányos információkkal (például nincs hossz, elemtípus, vagy élő videó állapot) + Fiók eltávolítva + Megjelölés megtekintettként + Még nincs letöltési mappa beállítva, válassza ki az alapértelmezett letöltési mappát most + Tekerősáv bélyegkép-előnézete + Magas minőségű (nagyobb) + Hiba a lista betöltésekor + Megnézett elemek megjelenítése + Nyelv + Támogatás + Weboldal megnyitása + Táblagép mód + Az Android 10-től kezdve, csak a „Storage Access Framework” támogatott + Új listaelemek + Privát + Belső + Készítő által szívecskézve + Be + A(z) „%s” listája nem tölthető be. + Ez egy SoundCloud Go+ szám, legalábbis az Ön országában, így nem játszható le vagy tölthető le a NewPipe-pal. + Kapcsolja ki, hogy elrejtse a metainformációs dobozokat, melyek további információkat tartalmaznak a közvetítés létrehozójáról, annak tartalmáról vagy egy keresési kérésről + Hibajelentési értesítés + Értesítések a hibák jelentéséhez + A NewPipe hibát észlelt, koppintson a jelentéséhez + Hiba történt, lásd az értesítést + Médiacsatornázás letiltása + Hiba üzenetsávjának megjelenítése + Hibaértesítés létrehozása + Új verziók kézi keresése + Alacsony minőségű (kisebb) + Frissítések keresése… + Készítette: %s + Nem található megfelelő fájlkezelő ehhez a művelethez. +\nTelepítsen egy olyan fájlkezelőt, amely kompatibilis a Storage Access Frameworkkel. + Szöveg kijelölésének engedélyezése a leírásban + Kategória + Címkék + Adatvédelem + Hiba a csatornarészletek megjelenítésekor + Gyors mód letiltása + Igen, és távolítsa el a részben megnézett videókat is + A videók, melyeket már megnézett miután a lejátszási listához adta őket, el lesznek távolítva. +\nBiztos benne\? Ez nem vonható vissza. + A szolgáltatásokból származó eredeti szövegek láthatók lesznek a közvetítési elemeken + Lejátszó összeomlasztása + Képjelölők megjelenítése + A „lejátszó összeomlasztása” lehetőség megjelenítése + Megjeleníti az összeomlasztási lehetőséget a lejátszó használatakor + Hangmagasság megtartása (torzítást okozhat) + Frissítések keresése + Ne jelenítse meg + Megnézettek eltávolítása + Eltávolítja a megnézett videókat\? + + %1$s letöltés törölve + %1$s letöltés törölve + + Rögzített megjegyzés + Már megy a lejátszás a háttérben + LeakCanary nem elérhető \ No newline at end of file diff --git a/app/src/main/res/values-hy/strings.xml b/app/src/main/res/values-hy/strings.xml index 7d7a8b55a..8915a20e5 100644 --- a/app/src/main/res/values-hy/strings.xml +++ b/app/src/main/res/values-hy/strings.xml @@ -21,7 +21,7 @@ Մաքրել Հրապարակվել է %1$s Տեղադրել - Վերացնել + Չեղարկել Բացել բրաուզերում Ձայնային բեռնման պանակ Ընտրեք ներբեռնման թղթապանակը տեսաֆայլերի համար @@ -130,4 +130,17 @@ Միշտ Բեռնել Ցանկերում դիրքերը + Ինքնանվագարկում + Մաքրել դիտման պատմությունը + Մաքրել ներբեռնման պատմությունը + Աուդիո + Նշել որպես դիտված + Կրկնել + Նվագարկիչ + Պատմություն և քեշ + Գիշերային ոճ + Կանգ + Պատմություն + Պատմություն + Թրենդային \ No newline at end of file diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index e19955a66..656a37d25 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -227,4 +227,12 @@ Supporto Recente Interne + Aperir con + Suggestiones de recerca remote + Cargar miniaturas + Notification + Monstrante resultatos pro: %s + Solmente alicun apparatos pote reproducer videos 2K/4K + Initiar le reproductor principal in schermo plen + Solmente le URLs HTTPS es supportate \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 3253bade1..542ab9e6f 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -153,7 +153,7 @@ Selalu Hanya Sekali Berkas - Notifikasi untuk pemutar latar belakang dan popup NewPipe + Notifikasi untuk pemutar NewPipe [Tidak diketahui] Alihkan ke Latar Belakang Alihkan ke Popup @@ -285,11 +285,12 @@ Impor langganan YouTube dari Google takeout: \n \n1. Kunjungi URL ini: %1$s -\n2. Masuk ketika ditanya +\n2. Masuk ketika ditanyakan \n3. Klik \"Semua data disertakan\", lalu \"Batalkan semua pilihan\", lalu hanya pilih \"langganan\" dan klik \"OKE\" \n4. Klik \"Langkah berikutnya\" dan kemudian \"Buat ekspor\" -\n5. Klik tombol \"Unduh\" dan -\n6. Dari unduhan zip takeout ekstrak berkas .json (biasanya di bawah \"YouTube and YouTube Music/subscriptions/subscriptions.json\") dan impor di sini +\n5. Klik tombol \"Unduh\" +\n6. Klik IMPOR FILE di bawah dan pilih file .zip yang terunduh +\n7. [Jika impor .zip gagal] Ekstrak file .csv (biasanya di \"YouTube dan YouTube Music/langganan/langganan.csv\"), klik IMPOR FILE di bawah dan pilih file csv yang diekstrak Impor profil SoundCloud dengan mengetik URL atau ID Anda: \n \n1. Aktifkan \"mode desktop\" di peramban web (situs tidak tersedia untuk perangkat seluler) @@ -336,8 +337,8 @@ Pembaruan Acara Berkas dihapus - Notifikasi Pembaruan Apl - Notifikasi untuk versi NewPipe baru + Notifikasi pembaruan apl + Notifikasi untuk versi-versi NewPipe baru Penyimpanan eksternal tidak tersedia Tidak bisa mengunduh ke kartu SD eksternal. Atur ulang lokasi folder unduhan\? Tidak bisa membaca tab yang disimpan, beralih menggunakan tab bawaan @@ -569,7 +570,7 @@ Nonaktifkan untuk menyembunyikan kotak info dengan informasi tambahan tentang kreator, konten stream atau pencarian Tampilkan info meta Notifikasi untuk laju pemrosesan hash video - Notifikasi Hash Video + Notifikasi hash video Tidak ada apl di perangkat Anda yang bisa membuka ini Chapter Deskripsi @@ -579,8 +580,8 @@ Tampilkan deskripsi Buka dengan Konten ini hanya tersedia untuk pengguna yang telah membayar, sehingga tidak bisa diputar atau diunduh oleh NewPipe. - Video ini hanya tersedia untuk anggota Premium YouTube Music, sehingga tidak bisa diputar atau diunduh oleh NewPipe. - Konten ini bersifat pribadi, jadi tidak bisa diputar ataupun diunduh oleh NewPipe. + Video ini hanya tersedia untuk anggota YouTube Music Premium, sehingga tidak bisa diputar atau diunduh oleh NewPipe. + Konten ini privat, sehingga tidak bisa diputar atau diunduh oleh NewPipe. Ini adalah sebuah trek SoundCloud Go +, setidaknya di negara Anda, sehingga tidak bisa diputar atau diunduh oleh NewPipe. Konten ini tidak tersedia di negara Anda. Hentikan aplikasi @@ -661,7 +662,18 @@ Item feed baru Tampilkan \"hentikan pemain video\" Menampilkan opsi penghentian ketika menggunakan pemain video - Melaporkan kesalahan pemain video dalam detail yang penuh daripada menampilkan pesan toast yang muncul sebentar (berguna untuk memeriksa masalah) - Laporkan kesalahan pemain video Hentikan pemain video + Notifikasi untuk melaporkan kegalatan + Notifikasi laporan kegalatan + Sebuah kegalatan terjadi, lihat notifikasinya + Menampilkan sebuah snackbar kegalatan + Buat sebuah notifikasi kegalatan + Tidak ada manajer file yang ditemukan untuk tindakan ini. +\nMohon instal sebuah manajer file atau coba menonaktifkan \'%s\' di pengaturan unduhan. + NewPipe mengalami sebuah kegalatan, ketuk untuk melaporkan + Tidak ada manajer file yang ditemukan untuk tindakan ini. +\nMohon instal sebuah manajer file yang kompatibel dengan Storage Access Framework. + Komentar dipin + Sudah diputar di latar belakang + LeakCanary tidak tersedia \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c65eeff80..e6a70535b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -142,8 +142,8 @@ Comportamento Cronologia e cache Annulla - Notifiche NewPipe - Notifiche per lettore in sottofondo e popup + Notifica NewPipe + Notifiche per il lettore multimediale di NewPipe Nessun risultato Nessun iscritto @@ -342,8 +342,8 @@ Utilizza i gesti per controllare la luminosità del lettore multimediale Aggiornamenti File eliminato - Notifiche di aggiornamenti dell\'applicazione - Notifiche per una nuova versione di NewPipe + Notifiche per aggiornamenti dell\'app + Notifiche per le nuove versioni di NewPipe Archiviazione esterna non disponibile Impossibile scaricare sulla scheda SD esterna. Ripristinare la posizione della cartella dei download\? Impossibile leggere le schede salvate, verranno usate quelle predefinite @@ -576,7 +576,7 @@ Utilizza le copertine come sfondo della schermata di blocco e per le notifiche Mostra copertina Calcolo dell\'hash - Notifica Hash Video + Notifica hash video Notifiche per lo stato di avanzamento dell\'hashing video Recente Disattiva per nascondere i riquadri con informazioni aggiuntive sul contenuto, sul suo autore o su una richiesta di ricerca @@ -672,9 +672,20 @@ Verifica manualmente la presenza di nuove versioni Controllo aggiornamenti… Nuovi elementi feed - Segnala errori del lettore multimediale Quando il lettore multimediale è in uso, mostra un\'opzione per farlo crashare - Invece di mostrare un messaggio popup di breve durata, gli errori del lettore multimediale saranno visualizzati in modo dettagliato (utile per diagnosticare i problemi) Mostra \"Fai crashare il lettore\" Fai crashare il lettore + NewPipe ha riscontrato un errore, tocca per segnalarlo + Mostra un messaggio di errore + Non è stato trovato alcun gestore di file appropriato per questa azione. +\nInstallane uno prova a disattivare \"%s\" nelle impostazioni di download. + Notifica per segnalazione errori + Notifiche per segnalare errori + Si è verificato un errore, vedi la notifica + Crea una notifica di errore + Non è stato trovato alcun gestore di file appropriato per questa azione. +\nInstallane uno compatibile con Storage Access Framework. + Commento in primo piano + Già in riproduzione in sottofondo + LeakCanary non è disponibile \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 66a877c76..d8e59c859 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -272,14 +272,14 @@ 支援する NewPipe プロジェクトはあなたのプライバシーを非常に大切にしています。あなたの同意がない限り、アプリはいかなるデータも収集しません。 \nNewPipe のプライバシー・ポリシーでは、クラッシュリポート送信時にどのような種類のデータが送信・記録されるかを詳細に説明しています。 - NewPipe はコピーレフトなソフトウェアです。あなたは自由にそれを使用し、研究し、そして改善することができます。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。 + NewPipe はコピーレフトなソフトウェアです。あなたは自由にそれを使用し、研究し、共有し、そして改善することができます。あなたは、GNU フリーソフトウェア財団が公開する GNU General Public ライセンス バージョン3以降の下に、自由に再配布・修正を行うことができます。 最終再生日時 最も再生された動画 拡大 プレイリスト - 「長押しして追加」のヒントを表示 + 「長押ししてキュー」のヒントを表示 トラック - NewPipe のバックグラウンドおよびポップアッププレイヤーの通知 + NewPipe のプレイヤーの通知 新着と人気 長押ししてキューに追加 ポップアップで連続再生を開始 @@ -659,8 +659,21 @@ 次をキューに追加 次をキューに追加しました クリエイターの心をこめて - プレーヤーのエラーを、短時間のトーストメッセージではなく、詳細に報告する(問題の診断に役立ちます) - プレイヤーのエラーを報告 \"プレイヤーがクラッシュ\"を表示 プレイヤーがクラッシュ + 新しいフィードアイテム + エラー報告通知 + エラーが発生しました。通知をご覧ください + NewPipe はエラーに遭遇しました。タップして報告 + スナックバーにエラーを表示 + 既にバックグラウンドで再生されています + 固定されたコメント + この動作に適切なファイルマネージャが見つかりませんでした。 +\nStorage Access Frameworkと互換性のあるファイルマネージャをインストールしてください。 + この動作に適切なファイルマネージャが見つかりませんでした。 +\nファイルマネージャをインストールするか、ダウンロード設定で\'%s\'を無効にすることをお試しください。 + プレイヤー使用時にクラッシュオプションを表示 + エラー通知を作成 + エラーを報告する通知 + LeakCanaryが利用不可能です \ No newline at end of file diff --git a/app/src/main/res/values-jv/strings.xml b/app/src/main/res/values-jv/strings.xml index 35f5b075e..6b518b2e2 100644 --- a/app/src/main/res/values-jv/strings.xml +++ b/app/src/main/res/values-jv/strings.xml @@ -72,5 +72,5 @@ Ra ono pamuter (Sampeyan iso masang VLC kanggo muter iku). Pamuter ora ditemokke. Pasang VLC\? Diterbitake ing %1$s - Pencet suryakanta kanggo nglekasi + Pencet lup kanggo nglekasi \ No newline at end of file diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index e58a888e1..37100877d 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -134,7 +134,7 @@ Atgal Groti viską NewPipe pranešimai - Foninio ir langelio rėžimo grotuvų pranešimai + NewPipe grotuvo pranešimai [Nežinoma] Srauto atkurti nepavyko Įvyko nepataisoma grotuvo klaida @@ -310,7 +310,7 @@ Išvalyti reCAPTCHA slapukus Pranešimas apie video maišos progresą Video maišos pranešimas - Pranešimas apie naują NewPipe versija + Pranešimas apie naują NewPipe versiją Programos atnaujinimo pranešimas Failą Failas pašalintas @@ -469,7 +469,7 @@ Užverti Sustabdyti Perrašyti - Eilė + Į eilę apdorojama eilėje sustabdyta @@ -684,4 +684,19 @@ Tikrinti ar yra atnaujinimų rankiniu būdu Tikrinti ar yra atnaujinimų… Nauji sklaidos kanalo elementai + LeakCanary neprieinama + Naudojant grotuvą rodo lūžio parinkty + Rodyti klaidos juostą + Prisegtas komentaras + Nerasta tinkama failų tvarkyklė. +\nĮdiekite „Storage Access Framework“ suderinamą su šia failų tvarkykle. + Pranešimai pranešimui apie klaidas + Rodyti „grotuvas užlūžo“ + Sukurti klaidos pranešimą + NewPipe susidūrė su klaida, paspauskite norėdami pranešti + Šiam veiksmui nerastas tinkama failų tvarkyklė. +\nĮdiekite failų tvarkyklę arba pabandykite išjungti „%s“ parsiuntimo nustatymuose. + Užlūžo + Klaidos pranešimo pranešimas + Įvyko klaida, peržiūrėti pranešimą \ No newline at end of file diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 87ab37fda..20532bc61 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -1,6 +1,6 @@ - Tekan \"Cari\" untuk bermula + Tekan kanta kaca \"Cari\" untuk bermula Diterbitkan pada %1$s Tiada pemain strim ditemui. Muat turun VLC\? Tiada pemain strim yang ditemui (anda boleh memasang VLC untuk memainkan). @@ -43,7 +43,7 @@ Papar resolusi yang lebih tinggi Hanya peranti tertentu yang boleh bermain video 2K/4K Main dengan Kodi - App Kore tidak dijumpai. Pasangkan\? + Pasangkan aplikasi Kore yang tidak dijumpai\? Paparkan opsyen \"Main dengan Kodi\" Paparkan opsyen untuk memain video dengan Kodi Audio @@ -441,4 +441,6 @@ tidak boleh tulis ganti fail Fail dengan nama yang sama sudah ada Jangan tunjuk + Nyahbisu + Minta Android menyesuaikan warna pemberitahuan sesuai dengan warna utama di thumbnail (perhatikan bahawa ini tidak tersedia dalam semua perangkat) \ No newline at end of file diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 9e0753f14..e40ee5eab 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -118,7 +118,7 @@ Tøm Beste oppløsning NewPipe-merknad - Merknad for NewPipe-bakgrunn og oppsprettsspillere + Merknad for NewPipe sin avspiller Last ned Tillate tegn i filnavn Ugyldige tegn erstattes av denne verdien @@ -364,7 +364,7 @@ pauset I kø etterbehandling - + Legg i kø Handling avvist av systemet Nedlasting mislyktes Generer unikt navn @@ -668,10 +668,20 @@ Se etter oppdateringer Behandler … Kan ta sin tid Krasj avspilleren - Rapporter avspillerfeil - Sirlig rapportering av feil, istedenfor å kun vise et lite oppsprett en stund (nyttig i avlusningsøyemed) Vis «Krasj spilleren» Se etter nye versjoner manuelt Nye informasjonskanalelementer Ser etter oppdateringer … + Viser et krasjalternativ ved bruk av avspilleren + Det oppstod en feil. Sjekk merknaden. + Festet kommentar + Spilles allerede i bakgrunnen + Feilrapport-merknad + Merknader for innrapportering av feil + NewPipe-feil. Trykk for å rapportere. + Opprett en feilmerknad + Vis et feil-alternativsfelt + Installer en filbehandler først, eller skru av «%s» i nedlastingsinnstillingene. + Installer en filbehandler som støtter lagringstilgangsrammeverk først. + LeakCanary er ikke tilgjengelig \ No newline at end of file diff --git a/app/src/main/res/values-nds/strings.xml b/app/src/main/res/values-nds/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-nds/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index db409f505..da608b0c0 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -66,7 +66,7 @@ Downloads Foutrapport App/UI gecrasht - Wat:\\nVerzoek:\\nTaal van inhoud:\\nTaal van land:\\nTaal van Applicatie:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem: + Wat:\\nVerzoek:\\nTaal van inhoud:\\nTaal van land:\\nTaal van Toepassing:\\nDienst:\\nGMT-tijd:\\nPakket:\\nVersie:\\nVersie van besturingssysteem: Begin Pauzeren Verwijderen @@ -137,7 +137,7 @@ Hervat afspelen Ga verder met afspelen na onderbrekingen (b.v. telefoongesprekken) NewPipe Melding - Meldingen voor NewPipe-achtergrond- en pop-upspelers + Meldingen voor NewPipe speler Geschiedenis Geschiedenis Speler @@ -292,7 +292,7 @@ Alle gecachete webpagina-gegevens wissen Metagegevens-cache gewist Afspeelsnelheidbesturing - Tempo + Snelheid Toon Ontlinken (kan ruis veroorzaken) Voorkeursactie voor openen @@ -310,7 +310,7 @@ De gehele zoekgeschiedenis wissen\? Zoekgeschiedenis gewist 1 item verwijderd. - NewPipe is vrije software: je kan het gebruiken, bestuderen, delen en verbeteren zoveel je maar wil. Je kan het opnieuw uitgeven en/of aanpassen volgens de voorwaarden van de GNU General Public License, gepubliceerd door de Free Software Foundation, versie 3 van de licentie, of (indien gewenst) om het even welke latere versie. + NewPipe is vrije software: je kan het gebruiken, bestuderen, delen en verbeteren zoveel je maar wilt. Je kan het opnieuw uitgeven en/of aanpassen volgens de voorwaarden van de GNU General Public License, gepubliceerd door de Free Software Foundation, versie 3 van de licentie, of (indien gewenst) om het even welke latere versie. Wil je ook de instellingen importeren? NewPipe\'s privacybeleid Het NewPipe-project neemt privacy serieus. Daarom verzamelt de app geen gegevens zonder jouw toestemming. @@ -340,10 +340,10 @@ Gebruik gebaren om het volume van de speler aan te passen Gebaarbesturing voor helderheid Gebruik gebaren om de helderheid van de speler aan te passen - Updates + Bijwerken Bestand verwijderd - App Update Melding - Meldingen voor nieuwe versies van NewPipe + App update melding + Meldingen voor nieuwe New Pipe versies Externe opslag niet beschikbaar Downloaden naar externe SD-kaart is niet mogelijk. Download map opnieuw instellen\? Fout bij het lezen van de opgeslagen tabbladen, waardoor standaardtabbladen worden gebruikt @@ -351,7 +351,7 @@ Wil je de standaardinstellingen herstellen\? Aantal abonnees niet beschikbaar Welke tabbladen worden weergegeven op de hoofdpagina - Updates + Bijwerken Toon een melding om de applicatie te updaten wanneer er een nieuwe versie beschikbaar is Lijstweergavemodus Lijst @@ -484,7 +484,7 @@ Geen abonnement geselecteerd %d geselecteerd - %d geselecteerd + %d geselecteerde Lege groepsnaam Wilt u deze groep verwijderen\? @@ -551,7 +551,7 @@ Vraag bevestiging alvorens de wachtrij te wissen Niets Aan het bufferen - Shuffle + Willekeurig afspelen Herhaal Je kan maximaal drie acties selecteren om te tonen in de compacte notificatie! Pas elke notificatieactie hieronder aan door er op te tikken. Selecteer tot drie acties die getoond worden in de compacte notificatie door gebruik te maken van de selectievakjes aan de rechterkant @@ -578,7 +578,7 @@ Recente Hash berekenen Meldingen over de voortgang van video hashing - Video Hash Melding + Video hash melding Schakel dit uit om meta-informatie vakken te verbergen met aanvullende informatie over de maker van de stream, streaminhoud of een zoekopdracht Laat meta informatie zien Beschrijving @@ -626,7 +626,7 @@ Media tunneling uitschakelen Uit Aan - Tablet mode + Tablet modus Open website %s geeft de volgende reden: Account getermineerd @@ -667,14 +667,25 @@ Veeg items om ze te verwijderen Start geen video\'s in de minispeler, maar ga direct naar de volledige schermmodus, als automatisch draaien is vergrendeld. Je hebt nog steeds toegang tot de minispeler door de volledige schermmodus af te sluiten Start hoofdspeler als volledig scherm - Rapporteer fouten van de speler in volledig detail in plaats van een kortstondige toastmelding te tonen (handig voor het diagnosticeren van problemen) Verwerken... Dit kan even duren Crash de speler - Rapporteer fouten van de speler Toon \"crash de speler\" Toon een crash overzicht bij gebruik van de speler Controleer handmatig op nieuwe versies Controleer op updates Bezig met controleren op updates… Nieuwe feed items + Foutmelding + Beschrijving van foutmeldingen + NewPipe meldt fout, tik voor bericht + Foutmelding + Maak een foutmelding + Speelt al op de achtergrond + Korte foutmelding weergeven + Er is geen geschikte bestandsbeheerder gevonden voor deze actie. +\nInstalleer een bestandsbeheerder of probeer \'%s\' uit te schakelen in de download instellingen. + Er is geen geschikte bestandsbeheerder gevonden voor deze actie. +\nInstalleer een bestandsbeheerder die compatibel is met het Storage Access Framework. + Vastgemaakt commentaar + LeakCanary is niet beschikbaar \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index b6e5de47b..75d8acf50 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -135,8 +135,8 @@ Śledź obejrzane wideo Wznawiaj odtwarzanie Kontynuuj odtwarzanie po przerwaniu (np. po rozmowie telefonicznej) - Powiadomienia NewPipe - Powiadomienia dla NewPipe przy odtwarzaniu w tle i w trybie okienkowym + Powiadomienie NewPipe + Powiadomienia dla odtwarzacza NewPipe Historia Historia Odtwarzacz @@ -175,10 +175,10 @@ Większość znaków specjalnych Dotacja - NewPipe jest rozwijany przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić Ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment, aby wesprzeć programistów i sprawić, by program był jeszcze lepszy, delektując się filiżanką kawy. + NewPipe jest rozwijany przez wolontariuszy, którzy poświęcają swój wolny czas, zapewniając Ci najlepsze wrażenia z użytkowania. To dobry moment na wsparcie programistów i sprawienie, aby NewPipe był jeszcze lepszy, podczas gdy oni będą mogli delektować się filiżanką kawy. Wspomóż Strona internetowa - By otrzymać więcej informacji oraz najnowsze wiadomości o NewPipe, odwiedź naszą stronę. + Odwiedź stronę NewPipe, aby uzyskać więcej informacji i najnowsze wiadomości. Czy chcesz usunąć tę pozycję z historii wyszukiwania? Zawartość strony głównej Pusta strona @@ -347,15 +347,15 @@ Kontrola jasności gestami Używaj gestów do sterowania jasnością odtwarzacza Aktualizacje - Plik usunięty + Usunięto plik Powiadomienie o aktualizacji aplikacji - Powiadomienia o nowej wersji NewPipe + Powiadomienia o nowych wersjach NewPipe Pamięć zewnętrzna niedostępna Pobieranie na kartę SD nie jest możliwe. Zresetować lokalizację folderu zapisywania\? Nie udało się odczytać zapisanych kart, więc będą używane domyślne Przywróć domyślne Czy chcesz przywrócić ustawienia domyślne\? - Liczba subskrybentów jest niedostępna + Liczba subskrybentów niedostępna Karty wyświetlane na stronie głównej Aktualizacje Pokazuj powiadomienie zachęcające do pobrania aktualizacji aplikacji, gdy jest dostępna nowa wersja @@ -405,7 +405,7 @@ Pozycje odtwarzania na listach Pokazuj wskaźniki pozycji odtwarzania na listach Wyczyść dane - Pozycje odtwarzania usunięte + Usunięto pozycje odtwarzania Plik usunięty albo przeniesiony Plik z tą nazwą już istnieje nie można nadpisać pliku @@ -413,7 +413,7 @@ NewPipe został zamknięty podczas pracy nad plikiem Brak miejsca na urządzeniu Utracono postęp, ponieważ plik został usunięty - Czy chcesz wyczyścić historię pobierania lub usunąć wszystkie pobrane pliki\? + Czy chcesz wyczyścić historię pobierania, czy usunąć wszystkie pobrane pliki\? Ogranicz kolejkę pobierania Tylko jedno pobieranie zostanie uruchomione w tym samym czasie Rozpocznij pobieranie @@ -638,7 +638,7 @@ Tagi Kategoria Otwórz stronę - Teraz możesz zaznaczyć tekst wewnątrz opisu. Pamiętaj, że strona może migotać, a łącza mogą nie być klikane w trybie zaznaczania. + Teraz możesz zaznaczyć tekst wewnątrz opisu. Pamiętaj, że strona może migotać, a łącza mogą nie być klikalne w trybie zaznaczania. %s podaje ten powód: Konto zamknięte Tryb szybki dla ładowania kanału nie dostarcza więcej informacji na ten temat. @@ -691,9 +691,20 @@ Ręcznie sprawdź dostępność nowych wersji Sprawdź dostępność aktualizacji Nowe pozycje kanału - Zgłaszaj błędy odtwarzacza Pokazuje opcję psucia podczas korzystania z odtwarzacza Zepsuj odtwarzacz - Pokazuj „zepsuj odtwarzacz” - Zgłasza szczegółowo błędy odtwarzacza zamiast pokazywać krótkotrwałą wiadomość toast (przydatne do diagnozowania problemów) + Pokazuj „Zepsuj odtwarzacz” + Powiadomienie raportu o błędach + Powiadomienia do zgłaszania błędów + NewPipe napotkał błąd. Naciśnij, aby zgłosić + Wystąpił błąd. Zobacz powiadomienie. + Pokaż snackbar z błędem + Utwórz powiadomienie o błędzie + Nie znaleziono odpowiedniego menedżera plików dla tej akcji. +\nZainstaluj menedżer plików lub spróbuj wyłączyć „%s” w ustawieniach pobierania. + Nie znaleziono odpowiedniego menedżera plików dla tej akcji. +\nZainstaluj menedżer plików zgodny z Storage Access Framework. + Już jest odtwarzane w tle + Przypięty komentarz + LeakCanary jest niedostępne \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 01abc413e..3a801f379 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -3,7 +3,7 @@ Áudio Não foi possível decodificar assinatura da URL do vídeo Seu comentário (em inglês): - O que ocorreu: + O que aconteceu: Informação: Vídeo Preto (AMOLED) @@ -16,7 +16,7 @@ Formato de áudio padrão Resolução padrão Excluir - Não curtidas + Não gostei Curtidas Baixar Baixar @@ -82,7 +82,7 @@ Usar player de áudio externo Usar player de vídeo externo Mostrar opção \"Reproduzir com Kodi\" - Ocorrido:\\nPedido:\\nIdioma do conteúdo:\\nPaís do conteúdo:\\nIdioma do app:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão do Sistema Operacional: + O que aconteceu:\\nPedido:\\nIdioma do conteúdo:\\nPaís do conteúdo:\\nIdioma do app:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão do Sistema Operacional: Abrir no modo popup Resolução padrão do popup Mostrar resoluções mais altas @@ -130,7 +130,7 @@ Não foi possível atualizar inscrição Inscrições Novidades - Retomar vídeo + Continuar reprodução Continua vídeo após interrupções (ex: ligações) Histórico de pesquisa Armazena histórico de pesquisa localmente @@ -138,8 +138,8 @@ Armazena histórico de vídeos assistidos Histórico Histórico - Notificações do NewPipe - Notificações para players popup e em segundo plano do NewPipe + Notificação do NewPipe + Notificações para o player do NewPipe Comportamento Histórico e cache Desfazer @@ -267,17 +267,17 @@ \n \n1. Acesse este link: %1$s \n2. Faça login quando solicitado -\n3. Clique em \"Todos os dados incluídos\", em seguida, em \"Desmarque todos\", em seguida, selecione apenas \"assinaturas\" e clique em \"OK\" +\n3. Clique em \"Todos os dados incluídos\", depois em \"Desmarcar todos\", em seguida, selecione apenas \"assinaturas\" e clique em \"OK\" \n4. Clique em \"Próximo passo\" e em seguida, em \"Criar exportação\" \n5. Clique no botão \"Baixar\" quando ele aparecer -\n6. Clique em Importar Arquivo abaixo e selecione o arquivo zip baixado -\n7. Caso a importação do arquivo zip falhe: Extraia o arquivo .csv (normalmente em \"YouTube e YouTube Music/subscriptions/subscriptions.csv\", clique em Importar Arquivo abaixo e selecione o arquivo cvs extraído +\n6. Clique em IMPORTAR ARQUIVO abaixo e selecione o arquivo .zip baixado +\n7. Caso a importação do arquivo .zip falhe: Extraia o arquivo .csv (geralmente em \"YouTube e YouTube Music/subscriptions/subscriptions.csv\", clique em IMPORTAR ARQUIVO abaixo e selecione o arquivo csv extraído
Importe um perfil do SoundCloud digitando o URL ou seu ID: \n -\n1. Ative o \"modo desktop\" no navegador (o site não está disponível em aparelhos celulares) +\n1. Ative o \"modo desktop\" em um navegador (o site não está disponível em aparelhos celulares) \n2. Acesse este URL: %1$s \n3. Faça login quando solicitado -\n4. Copie o URL do perfil que voçê foi redirecionado. +\n4. Copie o URL do perfil que você foi redirecionado.
seuID, soundcloud.com/seuid Tenha em mente que esta operação poderá consumir muitos dados. \n @@ -288,9 +288,9 @@ Remove todos os dados de páginas em cache Cache de metadados limpo Controles de velocidade de reprodução - Ritmo + Velocidade Desative para não carregar miniaturas e economizar no uso de dados e memória. A alteração limpa todo o cache de imagens em memória e em disco - Altura + Afinação Desvincular (pode causar distorção) Ação de \'abrir\' preferida Ação padrão ao abrir conteúdo — %s @@ -326,7 +326,7 @@ Nenhum Minimizar para segundo plano Minimizar para player popup - Avanço rápido durante silêncio + Avançar durante o silêncio Passo Redefinir Canais @@ -343,8 +343,8 @@ Atualizações Eventos Arquivo excluído - Notificação de atualização - Notificação de novas versões do NewPipe + Notificação de atualização do aplicativo + Notificações para novas versões do NewPipe Armazenamento externo indisponível Não é possível baixar para o cartão SD externo. Redefinir o local da pasta de download\? Não foi possível carregar as abas salvas, carregando as abas padrão @@ -410,7 +410,7 @@ Tempo limite de conexão Excluir todo o histórico de downloads ou excluir todos os arquivos baixados\? Limitar fila de downloads - Um download será feito ao mesmo tempo + Um download será feito por vez Iniciar downloads Pausar downloads Perguntar onde salvar o arquivo @@ -437,7 +437,7 @@ Duração do salto para avançar/retroceder Instâncias do PeerTube Escolha suas instâncias do PeerTube favoritas - Procure instâncias que gosta em %s + Encontre as instâncias que gosta em %s Adicionar instância Insira o link da instância Erro ao validar a instância @@ -506,7 +506,7 @@ \n• Buscar todo o conteúdo do canal inscrito, que é lento mas completo. \n• Usar um endpoint de serviço dedicado, que é rápido mas geralmente incompleto. \n -\nA diferença entre os dois é que o rápido geralmente falta alguma informação, como a duração ou tipo do item (não consegue distinguir entre as lives e os vídeos normais) e pode retornar menos itens. +\nA diferença entre os dois é que no rápido geralmente falta alguma informação, como a duração ou tipo do item (não consegue distinguir entre as lives e os vídeos normais) e pode retornar menos itens. \n \nO YouTube é um exemplo de serviço que oferece o modo rápido com seu feed RSS. \n @@ -577,7 +577,7 @@ Mostrar miniatura Calculando hash Notificações para o progresso do hash do vídeo - Notificação de Hash do Vídeo + Notificação de hash do vídeo Desative para ocultar as caixas de informações de metadados com informações adicionais sobre o criador, conteúdo do stream ou uma solicitação de pesquisa Mostrar informação de metadados Recentes @@ -591,12 +591,12 @@ Nenhum aplicativo em seu dispositivo pode abrir isso O aplicativo parou Este conteúdo está disponível apenas para usuários que pagaram, portanto não pode ser transmitido ou baixado pelo NewPipe. - Este vídeo está disponível apenas para assinantes do YouTube Music Premium, portanto não pode ser transmitido ou baixado por NewPipe. + Este vídeo está disponível apenas para assinantes do YouTube Music Premium, portanto não pode ser transmitido ou baixado pelo NewPipe. Este conteúdo é privado, portanto não pode ser transmitido ou baixado pelo NewPipe. Esta é uma faixa do SoundCloud Go+, pelo menos no seu país, portanto não pode ser transmitida ou baixada pelo NewPipe. Este conteúdo não está disponível em seu país. Este vídeo tem restrição de idade. -\nDevido às novas políticas do YouTube sobre vídeos com restrição de idade, o NewPipe não pode acessar nenhuma de suas streams de vídeo e assim ele não pode ser exibido. +\nDevido às novas políticas do YouTube sobre vídeos com restrição de idade, o NewPipe não pode acessar nenhum de seus streams de vídeo e assim ele não pode ser exibido. Rádio Destaque Resolvido @@ -613,7 +613,7 @@ Não Listado Público Limite de Idade - URL da Capa + URL da Miniatura Hospedado em Suporte Idioma @@ -645,10 +645,10 @@ Baixa qualidade (menor) Alta qualidade (maior) Pré visualização da miniatura da barra de busca - Comentários estão desabilitados + Os comentários estão desabilitados Marcar como visto Curtido pelo criador - Exibir fitas coloridas de Picasso no topo das imagens indicando sua fonte: vermelho para rede, azul para disco e verde para memória + Exibir fitas coloridas no topo das imagens indicando sua fonte: vermelho para rede, azul para disco e verde para memória Carregando detalhes do canal… Erro ao exibir detalhes do canal @@ -663,7 +663,7 @@ Adicionado na próxima posição da fila Adicionar a próxima posição da fila Deslize items para remove-los - Não inicia os vídeos no player reduzido, mas muda direto para o modo de tela cheia, se a rotação automatica estiver travada. Você ainda consegue acessar o player reduzido saindo da tela cheia + Não inicia os vídeos no player reduzido, mas muda direto para o modo de tela cheia, se a rotação automática estiver travada. Você ainda consegue acessar o player reduzido saindo da tela cheia Iniciar o player principal em tela cheia Sugestões de busca remotas Sugestões de busca locais @@ -672,9 +672,20 @@ Procurar manualmente por novas versões Procurando por atualizações… Travar o player - Reporta os erros do player em detalhes completos, em vez de mostrar uma mensagem de notificação de curta duração (útil para diagnosticar problemas) - Mostrar \"travar o player\" - Reportar erros do player + Mostrar \"Travar o player\" Mostra uma opção de travamento ao usar o player Novos itens do feed + Notificação de relatório de erro + Notificações para reportar erros + O NewPipe encontrou um erro, toque para reportar + Crie uma notificação de erro + Nenhum gerenciador de arquivos apropriado foi encontrado para esta ação. +\nInstale um gerenciador de arquivos compatível com o Storage Access Framework. + Ocorreu um erro, consulte a notificação + Mostrar um snackbar de erro + Nenhum gerenciador de arquivos apropriado foi encontrado para esta ação. +\nInstale um gerenciador de arquivos ou tente desativar \'%s\' nas configurações de download. + Já está tocando em segundo plano + Comentário fixado + O LeakCanary não está disponível \ No newline at end of file diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 89868c573..fbcebcac5 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -25,7 +25,7 @@ Canal não subscrito Nome do ficheiro Mostrar indicadores de posição de reprodução nas listas - Notificações para NewPipe e para os reprodutores popup + Notificações para o reprodutor do NewPipe Desvincular (pode causar distorção) Escolha as sugestões a mostrar ao pesquisar Ficheiro ZIP inválido @@ -139,7 +139,7 @@ Desative para parar o carregamento de miniaturas, poupar dados e utilização da memória. As alterações limpam a cache de imagens do disco e da memória Será que queria dizer \"%1$s\"\? Mostrar uma notificação para pedir a atualização da aplicação se existir uma nova versão - Fila + Enfileirar Ninguém está a ver Remover ficheiros descarregados Idioma da aplicação @@ -176,8 +176,8 @@ \n3. Clique em \"Todos os dados incluídos\", depois em \"Desmarcar todos\", depois selecione apenas \"subscrições\" e clique em \"OK\". \n4. Clique em \"Próximo passo\" e depois em \"Criar exportação\". \n5. Clique no botão \"Descarregar\" após aparecer -\n6. Clique em IMPORT FILE abaixo e selecione o ficheiro zip descarregado -\n7. [Se a importação do zip falhar] Extraia o ficheiro .csv (geralmente em \"YouTube e YouTube Music/subscriptions/subscriptions.csv\"), clique em IMPORT FILE abaixo e selecione o ficheiro csv extraído +\n6. Clique em IMPORT FILE abaixo e selecione o ficheiro .zip descarregado +\n7. [Se a importação do .zip falhar] Extraia o ficheiro .csv (geralmente em \"YouTube e YouTube Music/subscriptions/subscriptions.csv\"), clique em IMPORT FILE abaixo e selecione o ficheiro csv extraído Ativar reprodutor em segundo plano Desafio reCAPTCHA solicitado Reprodução automática @@ -281,7 +281,7 @@ pós-processamento não é possível sobrescrever o ficheiro Fonte de conteúdo/ficheiro inexistente - Notificações para uma nova versão do NewPipe + Notificações para novas versões do NewPipe Histórico Lista Remover vídeos visualizados\? @@ -663,7 +663,7 @@ %s descargas concluídas Deslizar itens para removê-los - Não iniciar vídeos no reprodutor mini, mas ir diretamente para ecrã completo se a rotação automática estiver bloqueada. Ainda pode aceder o reprodutor mini se sair do modo de ecrã completo. + Não iniciar vídeos no reprodutor mini, mas ir diretamente ao ecrã completo se a rotação automática estiver bloqueada. Ainda pode aceder o reprodutor mini se sair do modo de ecrã completo Iniciar reprodutor principal em ecrã completo Enfileirado o próximo Enfileirar o próximo @@ -673,8 +673,19 @@ A procurar atualizações… Novos itens Travar o reprodutor - Relata os erros do reprodutor com todos os detalhes em vez de mostrar uma mensagem de notificação por pouco tempo (útil para diagnosticar problemas) - Relatar erros do reprodutor Mostrar \"travar o reprodutor\" Mostra uma opção de travamento ao usar o reprodutor + Notificação de relatório de erros + Notificações para reportar erros + NewPipe encontrou um erro, toque para relatar + Ocorreu um erro, veja a notificação + Mostrar um snackbar de erro + Criar uma notificação de erro + Nenhum gestor de ficheiros apropriado foi encontrado para esta ação. +\nPor favor, instale um gestor de ficheiros ou tente desativar \'%s\' nas configurações de descarregar. + Nenhum gestor de ficheiros apropriado foi encontrado para esta ação. +\nPor favor, instale um gestor de ficheiros compatível com o Storage Access Framework. + Comentário fixado + Já está a reproduzir em segundo plano + LeakCanary não está disponível \ No newline at end of file diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 40e39802c..ef0a8a89c 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -68,7 +68,7 @@ Iniciar Pausa Eliminar - Checksum + Soma de controlo Nome do ficheiro Erro Toque para detalhes @@ -79,7 +79,7 @@ Processos Descarga NewPipe Aplicação terminou em erro - O quê:\\nPedido:\\nIdioma do conteúdo:\\nPaís do conteúdo\\nIdioma da app\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão do SO: + O quê:\\nPedido:\\nIdioma do conteúdo:\\nPaís do conteúdo\\nIdioma da aplicação\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nSO Versão: Abrir no modo popup Preto Tudo @@ -97,7 +97,7 @@ Resolução padrão para janela popup Mostrar resoluções mais altas Apenas alguns dispositivos conseguem reproduzir vídeos em 2K/4K - Popup + popup Lembrar propriedades do popup Limpar Segundo plano @@ -135,7 +135,7 @@ Histórico e cache Anular Notificação NewPipe - Notificações para NewPipe e para os reprodutores popup + Notificações para o reprodutor do NewPipe Sem resultados Aqui não há nada para ver Sem subscritores @@ -268,8 +268,8 @@ \n3. Clique em \"Todos os dados incluídos\", depois em \"Desmarcar todos\", depois selecione apenas \"subscrições\" e clique em \"OK\". \n4. Clique em \"Próximo passo\" e depois em \"Criar exportação\". \n5. Clique no botão \"Descarregar\" após aparecer -\n6. Clique em IMPORT FILE abaixo e selecione o ficheiro zip descarregado -\n7. [Se a importação do zip falhar] Extraia o ficheiro .csv (geralmente em \"YouTube e YouTube Music/subscriptions/subscriptions.csv\"), clique em IMPORT FILE abaixo e selecione o ficheiro csv extraído +\n6. Clique em IMPORT FILE abaixo e selecione o ficheiro .zip descarregado +\n7. [Se a importação do .zip falhar] Extraia o ficheiro .csv (geralmente em \"YouTube e YouTube Music/subscriptions/subscriptions.csv\"), clique em IMPORT FILE abaixo e selecione o ficheiro csv extraído Importe o seu perfil SoundCloud digitando o URL ou a ID.: \n \n1. Ative o modo desktop do seu navegador web (o site não está disponível para dispositivos móveis) @@ -343,7 +343,7 @@ Atualizações Ficheiro eliminado Notificação de nova versão - Notificações para uma nova versão do NewPipe + Notificações para novas versões do NewPipe Armazenamento externo indisponível Não é possível guardar no cartão SD. Repor pasta de descargas\? Não foi possível ler as guias gravadas, portanto usando as guias predefinidas @@ -363,7 +363,7 @@ em pausa na fila pós-processamento - Fila + Enfileirar Ação recusada pelo sistema Falha ao descarregar Gerar nome único @@ -421,7 +421,7 @@ Limpar posições de reprodução Remove todas as posições de reprodução Remover todas as posições de reprodução\? - Alternar serviço, agora selecionado: + Alternar serviço atualmente selecionado: \'Kiosk\' padrão Ninguém está a ver @@ -663,7 +663,7 @@ %s descargas concluídas Deslizar itens para removê-los - Não iniciar vídeos no reprodutor mini, mas ir diretamente para ecrã completo se a rotação automática estiver bloqueada. Ainda pode aceder o reprodutor mini se sair do modo de ecrã completo. + Não iniciar vídeos no reprodutor mini, mas ir diretamente ao ecrã completo se a rotação automática estiver bloqueada. Ainda pode aceder o reprodutor mini se sair do modo de ecrã completo Iniciar reprodutor principal em ecrã completo Enfileirado o próximo Enfileirar o próximo @@ -673,8 +673,19 @@ A procurar atualizações… Novos itens Travar o reprodutor - Relata os erros do reprodutor com todos os detalhes em vez de mostrar uma mensagem de notificação por pouco tempo (útil para diagnosticar problemas) - Relatar erros do reprodutor - Mostrar \"travar o reprodutor\" + Mostrar \"Travar o reprodutor\" Mostra uma opção de travamento ao usar o reprodutor + Notificação de relatório de erros + Notificações para reportar erros + NewPipe encontrou um erro, toque para relatar + Ocorreu um erro, veja a notificação + Mostrar um snackbar de erro + Criar uma notificação de erro + Nenhum gestor de ficheiros apropriado foi encontrado para esta ação. +\nPor favor, instale um gestor de ficheiros ou tente desativar \'%s\' nas configurações de descarregar. + Nenhum gestor de ficheiros apropriado foi encontrado para esta ação. +\nPor favor, instale um gestor de ficheiros compatível com o Storage Access Framework. + Já está a reproduzir em segundo plano + Comentário fixado + LeakCanary não está disponível \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index cbfa004ae..2274df90c 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -680,4 +680,18 @@ Afișați indicatorii de imagine Dezactivați tunelarea media dacă întâmpinați un ecran negru sau blocaje la redarea video Procesarea.. Poate dura un moment + Verifică dacă există actualizări + Verifică manual dacă există versiuni noi + Se redă deja pe fundal + Comentariu lipit + Notificare cu raport de eroare + Afișează opțiunea de a întrerupe atunci când utilizați playerul + A apărut o eroare, verifică notificarea + NewPipe a întămpinat o eroare, apăsați ca să raportați + Se verifică actualizări… + Notificări pentru a raporta erori + Crează o notificare de eroare + Arată \"închiderea bruscă a player-ului video\" + Arată o eroare de tip snackbar + Elemente de flux noi \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7d0da8992..79a09ea69 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -134,7 +134,7 @@ Возобновить при фокусе Возобновлять воспроизведение после перерывов (например, телефонных звонков) Уведомление NewPipe - Уведомление для NewPipe в фоне и во всплывающем окне + Уведомления для плеера NewPipe Загрузки Допустимые символы имён файлов Заменяет недопустимые символы> @@ -367,8 +367,8 @@ Жест громкости Обновления Файл удалён - Уведомление об обновлении - Уведомления о новой версии NewPipe + Уведомление об обновлении приложения + Уведомления о новых версиях NewPipe Обновления Показать уведомление при наличии новой версии Доступно обновление NewPipe! @@ -376,7 +376,7 @@ Завершено приостановлено в очереди - Очередь + Добавить в очередь Действие запрещено системой Ошибка загрузки Перезаписать @@ -594,7 +594,7 @@ Использовать миниатюру для фона уведомлений и экрана блокировки Показать миниатюру Показать уведомление при хэшировании видео - Уведомление о хэшировании + Уведомление о хэшировании видео Вычисляется хэш Недавнее Отключите, чтобы скрыть поля метаданных (автор потока, содержимое потока или поисковый запрос) @@ -711,4 +711,17 @@ Показать \"Вызвать сбой плеера\" Показать функцию вызова сбоя при работе плеера Вызвать сбой плеера + Уведомление отчёта об ошибке + Уведомления для отчётов об ошибках + NewPipe столкнулся с ошибкой, нажмите для отчёта + Произошла ошибка, подробнее в уведомлении + Показать ошибку снекбара + Создать уведомление об ошибке + Для этого действия не найдено подходящего файлового менеджера. +\nПожалуйста, установите файловый менеджер, или попробуйте отключить \'%s\' в настройках загрузок. + Для этого действия не найдено подходящего файлового менеджера. +\nПожалуйста, установите файловый менеджер, совместимый со Storage Access Framework (SAF). + Уже проигрывается в фоне + Закреплённый комментарий + LeakCanary недоступна \ No newline at end of file diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml index 817aacd9a..a5c59c700 100644 --- a/app/src/main/res/values-sat/strings.xml +++ b/app/src/main/res/values-sat/strings.xml @@ -60,4 +60,8 @@ ᱫᱚᱥᱟᱨ ᱠᱟᱹᱢᱤ ᱵᱩᱛᱟᱹᱢ ᱢᱟᱲᱟᱝ ᱠᱟᱹᱢᱤ ᱵᱩᱛᱟᱹᱢ ᱛᱷᱟᱹᱢᱵᱽᱱᱮᱞ ᱫᱚ ᱑:᱑ ᱮᱥᱯᱮᱠᱼᱴ ᱨᱮᱥᱤᱭᱚ ᱨᱮ ᱢᱟᱯ ᱢᱮ + ᱴᱷᱤᱠ + ᱥᱟᱰᱮ + ᱧᱮᱞ ᱠᱟᱱ ᱞᱮᱠᱷᱟ ᱪᱤᱱᱦᱟᱹ ᱠᱟᱜ ᱢᱮ + ᱯᱞᱮᱭᱚᱨ ᱠᱨᱟᱥ ᱠᱟᱜ ᱢᱮ \ No newline at end of file diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 0d9dbe2e0..332f97c03 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -7,7 +7,7 @@ \n3. Incarca in \"Totu sos datos incluidos\", a pustis in \"Boga sa seletzione a totus\" e a pustis galu ischerta petzi \"iscritziones\" e incarca \"AB\" \n4. Incarca in \"Passu imbeniente\" e a pustis in \"Crea un\'esportatzione\" \n5. Cando aparit, incarca in su butone \"Iscarrigamentu\" -\n6. Incarca in IMPORTA SU DOCUMENTU in suta e ischerta su documentu zip iscarrigadu +\n6. Incarca in IMPORTA SU DOCUMENTU in suta e ischerta su documentu .zip iscarrigadu \n6. [Si s\'importatzione fallit] Estrae su documentu .csv (de sòlitu tenet su nùmene\"\"YouTube and YouTube Music/subscriptions/subscriptions.csv\"), incarca in IMPORTA SU DOCUMENTU in suta e ischerta su documentu csv estratu Esportatzione de s\'iscritzione fallida Importatzione de s\'iscritzione fallida @@ -254,7 +254,7 @@ A disponimentu in unos cantos servìtzios, de sòlitu est meda prus lestru ma diat pòdere frunire unu nùmeru limitadu de elementos e, fatu-fatu, informatziones no intreas (es. peruna longària, casta de elementu, indicadore de istadu in direta) Recùperu dae una fonte de cuntenutos dedicada, cando est a disponimentu Agiorna semper - Tempus chi depet colare a pustis de s\'ùrtimu agiornamentu, in antis chi un\'abbonamebèngiat cunsiderada tropu betza — %s + Tempus chi depet colare a pustis de s\'ùrtimu agiornamentu, in antis chi un\'abbonamentu bèngiat cunsideradu tropu betzu — %s Lìmite de agiornamentu de sa fonte de cuntenutos Fonte de cuntenutos Nou @@ -338,7 +338,7 @@ Ingendra unu nùmene ùnivocu Iscarrigamentu fallidu Atzione vietada dae su sistema - Elencu + Pone in lista recuperende post-protzessamentu in pàusa @@ -402,9 +402,9 @@ Cola a sa ventanedda Cola a s\'isfundu [Disconnotu] - Notìficas pro una versione noa de NewPipe + Notìficas pro sas versiones noas de NewPipe Notìfica de agiornamentu de s\'aplicatzione - Notìficas pro sos riproduidores in s\'isfundu e a ventanedda de NewPipe + Notìficas pro su riproduidore de NewPipe Notìficas de NewPipe Documentu Una borta ebbia @@ -454,7 +454,7 @@ Istadu predefinidu pro sos cuntenutos URL non suportadu Ammustra un\'impòsitu cando incarcas in su butone de isfundu o de sa ventanedda in sa pàgina de sos detàllios de unu vìdeu - Ammustra s\'impòsitu \"Mantene incarcadu pro pònnere in elencu\" + Ammustra s\'impòsitu \"Mantene incarcadu pro pònnere in lista\" Ammustra sos vìdeos imbenientes e simigiantes Riprodutzione automàtica Iscàrriga @@ -476,7 +476,7 @@ Imprea sos gestos pro controllare su volume de su riproduidore Gestos de controllu de su volume Sighi a riproduire (chene ripetitziones) annanghende unu vìdeu correladu a sa lista - Annanghe automaticamente unu cuntenutu a sa lista + Annanghe in automàticu su flussu imbeniente a sa lista Memòria temporànea de sos metadatos iscarrigada Boga totu sos datos de sa pàgina web in sa memòria temporànea Iscantzella sos metadatos in sa memòria temporànea @@ -545,7 +545,7 @@ Incumintza cun sa riprodutzione automaticamente — %s Lista de riprodutzione Reconnoschimentu de s\'URL fallidu. Lu cheres abèrrere cun un\'àtera aplicatzione\? - Annanghe a sa lista automaticamente + Annanghidura automàtica a sa lista Sa lista dae su riproduidore ativu at a èssere remplasada Colende dae unu riproduidore a s\'àteru dias pòdere remplasare sa lista tua Pedi una cunfirma in antis de iscantzellare una lista @@ -671,4 +671,21 @@ Chirca agiornamentos Verìfica in manera manuale pro versiones noas Controllende sos agiornamentos… + NewPipe at rilevadu un\'errore, toca pro lu sinnalare + B\'at àpidu un\'errore, pòmpia sa notìfica + Ammustra una barra de errore + Notìficas pro sinnalare errores + Notìfica de sinnalatzione de errores + Ammustra un\'optzione pro fàghere serrare de repente su riproduidore cando l\'impreas + Crea una notìfica de errore + Elementos noos de su flussu + No est istadu agatadu perunu gestore de documentos pro custa atzione. +\nPro praghere installa·nde unu o proa a inabilitare \'%s\' in sas impostatziones de iscarrigamentu. + Ammustra \"faghe serrare su riproduidore\" + No est istadu agatadu perunu gestore de documentos pro custa atzione. +\nPro praghere installa unu gestore de documentos cumpatìbile cun su \"Sistema de Atzessu a s\'Archiviatzione\". + Faghe serrare su riproduidore + Cummentu apicadu + Giai in riprodutzione in s\'isfundu + LeakCanary no est a disponimentu \ No newline at end of file diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 6bf4452a7..c680a8e47 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -684,4 +684,19 @@ Ručne skontrolovať nové verzie Kontrolujú sa aktualizácie… Nové položky informačného kanála + Pre túto akciu sa nenašiel vhodný správca súborov. +\nNainštalujte si správcu súborov alebo skúste vypnúť \'%s\' v nastaveniach sťahovania. + Zobraziť „zlyhanie prehrávača“ + LeakCanary nie je k dispozícii + Pre túto akciu sa nenašiel vhodný správca súborov. +\nNainštalujte správcu súborov kompatibilného s rozhraním Storage Access Framework. + Pripnutý komentár + Zlyhanie prehrávača + Nahlásenie chyby + Hlásenie chýb + V NewPipe sa vyskytla chyba, klepnutím ju nahláste + Vyskytla sa chyba, pozrite si upozornenie + Zobrazí možnosť zlyhania pri používaní prehrávača + Zobraziť krátke oznámenie chyby + Oznámte chybu \ No newline at end of file diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 2d77567fc..3ce497317 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -659,6 +659,5 @@ Обрађујем… Може потрајати пар тренутака Приказуј указиваче слике Не покрећи видео у малом прозору, већ пређи одмах у пун приказ заслона, уколико је обртање приказа закључано. И даље можете приступити малом приказу извођача изласком из пуног приказа - Пријави грешке програма извођача видеа Покрени пуни главни приказ извођача \ No newline at end of file diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index fc431e80a..0dbb96b9d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -79,7 +79,7 @@ Gillar Ogillar Prenumerera - Prenumererad + Prenumererar Prenumeration avslutad Kunde inte ändra prenumeration Kunde inte uppdatera prenumeration @@ -98,8 +98,8 @@ Historik och cacheminne Ångra Spela alla - NewPipe-avisering - Aviseringar för NewPipes bakgrunds- och popup-spelare + NewPipe avisering + Aviseringar för NewPipes spelare [Okänd] Kunde inte dekryptera video URL signatur Misslyckades med att spela denna ström @@ -343,7 +343,7 @@ Uppdateringar Fil raderad Avisering för appuppdatering - Aviseringar för nya NewPipe-versioner + Aviseringar för nya NewPipe versioner Extern lagring otillgänglig Fel vid läsning av sparade flikar, använder standardflikar Återställ standardvärden @@ -362,7 +362,7 @@ pausad köad efterbehandling - + Köa Åtgärden nekas av systemet Hämtningen misslyckades Generera unikt namn @@ -493,7 +493,7 @@ \nÄr du säker\? Detta kan inte ångras! Ta bort tittade videor\? Ta bort tittade - Systems standard + Systemstandard Appspråk Välj en instans \"Storage Access Framework\" möjliggör hämtningar till ett externt SD-kort @@ -673,8 +673,19 @@ Söker efter uppdateringar… Nya flödes objekt Visa \"krascha spelaren\" - Rapportera spelarfel Krascha spelaren Visar ett kraschalternativ vid användning av spelaren - Rapporterar spelarfel i detalj i stället för att visa ett kortvarigt popup-meddelande (användbart för att diagnostisera problem) + Felrapport-avisering + Avisering för att rapportera fel + NewPipe stötte på ett fel, tryck för att rapportera + Ett fel uppstod, se aviseringen + Visa en fel snackbar + Skapa en fel avisering + Ingen lämplig filhanterare hittades för denna åtgärd. +\nInstallera en filhanterare eller testa att inaktivera \'%s\' i nedladdningsinställningarna. + Ingen lämplig filhanterare hittades för denna åtgärd. +\nInstallera en filhanterare som är kompatibel med Storage Access Framework. + Spelas redan i bakgrunden + Fäst kommentar + LeakCanary är inte tillgänglig \ No newline at end of file diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 5c1e38214..c762d21d4 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -2,76 +2,76 @@ ஆரம்பிக்க பூதக்கண்ணாடியைத் தட்டு. %1$s அன்று வெளியிடப்பட்டது - நிகழ்பட ஓட்டி கண்டறியப்படவில்லை. VLC நிறுவவா\? + நிகழ்பட ஓட்டி இல்லை. VLCஐ நிறுவவா\? நிறுவு ரத்துசெய் உலாவியில் திற பகிர் பதிவிறக்கம் தேடு - அமைப்புகள் + அமைவு இதனுடன் பகிர் - நிகழ்பட ஓட்டி கண்டறியப்படவில்லை (தாங்கள் VLC-ஐ பயன்படுத்தலாம்). - திரைமேல் நிலையில் காட்டவும் - நிகழ்பட கோப்பை பதிவிறக்கு + நிகழ்பட ஓட்டி இல்லை (இதை இயக்க VLC-ஐப் பயன்படுத்தலாம்). + திரைமேல் நிலையில் காட்டு + நிகழ்பட கோப்பைப் பதிவிறக்கு \"%1$s\" என்றீர்களா\? - வேறு நிகழ்பட ஓட்டியை பயன்படுத்தவும் - வேறு ஒலி இயக்கியை பயன்படுத்தவும் - குழுசேர் - குழு சேர்க்கப்பட்டது - சேனல் குழுவிளகப்பட்டது - குழுசேர்தலை மாற்ற இயலவில்லை - குழுசேர்தலை புதுப்பிக்க இயலவில்லை + வேறு நிகழ்பட ஓட்டியைப் பயன்படுத்து + வேறு ஒலி இயக்கியைப் பயன்படுத்து + சந்தாசேர் + சந்தாசேர்ந்தாயிற்று + சேனல் சந்தாநீக்கப்பட்டது + சந்தாவை மாற்ற முடியவில்லை + சந்தாவைப் புதுப்பிக்க முடியவில்லை தகவல் காண்பி - குழுசேர்ப்புகள் - குறிக்கப்பட்ட காணொலி பட்டியல்கள் + சந்தாக்கள் + நூற்குறித்த ஒளிச்சரங்கள் புதிதாக - பின்னால் + பின்புலம் திரைமேல் - சேர் - காணொலி பதிவிறக்க கோப்புறை - பதிவிறக்கப்பட்ட காணொலிகள் இங்கு சேமிக்கப்படும் - காணொலியின் தரவிறக்கக் கோப்புறையை தேர்வு செய்க - ஒலி பதிவிறக்க கோப்புறை - தரவிறக்கப்பட்ட ஒலி கோப்புகள் இங்கே சேமிக்கப்பட்டுள்ளது - ஒலி கோப்புகளுக்கான பதிவிறக்கப் பாதையை தேர்வு செய்க - முதல் பிரிதிறன் - முதல் திரைமேல் நிலை பிரிதிறன் - மேம்பட்ட பிரிதிறன்களைக் காண்பி - Kodi கொண்டு இயக்கு - காணாத Kore செயலியை நிறுவவா\? - \"Kodi கொண்டு இயக்கு\" இடப்பை காண்பி + இதற்கு சேர் + காணொளி பதிவிறக்க அடைவு + பதிவிறங்கிய காணொளி கோப்புகள் இங்கே தேங்கும் + காணொளியின் பதிவிறக்க அடைவை தேர்வு செய் + ஒலி பதிவிறக்க அடைவு + பதிவிறங்கிய ஒலி கோப்புகள் இங்கே தேங்கும் + ஒலி கோப்புகளுக்கான பதிவிறக்கப் அடைவை தேர்வு செய் + இயல்பிருப்பு பிரிதிறன் + இயல்பிருப்பு திரைமேல் நிலை பிரிதிறன் + உயரிய பிரிதிறன்களைக் காட்டு + Kodiயுடன் இயக்கு + இல்லாத Kore செயலியை நிறுவவா\? + \"Kodiயுடன் இயக்கு\" இடப்பைக் காட்டு ஒலி - முதல் ஒலி வடிவம் - முதல் காணிலி வடிவம் - வார்ப்புரு - வெளிர் - அடர் - கருப்பு - திரைமேல் அளவையும் இடத்தையும் நினைவுகொள் + இயல்பிருப்பு ஒலி வடிவம் + இயல்பிருப்பு காணொளி வடிவம் + தோற்றம் + வெளிர்ந்த + இருண்ட + கருமை + திரைமேல் பண்புகளை நினைவுகொள் திரைமேல் நிலையின் கடைசி அளவையும் இடத்தையும் நினைவுகொள் சிறுபடத்தைக் இறக்கு பட பதுக்ககம் அழிக்கப்பட்டது மேல்நிலைத்தரவின் பதுக்ககம் அழிக்கப்பட்டது - பதுக்ககத்திலிருக்கும் வலைப்பக்கத் தரவு அழிக்கப்பட்டது + பதுக்ககப்படுத்திய வலைப்பக்கத் தரவை நீக்கு மேல்நிலைத் தரவு பதுக்ககம் அழிக்கப்பட்டது - ஆலோசனைகளை தேடு + பரிந்துரைகளைத் தேடு தேடல் வரலாறு பார்த்த வரலாறு - பார்த்த காணொலிகளை குறிப்பிடு + பார்த்த காணொளிகளை குறிப்பிடு பதிவிறக்கு இயக்கி பண்பு - ஒலி மற்றும் காணொலி - வரலாறு மற்றும் பதுக்ககம் + காணொளியும் ஒலியும் + வரலாறும் பதுக்ககமும் தோற்றம் பிண்ணணியில் ஓடுகிறது திரைமேல் நிலையில் ஓடுகிறது - நேரடி ஒளிபரப்பு + நேரலை பதிவிறக்கங்கள் பதிவிறக்கங்கள் அனைத்தும் - காணொலி பட்டியல்கள் + ஒளிச்சரங்கள் பயனர்கள் ஆம் அழி @@ -79,11 +79,11 @@ ஒரு முறை கோப்பு பார்த்த வரலாற்றை அழி - பார்த்த வரலாறு அழிக்கப்பட்டது. + பார்த்த வரலாறு அழிக்கப்பட்டது தேடல் வரலாற்றை அழி - தேடல் வரலாறு அழிக்கப்பட்டது. + தேடல் வரலாறு அழிக்கப்பட்டது கோப்பு பெயர் காலியாக இருக்க முடியாது - மன்னியுங்கள். சிறிய பிழை நிகழ்ந்தது. + மன்னிக்கவும், ஏதோ தவறாகிற்று. தகவல்: விவரங்கள்: விருப்பங்கள் @@ -93,46 +93,46 @@ காணொலி ஒலி மீண்டும் முயற்சி - சில பிரிதிறன்களில் ஒலி நீக்கப்படும் + சில பிரிதிறன்களில் ஒலியை நீக்கும் சில சாதனங்கள் மட்டுமே 2k/4k காணொளிகளை இயக்கமுடியும் - காணொளிகலை Kodi media center கொண்டு இயக்கும் இடப்பை காண்பி + காணொளிகளை Kodi media centerஉடன் இயக்கும் இடப்பைக் காட்டு வேகமான பொருத்தமற்ற தேடலை பயன்படுத்து - தேடும்போது காட்டுவதற்கான பரிந்துரைகளைத் தெரிவுசெய் + தேடும்போது காட்ட, பரிந்துரைகளைத் தெரிவுசெய் தொலைபேசி அழைப்பு போன்ற குறுக்கீடுகளுக்கு பிறகு தொடரவும் - \'அடுத்து\' மற்றும் \'ஒப்பான\' காணொளிகலை காண்பி - தேடப்பட்ட வாக்கியத்தை அமைவிடத்தில் சேமிக்கவும் - ஆதரிக்கப்படாத URL - இயல்புநிலை தகவல்களின் நாடு - பிழைதிருத்து + \'அடுத்து\' மற்றும் \'ஒப்பான\' காணொளிகளைக் காட்டு + தேடல் வாக்கியத்தை அமைவிடத்தில் தேக்கு + ஆதரிக்கப்படாத உரலி + உள்ளடக்க இயல்பிருப்பு நாடு + வழுநீக்கு உள்ளடக்கம் - வயது வரம்புக்கு உட்பட்டது - அடுத்த தாரையில் தானாக சேர் + வயது வரம்புக்குட்பட்ட உள்ளடக்கத்தைக் காட்டு + அடுத்த பாய்வில் தானாக-தாரைபடுத்து பிழை அறிக்கை சேனல்கள் செயலிழக்கச் செய்யப்பட்டுள்ளது முந்தய நிலைக்குச் செல் அனைத்தையும் இயக்கு - NewPipe அறிவிப்புகள் + NewPipe அறிவிப்பு [அறியப்படவில்லை] பின்னனிக்கு மாறு - \"சேர்ப்பதர்க்கு அழுத்தவும்\" அறிவிப்பை காண்பி + \"சாரைபடுத்த நீண்டழுத்து\" துணுக்குதவியைக் காட்டு தகவல்கலை இறக்குமதி செய் தகவல்கலை ஏற்றுமதி செய் - தற்போதைய வரலாறு, சந்தாக்கள், இயக்குபட்டியல்கள் மற்றும் (விரும்பினால்) அமைப்புகள் ஐ மீறும் - வரலாறு, சந்தாக்கள், இயக்குபட்டியல்கள் மற்றும் அமைப்புகளை ஏற்றுமதி செய் + தற்போதைய வரலாறு, சந்தாக்கள், ஒளிச்சரங்கள் மற்றும் (விரும்பினால்) அமைவை மீறும் + வரலாறு, சந்தாக்கள், ஒளிச்சரங்கள் மற்றும் அமைவை ஏற்றுமதி செய் பார்த்த வரலாறு முழுவதையும் அழி\? தேடப்பட்ட வார்த்தைகளின் வரலாற்றை அழி தேடல் வரலாறு முழுவதையும் அழி\? பிழை சிறந்த திரைத் தெளிவுத்திறன் - NewPipe பின்னனி மற்றும் பாப்அப் இயக்கிகளின் அறிவிப்புகள் + NewPipe இயக்கிக்கான அறிவிப்புகள் பாப்அப் இயக்கிக்கு மாறு - குழுவிலகு - வரிசை + சந்தாநீக்கு + சாரைபடுத்து நெட்வொர்க் பிழை செயலி நிறுத்தப்பட்டது மன்னிக்கவும். - மின்னஞ்சல் மூலம் பிழையை தெரிவிக்கவும் + மின்னஞ்சல் மூலம் இப்பிழையைப் புகாரளி என்ன நடந்தது: உங்கள் கருத்து: வெறுப்புகள் @@ -165,11 +165,11 @@ புதுப்பித்தல்கள் கோப்பு அழிக்கப்பட்டது செயலி புதுப்பித்தல் அறிவிப்பு - புதிய NewPipe பதிப்புக்கு அறிவிப்பு + புதிய NewPipe பதிப்புக்கான அறிவிப்புகள் வெளி சேமிப்பு இயலாது பின்தொடர்பவர்கள் எண்ணிக்கை இல்லை நிகழ்வுகள் - கருத்துக்களை காண்பி + கருத்துக்களைக் காண்பி கருத்துக்களை மறைக்க அணை தானாக ஓட்டு திரையிடலை தொடங்கு @@ -189,12 +189,12 @@ வரலாறு வரலாறு மேனிலை தகவல் காட்டு - வீடியோ விளக்கம் மற்றும் கூடுதல் தகவல்களை மறைக்க அணைக்கவும் + காணொளி விளக்கம் மற்றும் கூடுதல் தகவல்களை மறைக்க அணை விளக்கத்தைக் காட்டு செயலிலுள்ள இயக்கி வரிசை மாற்றப்படும் ஒரு இயக்கி விட்டு மறு இயக்கி மாறுதல் உங்கள் வரிசையை மாற்றக்கூடும் துல்லியமற்ற நாடல் குறைந்த துல்லியத்துடன் விரைவாக நாட இயக்கியை அனுமதிக்கிறது. 5, 15 அ 25 நொடிகள் நாடுவது இதனுடன் செயல்படாது - இருள் தோற்றம் + இரவு தோற்றம் சிறுபடத்திலுள்ள முதன்மை நிறத்திற்கேற்ப அறிவிப்பின் நிறத்தை Androidஐ தனிப்பயனாக்கச் செய் (இது எல்லா சாதனங்களிலும் கிடைக்காதென்பதை குறித்துக்கொள்) அறிவிப்பை வண்ணமயமாக்கு ஏதுமில்லை @@ -208,10 +208,10 @@ மூன்றாம் செயல் பொத்தான் இரண்டாம் செயல் பொத்தான் முதல் செயல் பொத்தான் - அறிவிப்பில் காட்டப்பட்டுள்ள காணொலி சிறுவுருவத்தை 16: 9 முதல் 1: 1 அம்ச விகிதம் வரை அளவிடு (சிதைவுகளை அறிமுகப்படுத்தலாம்) - சிறுவுருவத்தை 1: 1 அம்ச விகிதத்திற்கு அளவிடு + அறிவிப்பில் தெரியும் காணொளி சிறுபடத்தை 16: 9 முதல் 1: 1 அம்ச விகிதம் வரை அளவிடு (சிதைவுகளை அறிமுகப்படுத்தலாம்) + சிறுபடத்தை 1: 1 அம்ச விகிதத்திற்கு அளவிடு %s :க்கான முடிவுகளைக் காட்டுகிறது - இதன்மூலம் திற + இதனுடன் திற பற்றி நியூபைப் பற்றி நடப்பு @@ -219,12 +219,148 @@ குறைந்த தரம் மொபைல் தரவைப் பயன்படுத்தும் போது வீடியோ தரத்தைக் கட்டுப்படுத்துங்கள் வரம்பற்ற - கிடைக்கவில்லை - பார்த்ததாக குறிக்கவும் + உள்ளடக்கம் கிடைக்கவில்லை + பார்த்ததாகக் குறி சரி - அனைத்து சிறு படங்களையும் காட்ட முடியவில்லை - வலைத்தளத்தை பயன்படுத்த முடியவில்லை + எல்லா சிறுபடங்களையும் ஏற்ற முடியவில்லை + வலைத்தளத்தைப் பாகுபடுத்த முடியவில்லை தொலைதேடல் பரிந்துரைகள் - தானாக-சாரை + தானாக-தாரைபடுத்தல் கடைசியாக மீட்பொலித்த இருப்பிடத்தை மீட்டெடு + உள்ளூர் தேடல் பரிந்துரைகள் + பாய்வு உருவாக்குநர், பாய்வு உள்ளடக்கம் அ தேடல் கோரிக்கை குறித்த கூடுதல் தகவலையுடைய மேனிலைத் தகவட்பெட்டிகளை மறைக்க அணை + பியர்டியூப் நிகழ்வுகள் + புற SD அட்டைக்குப் பதிவிறக்குதல் சாத்தியமில்லை. பதிவிறக்க அடைவிடத்தை அகரமாக்கவா\? + reCAPTCHA நினைவிகளைத் துடை + இயல்பிருப்புகளை மீட்டெடுக்க வேண்டுமா\? + உறவுடைய உருப்படிகள் + reCAPTCHAஐ தீர்க்கையில் NewPipe சேமிக்கும் நினைவிகளைத் துடை + முதன்மை இயக்கியை முழுதிரையில் துவக்கு + நிகழ்வை செல்லுபடுயாக்க முடியவில்லை + எல்லா இயக்கக குறியிடங்களையும் அழிக்கும் + எல்லா இயக்கக குறியிடங்களையும் அழிக்கவா\? + இயக்கக குறியிடங்கள் அழிக்கப்பட்டன + விவரிப்பு + தொகுப்புகள் + உதவி + கலைஞர்கள் + காணொளிகள் + HTTPS உரலிகள் மட்டுமே ஆதரிக்கப்படுகின்றன + நிகழ்வு உரலியை உள்ளிடு + நிகழ்வைச் சேர் + உமக்குப் பிடித்த நிகழ்வை கண்டுபிடி இங்கு %s + உம் அபிமான பியர்டியூப் நிகழ்வுகளைத் தேர்ந்தெடு + உள்ளடக்க இயல்பிருப்பு மொழி + இயக்குதலைத் மறுதொடர் + நி + நிகழ்வு ஏற்கனவே உள்ளது + அறிவிப்பு + யூடியூபின் \"கட்டுப்பாடு பயன்முறை\"ஐ இயக்கு + பாடல்கள் + பிழைகளைப் புகாரளிக்க அறிவிப்புகள் + reCAPTCHA நினைவிகள் துடைக்கப்பட்டன + இயக்கிய பாய்வுகள் மற்றும் இயக்கக குறியிடங்களின் வரலாற்றை அழிக்கும் + இயக்கக குறியிடங்களை அழி + பதிவிறக்கச்சிறுபட்டியை அமைக்க முடியவில்லை + இயல்பிருப்புகளை மீட்டெடு + NewPipe பிழையைச் எதிர்கொண்டது, புகாரளிக்க தட்டு + புகாரளி + என்ன:\\nகோரிக்கை:\\nஉள்ளடக்க மொழி:\\nஉள்ளடக்க நாடு:\\nசெயலி மொழி:\\nசேவை:\\nGMT நேரம்:\\nசிப்பம்:\\nபதிப்பு:\\nOS பதிப்பு: + காணொளியை இயக்கு, காலவளவு: + கருத்தளிப்புகள் + + ப.ல + இயக்கியைச் சிதை + சிறுபடங்களேற்றுவதை தவிர்த்து தரவு மற்றும் நினைவகப் பயன்பாட்டைச் சேமிக்க அணை. மாற்றங்கள் நினைவகத்துள் மற்றும் வட்டின்மீதுள்ள பிடிதரவைத் துடைக்கும் + பட்டியல்களில் இயக்கக குறியட நிலைகாட்டிகளைக் காட்டு + துணையியக்கியில் காணொளிகளை துவக்காதே, ஆனால் தானாக சுழற்றல் பூட்டப்பட்டிருந்தால் நேரடியாக முழுதிரைக்குத் திரும்பு. முழுதிரையை வெளியேறி நீங்கள் இன்னும் துணையியக்கியை அணுகலாம் + உரலியை அங்கீகரக்க முடியவில்லை. மற்றொரு செயலியில் திறக்கவா\? + இக்காணொளி வயது வரம்புக்குட்டபட்டது. +\n +\nஇதைக் காண வேண்டுமெனில் அமைவில் \"%1$s\"ஐ இயக்கு. + பிழையறிக்கை அறிவிப்பு + இப்பாய்வினை இயக்க முடியவில்லை + மீட்கவியலாத இயக்கி பிழை ஏற்பட்டது + பிழை ஏற்பட்டது, அறிவிப்பைப் பார் + இயக்கி பிழையிலிருந்து மீளப்பெறுகிறது + கோப்பு இல்லை அ அதனை எழுதபடிக்கும் அனுமதி குறைகிறது + பதிவிறக்கா எப்பாய்வும் கிடைக்கவில்லை + சேமித்த தாவல்களை வாசிக்க முடியவில்லை, ஆக இயல்பிருப்புகளைப் பயன்படுத்துகிறது + GitHub இல் புகாரளி + இவ்வகை தொடுப்புகளைப் புற இயக்கிகள் ஆதரக்கா + வடிவமைக்கப்பட்ட அறிக்கையை நகலெடு + பிற செயலிகள் மீது காட்டும் அனுமதி கொடு + கோரிய உள்ளடக்கத்தை ஏற்றுகிறது + தானாக + உம் அபிமான இருண்ட தோற்றத்தைத் தேர்ந்தெடு — %s + மூடு + தகவலைப் பெறுகிறது… + + %1$s பதிவிறக்கம் அழிக்கபட்டது + %1$s பதிவிறக்கங்கள் அழிக்கபட்டன + + நகலகத்திற்கு நகலெடுக்கபட்டது + செயலியின் மொழி + பதிவிறக்க அடைவு இன்னும் அமைக்கப்படவில்லை, இப்போதைக்கு இயல்பிருப்பு பதிவிறக்க அடைவைத் தெரிவுசெய் + இப்பெயருடன் ஒரு பதிவிறக்கம் நிலுவையிலுள்ளது + பின்னர் பதிவிறக்க அடைவை அமைவில் வரையறுக்கவும் + பதிவிறக்கம் + பதிவிறக்க தட்டு + பதிவிறக்கத்தை ரத்துசெய்வதற்கு முன் செய்யவேண்டிய அதிகபட்ச முயற்சிகள் + + பதிவிறக்கம் முடிந்தது + %s பதிவிறக்கங்கள் முடிந்தன + + இப்பெயருடன் ஒரு பதிவிறக்கம் நடைபெறுகிறது + புதிய பதிப்பு கிடைத்தால் செயலி புதுப்பிப்பு பற்றி நினைப்பூட்ட ஓர் அறிவிப்பைக் காட்டு + பூட்டுத்திரைப் பின்புலத்திற்கும் அறிவிப்புகளுக்கும் சிறுபடத்தைப் பயன்படுத்து + முகப்புப்பக்க உள்ளடக்கம் + உம் அபிமான இருண்ட தோற்றத்தைக் கீழே தேர்ந்தெடுக்கலாம் + இப்பதிவிறக்கத்தை மீட்டெடுக்க முடியவில்லை + உருப்படிகளை அகற்ற அவற்றைத் தேய் + பிழை அறிவிப்பைப் படை + NewPipe புதுப்பிப்பு கிடைக்கிறது! + அருகலையில் மட்டும் + ஒருபோதுமில்லை + பட்டியல் பார்வை முறை + இப்பெயருடன் ஏற்கனவே ஒரு பதிவிறக்கிய கோப்பு உள்ளது + பதிவிறக்கிய கோப்புகளை அழி + இயங்குதள இயல்பிருப்பு + சிறுபடங்காட்டு + தானியங்கி (சாதன தோற்றம்) + அடுத்தைச் சாரைபடுத்து + அடுத்தது சாரைபடுத்தப்பட்டது + மறுபெயரிடு + பதிவுத்தட விவரங்களை ஏற்றுகிறது… + ஒளிச்சர நூற்குறிகள் இன்னுமில + நூற்குறியை நீக்கு + ஒளிச்சர சிறுபடமாக அமை + ஒளிச்சரம் படைக்கப்பட்டது + மாற்றீடு வரியுரு + ஒளிச்சரப் பக்கம் + ஒன்றிணைக்கா சந்தாக்களை மட்டும் காட்டு + பதிவுத்தட விவரங்களைக் காட்டுவதில் பிழை + அமைவையும் இறக்குமதி செய்யவா\? + பின்னணியில் இயங்கத் துவங்கு + + பதிவுத்தட விவரங்களைக் காட்டு + ஒளிச்சரத்தைத் தேர்ந்தெடு + ஒளிச்சரத்தில் சேர் + ஒளிச்சரத்தை நூற்குறி + ஒளிச்சரமிடப்பட்டது + தானாக-உண்டான (பதிவேற்றி எதுவுமில்லை) + சாரைபடுத்த நீண்டழுத்து + சாரைபடுத்து + எப்பதிவுத்தட சந்தாக்களுமில்லை + ஒலியமைவு + புதிய ஒளிச்சரம் + சந்தாக்களை இறக்குமதி செய்ய முடியவில்லை + ஒளிச்சர சிறுபடம் மாறியது. + கோப்புப்பெயர்களில் அனுமதிக்கப்பட்ட வரியுருக்கள் + இந்த ஒளிச்சரத்தை அழிக்கவா\? + சாரைபடுத்தப்பட்டது + சந்தாக்களை ஏற்றுமதி செய்ய முடியவில்லை + சந்தாக்களைத் தேர்ந்தெடு + செல்லா வரியுருக்கள் இம்மதிப்புடன் மாற்றீடுசெய்யப்படும் + நயமான \'திற\' செயல் \ No newline at end of file diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index bfdaa9609..80ac4a98e 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -78,9 +78,9 @@ వీడియో ఆడియో మళ్ళీ ప్రయత్నించు - కె + కి ఎం - బి + బిలియన్ సభ్యులు లేరు %s సభ్యుడు @@ -107,7 +107,7 @@ వివరాల కోసం నొక్కండి దయచేసి వేచి ఉండండి… క్లిప్బోర్డ్కు కాపీ చేయబడింది - దయచేసి అందుబాటులో ఉన్న డౌన్లోడ్ ఫోల్డర్ను ఎంచుకోండి + డౌన్లోడ్ ఫోల్డర్ను అమరికలలో తరువాత ఎంచుకోండి డౌన్లోడ్ ఫైల్ పేర్లలో అనుమతించిన అక్షరాలు చెల్లని అక్షరాలు ఈ విలువతో భర్తీ చేయబడతాయి @@ -129,7 +129,7 @@ ఖాళీ పేజీ ఛానెల్ పేజీ ఛానెల్ని ఎంచుకోండి - ఇంకా ఛానెల్ ఏదీ చందా చేయలేదు + ఇంకా ఏ ఛానెల్ సభ్యత్వం లేదు ట్రెండింగ్ టాప్ 50 క్రొత్తది మరియు వేడి @@ -198,9 +198,7 @@ HTTPS URLలకు మాత్రమే మద్దతు ఉంది రెండవ చర్య బటన్ నాల్గవ చర్య బటన్ - స్వల్పకాలిక టోస్ట్ సందేశాన్ని చూపించే బదులు పూర్తి వివరాలతో ప్లేయర్ లోపాలను నివేదిస్తుంది (సమస్యలను నిర్ధారించడానికి ఉపయోగపడుతుంది) ప్లేయర్ క్రాష్ చేయండి - ప్లేయర్ లోపాలను నివేదించండి మొదటి చర్య బటన్ ఐదవ చర్య బటన్ మీరు కాంపాక్ట్ నోటిఫికేషన్‌లో చూపడానికి గరిష్టంగా మూడు చర్యలను ఎంచుకోవచ్చు! @@ -232,4 +230,194 @@ ఉదాహరణ URLని నమోదు చేయండి ఉదాహరణను ధృవీకరించడం సాధ్యపడలేదు ఉదాహరణ ఇప్పటికే ఉంది + వినియోగదారులు + ఈవెంట్స్ + కొత్త NewPipe వెర్షన్ కోసం నోటిఫికేషన్‌లు + కంటెంట్‌కి వయస్సు పరిమితి (18+ వంటివి) ఉన్నందున పిల్లలకు అనుచితమైన కంటెంట్‌ను చూపండి + ఈ వీడియో వయో పరిమితి విధించబడింది. +\nవయో-నియంత్రిత వీడియోలతో కూడిన కొత్త YouTube విధానాల కారణంగా, NewPipe దాని వీడియో స్ట్రీమ్‌లలో దేనినీ యాక్సెస్ చేయదు మరియు దానిని ప్లే చేయడం సాధ్యం కాదు. + ఈ వీడియోకు వయో పరిమితి ఉంది. +\n +\nమీరు దీన్ని చూడాలనుకుంటే సెట్టింగ్‌లలో \"%1$s\"ని ఆన్ చేయండి. + ట్రాక్స్ + పాటలు + వెనుకగా మార్చు + ఫైల్ తొలగించబడింది + ఎల్లప్పుడూ + ఒక్కసారి మాత్రమే + ఫైల్ + థంబ్‌నెయిల్‌లోని ప్రధాన రంగు ప్రకారం నోటిఫికేషన్ రంగును Android అనుకూలీకరించండి (ఇది అన్ని పరికరాల్లో అందుబాటులో లేదని గమనించండి) + వీడియో హాష్ నోటిఫికేషన్ + వీడియో హ్యాషింగ్ పురోగతి కోసం నోటిఫికేషన్‌లు + ప్లేజాబితాలు + NewPipe ప్లేయర్‌ నోటిఫికేషన్‌లు + ప్రత్యక్ష (ప్రసారం) + వయో పరిమితి ఉన్న కంటెంట్‌ని చూపండి + YouTube యొక్క \"పరిమితం చేయబడిన మోడ్\"ని ఆన్ చేయండి + YouTube \"పరిమితం చేయబడిన మోడ్\"ని అందిస్తుంది, ఇది పరిణతి చెందిన కంటెంట్‌ను దాచిపెడుతుంది + ఛానెల్లు + వీడియోలు + ఆల్బమ్‌లు + కళాకారులు + నిలిపివేయబడినది + శుభ్రపరచు + ఉత్తమ స్పష్టత + యాప్‌ నవీకరణ నోటిఫికేషన్ + [తెలియదు] + ఫైల్ పేరు ఖాళీగా ఉండకూడదు + సేవ్ చేసిన ట్యాబ్‌లను చదవడం సాధ్యం కాలేదు, కాబట్టి డిఫాల్ట్ వాటిని ఉపయోగిస్తోంది + మీరు డిఫాల్ట్‌లను పునరుద్ధరించాలనుకుంటున్నారా\? + ప్లేబ్యాక్ స్థానాలు తొలగించబడ్డాయి + బాహ్య ప్లేయర్‌లు ఈ రకమైన లింక్‌లకు మద్దతు ఇవ్వవు + చెక్సమ్ + వీడియో URL సంతకాన్ని డీఓబ్‌ఫస్కేట్ చేయడం సాధ్యపడలేదు + GitHubపై నివేదించు + ఇక్కడ క్రికెట్‌లు తప్ప మరేమీ లేదు + ఎవరూ వినడం లేదు + ఎవరూ చూడటం లేదు + వ్యాఖ్యలు లేవు + బాహ్య SD కార్డ్‌కి డౌన్‌లోడ్ చేయడం సాధ్యం కాదు. డౌన్‌లోడ్ ఫోల్డర్ స్థానాన్ని రీసెట్ చేయాలా\? + సృష్టించు + సహాయం + డౌన్‌లోడ్ చేయడానికి స్ట్రీమ్‌లు ఏవీ అందుబాటులో లేవు + డిఫాల్ట్‌ విలువలకు మార్చు + క్రమాన్ని మార్చడానికి లాగండి + వీక్షణ చరిత్రను శుభ్రపరచుము + మొత్తం వీక్షణ చరిత్రను తొలగించాలా\? + ప్లేబ్యాక్ స్థానాలను తొలగించండి + బాహ్య నిల్వ అందుబాటులో లేదు + యాప్/UI విఫలమైనది + ఆడియో స్ట్రీమ్‌లు ఏవీ కనుగొనబడలేదు + అటువంటి ఫోల్డర్ లేదు + ఇతర యాప్‌లలో ప్రదర్శించడానికి అనుమతి ఇవ్వండి + ఫార్మాట్ చేసిన నివేదికను కాపీ చేయండి + వివరణ + టోగుల్ సేవ, ప్రస్తుతం ఎంపిక చేయబడింది: + + %s శ్రోత + %s శ్రోతలు + + 100+ వీడియోలు + ∞ వీడియోలు + వ్యాఖ్యలు నిలిపివేయబడ్డాయి + మీరు reCAPTCHAని పరిష్కరించినప్పుడు NewPipe స్టోర్ చేసే కుక్కీలను క్లియర్ చేయండి + అన్ని ప్లేబ్యాక్ స్థానాలను తొలగించాలా\? + వీక్షణ చరిత్ర తొలగించబడింది + శోధన చరిత్ర తొలగించబడింది + శోధన చరిత్రను శుభ్రపరచు + శోధన కీలకపదాల చరిత్రను తొలగిస్తుంది + మొత్తం శోధన చరిత్రను తొలగించాలా\? + అన్ని ప్లేబ్యాక్ స్థానాలను తొలగిస్తుంది + ప్లే చేసిన స్ట్రీమ్‌ల చరిత్ర మరియు ప్లేబ్యాక్ స్థానాలను తొలగిస్తుంది + అటువంటి ఫైల్/కంటెంట్ సోర్స్ లేదు + దయచేసి మీ క్రాష్‌ను చర్చిస్తున్న సమస్య ఇప్పటికే ఉందో లేదో తనిఖీ చేయండి. డూప్లికేట్ టిక్కెట్‌లను క్రియేట్ చేస్తున్నప్పుడు, అసలు బగ్‌ని పరిష్కరించడానికి మేము వెచ్చించే సమయాన్ని మీరు మా నుండి తీసుకుంటారు. + వ్యాఖ్యలు + సంబంధిత అంశాలు + సభ్యుల సంఖ్య అందుబాటులో లేదు + ప్లేయర్లో కోలుకోలేని లోపం సంభవించింది + వీడియో స్ట్రీమ్‌లు ఏవీ కనుగొనబడలేదు + ఫైల్ తరలించబడింది లేదా తొలగించబడింది + ఫైల్ ఉనికిలో లేదు లేదా దానిని చదవడానికి లేదా వ్రాయడానికి అనుమతి లేదు + లోపం సంభవించింది: %1$s + + %s చూస్తున్నాడు + %s చూస్తున్నారు + + లోపాలు నివేదించడానికి నోటిఫికేషన్‌లు + లోపనివేదన నోటిఫికేషన్ + చెరుపు + వాటిని తీసివేయడానికి వాటిని స్వైప్ చేయండి + ఈ ఫైల్‌ని ప్లే చేయడానికి యాప్ ఏదీ ఇన్‌స్టాల్ చేయబడలేదు + మరింత సమాచారం మరియు వార్తల కోసం NewPipe వెబ్‌సైట్‌ని సందర్శించండి. + NewPipe ప్రాజెక్ట్ మీ గోప్యతను చాలా తీవ్రంగా పరిగణిస్తుంది. కాబట్టి, మీ సమ్మతి లేకుండా యాప్ ఎలాంటి డేటాను సేకరించదు. +\nNewPipe యొక్క గోప్యతా విధానం మీరు క్రాష్ నివేదికను పంపినప్పుడు ఏ డేటా పంపబడుతుందో మరియు నిల్వ చేయబడుతుందో వివరంగా వివరిస్తుంది. + NewPipe అనేది కాపీ లెఫ్ట్ లిబ్రే సాఫ్ట్‌వేర్: మీరు దీన్ని ఇష్టానుసారంగా ఉపయోగించవచ్చు, అధ్యయనం చేయవచ్చు మరియు మెరుగుపరచవచ్చు. ప్రత్యేకంగా మీరు ఫ్రీ సాఫ్ట్‌వేర్ ఫౌండేషన్ ద్వారా ప్రచురించబడిన GNU జనరల్ పబ్లిక్ లైసెన్స్ నిబంధనల ప్రకారం, లైసెన్స్ యొక్క వెర్షన్ 3 లేదా (మీ ఐచ్ఛికం ప్రకారం) ఏదైనా తర్వాతి సంస్కరణలో దాన్ని పునఃపంపిణీ చేయవచ్చు మరియు/లేదా సవరించవచ్చు. + ప్లేజాబితా బుక్‌మార్క్‌లు ఇంకా లేవు + గోప్యతా విధానాన్ని చదవండి + అప్‌లోడర్ అవతార్ థంబ్‌నెయిల్ + విరాళం ఇవ్వండి + కియోస్క్‌ని ఎంచుకోండి + reCAPTCHA కుక్కీలను క్లియర్ చేయండి + దీనికి ఈ అనుమతి అవసరం +\nతేలియాడే పద్ధతిలో తెరవండి + © %3$s కింద %2$s ద్వారా %1$s + చివరిగా ఆడింది + చరిత్ర, సభ్యత్వాలు, ప్లేజాబితాలు మరియు అమరికలను ఎగుమతిచేయుము + మీ ప్రస్తుత చరిత్ర, సభ్యత్వాలు, ప్లేజాబితాలు మరియు (ఐచ్ఛికంగా) సెట్టింగ్‌లను భర్తీ చేస్తుంది + డాటాబేసుని దిగుమతిచేయుము + reCAPTCHA కుక్కీలను క్లియర్ చేయండి + NewPipe లోపాన్ని ఎదుర్కొంది, నివేదించడానికి నొక్కండి + లోపం సంభవించింది, నోటిఫికేషన్ చూడండి + రద్దుచేయుము + పేరు మార్చండి + హాష్‌ని లెక్కిస్తోంది + ఇంకా డౌన్‌లోడ్ ఫోల్డర్ సెట్ చేయబడలేదు, ఇప్పుడే డిఫాల్ట్ డౌన్‌లోడ్ ఫోల్డర్‌ను ఎంచుకోండి + 1 అంశం తొలగించబడింది. + పరిష్కరించబడినప్పుడు \"పూర్తయింది\" నొక్కండి + పరిష్కరించండి + పూర్తి + చాలా ప్రత్యేక పాత్రలు + ఆండ్రాయిడ్‌లో లిబ్రే తేలికపాటి స్ట్రీమింగ్. + వాలంటీర్లు తమ ఖాళీ సమయాన్ని వెచ్చిస్తూ మీకు ఉత్తమ వినియోగదారు అనుభవాన్ని అందించడం ద్వారా NewPipe అభివృద్ధి చేయబడింది. డెవలపర్‌లు ఒక కప్పు కాఫీని ఆస్వాదిస్తున్నప్పుడు న్యూపైప్‌ని మరింత మెరుగ్గా చేయడంలో సహాయపడటానికి తిరిగి ఇవ్వండి. + తిరిగి ఇవ్వండి + వెబ్సైట్ + NewPipe యొక్క గోప్యతా విధానం + ఎక్కువగా ఆడినవి + ప్రధాన పేజీలో ఏ ట్యాబ్‌లు చూపబడతాయి + కియోస్క్ పేజీ + డిఫాల్ట్ కియోస్క్ + ఎగుమతి చేయబడింది + దిగుమతి చేయబడింది + చెల్లుబాటు అయ్యే జిప్ ఫైల్ లేదు + reCAPTCHA సవాలు + reCAPTCHA సవాలు అభ్యర్థించబడింది + ప్లేజాబితాను ఎంచుకోండి + ఇప్పటికే వెనుకగా ప్లే అవుతోంది + డాటాబేసుని ఎగుమతిచేయుము + యాప్ పునఃప్రారంభించబడిన తర్వాత భాష మారుతుంది + ఛానెల్ వివరాలను చూపు + కంటెంట్‌ని తెరిచేటప్పుడు డిఫాల్ట్ చర్య — %s + ప్రాధాన్య \'తెరవండి\' చర్య + తదుపరి ఎన్క్యూ + తదుపరి క్యూలో ఉంచారు + సమాచారాన్ని పొందుతోంది… + తేలియాడే విధంగా ప్లే చేయడం ప్రారంభించండి + స్థానిక + అభ్యర్థించిన కంటెంట్ లోడ్ అవుతోంది + కొత్త ప్లేజాబితా + పేరు మార్చండి + పేరు + తేలియాడే ప్లేయర్ + ప్రతిసారీ అడుగు + ప్లేజాబితాకు చేర్చు + మూగ + హెచ్చరిక: అన్ని ఫైల్‌లను దిగుమతి చేయడం సాధ్యపడలేదు. + ఇది మీ ప్రస్తుత సెటప్‌ను భర్తీ చేస్తుంది. + మీరు అమరికలను కూడా దిగుమతి చేయాలనుకుంటున్నారా\? + వ్యాఖ్యలను లోడ్ చేయడం సాధ్యపడలేదు + ఇటీవల జోడించినవి + చాలా నచ్చింది + సమావేశాలు + ప్లే క్యూ + ఎన్క్యూ + క్యూలో ఉంచారు + వెనుకగా ప్లే చేయడం ప్రారంభించండి + డ్రాయర్ తెరవండి + డ్రాయర్‌ని మూసివేయండి + చలనచిత్ర ప్లేయర్ + తేలియాడే ప్లేయర్ + ప్రాసెస్ చేస్తోంది... కొంత సమయం పట్టవచ్చు + వినోదజాబితా సూక్ష్మచిత్రం మార్చబడింది. + శీర్షికలు లేవు + వినోదజాబితా రూపొందించబడింది + వినోదజాబితా చేయబడింది + అన్‌మ్యూట్ చేయండి + వినోదజాబితాకు సూక్ష్మచిత్రంగా మార్చుము + వినోదజాబితాను ఇష్టంశంగా మార్చుము + ఇష్టంశాన్ని తొలగించండి + ఇష్టంశాన్ని నాశనం చేయాలా\? + తగినది + పూరించండి + పరివీక్షణ + తేలియాడే విధంగా మార్చు \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 607d00e12..ed3326fd5 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -25,14 +25,14 @@ Eksik Kore uygulaması yüklensin mi\? \"Kodi ile oynat\" seçeneğini göster Kodi ortam merkezi üzerinden video oynatmak için bir seçenek göster - Varsayılan ses biçimi + Öntanımlı ses biçimi Tema Koyu Açık İndir \'Sonraki\' ve \'Benzer\' videoları göster Desteklenmeyen URL - Varsayılan içerik dili + Öntanımlı içerik dili Ses Video ve ses Görünüm @@ -79,10 +79,10 @@ Lütfen daha sonra ayarlardan uygun indirme klasörü belirleyin İndirme menüsü ayarlanamadı Açılır pencere kipinde aç - Varsayılan açılır pencere çözünürlüğü + Öntanımlı açılır pencere çözünürlüğü Yüksek çözünürlükleri göster Yalnızca bazı aygıtlar 2K/4K videoları oynatabilir - Varsayılan video biçimi + Öntanımlı video biçimi Siyah Açılır pencere kipinde oynatılıyor Tümü @@ -104,7 +104,7 @@ Açılan pencerenin son boyutunu ve konumunu hatırla Bazı çözünürlüklerde sesi kaldırır Arama önerileri - Ararken gösterilecek önerileri seçin + Ararken gösterilecek önerileri seç En iyi çözünürlük NewPipe Hakkında Üçüncü Taraf Lisansları @@ -140,8 +140,8 @@ Davranış Geçmiş ve önbellek Geri al - NewPipe Bildirimi - NewPipe arka plan ve açılır pencere oynatıcıları için bildirimler + NewPipe bildirimi + NewPipe oynatıcısı için bildirimler Sonuç yok Burada cırcır böceklerinden başka bir şey yok Abone yok @@ -151,14 +151,14 @@ Görüntüleme yok - %s görüntüleme - %s görüntüleme + %s görüntülenme + %s görüntülenme Video yok Geçmiş Geçmiş Bu ögeyi arama geçmişinden silmek istiyor musunuz\? - \"Eklemek için basılı tutun\" ipucunu göster + \"Basılı tutarak kuyruğa ekle\" ipucunu göster Video \"Ayrıntılar:\" sayfasında arka plan veya açılır pencere düğmesine basıldığında ipucu göster Tümünü Oynat [Bilinmeyen] @@ -178,7 +178,7 @@ Kaldır Ayrıntılar Ses Ayarları - Kuyruğa eklemek için basılı tutun + Basılı tutarak kuyruğa ekle Arka planda oynatmayı başlat Açılır pencerede oynatmayı başlat Bağışta bulunun @@ -186,7 +186,7 @@ Bağışta bulunun Web sitesi Daha çok bilgi ve haber için NewPipe web sitesini ziyaret edin. - Varsayılan içerik ülkesi + Öntanımlı içerik ülkesi Arka Plana Geç Açılır Pencereye Geç Ana Görünüme Geç @@ -245,7 +245,7 @@ Parçanın dışında veya atımdan sonraki etkinlik yaşam döngüsündeki teslim edilemeyen Rx beklentilerinin bildirimini zorla Hızlı isabetsiz konumlama kullan İsabetsiz konumlama, oynatıcının daha düşük hassasiyetle daha hızlı konumlamasını sağlar. 5, 15 veya 25 saniyeye konumlama bununla birlikte çalışmamaktadır - Sonraki akışı kuyruğa kendiliğinden ekle + Sonraki akışı kendiliğinden kuyruğa ekle İlgili bir akış ekleyerek sonlanacak (yinelemeyen) oynatma sırasını sürdür Dosya Böylesi klasör yok @@ -269,8 +269,8 @@ \n3. \"Tüm veriler dahil\"e ve sonrasında \"Hiçbirini seçme\"ye tıklayın, ardından yalnızca \"abonelikler\"i seçin ve \"Tamam\"a tıklayın \n4. \"Sonraki adım\"a ve ardından \"Dışa aktar\"a tıklayın \n5. Göründüğünde \"İndir\" düğmesini tıklayın -\n6. Aşağıdaki DOSYAYI İÇE AKTAR düğmesini tıklayın ve indirilen zip dosyasını seçin -\n7. [Zip içe aktarma işlemi başarısız olursa] .csv dosyasını çıkarın (genellikle \"YouTube and YouTube Music/subscriptions/subscriptions.csv\"), aşağıdaki DOSYAYI İÇE AKTAR düğmesini tıklayın ve çıkarılan csv dosyasını seçin +\n6. Aşağıdaki DOSYAYI İÇE AKTAR düğmesini tıklayın ve indirilen .zip dosyasını seçin +\n7. [.zip içe aktarma işlemi başarısız olursa] .csv dosyasını çıkarın (genellikle \"YouTube and YouTube Music/subscriptions/subscriptions.csv\"), aşağıdaki DOSYAYI İÇE AKTAR düğmesini tıklayın ve çıkarılan csv dosyasını seçin URL\'yi veya ID\'nizi yazarak SoundCloud profilini içe aktarın: \n \n1. Web tarayıcısında \"masaüstü kipi\" etkinleştirin (site, mobil aygıtlar için uygun değildir) @@ -283,7 +283,7 @@ \nSürdürmek istiyor musunuz\? Küçük resimleri yükle Küçük resimlerin yüklenmesini önleyerek veri ve hafıza kullanımından tasarruf etmek için kapatın. Değişiklikler, hem bellek içi hem de diskteki resim önbelleğini temizler - Resim önbelleği silindi + Resim önbelleği temizlendi Önbelleğe alınmış üstverileri temizle Önbelleğe alınmış tüm web sayfası verilerini kaldır Üstveri önbelleği temizlendi @@ -293,7 +293,7 @@ Ayır (bozulmaya neden olabilir) İndirilebilecek akış yok Yeğlenen \'aç\' eylemi - İçerik açılırken varsayılan eylem — %s + İçerik açılırken öntanımlı eylem — %s Alt yazılar Oynatıcı alt yazı metin ölçeğini ve arka plan biçimini değiştirin. Etkili olması için uygulamayı yeniden başlatma gerektirir Bu dosyayı oynatmak için herhangi bir uygulama yüklü değil @@ -338,13 +338,13 @@ Oynatıcının parlaklığını denetlemek için hareketleri kullan Güncellemeler Dosya silindi - Uygulama Güncelleme Bildirimi - Yeni NewPipe sürümü için bildirimler + Uygulama güncelleme bildirimi + Yeni NewPipe sürümleri için bildirimler Dış depolama kullanılamıyor Dış SD karta indirilemiyor. İndirme klasörü konumu sıfırlansın mı\? - Kayıtlı sekmeler okunamadı, bu nedenle varsayılanlar kullanılıyor - Varsayılanları geri yükle - Varsayılanları geri yüklemek istiyor musunuz\? + Kayıtlı sekmeler okunamadı, bu nedenle öntanımlılar kullanılıyor + Öntanımlıları geri yükle + Öntanımlıları geri yüklemek istiyor musunuz\? Abone sayısı mevcut değil Ana sayfada hangi sekmeler gösterilir Güncellemeler @@ -422,11 +422,11 @@ %s video %s video - Varsayılan Kiosk + Öntanımlı Kiosk Kimse izlemiyor - %s izliyor - %s izliyor + %s izleyen + %s izleyen Kimse dinlemiyor @@ -454,7 +454,7 @@ İndirilen dosyaları sil Diğer uygulamaların üzerinde görüntüleme izni ver Uygulama dili - Sistem varsayılanı + Sistem öntanımlısı Çözüldüğünde \"Bitti\" düğmesine basın Bitti Videolar @@ -546,7 +546,7 @@ Oynatmayı kendiliğinden başlat — %s Oynatma kuyruğu URL tanınamadı. Başka bir uygulamayla açılsın mı\? - Kendiliğinden kuyruğa ekle + Kendiliğinden kuyrukla Etkin oynatıcının kuyruğu değiştirilecek Bir oynatıcıdan diğerine geçmek kuyruğunuzu değiştirebilir Bir kuyruğu temizlemeden önce onay iste @@ -577,7 +577,7 @@ Bildirimi renklendir Hash hesaplanıyor Video dosya özetleme süreci için bildirimler - Video Dosya Özeti Bildirimi + Video dosya özeti bildirimi En Son Akış oluşturucu, akış içeriği veya bir arama isteği hakkında ek bilgiler içeren meta bilgi kutularını gizlemek için kapatın Üst bilgiyi göster @@ -672,4 +672,20 @@ Yeni sürümleri el ile denetleyin Güncellemeler denetleniyor… Yeni akış ögeleri + Hata raporlama bildirimi + NewPipe hatayla karşılaştı, bildirmek için dokun + Hata oluştu, bildirime bakın + \"Oynatıcıyı çöktür\"ü göster + Hata bildirimi oluştur + Hata balonu göster + Bu eyleme uygun dosya yönetici yok. +\nLütfen dosya yönetici kurun veya indirme ayarlarında \'%s\' devre dışı bırakın. + Bu eyleme uygun dosya yönetici bulunamadı. +\nLütfen Depolama Erişimi Çerçevesi uyumlu dosya yönetici kurun. + Hata raporları için bildirimler + Oynatıcı kullanırken çöktürme seçeneği gösterir + Oynatıcıyı çöktür + Zaten arka planda oynuyor + Sabitlenmiş yorum + LeakCanary mevcut değil \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e6baece4d..ab87b7462 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -11,8 +11,8 @@ Налаштування Ви мали на увазі: «%1$s»\? Поширити через - Викор. зовнішній відеопрогравач - Викор. зовнішній аудіопрогравач + Зовнішній відеопрогравач + Зовнішній аудіопрогравач Тека для завантаження відео Виберіть теку для завантаження відеофайлів Виберіть теку для завантаження аудіофайлів @@ -35,7 +35,7 @@ Переважна мова вмісту Відео та звук Зовнішній вигляд - Відтворення на тлі + Відтворення у фоновому режимі Вміст Вміст із віковими обмеженнями Наживо @@ -85,7 +85,7 @@ Вкажіть теку для завантажень пізніше в налаштуваннях Програвач потокового відео не знайдений (ви можете встановити VLC для програвання). Відкрити у віконному режимі - Прибирає звук при певних роздільних здатностях + Прибирає звук за певної роздільності Підписатися Ви підписалися Ви відписалися від каналу @@ -93,7 +93,7 @@ Не вдалося оновити підписку Підписки Новинки - На тлі + У фоновому режимі У вікні Типова роздільність вікна Не всі пристрої можуть відтворювати 2K/4K-відео @@ -127,14 +127,14 @@ Завжди Лише раз Сповіщення NewPipe - Сповіщення для програвачів NewPipe на тлі й у вікні + Сповіщення для програвачів NewPipe [Невідомо] Перейти у фоновий режим Перемкнути у вікно Перемкнути на головну Імпортувати базу даних Експортувати базу даних - Поточні підписки, списки відтворення, історія і (за бажанням) налаштування буде замінено + Поточні підписки, добірки, історія і (за бажанням) налаштування буде замінено Експорт підписок, списків відтворення, історії та налаштувань Не вдалося відтворити цей потік Відновлення після помилки програвача @@ -255,8 +255,8 @@ Моніторинг втрат пам\'яті може призвести до нереагування застосунку під час запису дампу Звітувати про помилки життєвого циклу застосунку Примусове звітування про неможливість доставлення Rx-винятків, які відбуваються за межами фрагменту або діяльності життєвого циклу після усунення - Викор. швидкий неточний пошук - Неточний пошук дозволяє програвачеві рухатися позиціями швидше, проте з меншою точністю + Швидкий неточний пошук + Швидше, але не точне перемотування. Перехід на 5, 15 або 25 секунд не працюватиме Автододавання в чергу наступної трансляції Продовжити при завершені (не повторюваної) черги, додавши повʼязаний запис Файл @@ -318,7 +318,7 @@ Видалити всю історію пошуку\? Історію пошуку видалено Видалено 1 елемент. - NewPipe є вільним копілефт застосунком: ви можете використовувати, поширювати та вдосконалювати його на власний розсуд. Зокрема, ви можете розповсюджувати та/або змінювати її за умов дотримання вимог GNU General Public License 3-ї версії або (на ваш вибір) будь-якої пізнішої версії, опублікованої Free Software Foundation. + NewPipe є вільним (копілефт) застосунком: ви можете використовувати, поширювати та вдосконалювати його на власний розсуд. Зокрема ви можете розповсюджувати та/або змінювати його за умов дотримання вимог GNU General Public License 3-ї версії або (на ваш вибір) будь-якої пізнішої версії, опублікованої Free Software Foundation. Імпортувати разом з налаштуваннями\? Політика приватності NewPipe Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому застосунок не збирає ніяких даних без вашої згоди. @@ -333,13 +333,13 @@ Пропускати тихі проміжки Крок Скинути - Зменшити при перемиканні програм - Дія при перемиканні до інших програм від головного відеопрогравача — %s + Зменшити при перемиканні застосунку + Дія при перемиканні до інших застосунків з основного відеопрогравача — %s Нічого - Зменшити до програвача на тлі + Зменшити до програвача у фоновому режимі Зменшити до програвача у вікні Канали - Списки відтворення + Добірки Доріжки Користувачі Режим перегляду списком @@ -355,7 +355,7 @@ Події Файл видалено Сповіщення про оновлення застосунку - Сповіщення про нову версію NewPipe + Сповіщення про нові версії NewPipe Зовнішнє сховище недоступне Відновити типові налаштування Відновити типові значення\? @@ -370,7 +370,7 @@ призупинено додано в чергу пост-обробка - Черга + Додати у чергу Дію заборонено системою Помилка завантаження Згенерувати унікальну назву @@ -379,8 +379,8 @@ Завантажений файл з такою назвою вже існує Файл з такою назвою вже завантажується Показати помилку - Цільову теку не можливо створити - Файл не можливо створити + Неможливо створити цільову теку + Неможливо створити файл Захищене з\'єднання не встановлено Сервер не знайдено Не вдалося з\'єднатися із сервером @@ -396,10 +396,10 @@ Помилка зчитування збережених вкладок. Використовуються типові вкладки Вкладки, показані на головній сторінці Показувати сповіщення з пропозицією оновити застосунок за наявності нової версії - Корисно під час перемикання на мобільні дані, хоча деякі завантаження не можливо призупинити + Корисно під час перемикання на мобільні дані, хоча деякі завантаження неможливо призупинити Показувати коментарі Вимкніть, щоб сховати коментарі - Самовідтворення + Автовідтворення Коментарі відсутні Не вдалося завантажити коментарі Закрити @@ -596,15 +596,15 @@ Рекомендовані Збій застосунку Початковий час оприлюднення - Додано в чергу - Додати в чергу + Додано у чергу + Додати у чергу Розв\'язати Обчислення гешу Очистити збережені під час вирішення reCAPTCHA реп\'яшки (cookies) Реп\'яшки (cookies) reCAPTCHA видалено Очистити реп\'яшки (cookies) reCAPTCHA Сповіщення про перебіг відеогешування - Сповіщення про відеогешування + Сповіщення про відеохешування Це відео має вікові обмеження. \nЗгідно з новою політикою YouTube щодо відео з віковими обмеженнями NewPipe не може мати доступ до жодного потоку цього відео і, таким чином, не має можливості відтворити його. Показувати вміст, який, можливо, не підходить для дітей, бо має вікове обмеження (наприклад, 18+) @@ -642,7 +642,7 @@ Дозволити виділяти текст в описі Тепер можна виділяти текст в описі. Зауважте, що сторінка може мигати і посилання можуть не працювати в режимі виділення. %s подає таку причину: - Не можливо завантажити стрічку для «%s». + Неможливо завантажити стрічку для «%s». Помилка завантаження стрічки Обліковий запис автора припинено. \nNewPipe не зможе завантажити цей канал у майбутньому. @@ -688,9 +688,20 @@ Перевірка нових версій вручну Перевірка оновлень… Нові записи стрічки - Показати «збій програвача» + Показати «Збій програвача» Показує параметр збою під час використання програвача - Повідомити про помилки програвача Збій програвача - Повне повідомлення про помилки програвача замість, короткого звіту (корисно для діагностики проблем) + Сповіщення про звіт про помилку + Сповіщення для звітів про помилки + Сталася помилка NewPipe, торкніться, щоб звітувати + Сталася помилка. Перегляньте сповіщення + Для цієї дії не знайдено відповідного файлового менеджера. +\nУстановіть файловий менеджер або спробуйте вимкнути «%s» у налаштуваннях завантажень. + Для цієї дії не знайдено відповідного файлового менеджера. +\nУстановіть файловий менеджер, сумісний зі Storage Access Framework. + Показати панель помилок + Створити сповіщення про помилку + Уже відтворюється у фоновому режимі + Закріплений коментар + LeakCanary недоступний \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 8efea3ca4..766bc5141 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -147,7 +147,7 @@ Theo dõi các video đã xem Tiếp tục phát Tiếp tục phát sau khi bị gián đoạn (ví dụ: cuộc gọi điện thoại) - Hiển thị mẹo \"Giữ để nối thêm\" + Hiển thị mẹo \"Giữ để thêm vào hàng đợi\" Hiển thị mẹo khi nhấn nút phát trong nền hoặc phát trên popup trong trang \"Chi tiết\" Quốc gia nội dung mặc định Phát @@ -163,7 +163,7 @@ Chỉ một lần Tập tin Thông báo NewPipe - Thông báo cho trình phát popup và trình phát nền + Thông báo cho trình phát của NewPipe [Không xác định] Chuyển sang nền Chuyển sang Popup @@ -655,4 +655,21 @@ Đã cho mục tiếp vào hàng đợi Cho mục tiếp vào hàng đợi Đang thực hiện...Có thể mất một lúc + Thông báo báo cáo lỗi + Thông báo để báo cáo lỗi + NewPipe đã gặp lỗi, nhấn để báo cáo + Có lỗi xảy ra, hãy xem thông báo + Hiện \"làm trình phát dừng\" + Hiện tùy chọn dừng đột ngột khi sử dụng trình phát + Hiện thanh báo lỗi + Tạo thông báo lỗi + Kiểm tra cập nhật + Kiểm tra phiên bản mới theo cách thủ công + Đang kiểm tra cập nhật… + Mục feed mới + Làm trình phát dừng + Không tìm thấy ứng dụng quản lý tệp phù hợp nào để thực hiện hành động. +\nVui lòng cài đặt ứng dụng quản lý tệp tương thích với Storage Access Framework. + Không tìm thấy ứng dụng quản lý tệp phù hợp nào để thực hiện hành động. +\nVui lòng cài đặt ứng dụng quản lý tệp hoặc tắt \'%s\' trong cài đặt tải xuống. \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 3f1437d53..bba936943 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -2,61 +2,61 @@ 安裝 取消 - 於 %1$s 發佈 + 喺 %1$s 發佈 分享 下載 搜尋 設定 - 你是不是在寻找:%1$s? - 使用外置影片播放器 - 使用外置聲音播放器 + 您係咪想搵「%1$s」? + 用外面嘅影片播放器 + 用外面嘅音樂播放器 影片下載路徑 - 已下載的影片將保存在此處 - 選擇視頻的下載文件夾 + 下載咗嘅影片檔案會收埋喺度 + 揀選影片檔案嘅下載資料夾 預設解像度 - 使用 Kodi 播放 - 您要安裝遺失的 Kore 程式嗎? - 顯示「使用 Kodi 播放」的選項 - 顯示以 Kodi 媒體中心播放影片的選項 + 用 Kodi 嚟播放 + 要唔要裝缺少嘅 Kore app? + 顯示「用 Kodi 嚟播放」嘅選項 + 顯示以 Kodi 媒體中心播放影片嘅選項 聲音 預設聲音檔案格式 主題 黑暗 明亮 下載 - 顯示下一部及相關的影片 - 不支援此網址 - 預設內容語言 - 影片及聲音 + 顯示「接續落」同「咁上下」嘅影片 + 唔支援呢個網址 + 內容預設語言 + 影音 外觀 背景播放 網絡問題 - 影片預覽縮圖 - 上載者的個人頭像縮圖 + 播放影片,片長: + 上載者嘅頭像縮圖 讚好 討厭 - 找不到任何串流播放器,要安裝 VLC 嗎? - 使用瀏覽器開啟 + 搵唔到串流播放器。要唔要裝 VLC? + 喺瀏覽器開啟 分享影片 - 聲音下載路徑 - 已下載的聲音將保存在此處 - 選擇聲音檔案的下載路徑 - 點擊 \"搜索\" 以開始使用 + 音樂下載資料夾 + 下載咗嘅音樂檔案會收埋喺度 + 揀選音樂檔案嘅下載資料夾 + 撳放大鏡開始。 內容 - 顯示已設年齡限制的影片 + 顯示年齡設限嘅內容 直播 問題 - 無法載入全部縮圖 - 無法為影片地址的簽署解碼。 - 無法讀取網站。 - 無法設定下載清單 - 抱歉,這是不應該發生的。 - 透過電郵彙報問題 - 抱歉,程式出現了問題。 + 載入唔晒全部縮圖 + 影片 URL 簽章解唔到碼 + 解析唔到網站 + 設定唔到下載功能表 + 啫係嗱,世事講唔埋嘅,真係唔好意思。 + 以電郵報告今次問題 + 出咗啲問題,唔好意思。 報告 - 資料: + 資訊: 事發經過: - 您的意見(請以英文輸入): + 您嘅意見 (請以英文輸入): 詳情: 影片 聲音 @@ -64,72 +64,72 @@ 下載 下載 問題報告 - 未能提供內容。 + 內容未能提供 開始 暫停 刪除 - 校驗和 + 校驗碼 檔案名稱 線程 錯誤 - NewPipe 正在下載 - 按一下以查看詳情 - 請稍候… - 已複製至剪貼板 - 請選擇下載資料夾。 + NewPipe 下載緊 + 撳一下睇詳情 + 請等等… + 複製咗去剪貼簿 + 請之後喺設定度揀定一個下載資料夾 在畫中畫模式開啟 預設畫中畫解像度 顯示更高解像度 - 只有某些裝置能夠播放 2K 或 4K 影片 + 得某啲機至播到 2K/4K 影片 預設影片檔案格式 純黑 以畫中畫模式播放 所有 - 應用程式或介面出現問題 - 事件:\\n請求:\\n內容語言:\\n服務:\\nGMT 時間:\\nPackage:\\n版本:\\n作業系統版本: - K - M + App/界面閃退 + 經過:\\n請求:\\n內容語言:\\n內容國家:\\nApp 語言:\\n服務:\\nGMT 時間:\\n封裝:\\n版本:\\nOS 版本: + + 百萬 reCAPTCHA 挑戰 畫中畫模式需要此權限 需完成 reCAPTCHA 挑戰 - 移除某些解像度的影片的聲音 + 某啲解像度可能會冇聲 背景播放 畫中畫播放 記住畫中畫大小及位置 記住最近設定的畫中畫大小及位置 搜尋建議 - 進行搜尋時顯示建議 + 揀選搜尋嘅時候顯示邊啲建議 不適用 清除 最佳解像度 - B + 十億 關於 NewPipe 第三方版權特許 © %1$s %2$s,根據 %3$s 特許版權所有 關於 特許 - 在 Android 上運作自由輕便的 Youtube 前端。 + 喺 Android 上盡享自由輕便串流。 檢視我們的 GitHub - NewPipe 的特許 + NewPipe 嘅授權協議 無論您僅想分享您對 NewPipe 的一些構思,還是願意設計和翻譯程式介面,甚至想幫我們整理或重新編寫原始碼,我們都無任歡迎。貢獻更多,應用程式便會變得更好! 檢閱特許 貢獻 - 清除觀看歷史 - 找不到串流播放器 (您可以安裝並使用VLC播放)。 + 抹走睇過嘅紀錄 + 搵唔到串流播放器 (您可以裝 VLC 嚟播)。 下載串流檔案 訂閱 - 已訂閱 + 訂閱咗 取消訂閱 已成功取消訂閱頻道 - 無法變更訂閱 - 無法更新訂閱 + 轉唔到訂閱 + 更新唔到訂閱 顯示資訊 訂閱項目 已收藏播放清單 - 使用粗略快查 - 添加到 + 用粗略快轉 + 加入去 選擇標籤 第一粒動作掣 第二粒動作掣 @@ -155,7 +155,7 @@ 關閉去隱藏影片描述同附加資訊 剔低睇過 開啟方式 - 搵呢挺嘢:%s + 搵緊呢挺嘢:%s 第五粒動作掣 撳一下下面每粒掣去更改各個通知動作。用右手邊嘅格仔剔選最多三個,擺喺精簡通知度顯示 精簡通知最多淨係擺到三個動作! @@ -187,7 +187,7 @@ 檔案 NewPipe 通知 App 更新通知 - NewPipe 新版本通知 + NewPipe 有新版本嘅通知 抹走 reCAPTCHA Cookie 頻道 影片 @@ -223,7 +223,7 @@ 畀權限去喺其他 app 上面顯示 去 GitHub 度報告 留言 - 相關嘅嘢 + 咁上下嘅嘢 描述 播放唔到呢個串流 發生無法復原嘅播放器錯誤 @@ -243,4 +243,183 @@ 複製執咗格式嘅報告 乜都搵唔到 + 名稱 + 接受 + 關閉 + 下載失敗 + + 完成咗 %s 個下載 + + 產生獨一無二嘅名稱 + 匯入檔案 + 匯出緊… + 先前嘅匯出 + 惟請注意:呢項操作可能相當消耗網絡數據。 +\n +\n您係咪要繼續? + 幾時都唔使 + 自動 + 低畫質 (較細) + 唔顯示 + 撳一下去下載 + 無觀看次數 + + %s 個人聽緊 + + 明白 + 排緊隊 + 後期處理緊 + 暫停咗 + 無限制 + 自動產生 (搵唔到上載者) + 代替字元 + 個 ZIP 檔無效 + 最多讚 + 匯出咗 + + %s 次觀看 + + 無人睇緊 + + %s 部影片 + + 無留言 + 計算緊雜湊 + 檔名准用啲咩字元 + 無效嘅字元會用呢一楷嚟代替 + 去 NewPipe 網站睇更多資訊同最新消息。 + 閱讀私隱政策 + 匯入咗 + 攞緊資訊… + 填滿 + 縮放 + 匯入唔到訂閱 + 節奏 + 播放速度控掣 + 系統預設噉樣 + 檢查有冇更新 + 個 App 用咩文 + 睇咗嗰啲剷咗佢 + 係咪要剷走睇咗嘅影片? + 網站 + NewPipe 嘅私隱政策 + 改過個名 + 音高 + 完成咗 + 無影片 + 影片播放器 + 僅限用 Wi-Fi 嘅時候 + 高畫質 (較大) + 無訂閱者 + + %s 位訂閱者 + + 訂閱者人數不詳 + + %s 個人睇緊 + + 無人聽緊 + 100+ 部影片 + ∞ 部影片 + 未開放留言 + 建立 + 未設定下載資料夾,請立即揀選預設嘅下載資料夾 + 刪除咗 1 個項目。 + 執執佢 + 未裝 app 嚟播放呢個檔案 + 搞掂 + NewPipe 專案非常認真看待您嘅私隱。因此,呢個 app 未徵得您嘅同意係唔會收集任何資料。 +\nNewPipe 嘅私隱政策,詳加解釋當您傳送彈 app 報告嘅時候有咩資料會傳送同保存。 + 最近播放 + 最常播放 + 頭版內容 + 頭版要擺放邊啲分頁 + 滑走啲項目去剷走佢 + 空白頁 + 重新開過個 app 之後就會轉新語言 + 時興 + 頭位 50 + 最新同大熱 + 警告:未能匯入晒全部檔案。 + 噉樣做會冚咗您而家嘅設定個囉噃。 + 您想唔想匯入埋啲設定? + 載入唔到留言 + 最近新加 + 剷咗佢 + 詳細資料 + 唔使靜音 + 背景播放器 + 浮面播放器 + 幾時都問 + 載入緊請求嘅內容 + 字幕 + 無字幕 + 自動產生 + 貼合 + 匯入 + 由邊處匯入: + 匯出去邊處: + 匯入緊… + 無聲嘅時候快轉 + 重設 + 為符合歐盟嘅《通用數據保障條例》(GDPR) 規範,我哋謹請您注意 NewPipe 嘅私隱政策。請仔細閱讀。 +\n您必須接受先可以傳送錯誤報告畀我哋。 + 拒絕 + 用流動數據嘅時候限制解像度 + 更新 + 出咗新版本嘅時候,顯示通知提示升級個 app + 手動檢查下有冇新版本 + NewPipe 出咗更新! + 仲等緊 + 恢復緊 + 動作被系統拒絕咗 + 檢查緊有冇更新… + 覆寫 + + %d 個鐘 + + + %d 日 + + 有咩新嘢 + + %d 秒 + + + %d 分鐘 + + 改過個名 + 字母同數目字 + 大部份特殊字元 + 下載 + 課金 + 匯出唔到訂閱 + 修改播放器字幕啲字嘅大細同背景款式。要重新開過個 app 先會生效 + 執好就撳一下「搞掂」 + 靜音 + 處理緊… 可能要等等 + 使播放器崩潰 + 自動輪候 + 係咪要全部剷走晒睇過嘅紀錄? + 顯示元資訊 + 關閉去隱藏元資訊窗口,收起有關串流創作者、串流內容或者搜尋請求嘅額外資訊 + 顯示「撳住就輪候」提示 + 揀選啱您心水嘅 PeerTube 站 + 紀錄與快取 + NewPipe 播放器嘅通知 + 抹除元資料快取 + 抹除咗元資料快取 + 自動輪候接續落串流 + 排隊播要完 (又未設定循環播放) 嘅時候就追加一條啱上下嘅串流 + PeerTube 站 + 去 %s 發掘啱您心水嘅站 + 播放清單 + 問題報告通知 + 報告問題嘅通知 + 剷走播放過嘅串流同播放到邊個位嘅紀錄 + 剷走咗睇過嘅紀錄 + NewPipe 遇到問題,撳一下去報告 + 發生問題,詳見通知 + 拖拉執排位 + 轉換服務,而家揀選咗嘅係: \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a6ac7f81c..3f211ce80 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -124,7 +124,7 @@ 歷史記錄與快取 復原 NewPipe 通知 - NewPipe 背景播放與懸浮模式播放器的通知 + NewPipe 播放器的通知 沒有結果 這裡空空如也 無訂閱者 @@ -358,7 +358,7 @@ 已暫停 已排入佇列 正在後處理 - 佇列 + 排入佇列 動作被系統拒絕 下載失敗 生成獨特的名稱 @@ -660,9 +660,20 @@ 手動檢查新版本 正在檢查更新…… 新 feed 項目 - 回報播放器錯誤 播放器當機 - 完整回報播放器錯誤,而非顯示短暫的 toast 訊息(用於診斷問題) 顯示「播放器當機」 使用播放器時顯示當機選項 + 錯誤回報通知 + 回報錯誤的通知 + 顯示錯誤 SnackBar + 建立錯誤通知 + 找不到適合此動作的檔案管理程式。 +\n請安裝相容於儲存空間存取框架的檔案管理員。 + 找不到適合此動作的檔案管理程式。 +\n請安裝檔案管理程式或在下載設定嘗試停用「%s」。 + NewPipe 遇到錯誤,點擊以回報 + 發生錯誤,請檢視通知 + 釘選留言 + 已經在背景播放 + LeakCanary 無法使用 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3f2e2adf7..3c9a3f705 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -361,7 +361,7 @@ The NewPipe project takes your privacy very seriously. Therefore, the app does not collect any data without your consent.\nNewPipe\'s privacy policy explains in detail what data is sent and stored when you send a crash report. Read privacy policy NewPipe\'s License - NewPipe is copyleft libre software: You can use, study share and improve it at will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + NewPipe is copyleft libre software: You can use, study, share, and improve it at will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Read license History @@ -449,6 +449,7 @@ Captions Modify player caption text scale and background styles. Requires app restart to take effect + LeakCanary is not available Memory leak monitoring may cause the app to become unresponsive when heap dumping Show memory leaks Report out-of-lifecycle errors @@ -459,7 +460,7 @@ Disable media tunneling if you experience a black screen or stuttering on video playback Show image indicators Show Picasso colored ribbons on top of images indicating their source: red for network, blue for disk and green for memory - Show \"crash the player\" + Show \"Crash the player\" Shows a crash option when using the player Run check for new streams Crash the app @@ -475,7 +476,15 @@ Previous export Could not import subscriptions Could not export subscriptions - Import YouTube subscriptions from Google takeout:\n\n1. Go to this URL: %1$s\n2. Log in when asked\n3. Click on \"All data included\", then on \"Deselect all\", then select only \"subscriptions\" and click \"OK\"\n4. Click on \"Next step\" and then on \"Create export\"\n5. Click on the \"Download\" button after it appears\n6. Click on IMPORT FILE below and select the downloaded zip file\n7. [If the zip import fails] Extract the .csv file (usually under \"YouTube and YouTube Music/subscriptions/subscriptions.csv\"), click on IMPORT FILE below and select the extracted csv file + Import YouTube subscriptions from Google takeout: +\n +\n1. Go to this URL: %1$s +\n2. Log in when asked +\n3. Click on \"All data included\", then on \"Deselect all\", then select only \"subscriptions\" and click \"OK\" +\n4. Click on \"Next step\" and then on \"Create export\" +\n5. Click on the \"Download\" button after it appears +\n6. Click on IMPORT FILE below and select the downloaded .zip file +\n7. [If the .zip import fails] Extract the .csv file (usually under \"YouTube and YouTube Music/subscriptions/subscriptions.csv\"), click on IMPORT FILE below and select the extracted csv file Import a SoundCloud profile by typing either the URL or your ID:\n\n1. Enable \"desktop mode\" in a web-browser (the site is not available for mobile devices)\n2. Go to this URL: %1$s\n3. Log in when asked\n4. Copy the profile URL you were redirected to. yourID, soundcloud.com/yourid Keep in mind this operation can be network expensive.\n\nDo you want to continue? @@ -544,7 +553,7 @@ queued post-processing recovering - Queue + Enqueue Action denied by the system Checking for updates… diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml index 23b782ffd..e754b3a30 100644 --- a/app/src/main/res/xml/content_settings.xml +++ b/app/src/main/res/xml/content_settings.xml @@ -128,13 +128,6 @@ app:singleLineTitle="false" app:iconSpaceReserved="false" /> - - + + diff --git a/app/src/debug/res/xml/main_settings.xml b/app/src/main/res/xml/main_settings.xml similarity index 100% rename from app/src/debug/res/xml/main_settings.xml rename to app/src/main/res/xml/main_settings.xml diff --git a/app/src/main/res/xml/update_settings.xml b/app/src/main/res/xml/update_settings.xml index ef121ec4e..a44555edf 100644 --- a/app/src/main/res/xml/update_settings.xml +++ b/app/src/main/res/xml/update_settings.xml @@ -1,7 +1,6 @@ - - - - - - - - - - - - - - - - diff --git a/README.es.md b/doc/README.es.md similarity index 75% rename from README.es.md rename to doc/README.es.md index bb579d6cb..58e9742bf 100644 --- a/README.es.md +++ b/doc/README.es.md @@ -1,4 +1,4 @@ -

+

NewPipe

Una interfaz de streaming ligera y libre para Android.

@@ -18,7 +18,7 @@

Sitio WebBlogPreguntas FrecuentesPrensa


-*Lea esto en otros idiomas: [English](README.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* +*Lea esto en otros idiomas: [English](../README.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* AVISO: ESTA ES UNA VERSIÓN BETA, POR LO TANTO, PUEDE ENCONTRAR BUGS. SI ENCUENTRA UNO ABRA UN ISSUE A TRAVÉS DE NUESTRO REPOSITORIO DE GITHUB. @@ -26,18 +26,18 @@ ## Capturas de Pantalla -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) ## Descripción @@ -105,7 +105,7 @@ Además, si quiere cambiar el método de instalación por alguna razón (por eje Si tiene ideas, traducciones, cambios de diseño, limpieza de código o cambios grandes de código, su ayuda es siempre bienvenida. ¡Cuanto más hagamos, NewPipe será mucho mejor! -Si quiere involucrarse, fíjese en nuestras [notas de contribución](.github/CONTRIBUTING.md). +Si quiere involucrarse, fíjese en nuestras [notas de contribución](../.github/CONTRIBUTING.md). Estado de la Traducción @@ -117,17 +117,17 @@ Si te gusta NewPipe, estaremos felices con una donación. Puede enviar bitcoin o - + - - + + - +
BitcoinCódigo QR del BitcoinCódigo QR del Bitcoin 16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisita NewPipe en liberapay.comDona vía LiberapayVisita NewPipe en liberapay.comDona vía Liberapay
BountysourceVisita NewPipe en bountysource.comVisita NewPipe en bountysource.com Revisa cuántas recompensas puedes obtener.
diff --git a/README.ja.md b/doc/README.ja.md similarity index 76% rename from README.ja.md rename to doc/README.ja.md index e40ad4332..37a7add44 100644 --- a/README.ja.md +++ b/doc/README.ja.md @@ -1,149 +1,149 @@ -

-

NewPipe

-

自由で軽量な Android 向けストリーミングフロントエンド

- -

Get it on F-Droid

- -

- - - - - - -

-
-

スクリーンショット説明機能インストールと更新貢献寄付ライセンス

-

ウェブサイトブログFAQニュース

-
- -*他の言語で読む: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md)。* - -注意: これはベータ版のため、バグが発生する可能性があります。もしバグが発生した場合、GitHub のリポジトリで Issue を開いてください。 - -NewPipe 及びいずれのフォークを Google Play ストアに公開すると、Google の取引条件の違反になります。 - - -## スクリーンショット - -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) - - -## 説明 - -自由なコピーレフトソフトウェアの NewPipe は一切の Google フレームワークライブラリ及び、YouTube API を使用しません。ウェブサイトは必要な情報のためだけに読み込まれるため、このアプリは Google のサービスがインストールされていない端末で使用ができます。また、NewPipe の使用に YouTube アカウントは必要となりません。 - - -### 機能 - -* 動画の検索 -* 動画の基本情報の表示 -* YouTube の動画の視聴 -* YouTube の動画のバックグラウンド再生 -* ポップアップモード (フローティングプレイヤー) -* 動画を視聴するストリーミングプレイヤーの選択 -* 動画のダウンロード -* 音声のみのダウンロード -* Kodi での動画再生 -* 次の動画/関連動画の表示 -* 特定の言語の YouTube の検索 -* 年齢制限のあるコンテンツの視聴/ブロック -* チャンネルの基本情報の表示 -* チャンネルの検索 -* チャンネルからの動画の視聴 -* Orbot/Tor 対応 (直接的なものは未実装) -* 1080p/2K/4K 対応 -* 履歴の表示 -* チャンネルの登録 -* 履歴の検索 -* 再生リストの検索/視聴 -* 再生リストをキューに追加して再生 -* 動画のキューへの追加 -* 端末内の再生リスト -* 字幕 -* ライブ配信の対応 -* コメントの表示 - -### 対応しているサービス - -NewPipe は複数のサービスに対応しています。[ドキュメント](https://teamnewpipe.github.io/documentation/)は、どのようにしてアプリと NewPipe Extractor にサービスを追加できるかについて詳細な情報を提供しています。もし、新しいサービスを追加するならば、是非私たちに連絡をお願いします。現在対応しているサービスは: - -* YouTube -* SoundCloud \[ベータ\] -* media.ccc.de \[ベータ\] -* PeerTube インスタンス \[ベータ\] -* Bandcamp \[ベータ\] - - - - - -## インストールと更新 -以下の方法のいずれかに従うことによって NewPipe をインストールできます。 -1. カスタムリポジトリを F-Droid に追加してリリースが公開され次第インストールする。この方法の説明はこちら: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/ -2. リリースが公開され次第[GitHub のリリース](https://github.com/TeamNewPipe/NewPipe/releases)から APK をダウンロードしてインストールする。 -3. F-Droid から更新する。これは更新を手にする上で最も遅い方法です。F-Droid が変更を検知して、APK をビルドし、署名、そしてユーザーに更新を届ける必要があるためです。 -4. 自分でデバッグ APK をビルドする。これは新しい機能を使用する上で最も早い方法ですが、他と比べてとても複雑なので、他の方法の使用を推奨します。 - -私たちはほとんどのユーザーに方法1を推奨します。方法1と2でインストールされた APK は互換性がありますが、方法3でインストールされたものにはありません。これは方法1と2では、同じ署名鍵 (私たちが使用するもの)が使用されますが、方法3では異なった署名鍵 (F-Droidが使用するもの)が使用されるためです。方法4を使ったデバッグ APK のビルドは根本的に署名鍵の問題を除きます。署名鍵はユーザーが騙されて悪意のある更新がアプリにインストールされないことを助けるためにあります。 - -もし、何かしらの理由によりソースを切り替えたい場合 (例: NewPipe のコア機能が壊れてしまったが F-Droid はまだ更新をしていない) は、この手順を推奨します。 -1. 履歴や登録チャンネル、再生リストを保つために 設定 > コンテンツ > データベースをエクスポート からデータをバックアップ -2. NewPipe をアンインストール -3. 新しいソースから APK をダウンロードしてインストール -4. 設定 > コンテンツ > データベースをインポート からステップ1で作ったデータベースをインポート - - -## 貢献 -翻訳、デザインの変更、コードの整理、大規模なコードの変更などの助けはいつでも歓迎します。 -より良いものを一緒に作り上げましょう! - -もし貢献をしたい場合、[貢献ノート](.github/CONTRIBUTING.md)をご確認ください。 - - -翻訳状態 - - - -## 寄付 -もし、NewPipe を気に入っていただけたら、寄付をしていただけると嬉しいです。Bitcoin または Bountysource, Liberapay から寄付をすることができます。NewPipe への寄付については、[ウェブサイト](https://newpipe.net/donate)からお願いします。 - - - - - - - - - - - - - - - - - -
BitcoinBitcoin QR コード16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
Liberapayliberapay.com で NewPipe を訪れるLiberapay で寄付
Bountysourcebountysource.com で NewPipe を訪れるあなたがどれほどの寄付を得られるのか確認しましょう。
- -## プライバシーポリシー -NewPipe プロジェクトはメディアウェブサービスを使用する上でのプライベートで匿名の体験を提供することを目的としています。 -そのため、アプリはあなたの同意なしで一切のデータを収集しません。NewPipe のプライバシーポリシーはあなたがクラッシュレポートまたは、私たちのブログでコメントを送信した場合にどのようなデータが送信され、保存されるのかを詳細に説明しています。そのドキュメントは[こちら](https://newpipe.net/legal/privacy/)から見つけることができます。 - - -## ライセンス -[![GNU GPLv3 のロゴ](https://www.gnu.org/graphics/gplv3-127x51.png)](https://www.gnu.org/licenses/gpl-3.0.en.html) - -NewPipe はフリーソフトウェアなので、あなたはあなたの望むように使用、習得、共有、改善を行えます。 -具体的には、フリーソフトウェア財団により公開された [GNU General Public License](https://www.gnu.org/licenses/gpl.html) のバージョン3のライセンスもしくは、(あなたの選択で) いずれかの後継バージョンの規約の元で配布または改変を行うことができます。 +

+

NewPipe

+

自由で軽量な Android 向けストリーミングフロントエンド

+ +

Get it on F-Droid

+ +

+ + + + + + +

+
+

スクリーンショット説明機能インストールと更新貢献寄付ライセンス

+

ウェブサイトブログFAQニュース

+
+ +*他の言語で読む: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md)。* + +注意: これはベータ版のため、バグが発生する可能性があります。もしバグが発生した場合、GitHub のリポジトリで Issue を開いてください。 + +NewPipe 及びいずれのフォークを Google Play ストアに公開すると、Google の取引条件の違反になります。 + + +## スクリーンショット + +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) + + +## 説明 + +自由なコピーレフトソフトウェアの NewPipe は一切の Google フレームワークライブラリ及び、YouTube API を使用しません。ウェブサイトは必要な情報のためだけに読み込まれるため、このアプリは Google のサービスがインストールされていない端末で使用ができます。また、NewPipe の使用に YouTube アカウントは必要となりません。 + + +### 機能 + +* 動画の検索 +* 動画の基本情報の表示 +* YouTube の動画の視聴 +* YouTube の動画のバックグラウンド再生 +* ポップアップモード (フローティングプレイヤー) +* 動画を視聴するストリーミングプレイヤーの選択 +* 動画のダウンロード +* 音声のみのダウンロード +* Kodi での動画再生 +* 次の動画/関連動画の表示 +* 特定の言語の YouTube の検索 +* 年齢制限のあるコンテンツの視聴/ブロック +* チャンネルの基本情報の表示 +* チャンネルの検索 +* チャンネルからの動画の視聴 +* Orbot/Tor 対応 (直接的なものは未実装) +* 1080p/2K/4K 対応 +* 履歴の表示 +* チャンネルの登録 +* 履歴の検索 +* 再生リストの検索/視聴 +* 再生リストをキューに追加して再生 +* 動画のキューへの追加 +* 端末内の再生リスト +* 字幕 +* ライブ配信の対応 +* コメントの表示 + +### 対応しているサービス + +NewPipe は複数のサービスに対応しています。[ドキュメント](https://teamnewpipe.github.io/documentation/)は、どのようにしてアプリと NewPipe Extractor にサービスを追加できるかについて詳細な情報を提供しています。もし、新しいサービスを追加するならば、是非私たちに連絡をお願いします。現在対応しているサービスは: + +* YouTube +* SoundCloud \[ベータ\] +* media.ccc.de \[ベータ\] +* PeerTube インスタンス \[ベータ\] +* Bandcamp \[ベータ\] + + + + + +## インストールと更新 +以下の方法のいずれかに従うことによって NewPipe をインストールできます。 +1. カスタムリポジトリを F-Droid に追加してリリースが公開され次第インストールする。この方法の説明はこちら: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/ +2. リリースが公開され次第[GitHub のリリース](https://github.com/TeamNewPipe/NewPipe/releases)から APK をダウンロードしてインストールする。 +3. F-Droid から更新する。これは更新を手にする上で最も遅い方法です。F-Droid が変更を検知して、APK をビルドし、署名、そしてユーザーに更新を届ける必要があるためです。 +4. 自分でデバッグ APK をビルドする。これは新しい機能を使用する上で最も早い方法ですが、他と比べてとても複雑なので、他の方法の使用を推奨します。 + +私たちはほとんどのユーザーに方法1を推奨します。方法1と2でインストールされた APK は互換性がありますが、方法3でインストールされたものにはありません。これは方法1と2では、同じ署名鍵 (私たちが使用するもの)が使用されますが、方法3では異なった署名鍵 (F-Droidが使用するもの)が使用されるためです。方法4を使ったデバッグ APK のビルドは根本的に署名鍵の問題を除きます。署名鍵はユーザーが騙されて悪意のある更新がアプリにインストールされないことを助けるためにあります。 + +もし、何かしらの理由によりソースを切り替えたい場合 (例: NewPipe のコア機能が壊れてしまったが F-Droid はまだ更新をしていない) は、この手順を推奨します。 +1. 履歴や登録チャンネル、再生リストを保つために 設定 > コンテンツ > データベースをエクスポート からデータをバックアップ +2. NewPipe をアンインストール +3. 新しいソースから APK をダウンロードしてインストール +4. 設定 > コンテンツ > データベースをインポート からステップ1で作ったデータベースをインポート + + +## 貢献 +翻訳、デザインの変更、コードの整理、大規模なコードの変更などの助けはいつでも歓迎します。 +より良いものを一緒に作り上げましょう! + +もし貢献をしたい場合、[貢献ノート](../.github/CONTRIBUTING.md)をご確認ください。 + + +翻訳状態 + + + +## 寄付 +もし、NewPipe を気に入っていただけたら、寄付をしていただけると嬉しいです。Bitcoin または Bountysource, Liberapay から寄付をすることができます。NewPipe への寄付については、[ウェブサイト](https://newpipe.net/donate)からお願いします。 + + + + + + + + + + + + + + + + + +
BitcoinBitcoin QR コード16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
Liberapayliberapay.com で NewPipe を訪れるLiberapay で寄付
Bountysourcebountysource.com で NewPipe を訪れるあなたがどれほどの寄付を得られるのか確認しましょう。
+ +## プライバシーポリシー +NewPipe プロジェクトはメディアウェブサービスを使用する上でのプライベートで匿名の体験を提供することを目的としています。 +そのため、アプリはあなたの同意なしで一切のデータを収集しません。NewPipe のプライバシーポリシーはあなたがクラッシュレポートまたは、私たちのブログでコメントを送信した場合にどのようなデータが送信され、保存されるのかを詳細に説明しています。そのドキュメントは[こちら](https://newpipe.net/legal/privacy/)から見つけることができます。 + + +## ライセンス +[![GNU GPLv3 のロゴ](https://www.gnu.org/graphics/gplv3-127x51.png)](https://www.gnu.org/licenses/gpl-3.0.en.html) + +NewPipe はフリーソフトウェアなので、あなたはあなたの望むように使用、習得、共有、改善を行えます。 +具体的には、フリーソフトウェア財団により公開された [GNU General Public License](https://www.gnu.org/licenses/gpl.html) のバージョン3のライセンスもしくは、(あなたの選択で) いずれかの後継バージョンの規約の元で配布または改変を行うことができます。 diff --git a/README.ko.md b/doc/README.ko.md similarity index 75% rename from README.ko.md rename to doc/README.ko.md index 4daf526a3..08e340388 100644 --- a/README.ko.md +++ b/doc/README.ko.md @@ -1,4 +1,4 @@ -

+

NewPipe

A libre lightweight streaming frontend for Android.

@@ -17,7 +17,7 @@

WebsiteBlogFAQPress


-*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* +*Read this in other languages: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* 경고: 이 버전은 베타 버전이므로, 버그가 발생할 수도 있습니다. 만약 버그가 발생하였다면, 우리의 GITHUB 저장소에서 ISSUE를 열람하여 주십시오. @@ -25,18 +25,18 @@ ## Screenshots -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) ## Description @@ -106,7 +106,7 @@ NewPipe 코드의 변경이 있을 때(기능 추가 또는 버그 수정으로 당신이 아이디어, 번역, 디자인 변경, 코드 정리, 또는 정말 큰 코드 수정에 대한 의견이 있다면, 도움은 항상 환영합니다. 더 많이 수행될수록 더 많이 발전할 수 있습니다! -만약 참여하고 싶다면, 우리의 [컨트리뷰션 공지](.github/CONTRIBUTING.md)를 참고하십시오. +만약 참여하고 싶다면, 우리의 [컨트리뷰션 공지](../.github/CONTRIBUTING.md)를 참고하십시오. Translation status @@ -118,17 +118,17 @@ NewPipe 코드의 변경이 있을 때(기능 추가 또는 버그 수정으로 - + - - + + - +
BitcoinBitcoin QR codeBitcoin QR code 16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisit NewPipe at liberapay.comDonate via LiberapayVisit NewPipe at liberapay.comDonate via Liberapay
BountysourceVisit NewPipe at bountysource.comVisit NewPipe at bountysource.com Check out how many bounties you can earn.
diff --git a/doc/README.pl.md b/doc/README.pl.md new file mode 100644 index 000000000..91c06fbd6 --- /dev/null +++ b/doc/README.pl.md @@ -0,0 +1,144 @@ +

+

NewPipe

+

Wolny, lekki streamingowy frontend na Androida.

+ +

Pobierz z F-Droid

+ +

+ + + + + + +

+
+

ScreenshotyOpisFunkcjeInstalacja i aktualizacjeWkładWesprzyjLicencja

+

StronaBlogFAQPress

+
+ +*Przeczytaj w innych językach: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* + +UWAGA: TO JEST WERSJA BETA, WIĘC MOŻESZ NAPOTKAĆ BŁĘDY. JEŚLI TAK SIĘ STANIE, OTWÓRZ NOWY "ISSUE" NA GITHUBIE. + +PUBLIKOWANIE NEWPIPE LUB JAKIEGOKOLWIEK JEGO FORKU W SKLEPIE PLAY NARUSZA ICH WARUNKI UŻYTKOWANIA. + +## Screenshoty + +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) + +## Opis + +NewPipe nie używa żadnych bibliotek Google ani API YouTube. Strony są jedynie analizowane aby zdobyć wymagane informacje, dzięki czemu ta aplikacja może zostać zainstalowana na urządzeniach bez Usług Google Play. Konto YouTube nie jest wymagane aby używać NewPipe, które jest wolnym oprogramowaniem copyleft. + +### Funkcje + +* Wyszukiwanie filmów +* Brak wymogu konta Google/YouTube +* Wyświetlanie generalnych informacji o filmach +* Oglądanie filmów na YouTube +* Słuchanie filmów na YouTube +* Tryb okienkowy (Pływające okno) +* Wybieranie odtwarzacza przez który możemy oglądać film +* Pobieranie filmów +* Pobieranie audio +* Otwieranie filmów w Kodi +* Pokazanie następnych/podobnych filmów +* Wyszukiwanie w YouTube w konkretnym języku +* Oglądanie/Blokowanie materiałów zablokowanych wiekowo. +* Wyświetlanie generalnych informacji o kanałach +* Wyszukiwanie kanałów +* Oglądanie filmów ze strony kanału +* Wsparcie dla Orbot/Tor (Jeszcze nie bezpośrednio) +* Wsparcie dla 1080p/2K/4K +* Historia oglądania +* Subskrybowanie kanałów +* Historia wyszukiwania +* Wyszukiwanie/Oglądanie playlist +* Oglądanie playlist w kolejce +* Dodawnaie filmów do kolejki +* Lokalne playlisty +* Napisy +* Wsparcie dla livestream'ów +* Wyświetlanie komentarzy + +### Wspierane usługi + +NewPipe wspiera wiele usług. Nasza [dokumentacja](https://teamnewpipe.github.io/documentation/) dostarcza więcej informacji o tym jak nowe usługi mogą zostać dodane do aplikacji i extractora. Proszę skontaktuj się z nami jeśli masz zamiar dodać jakąś nową usługę. Obecnie wspierane usługi to: + +* YouTube +* SoundCloud \[beta\] +* media.ccc.de \[beta\] +* Instancje PeerTube \[beta\] +* Bandcamp \[beta\] + +## Instalacja i aktualizacje +Możesz zainstalować NewPipe za pomocą jednej z tych metod: + 1. Dodaj nasze repozytorium do F-Droid i z tamtąd pobierz NewPipe. Instrukcje znajdują się tutaj: https://newpipe.net/FAQ/tutorials/install-add-fdroid-repo/ + 2. Pobierz APK z [Wydań na GitHubie](https://github.com/TeamNewPipe/NewPipe/releases) i zainstaluj go. + 3. Zaktualizuj poprzez F-Droid. Jest to najwolniejsza metoda aktualizacji, ponieważ F-Droid musi rozpoznać zmiany, zbudować APK, podpisać go i dopiero wypuścić aktualizację do użytkowników. + 4. Zbuduj debug APK samemu. Jest to najszybszy sposób na zdobycie najnowszych funkcji, ale jest to o wiele, wiele bardziej skomplikowane, dlatego rekomendujemy używania jednej z powyższych metod. + +Dla większości użytkowników rekomendujemy metodę 1. Pliki APK zainstalowane za pomocą metod 1 lub 2 są ze sobą kompatybilne, lecz nie są kompatybilne z tymi zainstalowanymi metodą 3. Dzieje się tak ponieważ ten sam (nasz) klucz jest używany do podpisania APK z metod 1 i 2, ale APK z metody 3 podpisany jest innym kluczem (F-Droida). Budowanie debug APK z metody 4 w ogóle nie uwzględnia klucza. Klucze podpisu zapewniają, że użytkownik omylnie nie zainstaluje złośliwej aktualizacji żadnej aplikacji. + +W międzyczasie, jeśli z jakiegoś powodu chcesz zmienić źródło (np. rdzenna funkcjonalność NewPipe psuje się a F-Droid nie ma jeszcze najnowszej aktualizacji), rekomendujemy użyć następującej procedury: +1. Zrób kopię danych wchodząc w Ustawienia > Zawartość > Eksportuj dane, dzięki czemu zachowasz swoją historię, subskrypcje i playlisty +2. Odinstaluj NewPipe +3. Pobierz APK z nowego źródła i zainstaluj go +4. Przywróć dane z kroku 1 wchodząc w Ustawienia > Zawartość > Importuj dane + +## Wkład +Jeśli masz jakieś pomysły, tłumaczenia, zmiany designu, oczyszczony kod, lub wielkie zmiany w kodzie, pomoc jest zawsze mile widziana. +Im więcej jest zrobione, tym lepsza staje się aplikacja! + +Jeśli chcesz pomóc, przeczytaj [Notkę o wkładzie](../.github/CONTRIBUTING.md). + + +Translation status + + +## Wesprzyj +Jeśli podoba Ci się NewPipe, bardzo ucieszylibyśmy się z dotacji. Możesz wysłać bitcoin lub przekazać darowiznę przez Bountysource lub Liberapay. Po więcej informacji o darowiznach dla NewPipe, proszę zobacz naszą [stronę](https://newpipe.net/donate). + + + + + + + + + + + + + + + + + +
BitcoinBitcoin QR code16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisit NewPipe at liberapay.comDonate via Liberapay
BountysourceVisit NewPipe at bountysource.comCheck out how many bounties you can earn.
+ +## Polityka prywatności + +Założeniem projektu NewPipe jest dostarczanie prywatnego, anonimowego dostępu do zasobów i usług internetowych. +Dlatego też, ta aplikacja nie zbiera żadnych informacji bez twojej zgody. Polityka prywatności NewPipe dokładnie wyjaśnia jakie dane są wysyłane i przechowywane, gdy wyślesz raport awarii lub komentarz na naszym blogu. Możesz znaleźć ten dokument [tutaj](https://newpipe.net/legal/privacy/). + +## Licencja +[![GNU GPLv3 Image](https://www.gnu.org/graphics/gplv3-127x51.png)](https://www.gnu.org/licenses/gpl-3.0.en.html) + +NewPipe to wolne oprogramowanie: Możesz używać, uczyć się, udostępniać i ulepszać je do woli. +Możesz udostępniać i/lub modyfikować je na zasadach licencji +[GNU General Public License](https://www.gnu.org/licenses/gpl.html) +publikowaną przez Free Software Foundation, wersję 3 Licencji, lub +(twój wybór) każdną nowszą wersję. diff --git a/README.pt_BR.md b/doc/README.pt_BR.md similarity index 74% rename from README.pt_BR.md rename to doc/README.pt_BR.md index 36e44b103..4afe51996 100644 --- a/README.pt_BR.md +++ b/doc/README.pt_BR.md @@ -1,4 +1,4 @@ -

+

NewPipe

Uma interface de streaming leve e gratuita para Android.

@@ -18,7 +18,7 @@

SiteBlogFAQPress


-*Read this in other languages: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* +*Read this in other languages: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* AVISO: ESTA É UMA VERSÃO BETA, PORTANTO, VOCÊ PODE ENCONTRAR BUGS. ENCONTROU ALGUM, ABRA UM ISSUE ATRAVÉS DO NOSSO REPOSITÓRIO GITHUB. @@ -26,18 +26,18 @@ ## Screenshots -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) ## Descrição @@ -102,7 +102,7 @@ Enquanto isso, se você quiser trocar de fontes por algum motivo (por exemplo, a Se você tem ideias, traduções, alterações de design, limpeza de códigos ou mudanças reais de código, a ajuda é sempre bem-vinda. Quanto mais for feito, melhor fica! -Se você quiser se envolver, verifique nossa [notas de contribuição](.github/CONTRIBUTING.md). +Se você quiser se envolver, verifique nossa [notas de contribuição](../.github/CONTRIBUTING.md). Translation status @@ -114,17 +114,17 @@ Se você gosta de NewPipe, ficaríamos felizes com uma doação. Você pode envi - + - - + + - +
BitcoinBitcoin QR codeBitcoin QR code 16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisit NewPipe at liberapay.comDonate via LiberapayVisit NewPipe at liberapay.comDonate via Liberapay
BountysourceVisit NewPipe at bountysource.comVisit NewPipe at bountysource.com Check out how many bounties you can earn.
diff --git a/README.ro.md b/doc/README.ro.md similarity index 75% rename from README.ro.md rename to doc/README.ro.md index b52339871..32ab8126e 100644 --- a/README.ro.md +++ b/doc/README.ro.md @@ -1,4 +1,4 @@ -

+

NewPipe

Un front-end de streaming „uşor” liber, pentru Android.

@@ -17,7 +17,7 @@

WebsiteBlogFAQPresă


-*Citiţi în alte limbi: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* +*Citiţi în alte limbi: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* Atenţionare: ACEASTA ESTE O VERSIUNE BETA, AŞA CĂ S-AR PUTE SĂ ÎNTÂLNIŢI ERORI. DACĂ SE ÎNTÂMPLĂ ACEST LUCRU, DESCHIDEŢI UN ISSUE PRIN REPSITORY-UL NOSTRU GITHUB. @@ -25,18 +25,18 @@ ## Capturi de ecran -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) ## Descriere @@ -105,7 +105,7 @@ Recomandăm metoda 1 pentru majoritatea utilizatorilor. APK-urile din metodele 1 Dacă aveţi idei, traduceri, schimbări de design, curaţarea codului, sau schimbări majore ale codului, ajutorul este întotdeauna binevenit. Cu cât se face mai mult cu atât mai bună devine aplicaţia! -Dacă doriţi să vă implicaţi, accesaţi [notele noastre de contribuţie](.github/CONTRIBUTING.md). +Dacă doriţi să vă implicaţi, accesaţi [notele noastre de contribuţie](../.github/CONTRIBUTING.md). Translation status @@ -117,17 +117,17 @@ Dacă vă place NewPipe, am fi bucuroşi să primim o donaţie. Puteţi să ne t - + - - + + - +
BitcoinBitcoin QR codeBitcoin QR code 16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisit NewPipe at liberapay.comDonate via LiberapayVisit NewPipe at liberapay.comDonate via Liberapay
BountysourceVisit NewPipe at bountysource.comVisit NewPipe at bountysource.com Check out how many bounties you can earn.
diff --git a/README.so.md b/doc/README.so.md similarity index 75% rename from README.so.md rename to doc/README.so.md index 1195b9488..2b8ab020a 100644 --- a/README.so.md +++ b/doc/README.so.md @@ -1,4 +1,4 @@ -

+

NewPipe

App bilaash ah oo fudud looguna talagalay in Android-ka wax loogu daawado.

@@ -17,7 +17,7 @@

Website-kaMaqaaladaSu'aalaha Aalaa La-iswaydiiyoWarbaahinta


-*Ku akhri luuqad kale: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* +*Ku akhri luuqad kale: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* DIGNIIN: MIDKAN, NOOCA APP-KA EE HADDA WALI TIJAABO AYUU KU JIRAA, SIDAA DARTEED CILLADO AYAAD LA KULMI KARTAA. HADAAD LA KULANTO, KA FUR ARIN SHARAXAYA QAYBTANADA ARRIMAHA EE GITHUB-KA. @@ -25,18 +25,18 @@ ## Sawir-shaashadeed -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) ## Faahfaahin @@ -100,7 +100,7 @@ Waxaa kale, hadaad rabto inaad tixraacayada kala badasho sabab jirta awgeed (tus ## Kusoo Kordhin Hadaad hayso fikrado; rogid, qaab badal, nadiifin koodh, ama koodhka ood si wayn wax oga badashaa—caawinta marwalba waa lasoo dhawaynayaa. Waxbadan hadii la qabto waxbadan ayaa fiicnaan! -Hadaad jeceshahay inaad qayb ka noqoto, fiiri [ogaysiisyada kusoo kordhinta](.github/CONTRIBUTING.md). +Hadaad jeceshahay inaad qayb ka noqoto, fiiri [ogaysiisyada kusoo kordhinta](../.github/CONTRIBUTING.md). Heerka turjimaada @@ -112,17 +112,17 @@ Hadaad jeceshahay NewPipe waan ku faraxsanaan lahayn deeq. Waxaad soo diri karta - + - - + + - +
BitcoinBitcoin QR codeBitcoin QR code 16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisit NewPipe at liberapay.comDonate via LiberapayVisit NewPipe at liberapay.comDonate via Liberapay
BountysourceVisit NewPipe at bountysource.comVisit NewPipe at bountysource.com Check out how many bounties you can earn.
diff --git a/README.tr.md b/doc/README.tr.md similarity index 74% rename from README.tr.md rename to doc/README.tr.md index a0d231cf8..6b3169bdb 100644 --- a/README.tr.md +++ b/doc/README.tr.md @@ -1,4 +1,4 @@ -

+

NewPipe

Android için hafif ve özgür bir akış arayüzü.

@@ -17,7 +17,7 @@

Web sitesiBlogSSSBasın


-*Bu sayfayı diğer dillerde okuyun: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* +*Bu sayfayı diğer dillerde okuyun: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md).* UYARI: BU SÜRÜM BETA SÜRÜMÜDÜR, BU NEDENLE HATALARLA KARŞILAŞABİLİRSİNİZ. HATA BULURSANIZ BU GITHUB DEPOSUNDA BUNU BİLDİRİN. @@ -25,18 +25,18 @@ ## Ekran görüntüleri -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) ## Açıklama @@ -104,7 +104,7 @@ Bu arada, herhangi bir nedenle kaynakları değiştirmek istiyorsanız (örneği Fikirleriniz, çevirileriniz, tasarım değişiklikleriniz, kod temizlemeniz veya ağır kod değişiklikleriniz olsun, yardımınıza her zaman açığız. Yapılan her değişiklikle NewPipe daha da iyi bir konuma geliyor! -Eğer yer almak istiyorsanız, [katkı sağlayanlar için hazırladığımız notları](.github/CONTRIBUTING.md) kontrol edin. +Eğer yer almak istiyorsanız, [katkı sağlayanlar için hazırladığımız notları](../.github/CONTRIBUTING.md) kontrol edin. Çeviri istatistikleri @@ -116,17 +116,17 @@ NewPipe'ı beğendiyseniz, yapacağınız bağışlar bizi motive eder. Bitcoin - + - - + + - +
BitcoinBitcoin QR koduBitcoin QR kodu 16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
Liberapayliberapay.com üzerinde NewPipe'ı ziyaret edinLiberapay aracılığıyla bağış yapınliberapay.com üzerinde NewPipe'ı ziyaret edinLiberapay aracılığıyla bağış yapın
Bountysourcebountysource.com üzerinde NewPipe'ı ziyaret edinbountysource.com üzerinde NewPipe'ı ziyaret edin Ne kadar ödül kazanabileceğinizi kontrol edin.
diff --git a/README.zh_TW.md b/doc/README.zh_TW.md similarity index 70% rename from README.zh_TW.md rename to doc/README.zh_TW.md index e4d9d375d..6be8d0fc4 100644 --- a/README.zh_TW.md +++ b/doc/README.zh_TW.md @@ -1,4 +1,4 @@ -

+

NewPipe

輕巧的 Android 串流前端

@@ -17,7 +17,7 @@

網站部落格FAQ媒體


-*其他語言: [English](README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md)* +*其他語言: [English](../README.md), [Español](README.es.md), [한국어](README.ko.md), [Soomaali](README.so.md), [Português Brasil](README.pt_BR.md), [Polski](README.pl.md), [日本語](README.ja.md), [Română](README.ro.md), [Türkçe](README.tr.md), [正體中文](README.zh_TW.md)* 警告:這是測試版本,可能會發生錯誤。如果遇到錯誤,請在我們的 GITHUB REPO 開 ISSUE 回報。 @@ -26,18 +26,18 @@ ## 截圖 -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) -[](fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) -[](fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_01.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_02.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_03.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_04.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_05.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_06.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_07.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_08.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_09.png) +[](../fastlane/metadata/android/en-US/images/phoneScreenshots/shot_10.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_11.png) +[](../fastlane/metadata/android/en-US/images/tenInchScreenshots/shot_12.png) ## 說明 @@ -109,7 +109,7 @@ NewPipe 支援多種服務。我們的[使用文件](https://teamnewpipe.github. ## 貢獻 若你有任何想法、翻譯、設計、整理原始碼或大範圍的原始碼改動,我們歡迎任何幫助。 -若你想參與,請閱讀[貢獻須知(英文)](.github/CONTRIBUTING.md)。 +若你想參與,請閱讀[貢獻須知(英文)](../.github/CONTRIBUTING.md)。 Translation status @@ -122,17 +122,17 @@ NewPipe 支援多種服務。我們的[使用文件](https://teamnewpipe.github. - + - - + + - +
BitcoinBitcoin QR codeBitcoin QR code 16A9J59ahMRqkLSZjhYj33n9j3fMztFxnh
LiberapayVisit NewPipe at liberapay.comDonate via LiberapayVisit NewPipe at liberapay.comDonate via Liberapay
BountysourceVisit NewPipe at bountysource.comVisit NewPipe at bountysource.com Check out how many bounties you can earn.
diff --git a/fastlane/metadata/android/en-US/changelogs/982.txt b/fastlane/metadata/android/en-US/changelogs/982.txt new file mode 100644 index 000000000..954c6a818 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/982.txt @@ -0,0 +1 @@ +Fixed YouTube not playing any stream. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/983.txt b/fastlane/metadata/android/en-US/changelogs/983.txt new file mode 100644 index 000000000..efbd0557c --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/983.txt @@ -0,0 +1,9 @@ +Add new double-tap-to-seek UI and behaviour +Make settings searchable +Highlight pinned comments as such +Add open-with-app support for FSFE's PeerTube instance +Add error notifications +Fix replay of first queue item on player change +Wait longer when buffering during livestreams before failing +Fix order of local search results +Fix empty item fields in play queue diff --git a/fastlane/metadata/android/es/changelogs/981.txt b/fastlane/metadata/android/es/changelogs/981.txt new file mode 100644 index 000000000..d78d60488 --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/981.txt @@ -0,0 +1,2 @@ +Eliminada la compatibilidad con MediaParser para poder solucionar problemas de reanudación de la reproducción tras el almacenamiento en búfer en Android 11+. +Deshabilitado el túnel de medios en Philips QM16XE para poder solucionar problemas de reproducción. diff --git a/fastlane/metadata/android/fa/changelogs/981.txt b/fastlane/metadata/android/fa/changelogs/981.txt new file mode 100644 index 000000000..fce4da4ad --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/981.txt @@ -0,0 +1,2 @@ +برداشتن پشتیبانی MediaParser برای تعمیر شکست از سر گیری پخش پس از میانگیری روی اندروید ۱۱+. +تونل‌زنی رسانهٔ از کارافتاده روی QM16XE فیلیپس برای تعمیر مشکلات پخش. diff --git a/fastlane/metadata/android/fr/changelogs/981.txt b/fastlane/metadata/android/fr/changelogs/981.txt new file mode 100644 index 000000000..e3c301ce8 --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/981.txt @@ -0,0 +1,2 @@ +Suppression du support de MediaParser pour corriger les échec des lectures après le transfère en mémoire tampon sur Android 11+. +Désactivation de la tunnelisation de media sur les Philips QM16XE pour corriger les problèmes de lectures. diff --git a/fastlane/metadata/android/he/changelogs/981.txt b/fastlane/metadata/android/he/changelogs/981.txt new file mode 100644 index 000000000..8a5f0d04a --- /dev/null +++ b/fastlane/metadata/android/he/changelogs/981.txt @@ -0,0 +1,2 @@ +הוסרה תמיכה ב־MediaParser כדי לתקן המשך נגינה שנכשל לאחר אגירה ב־Android 11+‎. +הושבת תיעול מדיה ב־Philips QM16XE כדי לתקן בעיות נגינה. diff --git a/fastlane/metadata/android/he/changelogs/982.txt b/fastlane/metadata/android/he/changelogs/982.txt new file mode 100644 index 000000000..8123c9da3 --- /dev/null +++ b/fastlane/metadata/android/he/changelogs/982.txt @@ -0,0 +1 @@ +תוקנה התקלה ש־YouTube לא מנגן אף תזרים. diff --git a/fastlane/metadata/android/he/changelogs/983.txt b/fastlane/metadata/android/he/changelogs/983.txt new file mode 100644 index 000000000..7c9645995 --- /dev/null +++ b/fastlane/metadata/android/he/changelogs/983.txt @@ -0,0 +1,9 @@ +הוספת מנשק משתמש והתנהגות חדשים לנגיעה כפולה לקפיצות +אפשר מעתה לחפש בהגדרות +הדגשת הערות נעוצות +הוספת תמיכה בפתיחה עם יישומון לעותק ה־PeerTube של FSFE +נוספו התראות שגיאה +תוקן ניגון מחדש של הפריט הראשון בתור במהלך תזרימים חיים בטרם כשל בתהליך +ההמתנה לאגירה במהלך תזרימים חיים התארכה עד להחלטה על כשל +תוקן סדר תוצאות החיפוש המקומיות +תוקנו שדות פריט ריקים בתור הנגינה diff --git a/fastlane/metadata/android/hi/changelogs/63.txt b/fastlane/metadata/android/hi/changelogs/63.txt new file mode 100644 index 000000000..557b8c29b --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/63.txt @@ -0,0 +1,8 @@ +### सुधार +- आयात/निर्यात सेटिंग्स #1333 +- ओवरड्रॉ को कम करें (प्रदर्शन सुधार) #1371 +- कोड में कुछ छोटे सुधार #1375 +- जीडीपीआर के बारे में सब कुछ जोड़ें #1420 + +### ठीक किए गए +- डाउनलोडर: .गीगा फाइलों से अधूरे डाउनलोड लोड करने पर क्रैश को ठीक करें #1407 diff --git a/fastlane/metadata/android/hi/full_description.txt b/fastlane/metadata/android/hi/full_description.txt index 9ab5b312b..47c8826d7 100644 --- a/fastlane/metadata/android/hi/full_description.txt +++ b/fastlane/metadata/android/hi/full_description.txt @@ -1 +1 @@ -न्यूपाइप किसी भी गुगल फ्रेमवर्क लाइब्रेरी, या यूट्यूब एपीआई का उपयोग नहीं करता है। यह केवल वेबसाइट को पार्स करता है ताकि इसकी आवश्यकता वाली जानकारी हासिल की जा सके। इसलिए इस ऐप का उपयोग गुगल सेवाओं के स्थापित किए बिना उपकरणों पर किया जा सकता है। इसके अलावा, आपको न्यूपाइप का उपयोग करने के लिए युट्युब खाते की आवश्यकता नहीं है, और यह मुक्त और खुला है। +न्यूपाइप किसी भी गुगल फ्रेमवर्क लाइब्रेरी, या यूट्यूब एपीआई का उपयोग नहीं करता है। यह केवल वेबसाइट को पार्स करता है ताकि इसकी आवश्यकता वाली जानकारी हासिल की जा सके। इसलिए इस ऐप का उपयोग गुगल सेवाओं के स्थापित किए बिना उपकरणों पर किया जा सकता है। इसके अलावा, आपको न्यूपाइप का उपयोग करने के लिए युट्युब खाते की आवश्यकता नहीं है, और यह मुक्त और खुला है। diff --git a/fastlane/metadata/android/hu/changelogs/64.txt b/fastlane/metadata/android/hu/changelogs/64.txt new file mode 100644 index 000000000..4ba4191a9 --- /dev/null +++ b/fastlane/metadata/android/hu/changelogs/64.txt @@ -0,0 +1,8 @@ +### Fejlesztések +- Lehetőség a videó minőségének korlátozására mobiladat-kapcsolaton #1339 +- Az alkalmazás bezárásáig megjegyzi a fényerő-beállítást #1442 +- Jobb letöltési teljesítmény gyengébb CPU-kon #1431 +- médiamunkamenet (működő) támogatásának hozzáadása #1433 + +### Javítások +- A letöltések megnyitásánál történő összeomlás javítása (a javítás mostantól érhető el a kiadási verziókban is) #1441 diff --git a/fastlane/metadata/android/hu/full_description.txt b/fastlane/metadata/android/hu/full_description.txt index df1f8cb77..772992ee4 100644 --- a/fastlane/metadata/android/hu/full_description.txt +++ b/fastlane/metadata/android/hu/full_description.txt @@ -1 +1 @@ -A NewPipe nem használ semmilyen Google keretrendszer könyvtárat, sem a YouTube API-t. Csupán a weboldalt dolgozza fel, hogy kinyerje a szükséges információkat. Így ez az alkalmazás a Google Szolgáltatások nélkül futó eszközökön is használható. Továbbá a NewPipe használatához nincs szükség YouTube-fiókra sem. A NewPipe szabad és nyílt forráskódú szoftver. +A NewPipe nem használ semmilyen Google keretrendszer programkönyvtárat, sem a YouTube API-t. Csupán a weboldalt dolgozza fel, hogy kinyerje a szükséges információkat. Így ez az alkalmazás a Google Szolgáltatások nélkül futó eszközökön is használható. Továbbá a NewPipe használatához nincs szükség YouTube-fiókra sem. A NewPipe szabad és nyílt forráskódú szoftver. diff --git a/fastlane/metadata/android/hu/short_description.txt b/fastlane/metadata/android/hu/short_description.txt new file mode 100644 index 000000000..0a96f5e90 --- /dev/null +++ b/fastlane/metadata/android/hu/short_description.txt @@ -0,0 +1 @@ +Egy ingyenes és könnyű YouTube előtétprogram Androidra. diff --git a/fastlane/metadata/android/ms/changelogs/63.txt b/fastlane/metadata/android/ms/changelogs/63.txt new file mode 100644 index 000000000..3627f442a --- /dev/null +++ b/fastlane/metadata/android/ms/changelogs/63.txt @@ -0,0 +1,8 @@ +###Penambahbaikan +- Pengaturan Import/Eksport #1333 +- Mengurangi Pengambaran berlebih (peningkatan prestasi) #1371 +- Penambahbaikan kecil kepada kod #1375 +- Penambahan semua tentang GDPR #1420 + +###Diperbaiki +- Pemuat turun: pembaikian kepada kegagalan ketika memuat muat turun yang belum selesai daripada fail-fail format .giga #1407 diff --git a/fastlane/metadata/android/ms/changelogs/64.txt b/fastlane/metadata/android/ms/changelogs/64.txt new file mode 100644 index 000000000..111d0ecd8 --- /dev/null +++ b/fastlane/metadata/android/ms/changelogs/64.txt @@ -0,0 +1,8 @@ +### Penambahbaikan +- Menambah kemampuan untuk membataskan kualiti video jika menggunakan data mudah alih. #1339 +- Ingat kecerahan untuk sesi yang sedang dipakai #1442 +- Peningkatan prestasi muat turun untuk CPU yang lemah #1431 +- Penambahan sokongan (hidup) untuk sesi media #1433 + +###Diperbaiki +- Pembaikian kepada lagaan ketika memulakan muat turun (Pembaikian sekarang tersedia untuk rilis binaan) #1441 diff --git a/fastlane/metadata/android/ms/full_description.txt b/fastlane/metadata/android/ms/full_description.txt new file mode 100644 index 000000000..59fd024c4 --- /dev/null +++ b/fastlane/metadata/android/ms/full_description.txt @@ -0,0 +1 @@ +NewPipe tidak menggunakan pustaka kerangka kerja Google sama sekali, atau layanan API Youtube. NewPipe cuma menghuraikan laman YouTube untuk mendapatkan maklumat yang diperlukan. Oleh itu, NewPipe boleh digunakan pada peranti tanpa Google Services. Anda juga tidak perlu memiliki akaun YouTube untuk menggunakan NewPipe, dan aplikasi ini adalah sepenuhnya FLOSS. diff --git a/fastlane/metadata/android/ms/short_description.txt b/fastlane/metadata/android/ms/short_description.txt new file mode 100644 index 000000000..0d19c025e --- /dev/null +++ b/fastlane/metadata/android/ms/short_description.txt @@ -0,0 +1 @@ +Sebuah klien YouTube percuma dan ringan untuk Android. diff --git a/fastlane/metadata/android/nl/changelogs/63.txt b/fastlane/metadata/android/nl/changelogs/63.txt new file mode 100644 index 000000000..3a8c7df1f --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/63.txt @@ -0,0 +1,8 @@ +### Verbeteringen +- Instellingen importeren/exporteren #1333 +- Overdraw verminderen (prestatieverbetering) #1371 +- Kleine code verbeteringen #1375 +- Alles toevoegen over GDPR #1420 + +### Opgelost +- Downloader: Crash bij laden van onafgemaakte downloads van .giga bestanden verhelpen #1407 diff --git a/fastlane/metadata/android/nl/changelogs/64.txt b/fastlane/metadata/android/nl/changelogs/64.txt new file mode 100644 index 000000000..610aba45a --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/64.txt @@ -0,0 +1,8 @@ +### Verbeteringen +- Mogelijkheid toegevoegd om de videokwaliteit te beperken bij gebruik van mobiele data. #1339 +- Helderheid voor de sessie onthouden #1442 +- Downloadprestaties voor zwakkere CPU's verbeterd #1431 +- (werkende) ondersteuning voor mediasessie toegevoegd #1433 + +### Opgelost +- Crash bij openen downloads verhelpen (fix nu beschikbaar voor release builds) #1441 diff --git a/fastlane/metadata/android/nl/changelogs/770.txt b/fastlane/metadata/android/nl/changelogs/770.txt new file mode 100644 index 000000000..0dd3080aa --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/770.txt @@ -0,0 +1,4 @@ +Veranderingen in 0.17.2 + +Opgelost +• Er was geen video beschikbaar diff --git a/fastlane/metadata/android/nl/changelogs/820.txt b/fastlane/metadata/android/nl/changelogs/820.txt new file mode 100644 index 000000000..8654a44c8 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/820.txt @@ -0,0 +1 @@ +Regex voor decrypt-functienaam hersteld, waardoor YouTube onbruikbaar werd. diff --git a/fastlane/metadata/android/nl/changelogs/830.txt b/fastlane/metadata/android/nl/changelogs/830.txt new file mode 100644 index 000000000..7ae654679 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/830.txt @@ -0,0 +1 @@ +SoundCloud client_id bijgewerkt om SoundCloud problemen op te lossen. diff --git a/fastlane/metadata/android/nl/changelogs/850.txt b/fastlane/metadata/android/nl/changelogs/850.txt new file mode 100644 index 000000000..4586c3c99 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/850.txt @@ -0,0 +1 @@ +In deze release is de versie van de YouTube-website bijgewerkt. De oude websiteversie wordt in maart stopgezet en daarom moet u NewPipe upgraden. diff --git a/fastlane/metadata/android/nl/changelogs/860.txt b/fastlane/metadata/android/nl/changelogs/860.txt new file mode 100644 index 000000000..8e7b52d72 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/860.txt @@ -0,0 +1,7 @@ +Verbeterd +- Bewaren en terugzetten of tempo en toonhoogte zijn ontgrendeld of niet +- Ondersteuning display-uitsparing in speler +- Afronden van aantal keer bekeken en aantal abonnees +- Optimalisatie van YouTube om minder data te gebruiken + +Meer dan 15 YouTube gerelateerde bugs zijn opgelost in deze versie. diff --git a/fastlane/metadata/android/nl/changelogs/870.txt b/fastlane/metadata/android/nl/changelogs/870.txt new file mode 100644 index 000000000..e3c317b36 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/870.txt @@ -0,0 +1,2 @@ +Dit is een hotfix-release die NewPipe bijwerkt om SoundCloud weer zonder veel gedoe te kunnen gebruiken. +De v2 API van SoundCloud wordt nu in de extractor gebruikt en de detectie van ongeldige client-ID's is verbeterd. diff --git a/fastlane/metadata/android/nl/changelogs/900.txt b/fastlane/metadata/android/nl/changelogs/900.txt new file mode 100644 index 000000000..46e79a624 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/900.txt @@ -0,0 +1,14 @@ +Nieuw +• Abonnementsgroepen en gesorteerde feeds +• Mute-knop in spelers + +Verbeterd +• Sta het openen van music.youtube.com en media.ccc.de links toe in NewPipe +• Verplaats twee instellingen van Uiterlijk naar Inhoud +• Verberg zoekopties van 5, 15, 25 seconden als onnauwkeurig zoeken is ingeschakeld + +Gemaakt +• sommige WebM-video's kunnen niet worden gezocht +• Databaseback-up op Android P +• Crasht bij het delen van een gedownload bestand +• Tonnen YouTube-extractieprobleem en meer ... diff --git a/fastlane/metadata/android/nl/changelogs/910.txt b/fastlane/metadata/android/nl/changelogs/910.txt new file mode 100644 index 000000000..5ce1177dd --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/910.txt @@ -0,0 +1 @@ +Opgelost: Database migratie verholpen waardoor NewPipe in sommige zeldzame gevallen niet kon starten. diff --git a/fastlane/metadata/android/nl/changelogs/920.txt b/fastlane/metadata/android/nl/changelogs/920.txt new file mode 100644 index 000000000..46bae2f6a --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/920.txt @@ -0,0 +1,9 @@ +Verbeterd + +• Uploaddatum en weergave telling toegevoegd voor items in het stroomraster +• Verbeteringen voor de lay-out van de koppen + +Opgelost + +• Vaste demp-knop veroorzaakt crashes op API 19 +• Probleem opgelost met het downloaden van lange 1080p 60fps-video's diff --git a/fastlane/metadata/android/nl/changelogs/950.txt b/fastlane/metadata/android/nl/changelogs/950.txt new file mode 100644 index 000000000..e0c42cf26 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/950.txt @@ -0,0 +1,4 @@ +Deze release bevat drie kleine oplossingen: +• Opslagtoegang op Android 10+ +• Kiosken openen +• Analyseren van lange video's met een vaste duur diff --git a/fastlane/metadata/android/nl/changelogs/952.txt b/fastlane/metadata/android/nl/changelogs/952.txt new file mode 100644 index 000000000..3ff60109a --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/952.txt @@ -0,0 +1,7 @@ +Verbeterd +• Automatisch afspelen is beschikbaar voor alle services (in plaats van alleen voor YouTube) + +Aangepast +• Vaste gerelateerde streams door de nieuwe voortzettingen van YouTube te ondersteunen +• YouTube-video's met leeftijdsbeperking +• [Android TV] Opgeloste overlay met focusaccenten diff --git a/fastlane/metadata/android/nl/changelogs/953.txt b/fastlane/metadata/android/nl/changelogs/953.txt new file mode 100644 index 000000000..ca4000ebd --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/953.txt @@ -0,0 +1 @@ +Hersteld: extractie van de decoderingsfunctie van YouTube. diff --git a/fastlane/metadata/android/nl/changelogs/954.txt b/fastlane/metadata/android/nl/changelogs/954.txt deleted file mode 100644 index bded0c210..000000000 --- a/fastlane/metadata/android/nl/changelogs/954.txt +++ /dev/null @@ -1,6 +0,0 @@ -• Nieuwe app-workflow: speel video's af op de detailpagina, veeg omlaag om de speler te minimaliseren -• MediaStyle-meldingen: aanpasbare acties in meldingen, prestatieverbeteringen -• Basisformaat wijzigen bij gebruik van NewPipe als desktop-app -• Toon dialoog met open opties in het geval van een niet-ondersteunde URL-toast -• Verbeter de ervaring met zoeksuggesties wanneer externe suggesties niet kunnen worden opgehaald -• Standaard videokwaliteit verhoogd naar 720p60 (in-app-speler) en 480p (pop- diff --git a/fastlane/metadata/android/nl/changelogs/957.txt b/fastlane/metadata/android/nl/changelogs/957.txt index f8e495930..a15317d4c 100644 --- a/fastlane/metadata/android/nl/changelogs/957.txt +++ b/fastlane/metadata/android/nl/changelogs/957.txt @@ -1,10 +1,10 @@ -• Voeg specifieke enqeue-acties samen -• 2-vinger-beweging om de speler te sluiten -• Wis reCAPTHA-cookies +• Voeg specifieke wachtrij-acties samen +• 2-vinger-swipe sluit speler +• Sta wissen van reCAPTCHA cookie toe • Optie om meldingen niet te kleuren -• Verbeter hoe video-details worden geopend om oneindig bufferen, instabiel gedrag bij het delen met NewPipe en andere onvolkomenheden op te lossen -• Versnel YouTube-videos en repareer die met leeftijdsbeperkingen -• Los crash bij versnellen/terugspoelen op -• Herschik lijsten niet bij het slepen van thumbnails -• Onthoud popup-eigenschappen nooit -• Santali +• Verbeter openen van video-details om oneindig bufferen, instabiel gedrag bij het delen met NewPipe en andere fouten op te lossen +• Maak YouTube-video's sneller en herstel video's met leeftijdsbeperking +• Los crash bij snel vooruit/terugspoelen op +• Herschik lijsten niet bij het slepen van miniaturen +• Onthoud popup-eigenschappen altijd +• Santali-taal diff --git a/fastlane/metadata/android/nl/changelogs/958.txt b/fastlane/metadata/android/nl/changelogs/958.txt new file mode 100644 index 000000000..e8b06f2d1 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/958.txt @@ -0,0 +1,15 @@ +Verbeteringen: +• Opnieuw toegevoegd, functie om miniatuur te verbergen op vergrendelscherm +• Veeg naar beneden om feed te verversen +• Verbeterd ophalen van lokale lijsten + +Gemaakt: +• Crash bij start van NewPipe nadat verwijdering uit RAM geheugen +• Crash bij start van NewPipe zonder internetverbinding +• Helderheid- en volume-instellingen worden beter gerespecteerd +• [YouTube] Lange speellijst hersteld + +Overig: +• Code opgeruimd +• Afhankelijkheid updates +• Update vertalingen diff --git a/fastlane/metadata/android/nl/changelogs/961.txt b/fastlane/metadata/android/nl/changelogs/961.txt new file mode 100644 index 000000000..d5598e739 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/961.txt @@ -0,0 +1,12 @@ +• [YouTube] Mix ondersteuning +• [YouTube] Weergave info over publieke omroepen en Covid-19 +• [media.ccc.de] Recente videos toegevoegd +• Somalische vertaling toegevoegd + +• Veel interne verbeteringen + +• Het delen van videos van binnen de speler opgelost +• Lege ReCaptcha webview opgelost +• Crash opgelost die voorkwam wanneer een stream was verwijderd van een lijst +• [PeerTube] Gerelateerde streams opgelost +• [YouTube] Opgelost: YouTube Muziek zoeken diff --git a/fastlane/metadata/android/nl/changelogs/962.txt b/fastlane/metadata/android/nl/changelogs/962.txt new file mode 100644 index 000000000..1d277329f --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/962.txt @@ -0,0 +1,2 @@ +"Recente" video's toegevoegd aan de service media.ccc.de. +Livestreams toegevoegd aan de service media.ccc.de en ook ondersteuning voor livestreams. diff --git a/fastlane/metadata/android/nl/changelogs/963.txt b/fastlane/metadata/android/nl/changelogs/963.txt new file mode 100644 index 000000000..049791212 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/963.txt @@ -0,0 +1 @@ +• [YouTube] Verbetering van vaste kanalen diff --git a/fastlane/metadata/android/nl/changelogs/964.txt b/fastlane/metadata/android/nl/changelogs/964.txt new file mode 100644 index 000000000..853ecdf8c --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/964.txt @@ -0,0 +1,8 @@ +- Hoofdstukken in spelerbediening worden ondersteund +- [PeerTube] Sepia zoeken toegevoegd +- Delen is terug in video detailweergave. Stream beschrijving verplaatst naar de tab lay-out +- Als helderheid-gebaar is uitgeschakeld, kan helderheid herstel ook uit +- Lijst-item 'Afspelen op Kodi' +- Opgelost : Crash als geen standaardbrowser is ingesteld op sommige toestellen. Dialogen voor delen verbeterd +- 'Afspelen/Pauze' met spatie-knop in fullscreen speler +- [media.ccc.de] Reparaties en verbeteringen diff --git a/fastlane/metadata/android/nl/changelogs/965.txt b/fastlane/metadata/android/nl/changelogs/965.txt new file mode 100644 index 000000000..141520552 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/965.txt @@ -0,0 +1,6 @@ +Crash verholpen die optrad bij het opnieuw ordenen van kanaalgroepen. +Probleem opgelost met het ophalen van meer YouTube-video's van kanalen en afspeellijsten. +Probleem opgelost met het krijgen van YouTube-opmerkingen. +Ondersteuning toegevoegd voor / watch /, / v / en / w / subpaden in YouTube-URL's. +Vaste extractie van SoundCloud-client-ID en geografisch beperkte inhoud. +Noord-Koerdische lokalisatie toegevoegd. diff --git a/fastlane/metadata/android/nl/changelogs/966.txt b/fastlane/metadata/android/nl/changelogs/966.txt new file mode 100644 index 000000000..0347eba15 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/966.txt @@ -0,0 +1,14 @@ +Nieuw: +- Nieuwe dienst toegevoegd: Bandcamp + +Verbeterd: +- Optie toegevoegd om de app het thema van het toestel te laten volgen +- Voorkom sommige crashes door een verbeterd foutpaneel te tonen +- Toon meer informatie over waarom inhoud niet beschikbaar is +- Hardware spatie knop activeert afspelen/pauzeren +- Toon "Download gestart" toast + +Opgelost: +- Zeer kleine miniatuur in video details bij afspelen op de achtergrond +- Lege titel in geminimaliseerde speler +- Laatste resize modus is niet correct diff --git a/fastlane/metadata/android/nl/changelogs/967.txt b/fastlane/metadata/android/nl/changelogs/967.txt new file mode 100644 index 000000000..cff771734 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/967.txt @@ -0,0 +1 @@ +Probleem opgelost dat YouTube niet goed werkte in de EU. Dit werd veroorzaakt door een nieuw cookie- en privacy-toestemmingssysteem waarvoor NewPipe een TOESTEMMINGS- cookie moet plaatsen. diff --git a/fastlane/metadata/android/nl/changelogs/968.txt b/fastlane/metadata/android/nl/changelogs/968.txt new file mode 100644 index 000000000..1078ea9f2 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/968.txt @@ -0,0 +1,7 @@ +Optie voor kanaaldetails toegevoegd aan menu lang indrukken. +Functionaliteit toegevoegd om de naam van de afspeellijst te hernoemen vanuit de afspeellijstinterface. +Laat de gebruiker pauzeren terwijl een video wordt gebufferd. +Het witte thema geoptimaliseerd. +Overlappende lettertypen opgelost bij gebruik van een grotere lettergrootte. +Opgelost: geen video op Formuler- en Zephier-apparaten. +Verschillende crashes opgelost. diff --git a/fastlane/metadata/android/nl/changelogs/973.txt b/fastlane/metadata/android/nl/changelogs/973.txt new file mode 100644 index 000000000..da52defab --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/973.txt @@ -0,0 +1,4 @@ +Hotfix +• Miniaturen en titels herstellen, die worden bijgesneden in rasterlay-out, vanwege een verkeerde berekening van hoeveel video's in één rij passen +• Herstel downloaddialoog verdwijnt zonder iets te doen indien geopend vanuit het deelmenu +• Een bibliotheek bijwerken die verband houdt met het openen van externe activiteiten, zoals de bestandskiezer voor Storage Access Framework diff --git a/fastlane/metadata/android/nl/changelogs/974.txt b/fastlane/metadata/android/nl/changelogs/974.txt new file mode 100644 index 000000000..0232655b2 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/974.txt @@ -0,0 +1,5 @@ +Hotfix +• Bufferproblemen veroorzaakt door YouTube-beperking oplossen +• Extractie van YouTube-opmerkingen en crashes met uitgeschakelde reacties oplossen +• YouTube-muziekzoekopdracht repareren +• PeerTube-livestreams repareren diff --git a/fastlane/metadata/android/nl/changelogs/975.txt b/fastlane/metadata/android/nl/changelogs/975.txt new file mode 100644 index 000000000..5055d3e43 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/975.txt @@ -0,0 +1,17 @@ +Nieuw +- Toon een thumbnail preview tijdens zoeken +- Detecteer uitgeschakeld commentaar +- Markeer een feed-item als bekeken +- Reactie-harten tonen + +Verbeterd +- Verbeter metadata en tags lay-out +- Pas servicekleuren toe op UI-onderdelen + +Opgelost +- Miniatuur in mini player +- Eindeloze buffering bij dubbele wachtrij-items +- Enkele spelerfouten als rotatie en sneller sluiten +- ReCAPTCHA die op de achtergrond geladen blijft +- Klikken uitschakelen tijdens verversen van feed +- Enkele downloader crashes diff --git a/fastlane/metadata/android/nl/changelogs/976.txt b/fastlane/metadata/android/nl/changelogs/976.txt new file mode 100644 index 000000000..03676c828 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/976.txt @@ -0,0 +1,10 @@ +- Optie: speler direct in volledig scherm openen +- Optie: keuze welke zoeksuggesties laten zien +- Donker thema nu donkerder + donker splash-scherm +- Verbeterde bestandskiezer: ongewenst wordt grijs +- Import YouTube-abonnementen opgelost +- Om een stream opnieuw te bekijken, nu opnieuw op de knop replay tikken +- Geluidssessie sluiten vastgezet +- [Android TV] Lange zoekbalksprongen verholpen bij gebruik DPad + +Om meer wijzigingen te zien, bekijk de changelog (en blog post) op de Links tab hieronder. diff --git a/fastlane/metadata/android/nl/changelogs/977.txt b/fastlane/metadata/android/nl/changelogs/977.txt new file mode 100644 index 000000000..9b854ecad --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/977.txt @@ -0,0 +1,10 @@ +- Toegevoegd: "volgende afspelen" knop aan lang-drukken menu +- Padvoorvoegsel voor YouTube-shorts toegevoegd aan intentiefilter +- Hersteld: import instellingen +- Verwissel zoekbalk positie met speler knoppen in wachtrij scherm +- Diverse fixes MediasessionManager +- Hersteld: zoekbalk niet voltooid na einde video +- Media tunneling uitgeschakeld op RealtekATV +- Vergroot aanklikbaar gebied spelersknoppen bij geminimaliseerde speler + +Voor meer wijzigingen: changelog (en blog post) links-tab hieronder diff --git a/fastlane/metadata/android/nl/changelogs/978.txt b/fastlane/metadata/android/nl/changelogs/978.txt new file mode 100644 index 000000000..8943365c6 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/978.txt @@ -0,0 +1 @@ +Het uitvoeren van de controle op een nieuwe NewPipe versie is verbeterd. Deze controle werd soms te vroeg uitgevoerd en leidde daardoor tot een crash van de app. Dat zou nu verholpen moeten zijn. diff --git a/fastlane/metadata/android/nl/changelogs/979.txt b/fastlane/metadata/android/nl/changelogs/979.txt new file mode 100644 index 000000000..a22c6e329 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/979.txt @@ -0,0 +1,2 @@ +- Hervatten van afspelen opgelost +- Verbeteringen om ervoor te zorgen dat de service die bepaalt of NewPipe moet controleren op nieuwe versiecontroles niet op de achtergrond wordt gestart diff --git a/fastlane/metadata/android/nl/changelogs/980.txt b/fastlane/metadata/android/nl/changelogs/980.txt new file mode 100644 index 000000000..17b7003c1 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/980.txt @@ -0,0 +1,13 @@ +Nieuw +• Optie "Toevoegen aan afspeellijst" toegevoegd aan menu delen +• Ondersteuning toegevoegd voor y2u.be en PeerTube verkorte links + +Verbeterd +• Afspeelsnelheid-Controls compacter gemaakt +• Feed markeert nu nieuwe items +• "Toon bekeken items" optie in de feed is nu opgeslagen + +Opgelost +• YouTube vind-ik-leuks en niet-leuks extractie opgelost +• Automatisch opnieuw afspelen na terugkeer uit de achtergrond is nu opgelost +En nog veel meer diff --git a/fastlane/metadata/android/nl/changelogs/981.txt b/fastlane/metadata/android/nl/changelogs/981.txt new file mode 100644 index 000000000..d30b0d1f1 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/981.txt @@ -0,0 +1,2 @@ +MediaParser-ondersteuning verwijderd om mislukte afspeelhervattingen na buffering op Android 11+ te verhelpen. +Media tunneling uitgeschakeld op Philips QM16XE om afspeelproblemen te verhelpen. diff --git a/fastlane/metadata/android/nl/changelogs/982.txt b/fastlane/metadata/android/nl/changelogs/982.txt new file mode 100644 index 000000000..deaa12d0c --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/982.txt @@ -0,0 +1 @@ +Opgelost: YouTube speelt geen stream af. diff --git a/fastlane/metadata/android/nl/changelogs/983.txt b/fastlane/metadata/android/nl/changelogs/983.txt new file mode 100644 index 000000000..a45e2fe69 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/983.txt @@ -0,0 +1,9 @@ +Toegevoegd: nieuwe 'dubbel-tik-naar-doorzoeken' UI en gedrag +Instellingen doorzoekbaar maken +Gepinde commentaren als zodanig markeren +Open-met-app ondersteuning toevoegen voor FSFE's PeerTube instantie +Foutmeldingen toevoegen +Herstel herhaling van het eerste wachtrij-item bij verandering van speler +Langer wachten bij buffering tijdens livestreams alvorens te falen +Volgorde van lokale zoekresultaten verbeteren +Herstel lege itemvelden in afspeelwachtrij diff --git a/fastlane/metadata/android/nl/full_description.txt b/fastlane/metadata/android/nl/full_description.txt index 290373183..3b8cef244 100644 --- a/fastlane/metadata/android/nl/full_description.txt +++ b/fastlane/metadata/android/nl/full_description.txt @@ -1 +1 @@ -NewPipe gebruikt geen enkele Google framework library, of de YouTube API. Het parseert alleen de website om informatie die het nodig heeft te krijgen. Daardoor kan deze app gebruikt worden zonder Google Services geïnstalleerd te hebben. Daarnaast heb je geen YouTube-account nodig om NewPipe te gebruiken, en is het FLOSS. +NewPipe gebruikt geen enkele Google framework library, noch de YouTube API. Het analyseert de website alleen op zoek naar informatie die het nodig heeft. Daardoor kan deze app gebruikt worden zonder Google Services installatie. Daarnaast heb je geen YouTube-account nodig om NewPipe te gebruiken, en is het FLOSS. diff --git a/fastlane/metadata/android/nl/short_description.txt b/fastlane/metadata/android/nl/short_description.txt index 3623d0a8d..907817858 100644 --- a/fastlane/metadata/android/nl/short_description.txt +++ b/fastlane/metadata/android/nl/short_description.txt @@ -1 +1 @@ -Een gratis, lichtgewicht YouTube-frontend voor Android. +Een gratis lichtgewicht YouTube frontend voor Android. diff --git a/fastlane/metadata/android/pl/changelogs/983.txt b/fastlane/metadata/android/pl/changelogs/983.txt new file mode 100644 index 000000000..f5fada987 --- /dev/null +++ b/fastlane/metadata/android/pl/changelogs/983.txt @@ -0,0 +1,9 @@ +Dodano nowe zachowanie typu „naciśnij dwukrotnie, aby przewinąć” +Możliwość przeszukiwania ustawień +Oznaczanie przypiętych komentarzy +Dodano obsługę otwierania w aplikacji instancji PeerTube FSFE +Dodano powiadomienia o błędach +Naprawiono powtarzanie pierwszej pozycji kolejki przy zmianie odtwarzacza +Wydłużono oczekiwanie podczas buforowania transmisji na żywo, zanim zakończy się ono niepowodzeniem +Naprawiono kolejność lokalnych wyników wyszukiwania +Naprawiono puste pozycje w kolejce odtwarzania diff --git a/fastlane/metadata/android/pt-PT/changelogs/968.txt b/fastlane/metadata/android/pt-PT/changelogs/968.txt new file mode 100644 index 000000000..96f3d0fba --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/968.txt @@ -0,0 +1,7 @@ +Adicionada a opção de detalhes do canal ao menu de pressão prolongada. +Adicionada funcionalidade para renomear o nome da lista de reprodução da interface da lista de reprodução. +Permitir que o utilizador faça uma pausa enquanto um vídeo está a ser gravado no buffer. +Polido o tema branco. +Corrigida a sobreposição de fontes quando se utiliza uma fonte de tamanho maior. +Corrigido nenhum vídeo em dispositivos Formuler e Zephier. +Corrigidas várias falhas. diff --git a/fastlane/metadata/android/pt-PT/changelogs/970.txt b/fastlane/metadata/android/pt-PT/changelogs/970.txt new file mode 100644 index 000000000..8d43bb9db --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/970.txt @@ -0,0 +1,11 @@ +Novo +- Mostrar metadados de conteúdo (marcações, categorias, licença, ...) abaixo da descrição +- Adicionado "Mostrar detalhes do canal" opção em listas de reprodução remotas (não locais) +- Adicionado "Abrir no browser" opção para o menu de pressão longa + +Fixo +- Fixação da falha de rotação na página de detalhes do vídeo +- Fixo botão "Reproduzir com Kodi" no reprodutor sempre pede instalar Kore +- Caminhos de importação e exportação fixos e melhorados +- [YouTube] Fixo comentário e contagem +... diff --git a/fastlane/metadata/android/pt-PT/changelogs/977.txt b/fastlane/metadata/android/pt-PT/changelogs/977.txt new file mode 100644 index 000000000..340ab4d4f --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/977.txt @@ -0,0 +1,10 @@ +• Adicionado botão "reproduzir seguinte" ao menu de toque longo +• Adicionado prefixo do caminho curto do YouTube ao filtro +• Importação de configurações corrigida +• Trocada a posição da barra de pesquisa com os botões do reprodutor no ecrã da fila +• Várias correções de MediasessionManager +• Barra de pesquisa corrigida após o final do vídeo +• Tunelamento de mídia desativado no RealtekATV +• Expandida a área clicável dos botões minimizados + +Ver também o registo de alterações e o blogue abaixo. diff --git a/fastlane/metadata/android/pt-PT/changelogs/978.txt b/fastlane/metadata/android/pt-PT/changelogs/978.txt new file mode 100644 index 000000000..be505a16c --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/978.txt @@ -0,0 +1 @@ +Corrigida a verificação se existe uma nova versão do NewPipe. Esta verificação era muitas vezes executada demasiado cedo, o que levava a uma falha da aplicação. Agora isto deve estar corrigido. diff --git a/fastlane/metadata/android/pt-PT/changelogs/979.txt b/fastlane/metadata/android/pt-PT/changelogs/979.txt new file mode 100644 index 000000000..52b1baaff --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/979.txt @@ -0,0 +1,2 @@ +- Problema ao retomar a reprodução corrigido +- Melhorias para garantir que o serviço que determina se o NewPipe deve verificar se existe uma nova versão não seja iniciado em segundo plano diff --git a/fastlane/metadata/android/pt-PT/changelogs/980.txt b/fastlane/metadata/android/pt-PT/changelogs/980.txt new file mode 100644 index 000000000..2def4bc5a --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/980.txt @@ -0,0 +1,13 @@ +Novo +- Adicionado "Adicionar à lista de reprodução" opção para o menu compartilhar +- Adicionado suporte para ligações curtos y2u.be e PeerTube + +Melhorado +- Controles de Velocidade de Reprodução mais compactos +- Feed destaca novos itens agora +- A opção "Mostrar itens observados" no feed está agora gravada + +Fixo +- Fixo a extração de likes e dislikes da YouTube +- Repetição automática fixa após retornar do fundo +... diff --git a/fastlane/metadata/android/pt-PT/changelogs/981.txt b/fastlane/metadata/android/pt-PT/changelogs/981.txt new file mode 100644 index 000000000..1e7c23f50 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/981.txt @@ -0,0 +1,2 @@ +Removido o suporte ao MediaParser para corrigir falha de reprodução após buffer no Android 11+. +Tunelamento de mídia desativado no Philips QM16XE para corrigir problemas de reprodução. diff --git a/fastlane/metadata/android/pt/changelogs/965.txt b/fastlane/metadata/android/pt/changelogs/965.txt new file mode 100644 index 000000000..de54cf139 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/965.txt @@ -0,0 +1,6 @@ +Corrigido o crash que ocorria ao reordenar grupos de canais. +Corrigida a obtenção de mais vídeos do YouTube a partir de canais e listas de reprodução. +Corrigida a obtenção de comentários do YouTube. +Adicionado suporte a /watch/, /v/ e /w/ subpaths nas URLs do YouTube. +Corrigida a extração de id de cliente SoundCloud e conteúdo geo-restrito. +Adicionada a localização Curda do Norte. diff --git a/fastlane/metadata/android/pt/changelogs/968.txt b/fastlane/metadata/android/pt/changelogs/968.txt new file mode 100644 index 000000000..96f3d0fba --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/968.txt @@ -0,0 +1,7 @@ +Adicionada a opção de detalhes do canal ao menu de pressão prolongada. +Adicionada funcionalidade para renomear o nome da lista de reprodução da interface da lista de reprodução. +Permitir que o utilizador faça uma pausa enquanto um vídeo está a ser gravado no buffer. +Polido o tema branco. +Corrigida a sobreposição de fontes quando se utiliza uma fonte de tamanho maior. +Corrigido nenhum vídeo em dispositivos Formuler e Zephier. +Corrigidas várias falhas. diff --git a/fastlane/metadata/android/pt/changelogs/970.txt b/fastlane/metadata/android/pt/changelogs/970.txt new file mode 100644 index 000000000..8d43bb9db --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/970.txt @@ -0,0 +1,11 @@ +Novo +- Mostrar metadados de conteúdo (marcações, categorias, licença, ...) abaixo da descrição +- Adicionado "Mostrar detalhes do canal" opção em listas de reprodução remotas (não locais) +- Adicionado "Abrir no browser" opção para o menu de pressão longa + +Fixo +- Fixação da falha de rotação na página de detalhes do vídeo +- Fixo botão "Reproduzir com Kodi" no reprodutor sempre pede instalar Kore +- Caminhos de importação e exportação fixos e melhorados +- [YouTube] Fixo comentário e contagem +... diff --git a/fastlane/metadata/android/pt/changelogs/980.txt b/fastlane/metadata/android/pt/changelogs/980.txt new file mode 100644 index 000000000..2def4bc5a --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/980.txt @@ -0,0 +1,13 @@ +Novo +- Adicionado "Adicionar à lista de reprodução" opção para o menu compartilhar +- Adicionado suporte para ligações curtos y2u.be e PeerTube + +Melhorado +- Controles de Velocidade de Reprodução mais compactos +- Feed destaca novos itens agora +- A opção "Mostrar itens observados" no feed está agora gravada + +Fixo +- Fixo a extração de likes e dislikes da YouTube +- Repetição automática fixa após retornar do fundo +... diff --git a/fastlane/metadata/android/pt/changelogs/981.txt b/fastlane/metadata/android/pt/changelogs/981.txt new file mode 100644 index 000000000..1e7c23f50 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/981.txt @@ -0,0 +1,2 @@ +Removido o suporte ao MediaParser para corrigir falha de reprodução após buffer no Android 11+. +Tunelamento de mídia desativado no Philips QM16XE para corrigir problemas de reprodução. diff --git a/fastlane/metadata/android/sv/changelogs/870.txt b/fastlane/metadata/android/sv/changelogs/870.txt new file mode 100644 index 000000000..fa2844e00 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/870.txt @@ -0,0 +1,2 @@ +Detta är en hotfix-version som uppdaterar NewPipe så att du kan använda SoundCloud utan större problem igen. +SoundCloud's v2 API används nu i extraktorn och upptäckten av ogiltiga klient-ID:n har förbättrats. diff --git a/fastlane/metadata/android/sv/changelogs/910.txt b/fastlane/metadata/android/sv/changelogs/910.txt new file mode 100644 index 000000000..e944bea27 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/910.txt @@ -0,0 +1 @@ +Fixade databasmigrering som hindrade NewPipe från att starta i vissa sällsynta fall. diff --git a/fastlane/metadata/android/sv/changelogs/950.txt b/fastlane/metadata/android/sv/changelogs/950.txt new file mode 100644 index 000000000..85779e384 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/950.txt @@ -0,0 +1,4 @@ +Den här versionen innehåller tre små korrigeringar: +• Fixade lagringsåtkomst på Android 10+ +• Fixade öppningskiosker +• Fixade varaktighetstolkning av långa videor diff --git a/fastlane/metadata/android/sv/changelogs/953.txt b/fastlane/metadata/android/sv/changelogs/953.txt new file mode 100644 index 000000000..ab370bf37 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/953.txt @@ -0,0 +1 @@ +Fixade extraktion av YouTubes dekrypteringsfunktion. diff --git a/fastlane/metadata/android/sv/changelogs/955.txt b/fastlane/metadata/android/sv/changelogs/955.txt new file mode 100644 index 000000000..2e6af8d11 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/955.txt @@ -0,0 +1,3 @@ +[YouTube] Fixade sökningen för vissa användare +[YouTube] Fixade slumpmässiga dekrypteringsundantag +[SoundCloud] URL:er som slutar med ett snedstreck analyseras nu korrekt diff --git a/fastlane/metadata/android/sv/changelogs/956.txt b/fastlane/metadata/android/sv/changelogs/956.txt new file mode 100644 index 000000000..acb557def --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/956.txt @@ -0,0 +1 @@ +[YouTube] Fixade krasch vid laddning av en video diff --git a/fastlane/metadata/android/sv/changelogs/960.txt b/fastlane/metadata/android/sv/changelogs/960.txt new file mode 100644 index 000000000..9e7edd435 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/960.txt @@ -0,0 +1,4 @@ +• Förbättrad beskrivning av exportdatabasalternativet i inställningar. +• Fixade analys av YouTube-kommentarer. +• Fixade visningsnamn för media.ccc.de tjänsten. +• Uppdaterade översättningar. diff --git a/fastlane/metadata/android/sv/changelogs/962.txt b/fastlane/metadata/android/sv/changelogs/962.txt new file mode 100644 index 000000000..0349562ed --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/962.txt @@ -0,0 +1,2 @@ +Lade till "senaste" videor till media.ccc.de tjänsten. +Lade till live sändningar till tjänsten media.ccc.de och stöd för live sändningar. diff --git a/fastlane/metadata/android/sv/changelogs/963.txt b/fastlane/metadata/android/sv/changelogs/963.txt new file mode 100644 index 000000000..3f2a6b748 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/963.txt @@ -0,0 +1 @@ +• [YouTube] Fixade kanal fortsättning diff --git a/fastlane/metadata/android/sv/changelogs/967.txt b/fastlane/metadata/android/sv/changelogs/967.txt new file mode 100644 index 000000000..daa6d1376 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/967.txt @@ -0,0 +1 @@ +Löste problemet med att YouTube inte fungerade korrekt i EU. Detta berodde på ett nytt system för cookies och samtycke till sekretess som kräver att NewPipe ställde in en CONSENT cookie. diff --git a/fastlane/metadata/android/sv/changelogs/971.txt b/fastlane/metadata/android/sv/changelogs/971.txt new file mode 100644 index 000000000..cd80648f2 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/971.txt @@ -0,0 +1,3 @@ +Hotfix +• Öka bufferten för uppspelning efter återbuffring +• Fixade krasch på surfplattor och TV-apparater när du klickade på spelköikonen i spelaren diff --git a/fastlane/metadata/android/sv/changelogs/973.txt b/fastlane/metadata/android/sv/changelogs/973.txt new file mode 100644 index 000000000..5b5be8181 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/973.txt @@ -0,0 +1,4 @@ +Hotfix +• Åtgärda miniatyrer och titlar som klipptes av i rutnätslayouten på grund av en felaktig beräkning av hur många videor som får plats på en rad +• Fixa att nedladdningsdialogrutan försvinner utan att göra något om den öppnas från delningsmenyn +• Uppdatera ett bibliotek relaterat till att öppna externa aktiviteter som filväljaren Storage Access Framework diff --git a/fastlane/metadata/android/sv/changelogs/974.txt b/fastlane/metadata/android/sv/changelogs/974.txt new file mode 100644 index 000000000..78153154b --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/974.txt @@ -0,0 +1,5 @@ +Hotfix +• Åtgärda buffringsproblem som orsakas av YouTube strypning +• Åtgärda extraktion av YouTube kommentarer och kraschar med inaktiverade kommentarer +• Fixade YouTube musiksökning +• Fixade PeerTube live sändningar diff --git a/fastlane/metadata/android/sv/changelogs/978.txt b/fastlane/metadata/android/sv/changelogs/978.txt new file mode 100644 index 000000000..2f7521531 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/978.txt @@ -0,0 +1 @@ +Fixade kontrollen av en ny NewPipe-version. Denna kontroll utfördes ibland för tidigt och ledde därför till att appen kraschade. Detta bör vara åtgärdat nu. diff --git a/fastlane/metadata/android/sv/changelogs/980.txt b/fastlane/metadata/android/sv/changelogs/980.txt new file mode 100644 index 000000000..dd81569d7 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/980.txt @@ -0,0 +1,13 @@ +Nytt +• La till "Lägg till i spellista" alternativ i delningsmenyn +• La till stöd för y2u.be och PeerTube kort länkar + +Förbättrat +• Gjorde uppspelningshastighetskontrollerna mer kompakta +• Flödet markerar nya objekt nu +• "Visa bevakade objekt" alternativet i flödet sparas nu + +Fixat +• Fixade YouTube tumme upp och tumme ner extraktion +• Fixade automatisk uppspelning efter återkomst från bakgrunden +Och mycket mer diff --git a/fastlane/metadata/android/sv/changelogs/981.txt b/fastlane/metadata/android/sv/changelogs/981.txt new file mode 100644 index 000000000..edb8c1779 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/981.txt @@ -0,0 +1,2 @@ +Tog bort stödet för MediaParser för att åtgärda fel i återupptagningen av uppspelning efter buffring på Android 11+. +Inaktiverade media tunneling på Philips QM16XE för att åtgärda uppspelningsproblem. diff --git a/fastlane/metadata/android/uk/changelogs/65.txt b/fastlane/metadata/android/uk/changelogs/65.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/65.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/66.txt b/fastlane/metadata/android/uk/changelogs/66.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/66.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/68.txt b/fastlane/metadata/android/uk/changelogs/68.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/68.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/69.txt b/fastlane/metadata/android/uk/changelogs/69.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/69.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/70.txt b/fastlane/metadata/android/uk/changelogs/70.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/70.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/740.txt b/fastlane/metadata/android/uk/changelogs/740.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/740.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/750.txt b/fastlane/metadata/android/uk/changelogs/750.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/750.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/760.txt b/fastlane/metadata/android/uk/changelogs/760.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/760.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/800.txt b/fastlane/metadata/android/uk/changelogs/800.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/800.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/810.txt b/fastlane/metadata/android/uk/changelogs/810.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/810.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/840.txt b/fastlane/metadata/android/uk/changelogs/840.txt new file mode 100644 index 000000000..c394fc4f5 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/840.txt @@ -0,0 +1 @@ +Опис застарілий і задовгий. Перекладу не потребує. diff --git a/fastlane/metadata/android/uk/changelogs/930.txt b/fastlane/metadata/android/uk/changelogs/930.txt new file mode 100644 index 000000000..0adf7b847 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/930.txt @@ -0,0 +1,19 @@ +Нове +• Пошук на YouTube Music +• Підтримка Android TV + +Поліпш. +• Можна вилуч. всі переглянуті відео з локальної добірки +• Сповіщення про непідтрим. вміст +• Покращено жести зміни розміру програвача щипанням +• Вилучення трансляцій з черги натиском на тло +• Краща обробка розміру заголовка панелі + +Випр. +• Роботу налаштув. вікового обмеж. вмісту +• Деякі види reCAPTCHA +• Збої під час відкр. закладок, якщо добірка `null` +• Виявлення винятків, пов'язаних з мережею +• Кнопку сорт. груп у підписках + +та інше diff --git a/fastlane/metadata/android/uk/changelogs/951.txt b/fastlane/metadata/android/uk/changelogs/951.txt index fa7c0f526..1cd68b0b8 100644 --- a/fastlane/metadata/android/uk/changelogs/951.txt +++ b/fastlane/metadata/android/uk/changelogs/951.txt @@ -2,8 +2,8 @@ •Дод.пошук для збир.підписок у вікні груп. стрічок •Дод.фільтр до вікна груп.стрічок для показу лише незгруп.підписок •Дод.вкладку добірок на осн.стор. -•Швид.перемот.вперед/назад на тлі/вікні програв.черги -•Відобр.поради пошуку: мали на увазі і показ результ. для +•Швид.перемот.вперед/назад у фоні/вікні програв.черги +•Показ порад пошуку: мали на увазі й показ результ. для Покр. •Вил.запис метадан.програми в зміш.файли •Не вилуч.невдалі потоки з черги diff --git a/fastlane/metadata/android/uk/changelogs/958.txt b/fastlane/metadata/android/uk/changelogs/958.txt index 18b22eedf..8f88562e5 100644 --- a/fastlane/metadata/android/uk/changelogs/958.txt +++ b/fastlane/metadata/android/uk/changelogs/958.txt @@ -7,7 +7,7 @@ • Збої запуску NewPipe після його видалення з оперативної пам’яті • Збої запуску, коли немає з'єднання з інтернетом • Дотримання параметрів яскравості та жестів -• [YouTube] Виправлені довгі списки відтворення +• [YouTube] Виправлені довгі добірки Інше: • Очищення коду та кілька внутрішніх удосконалень diff --git a/fastlane/metadata/android/uk/changelogs/981.txt b/fastlane/metadata/android/uk/changelogs/981.txt new file mode 100644 index 000000000..fb358f995 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/981.txt @@ -0,0 +1,2 @@ +Вилучено підтримку MediaParser, щоб виправити помилку відновлення відтворення після буферизації на Android 11+. +Вимкнено медіатунелювання на Philips QM16XE, щоб розв'язати проблеми відтворення. diff --git a/fastlane/metadata/android/uk/changelogs/982.txt b/fastlane/metadata/android/uk/changelogs/982.txt new file mode 100644 index 000000000..41d4d11ce --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/982.txt @@ -0,0 +1 @@ +Виправлено проблему невідтворюваності трансляцій YouTube. diff --git a/fastlane/metadata/android/uk/changelogs/983.txt b/fastlane/metadata/android/uk/changelogs/983.txt new file mode 100644 index 000000000..f500868bb --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/983.txt @@ -0,0 +1,9 @@ +Переоформлено прокручування дотиком двічі +Додано пошук у налаштуваннях +Підсвічено закріплені коментарі +Втілено відкриття застосунком адрес FSFE PeerTube +Додано сповіщення про збої +Виправлено повтор першого в черзі при зміні програвача +Підтримано довше очікування буферів живих потоків +Упорядковано результати локального пошуку +Виправлено порожні поля в черзі відтворення diff --git a/fastlane/metadata/android/uk/full_description.txt b/fastlane/metadata/android/uk/full_description.txt index 1f7a0bd4e..46fd17600 100644 --- a/fastlane/metadata/android/uk/full_description.txt +++ b/fastlane/metadata/android/uk/full_description.txt @@ -1 +1 @@ -NewPipe не використовує бібліотеки фреймворку Google або API YouTube, взаємодіючи тільки з сайтом служби для отримання потрібних відомостей. NewPipe може працювати на пристроях без встановлених Служб Google і не вимагає облікового запису YouTube, є вільним програмним забезпеченням. +NewPipe не використовує бібліотеки фреймворку Google або API YouTube, взаємодіючи тільки з сайтом служби для отримання потрібних відомостей. NewPipe може працювати на пристроях без установлених Служб Google і не вимагає облікового запису YouTube, є вільним програмним забезпеченням. diff --git a/fastlane/metadata/android/zh-Hans/changelogs/981.txt b/fastlane/metadata/android/zh-Hans/changelogs/981.txt new file mode 100644 index 000000000..be941ae71 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/981.txt @@ -0,0 +1,2 @@ +移除了对MediaParser的支持,以解决在Android 11+上缓冲后恢复播放失败的问题。 +在Philips QM16XE上禁用了媒体隧道,以解决播放问题。 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/982.txt b/fastlane/metadata/android/zh-Hans/changelogs/982.txt new file mode 100644 index 000000000..8a5424c9e --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/982.txt @@ -0,0 +1 @@ +修复YouTube无法播放任何视频 diff --git a/fastlane/metadata/android/zh-Hans/changelogs/983.txt b/fastlane/metadata/android/zh-Hans/changelogs/983.txt new file mode 100644 index 000000000..056a95fe2 --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/983.txt @@ -0,0 +1,9 @@ +新增 新的双击视频寻址UI和行为 +新增 支持设置项目被搜索 +新增 突出显示置顶评论 +新增 为FSFE的PeerTube实例添加开放应用支持 +新增 错误报告通知 +修复 播放器变化后,重新播放播放队列中第一个项目 +改进 缓冲直播时,在失败前等待更长的时间 +修复 本地搜索结果的顺序异常 +修复 播放队列中的空白项目 diff --git a/fastlane/metadata/android/zh-Hans/full_description.txt b/fastlane/metadata/android/zh-Hans/full_description.txt index 5382a813b..d55f32fa1 100644 --- a/fastlane/metadata/android/zh-Hans/full_description.txt +++ b/fastlane/metadata/android/zh-Hans/full_description.txt @@ -1 +1 @@ -Newpipe不使用任何Google框架库组件,或YouTube API。Newpipe仅仅通过解析YouTube网页版来获取所需信息。因此该应用可工作在无GMS服务的设备上。此外,你也不需要任何YouTube账号,Newpipe是自由开源软件(FLOSS)。 +NewPipe 不使用任何 Google 框架库组件,也不使用 YouTube API。NewPipe 仅仅通过解析 YouTube 网页版来获取所需信息。因此,可在没有安装 Google 服务的设备上使用 NewPipe。此外,使用 NewPipe 并不需要 YouTube 账号,NewPipe 是自由开源软件(FLOSS)。 diff --git a/fastlane/metadata/android/zh-Hant/changelogs/981.txt b/fastlane/metadata/android/zh-Hant/changelogs/981.txt new file mode 100644 index 000000000..cf0bd8588 --- /dev/null +++ b/fastlane/metadata/android/zh-Hant/changelogs/981.txt @@ -0,0 +1,2 @@ +移除了對MediaParser的支持,以解決在Android 11+上緩衝後恢復播放失敗的問題。 +在Philips QM16XE上禁用了媒體隧道,以解決播放問題。 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/981.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/981.txt new file mode 100644 index 000000000..cf0bd8588 --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/981.txt @@ -0,0 +1,2 @@ +移除了對MediaParser的支持,以解決在Android 11+上緩衝後恢復播放失敗的問題。 +在Philips QM16XE上禁用了媒體隧道,以解決播放問題。 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/983.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/983.txt new file mode 100644 index 000000000..ec2edbe38 --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/983.txt @@ -0,0 +1,9 @@ +新加撳兩下跳轉嘅介面同功能 +設定有得打字嚟搵 +留言置頂有色水分辨 +為 FSFE 嘅 PeerTube 站新加「用 app 嚟開」支援 +新加錯誤通知 +修正播放器轉變時重播隊頭項目 +直播串流緩衝時等耐啲先至算失敗 +修正本機搜尋結果嘅排位 +修正排隊播入面開天窗嘅項目欄位 diff --git a/fastlane/metadata/android/zh_Hant_HK/full_description.txt b/fastlane/metadata/android/zh_Hant_HK/full_description.txt new file mode 100644 index 000000000..1a516a17d --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/full_description.txt @@ -0,0 +1 @@ +NewPipe 沒有使用任何 Google 框架庫組件或是 YouTube API。NewPipe 只需解析網頁以獲取所需資訊,因此 NewPipe 可在沒有安裝 Google 服務的裝置上使用。此外,你亦無需 YouTube 帳號就能使用NewPipe,NewPipe 是自由及開放源碼軟件(FLOSS)。 diff --git a/fastlane/metadata/android/zh_Hant_HK/short_description.txt b/fastlane/metadata/android/zh_Hant_HK/short_description.txt new file mode 100644 index 000000000..fca9de0da --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/short_description.txt @@ -0,0 +1 @@ +一個自由輕量的 Android YouTube 前端。 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0d8da6971..3bb947249 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-all.zip -distributionSha256Sum=b75392c5625a88bccd58a574552a5a323edca82dab5942d2d41097f809c6bcce +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip +distributionSha256Sum=c9490e938b221daf0094982288e4038deed954a3f12fb54cbf270ddf4e37d879 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists