mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2026-01-14 19:37:55 +00:00
Compare commits
157 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c306a0971 | ||
|
|
c0d6c8aeb3 | ||
|
|
b27b49e4f3 | ||
|
|
7ed0dbcf1a | ||
|
|
8a23de6b20 | ||
|
|
6cc3089204 | ||
|
|
093e95c078 | ||
|
|
7c8ac04e35 | ||
|
|
dc88f8b172 | ||
|
|
c94f0ded27 | ||
|
|
b553aa2159 | ||
|
|
a7bd2666f0 | ||
|
|
fe2fc60581 | ||
|
|
ce59c05d5b | ||
|
|
a4858bc702 | ||
|
|
a2bb58a991 | ||
|
|
f7b41227d2 | ||
|
|
5b1a6831d5 | ||
|
|
42b1bbe414 | ||
|
|
db9f20a22f | ||
|
|
cf67b592da | ||
|
|
e867bfbc82 | ||
|
|
9a671851df | ||
|
|
4b92f78cc8 | ||
|
|
c585982557 | ||
|
|
6bf22e7ad0 | ||
|
|
2f8dccf7f6 | ||
|
|
027768d97d | ||
|
|
085f63b8c5 | ||
|
|
6f7c337e00 | ||
|
|
16a968f3bb | ||
|
|
d7e0167fed | ||
|
|
41c4f515cf | ||
|
|
d9a8218372 | ||
|
|
dd9bd4da8b | ||
|
|
cf98500b7f | ||
|
|
2ce8facc05 | ||
|
|
d1b117d07c | ||
|
|
c0377c7ebf | ||
|
|
a2490a5730 | ||
|
|
177334ba62 | ||
|
|
7bce588767 | ||
|
|
4bb67c634f | ||
|
|
3653afbcc4 | ||
|
|
1f4a4ea09f | ||
|
|
3d38add4b4 | ||
|
|
124b7eefb5 | ||
|
|
b52924048c | ||
|
|
93393f5dff | ||
|
|
275a75ebaa | ||
|
|
3e4a7a19cc | ||
|
|
734af457f3 | ||
|
|
55bdb1f47a | ||
|
|
adff0d199d | ||
|
|
f95b3262a0 | ||
|
|
794a14e76c | ||
|
|
ba857b5ef7 | ||
|
|
2aed04a8c2 | ||
|
|
5f9e6b51da | ||
|
|
e7b5c99ed6 | ||
|
|
9c0b3d35be | ||
|
|
a54bc96eab | ||
|
|
a2a8e4b965 | ||
|
|
81ad2c61d9 | ||
|
|
32616493b3 | ||
|
|
05183ffd0f | ||
|
|
e72ddc9439 | ||
|
|
32e3caecac | ||
|
|
df43389183 | ||
|
|
19b77809ec | ||
|
|
be05b827f3 | ||
|
|
5dfc6f822d | ||
|
|
c3e004da03 | ||
|
|
8bae73b6ea | ||
|
|
d1e19d3b63 | ||
|
|
ffca897ddf | ||
|
|
4277b6e262 | ||
|
|
506c4ce701 | ||
|
|
d251e58984 | ||
|
|
4a1213c081 | ||
|
|
8b7609255c | ||
|
|
ef78fe0653 | ||
|
|
70b3ccb422 | ||
|
|
81d6b367fe | ||
|
|
0a78ae60be | ||
|
|
a61830a860 | ||
|
|
86bae9ddc9 | ||
|
|
033780862a | ||
|
|
6094d8a74e | ||
|
|
356ca3d177 | ||
|
|
d69806faa9 | ||
|
|
ab67635dcb | ||
|
|
cee3d49458 | ||
|
|
5b53a7aef7 | ||
|
|
9b29665cc0 | ||
|
|
f447c87b45 | ||
|
|
e3eea45d86 | ||
|
|
f61a06ce0a | ||
|
|
539842aa99 | ||
|
|
5925f1d2aa | ||
|
|
61eb150825 | ||
|
|
cf95de4d27 | ||
|
|
fdad7ec1ba | ||
|
|
850efb4237 | ||
|
|
853cb3887f | ||
|
|
412f2c1664 | ||
|
|
2810a69bd4 | ||
|
|
5347f95f50 | ||
|
|
6b469f0621 | ||
|
|
0021562c93 | ||
|
|
f2bd2b0a59 | ||
|
|
647eb8bbf5 | ||
|
|
816d13ae3f | ||
|
|
578fea4a9c | ||
|
|
1a660d9a4a | ||
|
|
227ac6d9e3 | ||
|
|
bb57407733 | ||
|
|
13ddcce0a2 | ||
|
|
53767a78d1 | ||
|
|
5600e8a2ad | ||
|
|
c6ed52c592 | ||
|
|
3ad14e4adf | ||
|
|
8a22bdea5d | ||
|
|
6135a3c3e2 | ||
|
|
1e3c979303 | ||
|
|
d0228406b6 | ||
|
|
507a2237b7 | ||
|
|
c15c597d99 | ||
|
|
7c26cd3270 | ||
|
|
938af73059 | ||
|
|
1c047366d2 | ||
|
|
cb20f0cbb0 | ||
|
|
468251c84e | ||
|
|
ca86ae0c9a | ||
|
|
59221b0b4e | ||
|
|
d3e0640400 | ||
|
|
bcb72321f5 | ||
|
|
4060af715d | ||
|
|
2ec0237e83 | ||
|
|
c5593880f2 | ||
|
|
3673cbce4f | ||
|
|
1f6f7be4b2 | ||
|
|
580cce3506 | ||
|
|
36ba546fc6 | ||
|
|
7f37799cbe | ||
|
|
5570eeeff9 | ||
|
|
2b186ce6e0 | ||
|
|
72938fed69 | ||
|
|
d54c806e03 | ||
|
|
7eb3551485 | ||
|
|
a628a36082 | ||
|
|
0d3e04ff25 | ||
|
|
0c78a3f7b0 | ||
|
|
fb1f574c26 | ||
|
|
7f15c18fca | ||
|
|
7a8dab2d58 | ||
|
|
6f3dfad550 |
69
.github/CONTRIBUTING.md
vendored
69
.github/CONTRIBUTING.md
vendored
@@ -1,65 +1,46 @@
|
||||
NewPipe contribution guidelines
|
||||
===============================
|
||||
|
||||
PLEASE READ THESE GUIDELINES CAREFULLY BEFORE ANY CONTRIBUTION!
|
||||
|
||||
## Crash reporting
|
||||
|
||||
Do not report crashes in the GitHub issue tracker. NewPipe has an automated crash report system that will ask you to
|
||||
send a report via e-mail when a crash occurs. This contains all the data we need for debugging, and allows you to even
|
||||
add a comment to it. You'll see exactly what is sent, the system is 100% transparent.
|
||||
Report crashes through the automated crash report system of NewPipe.
|
||||
This way all the data needed for debugging is included in your bugreport for GitHub.
|
||||
You'll see exactly what is sent, be able to add your comments, and then send it.
|
||||
|
||||
## Issue reporting/feature requests
|
||||
|
||||
* Search the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) first to make sure your issue/feature
|
||||
hasn't been reported/requested before.
|
||||
* Check whether your issue/feature is already fixed/implemented.
|
||||
* Check if the issue still exists in the latest release/beta version.
|
||||
* If you are an Android/Java developer, you are always welcome to fix an issue or implement a feature yourself. PRs welcome!
|
||||
* We use English for development. Issues in other languages will be closed and ignored.
|
||||
* Please only add *one* issue at a time. Do not put multiple issues into one thread.
|
||||
* Follow the template! Issues or feature requests not matching the template might be closed.
|
||||
* **Already reported**? Browse the [existing issues](https://github.com/TeamNewPipe/NewPipe/issues) to make sure your issue/feature hasn't been reported/requested.
|
||||
* **Already fixed**? Check whether your issue/feature is already fixed/implemented.
|
||||
* **Still relevant**? Check if the issue still exists in the latest release/beta version.
|
||||
* **Can you fix it**? If you are an Android/Java developer, you are always welcome to fix an issue or implement a feature yourself. PRs welcome! See [Code contribution](#code-contribution) for more info.
|
||||
* **Is it in English**? Issues in other languages will be ignored unless someone translates them.
|
||||
* **Is it one issue**? Multiple issues require multiple reports, that can be linked to track their statuses.
|
||||
* **The template**: Fill it out, everyone wins. Your issue has a chance of getting fixed.
|
||||
|
||||
## Bug Fixing
|
||||
* If you want to help NewPipe to become free of bugs (this is our utopic goal for NewPipe), you can send us an email to
|
||||
<a href="mailto:tnp@newpipe.schabi.org">tnp@newpipe.schabi.org</a> to let us know that you intend to help. We'll send you further instructions. You may, on request,
|
||||
register at our [Sentry](https://sentry.schabi.org) instance (see section "Crash reporting" for more information).
|
||||
|
||||
## Translation
|
||||
|
||||
* NewPipe is translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). You can log in there
|
||||
with your GitHub account.
|
||||
* If the language you want to translate is not on Weblate, you can add it: see [How to add a new language](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-add-a-new-language-to-NewPipe) in the wiki.
|
||||
* NewPipe is translated via [Weblate](https://hosted.weblate.org/projects/newpipe/strings/). Log in there with your GitHub account, or register.
|
||||
* Add the language you want to translate if it is not there already: see [How to add a new language](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-add-a-new-language-to-NewPipe) in the wiki.
|
||||
|
||||
## Code contribution
|
||||
|
||||
* If you want to add a feature or change one, please open an issue describing your change. This gives the team and community a chance to give feedback before you spend any time on something that could be done differently or not done at all. It also prevents two contributors from working on the same thing and one being disappointed when only one user's code can be added.
|
||||
* Stick to NewPipe's style conventions: follow [checkStyle](https://github.com/checkstyle/checkstyle). It will run each time you build the project.
|
||||
* Do not bring non-free software (e.g. binary blobs) into the project. Also, make sure you do not introduce Google
|
||||
* If you want to help out with an existing bug report or feature request, leave a comment on that issue saying you want to try your hand at it.
|
||||
* If there is no existing issue for what you want to work on, open a new one describing your changes. This gives the team and the community a chance to give feedback before you spend time on something that is already in development, should be done differently, or should be avoided completely.
|
||||
* Stick to NewPipe's style conventions of [checkStyle](https://github.com/checkstyle/checkstyle). It runs each time you build the project.
|
||||
* Do not bring non-free software (e.g. binary blobs) into the project. Make sure you do not introduce Google
|
||||
libraries.
|
||||
* Stick to [F-Droid contribution guidelines](https://f-droid.org/wiki/page/Inclusion_Policy).
|
||||
* Make changes on a separate branch with a meaningful name, not on the master neither dev branch. This is commonly known as *feature branch workflow*. You
|
||||
may then send your changes as a pull request (PR) on GitHub.
|
||||
* When submitting changes, you confirm that your code is licensed under the terms of the
|
||||
[GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.html).
|
||||
* Please test (compile and run) your code before you submit changes! Ideally, provide test feedback in the PR
|
||||
description. Untested code will **not** be merged!
|
||||
* Make changes on a separate branch with a meaningful name, not on the _master_ branch or the _dev_ branch. This is commonly known as *feature branch workflow*. You may then send your changes as a pull request (PR) on GitHub.
|
||||
* Please test (compile and run) your code before submitting changes! Ideally, provide test feedback in the PR description. Untested code will **not** be merged!
|
||||
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job, but if not, you must rebase the dev branch manually and resolve the problems on your own. You can find help [on the wiki](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-merge-a-PR). That makes the maintainers' jobs way easier.
|
||||
* Please show intention to maintain your features and code after you contribute a PR. Unmaintained code is a hassle for core developers. If you do not intend to maintain features you plan to contribute, please rethink your submission, or clearly state that in the PR description.
|
||||
* Respond if someone requests changes or otherwise raises issues about your PRs.
|
||||
* Send PRs that only cover one specific issue/solution/bug. Do not send PRs that are huge and consist of multiple independent solutions.
|
||||
* Try to figure out yourself why builds on our CI fail.
|
||||
* Make sure your PR is up-to-date with the rest of the code. Often, a simple click on "Update branch" will do the job,
|
||||
but if not, you are asked to rebase the dev branch manually and resolve the problems on your own. You can find help [on the wiki](https://github.com/TeamNewPipe/NewPipe/wiki/How-to-merge-a-PR). That will make the
|
||||
maintainers' jobs way easier.
|
||||
* Please show intention to maintain your features and code after you contributed it. Unmaintained code is a hassle for
|
||||
the core developers, and just adds work. If you do not intend to maintain features you contributed, please think again
|
||||
about submission, or clearly state that in the description of your PR.
|
||||
* Respond yourselves if someone requests changes or otherwise raises issues about your PRs.
|
||||
* Send PR that only cover one specific issue/solution/bug. Do not send PRs that are huge and consists of multiple
|
||||
independent solutions.
|
||||
|
||||
## Communication
|
||||
|
||||
* There is an IRC channel on Freenode which is regularly visited by the core team and other developers:
|
||||
[#newpipe](irc:irc.freenode.net/newpipe). [Click here for Webchat](https://webchat.freenode.net/?channels=newpipe)!
|
||||
* If you want to get in touch with the core team or one of our other contributors you can send an email to
|
||||
<a href="mailto:tnp@newpipe.schabi.org">tnp@newpipe.schabi.org</a>. Please do not send issue reports, they will be ignored and remain unanswered! Use the GitHub issue
|
||||
tracker described above!
|
||||
* Feel free to post suggestions, changes, ideas etc. on GitHub or IRC!
|
||||
* The [#newpipe](irc:irc.freenode.net/newpipe) channel on freenode has the core team and other developers in it. [Click here for webchat](https://webchat.freenode.net/?channels=newpipe)!
|
||||
* You can also use a Matrix account to join the Newpipe channel at [#freenode_#newpipe:matrix.org](https://matrix.to/#/#freenode_#newpipe:matrix.org).
|
||||
* Post suggestions, changes, ideas etc. on GitHub or IRC.
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
<b>WARNING: THIS IS A BETA VERSION, THEREFORE YOU MAY ENCOUNTER BUGS. IF YOU DO, OPEN AN ISSUE VIA OUR GITHUB REPOSITORY.</b>
|
||||
|
||||
<b>PUTTING NEWPIPE OR ANY FORK OF IT INTO GOOGLE PLAYSTORE VIOLATES THEIR TERMS OF CONDITIONS.</b>
|
||||
<b>PUTTING NEWPIPE OR ANY FORK OF IT INTO THE GOOGLE PLAY STORE VIOLATES THEIR TERMS AND CONDITIONS.</b>
|
||||
|
||||
## Screenshots
|
||||
|
||||
@@ -87,7 +87,7 @@ When a change to the NewPipe code occurs (due to either adding features or bug f
|
||||
3. Download the APK from [Github Releases](https://github.com/TeamNewPipe/NewPipe/releases) and install it as soon as we publish a release.
|
||||
4. Update via F-droid. This is the slowest method of getting updates, as F-Droid must recognize changes, build the APK itself, sign it, then push the update to users.
|
||||
|
||||
We recommend method 2 for most users. APKs installed using method 2 or 3 are compatible with each other, but not with those installed using method 4. This is due to the same signing key (ours) being using for 2 and 3, but a different signing key (F-Droid's) being used for 4. Building a debug APK using method 1 excludes a key entirely. Signing keys help ensure that a user isn't tricked into installing a malicious update to an app.
|
||||
We recommend method 2 for most users. APKs installed using method 2 or 3 are compatible with each other, but not with those installed using method 4. This is due to the same signing key (ours) being used for 2 and 3, but a different signing key (F-Droid's) being used for 4. Building a debug APK using method 1 excludes a key entirely. Signing keys help ensure that a user isn't tricked into installing a malicious update to an app.
|
||||
|
||||
In the meanwhile, if you want to switch sources for some reason (e.g. NewPipe's core functionality was broken and F-Droid doesn't have the update yet), we recommend following this procedure:
|
||||
1. Back up your data via Settings > Content > Export Database so you keep your history, subscriptions, and playlists
|
||||
|
||||
@@ -13,8 +13,8 @@ android {
|
||||
resValue "string", "app_name", "NewPipe"
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 29
|
||||
versionCode 958
|
||||
versionName "0.20.4"
|
||||
versionCode 960
|
||||
versionName "0.20.6"
|
||||
|
||||
multiDexEnabled true
|
||||
|
||||
@@ -175,7 +175,7 @@ dependencies {
|
||||
|
||||
// NewPipe dependencies
|
||||
// You can use a local version by uncommenting a few lines in settings.gradle
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:650f0920fea535e08728d895d7b21f19c740817c'
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:b3835bd616ab28b861c83dcefd56e1754c6d20be'
|
||||
implementation "com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751"
|
||||
|
||||
implementation "org.jsoup:jsoup:1.13.1"
|
||||
|
||||
@@ -305,8 +305,7 @@
|
||||
<data android:host="peertube.cpy.re" />
|
||||
<data android:host="peertube.mastodon.host" />
|
||||
<data android:host="peertube.fr" />
|
||||
<data android:host="peertube.live" />
|
||||
<data android:host="peertube.video" />
|
||||
<data android:host="tilvids.com" />
|
||||
<data android:host="tube.privacytools.io" />
|
||||
<data android:host="video.ploud.fr" />
|
||||
<data android:host="video.lqdn.fr" />
|
||||
|
||||
@@ -51,10 +51,10 @@ public final class CheckForNewAppVersion {
|
||||
private static final String NEWPIPE_API_URL = "https://newpipe.schabi.org/api/data.json";
|
||||
|
||||
/**
|
||||
* Method to get the apk's SHA1 key. See https://stackoverflow.com/questions/9293019/#22506133.
|
||||
* Method to get the APK's SHA1 key. See https://stackoverflow.com/questions/9293019/#22506133.
|
||||
*
|
||||
* @param application The application
|
||||
* @return String with the apk's SHA1 fingeprint in hexadecimal
|
||||
* @return String with the APK's SHA1 fingerprint in hexadecimal
|
||||
*/
|
||||
@NonNull
|
||||
private static String getCertificateSHA1Fingerprint(@NonNull final Application application) {
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity
|
||||
import org.schabi.newpipe.database.stream.model.StreamEntity
|
||||
import org.schabi.newpipe.database.stream.model.StreamStateEntity
|
||||
import org.schabi.newpipe.extractor.stream.StreamInfoItem
|
||||
import kotlin.jvm.Throws
|
||||
|
||||
class PlaylistStreamEntry(
|
||||
@Embedded
|
||||
|
||||
@@ -1,10 +1,29 @@
|
||||
package org.schabi.newpipe.ktx
|
||||
|
||||
import java.time.OffsetDateTime
|
||||
import java.time.ZoneId
|
||||
import java.time.ZoneOffset
|
||||
import java.time.temporal.ChronoField
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
import java.util.GregorianCalendar
|
||||
import java.util.TimeZone
|
||||
|
||||
fun OffsetDateTime.toCalendar(zoneId: ZoneId = ZoneId.systemDefault()): Calendar {
|
||||
return GregorianCalendar.from(if (zoneId != offset) atZoneSameInstant(zoneId) else toZonedDateTime())
|
||||
// This method is a modified version of GregorianCalendar.from(ZonedDateTime).
|
||||
// Math.addExact() and Math.multiplyExact() are desugared even though lint displays a warning.
|
||||
@SuppressWarnings("NewApi")
|
||||
fun OffsetDateTime.toCalendar(): Calendar {
|
||||
val cal = GregorianCalendar(TimeZone.getTimeZone("UTC"))
|
||||
val offsetDateTimeUTC = withOffsetSameInstant(ZoneOffset.UTC)
|
||||
cal.gregorianChange = Date(Long.MIN_VALUE)
|
||||
cal.firstDayOfWeek = Calendar.MONDAY
|
||||
cal.minimalDaysInFirstWeek = 4
|
||||
try {
|
||||
cal.timeInMillis = Math.addExact(
|
||||
Math.multiplyExact(offsetDateTimeUTC.toEpochSecond(), 1000),
|
||||
offsetDateTimeUTC[ChronoField.MILLI_OF_SECOND].toLong()
|
||||
)
|
||||
} catch (ex: ArithmeticException) {
|
||||
throw IllegalArgumentException(ex)
|
||||
}
|
||||
return cal
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ public interface ImportExportEventListener {
|
||||
void onSizeReceived(int size);
|
||||
|
||||
/**
|
||||
* Called everytime an item has been parsed/resolved.
|
||||
* Called every time an item has been parsed/resolved.
|
||||
*
|
||||
* @param itemName the name of the subscription item
|
||||
*/
|
||||
|
||||
@@ -684,7 +684,7 @@ public abstract class BasePlayer implements
|
||||
|
||||
public void onMuteUnmuteButtonClicked() {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "onMuteUnmuteButtonClicled() called");
|
||||
Log.d(TAG, "onMuteUnmuteButtonClicked() called");
|
||||
}
|
||||
simpleExoPlayer.setVolume(isMuted() ? 1 : 0);
|
||||
}
|
||||
|
||||
@@ -618,7 +618,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
progressLiveSync.setClickable(!player.isLiveEdge());
|
||||
}
|
||||
|
||||
// this will make shure progressCurrentTime has the same width as progressEndTime
|
||||
// this will make sure progressCurrentTime has the same width as progressEndTime
|
||||
final ViewGroup.LayoutParams endTimeParams = progressEndTime.getLayoutParams();
|
||||
final ViewGroup.LayoutParams currentTimeParams = progressCurrentTime.getLayoutParams();
|
||||
currentTimeParams.width = progressEndTime.getWidth();
|
||||
|
||||
@@ -26,12 +26,12 @@ public class LoadController implements LoadControl {
|
||||
}
|
||||
|
||||
private LoadController(final int initialPlaybackBufferMs,
|
||||
final int minimumPlaybackbufferMs,
|
||||
final int minimumPlaybackBufferMs,
|
||||
final int optimalPlaybackBufferMs) {
|
||||
this.initialPlaybackBufferUs = initialPlaybackBufferMs * 1000;
|
||||
|
||||
final DefaultLoadControl.Builder builder = new DefaultLoadControl.Builder();
|
||||
builder.setBufferDurationsMs(minimumPlaybackbufferMs, optimalPlaybackBufferMs,
|
||||
builder.setBufferDurationsMs(minimumPlaybackBufferMs, optimalPlaybackBufferMs,
|
||||
initialPlaybackBufferMs, initialPlaybackBufferMs);
|
||||
internalLoadControl = builder.createDefaultLoadControl();
|
||||
}
|
||||
|
||||
@@ -128,9 +128,9 @@ abstract class AbstractInfoPlayQueue<T extends ListInfo, U extends InfoItem> ext
|
||||
fetchReactor = null;
|
||||
}
|
||||
|
||||
private static List<PlayQueueItem> extractListItems(final List<StreamInfoItem> infos) {
|
||||
private static List<PlayQueueItem> extractListItems(final List<StreamInfoItem> infoItems) {
|
||||
final List<PlayQueueItem> result = new ArrayList<>();
|
||||
for (final InfoItem stream : infos) {
|
||||
for (final InfoItem stream : infoItems) {
|
||||
if (stream instanceof StreamInfoItem) {
|
||||
result.add(new PlayQueueItem((StreamInfoItem) stream));
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import androidx.annotation.StringRes
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
|
||||
@Parcelize
|
||||
class ErrorInfo private constructor(
|
||||
class ErrorInfo(
|
||||
val userAction: UserAction?,
|
||||
val serviceName: String,
|
||||
val request: String,
|
||||
|
||||
@@ -1,416 +1,416 @@
|
||||
package org.schabi.newpipe.streams;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.schabi.newpipe.streams.WebMReader.Cluster;
|
||||
import org.schabi.newpipe.streams.WebMReader.Segment;
|
||||
import org.schabi.newpipe.streams.WebMReader.SimpleBlock;
|
||||
import org.schabi.newpipe.streams.WebMReader.WebMTrack;
|
||||
import org.schabi.newpipe.streams.io.SharpStream;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
/**
|
||||
* @author kapodamy
|
||||
*/
|
||||
public class OggFromWebMWriter implements Closeable {
|
||||
private static final byte FLAG_UNSET = 0x00;
|
||||
//private static final byte FLAG_CONTINUED = 0x01;
|
||||
private static final byte FLAG_FIRST = 0x02;
|
||||
private static final byte FLAG_LAST = 0x04;
|
||||
|
||||
private static final byte HEADER_CHECKSUM_OFFSET = 22;
|
||||
private static final byte HEADER_SIZE = 27;
|
||||
|
||||
private static final int TIME_SCALE_NS = 1000000000;
|
||||
|
||||
private boolean done = false;
|
||||
private boolean parsed = false;
|
||||
|
||||
private final SharpStream source;
|
||||
private final SharpStream output;
|
||||
|
||||
private int sequenceCount = 0;
|
||||
private final int streamId;
|
||||
private byte packetFlag = FLAG_FIRST;
|
||||
|
||||
private WebMReader webm = null;
|
||||
private WebMTrack webmTrack = null;
|
||||
private Segment webmSegment = null;
|
||||
private Cluster webmCluster = null;
|
||||
private SimpleBlock webmBlock = null;
|
||||
|
||||
private long webmBlockLastTimecode = 0;
|
||||
private long webmBlockNearDuration = 0;
|
||||
|
||||
private short segmentTableSize = 0;
|
||||
private final byte[] segmentTable = new byte[255];
|
||||
private long segmentTableNextTimestamp = TIME_SCALE_NS;
|
||||
|
||||
private final int[] crc32Table = new int[256];
|
||||
|
||||
public OggFromWebMWriter(@NonNull final SharpStream source, @NonNull final SharpStream target) {
|
||||
if (!source.canRead() || !source.canRewind()) {
|
||||
throw new IllegalArgumentException("source stream must be readable and allows seeking");
|
||||
}
|
||||
if (!target.canWrite() || !target.canRewind()) {
|
||||
throw new IllegalArgumentException("output stream must be writable and allows seeking");
|
||||
}
|
||||
|
||||
this.source = source;
|
||||
this.output = target;
|
||||
|
||||
this.streamId = (int) System.currentTimeMillis();
|
||||
|
||||
populateCrc32Table();
|
||||
}
|
||||
|
||||
public boolean isDone() {
|
||||
return done;
|
||||
}
|
||||
|
||||
public boolean isParsed() {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
public WebMTrack[] getTracksFromSource() throws IllegalStateException {
|
||||
if (!parsed) {
|
||||
throw new IllegalStateException("source must be parsed first");
|
||||
}
|
||||
|
||||
return webm.getAvailableTracks();
|
||||
}
|
||||
|
||||
public void parseSource() throws IOException, IllegalStateException {
|
||||
if (done) {
|
||||
throw new IllegalStateException("already done");
|
||||
}
|
||||
if (parsed) {
|
||||
throw new IllegalStateException("already parsed");
|
||||
}
|
||||
|
||||
try {
|
||||
webm = new WebMReader(source);
|
||||
webm.parse();
|
||||
webmSegment = webm.getNextSegment();
|
||||
} finally {
|
||||
parsed = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void selectTrack(final int trackIndex) throws IOException {
|
||||
if (!parsed) {
|
||||
throw new IllegalStateException("source must be parsed first");
|
||||
}
|
||||
if (done) {
|
||||
throw new IOException("already done");
|
||||
}
|
||||
if (webmTrack != null) {
|
||||
throw new IOException("tracks already selected");
|
||||
}
|
||||
|
||||
switch (webm.getAvailableTracks()[trackIndex].kind) {
|
||||
case Audio:
|
||||
case Video:
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("the track must an audio or video stream");
|
||||
}
|
||||
|
||||
try {
|
||||
webmTrack = webm.selectTrack(trackIndex);
|
||||
} finally {
|
||||
parsed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
done = true;
|
||||
parsed = true;
|
||||
|
||||
webmTrack = null;
|
||||
webm = null;
|
||||
|
||||
if (!output.isClosed()) {
|
||||
output.flush();
|
||||
}
|
||||
|
||||
source.close();
|
||||
output.close();
|
||||
}
|
||||
|
||||
public void build() throws IOException {
|
||||
final float resolution;
|
||||
SimpleBlock bloq;
|
||||
final ByteBuffer header = ByteBuffer.allocate(27 + (255 * 255));
|
||||
final ByteBuffer page = ByteBuffer.allocate(64 * 1024);
|
||||
|
||||
header.order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
/* step 1: get the amount of frames per seconds */
|
||||
switch (webmTrack.kind) {
|
||||
case Audio:
|
||||
resolution = getSampleFrequencyFromTrack(webmTrack.bMetadata);
|
||||
if (resolution == 0f) {
|
||||
throw new RuntimeException("cannot get the audio sample rate");
|
||||
}
|
||||
break;
|
||||
case Video:
|
||||
// WARNING: untested
|
||||
if (webmTrack.defaultDuration == 0) {
|
||||
throw new RuntimeException("missing default frame time");
|
||||
}
|
||||
resolution = 1000f / ((float) webmTrack.defaultDuration
|
||||
/ webmSegment.info.timecodeScale);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("not implemented");
|
||||
}
|
||||
|
||||
/* step 2: create packet with code init data */
|
||||
if (webmTrack.codecPrivate != null) {
|
||||
addPacketSegment(webmTrack.codecPrivate.length);
|
||||
makePacketheader(0x00, header, webmTrack.codecPrivate);
|
||||
write(header);
|
||||
output.write(webmTrack.codecPrivate);
|
||||
}
|
||||
|
||||
/* step 3: create packet with metadata */
|
||||
final byte[] buffer = makeMetadata();
|
||||
if (buffer != null) {
|
||||
addPacketSegment(buffer.length);
|
||||
makePacketheader(0x00, header, buffer);
|
||||
write(header);
|
||||
output.write(buffer);
|
||||
}
|
||||
|
||||
/* step 4: calculate amount of packets */
|
||||
while (webmSegment != null) {
|
||||
bloq = getNextBlock();
|
||||
|
||||
if (bloq != null && addPacketSegment(bloq)) {
|
||||
final int pos = page.position();
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
bloq.data.read(page.array(), pos, bloq.dataSize);
|
||||
page.position(pos + bloq.dataSize);
|
||||
continue;
|
||||
}
|
||||
|
||||
// calculate the current packet duration using the next block
|
||||
double elapsedNs = webmTrack.codecDelay;
|
||||
|
||||
if (bloq == null) {
|
||||
packetFlag = FLAG_LAST; // note: if the flag is FLAG_CONTINUED, is changed
|
||||
elapsedNs += webmBlockLastTimecode;
|
||||
|
||||
if (webmTrack.defaultDuration > 0) {
|
||||
elapsedNs += webmTrack.defaultDuration;
|
||||
} else {
|
||||
// hardcoded way, guess the sample duration
|
||||
elapsedNs += webmBlockNearDuration;
|
||||
}
|
||||
} else {
|
||||
elapsedNs += bloq.absoluteTimeCodeNs;
|
||||
}
|
||||
|
||||
// get the sample count in the page
|
||||
elapsedNs = elapsedNs / TIME_SCALE_NS;
|
||||
elapsedNs = Math.ceil(elapsedNs * resolution);
|
||||
|
||||
// create header and calculate page checksum
|
||||
int checksum = makePacketheader((long) elapsedNs, header, null);
|
||||
checksum = calcCrc32(checksum, page.array(), page.position());
|
||||
|
||||
header.putInt(HEADER_CHECKSUM_OFFSET, checksum);
|
||||
|
||||
// dump data
|
||||
write(header);
|
||||
write(page);
|
||||
|
||||
webmBlock = bloq;
|
||||
}
|
||||
}
|
||||
|
||||
private int makePacketheader(final long granPos, @NonNull final ByteBuffer buffer,
|
||||
final byte[] immediatePage) {
|
||||
short length = HEADER_SIZE;
|
||||
|
||||
buffer.putInt(0x5367674f); // "OggS" binary string in little-endian
|
||||
buffer.put((byte) 0x00); // version
|
||||
buffer.put(packetFlag); // type
|
||||
|
||||
buffer.putLong(granPos); // granulate position
|
||||
|
||||
buffer.putInt(streamId); // bitstream serial number
|
||||
buffer.putInt(sequenceCount++); // page sequence number
|
||||
|
||||
buffer.putInt(0x00); // page checksum
|
||||
|
||||
buffer.put((byte) segmentTableSize); // segment table
|
||||
buffer.put(segmentTable, 0, segmentTableSize); // segment size
|
||||
|
||||
length += segmentTableSize;
|
||||
|
||||
clearSegmentTable(); // clear segment table for next header
|
||||
|
||||
int checksumCrc32 = calcCrc32(0x00, buffer.array(), length);
|
||||
|
||||
if (immediatePage != null) {
|
||||
checksumCrc32 = calcCrc32(checksumCrc32, immediatePage, immediatePage.length);
|
||||
buffer.putInt(HEADER_CHECKSUM_OFFSET, checksumCrc32);
|
||||
segmentTableNextTimestamp -= TIME_SCALE_NS;
|
||||
}
|
||||
|
||||
return checksumCrc32;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private byte[] makeMetadata() {
|
||||
if ("A_OPUS".equals(webmTrack.codecId)) {
|
||||
return new byte[]{
|
||||
0x4F, 0x70, 0x75, 0x73, 0x54, 0x61, 0x67, 0x73, // "OpusTags" binary string
|
||||
0x00, 0x00, 0x00, 0x00, // writing application string size (not present)
|
||||
0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags)
|
||||
};
|
||||
} else if ("A_VORBIS".equals(webmTrack.codecId)) {
|
||||
return new byte[]{
|
||||
0x03, // ¿¿¿???
|
||||
0x76, 0x6f, 0x72, 0x62, 0x69, 0x73, // "vorbis" binary string
|
||||
0x00, 0x00, 0x00, 0x00, // writing application string size (not present)
|
||||
0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags)
|
||||
};
|
||||
}
|
||||
|
||||
// not implemented for the desired codec
|
||||
return null;
|
||||
}
|
||||
|
||||
private void write(final ByteBuffer buffer) throws IOException {
|
||||
output.write(buffer.array(), 0, buffer.position());
|
||||
buffer.position(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private SimpleBlock getNextBlock() throws IOException {
|
||||
SimpleBlock res;
|
||||
|
||||
if (webmBlock != null) {
|
||||
res = webmBlock;
|
||||
webmBlock = null;
|
||||
return res;
|
||||
}
|
||||
|
||||
if (webmSegment == null) {
|
||||
webmSegment = webm.getNextSegment();
|
||||
if (webmSegment == null) {
|
||||
return null; // no more blocks in the selected track
|
||||
}
|
||||
}
|
||||
|
||||
if (webmCluster == null) {
|
||||
webmCluster = webmSegment.getNextCluster();
|
||||
if (webmCluster == null) {
|
||||
webmSegment = null;
|
||||
return getNextBlock();
|
||||
}
|
||||
}
|
||||
|
||||
res = webmCluster.getNextSimpleBlock();
|
||||
if (res == null) {
|
||||
webmCluster = null;
|
||||
return getNextBlock();
|
||||
}
|
||||
|
||||
webmBlockNearDuration = res.absoluteTimeCodeNs - webmBlockLastTimecode;
|
||||
webmBlockLastTimecode = res.absoluteTimeCodeNs;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
private float getSampleFrequencyFromTrack(final byte[] bMetadata) {
|
||||
// hardcoded way
|
||||
final ByteBuffer buffer = ByteBuffer.wrap(bMetadata);
|
||||
|
||||
while (buffer.remaining() >= 6) {
|
||||
final int id = buffer.getShort() & 0xFFFF;
|
||||
if (id == 0x0000B584) {
|
||||
return buffer.getFloat();
|
||||
}
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
private void clearSegmentTable() {
|
||||
segmentTableNextTimestamp += TIME_SCALE_NS;
|
||||
packetFlag = FLAG_UNSET;
|
||||
segmentTableSize = 0;
|
||||
}
|
||||
|
||||
private boolean addPacketSegment(final SimpleBlock block) {
|
||||
final long timestamp = block.absoluteTimeCodeNs + webmTrack.codecDelay;
|
||||
|
||||
if (timestamp >= segmentTableNextTimestamp) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return addPacketSegment(block.dataSize);
|
||||
}
|
||||
|
||||
private boolean addPacketSegment(final int size) {
|
||||
if (size > 65025) {
|
||||
throw new UnsupportedOperationException("page size cannot be larger than 65025");
|
||||
}
|
||||
|
||||
int available = (segmentTable.length - segmentTableSize) * 255;
|
||||
final boolean extra = (size % 255) == 0;
|
||||
|
||||
if (extra) {
|
||||
// add a zero byte entry in the table
|
||||
// required to indicate the sample size is multiple of 255
|
||||
available -= 255;
|
||||
}
|
||||
|
||||
// check if possible add the segment, without overflow the table
|
||||
if (available < size) {
|
||||
return false; // not enough space on the page
|
||||
}
|
||||
|
||||
for (int seg = size; seg > 0; seg -= 255) {
|
||||
segmentTable[segmentTableSize++] = (byte) Math.min(seg, 255);
|
||||
}
|
||||
|
||||
if (extra) {
|
||||
segmentTable[segmentTableSize++] = 0x00;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void populateCrc32Table() {
|
||||
for (int i = 0; i < 0x100; i++) {
|
||||
int crc = i << 24;
|
||||
for (int j = 0; j < 8; j++) {
|
||||
final long b = crc >>> 31;
|
||||
crc <<= 1;
|
||||
crc ^= (int) (0x100000000L - b) & 0x04c11db7;
|
||||
}
|
||||
crc32Table[i] = crc;
|
||||
}
|
||||
}
|
||||
|
||||
private int calcCrc32(final int initialCrc, final byte[] buffer, final int size) {
|
||||
int crc = initialCrc;
|
||||
for (int i = 0; i < size; i++) {
|
||||
final int reg = (crc >>> 24) & 0xff;
|
||||
crc = (crc << 8) ^ crc32Table[reg ^ (buffer[i] & 0xff)];
|
||||
}
|
||||
|
||||
return crc;
|
||||
}
|
||||
}
|
||||
package org.schabi.newpipe.streams;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.schabi.newpipe.streams.WebMReader.Cluster;
|
||||
import org.schabi.newpipe.streams.WebMReader.Segment;
|
||||
import org.schabi.newpipe.streams.WebMReader.SimpleBlock;
|
||||
import org.schabi.newpipe.streams.WebMReader.WebMTrack;
|
||||
import org.schabi.newpipe.streams.io.SharpStream;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
/**
|
||||
* @author kapodamy
|
||||
*/
|
||||
public class OggFromWebMWriter implements Closeable {
|
||||
private static final byte FLAG_UNSET = 0x00;
|
||||
//private static final byte FLAG_CONTINUED = 0x01;
|
||||
private static final byte FLAG_FIRST = 0x02;
|
||||
private static final byte FLAG_LAST = 0x04;
|
||||
|
||||
private static final byte HEADER_CHECKSUM_OFFSET = 22;
|
||||
private static final byte HEADER_SIZE = 27;
|
||||
|
||||
private static final int TIME_SCALE_NS = 1000000000;
|
||||
|
||||
private boolean done = false;
|
||||
private boolean parsed = false;
|
||||
|
||||
private final SharpStream source;
|
||||
private final SharpStream output;
|
||||
|
||||
private int sequenceCount = 0;
|
||||
private final int streamId;
|
||||
private byte packetFlag = FLAG_FIRST;
|
||||
|
||||
private WebMReader webm = null;
|
||||
private WebMTrack webmTrack = null;
|
||||
private Segment webmSegment = null;
|
||||
private Cluster webmCluster = null;
|
||||
private SimpleBlock webmBlock = null;
|
||||
|
||||
private long webmBlockLastTimecode = 0;
|
||||
private long webmBlockNearDuration = 0;
|
||||
|
||||
private short segmentTableSize = 0;
|
||||
private final byte[] segmentTable = new byte[255];
|
||||
private long segmentTableNextTimestamp = TIME_SCALE_NS;
|
||||
|
||||
private final int[] crc32Table = new int[256];
|
||||
|
||||
public OggFromWebMWriter(@NonNull final SharpStream source, @NonNull final SharpStream target) {
|
||||
if (!source.canRead() || !source.canRewind()) {
|
||||
throw new IllegalArgumentException("source stream must be readable and allows seeking");
|
||||
}
|
||||
if (!target.canWrite() || !target.canRewind()) {
|
||||
throw new IllegalArgumentException("output stream must be writable and allows seeking");
|
||||
}
|
||||
|
||||
this.source = source;
|
||||
this.output = target;
|
||||
|
||||
this.streamId = (int) System.currentTimeMillis();
|
||||
|
||||
populateCrc32Table();
|
||||
}
|
||||
|
||||
public boolean isDone() {
|
||||
return done;
|
||||
}
|
||||
|
||||
public boolean isParsed() {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
public WebMTrack[] getTracksFromSource() throws IllegalStateException {
|
||||
if (!parsed) {
|
||||
throw new IllegalStateException("source must be parsed first");
|
||||
}
|
||||
|
||||
return webm.getAvailableTracks();
|
||||
}
|
||||
|
||||
public void parseSource() throws IOException, IllegalStateException {
|
||||
if (done) {
|
||||
throw new IllegalStateException("already done");
|
||||
}
|
||||
if (parsed) {
|
||||
throw new IllegalStateException("already parsed");
|
||||
}
|
||||
|
||||
try {
|
||||
webm = new WebMReader(source);
|
||||
webm.parse();
|
||||
webmSegment = webm.getNextSegment();
|
||||
} finally {
|
||||
parsed = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void selectTrack(final int trackIndex) throws IOException {
|
||||
if (!parsed) {
|
||||
throw new IllegalStateException("source must be parsed first");
|
||||
}
|
||||
if (done) {
|
||||
throw new IOException("already done");
|
||||
}
|
||||
if (webmTrack != null) {
|
||||
throw new IOException("tracks already selected");
|
||||
}
|
||||
|
||||
switch (webm.getAvailableTracks()[trackIndex].kind) {
|
||||
case Audio:
|
||||
case Video:
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("the track must an audio or video stream");
|
||||
}
|
||||
|
||||
try {
|
||||
webmTrack = webm.selectTrack(trackIndex);
|
||||
} finally {
|
||||
parsed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
done = true;
|
||||
parsed = true;
|
||||
|
||||
webmTrack = null;
|
||||
webm = null;
|
||||
|
||||
if (!output.isClosed()) {
|
||||
output.flush();
|
||||
}
|
||||
|
||||
source.close();
|
||||
output.close();
|
||||
}
|
||||
|
||||
public void build() throws IOException {
|
||||
final float resolution;
|
||||
SimpleBlock bloq;
|
||||
final ByteBuffer header = ByteBuffer.allocate(27 + (255 * 255));
|
||||
final ByteBuffer page = ByteBuffer.allocate(64 * 1024);
|
||||
|
||||
header.order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
/* step 1: get the amount of frames per seconds */
|
||||
switch (webmTrack.kind) {
|
||||
case Audio:
|
||||
resolution = getSampleFrequencyFromTrack(webmTrack.bMetadata);
|
||||
if (resolution == 0f) {
|
||||
throw new RuntimeException("cannot get the audio sample rate");
|
||||
}
|
||||
break;
|
||||
case Video:
|
||||
// WARNING: untested
|
||||
if (webmTrack.defaultDuration == 0) {
|
||||
throw new RuntimeException("missing default frame time");
|
||||
}
|
||||
resolution = 1000f / ((float) webmTrack.defaultDuration
|
||||
/ webmSegment.info.timecodeScale);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("not implemented");
|
||||
}
|
||||
|
||||
/* step 2: create packet with code init data */
|
||||
if (webmTrack.codecPrivate != null) {
|
||||
addPacketSegment(webmTrack.codecPrivate.length);
|
||||
makePacketheader(0x00, header, webmTrack.codecPrivate);
|
||||
write(header);
|
||||
output.write(webmTrack.codecPrivate);
|
||||
}
|
||||
|
||||
/* step 3: create packet with metadata */
|
||||
final byte[] buffer = makeMetadata();
|
||||
if (buffer != null) {
|
||||
addPacketSegment(buffer.length);
|
||||
makePacketheader(0x00, header, buffer);
|
||||
write(header);
|
||||
output.write(buffer);
|
||||
}
|
||||
|
||||
/* step 4: calculate amount of packets */
|
||||
while (webmSegment != null) {
|
||||
bloq = getNextBlock();
|
||||
|
||||
if (bloq != null && addPacketSegment(bloq)) {
|
||||
final int pos = page.position();
|
||||
//noinspection ResultOfMethodCallIgnored
|
||||
bloq.data.read(page.array(), pos, bloq.dataSize);
|
||||
page.position(pos + bloq.dataSize);
|
||||
continue;
|
||||
}
|
||||
|
||||
// calculate the current packet duration using the next block
|
||||
double elapsedNs = webmTrack.codecDelay;
|
||||
|
||||
if (bloq == null) {
|
||||
packetFlag = FLAG_LAST; // note: if the flag is FLAG_CONTINUED, is changed
|
||||
elapsedNs += webmBlockLastTimecode;
|
||||
|
||||
if (webmTrack.defaultDuration > 0) {
|
||||
elapsedNs += webmTrack.defaultDuration;
|
||||
} else {
|
||||
// hardcoded way, guess the sample duration
|
||||
elapsedNs += webmBlockNearDuration;
|
||||
}
|
||||
} else {
|
||||
elapsedNs += bloq.absoluteTimeCodeNs;
|
||||
}
|
||||
|
||||
// get the sample count in the page
|
||||
elapsedNs = elapsedNs / TIME_SCALE_NS;
|
||||
elapsedNs = Math.ceil(elapsedNs * resolution);
|
||||
|
||||
// create header and calculate page checksum
|
||||
int checksum = makePacketheader((long) elapsedNs, header, null);
|
||||
checksum = calcCrc32(checksum, page.array(), page.position());
|
||||
|
||||
header.putInt(HEADER_CHECKSUM_OFFSET, checksum);
|
||||
|
||||
// dump data
|
||||
write(header);
|
||||
write(page);
|
||||
|
||||
webmBlock = bloq;
|
||||
}
|
||||
}
|
||||
|
||||
private int makePacketheader(final long granPos, @NonNull final ByteBuffer buffer,
|
||||
final byte[] immediatePage) {
|
||||
short length = HEADER_SIZE;
|
||||
|
||||
buffer.putInt(0x5367674f); // "OggS" binary string in little-endian
|
||||
buffer.put((byte) 0x00); // version
|
||||
buffer.put(packetFlag); // type
|
||||
|
||||
buffer.putLong(granPos); // granulate position
|
||||
|
||||
buffer.putInt(streamId); // bitstream serial number
|
||||
buffer.putInt(sequenceCount++); // page sequence number
|
||||
|
||||
buffer.putInt(0x00); // page checksum
|
||||
|
||||
buffer.put((byte) segmentTableSize); // segment table
|
||||
buffer.put(segmentTable, 0, segmentTableSize); // segment size
|
||||
|
||||
length += segmentTableSize;
|
||||
|
||||
clearSegmentTable(); // clear segment table for next header
|
||||
|
||||
int checksumCrc32 = calcCrc32(0x00, buffer.array(), length);
|
||||
|
||||
if (immediatePage != null) {
|
||||
checksumCrc32 = calcCrc32(checksumCrc32, immediatePage, immediatePage.length);
|
||||
buffer.putInt(HEADER_CHECKSUM_OFFSET, checksumCrc32);
|
||||
segmentTableNextTimestamp -= TIME_SCALE_NS;
|
||||
}
|
||||
|
||||
return checksumCrc32;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private byte[] makeMetadata() {
|
||||
if ("A_OPUS".equals(webmTrack.codecId)) {
|
||||
return new byte[]{
|
||||
0x4F, 0x70, 0x75, 0x73, 0x54, 0x61, 0x67, 0x73, // "OpusTags" binary string
|
||||
0x00, 0x00, 0x00, 0x00, // writing application string size (not present)
|
||||
0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags)
|
||||
};
|
||||
} else if ("A_VORBIS".equals(webmTrack.codecId)) {
|
||||
return new byte[]{
|
||||
0x03, // ¿¿¿???
|
||||
0x76, 0x6f, 0x72, 0x62, 0x69, 0x73, // "vorbis" binary string
|
||||
0x00, 0x00, 0x00, 0x00, // writing application string size (not present)
|
||||
0x00, 0x00, 0x00, 0x00 // additional tags count (zero means no tags)
|
||||
};
|
||||
}
|
||||
|
||||
// not implemented for the desired codec
|
||||
return null;
|
||||
}
|
||||
|
||||
private void write(final ByteBuffer buffer) throws IOException {
|
||||
output.write(buffer.array(), 0, buffer.position());
|
||||
buffer.position(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private SimpleBlock getNextBlock() throws IOException {
|
||||
SimpleBlock res;
|
||||
|
||||
if (webmBlock != null) {
|
||||
res = webmBlock;
|
||||
webmBlock = null;
|
||||
return res;
|
||||
}
|
||||
|
||||
if (webmSegment == null) {
|
||||
webmSegment = webm.getNextSegment();
|
||||
if (webmSegment == null) {
|
||||
return null; // no more blocks in the selected track
|
||||
}
|
||||
}
|
||||
|
||||
if (webmCluster == null) {
|
||||
webmCluster = webmSegment.getNextCluster();
|
||||
if (webmCluster == null) {
|
||||
webmSegment = null;
|
||||
return getNextBlock();
|
||||
}
|
||||
}
|
||||
|
||||
res = webmCluster.getNextSimpleBlock();
|
||||
if (res == null) {
|
||||
webmCluster = null;
|
||||
return getNextBlock();
|
||||
}
|
||||
|
||||
webmBlockNearDuration = res.absoluteTimeCodeNs - webmBlockLastTimecode;
|
||||
webmBlockLastTimecode = res.absoluteTimeCodeNs;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
private float getSampleFrequencyFromTrack(final byte[] bMetadata) {
|
||||
// hardcoded way
|
||||
final ByteBuffer buffer = ByteBuffer.wrap(bMetadata);
|
||||
|
||||
while (buffer.remaining() >= 6) {
|
||||
final int id = buffer.getShort() & 0xFFFF;
|
||||
if (id == 0x0000B584) {
|
||||
return buffer.getFloat();
|
||||
}
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
private void clearSegmentTable() {
|
||||
segmentTableNextTimestamp += TIME_SCALE_NS;
|
||||
packetFlag = FLAG_UNSET;
|
||||
segmentTableSize = 0;
|
||||
}
|
||||
|
||||
private boolean addPacketSegment(final SimpleBlock block) {
|
||||
final long timestamp = block.absoluteTimeCodeNs + webmTrack.codecDelay;
|
||||
|
||||
if (timestamp >= segmentTableNextTimestamp) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return addPacketSegment(block.dataSize);
|
||||
}
|
||||
|
||||
private boolean addPacketSegment(final int size) {
|
||||
if (size > 65025) {
|
||||
throw new UnsupportedOperationException("page size cannot be larger than 65025");
|
||||
}
|
||||
|
||||
int available = (segmentTable.length - segmentTableSize) * 255;
|
||||
final boolean extra = (size % 255) == 0;
|
||||
|
||||
if (extra) {
|
||||
// add a zero byte entry in the table
|
||||
// required to indicate the sample size is multiple of 255
|
||||
available -= 255;
|
||||
}
|
||||
|
||||
// check if possible add the segment, without overflow the table
|
||||
if (available < size) {
|
||||
return false; // not enough space on the page
|
||||
}
|
||||
|
||||
for (int seg = size; seg > 0; seg -= 255) {
|
||||
segmentTable[segmentTableSize++] = (byte) Math.min(seg, 255);
|
||||
}
|
||||
|
||||
if (extra) {
|
||||
segmentTable[segmentTableSize++] = 0x00;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void populateCrc32Table() {
|
||||
for (int i = 0; i < 0x100; i++) {
|
||||
int crc = i << 24;
|
||||
for (int j = 0; j < 8; j++) {
|
||||
final long b = crc >>> 31;
|
||||
crc <<= 1;
|
||||
crc ^= (int) (0x100000000L - b) & 0x04c11db7;
|
||||
}
|
||||
crc32Table[i] = crc;
|
||||
}
|
||||
}
|
||||
|
||||
private int calcCrc32(final int initialCrc, final byte[] buffer, final int size) {
|
||||
int crc = initialCrc;
|
||||
for (int i = 0; i < size; i++) {
|
||||
final int reg = (crc >>> 24) & 0xff;
|
||||
crc = (crc << 8) ^ crc32Table[reg ^ (buffer[i] & 0xff)];
|
||||
}
|
||||
|
||||
return crc;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import android.content.Context;
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
/**
|
||||
* Created by Chrsitian Schabesberger on 28.09.17.
|
||||
* Created by Christian Schabesberger on 28.09.17.
|
||||
* KioskTranslator.java is part of NewPipe.
|
||||
* <p>
|
||||
* NewPipe is free software: you can redistribute it and/or modify
|
||||
|
||||
@@ -141,7 +141,7 @@ public final class ListHelper {
|
||||
final SharedPreferences preferences
|
||||
= PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
// Load the prefered resolution otherwise the best available
|
||||
// Load the preferred resolution otherwise the best available
|
||||
String resolution = preferences != null
|
||||
? preferences.getString(context.getString(key), context.getString(value))
|
||||
: context.getString(R.string.best_resolution_key);
|
||||
@@ -161,7 +161,7 @@ public final class ListHelper {
|
||||
*
|
||||
* @param defaultResolution the default resolution to look for
|
||||
* @param bestResolutionKey key of the best resolution
|
||||
* @param defaultFormat the default fomat to look for
|
||||
* @param defaultFormat the default format to look for
|
||||
* @param videoStreams list of the video streams to check
|
||||
* @return index of the default resolution&format
|
||||
*/
|
||||
@@ -351,7 +351,7 @@ public final class ListHelper {
|
||||
* @param targetResolution the resolution to look for
|
||||
* @param targetFormat the format to look for
|
||||
* @param videoStreams the available video streams
|
||||
* @return the index of the prefered video stream
|
||||
* @return the index of the preferred video stream
|
||||
*/
|
||||
static int getVideoStreamIndex(final String targetResolution, final MediaFormat targetFormat,
|
||||
final List<VideoStream> videoStreams) {
|
||||
@@ -413,7 +413,7 @@ public final class ListHelper {
|
||||
* @param context Android app context
|
||||
* @param defaultResolution the default resolution
|
||||
* @param videoStreams the list of video streams to check
|
||||
* @return the index of the prefered video stream
|
||||
* @return the index of the preferred video stream
|
||||
*/
|
||||
private static int getDefaultResolutionWithDefaultFormat(final Context context,
|
||||
final String defaultResolution,
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.ocpsoft.prettytime.units.Decade;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.ListExtractor;
|
||||
import org.schabi.newpipe.extractor.localization.ContentCountry;
|
||||
import org.schabi.newpipe.ktx.OffsetDateTimeKt;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
@@ -30,7 +31,6 @@ import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.FormatStyle;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -314,7 +314,7 @@ public final class Localization {
|
||||
}
|
||||
|
||||
public static String relativeTime(final OffsetDateTime offsetDateTime) {
|
||||
return relativeTime(GregorianCalendar.from(offsetDateTime.toZonedDateTime()));
|
||||
return relativeTime(OffsetDateTimeKt.toCalendar(offsetDateTime));
|
||||
}
|
||||
|
||||
public static String relativeTime(final Calendar calendarTime) {
|
||||
|
||||
@@ -1,313 +1,313 @@
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.StreamingService;
|
||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.stream.StreamExtractor;
|
||||
import org.schabi.newpipe.extractor.stream.SubtitlesStream;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.nio.channels.ClosedByInterruptException;
|
||||
import java.util.List;
|
||||
|
||||
import us.shandian.giga.get.DownloadMission.HttpError;
|
||||
|
||||
import static us.shandian.giga.get.DownloadMission.ERROR_RESOURCE_GONE;
|
||||
|
||||
public class DownloadMissionRecover extends Thread {
|
||||
private static final String TAG = "DownloadMissionRecover";
|
||||
static final int mID = -3;
|
||||
|
||||
private final DownloadMission mMission;
|
||||
private final boolean mNotInitialized;
|
||||
|
||||
private final int mErrCode;
|
||||
|
||||
private HttpURLConnection mConn;
|
||||
private MissionRecoveryInfo mRecovery;
|
||||
private StreamExtractor mExtractor;
|
||||
|
||||
DownloadMissionRecover(DownloadMission mission, int errCode) {
|
||||
mMission = mission;
|
||||
mNotInitialized = mission.blocks == null && mission.current == 0;
|
||||
mErrCode = errCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (mMission.source == null) {
|
||||
mMission.notifyError(mErrCode, null);
|
||||
return;
|
||||
}
|
||||
|
||||
Exception err = null;
|
||||
int attempt = 0;
|
||||
|
||||
while (attempt++ < mMission.maxRetry) {
|
||||
try {
|
||||
tryRecover();
|
||||
return;
|
||||
} catch (InterruptedIOException | ClosedByInterruptException e) {
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
|
||||
// give up
|
||||
mMission.notifyError(mErrCode, err);
|
||||
}
|
||||
|
||||
private void tryRecover() throws ExtractionException, IOException, HttpError {
|
||||
if (mExtractor == null) {
|
||||
try {
|
||||
StreamingService svr = NewPipe.getServiceByUrl(mMission.source);
|
||||
mExtractor = svr.getStreamExtractor(mMission.source);
|
||||
mExtractor.fetchPage();
|
||||
} catch (ExtractionException e) {
|
||||
mExtractor = null;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// maybe the following check is redundant
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
|
||||
if (!mNotInitialized) {
|
||||
// set the current download url to null in case if the recovery
|
||||
// process is canceled. Next time start() method is called the
|
||||
// recovery will be executed, saving time
|
||||
mMission.urls[mMission.current] = null;
|
||||
|
||||
mRecovery = mMission.recoveryInfo[mMission.current];
|
||||
resolveStream();
|
||||
return;
|
||||
}
|
||||
|
||||
Log.w(TAG, "mission is not fully initialized, this will take a while");
|
||||
|
||||
try {
|
||||
for (; mMission.current < mMission.urls.length; mMission.current++) {
|
||||
mRecovery = mMission.recoveryInfo[mMission.current];
|
||||
|
||||
if (test()) continue;
|
||||
if (!mMission.running) return;
|
||||
|
||||
resolveStream();
|
||||
if (!mMission.running) return;
|
||||
|
||||
// before continue, check if the current stream was resolved
|
||||
if (mMission.urls[mMission.current] == null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
mMission.current = 0;
|
||||
}
|
||||
|
||||
mMission.writeThisToFile();
|
||||
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
|
||||
mMission.running = false;
|
||||
mMission.start();
|
||||
}
|
||||
|
||||
private void resolveStream() throws IOException, ExtractionException, HttpError {
|
||||
// FIXME: this getErrorMessage() always returns "video is unavailable"
|
||||
/*if (mExtractor.getErrorMessage() != null) {
|
||||
mMission.notifyError(mErrCode, new ExtractionException(mExtractor.getErrorMessage()));
|
||||
return;
|
||||
}*/
|
||||
|
||||
String url = null;
|
||||
|
||||
switch (mRecovery.getKind()) {
|
||||
case 'a':
|
||||
for (AudioStream audio : mExtractor.getAudioStreams()) {
|
||||
if (audio.average_bitrate == mRecovery.getDesiredBitrate() && audio.getFormat() == mRecovery.getFormat()) {
|
||||
url = audio.getUrl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'v':
|
||||
List<VideoStream> videoStreams;
|
||||
if (mRecovery.isDesired2())
|
||||
videoStreams = mExtractor.getVideoOnlyStreams();
|
||||
else
|
||||
videoStreams = mExtractor.getVideoStreams();
|
||||
for (VideoStream video : videoStreams) {
|
||||
if (video.resolution.equals(mRecovery.getDesired()) && video.getFormat() == mRecovery.getFormat()) {
|
||||
url = video.getUrl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
for (SubtitlesStream subtitles : mExtractor.getSubtitles(mRecovery.getFormat())) {
|
||||
String tag = subtitles.getLanguageTag();
|
||||
if (tag.equals(mRecovery.getDesired()) && subtitles.isAutoGenerated() == mRecovery.isDesired2()) {
|
||||
url = subtitles.getUrl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Unknown stream type");
|
||||
}
|
||||
|
||||
resolve(url);
|
||||
}
|
||||
|
||||
private void resolve(String url) throws IOException, HttpError {
|
||||
if (mRecovery.getValidateCondition() == null) {
|
||||
Log.w(TAG, "validation condition not defined, the resource can be stale");
|
||||
}
|
||||
|
||||
if (mMission.unknownLength || mRecovery.getValidateCondition() == null) {
|
||||
recover(url, false);
|
||||
return;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
////// Validate the http resource doing a range request
|
||||
/////////////////////
|
||||
try {
|
||||
mConn = mMission.openConnection(url, true, mMission.length - 10, mMission.length);
|
||||
mConn.setRequestProperty("If-Range", mRecovery.getValidateCondition());
|
||||
mMission.establishConnection(mID, mConn);
|
||||
|
||||
int code = mConn.getResponseCode();
|
||||
|
||||
switch (code) {
|
||||
case 200:
|
||||
case 413:
|
||||
// stale
|
||||
recover(url, true);
|
||||
return;
|
||||
case 206:
|
||||
// in case of validation using the Last-Modified date, check the resource length
|
||||
long[] contentRange = parseContentRange(mConn.getHeaderField("Content-Range"));
|
||||
boolean lengthMismatch = contentRange[2] != -1 && contentRange[2] != mMission.length;
|
||||
|
||||
recover(url, lengthMismatch);
|
||||
return;
|
||||
}
|
||||
|
||||
throw new HttpError(code);
|
||||
} finally {
|
||||
disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
private void recover(String url, boolean stale) {
|
||||
Log.i(TAG,
|
||||
String.format("recover() name=%s isStale=%s url=%s", mMission.storage.getName(), stale, url)
|
||||
);
|
||||
|
||||
mMission.urls[mMission.current] = url;
|
||||
|
||||
if (url == null) {
|
||||
mMission.urls = new String[0];
|
||||
mMission.notifyError(ERROR_RESOURCE_GONE, null);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mNotInitialized) return;
|
||||
|
||||
if (stale) {
|
||||
mMission.resetState(false, false, DownloadMission.ERROR_NOTHING);
|
||||
}
|
||||
|
||||
mMission.writeThisToFile();
|
||||
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
|
||||
mMission.running = false;
|
||||
mMission.start();
|
||||
}
|
||||
|
||||
private long[] parseContentRange(String value) {
|
||||
long[] range = new long[3];
|
||||
|
||||
if (value == null) {
|
||||
// this never should happen
|
||||
return range;
|
||||
}
|
||||
|
||||
try {
|
||||
value = value.trim();
|
||||
|
||||
if (!value.startsWith("bytes")) {
|
||||
return range;// unknown range type
|
||||
}
|
||||
|
||||
int space = value.lastIndexOf(' ') + 1;
|
||||
int dash = value.indexOf('-', space) + 1;
|
||||
int bar = value.indexOf('/', dash);
|
||||
|
||||
// start
|
||||
range[0] = Long.parseLong(value.substring(space, dash - 1));
|
||||
|
||||
// end
|
||||
range[1] = Long.parseLong(value.substring(dash, bar));
|
||||
|
||||
// resource length
|
||||
value = value.substring(bar + 1);
|
||||
if (value.equals("*")) {
|
||||
range[2] = -1;// unknown length received from the server but should be valid
|
||||
} else {
|
||||
range[2] = Long.parseLong(value);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
return range;
|
||||
}
|
||||
|
||||
private boolean test() {
|
||||
if (mMission.urls[mMission.current] == null) return false;
|
||||
|
||||
try {
|
||||
mConn = mMission.openConnection(mMission.urls[mMission.current], true, -1, -1);
|
||||
mMission.establishConnection(mID, mConn);
|
||||
|
||||
if (mConn.getResponseCode() == 200) return true;
|
||||
} catch (Exception e) {
|
||||
// nothing to do
|
||||
} finally {
|
||||
disconnect();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void disconnect() {
|
||||
try {
|
||||
try {
|
||||
mConn.getInputStream().close();
|
||||
} finally {
|
||||
mConn.disconnect();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// nothing to do
|
||||
} finally {
|
||||
mConn = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interrupt() {
|
||||
super.interrupt();
|
||||
if (mConn != null) disconnect();
|
||||
}
|
||||
}
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.StreamingService;
|
||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.stream.StreamExtractor;
|
||||
import org.schabi.newpipe.extractor.stream.SubtitlesStream;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.nio.channels.ClosedByInterruptException;
|
||||
import java.util.List;
|
||||
|
||||
import us.shandian.giga.get.DownloadMission.HttpError;
|
||||
|
||||
import static us.shandian.giga.get.DownloadMission.ERROR_RESOURCE_GONE;
|
||||
|
||||
public class DownloadMissionRecover extends Thread {
|
||||
private static final String TAG = "DownloadMissionRecover";
|
||||
static final int mID = -3;
|
||||
|
||||
private final DownloadMission mMission;
|
||||
private final boolean mNotInitialized;
|
||||
|
||||
private final int mErrCode;
|
||||
|
||||
private HttpURLConnection mConn;
|
||||
private MissionRecoveryInfo mRecovery;
|
||||
private StreamExtractor mExtractor;
|
||||
|
||||
DownloadMissionRecover(DownloadMission mission, int errCode) {
|
||||
mMission = mission;
|
||||
mNotInitialized = mission.blocks == null && mission.current == 0;
|
||||
mErrCode = errCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (mMission.source == null) {
|
||||
mMission.notifyError(mErrCode, null);
|
||||
return;
|
||||
}
|
||||
|
||||
Exception err = null;
|
||||
int attempt = 0;
|
||||
|
||||
while (attempt++ < mMission.maxRetry) {
|
||||
try {
|
||||
tryRecover();
|
||||
return;
|
||||
} catch (InterruptedIOException | ClosedByInterruptException e) {
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
|
||||
// give up
|
||||
mMission.notifyError(mErrCode, err);
|
||||
}
|
||||
|
||||
private void tryRecover() throws ExtractionException, IOException, HttpError {
|
||||
if (mExtractor == null) {
|
||||
try {
|
||||
StreamingService svr = NewPipe.getServiceByUrl(mMission.source);
|
||||
mExtractor = svr.getStreamExtractor(mMission.source);
|
||||
mExtractor.fetchPage();
|
||||
} catch (ExtractionException e) {
|
||||
mExtractor = null;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// maybe the following check is redundant
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
|
||||
if (!mNotInitialized) {
|
||||
// set the current download url to null in case if the recovery
|
||||
// process is canceled. Next time start() method is called the
|
||||
// recovery will be executed, saving time
|
||||
mMission.urls[mMission.current] = null;
|
||||
|
||||
mRecovery = mMission.recoveryInfo[mMission.current];
|
||||
resolveStream();
|
||||
return;
|
||||
}
|
||||
|
||||
Log.w(TAG, "mission is not fully initialized, this will take a while");
|
||||
|
||||
try {
|
||||
for (; mMission.current < mMission.urls.length; mMission.current++) {
|
||||
mRecovery = mMission.recoveryInfo[mMission.current];
|
||||
|
||||
if (test()) continue;
|
||||
if (!mMission.running) return;
|
||||
|
||||
resolveStream();
|
||||
if (!mMission.running) return;
|
||||
|
||||
// before continue, check if the current stream was resolved
|
||||
if (mMission.urls[mMission.current] == null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
mMission.current = 0;
|
||||
}
|
||||
|
||||
mMission.writeThisToFile();
|
||||
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
|
||||
mMission.running = false;
|
||||
mMission.start();
|
||||
}
|
||||
|
||||
private void resolveStream() throws IOException, ExtractionException, HttpError {
|
||||
// FIXME: this getErrorMessage() always returns "video is unavailable"
|
||||
/*if (mExtractor.getErrorMessage() != null) {
|
||||
mMission.notifyError(mErrCode, new ExtractionException(mExtractor.getErrorMessage()));
|
||||
return;
|
||||
}*/
|
||||
|
||||
String url = null;
|
||||
|
||||
switch (mRecovery.getKind()) {
|
||||
case 'a':
|
||||
for (AudioStream audio : mExtractor.getAudioStreams()) {
|
||||
if (audio.average_bitrate == mRecovery.getDesiredBitrate() && audio.getFormat() == mRecovery.getFormat()) {
|
||||
url = audio.getUrl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'v':
|
||||
List<VideoStream> videoStreams;
|
||||
if (mRecovery.isDesired2())
|
||||
videoStreams = mExtractor.getVideoOnlyStreams();
|
||||
else
|
||||
videoStreams = mExtractor.getVideoStreams();
|
||||
for (VideoStream video : videoStreams) {
|
||||
if (video.resolution.equals(mRecovery.getDesired()) && video.getFormat() == mRecovery.getFormat()) {
|
||||
url = video.getUrl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
for (SubtitlesStream subtitles : mExtractor.getSubtitles(mRecovery.getFormat())) {
|
||||
String tag = subtitles.getLanguageTag();
|
||||
if (tag.equals(mRecovery.getDesired()) && subtitles.isAutoGenerated() == mRecovery.isDesired2()) {
|
||||
url = subtitles.getUrl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Unknown stream type");
|
||||
}
|
||||
|
||||
resolve(url);
|
||||
}
|
||||
|
||||
private void resolve(String url) throws IOException, HttpError {
|
||||
if (mRecovery.getValidateCondition() == null) {
|
||||
Log.w(TAG, "validation condition not defined, the resource can be stale");
|
||||
}
|
||||
|
||||
if (mMission.unknownLength || mRecovery.getValidateCondition() == null) {
|
||||
recover(url, false);
|
||||
return;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
////// Validate the http resource doing a range request
|
||||
/////////////////////
|
||||
try {
|
||||
mConn = mMission.openConnection(url, true, mMission.length - 10, mMission.length);
|
||||
mConn.setRequestProperty("If-Range", mRecovery.getValidateCondition());
|
||||
mMission.establishConnection(mID, mConn);
|
||||
|
||||
int code = mConn.getResponseCode();
|
||||
|
||||
switch (code) {
|
||||
case 200:
|
||||
case 413:
|
||||
// stale
|
||||
recover(url, true);
|
||||
return;
|
||||
case 206:
|
||||
// in case of validation using the Last-Modified date, check the resource length
|
||||
long[] contentRange = parseContentRange(mConn.getHeaderField("Content-Range"));
|
||||
boolean lengthMismatch = contentRange[2] != -1 && contentRange[2] != mMission.length;
|
||||
|
||||
recover(url, lengthMismatch);
|
||||
return;
|
||||
}
|
||||
|
||||
throw new HttpError(code);
|
||||
} finally {
|
||||
disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
private void recover(String url, boolean stale) {
|
||||
Log.i(TAG,
|
||||
String.format("recover() name=%s isStale=%s url=%s", mMission.storage.getName(), stale, url)
|
||||
);
|
||||
|
||||
mMission.urls[mMission.current] = url;
|
||||
|
||||
if (url == null) {
|
||||
mMission.urls = new String[0];
|
||||
mMission.notifyError(ERROR_RESOURCE_GONE, null);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mNotInitialized) return;
|
||||
|
||||
if (stale) {
|
||||
mMission.resetState(false, false, DownloadMission.ERROR_NOTHING);
|
||||
}
|
||||
|
||||
mMission.writeThisToFile();
|
||||
|
||||
if (!mMission.running || super.isInterrupted()) return;
|
||||
|
||||
mMission.running = false;
|
||||
mMission.start();
|
||||
}
|
||||
|
||||
private long[] parseContentRange(String value) {
|
||||
long[] range = new long[3];
|
||||
|
||||
if (value == null) {
|
||||
// this never should happen
|
||||
return range;
|
||||
}
|
||||
|
||||
try {
|
||||
value = value.trim();
|
||||
|
||||
if (!value.startsWith("bytes")) {
|
||||
return range;// unknown range type
|
||||
}
|
||||
|
||||
int space = value.lastIndexOf(' ') + 1;
|
||||
int dash = value.indexOf('-', space) + 1;
|
||||
int bar = value.indexOf('/', dash);
|
||||
|
||||
// start
|
||||
range[0] = Long.parseLong(value.substring(space, dash - 1));
|
||||
|
||||
// end
|
||||
range[1] = Long.parseLong(value.substring(dash, bar));
|
||||
|
||||
// resource length
|
||||
value = value.substring(bar + 1);
|
||||
if (value.equals("*")) {
|
||||
range[2] = -1;// unknown length received from the server but should be valid
|
||||
} else {
|
||||
range[2] = Long.parseLong(value);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
return range;
|
||||
}
|
||||
|
||||
private boolean test() {
|
||||
if (mMission.urls[mMission.current] == null) return false;
|
||||
|
||||
try {
|
||||
mConn = mMission.openConnection(mMission.urls[mMission.current], true, -1, -1);
|
||||
mMission.establishConnection(mID, mConn);
|
||||
|
||||
if (mConn.getResponseCode() == 200) return true;
|
||||
} catch (Exception e) {
|
||||
// nothing to do
|
||||
} finally {
|
||||
disconnect();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void disconnect() {
|
||||
try {
|
||||
try {
|
||||
mConn.getInputStream().close();
|
||||
} finally {
|
||||
mConn.disconnect();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// nothing to do
|
||||
} finally {
|
||||
mConn = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interrupt() {
|
||||
super.interrupt();
|
||||
if (mConn != null) disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import static us.shandian.giga.get.DownloadMission.ERROR_HTTP_FORBIDDEN;
|
||||
* Single-threaded fallback mode
|
||||
*/
|
||||
public class DownloadRunnableFallback extends Thread {
|
||||
private static final String TAG = "DownloadRunnableFallbac";
|
||||
private static final String TAG = "DownloadRunnableFallback";
|
||||
|
||||
private final DownloadMission mMission;
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class FinishedMission extends Mission {
|
||||
|
||||
public FinishedMission() {
|
||||
}
|
||||
|
||||
public FinishedMission(@NonNull DownloadMission mission) {
|
||||
source = mission.source;
|
||||
length = mission.length;
|
||||
timestamp = mission.timestamp;
|
||||
kind = mission.kind;
|
||||
storage = mission.storage;
|
||||
}
|
||||
|
||||
}
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class FinishedMission extends Mission {
|
||||
|
||||
public FinishedMission() {
|
||||
}
|
||||
|
||||
public FinishedMission(@NonNull DownloadMission mission) {
|
||||
source = mission.source;
|
||||
length = mission.length;
|
||||
timestamp = mission.timestamp;
|
||||
kind = mission.kind;
|
||||
storage = mission.storage;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,64 +1,64 @@
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Calendar;
|
||||
|
||||
import us.shandian.giga.io.StoredFileHelper;
|
||||
|
||||
public abstract class Mission implements Serializable {
|
||||
private static final long serialVersionUID = 1L;// last bump: 27 march 2019
|
||||
|
||||
/**
|
||||
* Source url of the resource
|
||||
*/
|
||||
public String source;
|
||||
|
||||
/**
|
||||
* Length of the current resource
|
||||
*/
|
||||
public long length;
|
||||
|
||||
/**
|
||||
* creation timestamp (and maybe unique identifier)
|
||||
*/
|
||||
public long timestamp;
|
||||
|
||||
/**
|
||||
* pre-defined content type
|
||||
*/
|
||||
public char kind;
|
||||
|
||||
/**
|
||||
* The downloaded file
|
||||
*/
|
||||
public StoredFileHelper storage;
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the downloaded file
|
||||
*
|
||||
* @return {@code true] if and only if the file is successfully deleted, otherwise, {@code false}
|
||||
*/
|
||||
public boolean delete() {
|
||||
if (storage != null) return storage.delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate if this mission is deleted whatever is stored
|
||||
*/
|
||||
public transient boolean deleted = false;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(timestamp);
|
||||
return "[" + calendar.getTime().toString() + "] " + (storage.isInvalid() ? storage.getName() : storage.getUri());
|
||||
}
|
||||
}
|
||||
package us.shandian.giga.get;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Calendar;
|
||||
|
||||
import us.shandian.giga.io.StoredFileHelper;
|
||||
|
||||
public abstract class Mission implements Serializable {
|
||||
private static final long serialVersionUID = 1L;// last bump: 27 march 2019
|
||||
|
||||
/**
|
||||
* Source url of the resource
|
||||
*/
|
||||
public String source;
|
||||
|
||||
/**
|
||||
* Length of the current resource
|
||||
*/
|
||||
public long length;
|
||||
|
||||
/**
|
||||
* creation timestamp (and maybe unique identifier)
|
||||
*/
|
||||
public long timestamp;
|
||||
|
||||
/**
|
||||
* pre-defined content type
|
||||
*/
|
||||
public char kind;
|
||||
|
||||
/**
|
||||
* The downloaded file
|
||||
*/
|
||||
public StoredFileHelper storage;
|
||||
|
||||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the downloaded file
|
||||
*
|
||||
* @return {@code true] if and only if the file is successfully deleted, otherwise, {@code false}
|
||||
*/
|
||||
public boolean delete() {
|
||||
if (storage != null) return storage.delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate if this mission is deleted whatever is stored
|
||||
*/
|
||||
public transient boolean deleted = false;
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(timestamp);
|
||||
return "[" + calendar.getTime().toString() + "] " + (storage.isInvalid() ? storage.getName() : storage.getUri());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package us.shandian.giga.io;
|
||||
|
||||
public interface ProgressReport {
|
||||
|
||||
/**
|
||||
* Report the size of the new file
|
||||
*
|
||||
* @param progress the new size
|
||||
*/
|
||||
void report(long progress);
|
||||
package us.shandian.giga.io;
|
||||
|
||||
public interface ProgressReport {
|
||||
|
||||
/**
|
||||
* Report the size of the new file
|
||||
*
|
||||
* @param progress the new size
|
||||
*/
|
||||
void report(long progress);
|
||||
}
|
||||
@@ -1,44 +1,44 @@
|
||||
package us.shandian.giga.postprocessing;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.schabi.newpipe.streams.OggFromWebMWriter;
|
||||
import org.schabi.newpipe.streams.io.SharpStream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
class OggFromWebmDemuxer extends Postprocessing {
|
||||
|
||||
OggFromWebmDemuxer() {
|
||||
super(true, true, ALGORITHM_OGG_FROM_WEBM_DEMUXER);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean test(SharpStream... sources) throws IOException {
|
||||
ByteBuffer buffer = ByteBuffer.allocate(4);
|
||||
sources[0].read(buffer.array());
|
||||
|
||||
// youtube uses WebM as container, but the file extension (format suffix) is "*.opus"
|
||||
// check if the file is a webm/mkv file before proceed
|
||||
|
||||
switch (buffer.getInt()) {
|
||||
case 0x1a45dfa3:
|
||||
return true;// webm/mkv
|
||||
case 0x4F676753:
|
||||
return false;// ogg
|
||||
}
|
||||
|
||||
throw new UnsupportedOperationException("file not recognized, failed to demux the audio stream");
|
||||
}
|
||||
|
||||
@Override
|
||||
int process(SharpStream out, @NonNull SharpStream... sources) throws IOException {
|
||||
OggFromWebMWriter demuxer = new OggFromWebMWriter(sources[0], out);
|
||||
demuxer.parseSource();
|
||||
demuxer.selectTrack(0);
|
||||
demuxer.build();
|
||||
|
||||
return OK_RESULT;
|
||||
}
|
||||
}
|
||||
package us.shandian.giga.postprocessing;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.schabi.newpipe.streams.OggFromWebMWriter;
|
||||
import org.schabi.newpipe.streams.io.SharpStream;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
class OggFromWebmDemuxer extends Postprocessing {
|
||||
|
||||
OggFromWebmDemuxer() {
|
||||
super(true, true, ALGORITHM_OGG_FROM_WEBM_DEMUXER);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean test(SharpStream... sources) throws IOException {
|
||||
ByteBuffer buffer = ByteBuffer.allocate(4);
|
||||
sources[0].read(buffer.array());
|
||||
|
||||
// youtube uses WebM as container, but the file extension (format suffix) is "*.opus"
|
||||
// check if the file is a webm/mkv file before proceed
|
||||
|
||||
switch (buffer.getInt()) {
|
||||
case 0x1a45dfa3:
|
||||
return true;// webm/mkv
|
||||
case 0x4F676753:
|
||||
return false;// ogg
|
||||
}
|
||||
|
||||
throw new UnsupportedOperationException("file not recognized, failed to demux the audio stream");
|
||||
}
|
||||
|
||||
@Override
|
||||
int process(SharpStream out, @NonNull SharpStream... sources) throws IOException {
|
||||
OggFromWebMWriter demuxer = new OggFromWebMWriter(sources[0], out);
|
||||
demuxer.parseSource();
|
||||
demuxer.selectTrack(0);
|
||||
demuxer.build();
|
||||
|
||||
return OK_RESULT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,138 +1,138 @@
|
||||
package us.shandian.giga.ui.common;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.os.Handler;
|
||||
import android.view.View;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import us.shandian.giga.get.FinishedMission;
|
||||
import us.shandian.giga.get.Mission;
|
||||
import us.shandian.giga.service.DownloadManager;
|
||||
import us.shandian.giga.service.DownloadManager.MissionIterator;
|
||||
import us.shandian.giga.ui.adapter.MissionAdapter;
|
||||
|
||||
public class Deleter {
|
||||
private static final int TIMEOUT = 5000;// ms
|
||||
private static final int DELAY = 350;// ms
|
||||
private static final int DELAY_RESUME = 400;// ms
|
||||
|
||||
private Snackbar snackbar;
|
||||
private ArrayList<Mission> items;
|
||||
private boolean running = true;
|
||||
|
||||
private final Context mContext;
|
||||
private final MissionAdapter mAdapter;
|
||||
private final DownloadManager mDownloadManager;
|
||||
private final MissionIterator mIterator;
|
||||
private final Handler mHandler;
|
||||
private final View mView;
|
||||
|
||||
private final Runnable rShow;
|
||||
private final Runnable rNext;
|
||||
private final Runnable rCommit;
|
||||
|
||||
public Deleter(View v, Context c, MissionAdapter a, DownloadManager d, MissionIterator i, Handler h) {
|
||||
mView = v;
|
||||
mContext = c;
|
||||
mAdapter = a;
|
||||
mDownloadManager = d;
|
||||
mIterator = i;
|
||||
mHandler = h;
|
||||
|
||||
// use variables to know the reference of the lambdas
|
||||
rShow = this::show;
|
||||
rNext = this::next;
|
||||
rCommit = this::commit;
|
||||
|
||||
items = new ArrayList<>(2);
|
||||
}
|
||||
|
||||
public void append(Mission item) {
|
||||
mIterator.hide(item);
|
||||
items.add(0, item);
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
private void forget() {
|
||||
mIterator.unHide(items.remove(0));
|
||||
mAdapter.applyChanges();
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
private void show() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
pause();
|
||||
running = true;
|
||||
|
||||
mHandler.postDelayed(rNext, DELAY);
|
||||
}
|
||||
|
||||
private void next() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
String msg = mContext.getString(R.string.file_deleted).concat(":\n").concat(items.get(0).storage.getName());
|
||||
|
||||
snackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE);
|
||||
snackbar.setAction(R.string.undo, s -> forget());
|
||||
snackbar.setActionTextColor(Color.YELLOW);
|
||||
snackbar.show();
|
||||
|
||||
mHandler.postDelayed(rCommit, TIMEOUT);
|
||||
}
|
||||
|
||||
private void commit() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
while (items.size() > 0) {
|
||||
Mission mission = items.remove(0);
|
||||
if (mission.deleted) continue;
|
||||
|
||||
mIterator.unHide(mission);
|
||||
mDownloadManager.deleteMission(mission);
|
||||
|
||||
if (mission instanceof FinishedMission) {
|
||||
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (items.size() < 1) {
|
||||
pause();
|
||||
return;
|
||||
}
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
public void pause() {
|
||||
running = false;
|
||||
mHandler.removeCallbacks(rNext);
|
||||
mHandler.removeCallbacks(rShow);
|
||||
mHandler.removeCallbacks(rCommit);
|
||||
if (snackbar != null) snackbar.dismiss();
|
||||
}
|
||||
|
||||
public void resume() {
|
||||
if (running) return;
|
||||
mHandler.postDelayed(rShow, DELAY_RESUME);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
pause();
|
||||
|
||||
for (Mission mission : items) mDownloadManager.deleteMission(mission);
|
||||
items = null;
|
||||
}
|
||||
}
|
||||
package us.shandian.giga.ui.common;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.os.Handler;
|
||||
import android.view.View;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import us.shandian.giga.get.FinishedMission;
|
||||
import us.shandian.giga.get.Mission;
|
||||
import us.shandian.giga.service.DownloadManager;
|
||||
import us.shandian.giga.service.DownloadManager.MissionIterator;
|
||||
import us.shandian.giga.ui.adapter.MissionAdapter;
|
||||
|
||||
public class Deleter {
|
||||
private static final int TIMEOUT = 5000;// ms
|
||||
private static final int DELAY = 350;// ms
|
||||
private static final int DELAY_RESUME = 400;// ms
|
||||
|
||||
private Snackbar snackbar;
|
||||
private ArrayList<Mission> items;
|
||||
private boolean running = true;
|
||||
|
||||
private final Context mContext;
|
||||
private final MissionAdapter mAdapter;
|
||||
private final DownloadManager mDownloadManager;
|
||||
private final MissionIterator mIterator;
|
||||
private final Handler mHandler;
|
||||
private final View mView;
|
||||
|
||||
private final Runnable rShow;
|
||||
private final Runnable rNext;
|
||||
private final Runnable rCommit;
|
||||
|
||||
public Deleter(View v, Context c, MissionAdapter a, DownloadManager d, MissionIterator i, Handler h) {
|
||||
mView = v;
|
||||
mContext = c;
|
||||
mAdapter = a;
|
||||
mDownloadManager = d;
|
||||
mIterator = i;
|
||||
mHandler = h;
|
||||
|
||||
// use variables to know the reference of the lambdas
|
||||
rShow = this::show;
|
||||
rNext = this::next;
|
||||
rCommit = this::commit;
|
||||
|
||||
items = new ArrayList<>(2);
|
||||
}
|
||||
|
||||
public void append(Mission item) {
|
||||
mIterator.hide(item);
|
||||
items.add(0, item);
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
private void forget() {
|
||||
mIterator.unHide(items.remove(0));
|
||||
mAdapter.applyChanges();
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
private void show() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
pause();
|
||||
running = true;
|
||||
|
||||
mHandler.postDelayed(rNext, DELAY);
|
||||
}
|
||||
|
||||
private void next() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
String msg = mContext.getString(R.string.file_deleted).concat(":\n").concat(items.get(0).storage.getName());
|
||||
|
||||
snackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE);
|
||||
snackbar.setAction(R.string.undo, s -> forget());
|
||||
snackbar.setActionTextColor(Color.YELLOW);
|
||||
snackbar.show();
|
||||
|
||||
mHandler.postDelayed(rCommit, TIMEOUT);
|
||||
}
|
||||
|
||||
private void commit() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
while (items.size() > 0) {
|
||||
Mission mission = items.remove(0);
|
||||
if (mission.deleted) continue;
|
||||
|
||||
mIterator.unHide(mission);
|
||||
mDownloadManager.deleteMission(mission);
|
||||
|
||||
if (mission instanceof FinishedMission) {
|
||||
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (items.size() < 1) {
|
||||
pause();
|
||||
return;
|
||||
}
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
public void pause() {
|
||||
running = false;
|
||||
mHandler.removeCallbacks(rNext);
|
||||
mHandler.removeCallbacks(rShow);
|
||||
mHandler.removeCallbacks(rCommit);
|
||||
if (snackbar != null) snackbar.dismiss();
|
||||
}
|
||||
|
||||
public void resume() {
|
||||
if (running) return;
|
||||
mHandler.postDelayed(rShow, DELAY_RESUME);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
if (items.size() < 1) return;
|
||||
|
||||
pause();
|
||||
|
||||
for (Mission mission : items) mDownloadManager.deleteMission(mission);
|
||||
items = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:text="relative header"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:background="@color/black_settings_accent_color" />
|
||||
|
||||
</LinearLayout>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:text="relative header"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:background="@color/black_settings_accent_color" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="choose_browser">اختر المتصفح</string>
|
||||
<string name="dark_theme_title">داكن</string>
|
||||
<string name="default_audio_format_title">صيغة الصوت الإفتراضية</string>
|
||||
<string name="default_audio_format_title">صيغة الصوت الافتراضية</string>
|
||||
<string name="default_resolution_title">الدقة الافتراضية</string>
|
||||
<string name="detail_dislikes_img_view_description">عدم الإعجاب</string>
|
||||
<string name="detail_likes_img_view_description">الإعجابات</string>
|
||||
@@ -22,7 +22,7 @@
|
||||
<string name="err_dir_create">"لا يمكن إنشاء مجلد للتنزيلات في '%1$s'"</string>
|
||||
<string name="info_dir_created">إنشاء دليل التحميل \'%1$s\'</string>
|
||||
<string name="install">تثبيت</string>
|
||||
<string name="kore_not_found">تطبيق Kore غير موجود. هل تريد تنصيبه؟</string>
|
||||
<string name="kore_not_found">تطبيق Kore غير موجود. هل تريد تثبيته؟</string>
|
||||
<string name="light_theme_title">فاتح</string>
|
||||
<string name="list_thumbnail_view_description">صور معاينة الفيديو</string>
|
||||
<string name="network_error">خطأ في الشبكة</string>
|
||||
@@ -87,13 +87,13 @@
|
||||
<string name="controls_popup_title">نافذة المنبثقة</string>
|
||||
<string name="autoplay_by_calling_app_summary">تشغيل مقطع الفيديو عند إستدعاء NewPipe من تطبيق آخر</string>
|
||||
<string name="default_popup_resolution_title">الدقة الافتراضية لنوافذ المنبثقة</string>
|
||||
<string name="show_higher_resolutions_title">عرض أعلى جودة</string>
|
||||
<string name="show_higher_resolutions_summary">بعض الأجهزة فقط تدعم تشغيل مقاطع الفيديو 2K/4K</string>
|
||||
<string name="default_video_format_title">تنسيق الفيديو الافتراضي</string>
|
||||
<string name="show_higher_resolutions_title">عرض دقّات أعلى</string>
|
||||
<string name="show_higher_resolutions_summary">فقط بعض الأجهزة تدعم تشغيل مقاطع فيديو 2K/4K</string>
|
||||
<string name="default_video_format_title">صيغة الفيديو الافتراضية</string>
|
||||
<string name="popup_remember_size_pos_title">تذكر خصائص النوافذ المنبثقة</string>
|
||||
<string name="popup_remember_size_pos_summary">تذكر آخر مكان و حجم للنافذة المنبثقة</string>
|
||||
<string name="player_gesture_controls_title">اعدادات إيماءة المشغل</string>
|
||||
<string name="player_gesture_controls_summary">استخدم الإيماءات للتحكم في سطوع وصوت المشغل</string>
|
||||
<string name="player_gesture_controls_summary">استخدم الإيماءات للتحكم بسطوع ومستوى صوت المشغل</string>
|
||||
<string name="show_search_suggestions_title">اقتراحات البحث</string>
|
||||
<string name="show_search_suggestions_summary">عرض الاقتراحات عند البحث</string>
|
||||
<string name="enable_search_history_title">سجل البحث</string>
|
||||
@@ -157,7 +157,7 @@
|
||||
<string name="no_subscribers">ليس هناك مشترِكون</string>
|
||||
<plurals name="subscribers">
|
||||
<item quantity="zero">%s مشترك</item>
|
||||
<item quantity="one">%s مشترك</item>
|
||||
<item quantity="one">%s مشتركين</item>
|
||||
<item quantity="two">%s مشتركين</item>
|
||||
<item quantity="few">%s مشتركين</item>
|
||||
<item quantity="many">%s مشتركين</item>
|
||||
@@ -233,8 +233,8 @@
|
||||
<string name="title_activity_recaptcha">تحدي الكابتشا</string>
|
||||
<string name="hold_to_append">ضغط مطول للإدراج الى قائمة الانتظار</string>
|
||||
<plurals name="views">
|
||||
<item quantity="zero">%s مشاهدة</item>
|
||||
<item quantity="one">%s مشاهد</item>
|
||||
<item quantity="zero">%s مشاهد</item>
|
||||
<item quantity="one">%s مشاهدة</item>
|
||||
<item quantity="two">%s مشاهدة</item>
|
||||
<item quantity="few">%s مشاهدة</item>
|
||||
<item quantity="many">%s مشاهدة</item>
|
||||
@@ -268,8 +268,8 @@
|
||||
<string name="no_player_found_toast">لم يتم العثور على مشغل بث (يمكنك تثبيت VLC لتشغيله).</string>
|
||||
<string name="import_data_title">استيراد قاعدة البيانات</string>
|
||||
<string name="export_data_title">تصدير قاعدة البيانات</string>
|
||||
<string name="import_data_summary">يتجاوز السجل والاشتراكات الحالية</string>
|
||||
<string name="export_data_summary">تصدير السجل، الإشتراكات وقوائم التشغيل</string>
|
||||
<string name="import_data_summary">يلغي السجل الحالي والاشتراكات وقوائم التشغيل والإعدادات (اختياريًا)</string>
|
||||
<string name="export_data_summary">تصدير قوائم تشغيل, الاشتراكات, والإعدادات</string>
|
||||
<string name="show_info">عرض المعلومات</string>
|
||||
<string name="controls_add_to_playlist_title">إضافة إلى</string>
|
||||
<string name="settings_category_debug_title">تحليل</string>
|
||||
@@ -327,7 +327,7 @@
|
||||
<string name="metadata_cache_wipe_summary">إزالة جميع بيانات صفحات الويب المخزنة مؤقتًا</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">تم محو ذاكرة التخزين المؤقت للبيانات الوصفية</string>
|
||||
<string name="auto_queue_title">وضع البث القادم تلقائيا في قائمة الإنتظار</string>
|
||||
<string name="auto_queue_summary">استمر في إنهاء قائمة انتظار التشغيل (غير-المتكررة) من خلال إلحاق تدفق ذي صلة</string>
|
||||
<string name="auto_queue_summary">استمر في إنهاء قائمة انتظار التشغيل (الغير المتكررة) من خلال إلحاق بث ذي صلة</string>
|
||||
<string name="set_as_playlist_thumbnail">إضافة صورة مصغرة إلى قائمة التشغيل</string>
|
||||
<string name="bookmark_playlist">تفضيل قائمة التشغيل</string>
|
||||
<string name="playlist_thumbnail_change_success">تم تغيير الصورة المصغرة لقائمة التشغيل.</string>
|
||||
@@ -413,11 +413,11 @@
|
||||
<string name="tab_choose">اختر علامة التبويب</string>
|
||||
<string name="volume_gesture_control_summary">استخدم إيماءات التحكم في صوت المشغل</string>
|
||||
<string name="brightness_gesture_control_title">التحكم بالإيماءات السطوع</string>
|
||||
<string name="brightness_gesture_control_summary">استخدام الإيماءات للتحكم في سطوع المشغل</string>
|
||||
<string name="brightness_gesture_control_summary">استخدام الإيماءات للتحكم بسطوع المشغل</string>
|
||||
<string name="settings_category_updates_title">التحديثات</string>
|
||||
<string name="file_deleted">تم حذف الملف</string>
|
||||
<string name="app_update_notification_channel_name">تتبيه تحديث التطبيق</string>
|
||||
<string name="volume_gesture_control_title">إيماءة التحكم بالصوت</string>
|
||||
<string name="volume_gesture_control_title">إيماء التحكم بالصوت</string>
|
||||
<string name="events">الأحداث</string>
|
||||
<string name="app_update_notification_channel_description">الإخطارات لإصدار NewPipe الجديد</string>
|
||||
<string name="download_to_sdcard_error_title">وحدة التخزين الخارجية غير متوفرة</string>
|
||||
@@ -675,16 +675,18 @@
|
||||
<string name="notification_action_2_title">زر الإجراء الثالث</string>
|
||||
<string name="notification_action_1_title">زر الإجراء الثاني</string>
|
||||
<string name="notification_action_0_title">زر الإجراء الأول</string>
|
||||
<string name="notification_scale_to_square_image_summary">قياس الصورة المصغرة للفيديو المعروض في الإشعار من 16: 9 إلى 1: 1 نسبة العرض إلى الارتفاع (قد يؤدي إلى تشوهات)</string>
|
||||
<string name="notification_scale_to_square_image_title">مقياس الصورة المصغرة إلى نسبة عرض إلى ارتفاع 1: 1</string>
|
||||
<string name="notification_scale_to_square_image_summary">قياس الصورة المصغرة للفيديو المعروض في الإشعار من 16:9 إلى 1:1 نسبة العرض إلى الارتفاع (قد يؤدي إلى تشوهات)</string>
|
||||
<string name="notification_scale_to_square_image_title">مقياس الصورة المصغرة إلى نسبة عرض إلى ارتفاع 1:1</string>
|
||||
<string name="clear_cookie_summary">امسح ملفات تعريف الارتباط التي يخزنها NewPipe عند حل reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">تم مسح ملفات تعريف الارتباط reCAPTCHA</string>
|
||||
<string name="clear_cookie_title">امسح ملفات تعريف الارتباط reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">يوفر YouTube \"وضع تقييد المحتوى\" الذي يخفي المحتوى المحتمل للكبار.</string>
|
||||
<string name="show_age_restricted_content_summary">عرض المحتوى الذي يُحتمل أن يكون غير مناسب للأطفال لأن له حدًا عمريًا (مثل 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">يوفر YouTube \"وضع تقييد المحتوى\" الذي يخفي المحتوى المحتمل للكبار</string>
|
||||
<string name="show_age_restricted_content_summary">عرض المحتوى الذي يُحتمل أن يكون غير مناسب للأطفال لأن له حدًا عمريًا (مثل 18+)</string>
|
||||
<string name="show_memory_leaks">إظهار تسرب الذاكرة</string>
|
||||
<string name="enqueued">قائمة الانتظار</string>
|
||||
<string name="enqueue_stream">قائمة الانتظار</string>
|
||||
<string name="notification_colorize_summary">اجعل أندرويد يخصص لون الإشعار وفقا للون الرئيسي في الصورة المصغرة (لاحظ أن هذا غير متوفر على جميع الأجهزة</string>
|
||||
<string name="notification_colorize_summary">اجعل أندرويد يخصص لون الإشعار وفقا للّون الرئيسي في الصورة المصغرة (لاحظ أن هذا غير متوفر على جميع الأجهزة)</string>
|
||||
<string name="notification_colorize_title">تلوين الاشعارات</string>
|
||||
<string name="show_thumbnail_summary">إظهار الصورة المصغرة على شاشة القفل كخلفية وإخطارات داخلية</string>
|
||||
<string name="show_thumbnail_title">إظهار الصورة المصغرة</string>
|
||||
</resources>
|
||||
@@ -1,20 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="view_count_text">%1$s visualizaciones</string>
|
||||
<string name="view_count_text">%1$s vistes</string>
|
||||
<string name="upload_date_text">Espublizóse\'l %1$s</string>
|
||||
<string name="cancel">Encaboxar</string>
|
||||
<string name="open_in_browser">Abrir nun restolador web</string>
|
||||
<string name="open_in_browser">Abrir nun restolador</string>
|
||||
<string name="share">Compartir</string>
|
||||
<string name="settings">Axustes</string>
|
||||
<string name="did_you_mean">¿Quixesti dicir %1$s\?</string>
|
||||
<string name="did_you_mean">¿Quxesti dicir «%1$s»\?</string>
|
||||
<string name="use_external_video_player_title">Usar un reproductor esternu de videu</string>
|
||||
<string name="use_external_audio_player_title">Usar un reproductor esternu d\'audiu</string>
|
||||
<string name="default_resolution_title">Resolución predeterminada</string>
|
||||
<string name="play_with_kodi_title">Reproducir en Kodi</string>
|
||||
<string name="show_play_with_kodi_title">Amosar la opción «Reproducir en Kodi»</string>
|
||||
<string name="show_play_with_kodi_summary">Amuesa una opción pa reproducir un videu pel centru multimedia Kodi</string>
|
||||
<string name="show_play_with_kodi_summary">Amuesa una opción pa reproducir vídeos pel centru multimedia Kodi</string>
|
||||
<string name="play_audio">Audiu</string>
|
||||
<string name="default_audio_format_title">Formatu predetermináu d\'audiu</string>
|
||||
<string name="default_audio_format_title">Formatu d\'audiu predetermináu</string>
|
||||
<string name="theme_title">Estilu</string>
|
||||
<string name="dark_theme_title">Escuridá</string>
|
||||
<string name="light_theme_title">Claridá</string>
|
||||
@@ -22,20 +22,20 @@
|
||||
<string name="settings_category_video_audio_title">Videu y audiu</string>
|
||||
<string name="settings_category_appearance_title">Aspeutu</string>
|
||||
<string name="content">Conteníu</string>
|
||||
<string name="show_age_restricted_content_title">Conteníu torgáu pola edá</string>
|
||||
<string name="show_age_restricted_content_title">Amosar el conteníu torgáu pola edá</string>
|
||||
<string name="duration_live">En direuto</string>
|
||||
<string name="general_error">Fallu</string>
|
||||
<string name="could_not_load_thumbnails">Nun pudieron cargase toles miniatures</string>
|
||||
<string name="youtube_signature_deobfuscation_error">Nun pudo descifrase la robla de la URL del videu</string>
|
||||
<string name="youtube_signature_deobfuscation_error">Nun pudo sabese la robla de la URL del videu</string>
|
||||
<string name="parsing_error">Nun pudo analizase\'l sitiu web</string>
|
||||
<string name="live_streams_not_supported">Entá nun se sofiten los fluxos en direuto</string>
|
||||
<string name="could_not_get_stream">Nun pudo consiguise dengún fluxu</string>
|
||||
<string name="sorry_string">Perdona pero eso nun debió asoceder.</string>
|
||||
<string name="error_snackbar_message">Perdona pero asocedió dalgún fallu.</string>
|
||||
<string name="live_streams_not_supported">Los fluxos en direuto entá nun se sofiten</string>
|
||||
<string name="could_not_get_stream">Nun pudo consiguise nengún fluxu</string>
|
||||
<string name="sorry_string">Buff... Esto nun debió asoceder.</string>
|
||||
<string name="error_snackbar_message">Perdona mas asocedió daqué malo.</string>
|
||||
<string name="what_device_headline">Información:</string>
|
||||
<string name="error_details_headline">Detalles:</string>
|
||||
<string name="detail_likes_img_view_description">Préstames</string>
|
||||
<string name="use_tor_title">Usar TOR</string>
|
||||
<string name="use_tor_title">Usar Tor</string>
|
||||
<string name="info_dir_created">Creóse\'l direutoriu de descarga «%1$s»</string>
|
||||
<string name="video">Videu</string>
|
||||
<string name="audio">Audiu</string>
|
||||
@@ -48,73 +48,73 @@
|
||||
<string name="msg_wait">Espera…</string>
|
||||
<string name="msg_copied">Copióse al cartafueyu</string>
|
||||
<string name="detail_dislikes_img_view_description">Tarrezmes</string>
|
||||
<string name="default_video_format_title">Formatu predetermináu de videu</string>
|
||||
<string name="default_video_format_title">Formatu de videu predetermináu</string>
|
||||
<string name="black_theme_title">Prietu</string>
|
||||
<string name="channel">Canal</string>
|
||||
<string name="yes">Sí</string>
|
||||
<string name="short_thousand">Mil</string>
|
||||
<string name="short_million">Mill.</string>
|
||||
<string name="short_billion">Mil mill.</string>
|
||||
<string name="msg_popup_permission">Precísase esti permisu
|
||||
\np\'abrir nel mou ventanu</string>
|
||||
<string name="short_thousand">mil</string>
|
||||
<string name="short_million">mill.</string>
|
||||
<string name="short_billion">mil mill.</string>
|
||||
<string name="msg_popup_permission">Precísase esti permisu p\'abrir
|
||||
\nnel mou ventanu</string>
|
||||
<string name="title_activity_recaptcha">Retu de reCAPTCHA</string>
|
||||
<string name="recaptcha_request_toast">Solicitóse\'l retu de reCAPTCHA</string>
|
||||
<string name="recaptcha_request_toast">Solicitóse un retu de reCAPTCHA</string>
|
||||
<string name="controls_background_title">En segundu planu</string>
|
||||
<string name="controls_popup_title">Ventanu</string>
|
||||
<string name="default_popup_resolution_title">Resolución predeterminada del ventanu</string>
|
||||
<string name="show_higher_resolutions_title">Amosar resoluciones más altes</string>
|
||||
<string name="show_higher_resolutions_summary">Namái dalgunos preseos puen reproducir vídeos en 2K/4K</string>
|
||||
<string name="show_higher_resolutions_summary">Namás dalgunos preseos puen reproducir videos en 2K/4K</string>
|
||||
<string name="clear">Llimpiar</string>
|
||||
<string name="use_external_video_player_summary">Quita l\'audiu en dalgunes resoluciones</string>
|
||||
<string name="player_gesture_controls_summary">Usa xestos pa controlar el brilléu y volume del reproductor</string>
|
||||
<string name="show_search_suggestions_title">Guetar suxerencies</string>
|
||||
<string name="show_search_suggestions_summary">Amuesa suxerencies al guetar</string>
|
||||
<string name="player_gesture_controls_summary">Usa xestos pa controlar el volume y brillu del reproductor</string>
|
||||
<string name="show_search_suggestions_title">Suxerencies de busca</string>
|
||||
<string name="show_search_suggestions_summary">Amosar suxerencies al buscar</string>
|
||||
<string name="subscribe_button_title">Soscribise</string>
|
||||
<string name="subscription_update_failed">Nun pudo anovase la soscripción</string>
|
||||
<string name="tab_subscriptions">Soscripciones</string>
|
||||
<string name="fragment_feed_title">Novedaes</string>
|
||||
<string name="enable_search_history_title">Historial de gueta</string>
|
||||
<string name="resume_on_audio_focus_gain_title"/>
|
||||
<string name="resume_on_audio_focus_gain_summary">Sigue cola reproducción dempués de les interrupciones (llamaes telefóniques, por exemplu)</string>
|
||||
<string name="enable_search_history_title">Historial de busques</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Siguir cola reproducción</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Sigue cola reproducción dempués de les interrupciones (por exemplu, llamaes)</string>
|
||||
<string name="settings_category_player_title">Reproductor</string>
|
||||
<string name="settings_category_player_behavior_title">Comportamientu</string>
|
||||
<string name="settings_category_history_title">Historial y caché</string>
|
||||
<string name="best_resolution">La meyor resolución</string>
|
||||
<string name="notification_channel_name">Avisu de NewPipe</string>
|
||||
<string name="notification_channel_name">Avisu permanente de NewPipe</string>
|
||||
<string name="search_no_results">Nun hai resultaos</string>
|
||||
<string name="empty_subscription_feed_subtitle">Equí nun hai más que grillos</string>
|
||||
<plurals name="subscribers">
|
||||
<item quantity="one">%s soscriptor</item>
|
||||
<item quantity="other">%s soscriptores</item>
|
||||
</plurals>
|
||||
<string name="no_views">Nun hai visualizaciones</string>
|
||||
<string name="no_views">Nun hai vistes</string>
|
||||
<plurals name="views">
|
||||
<item quantity="one">%s visualización</item>
|
||||
<item quantity="other">%s visualizaciones</item>
|
||||
<item quantity="one">%s vista</item>
|
||||
<item quantity="other">%s vistes</item>
|
||||
</plurals>
|
||||
<string name="settings_category_downloads_title">Descarga</string>
|
||||
<string name="settings_file_charset_title">Caráuteres almitíos nos nomes de ficheros</string>
|
||||
<string name="settings_file_charset_title">Caráuteres permitíos nos nomes de los ficheros</string>
|
||||
<string name="charset_letters_and_digits">Lletres y díxitos</string>
|
||||
<string name="charset_most_special_characters">La mayoría de caráuteres especiales</string>
|
||||
<string name="title_activity_about">Tocante a NewPipe</string>
|
||||
<string name="action_settings">Axustes</string>
|
||||
<string name="action_about">Tocante a</string>
|
||||
<string name="title_licenses">Llicencies de terceros</string>
|
||||
<string name="copyright" formatted="true">© %1$s por %2$s so %3$s</string>
|
||||
<string name="copyright" formatted="true">© %1$s por %2$s baxo %3$s</string>
|
||||
<string name="error_unable_to_load_license">Nun pudo cargase la llicencia</string>
|
||||
<string name="tab_about">Tocante a</string>
|
||||
<string name="tab_contributors">Collaboradores</string>
|
||||
<string name="tab_licenses">Llicencies</string>
|
||||
<string name="view_on_github">Ver en GitHub</string>
|
||||
<string name="app_license_title">Llicencia de NewPipe</string>
|
||||
<string name="contribution_encouragement">Si sabes traducir, quies encuriosar el códigu, amestar carauteríques o proponer cambeos nel diseñu, vamos agradecételo siempres. ¡Cuánto más, meyor!</string>
|
||||
<string name="read_full_license">Lleer la llicencia</string>
|
||||
<string name="contribution_encouragement">Si tienes idees, quies traducir, facer dalgún cambéu nel diseñu, acuriosar poco o muncho\'l códigu... Agradecemos l\'ayuda. ¡Cuanto más se faiga, meyor!</string>
|
||||
<string name="read_full_license">Lleer</string>
|
||||
<string name="contribution_title">Collaboración</string>
|
||||
<string name="title_activity_history">Historial</string>
|
||||
<string name="title_history_view">Vióse</string>
|
||||
<string name="action_history">Historial</string>
|
||||
<string name="history_empty">L\'historial ta baleru</string>
|
||||
<string name="delete_item_search_history">¿Quies desaniciar esti elementu del historial de gueta\?</string>
|
||||
<string name="delete_item_search_history">¿Quies desaniciar esti elementu del historial de busques\?</string>
|
||||
<string name="play_all">Reproducir too</string>
|
||||
<string name="player_stream_failure">Nun pudo reproducise esti fluxu</string>
|
||||
<string name="player_unrecoverable_failure">Asocedió un fallu irrecuperable del reproductor</string>
|
||||
@@ -123,14 +123,14 @@
|
||||
<string name="select_a_kiosk">Esbilla d\'un quioscu</string>
|
||||
<string name="kiosk">Quioscu</string>
|
||||
<string name="trending">Tendencies</string>
|
||||
<string name="top_50">Destácase</string>
|
||||
<string name="top_50">Los 50 destacaos</string>
|
||||
<string name="play_queue_stream_detail">Detalles</string>
|
||||
<string name="new_and_hot">Novedaes</string>
|
||||
<string name="new_and_hot">Novedaes destacaes</string>
|
||||
<string name="unknown_content">[Desconozse]</string>
|
||||
<string name="start_here_on_background">Reproducir en segundu planu</string>
|
||||
<string name="start_here_on_popup"></string>
|
||||
<string name="start_here_on_popup">Reproducir nun ventanu</string>
|
||||
<string name="donation_title">Donación</string>
|
||||
<string name="donation_encouragement"/>
|
||||
<string name="donation_encouragement">NewPipe ta desendolcáu por xente voluntario que pasa\'l tiempu llibre ufriéndote la meyor esperiencia d\'usuariu. Devolvi\'l favor p\'ayudar a los desendolcadores p\'ameyorar NewPipe tovía más mentanto esfruten d\'una taza de café.</string>
|
||||
<string name="give_back">Donar</string>
|
||||
<string name="website_title">Sitiu web</string>
|
||||
<string name="website_encouragement">Visita\'l sitiu web de NewPipe pa más información y noticies.</string>
|
||||
@@ -138,43 +138,43 @@
|
||||
<string name="always">Siempres</string>
|
||||
<string name="import_data_title">Importar una base de datos</string>
|
||||
<string name="export_data_title">Esportar la base de datos</string>
|
||||
<string name="import_data_summary">Anula l\'historial y les soscripciones actuales</string>
|
||||
<string name="export_data_summary">Esporta l\'historial, les soscripciones y llistes de reproducción.</string>
|
||||
<string name="invalid_url_toast">URL nun ye válida</string>
|
||||
<string name="import_data_summary">Anula l\'historial, les soscripciones, les llistes de reproducción y (opcionalmente) los axustes actuales</string>
|
||||
<string name="export_data_summary">Esporta l\'historial, les soscripciones, les llistes de reproducción y los axustes</string>
|
||||
<string name="invalid_url_toast">La URL nun ye válida</string>
|
||||
<string name="override_current_data">Esto va anular la configuración actual.</string>
|
||||
<string name="show_info">Amosar la información</string>
|
||||
<string name="tab_bookmarks">Llistes de reproducción</string>
|
||||
<string name="tab_bookmarks">Llistes en marcadores</string>
|
||||
<string name="create">Crear</string>
|
||||
<string name="dismiss">Escartar</string>
|
||||
<string name="delete_all_history_prompt">¿De xuru que quies desaniciar tolos elementos del historial\?</string>
|
||||
<string name="drawer_header_action_paceholder_text">Equí va apaecer dalgo ceo ;D</string>
|
||||
<string name="create_playlist">Llista nueva de repoducción</string>
|
||||
<string name="drawer_header_action_paceholder_text">Equí va apaecer daqué pronto ;D</string>
|
||||
<string name="create_playlist">Llista de reproducción nueva</string>
|
||||
<string name="name">Nome</string>
|
||||
<string name="append_playlist">Amestar a una llista de repoducción</string>
|
||||
<string name="delete_playlist_prompt">¿Desaniciar esta llista de reproducción\?</string>
|
||||
<string name="append_playlist">Amestar a una llista de reproducción</string>
|
||||
<string name="delete_playlist_prompt">¿Desanicair esta llista de reproducción\?</string>
|
||||
<string name="playlist_delete_failure">Nun pudo desaniciase la llista de reproducción.</string>
|
||||
<string name="caption_none">Ensin sotítulos</string>
|
||||
<string name="resize_fit">Axustar</string>
|
||||
<string name="resize_fill">Rellenar</string>
|
||||
<string name="resize_zoom">Zoom</string>
|
||||
<string name="file">Ficheru</string>
|
||||
<string name="invalid_file">El ficheru nun esiste o falta\'l permisu d\'escritura o llectura</string>
|
||||
<string name="file">FIcheru</string>
|
||||
<string name="invalid_file">El ficheru nun esiste o a l\'aplicación fálta-y el permisu de llectura/escritura</string>
|
||||
<string name="error_occurred_detail">Asocedió un fallu: %1$s</string>
|
||||
<string name="import_export_title">Importación/Esportación</string>
|
||||
<string name="import_ongoing">Importando…</string>
|
||||
<string name="export_ongoing">Esportando…</string>
|
||||
<string name="subscriptions_export_unsuccessful">Nun pudieron esportase les soscripciones</string>
|
||||
<string name="preferred_open_action_settings_title">Aición preferida d\'apertura</string>
|
||||
<string name="import_settings">¿Quies importar los axustes tamién\?</string>
|
||||
<string name="read_privacy_policy">Lleer la política de privacidá</string>
|
||||
<string name="preferred_open_action_settings_title">Aición d\'apertura preferida</string>
|
||||
<string name="import_settings">¿Quies tamién importar los axustes\?</string>
|
||||
<string name="read_privacy_policy">Lleer</string>
|
||||
<string name="channels">Canales</string>
|
||||
<string name="playlists">Llistes de reproducción</string>
|
||||
<string name="tracks">Pistes</string>
|
||||
<string name="users">Usuarios</string>
|
||||
<string name="tab_new">Llingüeta nueva</string>
|
||||
<string name="volume_gesture_control_summary">Usa xestos pa controlar el volume del reproductor</string>
|
||||
<string name="brightness_gesture_control_summary">Usa xestos pa controlar el brilléu del reproductor</string>
|
||||
<string name="restore_defaults">Reafitar</string>
|
||||
<string name="brightness_gesture_control_summary">Usa xestos pa controlar el brillu del reproductor</string>
|
||||
<string name="restore_defaults">Reafitamientu de valores</string>
|
||||
<string name="subscribers_count_not_available">El númberu de soscriptores nun ta disponible</string>
|
||||
<string name="selection">Esbilla</string>
|
||||
<string name="updates_setting_title">Anovamientos</string>
|
||||
@@ -184,10 +184,10 @@
|
||||
<string name="missions_header_finished">Finó</string>
|
||||
<string name="download_failed">Falló la descarga</string>
|
||||
<string name="download_already_running">Hai una descarga en cursu con esti nome</string>
|
||||
<string name="error_path_creation">Nun pue crease la carpeta de destín</string>
|
||||
<string name="error_path_creation">La carpeta de destín nun pue crease</string>
|
||||
<string name="error_ssl_exception">Nun pudo afitase una conexón segura</string>
|
||||
<string name="error_connect_host">Nun pue coneutase col sirvidor</string>
|
||||
<string name="max_retry_msg">Reintentos máximos</string>
|
||||
<string name="error_connect_host">Nun pues coneutate al sirvidor</string>
|
||||
<string name="max_retry_msg">Intentos máximos</string>
|
||||
<string name="events">Eventos</string>
|
||||
<string name="conferences">Conferencies</string>
|
||||
<string name="autoplay_title">Reproducción automática</string>
|
||||
@@ -195,50 +195,52 @@
|
||||
<string name="missing_file">El ficheru movióse o desanicióse</string>
|
||||
<string name="overwrite_unrelated_warning">Yá esiste un ficheru con esti nome</string>
|
||||
<string name="overwrite_finished_warning">Yá esiste un ficheru baxáu con esti nome</string>
|
||||
<string name="overwrite_failed">nun pue sobrescribise\'l ficheru</string>
|
||||
<string name="overwrite_failed">nun pue sobrecribise\'l ficheru</string>
|
||||
<string name="download_already_pending">Hai una descarga pendiente con esti nome</string>
|
||||
<string name="error_insufficient_storage">Escosó l\'espaciu del preséu</string>
|
||||
<string name="error_insufficient_storage">Nun queda espaciu nel preséu</string>
|
||||
<string name="error_timeout">Escosó\'l tiempu d\'espera de la conexón</string>
|
||||
<string name="subscriptions_import_unsuccessful">Nun pudieron importase les soscripciones</string>
|
||||
<string name="caption_setting_title">Sotítulos</string>
|
||||
<string name="accept">Aceutar</string>
|
||||
<string name="restore_defaults_confirmation">¿Quies reafitar los valores\?</string>
|
||||
<string name="error_unknown_host"/>
|
||||
<string name="error_http_unsupported_range">El sirvidor nun aceuta descargues multifilu, volvi probar con @string/msg_threads = 1</string>
|
||||
<string name="error_unknown_host">Nun pudo atopase\'l sirvidor</string>
|
||||
<string name="error_http_unsupported_range">El sirvidor nun aceuta descargues multifilu, volvi tentalo con @string/msg_threads = 1</string>
|
||||
<string name="no_comments">Nun hai comentarios</string>
|
||||
<string name="settings_category_clear_data_title">Llimpieza de datos</string>
|
||||
<string name="show_comments_title">Amosar comentarios</string>
|
||||
<string name="show_comments_title">Amosar los comentarios</string>
|
||||
<string name="show_comments_summary">Desactiva esta opción p\'anubrir los comentarios</string>
|
||||
<string name="start_accept_privacy_policy">Pa cumplir cola GDPR (Regulación Xeneral de Proteición de Datos) europea, pidímoste que revises la política de privacidá de NewPipe. Lléila con procuru.
|
||||
\nHas aceutala unviándonos un informe de fallos.
|
||||
</string>
|
||||
<string name="minimize_on_exit_summary">Aición al cambiar a otra aplicación dende\'l reproductor de vídeos principal — %s</string>
|
||||
<string name="max_retry_desc">El númberu máximu d\'intentos enantes d\'encaboxar la descarga</string>
|
||||
<string name="start_accept_privacy_policy">Pa cumplir cola Regulación Xeneral de Proteición de Datos (RGPD), pidímoste que mires la política de privacidá de NewPipe. Lleila con procuru.
|
||||
\nHas aceutala pa unvianos informes de fallos.</string>
|
||||
<string name="minimize_on_exit_summary">L\'aición al cambiar a otra aplicación dende\'l reproductor de videu princpial — %s</string>
|
||||
<string name="max_retry_desc">El númberu máximu d\'intentos pa encaboxar la descarga</string>
|
||||
<string name="confirm_prompt">¿Quies llimpiar l\'historial de descargues o desaniciar tolos ficheros baxaos\?</string>
|
||||
<string name="previous_export">Esportación anterior</string>
|
||||
<string name="import_file_title">Importar el ficheru</string>
|
||||
<string name="import_youtube_instructions">Importa les soscripciones de YouTube baxando\'l ficheru d\'esportación:
|
||||
\n
|
||||
\n1.- Vete a esta URL: %1$s
|
||||
\n2.- Anicia sesión cuando se te pida
|
||||
\n3.- Debería aniciase una descarga (que ye\'l ficheru d\'esportación)</string>
|
||||
<string name="import_soundcloud_instructions">Importa un perfil de SoundCloud teclexando la URL o la ID de to:
|
||||
\n1.- Activa\'l mou escritoriu nun restolador web (el sitiu nun ta disponible pa móviles)
|
||||
<string name="import_file_title">Importación d\'un ficheru</string>
|
||||
<string name="import_youtube_instructions">Importa les soscripciones de YouTube dende Google Takeout:
|
||||
\n
|
||||
\n3.- Anicia sesión cuando se te pida
|
||||
\n2.- Vete a esta URL: %1$s
|
||||
\n4.- Copia la URL del perfil al que se te redirixa.</string>
|
||||
<string name="import_soundcloud_instructions_hint">LaToID, soundcloud.com/latoid</string>
|
||||
<string name="download_thumbnail_title">Cargar miniatures</string>
|
||||
<string name="download_thumbnail_summary">Desactiva esta opción pa evitar la carga de miniatures y aforrar datos y usu de la memoria. Los cambeos van llimpiar la memoria y la caché d\'imáxenes.</string>
|
||||
<string name="minimize_on_exit_title">Minimizar al cambiar a otra aplicación</string>
|
||||
\n1. Vete a esta URL: %1$s
|
||||
\n2. Anicia sesión cuando se te pida
|
||||
\n3. Calca en «Tolos datos incluyíos», darréu en «Deseleicionar too», dempués esbilla namás «soscripciones» y calca «Aceutar»
|
||||
\n4. Calca en «Pasu siguiente» y darréu en «Crear una esportación»
|
||||
\n5. Calca nel botón «Baxar» dempués de qu\'apaeza y
|
||||
\n6. A partir del ficheru baxáu, estrái\'l ficheru .json (polo xeneral baxo «YouTube and YouTube Music/subscriptions/subscriptions.json») ya impórtalu equí.</string>
|
||||
<string name="import_soundcloud_instructions">Importa un perfil de SoundCloud teclexando la URL o la to ID:
|
||||
\n
|
||||
\n1. Activa\'l «mou d\'escritoriu» nun restolador web (el sitiu nun ta disponible pa móviles)
|
||||
\n2. Vete a esta URL: %1$s
|
||||
\n3. Anicia sesión cuando se te pida
|
||||
\n4. Copia la URL del perfil al que te redirixeron.</string>
|
||||
<string name="import_soundcloud_instructions_hint">soundcloud.com/LaToID</string>
|
||||
<string name="download_thumbnail_title">Cargar les miniatures</string>
|
||||
<string name="download_thumbnail_summary">Desactiva esta opción pa eviar la carga de miniatures y aforrar datos y usu de memoria. Los cambeos llimpien la caché d\'imáxenes temporal y permanente.</string>
|
||||
<string name="minimize_on_exit_title">Minimizar al cambiar d\'aplicación</string>
|
||||
<string name="minimize_on_exit_background_description">Minimizar al reproductor en segundu planu</string>
|
||||
<string name="minimize_on_exit_popup_description">Minimizar al reproductor en ventanu</string>
|
||||
<string name="unsubscribe">Desoscribise</string>
|
||||
<string name="tab_choose">Escoyeta d\'una llingüeta</string>
|
||||
<string name="unsubscribe">Esborrase</string>
|
||||
<string name="tab_choose">Esbilla d\'una llingüeta</string>
|
||||
<string name="enable_playback_resume_title">Siguir cola reproducción</string>
|
||||
<string name="main_page_content_summary">Les llingüetes que s\'amuesen na páxina principal</string>
|
||||
<string name="downloads_storage_ask_title">Entrugar ánde baxar</string>
|
||||
<string name="downloads_storage_ask_title">Entrugar ónde baxar</string>
|
||||
<string name="downloads">Descargues</string>
|
||||
<string name="downloads_title">Descargues</string>
|
||||
<plurals name="videos">
|
||||
@@ -247,26 +249,26 @@
|
||||
</plurals>
|
||||
<string name="player_gesture_controls_title">Control per xestos del reproductor</string>
|
||||
<string name="preferred_player_fetcher_notification_message">Cargando\'l conteníu solicitáu</string>
|
||||
<string name="privacy_policy_title">Política de Privacidá de NewPipe</string>
|
||||
<string name="privacy_policy_title">Política de privacidá de NewPipe</string>
|
||||
<string name="volume_gesture_control_title">Control per xestos del volume</string>
|
||||
<string name="brightness_gesture_control_title">Control per xestos del brilléu</string>
|
||||
<string name="brightness_gesture_control_title">Control per xestos del brillu</string>
|
||||
<string name="error_file_creation">El ficheru nun pue crease</string>
|
||||
<string name="error_http_no_content">El sirvidor nun unvia datos</string>
|
||||
<string name="localization_changes_requires_app_restart">La llingua va camudar namái que se reanicie l\'aplicación.</string>
|
||||
<string name="search">Guetar</string>
|
||||
<string name="localization_changes_requires_app_restart">La llingua va camudar namás que se reanicie l\'aplicación.</string>
|
||||
<string name="search">Buscar</string>
|
||||
<string name="share_dialog_title">Compartir con</string>
|
||||
<string name="msg_exists">El ficheru yá esiste</string>
|
||||
<string name="msg_exists">Yá esiste\'l ficheru</string>
|
||||
<string name="subscribed_button_title">Soscribiéstite</string>
|
||||
<string name="history_disabled">L\'historial ta desactiváu</string>
|
||||
<string name="no_videos">Nun hai vídeos</string>
|
||||
<string name="delete_search_history_alert">¿Desaniciar tol historial de guetes\?</string>
|
||||
<string name="app_update_notification_content_title">¡Hai un anovamientu disponible pa NewPipe!</string>
|
||||
<string name="app_update_notification_content_text">Toca pa baxar la versión</string>
|
||||
<string name="delete_search_history_alert">¿Desaniciar tol historial de busques\?</string>
|
||||
<string name="app_update_notification_content_title">¡Hai un anovamientu pa NewPipe!</string>
|
||||
<string name="app_update_notification_content_text">Toca pa baxalu</string>
|
||||
<string name="error_progress_lost">Perdióse\'l progresu porque se desanició\'l ficheru</string>
|
||||
<string name="peertube_instance_url_title">Instancies de PeerTube</string>
|
||||
<string name="peertube_instance_add_exists">La instancia yá esiste</string>
|
||||
<string name="app_language_title">Llingua de l\'aplicación</string>
|
||||
<string name="systems_language">La predeterminada del sistema</string>
|
||||
<string name="systems_language">Lo predeterminao del sistema</string>
|
||||
<string name="videos_string">Vídeos</string>
|
||||
<plurals name="seconds">
|
||||
<item quantity="one">%d segundu</item>
|
||||
@@ -275,14 +277,14 @@
|
||||
<string name="playback_tempo">Tempu</string>
|
||||
<string name="playback_pitch">Tonu</string>
|
||||
<string name="decline">Refugar</string>
|
||||
<string name="unsupported_url">La URL nun se sofita</string>
|
||||
<string name="unsupported_url">La URL nun ta sofitada</string>
|
||||
<string name="background_player_playing_toast">Reproduciendo en segundu planu</string>
|
||||
<string name="popup_playing_toast">Reproduciendo nel mou ventanu</string>
|
||||
<string name="enable_search_history_summary">Atroxa llocalmente les consultes de gueta</string>
|
||||
<string name="external_player_unsupported_link_type">Los reproductores esternos nun so</string>
|
||||
<string name="enable_search_history_summary">Atroxa llocalmente les consultes de busca</string>
|
||||
<string name="external_player_unsupported_link_type">Los reproductores esternos nun sofiten esti tipu d\'enllaces</string>
|
||||
<string name="export_complete_toast">Esportóse</string>
|
||||
<string name="import_complete_toast">Importóse</string>
|
||||
<string name="could_not_import_all_files">Alvertencia: Nun pudieron importase tolos ficheros.</string>
|
||||
<string name="could_not_import_all_files">Alvertencia: nun pudieron importase tolos ficheros.</string>
|
||||
<string name="settings_category_updates_title">Anovamientos</string>
|
||||
<string name="download_finished">Finó la descarga</string>
|
||||
<string name="peertube_instance_add_fail">Nun pudo validase la instancia</string>
|
||||
@@ -299,10 +301,352 @@
|
||||
<item quantity="other">%d díes</item>
|
||||
</plurals>
|
||||
<string name="feed_group_dialog_delete_message">¿Quies desaniciar esti grupu\?</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Llipióse la caché de metadatos</string>
|
||||
<string name="metadata_cache_wipe_summary">Desanicia los datos de les páxines web na caché</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Llimpióse la caché de metadatos</string>
|
||||
<string name="metadata_cache_wipe_summary">Desanicia tolos datos na caché de les páxines web</string>
|
||||
<string name="metadata_cache_wipe_title">Llimpiar los metadatos de la caché</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Llimpióse la caché d\'imáxenes</string>
|
||||
<string name="kore_not_found">¿Instalar l\'aplicación Kore\?</string>
|
||||
<string name="autoplay_by_calling_app_summary">Reproduz un videu cuando s\'invoca a NewPipe dende otra aplicación</string>
|
||||
<string name="kore_not_found">¿Instalar Kore\?</string>
|
||||
<string name="autoplay_by_calling_app_summary">Reproduz un videu al llamar a NewPipe dende otra aplicación</string>
|
||||
<string name="info_labels">Qué asocedió:\\nSolicitú:\\nLlingua del conteníu:\\nPaís del conteníu:\\nLlingua de l\'aplicación:\\nServiciu:\\nHora en GMT:\\nPaquete:\\nVersión de l\'aplicación:\\nVersión del SO:</string>
|
||||
<string name="no_player_found_toast">Nun s\'atopó nengún reproductor de fluxos (pues instalar VLC pa reproducilos).</string>
|
||||
<string name="show_thumbnail_summary">Amuesa una miniatura nel fondu de la pantalla de bloquéu y dientro de los avisos</string>
|
||||
<string name="show_thumbnail_title">Amosar una miniatura</string>
|
||||
<string name="playlist_page_summary">Páxina d\'una llista de reproducción</string>
|
||||
<string name="video_detail_by">Por %s</string>
|
||||
<string name="channel_created_by">Canal creada por %s</string>
|
||||
<string name="detail_sub_channel_thumbnail_view_description">Avatar de la canal</string>
|
||||
<string name="content_not_supported">Esti conteníu entá nun ta sofitáu por NewPipe.
|
||||
\n
|
||||
\nQuiciabes nel futuru sí.</string>
|
||||
<string name="feed_use_dedicated_fetch_method_help_text">¿Cuides que la carga del feed ye perlenta\? Si ye asina, activa la carga rápida (pues camudalo nos axustes o primiendo\'l botón d\'embaxo).
|
||||
\n
|
||||
\nNewPipe ufre dos estratexes de descarga de feeds:
|
||||
\n• Dir en cata de tola canal de soscripciones, lo cual ye lento pero completo.
|
||||
\n• Usar un serviciu final dedicáu, lo cual ye rápido mas xeneralmente incompleto.
|
||||
\n
|
||||
\nLa diferencia ente los dos ye qu\'al más rápidu, polo xeneral, fálta-y dalguna información como\'l tipu (nun pue estremar ente vídeos en direuto o normales) o la duración de los elementos (que devuelve menos).
|
||||
\n
|
||||
\nYouTube ye l\'exemplu d\'un serviciu qu\'ufre esti métodu rápidu col so feed RSS.
|
||||
\n
|
||||
\nPolo que tu escueyes según lo que prefieras, si velocidá o información precisa.</string>
|
||||
<string name="feed_use_dedicated_fetch_method_disable_button">Desactivar el mou rápidu</string>
|
||||
<string name="feed_use_dedicated_fetch_method_enable_button">Activar el mou rápidu</string>
|
||||
<string name="feed_use_dedicated_fetch_method_summary">Disponible en dalgunos preseos, suel ser muncho más rápido mas podría devolver un númberu llendáu d\'elementos y davezu información completa (por exemplu, falta de la duración, el tipu d\'elementu o l\'estáu de la tresmisión).</string>
|
||||
<string name="feed_use_dedicated_fetch_method_title">Dir en cata de feeds dedicaos cuando seya posible</string>
|
||||
<string name="feed_update_threshold_option_always_update">Anovar siempres</string>
|
||||
<string name="feed_update_threshold_summary">Tiempu que tarda (dende l\'últimu anovamientu) en considerase una soscripción ensin anovar — %s</string>
|
||||
<string name="feed_update_threshold_title">Llende del anovamientu del feed</string>
|
||||
<string name="settings_category_feed_title">Feed</string>
|
||||
<string name="feed_group_show_only_ungrouped_subscriptions">Amosar namás les soscripciones ensin agrupar</string>
|
||||
<string name="feed_create_new_group_button_title">Nuevu</string>
|
||||
<string name="feed_group_dialog_empty_name">El nome del grupu ta baleru</string>
|
||||
<plurals name="feed_group_dialog_selection_count">
|
||||
<item quantity="one">%d na esbilla</item>
|
||||
<item quantity="other">%d na esbilla</item>
|
||||
</plurals>
|
||||
<string name="feed_group_dialog_empty_selection">Nun s\'esbilló nenguna soscripción</string>
|
||||
<string name="feed_group_dialog_select_subscriptions">Esbillar soscripciones</string>
|
||||
<string name="feed_processing_message">Procesando\'l feed…</string>
|
||||
<string name="feed_notification_loading">Cargando\'l feed…</string>
|
||||
<string name="feed_subscription_not_loaded_count">Númberu d\'elementos que nun cargaron: %d</string>
|
||||
<string name="feed_oldest_subscription_update">Últimu anovamientu del feed: %s</string>
|
||||
<string name="feed_groups_header_title">Grupos de canales</string>
|
||||
<string name="new_seek_duration_toast">Pola mor de les torgues d\'ExoPlayer la duración afitóse en %d segundos</string>
|
||||
<string name="remove_watched_popup_yes_and_partially_watched_videos">Sí, y tamién los vistos parcialmente</string>
|
||||
<string name="remove_watched_popup_warning">Van desaniciase los vídeos que se vieren enantes y dempués d\'amestase a la llista de reproducción.
|
||||
\n¿De xuru\? ¡Esto nun pue desfacese!</string>
|
||||
<string name="remove_watched_popup_title">¿Desaniciar los vídeos vistos\?</string>
|
||||
<string name="remove_watched">Desaniciar lo visto</string>
|
||||
<string name="choose_instance_prompt">Escoyeta d\'una instancia</string>
|
||||
<string name="downloads_storage_use_saf_summary">El «Storage Access Framework» permite les descargues nuna tarxeta SD esterna.
|
||||
\nDalgunos preseos son incompatibles</string>
|
||||
<string name="downloads_storage_use_saf_title">Usar SAF</string>
|
||||
<string name="downloads_storage_ask_summary_kitkat">Va pidísete l\'allugamientu onde guardar les descargues con cauna.
|
||||
\nEscueyi SAF si quies guardar les descargues na tarxeta SD esterna</string>
|
||||
<string name="downloads_storage_ask_summary">Va pidísete l\'allugamientu onde guardar les descargues con cauna</string>
|
||||
<string name="pause_downloads">Posar les descargues</string>
|
||||
<string name="start_downloads">Aniciar les descargues</string>
|
||||
<string name="enable_queue_limit_desc">Namás va executase una descarga al empar</string>
|
||||
<string name="enable_queue_limit">Llendar la cola de descarga</string>
|
||||
<string name="close">Zarrar</string>
|
||||
<string name="pause_downloads_on_mobile_desc">Útil al cambiar a los datos móviles, magar que dalgunes descargues nun puedan suspendese</string>
|
||||
<string name="pause_downloads_on_mobile">Torgar nes redes midíes</string>
|
||||
<string name="stop">Parar</string>
|
||||
<string name="deleted_downloads">Desaniciáronse %1$d descargues</string>
|
||||
<string name="delete_downloaded_files">Desaniciar lo baxao</string>
|
||||
<string name="clear_download_history">Llimpiar l\'historial de descargues</string>
|
||||
<string name="error_download_resource_gone">Esta descarga nun pue recuperase</string>
|
||||
<string name="error_postprocessing_stopped">NewPipe zarróse mentanto trabayaba nel ficheru</string>
|
||||
<string name="error_postprocessing_failed">Falló\'l posprocesamientu</string>
|
||||
<string name="error_http_not_found">Nun s\'atopó</string>
|
||||
<string name="error_permission_denied">El sistema negó\'l permisu</string>
|
||||
<string name="label_code">Códigu</string>
|
||||
<string name="show_error">Amosar el fallu</string>
|
||||
<string name="overwrite">Sobrescribir</string>
|
||||
<string name="generate_unique_name">Xenerar un nome únicu</string>
|
||||
<string name="download_finished_more">Finaron %s descargues</string>
|
||||
<string name="permission_denied">El sistema negó l\'aición</string>
|
||||
<string name="enqueue">Amestar a la cola</string>
|
||||
<string name="recovering">recuperando</string>
|
||||
<string name="post_processing">posprocesando</string>
|
||||
<string name="queued">na cola</string>
|
||||
<string name="paused">posóse</string>
|
||||
<string name="missions_header_pending">Pendiente</string>
|
||||
<string name="switch_view">Cambiar la vista</string>
|
||||
<string name="auto">Auto</string>
|
||||
<string name="list_view_mode">Mou de la vista de les llistes</string>
|
||||
<string name="never">Enxamás</string>
|
||||
<string name="wifi_only">Namás na Wi-Fi</string>
|
||||
<string name="autoplay_summary">Anicia automáticamente la reproducción — %s</string>
|
||||
<string name="minimize_on_exit_none_description">Nada</string>
|
||||
<string name="limit_mobile_data_usage_title">Llendar la resolución al usar los datos móviles</string>
|
||||
<string name="limit_data_usage_none_description">Ensin llende</string>
|
||||
<string name="playback_reset">Reafitar</string>
|
||||
<string name="playback_step">Pasu</string>
|
||||
<string name="skip_silence_checkbox">Avance rápidu nos silencios</string>
|
||||
<string name="unhook_checkbox">Separtar (pue causar distorsión)</string>
|
||||
<string name="playback_speed_control">Controles de la velocidá de reproducción</string>
|
||||
<string name="import_network_expensive_warning">Ten en cuenta qu\'esta operación pue ser esixente cola rede.
|
||||
\n
|
||||
\n¿Quies siguir\?</string>
|
||||
<string name="export_to">Esportar a</string>
|
||||
<string name="import_from">Importar dende</string>
|
||||
<string name="import_title">Importar</string>
|
||||
<string name="show_original_time_ago_summary">Los testos orxinales de los servicios van amosase nos elementos de les tresmisiones</string>
|
||||
<string name="show_original_time_ago_title">Amosar les marques de tiempu orixinales</string>
|
||||
<string name="enable_disposed_exceptions_summary">Forcia l\'informe d\'esceiciones Rx que nun se puen entregar fuera del ciclu de vida d\'un fragmentu o actividá dempués de desanicialos</string>
|
||||
<string name="enable_disposed_exceptions_title">Informar de fallos fuera de ciclu</string>
|
||||
<string name="show_memory_leaks">Amosar los escapes de memoria</string>
|
||||
<string name="enable_leak_canary_summary">La supervisión de los escapes de memoria pue facer que l\'aplicación nun respuenda al volquiar la pila</string>
|
||||
<string name="caption_setting_description">Modifica\'l testu de los sotítulos y el so fondu. Rique\'l reaniciu de l\'aplicación pa que faiga efeutu.</string>
|
||||
<string name="caption_auto_generated">Xeneróse automáticamente</string>
|
||||
<string name="playlist_no_uploader">Xeneróse automáticamente (nun s\'atopó\'l xubidor)</string>
|
||||
<string name="playlist_thumbnail_change_success">Camudóse la miniatura de la llista de reproducción.</string>
|
||||
<string name="playlist_add_stream_success">Metióse nuna llista de reproducción</string>
|
||||
<string name="playlist_creation_success">Creóse la llista de reproducción</string>
|
||||
<string name="unbookmark_playlist">Desaniciar el marcador</string>
|
||||
<string name="bookmark_playlist">Amestar la llista a marcadores</string>
|
||||
<string name="set_as_playlist_thumbnail">Afitar como la miniatura de la llista</string>
|
||||
<string name="unmute">Desactivar el soníu</string>
|
||||
<string name="mute">Activar el soníu</string>
|
||||
<string name="rename_playlist">Renomar</string>
|
||||
<string name="delete_playlist">Desaniciar</string>
|
||||
<string name="preferred_player_fetcher_notification_title">Consiguiendo la información…</string>
|
||||
<string name="always_ask_open_action">Entrugar siempres</string>
|
||||
<string name="popup_player">Reproductor en ventanu</string>
|
||||
<string name="background_player">Reproductor en segundu planu</string>
|
||||
<string name="video_player">Reproductor de videu</string>
|
||||
<string name="preferred_open_action_settings_summary">L\'aición predeterminada al abrir conteníu — %s</string>
|
||||
<string name="drawer_close">Zarrar el caxón</string>
|
||||
<string name="drawer_open">Abrir el caxón</string>
|
||||
<string name="start_here_on_main">Reproducir equí</string>
|
||||
<string name="enqueued">Amestóse a la cola</string>
|
||||
<string name="enqueue_stream">Amestar a la cola</string>
|
||||
<string name="hold_to_append">Ten primío p\'amestar a la cola</string>
|
||||
<string name="play_queue_audio_settings">Axustes del audiu</string>
|
||||
<string name="play_queue_remove">Desaniciar</string>
|
||||
<string name="title_activity_play_queue">Cola de reproducción</string>
|
||||
<string name="most_liked">Lo que más prestó</string>
|
||||
<string name="recently_added">Amestóse apocayá</string>
|
||||
<string name="local">Llocal</string>
|
||||
<string name="no_valid_zip_file">El ficheru ZIP nun ye válidu</string>
|
||||
<string name="no_playlist_bookmarked_yet">Entá nun hai llistes en marcadores</string>
|
||||
<string name="select_a_playlist">Esbilla d\'una llista de reproducción</string>
|
||||
<string name="no_channel_subscribed_yet">Entá nun hai soscripciones a canales</string>
|
||||
<string name="select_a_channel">Esbilla d\'una canal</string>
|
||||
<string name="channel_page_summary">Páxina d\'una canal</string>
|
||||
<string name="feed_page_summary">Páxina del feed</string>
|
||||
<string name="subscription_page_summary">Páxina de soscripciones</string>
|
||||
<string name="default_kiosk_page_summary">Quioscu predetermináu</string>
|
||||
<string name="kiosk_page_summary">Páxina de quioscu</string>
|
||||
<string name="title_most_played">Lo más reproducío</string>
|
||||
<string name="title_last_played">Lo último reproducío</string>
|
||||
<string name="delete_stream_history_prompt">¿Quies desaniciar esti elementu del historial de vídeos vistos\?</string>
|
||||
<string name="item_deleted">Desanicióse l\'elementu</string>
|
||||
<string name="history_cleared">Llimpióse l\'historial</string>
|
||||
<string name="title_history_search">Buscóse</string>
|
||||
<string name="app_license">NewPipe ye software copyleft: pues usalu, estudialu, compartilu y ameyoralu como quieras. N\'especial, pues redistribuyilu y/o modificalu baxo los términos de la GNU General Public License según espublizó la Free Software Foundation, quier la versión 3 de la llicencia quier (na to opinión) cualesquier versión posterior.</string>
|
||||
<string name="privacy_policy_encouragement">El proyeutu de NewPipe toma mui en serio la privacidá. Poro, l\'aplicación nun recueye nengún datu ensin el to consentimientu.
|
||||
\nLa política de privacidá de NewPipe desplica en detalle los datos que s\'unvien y atroxen cuando unvies un informe de casque.</string>
|
||||
<string name="app_description">Un aplicación llibre pa ver/sentir plataformes de tresmisión n\'Android.</string>
|
||||
<string name="action_open_website">Abrir el sitiu web</string>
|
||||
<string name="toast_no_player">Nun hai nenguna aplicación pa reproducir esti ficheru</string>
|
||||
<string name="settings_file_replacement_character_title">Caráuteres de troquéu</string>
|
||||
<string name="settings_file_replacement_character_summary">Los caráuteres que nun son válidos van trocase por esti valor</string>
|
||||
<string name="recaptcha_done_button">Fecho</string>
|
||||
<string name="subtitle_activity_recaptcha">Primi «Fecho» al resolvelu</string>
|
||||
<string name="one_item_deleted">Desanicióse 1 elementu.</string>
|
||||
<string name="no_available_dir">Defini una capeta de descargues dempués, nos axustes de l\'aplicación</string>
|
||||
<string name="msg_running_detail">Toca pa los detalles</string>
|
||||
<string name="msg_running">Descarga de NewPipe</string>
|
||||
<string name="msg_url_malform">La URL ta mal formada o internet nun ta disponible</string>
|
||||
<string name="msg_server_unsupported">El sirvidor nun ta sofitáu</string>
|
||||
<string name="msg_name">Nome del ficheru</string>
|
||||
<string name="rename">Renomar</string>
|
||||
<string name="delete_all">Desaniciar too</string>
|
||||
<string name="delete_one">Desaniciar un elementu</string>
|
||||
<string name="view">Reproducir</string>
|
||||
<string name="pause">Posar</string>
|
||||
<string name="start">Aniciar</string>
|
||||
<string name="infinite_videos">Vídeos ∞</string>
|
||||
<string name="more_than_100_videos">+100 vídeos</string>
|
||||
<plurals name="listening">
|
||||
<item quantity="one">%s oyente</item>
|
||||
<item quantity="other">%s oyentes</item>
|
||||
</plurals>
|
||||
<string name="no_one_listening">Naide nun ta sintiendo</string>
|
||||
<plurals name="watching">
|
||||
<item quantity="one">%s espectador</item>
|
||||
<item quantity="other">%s espectadores</item>
|
||||
</plurals>
|
||||
<string name="no_one_watching">Nun hai espectadores</string>
|
||||
<string name="no_subscribers">Nun hai soscriptores</string>
|
||||
<string name="drawer_header_description">Alternar el serviciu, esbillóse:</string>
|
||||
<string name="storage_permission_denied">Concedi l\'accesu al almacenamientu primero</string>
|
||||
<string name="retry">Retentar</string>
|
||||
<string name="err_dir_create">Nun pue crease\'l direutoriu de descarga «%1$s»</string>
|
||||
<string name="detail_drag_description">Arrastra pa reordenar</string>
|
||||
<string name="user_report">Informe d\'usuariu</string>
|
||||
<string name="report_error">Informar del fallu</string>
|
||||
<string name="use_tor_summary">(Esperimental) Forcia\'l tráficu de les descargues pente Tor pa más privacidá (la reproducción de vídeos entá nun se sofita).</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Avatar del xubidor</string>
|
||||
<string name="detail_thumbnail_view_description">Reproducción d\'un videu, duración:</string>
|
||||
<string name="list_thumbnail_view_description">Miniatura del videu</string>
|
||||
<string name="your_comment">Un comentariu (n\'inglés):</string>
|
||||
<string name="what_happened_headline">Qué pasó:</string>
|
||||
<string name="error_snackbar_action">Informar</string>
|
||||
<string name="error_report_open_github_notice">Comprueba si yá esiste un problema qu\'alderique esti casque, por favor. Al crear informes duplicaos faes que perdamos el tiempu que podríemos dedicar a iguar el fallu.</string>
|
||||
<string name="error_report_open_issue_button_text">Informar en GitHub</string>
|
||||
<string name="copy_for_github">Copiar l\'informe con formatu</string>
|
||||
<string name="error_report_button_text">Informar d\'esti fallu per corréu</string>
|
||||
<string name="permission_display_over_apps">Da\'l permisu p\'amosar NewPipe penriba d\'otres aplicaciones</string>
|
||||
<string name="saved_tabs_invalid_json">Nun pudieron lleese les llingüetes guardaes polo que van usase les predeterminaes</string>
|
||||
<string name="no_streams_available_download">Nun hai fluxos disponibles pa baxar</string>
|
||||
<string name="file_name_empty_error">El nome del ficheru nun pue tar baleru</string>
|
||||
<string name="invalid_source">El ficheru/orixe del conteníu nun esiste</string>
|
||||
<string name="invalid_directory">La carpeta nun esiste</string>
|
||||
<string name="audio_streams_empty">Nun s\'atoparon fluxos d\'audiu</string>
|
||||
<string name="video_streams_empty">Nun s\'atoparon fluxos de videu</string>
|
||||
<string name="player_recoverable_failure">L\'aplicación ta recuperándose d\'un fallu del reproductor</string>
|
||||
<string name="app_ui_crash">L\'aplicación/IU cascó</string>
|
||||
<string name="could_not_load_image">Nun pudo cargase la imaxe</string>
|
||||
<string name="could_not_setup_download_menu">Nun pudo configurase\'l menú de descarga</string>
|
||||
<string name="content_not_available">El conteníu nun ta disponible</string>
|
||||
<string name="light_parsing_error">Nun pudo analizase dafechu\'l sitiu web</string>
|
||||
<string name="network_error">Fallu de la rede</string>
|
||||
<string name="download_to_sdcard_error_message">La descarga a la tarxeta SD nun ye posible. ¿Reafitar l\'allugamientu de la carpeta de descarga\?</string>
|
||||
<string name="download_to_sdcard_error_title">L\'almacenamientu esternu nun ta disponible</string>
|
||||
<string name="help">Ayuda</string>
|
||||
<string name="search_history_deleted">Desanicióse l\'historial de busques.</string>
|
||||
<string name="clear_search_history_summary">Desanicia l\'historial de les pallabres clave de busca</string>
|
||||
<string name="clear_search_history_title">Llimpiar l\'historial de busca</string>
|
||||
<string name="watch_history_states_deleted">Desaniciáronse los puntos de reproducción.</string>
|
||||
<string name="delete_playback_states_alert">¿Desaniciar tolos puntos de reproducción\?</string>
|
||||
<string name="clear_playback_states_summary">Desanicia tolos puntos de reproducción</string>
|
||||
<string name="clear_playback_states_title">Desaniciar los puntos de reproducción</string>
|
||||
<string name="watch_history_deleted">Desanicióse l\'historial de vídeos vistos.</string>
|
||||
<string name="delete_view_history_alert">¿Desaniciar tol historial de vídeos vistos\?</string>
|
||||
<string name="clear_views_history_summary">Desanicia l\'historial de fluxos reproducíos y el de puntos de reproducción</string>
|
||||
<string name="clear_views_history_title">Llimpiar l\'historial de los vídeos vistos</string>
|
||||
<string name="clear_cookie_summary">Llimpia les cookies que NewPipe atrroxa cuando soluciones un reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Llimpiáronse les cookies de reCAPTCHA</string>
|
||||
<string name="clear_cookie_title">Llimpiar les cookies de reCAPTCHA</string>
|
||||
<string name="switch_to_main">Cambiar al reproductor principal</string>
|
||||
<string name="switch_to_popup">Cambiar al reproductor en ventanu</string>
|
||||
<string name="switch_to_background">Cambiar al reproductor en segundu planu</string>
|
||||
<string name="toggle_orientation">Alternar la orientación</string>
|
||||
<string name="app_update_notification_channel_description">Anovamientos pa NewPipe</string>
|
||||
<string name="app_update_notification_channel_name">Avisos d\'anovamientos</string>
|
||||
<string name="notification_channel_description">Avisos de los reproductores en segundu planu y en ventanu de NewPipe</string>
|
||||
<string name="just_once">Namás una vegada</string>
|
||||
<string name="file_deleted">Desanicióse\'l ficheru</string>
|
||||
<string name="undo">Desfacer</string>
|
||||
<string name="popup_resizing_indicator_title">Redimensionáu</string>
|
||||
<string name="refresh">Refrescar</string>
|
||||
<string name="filter">Peñerar</string>
|
||||
<string name="disabled">Desactivóse</string>
|
||||
<string name="later">Dempués</string>
|
||||
<string name="artists">Artistes</string>
|
||||
<string name="albums">Álbumes</string>
|
||||
<string name="songs">Canciones</string>
|
||||
<string name="playlist">Llista de reproducción</string>
|
||||
<string name="all">Too</string>
|
||||
<string name="error_report_title">Informe d\'un fallu</string>
|
||||
<string name="restricted_video">Tien una torga por edá.
|
||||
\n
|
||||
\nActiva «%1$s» nos axustes de l\'aplicación si quies velu.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube forne\'l «Mou torgáu» qu\'anubre conteníu\'l que seya potencialmente p\'adultos</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Activar el «Mou torgáu» de YouTube</string>
|
||||
<string name="show_age_restricted_content_summary">Amuesa\'l conteníu que quiciabes nun seya afayadizu pa guaḥes porque tien una llende d\'edá (como +18)</string>
|
||||
<string name="popup_playing_append">Amestóse a la cola del reproductor en ventanu</string>
|
||||
<string name="background_player_append">Amestóse a la cola del reproductor en segundu planu</string>
|
||||
<string name="settings_category_notification_title">Avisu permanente</string>
|
||||
<string name="settings_category_debug_title">Depuración</string>
|
||||
<string name="settings_category_other_title">Miscelánea</string>
|
||||
<string name="settings_category_popup_title">Ventanu</string>
|
||||
<string name="peertube_instance_add_https_only">Namás se sofiten URLs HTTPS</string>
|
||||
<string name="peertube_instance_add_help">Introduz la URL d\'una instancia</string>
|
||||
<string name="peertube_instance_add_title">Amiestu d\'una instancia</string>
|
||||
<string name="peertube_instance_url_help">Atopa les instancies que te presten en %s</string>
|
||||
<string name="peertube_instance_url_summary">Esbilla les instancies de PeerTube que prefieras</string>
|
||||
<string name="service_title">Serviciu</string>
|
||||
<string name="unsupported_url_dialog_message">Nun pudo reconocese la URL. ¿Abrila con otra aplicación\?</string>
|
||||
<string name="show_hold_to_append_summary">Amuesa\'l mensaxe al primir el nel botón «En segundu planu» o «Ventanu» nel «Details:» de los vídeos</string>
|
||||
<string name="show_hold_to_append_title">Amosar el mensaxe «Ten primío p\'amestar a la cola»</string>
|
||||
<string name="show_next_and_similar_title">Amosar los vídeos siguientes y asemeyaos</string>
|
||||
<string name="download_dialog_title">Descarga</string>
|
||||
<string name="enable_watch_history_summary">Rexistra los vídeos vistos</string>
|
||||
<string name="enable_playback_state_lists_summary">Amuesa los indicadores de los puntos de reprodución nes llistes</string>
|
||||
<string name="enable_playback_state_lists_title">Puntos de reproducción nes llistes</string>
|
||||
<string name="enable_playback_resume_summary">Restaura l\'últimu puntu de reproducción</string>
|
||||
<string name="enable_watch_history_title">Historial de vídeos vistos</string>
|
||||
<string name="auto_queue_toggle">Cola automática</string>
|
||||
<string name="auto_queue_summary">Amiesta un videu rellacionáu a la cola cuando se repoduz l\'últimu videu a una cola ensin repitición</string>
|
||||
<string name="auto_queue_title">Meter les tresmisiones siguientes a cola automática</string>
|
||||
<string name="clear_queue_confirmation_description">Va trocase la cola del reproductor activu</string>
|
||||
<string name="clear_queue_confirmation_summary">Cambiar d\'un reproductor a otru pue trocar la cola</string>
|
||||
<string name="clear_queue_confirmation_title">Confirmar la llimpieza de les coles</string>
|
||||
<string name="seek_duration_title">Duración de la gueta del avance/rebobináu rápidu</string>
|
||||
<string name="use_inexact_seek_summary">La gueta imprecisa permite al reproductor que guete les posiciones más rápido con menos precisión. La gueta de 5, 15 ó 25 segundos nun funciona con esti axuste.</string>
|
||||
<string name="use_inexact_seek_title">Usar la gueta rápida imprecisa</string>
|
||||
<string name="popup_remember_size_pos_summary">Acuérdase del últimu tamañu y la última posición del ventanu</string>
|
||||
<string name="popup_remember_size_pos_title">Acordase de les propiedaes del ventanu</string>
|
||||
<string name="notification_colorize_summary">Fai qu\'Android personalice\'l color del avisu permanente según el color principal de les miniatures (decátate qu\'esto nun ta disponible en tolos preseos)</string>
|
||||
<string name="notification_colorize_title">Avisu con color</string>
|
||||
<string name="notification_action_nothing">Nada</string>
|
||||
<string name="notification_action_buffering">Atroxar nel búfer</string>
|
||||
<string name="notification_action_shuffle">Al debalu</string>
|
||||
<string name="notification_action_repeat">Repitir</string>
|
||||
<string name="notification_actions_at_most_three">¡Pues esbillar tres aiciones como máximu p\'amosar nel avisu permanente!</string>
|
||||
<string name="notification_actions_summary">Edita cada aición d\'embaxo tocando nelles. Esbilla hasta tres p\'amosales nel avisu compautu col usu de los caxellos de la derercha.</string>
|
||||
<string name="notification_action_4_title">Quintu botón d\'aición</string>
|
||||
<string name="notification_action_3_title">Cuartu botón d\'aición</string>
|
||||
<string name="notification_action_2_title">Tercer botón d\'aición</string>
|
||||
<string name="notification_action_1_title">Segundu botón d\'aición</string>
|
||||
<string name="notification_action_0_title">Primer botón d\'aición</string>
|
||||
<string name="notification_scale_to_square_image_summary">Escala les miniatures de los vídeos que s\'amuesen nel avisu permanente de los 16:9 al 1:1 (podría distorsionar les imáxenes)</string>
|
||||
<string name="notification_scale_to_square_image_title">Afitar la escala 1:1 a les miniatures</string>
|
||||
<string name="autoplay_by_calling_app_title">Reproducción automática</string>
|
||||
<string name="download_choose_new_path">Camuda les carpetes de descarga pa que faiga efeutu</string>
|
||||
<string name="download_path_audio_dialog_title">Escueyi la carpeta de descarga pa los ficheros d\'audiu</string>
|
||||
<string name="download_path_audio_summary">Los ficheros d\'audiu baxaos atróxense equí</string>
|
||||
<string name="download_path_audio_title">Carpeta de la descarga d\'audiu</string>
|
||||
<string name="download_path_dialog_title">Escueyi la carpeta de descarga pa los ficheros de videu</string>
|
||||
<string name="download_path_summary">Los ficheros de videu baxaos atróxense equí</string>
|
||||
<string name="download_path_title">Carpeta de la descarga de vídeos</string>
|
||||
<string name="controls_add_to_playlist_title">Meter nuna llista</string>
|
||||
<string name="tab_main">Principal</string>
|
||||
<string name="subscription_change_failed">Nun pudo camudar la soscripción</string>
|
||||
<string name="channel_unsubscribed">Esborriéstite de la canal</string>
|
||||
<string name="popup_mode_share_menu_title">Mou ventanu</string>
|
||||
<string name="screen_rotation">voltéu</string>
|
||||
<string name="choose_browser">Escoyer un restolador</string>
|
||||
<string name="search_showing_result_for">Amosando los resultaos de: %s</string>
|
||||
<string name="controls_download_desc">Baxar el ficheru de fluxos</string>
|
||||
<string name="download">Baxar</string>
|
||||
<string name="open_in_popup_mode">Abrir nel mou ventanu</string>
|
||||
<string name="install">Instalar</string>
|
||||
<string name="no_player_found">Nun s\'atopó nengún reproductor de fluxos. ¿Instalar VLC\?</string>
|
||||
<string name="main_bg_subtitle">Toca «Buscar» pa entamar
|
||||
\n</string>
|
||||
</resources>
|
||||
@@ -303,8 +303,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">正在加载请求的内容</string>
|
||||
<string name="import_data_title">导入数据库</string>
|
||||
<string name="export_data_title">导出数据库</string>
|
||||
<string name="import_data_summary">覆盖当前历史记录和订阅</string>
|
||||
<string name="export_data_summary">导出历史记录、订阅和播放列表</string>
|
||||
<string name="import_data_summary">覆盖您的当前播放历史、订阅、播放列表和(可选)设置</string>
|
||||
<string name="export_data_summary">导出历史记录、订阅、播放列表和设置</string>
|
||||
<string name="export_complete_toast">导出成功</string>
|
||||
<string name="import_complete_toast">导入成功</string>
|
||||
<string name="no_valid_zip_file">没有有效的ZIP文件</string>
|
||||
@@ -634,8 +634,10 @@
|
||||
<string name="clear_cookie_summary">清理你在解决验证码时 NewPipe 存储的cookies</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies 已被清理</string>
|
||||
<string name="clear_cookie_title">清理 reCAPTCHA cookies</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube提供了一个“受限模式”,会隐藏潜在的成人内容。</string>
|
||||
<string name="show_age_restricted_content_summary">展示可能不适合儿童观看的内容,因为它有年龄限制(比如18岁以上)。</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube提供了一个“受限模式”,会隐藏潜在的成人内容</string>
|
||||
<string name="show_age_restricted_content_summary">展示可能不适合儿童观看的内容,因为有年龄限制(比如18岁以上)</string>
|
||||
<string name="notification_colorize_summary">让安卓系统根据视频缩略图的主色彩自定义通知的颜色(注意,该特性并非在所有设备上都可用)</string>
|
||||
<string name="notification_colorize_title">对通知着色</string>
|
||||
<string name="show_thumbnail_summary">在锁定屏幕上显示缩略图为背景和内部通知</string>
|
||||
<string name="show_thumbnail_title">显示缩略图</string>
|
||||
</resources>
|
||||
@@ -255,7 +255,7 @@
|
||||
<string name="toast_no_player">Прыкладанне для прайгравання гэтага файла не ўстаноўлена</string>
|
||||
<string name="title_activity_about">Аб NewPipe</string>
|
||||
<string name="action_settings">Налады</string>
|
||||
<string name="action_about">Аб дадатку</string>
|
||||
<string name="action_about">А прыладзе</string>
|
||||
<string name="title_licenses">Іншыя ліцэнзіі</string>
|
||||
<string name="copyright" formatted="true">© %1$s %2$s пад ліцэнзіяй %3$s</string>
|
||||
<string name="error_unable_to_load_license">Не атрымалася загрузіць ліцэнзію</string>
|
||||
@@ -314,7 +314,7 @@
|
||||
<string name="play_queue_remove">Выдаліць</string>
|
||||
<string name="play_queue_stream_detail">Падрабязнасці</string>
|
||||
<string name="play_queue_audio_settings">Налады аўдыё</string>
|
||||
<string name="hold_to_append">Зацісніце, каб дадаць у чаргу</string>
|
||||
<string name="hold_to_append">Утрымлівайце, каб дадаць у чаргу</string>
|
||||
<string name="start_here_on_main">Пачаць адсюль у плэеры</string>
|
||||
<string name="start_here_on_background">Пачаць адсюль у фоне</string>
|
||||
<string name="start_here_on_popup">Пачаць адсюль у акне</string>
|
||||
@@ -402,7 +402,7 @@
|
||||
<string name="volume_gesture_control_summary">Мяняць гучнасць плэера жэстам</string>
|
||||
<string name="brightness_gesture_control_title">Жэст яркасці</string>
|
||||
<string name="brightness_gesture_control_summary">Мяняць яркасць плэера жэстам</string>
|
||||
<string name="settings_category_updates_title">Абнаўлення</string>
|
||||
<string name="settings_category_updates_title">Абнаўленні</string>
|
||||
<string name="file_deleted">Файл выдалены</string>
|
||||
<string name="app_update_notification_channel_name">Апавяшчэнне аб абнаўленні</string>
|
||||
<string name="app_update_notification_channel_description">Апавяшчэння аб новай версіі NewPipe</string>
|
||||
@@ -476,7 +476,7 @@
|
||||
<string name="error_insufficient_storage">Скончылася вольнае месца на прыладзе</string>
|
||||
<string name="error_progress_lost">Прагрэс страчаны, так як файл быў выдалены</string>
|
||||
<string name="error_timeout">Час злучэння выйшла</string>
|
||||
<string name="confirm_prompt">Вы ўпэўненыя\?</string>
|
||||
<string name="confirm_prompt">Вы ўпэўнены\?</string>
|
||||
<string name="enable_queue_limit">Абмежаваць чаргу загрузкі</string>
|
||||
<string name="enable_queue_limit_desc">Толькі адна адначасовая загрузка</string>
|
||||
<string name="start_downloads">Пачаць загрузку</string>
|
||||
@@ -492,8 +492,68 @@
|
||||
<string name="clear_playback_states_summary">Выдаліць ўсе пазіцыі прайгравання</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Абмежаваны рэжым YouTube</string>
|
||||
<string name="peertube_instance_add_https_only">Падтрымліваюцца толькі адрасы URL HTTPS</string>
|
||||
<string name="peertube_instance_add_title">Дадаць інстанцыю</string>
|
||||
<string name="peertube_instance_url_title">Інстанцыі PeerTube</string>
|
||||
<string name="peertube_instance_add_title">Дадаць экзэмпляр</string>
|
||||
<string name="peertube_instance_url_title">Экзэмпляры PeerTube</string>
|
||||
<string name="download_choose_new_path">Змяніце папкі загрузкі, каб змены ўступілі ў сілу</string>
|
||||
<string name="search_showing_result_for">Вынікі для: %s</string>
|
||||
<string name="notification_scale_to_square_image_title">Мініяцюра відэа ў 1:1</string>
|
||||
<string name="notification_scale_to_square_image_summary">Мініяцюра відэа ў апавяшчэнні з 16:9 да 1:1 (магчымі скажэнні)</string>
|
||||
<string name="notification_action_3_title">Кнопка чацвёртага дзеяння</string>
|
||||
<string name="notification_action_2_title">Кнопка трэцяга дзеяння</string>
|
||||
<string name="notification_action_1_title">Кнопка другога дзеяння</string>
|
||||
<string name="notification_action_0_title">Кнопка першага дзеяння</string>
|
||||
<string name="feed_groups_header_title">Групы каналаў</string>
|
||||
<string name="systems_language">Як у сістэме</string>
|
||||
<string name="app_language_title">Мова прылады</string>
|
||||
<string name="choose_instance_prompt">Выберыце экзэмпляр</string>
|
||||
<string name="deleted_downloads">Выдалена %1$d загрузак</string>
|
||||
<string name="delete_downloaded_files">Выдаліць загружаныя файлы</string>
|
||||
<string name="show_original_time_ago_summary">Арыгінальныя тэксты з сэрвісаў будуць бачны ў ленце элементаў</string>
|
||||
<string name="clear_cookie_summary">Ачысціце cookie, якія NewPipe захоўвае пры рашэнні reCAPTCHA</string>
|
||||
<string name="peertube_instance_add_exists">Экзэмпляр ужо існуе</string>
|
||||
<string name="peertube_instance_add_fail">Немагчыма праверыць экзэмпляр</string>
|
||||
<string name="peertube_instance_add_help">Увесці URL экзэмпляра</string>
|
||||
<string name="peertube_instance_url_summary">Абярыце любімыя экзэмпляры PeerTube</string>
|
||||
<string name="clear_queue_confirmation_description">Актыўны плэер быў зменены</string>
|
||||
<string name="clear_queue_confirmation_summary">Змена плэера можа замяніць вашу чаргу</string>
|
||||
<string name="clear_queue_confirmation_title">Запытаць, перш чым ачысціць чаргу</string>
|
||||
<string name="never">Ніколі</string>
|
||||
<string name="wifi_only">Толькі па Wi-Fi</string>
|
||||
<string name="show_original_time_ago_title">Паказаць арыгінальны час на элементах</string>
|
||||
<string name="unmute">Уключыць гук</string>
|
||||
<string name="mute">Цішына</string>
|
||||
<string name="enqueue_stream">Дадаць у чаргу</string>
|
||||
<string name="enqueued">Даданае у чаргу</string>
|
||||
<string name="title_activity_play_queue">Чарга прайгравання</string>
|
||||
<string name="most_liked">Найбольш папулярнае</string>
|
||||
<string name="local">Лакальнае</string>
|
||||
<string name="recently_added">Нядаўна дададзенае</string>
|
||||
<string name="no_playlist_bookmarked_yet">Няма закладак у плейлісце</string>
|
||||
<string name="select_a_playlist">Абярыце плэйліст</string>
|
||||
<string name="default_kiosk_page_summary">Кіёск па змаўчанні</string>
|
||||
<string name="recaptcha_done_button">Так</string>
|
||||
<string name="subtitle_activity_recaptcha">Націсніце \"Так\" калі вырашана</string>
|
||||
<string name="infinite_videos">∞ відэа</string>
|
||||
<string name="more_than_100_videos">100+ відэа</string>
|
||||
<string name="error_report_open_issue_button_text">Багрэпарт на GitHub</string>
|
||||
<string name="copy_for_github">Скапіруйце адфарматаваны багрэпарт</string>
|
||||
<string name="permission_display_over_apps">Дайце дазвол на адлюстраванне паверх іншых праграм</string>
|
||||
<string name="help">Дапамога</string>
|
||||
<string name="delete_playback_states_alert">Выдаліць усе пазіцыі прайгравання\?</string>
|
||||
<string name="clear_playback_states_title">Выдаліць пазіцыі прайгравання</string>
|
||||
<string name="clear_cookie_title">Ачысціць reCAPTCHA cookies</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies былі ачышчаны</string>
|
||||
<string name="artists">Выканаўцы</string>
|
||||
<string name="albums">Альбомы</string>
|
||||
<string name="songs">Песні</string>
|
||||
<string name="videos_string">Відэа</string>
|
||||
<string name="auto_queue_toggle">Аўтаматычная чарга</string>
|
||||
<string name="seek_duration_title">Працягласць перамоткі ўперад/назад</string>
|
||||
<string name="notification_colorize_title">Каляровыя апавяшчэнні</string>
|
||||
<string name="notification_action_nothing">Нічога</string>
|
||||
<string name="notification_action_buffering">Буферызацыя</string>
|
||||
<string name="notification_action_shuffle">Ператасаваць</string>
|
||||
<string name="notification_action_repeat">Паўтор</string>
|
||||
<string name="notification_action_4_title">Кнопка пятага дзеяння</string>
|
||||
<string name="settings_category_notification_title">Паведамленні</string>
|
||||
</resources>
|
||||
@@ -258,8 +258,8 @@
|
||||
<string name="just_once">Pouze jednou</string>
|
||||
<string name="import_data_title">Importovat databázi</string>
|
||||
<string name="export_data_title">Exportovat databázi</string>
|
||||
<string name="import_data_summary">Přepíše vaši dosavadní historii a odběry</string>
|
||||
<string name="export_data_summary">Exportuje historii, odběry a playlisty</string>
|
||||
<string name="import_data_summary">Přepíše Vaši dosavadní historii, odběry, playlisty a (volitelně) nastavení</string>
|
||||
<string name="export_data_summary">Exportuje historii, odběry, playlisty a nastavení</string>
|
||||
<string name="external_player_unsupported_link_type">Externí přehrávače nepodporují tyto druhy odkazů</string>
|
||||
<string name="invalid_url_toast">Neplatná URL</string>
|
||||
<string name="video_streams_empty">Nenalezeny žádné video streamy</string>
|
||||
@@ -338,14 +338,14 @@
|
||||
<string name="previous_export">Předchozí export</string>
|
||||
<string name="subscriptions_import_unsuccessful">Odběry nelze importovat</string>
|
||||
<string name="subscriptions_export_unsuccessful">Odběry nelze exportovat</string>
|
||||
<string name="import_youtube_instructions">"Importovat YouTube odběry stáhnutím exportního souboru:
|
||||
<string name="import_youtube_instructions">Importovat YouTube odběry stáhnutím exportního souboru:
|
||||
\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
|
||||
\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. Ze staženého zip archivu extrahujte .json soubor (nejčastěji na cestě \"Takeout/YouTube a YouTube Music/odběry/odběry.json\") a importujte jej."</string>
|
||||
\n5. Vyčkejte než se objeví tlačítko \"Stáhnout\" a klikněte na něj
|
||||
\n6. Ze staženého zip archivu extrahujte .json soubor (nejčastěji na cestě \"Takeout/YouTube a YouTube Music/odběry/odběry.json\") a importujte jej.</string>
|
||||
<string name="import_soundcloud_instructions">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á)
|
||||
@@ -653,8 +653,10 @@
|
||||
<string name="clear_cookie_summary">Vymazat cookies, které NewPipe uloží, po vyřešení reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Cookies reCAPTCHA byly vymazány</string>
|
||||
<string name="clear_cookie_title">Vymazat cookies reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube poskytuje \"Omezený režim\", který skrývá potenciální obsahy pro dospělé.</string>
|
||||
<string name="show_age_restricted_content_summary">Zobrazit obsah, i když je patrně nevhodný pro děti, protože odkazuje na věkové omezení (např. 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube poskytuje \"Omezený režim\", který skrývá potenciální obsahy pro dospělé</string>
|
||||
<string name="show_age_restricted_content_summary">Zobrazit obsah, i když je patrně nevhodný pro děti, protože odkazuje na věkové omezení (např. 18+)</string>
|
||||
<string name="notification_colorize_summary">Nechte Android přizpůsobit barvu oznámení podle hlavní barvy v miniatuře (není k dispozici na všech zařízeních)</string>
|
||||
<string name="notification_colorize_title">Barevné notifikace</string>
|
||||
<string name="show_thumbnail_summary">Zobrazit miniaturu na zamknuté obrazovce jako pozadí a v oznámeních</string>
|
||||
<string name="show_thumbnail_title">Zobrazit miniaturu</string>
|
||||
</resources>
|
||||
@@ -132,7 +132,7 @@
|
||||
<string name="use_external_video_player_summary">Entfernt Tonspur bei manchen Auflösungen</string>
|
||||
<string name="popup_remember_size_pos_summary">Letzte Größe und Position des Pop-ups merken</string>
|
||||
<string name="player_gesture_controls_title">Gestensteuerung</string>
|
||||
<string name="player_gesture_controls_summary">Helligkeit und Lautstärke mittels Gesten einstellen</string>
|
||||
<string name="player_gesture_controls_summary">Gesten verwenden, um die Helligkeit und Lautstärke einzustellen</string>
|
||||
<string name="show_search_suggestions_title">Suchvorschläge</string>
|
||||
<string name="show_search_suggestions_summary">Beim Suchen Vorschläge anzeigen</string>
|
||||
<string name="settings_category_popup_title">Pop-up</string>
|
||||
@@ -266,8 +266,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">Gewünschten Inhalt laden</string>
|
||||
<string name="import_data_title">Datenbank importieren</string>
|
||||
<string name="export_data_title">Datenbank exportieren</string>
|
||||
<string name="import_data_summary">Überschreibt deinen aktuellen Verlauf und deine Abonnements</string>
|
||||
<string name="export_data_summary">Verlauf, Abonnements und Wiedergabelisten exportieren</string>
|
||||
<string name="import_data_summary">Überschreibt deinen aktuellen Verlauf, Abonnements, Wiedergabelisten und (optionale) Einstellungen</string>
|
||||
<string name="export_data_summary">Export von Verlauf, Abonnements, Wiedergabelisten und Einstellungen</string>
|
||||
<string name="no_valid_zip_file">Keine gültige ZIP-Datei</string>
|
||||
<string name="could_not_import_all_files">Warnung: Nicht alle Dateien konnten importiert werden.</string>
|
||||
<string name="override_current_data">Dies wird deine aktuellen Einstellungen überschreiben.</string>
|
||||
@@ -402,9 +402,9 @@
|
||||
<string name="tab_new">Neuer Tab</string>
|
||||
<string name="tab_choose">Tab wählen</string>
|
||||
<string name="volume_gesture_control_title">Gestensteuerung für Lautstärke</string>
|
||||
<string name="volume_gesture_control_summary">Verwende Gesten um die Abspielerlautstärke einzustellen</string>
|
||||
<string name="volume_gesture_control_summary">Gesten verwenden, um die Lautstärke einzustellen</string>
|
||||
<string name="brightness_gesture_control_title">Gestensteuerung für Helligkeit</string>
|
||||
<string name="brightness_gesture_control_summary">Player-Helligkeit über Gesten steuern</string>
|
||||
<string name="brightness_gesture_control_summary">Gesten verwenden, um die Helligkeit einzustellen</string>
|
||||
<string name="settings_category_updates_title">Aktualisierungen</string>
|
||||
<string name="file_deleted">Datei gelöscht</string>
|
||||
<string name="app_update_notification_channel_name">App-Update-Benachrichtigung</string>
|
||||
@@ -638,12 +638,12 @@
|
||||
<string name="clear_queue_confirmation_title">Bestätige das Leeren der Warteschlange</string>
|
||||
<string name="clear_queue_confirmation_description">Die aktive Wiedergabeliste wird ersetzt werden</string>
|
||||
<string name="enqueued">Eingereiht</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube bietet einen „Eingeschränkten Modus“, der potenzielle Inhalte für Erwachsene ausblendet.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube bietet einen „Eingeschränkten Modus“, der potenzielle Inhalte für Erwachsene ausblendet</string>
|
||||
<string name="show_memory_leaks">Speicherlecks anzeigen</string>
|
||||
<string name="clear_cookie_summary">Lösche Cookies, die NewPipe speichert, wenn du ein reCAPTCHA löst</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA-Cookies wurden gelöscht</string>
|
||||
<string name="clear_cookie_title">reCAPTCHA-Cookies löschen</string>
|
||||
<string name="show_age_restricted_content_summary">Zeige Inhalt, der möglicherweise unpassend für Kinder ist, da er eine Altersbeschränkung (wie z.B. 18+) hat.</string>
|
||||
<string name="show_age_restricted_content_summary">Zeige altersbeschränkte Inhalte (bspw. 18+), welche möglicherweise unpassend für Kinder sein könnten</string>
|
||||
<string name="enqueue_stream">Wiedergabe einreihen</string>
|
||||
<string name="notification_colorize_summary">Android kann die Farbe der Benachrichtigung entsprechend der Hauptfarbe in der Miniaturansicht anpassen (beachte, dass dies nicht auf allen Geräten verfügbar ist)</string>
|
||||
<string name="notification_colorize_title">Benachrichtigung farblich anpassen</string>
|
||||
|
||||
@@ -633,8 +633,8 @@
|
||||
<string name="clear_cookie_summary">Εκκαθάριση των cookies που αποθηκεύει η εφαρμογή όταν λύνετε ένα reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Τα reCAPTCHA cookies εκκαθαρίστηκαν</string>
|
||||
<string name="clear_cookie_title">Εκκαθάριση reCAPTCHA cookies</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">Το YouTube διαθέτει \"Περιορισμένη Λειτουργία\" η οποία κρύβει πιθανώς ακατάλληλο περιεχόμενο.</string>
|
||||
<string name="show_age_restricted_content_summary">Εμφάνιση πιθανώς ακατάλληλου περιεχομένου (18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">Το YouTube διαθέτει \"Περιορισμένη Λειτουργία\" η οποία κρύβει πιθανώς ακατάλληλο περιεχόμενο</string>
|
||||
<string name="show_age_restricted_content_summary">Εμφάνιση πιθανώς ακατάλληλου περιεχομένου (18+)</string>
|
||||
<string name="peertube_instance_add_exists">Το instance υπάρχει ήδη</string>
|
||||
<string name="peertube_instance_add_fail">Αδυναμία πιστοποίησης του instance</string>
|
||||
<string name="peertube_instance_add_help">Προσθέστε την URL του instance</string>
|
||||
@@ -645,4 +645,6 @@
|
||||
<string name="peertube_instance_url_title">PeerTube instances</string>
|
||||
<string name="notification_colorize_title">Χρωματισμός ειδοποιήσεων</string>
|
||||
<string name="notification_colorize_summary">Επιτρέπει στο Android να τροποποιήσει το χρώμα της ειδοποίησης, σύμφωνα με το κύριο χρώμα του εικονιδίου (δεν διατίθεται σε όλες τις συσκευές)</string>
|
||||
<string name="show_thumbnail_summary">Εμφάνιση των εικονιδίων στην οθόνη κλειδώματος, ως φόντο και στις ειδοποιήσεις</string>
|
||||
<string name="show_thumbnail_title">Εμφάνιση</string>
|
||||
</resources>
|
||||
@@ -265,8 +265,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">Cargando contenido solicitado</string>
|
||||
<string name="import_data_title">Importar base de datos</string>
|
||||
<string name="export_data_title">Exportar base de datos</string>
|
||||
<string name="import_data_summary">Anula su historial actual y suscripciones</string>
|
||||
<string name="export_data_summary">Exportar historial, suscripciones y listas de reproducción</string>
|
||||
<string name="import_data_summary">Anula su historial actual, suscripciones, listas de reproducción y (opcionalmente) ajustes</string>
|
||||
<string name="export_data_summary">Exportar historial, suscripciones, listas de reproducción y ajustes</string>
|
||||
<string name="export_complete_toast">Exportado</string>
|
||||
<string name="import_complete_toast">Importado</string>
|
||||
<string name="no_valid_zip_file">Archivo ZIP no válido</string>
|
||||
@@ -331,11 +331,14 @@
|
||||
<string name="previous_export">Exportación anterior</string>
|
||||
<string name="subscriptions_import_unsuccessful">No se pudo importar suscripciones</string>
|
||||
<string name="subscriptions_export_unsuccessful">No se pudo exportar suscripciones</string>
|
||||
<string name="import_youtube_instructions">Importe suscripciones de YouTube descargando el archivo de exportación:
|
||||
\n
|
||||
\n1. Vaya a esta URL: %1$s
|
||||
\n2. Inicie sesión cuando se le pida
|
||||
\n3. Una descarga debería empezar (ese es el archivo de exportación)</string>
|
||||
<string name="import_youtube_instructions">Importe suscripciones de YouTube descargando el archivo de exportación:
|
||||
\n
|
||||
\n1. Vaya a esta URL: %1$s
|
||||
\n2. Inicie sesión cuando se le pida
|
||||
\n3. Haga click en \"Todos los datos inlcluídos\", después en \"Deseleccionar todo\", solamente elija \"Subscripciones\" y pulse \"OK\"
|
||||
\n4. Clickee en \"Siguiente\" y después en \"Crear exportación\"
|
||||
\n5. Clickee en el botón \"Descargar\" cuando aparezca
|
||||
\n6. Del archivo .zip descargado extraiga el .json (normalmente debajo de \"Youtube y Youtube Music/subscriptions/subscriptions.json\")e importelo aquí.</string>
|
||||
<string name="import_soundcloud_instructions">Importe un perfil de SoundCloud escribiendo la URL o su ID:
|
||||
\n
|
||||
\n1. Active el «modo escritorio» en un navegador web (el sitio no está disponible para dispositivos móviles)
|
||||
@@ -638,13 +641,15 @@
|
||||
<string name="notification_action_0_title">Botón de primera acción</string>
|
||||
<string name="notification_scale_to_square_image_summary">Escalar la miniatura del vídeo mostrada en la notificación de relación de aspecto 16:9 a 1:1 (puede ocasionar distorsiones)</string>
|
||||
<string name="clear_cookie_summary">Vaciar las cookies que NewPipe guarda al resolver un reCAPTCHA</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar contenido inapropiado para niños porque tiene un limite de edad (como 18+).</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar contenido inapropiado para niños porque tiene un limite de edad (como 18+)</string>
|
||||
<string name="show_memory_leaks">Mostrar pérdidas de memoria</string>
|
||||
<string name="enqueued">Añadido a la cola</string>
|
||||
<string name="enqueue_stream">Añadir a la cola</string>
|
||||
<string name="recaptcha_cookies_cleared">Las cookies reCAPTCHA han sido limpiadas</string>
|
||||
<string name="clear_cookie_title">Limpiar las cookies reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube provee un «Modo restringido», el cual oculta contenido potencialmente sólo apto para adultos.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube provee un «Modo restringido», el cual oculta contenido potencialmente sólo apto para adultos</string>
|
||||
<string name="notification_colorize_title">Ajustar color de notificación</string>
|
||||
<string name="notification_colorize_summary">Permitir a Android personalizar el color de la notificación con el color principal de la imagen (ten en cuenta que esta opción no funciona en todos los dispositivos)</string>
|
||||
<string name="show_thumbnail_summary">Mostrar miniatura como fondo de pantalla de bloqueo y dentro de notificaciones</string>
|
||||
<string name="show_thumbnail_title">Mostrar vista previa</string>
|
||||
</resources>
|
||||
@@ -39,7 +39,7 @@
|
||||
<string name="use_external_video_player_title">Erabili kanpo bideo-erreproduzigailua</string>
|
||||
<string name="use_external_audio_player_title">Erabili kanpo audio-erreproduzigailua</string>
|
||||
<string name="background_player_playing_toast">Atzeko planoan erreproduzitzen</string>
|
||||
<string name="main_bg_subtitle">\"Bilatu\" sakatu hasteko
|
||||
<string name="main_bg_subtitle">Sakatu \"Bilatu\" hasteko
|
||||
\n</string>
|
||||
<string name="download_path_audio_title">Audioa deskargatzeko karpeta</string>
|
||||
<string name="download_path_audio_dialog_title">Aukeratu audio fitxategiak deskargatzeko karpeta</string>
|
||||
@@ -618,8 +618,8 @@
|
||||
<string name="clear_cookie_summary">reCAPTCHA bat egiten duzunean NewPipe-k gordetzen dituen kookiak ezabatu</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA kookiak garbitu dira</string>
|
||||
<string name="clear_cookie_title">Ezabatu reCAPTCHA-ren kookiak</string>
|
||||
<string name="show_age_restricted_content_summary">Adinez mugatuta dagoen eta haurrentzako desegokia izan daitezkeen edukia erakutsi (+18 adibidez).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube-ren \"Modu Murriztua\" helduentzako edukia izan daitekeen edukia ezkutatzen du.</string>
|
||||
<string name="show_age_restricted_content_summary">Adinez mugatuta dagoen eta haurrentzako desegokia izan daitezkeen edukia erakutsi (+18 adibidez)</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube-ren \"Modu Murriztua\" helduentzako edukia izan daitekeen edukia ezkutatzen du</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Piztu YouTube-ren \"Modu Murriztua\"</string>
|
||||
<string name="settings_category_notification_title">Jakinarazpena</string>
|
||||
<string name="unsupported_url_dialog_message">Ezin izan da URL-a ezagutu. Beste aplikazio batekin ireki\?</string>
|
||||
@@ -628,7 +628,7 @@
|
||||
<string name="clear_queue_confirmation_summary">Erreproduzitzaile batetik beste batera aldatzeak ilara ordezkatu dezake</string>
|
||||
<string name="clear_queue_confirmation_title">Konfirmazioa eskatu ilaratik ezabatu baino lehenago</string>
|
||||
<string name="notification_action_nothing">Ezer ez</string>
|
||||
<string name="notification_action_buffering">Buffering</string>
|
||||
<string name="notification_action_buffering">Buferreratzen</string>
|
||||
<string name="notification_action_shuffle">Aleatorio</string>
|
||||
<string name="notification_actions_at_most_three">Gehienez hiru ekintza aukera ditzakezu jakinarazpenean erakusteko!</string>
|
||||
<string name="notification_action_repeat">Errepikatu</string>
|
||||
@@ -647,4 +647,6 @@
|
||||
<string name="notification_actions_summary">Editatu beheko jakinarazpen ekintza bakoitza gainean sakatuz. Hautatu horietako hiru gehienez jakinarazpen trinkoan erakusteko eskuineko kontrol laukiak erabiliz.</string>
|
||||
<string name="notification_colorize_summary">Androidek miniaturako kolore nagusiaren arabera jakinarazpenaren kolorea pertsonalizatzea baimendu (kontuan izan ez dagoela gailu guztietan erabilgarri)</string>
|
||||
<string name="notification_colorize_title">Koloreztatu jakinarazpena</string>
|
||||
<string name="show_thumbnail_summary">Erakutsi miniatura blokeo pantailan atzeko planoko eta barruko jakinarazpen bezala</string>
|
||||
<string name="show_thumbnail_title">Erakutsi miniatura</string>
|
||||
</resources>
|
||||
@@ -643,8 +643,8 @@
|
||||
<string name="clear_cookie_summary">Poista evästeet, jotka NewPipe tallentaa, kun ratkaiset reCAPTCHA:n</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA-evästeet on poistettu</string>
|
||||
<string name="clear_cookie_title">Poista reCAPTCHA-evästeet</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube tarjoaa ”Rajoitetun tilan”, joka piilottaa aikuisviihdesisällön.</string>
|
||||
<string name="show_age_restricted_content_summary">Näytä mahdollisesti lapsille sopimaton sisältö, jolla on ikäraja (esim. 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube tarjoaa ”Rajoitetun tilan”, joka piilottaa aikuisviihdesisällön</string>
|
||||
<string name="show_age_restricted_content_summary">Näytä mahdollisesti lapsille sopimaton sisältö, jolla on ikäraja (esim. 18+)</string>
|
||||
<string name="notification_colorize_summary">Anna Androidin muokata ilmoituksen väriä esikatselukuvan päävärin mukaan (tämä ei ole mahdollista kaikilla laitteilla)</string>
|
||||
<string name="notification_colorize_title">Käytä värejä ilmoituksessa</string>
|
||||
</resources>
|
||||
@@ -53,7 +53,7 @@
|
||||
<string name="general_error">Erreur</string>
|
||||
<string name="parsing_error">Impossible d’analyser le site web</string>
|
||||
<string name="content_not_available">Contenu indisponible</string>
|
||||
<string name="error_snackbar_message">Désolé, quelque chose s\'est mal passé.</string>
|
||||
<string name="error_snackbar_message">Désolé, quelque chose s’est mal passé.</string>
|
||||
<string name="content">Contenu</string>
|
||||
<string name="show_age_restricted_content_title">Afficher le contenu avec limite d’âge</string>
|
||||
<string name="duration_live">En direct</string>
|
||||
@@ -263,8 +263,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">Chargement du contenu demandé</string>
|
||||
<string name="import_data_title">Importer la base de données</string>
|
||||
<string name="export_data_title">Exporter la base de données</string>
|
||||
<string name="import_data_summary">Remplace votre historique et vos abonnements actuels</string>
|
||||
<string name="export_data_summary">Exporte l’historique, les abonnements et les listes de lecture</string>
|
||||
<string name="import_data_summary">Remplace votre historique, vos abonnements, vos listes de lecture et (en option) vos paramètres</string>
|
||||
<string name="export_data_summary">Exporte l’historique, les abonnements, les listes de lecture et les paramètres</string>
|
||||
<string name="export_complete_toast">Exporté</string>
|
||||
<string name="import_complete_toast">Importé</string>
|
||||
<string name="no_valid_zip_file">Fichier ZIP non valide</string>
|
||||
@@ -334,14 +334,14 @@
|
||||
<string name="previous_export">Exportation précédente</string>
|
||||
<string name="subscriptions_import_unsuccessful">Impossible d’importer les abonnements</string>
|
||||
<string name="subscriptions_export_unsuccessful">Impossible d’exporter les abonnements</string>
|
||||
<string name="import_youtube_instructions">Importez vos abonnements YouTube depuis Google Takeout :
|
||||
<string name="import_youtube_instructions">Importez vos abonnements YouTube depuis Google Takeout :
|
||||
\n
|
||||
\n1. Suivez ce lien : %1$s
|
||||
\n2. Connectez-vous à votre compte
|
||||
\n3. Cliquez sur \"Toutes les données Youtube sont incluses\", puis sur \"Tout désélectionner\", puis sélectionnez uniquement \"abonnements\" et cliquez sur \"OK\"
|
||||
\n4. Cliquez sur \"Étape suivante\" et ensuite sur \"Créer une exportation\"
|
||||
\n5. Cliquez sur le bouton \"Télécharger\" après qu\'il apparaisse et
|
||||
\n6. À partir du fichier zip téléchargé, extrayez le fichier .json (généralement sous \"YouTube et YouTube Music/subscriptions/subscriptions.json\") et importez-le ici.</string>
|
||||
\n3. Cliquez sur « Toutes les données YouTube sont incluses », puis sur « Tout désélectionner », puis sélectionnez uniquement « abonnements » et cliquez sur « OK »
|
||||
\n4. Cliquez sur « Étape suivante » et ensuite sur « Créer une exportation »
|
||||
\n5. Cliquez sur le bouton « Télécharger » après qu’il apparaisse et
|
||||
\n6. À partir du fichier ZIP téléchargé, extrayez le fichier JSON (généralement sous « YouTube et YouTube Music/subscriptions/subscriptions.json ») et importez-le ici.</string>
|
||||
<string name="import_soundcloud_instructions">Veuillez importer un profil SoundCloud en saisissant l’URL de votre profil ou votre identifiant.
|
||||
\n
|
||||
\n1. Activez le « mode bureau » dans votre navigateur Web (le site n’est pas disponible pour les appareils mobiles).
|
||||
@@ -594,9 +594,9 @@
|
||||
<string name="more_than_100_videos">100+ vidéos</string>
|
||||
<string name="artists">Artistes</string>
|
||||
<string name="songs">Chansons</string>
|
||||
<string name="restricted_video">Cette vidéo dispose d\'une limite d\'âge.
|
||||
<string name="restricted_video">Cette vidéo dispose d’une limite d’âge.
|
||||
\n
|
||||
\nActivez « %1$s » dans les paramètres si vous voulez la voir.</string>
|
||||
\nActivez « %1$s » dans les paramètres si vous voulez la voir.</string>
|
||||
<string name="remove_watched">Supprimer les vidéos vues</string>
|
||||
<string name="remove_watched_popup_yes_and_partially_watched_videos">Oui, et des vidéos partiellement regardées</string>
|
||||
<string name="remove_watched_popup_warning">Les vidéos qui ont été regardées avant et après avoir été ajoutées à la liste de lecture seront supprimées.
|
||||
@@ -607,7 +607,7 @@
|
||||
<string name="channel_created_by">Créé par %s</string>
|
||||
<string name="show_original_time_ago_summary">Les textes originaux des services vont être visibles dans les items</string>
|
||||
<string name="show_original_time_ago_title">Afficher la date originelle sur les items</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Activer le « Mode restreint » de YouTube</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Activer le « Mode restreint » de YouTube</string>
|
||||
<string name="feed_group_show_only_ungrouped_subscriptions">Afficher uniquement les abonnements non groupés</string>
|
||||
<string name="playlist_page_summary">Page des listes de lecture</string>
|
||||
<string name="no_playlist_bookmarked_yet">Aucune liste de lecture encore enregistrée</string>
|
||||
@@ -616,12 +616,12 @@
|
||||
<string name="error_report_open_issue_button_text">Signaler sur GitHub</string>
|
||||
<string name="copy_for_github">Copier le rapport formaté</string>
|
||||
<string name="search_showing_result_for">Affichage des résultats pour : %s</string>
|
||||
<string name="clear_queue_confirmation_summary">Changer d\'un lecteur à un autre pourrait remplacer votre liste de lecture</string>
|
||||
<string name="clear_queue_confirmation_summary">Basculer d’un lecteur à un autre peut remplacer votre liste de lecture</string>
|
||||
<string name="never">Jamais</string>
|
||||
<string name="wifi_only">Uniquement en Wi-Fi</string>
|
||||
<string name="autoplay_summary">Démarrer la lecture automatiquement — %s</string>
|
||||
<string name="title_activity_play_queue">Liste de lecture</string>
|
||||
<string name="unsupported_url_dialog_message">Impossible de reconnaitre l\'URL fourni. Voulez vous l\'ouvrir avec une autre appli \?</string>
|
||||
<string name="unsupported_url_dialog_message">Impossible de reconnaitre l’URL fournie. Voulez-vous l’ouvrir avec une autre application \?</string>
|
||||
<string name="auto_queue_toggle">Ajouter automatiquement à la liste de lecture</string>
|
||||
<string name="clear_queue_confirmation_description">La liste de lecture du lecteur actif sera remplacée</string>
|
||||
<string name="clear_queue_confirmation_title">Confirmer av. de suppr. la liste de lecture</string>
|
||||
@@ -631,24 +631,24 @@
|
||||
<string name="notification_action_shuffle">Lire aléatoirement</string>
|
||||
<string name="notification_action_repeat">Répéter</string>
|
||||
<string name="notification_actions_at_most_three">Vous pouvez sélectionner au maximum trois actions à faire figurer dans la notification compacte !</string>
|
||||
<string name="notification_actions_summary">Modifiez chaque action de notification ci-dessous en appuyant dessus. Sélectionnez jusqu\'à trois d\'entre elles pour les faire apparaitre dans la notification compacte en utilisant les cases à cocher à droite.</string>
|
||||
<string name="notification_action_4_title">Cinquième bouton d\'action</string>
|
||||
<string name="notification_action_3_title">Quatrième bouton d\'action</string>
|
||||
<string name="notification_action_2_title">Troisième bouton d\'action</string>
|
||||
<string name="notification_action_1_title">Deuxième bouton d\'action</string>
|
||||
<string name="notification_action_0_title">Premier bouton d\'action</string>
|
||||
<string name="notification_scale_to_square_image_summary">Mettre à l\'échelle la miniature de la vidéo affichée dans la notification du format 16:9 au format 1:1 (peut provoquer des déformations)</string>
|
||||
<string name="notification_actions_summary">Modifiez chaque action de notification ci-dessous en appuyant dessus. Sélectionnez jusqu’à trois d’entre elles pour les faire apparaitre dans la notification compacte en utilisant les cases à cocher à droite.</string>
|
||||
<string name="notification_action_4_title">Cinquième bouton d’action</string>
|
||||
<string name="notification_action_3_title">Quatrième bouton d’action</string>
|
||||
<string name="notification_action_2_title">Troisième bouton d’action</string>
|
||||
<string name="notification_action_1_title">Deuxième bouton d’action</string>
|
||||
<string name="notification_action_0_title">Premier bouton d’action</string>
|
||||
<string name="notification_scale_to_square_image_summary">Scale la miniature de la vidéo affichée dans la notification du rapport de forme 16:9 au 1:1 (peut provoquer des déformations)</string>
|
||||
<string name="notification_scale_to_square_image_title">Dimensionner la miniature au format 1:1</string>
|
||||
<string name="show_memory_leaks">Afficher les fuites de mémoire</string>
|
||||
<string name="enqueued">Ajouté à la file d\'attente</string>
|
||||
<string name="enqueue_stream">Ajouter à la file d\'attente</string>
|
||||
<string name="enqueued">Ajouté à la file d’attente</string>
|
||||
<string name="enqueue_stream">Ajouter à la file d’attente</string>
|
||||
<string name="clear_cookie_summary">Effacer les cookies que NewPipe garde lorsque vous résolvez un reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Les cookies reCAPTCHA ont été effacés</string>
|
||||
<string name="clear_cookie_title">Effacer les cookies reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube dispose d\'un « Mode restreint » qui cache le contenu potentiellement inapproprié.</string>
|
||||
<string name="show_age_restricted_content_summary">Le contenu de cette émission n\'est peut-être pas approprié pour les enfants à cause d\'une limite d\'âge (18 +).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube dispose d’un « Mode restreint » qui cache le contenu potentiellement inapproprié</string>
|
||||
<string name="show_age_restricted_content_summary">Affiche du contenu probablement inapproprié pour les enfants</string>
|
||||
<string name="notification_colorize_title">Notification colorée</string>
|
||||
<string name="notification_colorize_summary">Demander à Android de personnaliser la couleur de la notification en fonction de la couleur principale de la miniature (noter que cela n’est pas disponible sur tous les appareils)</string>
|
||||
<string name="show_thumbnail_title">Afficher la miniature</string>
|
||||
<string name="show_thumbnail_summary">Afficher la minitature en arrière-plan de l\'écran de verrouillage et dans les notifications</string>
|
||||
<string name="show_thumbnail_summary">Afficher la miniature en arrière-plan de l’écran de verrouillage et dans les notifications</string>
|
||||
</resources>
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="main_bg_subtitle">Toque en \"Buscar\" para comezar</string>
|
||||
<string name="main_bg_subtitle">Toque en \"Buscar\" para comezar
|
||||
\n</string>
|
||||
<string name="view_count_text">%1$s visualizacións</string>
|
||||
<string name="upload_date_text">Publicado o día %1$s</string>
|
||||
<string name="no_player_found">Non foi encontrado ningún reprodutor. Quere instalar o VLC\?</string>
|
||||
@@ -14,7 +15,7 @@
|
||||
<string name="controls_download_desc">Descargar o ficheiro de transmisión</string>
|
||||
<string name="search">Procurar</string>
|
||||
<string name="settings">Opcións</string>
|
||||
<string name="did_you_mean">Non querería dicir %1$s\?</string>
|
||||
<string name="did_you_mean">Non querería dicir \"%1$s\"\?</string>
|
||||
<string name="share_dialog_title">Compartillar con</string>
|
||||
<string name="choose_browser">Escoller un navegador</string>
|
||||
<string name="screen_rotation">rotación</string>
|
||||
@@ -610,4 +611,14 @@
|
||||
<string name="tab_new">Nova lapela</string>
|
||||
<string name="unsubscribe">Darse de baixa</string>
|
||||
<string name="search_showing_result_for">Amosando resultados para: %s</string>
|
||||
<string name="notification_action_buffering">Procesando</string>
|
||||
<string name="notification_action_repeat">Repetir</string>
|
||||
<string name="notification_actions_at_most_three">Podes seleccionar como máximo tres accións para amosar na notificación compacta!</string>
|
||||
<string name="notification_action_0_title">Primeiro botón de acción</string>
|
||||
<string name="notification_action_1_title">Segundo botón de acción</string>
|
||||
<string name="notification_action_2_title">Terceiro botón de acción</string>
|
||||
<string name="notification_action_3_title">Cuarto botón de acción</string>
|
||||
<string name="notification_action_4_title">Quinto botón de acción</string>
|
||||
<string name="notification_scale_to_square_image_summary">Escalar a miniatura do vídeo amosado na notificación da relación de aspecto 16:9 a 1:1 (pode intruducir distorsións)</string>
|
||||
<string name="notification_scale_to_square_image_title">Escala miniatura á relación de aspecto 1:1</string>
|
||||
</resources>
|
||||
@@ -268,7 +268,7 @@
|
||||
<string name="thumbnail_cache_wipe_complete_notice">תמונות מטמון נמחקו</string>
|
||||
<string name="metadata_cache_wipe_title">ניקוי מטמון נתוני העל</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">מטמון נתוני העל התרוקן</string>
|
||||
<string name="export_data_summary">ייצוא היסטוריה, מינויים ורשימות נגינה</string>
|
||||
<string name="export_data_summary">ייצוא היסטוריה, מינויים, רשימות נגינה והגדרות</string>
|
||||
<string name="clear_views_history_title">מחיקת היסטוריית הצפייה</string>
|
||||
<string name="watch_history_deleted">היסטוריית הצפייה נמחקה.</string>
|
||||
<string name="clear_search_history_title">מחיקת היסטוריית החיפוש</string>
|
||||
@@ -336,7 +336,7 @@
|
||||
<string name="auto_queue_summary">להמשיך תור נגינה סופית (בלתי מחזורית) על ידי הוספת תזרים קשור</string>
|
||||
<string name="toggle_orientation">החלפת כיווניות</string>
|
||||
<string name="switch_to_main">העברה לראשי</string>
|
||||
<string name="import_data_summary">משכתב את ההיסטוריה והמינויים הנוכחיים שלך</string>
|
||||
<string name="import_data_summary">משכתב את ההיסטוריה, המינויים ו(אולי גם) את ההגדרות הנוכחיים שלך</string>
|
||||
<string name="clear_views_history_summary">מחיקת היסטוריית התזרימים שהתנגנו ומיקומי הנגינה</string>
|
||||
<string name="channels">ערוצים</string>
|
||||
<string name="playlists">רשימות נגינה</string>
|
||||
@@ -663,8 +663,10 @@
|
||||
<string name="clear_cookie_summary">לנקות עוגיות שנשמרות על ידי NewPipe בעת פתרון reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">העוגיות של ה־reCAPTCHA נמחקו</string>
|
||||
<string name="clear_cookie_title">פינוי עוגיות reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">פלטפורמת YouTube מספקת „מצב מוגבל” שמסתיר תוכן שעשוי להתאים למבוגרים בלבד.</string>
|
||||
<string name="show_age_restricted_content_summary">הצגת תוכן שעלול להיות בלתי הולם לילדים עקב מגבלת גיל (כגון 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">פלטפורמת YouTube מספקת „מצב מוגבל” שמסתיר תוכן שעשוי להתאים למבוגרים בלבד</string>
|
||||
<string name="show_age_restricted_content_summary">הצגת תוכן שעלול להיות בלתי הולם לילדים עקב מגבלת גיל (כגון 18+)</string>
|
||||
<string name="notification_colorize_summary">לאפשר ל־Android להתאים את צבע ההתראה בהתאם לצבע העיקרי של התמונה הממוזערת (לא זמין בכל המכשירים)</string>
|
||||
<string name="notification_colorize_title">צביעת ההתראה</string>
|
||||
<string name="show_thumbnail_summary">הצגת תמונה ממוזערת על מסך הנעילה כרקע ובתוך ההתראות</string>
|
||||
<string name="show_thumbnail_title">הצגת תמונה ממוזערת</string>
|
||||
</resources>
|
||||
@@ -309,7 +309,7 @@
|
||||
<string name="enable_disposed_exceptions_title">Out-of-Lifecycle त्रुटियों की रिपोर्ट करें</string>
|
||||
<string name="download_thumbnail_title">छायाप्रारुप लोड करें</string>
|
||||
<string name="use_inexact_seek_title">तेजी से अचूक तलाश का प्रयोग करें</string>
|
||||
<string name="use_inexact_seek_summary">अचूक खोज प्लेयर को कम परिशुद्धता के साथ तेजी से पदों की तलाश करने की अनुमति देता है</string>
|
||||
<string name="use_inexact_seek_summary">अचूक खोज प्लेयर को कम परिशुद्धता के साथ तेजी से पदों की तलाश करने की अनुमति देता है|</string>
|
||||
<string name="download_thumbnail_summary">थंबनेल लोड करने, डेटा और मेमोरी उपयोग को रोकने के लिए बंद करें। इन-मेमोरी और ऑन-डिस्क छवि कैश दोनों को बदलता है|</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">छवि कैश मिटा दिया</string>
|
||||
<string name="metadata_cache_wipe_title">कैश मेटाडेटा वाइप करें</string>
|
||||
@@ -527,4 +527,35 @@
|
||||
<string name="songs">गाने</string>
|
||||
<string name="never">कभी नहीं</string>
|
||||
<string name="help">सहायता</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA कुकीज़ को साफ़ कर दिए गए हैं</string>
|
||||
<string name="clear_cookie_title">ReCAPTCHA कुकीज़ साफ़ करें</string>
|
||||
<string name="albums">एल्बम</string>
|
||||
<string name="videos_string">वीडियो</string>
|
||||
<string name="restricted_video">यह वीडियो उम्र प्रतिबंधित है।
|
||||
\n
|
||||
\nयदि आप इसे देखना चाहते हैं तो सेटिंग में \"%1$s\" चालू करें।</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">यूट्यूब एक \"प्रतिबंधित मोड\" प्रदान करता है जो संभावित रूप से परिपक्व सामग्री को छुपाता है</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">यूट्यूब का \"प्रतिबंधित मोड\" चालू करें</string>
|
||||
<string name="show_age_restricted_content_summary">बच्चों के लिए अनुपयुक्त सामग्री दिखाएं क्योंकि इसकी आयु सीमा है (जैसे 18)</string>
|
||||
<string name="settings_category_notification_title">अधिसूचना</string>
|
||||
<string name="peertube_instance_add_https_only">केवल हटितीपीस यूआरएल समर्थित हैं</string>
|
||||
<string name="unsupported_url_dialog_message">यूआरएल को नहीं पहचान पाये। दूसरे ऐप से खोलें\?</string>
|
||||
<string name="auto_queue_toggle">ऑटो कतार</string>
|
||||
<string name="clear_queue_confirmation_title">कतार को साफ़ करने से पहले पुष्टि के लिए पूछें</string>
|
||||
<string name="seek_duration_title">फास्ट-फ़ॉरवर्ड /- रिवाइंड</string>
|
||||
<string name="notification_colorize_summary">एंड्रॉइड को थंबनेल में मुख्य रंग के अनुसार अधिसूचना के रंग को अनुकूलित करने दें (ध्यान दें कि यह सभी फोन पर उपलब्ध नहीं है)</string>
|
||||
<string name="notification_colorize_title">अधिसूचना को रंग दें</string>
|
||||
<string name="notification_action_nothing">कुछ नहीं</string>
|
||||
<string name="notification_action_buffering">बफरिंग</string>
|
||||
<string name="notification_action_shuffle">फेरबदल करे</string>
|
||||
<string name="notification_action_repeat">दोहराएं</string>
|
||||
<string name="notification_actions_at_most_three">कॉम्पैक्ट अधिसूचना में दिखाने के लिए आप अधिकतम तीन क्रियाओं का चयन कर सकते हैं!</string>
|
||||
<string name="notification_actions_summary">इस पर टैप करके नीचे दी गई प्रत्येक सूचना को संपादित करें। दाईं ओर चेकबॉक्स का उपयोग करके कॉम्पैक्ट अधिसूचना में दिखाए जाने के लिए उनमें से तीन तक का चयन करें।</string>
|
||||
<string name="notification_action_4_title">पांचवा एक्शन बटन</string>
|
||||
<string name="notification_action_3_title">चौथा एक्शन बटन</string>
|
||||
<string name="notification_action_2_title">तीसरा एक्शन बटन</string>
|
||||
<string name="notification_action_1_title">दूसरा एक्शन बटन</string>
|
||||
<string name="notification_action_0_title">पहला एक्शन बटन</string>
|
||||
<string name="notification_scale_to_square_image_summary">अधिसूचना में दिखाए गए वीडियो थंबनेल को 16: 9 से 1: 1 के अनुपात में दिखाया गया है (विकृतियों का परिचय दे सकता है)</string>
|
||||
<string name="notification_scale_to_square_image_title">वीडियो छवि को 1:1 के आस्पेक्ट अनुपात मैं देखें</string>
|
||||
</resources>
|
||||
@@ -290,15 +290,15 @@
|
||||
<string name="switch_to_main">Prijeđi na glavni</string>
|
||||
<string name="import_data_title">Uvoz baze podataka</string>
|
||||
<string name="export_data_title">Izvoz baze podataka</string>
|
||||
<string name="import_data_summary">Poništava vašu trenutnu povijest i pretplate</string>
|
||||
<string name="export_data_summary">Izvezi povijest, pretplate i playliste</string>
|
||||
<string name="clear_views_history_title">Očisti povijest gledanja</string>
|
||||
<string name="import_data_summary">Poništava vašu trenutačnu povijest, pretplate, playliste i (opcionalno) postavke</string>
|
||||
<string name="export_data_summary">Izvezi povijest, pretplate, playliste i postavke</string>
|
||||
<string name="clear_views_history_title">Izbriši povijest gledanja</string>
|
||||
<string name="clear_views_history_summary">Briše povijest reproduciranih streamova i pozicije reprodukcije</string>
|
||||
<string name="delete_view_history_alert">Obriši cijelu povijest gledanja\?</string>
|
||||
<string name="watch_history_deleted">Povijest gledanja izbrisana.</string>
|
||||
<string name="clear_search_history_title">Obriši povijest pretraživanja</string>
|
||||
<string name="delete_search_history_alert">Obriši cijelu povijest pretraživanja\?</string>
|
||||
<string name="search_history_deleted">Povijest pretraživanja obrisana.</string>
|
||||
<string name="delete_view_history_alert">Izbrisati cijelu povijest gledanja\?</string>
|
||||
<string name="watch_history_deleted">Povijest gledanja je izbrisana.</string>
|
||||
<string name="clear_search_history_title">Izbriši povijest pretraživanja</string>
|
||||
<string name="delete_search_history_alert">Izbrisati cijelu povijest pretraživanja\?</string>
|
||||
<string name="search_history_deleted">Povijest pretraživanja je izbrisana.</string>
|
||||
<string name="invalid_url_toast">Neispravan URL</string>
|
||||
<string name="invalid_directory">Nema takve mape</string>
|
||||
<string name="file_name_empty_error">Naziv datoteke ne može biti prazan</string>
|
||||
@@ -477,9 +477,9 @@
|
||||
<string name="start_downloads">Započni preuzimanja</string>
|
||||
<string name="pause_downloads">Zaustavi preuzimanja</string>
|
||||
<string name="downloads_storage_ask_title">Pitaj gdje preuzeti</string>
|
||||
<string name="clear_playback_states_title">Obriši poziciju reprodukcije</string>
|
||||
<string name="clear_playback_states_summary">Obriši sve pozicije reprodukcije</string>
|
||||
<string name="delete_playback_states_alert">Obriši sve pozicije reprodukcije\?</string>
|
||||
<string name="clear_playback_states_title">Izbriši poziciju reprodukcije</string>
|
||||
<string name="clear_playback_states_summary">Izbriši sve pozicije reprodukcije</string>
|
||||
<string name="delete_playback_states_alert">Izbrisati sve pozicije reprodukcije\?</string>
|
||||
<string name="no_one_watching">Nitko ne gleda</string>
|
||||
<string name="no_one_listening">Nitko ne sluša</string>
|
||||
<string name="localization_changes_requires_app_restart">Jezik će se promjeniti nakon ponovnog pokretanja aplikacije.</string>
|
||||
@@ -616,9 +616,9 @@
|
||||
<string name="restricted_video">Ovaj video je dobno ograničen.
|
||||
\n
|
||||
\nZa prikaz sadržaja uključi „%1$s” u postavkama.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube nudi postavku „Ograničeni način rada”, čime se skriva sadržaj za odrasle.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube nudi postavku „Ograničeni način rada”, čime se skriva sadržaj za odrasle</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Uključi YouTube postavku „Ograničeni način rada”</string>
|
||||
<string name="show_age_restricted_content_summary">Prikaži sadržaj koji nije prikladan za određenu dob (kategorija 18).</string>
|
||||
<string name="show_age_restricted_content_summary">Prikaži sadržaj koji vjerojatno nije prikladan za djecu, jer je dobno ograničen (kategorija 18)</string>
|
||||
<string name="peertube_instance_add_exists">Primjerak već postoji</string>
|
||||
<string name="peertube_instance_add_fail">Neuspjela provjera primjerka</string>
|
||||
<string name="peertube_instance_add_help">Upiši URL primjerka</string>
|
||||
@@ -635,4 +635,14 @@
|
||||
<string name="new_seek_duration_toast">Zbog ograničenja ExoPlayera, trajanje traženja postavljeno je na %d s</string>
|
||||
<string name="notification_colorize_summary">Neka Android prilagodi boju obavijesti prema glavnoj boji minijature (ovo nije dostupno na svim uređajima)</string>
|
||||
<string name="notification_colorize_title">Oboji obavijest</string>
|
||||
<string name="content_not_supported">NewPipe još ne podržava ovaj sadržaj.
|
||||
\n
|
||||
\nNadamo se da će biti podržan u budućoj verziji.</string>
|
||||
<string name="show_thumbnail_summary">Prikaži minijaturu kao pozadinu pri zaključanom ekranu i unutar obavijesti</string>
|
||||
<string name="show_thumbnail_title">Prikaži minijaturu</string>
|
||||
<string name="show_original_time_ago_title">Prikaži izvorno vrijeme elemenata</string>
|
||||
<string name="downloads_storage_use_saf_summary">„Okvir za pristup spremištu” omogućuje preuzimanje na SD karticu.
|
||||
\nNeki uređaji nisu kompatibilni</string>
|
||||
<string name="show_original_time_ago_summary">Izvorni tekstovi usluga bit će vidljivi u elementima prijenosa</string>
|
||||
<string name="feed_use_dedicated_fetch_method_summary">Dostupno je u nekim uslugama. Obično je puno brže, ali može vratiti ograničenu količinu predmeta i često nepotpune podatke (npr. bez trajanja, vrste predmeta, bez stanja uživo).</string>
|
||||
</resources>
|
||||
@@ -459,4 +459,8 @@
|
||||
<string name="clear_playback_states_title">Lejátszási pozíciók törlése</string>
|
||||
<string name="search_showing_result_for">Találatok a következőre: %s</string>
|
||||
<string name="notification_scale_to_square_image_title">Bélyegkép méretezése 1:1 arányra</string>
|
||||
<string name="notification_colorize_title">Értesítés színezése</string>
|
||||
<string name="notification_action_nothing">Semmi</string>
|
||||
<string name="notification_action_shuffle">Keverés</string>
|
||||
<string name="notification_action_repeat">Ismétlés</string>
|
||||
</resources>
|
||||
@@ -7,14 +7,14 @@
|
||||
<string name="settings">Պարամետրեր</string>
|
||||
<string name="share">Կիսվել</string>
|
||||
<string name="black_theme_title">Սև</string>
|
||||
<string name="theme_title">Թեմա</string>
|
||||
<string name="theme_title">Ոճ</string>
|
||||
<string name="light_theme_title">Բաց</string>
|
||||
<string name="dark_theme_title">Մուգ</string>
|
||||
<string name="msg_wait">Սպասեք…</string>
|
||||
<string name="msg_exists">Ֆայլ արդեն կա</string>
|
||||
<string name="msg_error">Սխալ</string>
|
||||
<string name="msg_name">ֆայլի անունը</string>
|
||||
<string name="finish">Այո</string>
|
||||
<string name="msg_name">ֆայլի անուն</string>
|
||||
<string name="finish">Լավ</string>
|
||||
<string name="delete">Ջնջել</string>
|
||||
<string name="start">Սկսել</string>
|
||||
<string name="detail_likes_img_view_description">Հավանում եմ</string>
|
||||
@@ -36,13 +36,13 @@
|
||||
<string name="tab_choose">Ընտրեք ներդիր</string>
|
||||
<string name="tab_new">Նոր էջանշան</string>
|
||||
<string name="tab_bookmarks">Էջանշված երգացանկեր</string>
|
||||
<string name="tab_subscriptions">Բաժանորդագրումները</string>
|
||||
<string name="tab_subscriptions">Բաժանորդագրումներ</string>
|
||||
<string name="tab_main">Հիմնական</string>
|
||||
<string name="show_info">Ցուցադրել տեղեկույթը</string>
|
||||
<string name="show_info">Ցուցադրել ինֆոն</string>
|
||||
<string name="subscription_update_failed">Հնարավոր չէ թարմացնել բաժանորդագրումը</string>
|
||||
<string name="subscription_change_failed">Հնարավոր չէ փոխել Բաժանորդագրումը</string>
|
||||
<string name="channel_unsubscribed">Չեղարկել բաժանորդագրման հեռացումը</string>
|
||||
<string name="unsubscribe">Բաժանորդագրման հեռացու</string>
|
||||
<string name="unsubscribe">Ապաբաժանորդագրվել</string>
|
||||
<string name="subscribe_button_title">Բաժանորդագրվել</string>
|
||||
<string name="use_external_video_player_summary">Հառացնում է ձայնը որոշ լուծաչափերոկմ</string>
|
||||
<string name="screen_rotation">Դիրք</string>
|
||||
@@ -104,4 +104,46 @@
|
||||
<string name="playback_step">Քայլ</string>
|
||||
<string name="playback_tempo">Տեմպ</string>
|
||||
<string name="download">Բեռնել</string>
|
||||
<string name="no_comments">Կարծիքներ չկան</string>
|
||||
<string name="name">Վերնագիր</string>
|
||||
<string name="rename_playlist">Վերանվանել</string>
|
||||
<string name="view">Նվագել</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="one">%s տեսանյութ</item>
|
||||
<item quantity="other">%s տեսանյութ</item>
|
||||
</plurals>
|
||||
<string name="infinite_videos">∞ տեսանյութեր</string>
|
||||
<string name="more_than_100_videos">100+ տեսանյութեր</string>
|
||||
<plurals name="watching">
|
||||
<item quantity="one">%s դիտում է</item>
|
||||
<item quantity="other">%s դիտում են</item>
|
||||
</plurals>
|
||||
<plurals name="views">
|
||||
<item quantity="one">%s դիտում</item>
|
||||
<item quantity="other">%s դիտում</item>
|
||||
</plurals>
|
||||
<string name="subscribed_button_title">Բաժանորդագրված</string>
|
||||
<string name="delete_one">Ջնջել մեկը</string>
|
||||
<string name="rename">Վերանվանել</string>
|
||||
<string name="delete_all">Ջնջել բոլորը</string>
|
||||
<string name="create">Ստեղծել</string>
|
||||
<string name="download_finished_more">%s ներբեռնում ավարտվեց</string>
|
||||
<string name="download_failed">Ներբեռնումը խափանվեց</string>
|
||||
<string name="download_finished">Ներբեռնումը ավարտվեց</string>
|
||||
<string name="enqueue">Հերթ</string>
|
||||
<string name="missions_header_finished">Ավարտված</string>
|
||||
<string name="settings_category_feed_title">Հոսք</string>
|
||||
<string name="feed_group_dialog_empty_name">Դատարկ խմբի անուն</string>
|
||||
<string name="feed_group_dialog_select_subscriptions">Նշիր բաժանորդագրումներ</string>
|
||||
<string name="feed_notification_loading">Բեռնում եմ հոսքը…</string>
|
||||
<string name="fragment_feed_title">Ինչ կա֊չկա</string>
|
||||
<string name="remove_watched">Հեռացնել դիտվածները</string>
|
||||
<string name="settings_category_player_behavior_title">Վարքագիծ</string>
|
||||
<string name="video">Տեսանյութ</string>
|
||||
<string name="show_comments_title">Տեսնել մեկնաբանությունները</string>
|
||||
<string name="notification_channel_name">NewPipe ծանուցում</string>
|
||||
<string name="just_once">Մեկ անգամ</string>
|
||||
<string name="always">Միշտ</string>
|
||||
<string name="download_dialog_title">Բեռնել</string>
|
||||
<string name="enable_playback_state_lists_title">Ցանկերում դիրքերը</string>
|
||||
</resources>
|
||||
@@ -206,8 +206,8 @@
|
||||
<string name="switch_to_main">Alihkan ke Utama</string>
|
||||
<string name="import_data_title">Impor basis data</string>
|
||||
<string name="export_data_title">Ekspor basis data</string>
|
||||
<string name="import_data_summary">Timpa riwayat dan langganan anda saat ini</string>
|
||||
<string name="export_data_summary">Ekspor riwayat, langganan dan daftar putar</string>
|
||||
<string name="import_data_summary">Timpa riwayat, langganan, daftar putar dan (opsional) pengaturan anda saat ini</string>
|
||||
<string name="export_data_summary">Ekspor riwayat, langganan, daftar putar dan pengaturan</string>
|
||||
<string name="player_stream_failure">Tidak bisa memutar stream ini</string>
|
||||
<string name="player_unrecoverable_failure">Telah terjadi galat pemutar yang tidak bisa dipulihkan</string>
|
||||
<string name="player_recoverable_failure">Memulihkan dari galat pemutar</string>
|
||||
@@ -633,8 +633,10 @@
|
||||
<string name="clear_cookie_summary">Hapus kuki yang disimpan oleh NewPipe saat anda memecahkan reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Kuki reCAPTCHA telah dihapus</string>
|
||||
<string name="clear_cookie_title">Hapus kuki reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube menyediakan \"Mode Terbatas\" yang menyembunyikan video konten dewasa.</string>
|
||||
<string name="show_age_restricted_content_summary">Menampilkan konten yang mungkin tidak cocok untuk anak-anak karena memiliki batasan umur (seperti 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube menyediakan \"Mode Terbatas\" yang menyembunyikan video konten dewasa</string>
|
||||
<string name="show_age_restricted_content_summary">Menampilkan konten yang mungkin tidak cocok untuk anak-anak karena memiliki batasan umur (seperti 18+)</string>
|
||||
<string name="notification_colorize_summary">Minta Android menyesuaikan warna notifikasi sesuai dengan warna utama di thumbnail (perhatikan bahwa ini tidak tersedia di semua perangkat)</string>
|
||||
<string name="notification_colorize_title">Warnai notifikasi</string>
|
||||
<string name="show_thumbnail_summary">Tampilkan thumbnail pada layar penguncian sebagai latar dan di dalam notifikasi</string>
|
||||
<string name="show_thumbnail_title">Tampilkan thumbnail</string>
|
||||
</resources>
|
||||
@@ -10,7 +10,7 @@
|
||||
<string name="download">Scarica</string>
|
||||
<string name="search">Cerca</string>
|
||||
<string name="settings">Impostazioni</string>
|
||||
<string name="did_you_mean">Forse cercavi «%1$s»\?</string>
|
||||
<string name="did_you_mean">Forse cercavi \"%1$s\"\?</string>
|
||||
<string name="share_dialog_title">Condividi con</string>
|
||||
<string name="choose_browser">Scegli browser</string>
|
||||
<string name="screen_rotation">rotazione</string>
|
||||
@@ -20,12 +20,12 @@
|
||||
<string name="default_resolution_title">Risoluzione predefinita</string>
|
||||
<string name="play_with_kodi_title">Riproduci con Kodi</string>
|
||||
<string name="kore_not_found">Installare l\'app Kore\?</string>
|
||||
<string name="show_play_with_kodi_title">Mostra «Riproduci con Kodi»</string>
|
||||
<string name="show_play_with_kodi_title">Mostra \"Riproduci con Kodi\"</string>
|
||||
<string name="show_play_with_kodi_summary">Mostra l\'opzione per riprodurre video tramite Kodi</string>
|
||||
<string name="play_audio">Audio</string>
|
||||
<string name="default_audio_format_title">Formato audio predefinito</string>
|
||||
<string name="download_dialog_title">Scarica</string>
|
||||
<string name="show_next_and_similar_title">Mostra video «Prossimo» e «Simili»</string>
|
||||
<string name="show_next_and_similar_title">Mostra video \"Prossimo\" e \"Simili\"</string>
|
||||
<string name="unsupported_url">URL non supportato</string>
|
||||
<string name="content_language_title">Lingua predefinita per i contenuti</string>
|
||||
<string name="settings_category_video_audio_title">Video e audio</string>
|
||||
@@ -59,7 +59,7 @@
|
||||
<string name="live_streams_not_supported">I contenuti in diretta non sono ancora supportati</string>
|
||||
<string name="content">Contenuti</string>
|
||||
<string name="show_age_restricted_content_title">Mostra contenuti con restrizioni di età</string>
|
||||
<string name="main_bg_subtitle">Tocca «Cerca» per iniziare
|
||||
<string name="main_bg_subtitle">Tocca \"Cerca\" per iniziare
|
||||
\n</string>
|
||||
<string name="autoplay_by_calling_app_title">Riproduzione automatica</string>
|
||||
<string name="autoplay_by_calling_app_summary">Riproduci i video quando NewPipe viene aperto da un\'altra app</string>
|
||||
@@ -118,17 +118,17 @@
|
||||
<string name="popup_mode_share_menu_title">Modalità popup</string>
|
||||
<string name="popup_playing_toast">Riproduzione in modalità popup</string>
|
||||
<string name="disabled">Disattivato</string>
|
||||
<string name="use_external_video_player_summary">L\'audio potrebbe non essere disponibile per alcune risoluzioni</string>
|
||||
<string name="use_external_video_player_summary">Audio non disponibile per alcune risoluzioni</string>
|
||||
<string name="controls_background_title">In sottofondo</string>
|
||||
<string name="controls_popup_title">Popup</string>
|
||||
<string name="default_popup_resolution_title">Risoluzione predefinita popup</string>
|
||||
<string name="default_popup_resolution_title">Risoluzione predefinita lettore popup</string>
|
||||
<string name="show_higher_resolutions_title">Mostra altre risoluzioni</string>
|
||||
<string name="show_higher_resolutions_summary">Solo alcuni dispositivi possono riprodurre video 2K/4K</string>
|
||||
<string name="default_video_format_title">Formato video predefinito</string>
|
||||
<string name="popup_remember_size_pos_title">Ricorda Poprietà Popup</string>
|
||||
<string name="popup_remember_size_pos_summary">Ricorda dimensione e posizione della finestra Popup</string>
|
||||
<string name="popup_remember_size_pos_title">Ricorda proprietà lettore popup</string>
|
||||
<string name="popup_remember_size_pos_summary">Ricorda dimensione e posizione del lettore popup</string>
|
||||
<string name="player_gesture_controls_title">Controllo gesti lettore multimediale</string>
|
||||
<string name="player_gesture_controls_summary">Usa i gesti per controllare la luminosità e il volume del lettore multimediale</string>
|
||||
<string name="player_gesture_controls_summary">Usa i gesti per controllare luminosità e volume del lettore multimediale</string>
|
||||
<string name="show_search_suggestions_title">Suggerimenti di ricerca</string>
|
||||
<string name="show_search_suggestions_summary">Mostra suggerimenti durante la ricerca</string>
|
||||
<string name="settings_category_popup_title">Popup</string>
|
||||
@@ -137,8 +137,8 @@
|
||||
<string name="clear">Cancella</string>
|
||||
<string name="popup_resizing_indicator_title">Ridimensionamento</string>
|
||||
<string name="best_resolution">Risoluzione migliore</string>
|
||||
<string name="msg_popup_permission">Questo permesso è necessario
|
||||
\nper utilizzare il lettore Popup</string>
|
||||
<string name="msg_popup_permission">Questo permesso è necessario
|
||||
\nper utilizzare il lettore popup</string>
|
||||
<string name="action_settings">Impostazioni</string>
|
||||
<string name="action_about">Informazioni</string>
|
||||
<string name="title_licenses">Licenze di terze parti</string>
|
||||
@@ -221,10 +221,10 @@
|
||||
<string name="trending">Tendenze</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">Nuovi e popolari</string>
|
||||
<string name="show_hold_to_append_title">Mostra suggerimento «Tieni premuto per accodare»</string>
|
||||
<string name="show_hold_to_append_title">Mostra suggerimento \"Tieni premuto per accodare\"</string>
|
||||
<string name="show_hold_to_append_summary">Nei dettagli dei video, mostra un suggerimento alla pressione dei pulsanti per la riproduzione popup o in sottofondo</string>
|
||||
<string name="background_player_append">Accodato in sottofondo</string>
|
||||
<string name="popup_playing_append">Accodato in popup</string>
|
||||
<string name="popup_playing_append">Accodato nel lettore popup</string>
|
||||
<string name="play_all">Riproduci tutto</string>
|
||||
<string name="player_stream_failure">Impossibile riprodurre questo flusso</string>
|
||||
<string name="player_unrecoverable_failure">Si è verificato un errore irreversibile del lettore multimediale</string>
|
||||
@@ -234,7 +234,7 @@
|
||||
<string name="play_queue_audio_settings">Impostazioni audio</string>
|
||||
<string name="hold_to_append">Tieni premuto per accodare</string>
|
||||
<string name="unknown_content">[Sconosciuto]</string>
|
||||
<string name="start_here_on_main">Inizia la riproduzione qui</string>
|
||||
<string name="start_here_on_main">Avvia la riproduzione qui</string>
|
||||
<string name="start_here_on_background">Riproduci in sottofondo</string>
|
||||
<string name="start_here_on_popup">Riproduci nel lettore popup</string>
|
||||
<string name="donation_title">Dona</string>
|
||||
@@ -245,8 +245,8 @@
|
||||
<string name="default_content_country_title">Paese predefinito per i contenuti</string>
|
||||
<string name="toggle_orientation">Cambia orientamento</string>
|
||||
<string name="switch_to_background">Passa in sottofondo</string>
|
||||
<string name="switch_to_popup">Passa a popup</string>
|
||||
<string name="switch_to_main">Passa a principale</string>
|
||||
<string name="switch_to_popup">Passa alla modalità popup</string>
|
||||
<string name="switch_to_main">Passa al lettore principale</string>
|
||||
<string name="service_title">Servizio</string>
|
||||
<string name="drawer_open">Apri il menu</string>
|
||||
<string name="drawer_close">Chiudi il menu</string>
|
||||
@@ -264,8 +264,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">Caricamento del contenuto richiesto</string>
|
||||
<string name="import_data_title">Importa database</string>
|
||||
<string name="export_data_title">Esporta database</string>
|
||||
<string name="import_data_summary">Sovrascrive cronologia e iscrizioni</string>
|
||||
<string name="export_data_summary">Esporta cronologia, iscrizioni e playlist</string>
|
||||
<string name="import_data_summary">Sovrascrive la cronologia, le iscrizioni, le playlist e (facoltativamente) le impostazioni correnti</string>
|
||||
<string name="export_data_summary">Esporta cronologia, iscrizioni, playlist e impostazioni</string>
|
||||
<string name="export_complete_toast">Esportazione completa</string>
|
||||
<string name="import_complete_toast">Importazione completa</string>
|
||||
<string name="no_valid_zip_file">Nessun file ZIP valido</string>
|
||||
@@ -286,18 +286,18 @@
|
||||
<string name="title_last_played">Ultima riproduzione</string>
|
||||
<string name="title_most_played">I più riprodotti</string>
|
||||
<string name="always_ask_open_action">Chiedi ogni volta</string>
|
||||
<string name="create_playlist">Nuova Playlist</string>
|
||||
<string name="create_playlist">Nuova playlist</string>
|
||||
<string name="delete_playlist">Elimina</string>
|
||||
<string name="rename_playlist">Rinomina</string>
|
||||
<string name="name">Nome</string>
|
||||
<string name="append_playlist">Aggiungi a Playlist</string>
|
||||
<string name="set_as_playlist_thumbnail">Imposta come Copertina Playlist</string>
|
||||
<string name="bookmark_playlist">Salva Playlist</string>
|
||||
<string name="unbookmark_playlist">Rimuovi Playlist</string>
|
||||
<string name="append_playlist">Aggiungi a playlist</string>
|
||||
<string name="set_as_playlist_thumbnail">Imposta come copertina della playlist</string>
|
||||
<string name="bookmark_playlist">Salva playlist</string>
|
||||
<string name="unbookmark_playlist">Rimuovi playlist</string>
|
||||
<string name="delete_playlist_prompt">Eliminare la playlist\?</string>
|
||||
<string name="playlist_creation_success">Playlist creata</string>
|
||||
<string name="playlist_add_stream_success">Aggiunto alla Playlist</string>
|
||||
<string name="playlist_thumbnail_change_success">Copertina playlist cambiata.</string>
|
||||
<string name="playlist_add_stream_success">Aggiunto alla playlist</string>
|
||||
<string name="playlist_thumbnail_change_success">Copertina della playlist cambiata.</string>
|
||||
<string name="playlist_delete_failure">Impossibile eliminare la playlist.</string>
|
||||
<string name="caption_none">Nessun sottotitolo</string>
|
||||
<string name="resize_fit">Rientrato</string>
|
||||
@@ -350,7 +350,7 @@
|
||||
<string name="download_thumbnail_title">Carica copertine</string>
|
||||
<string name="download_thumbnail_summary">Disabilita per prevenire il caricamento delle copertine, risparmiando dati e memoria. La modifica di questa opzione cancellerà la cache delle immagini in memoria e sul disco.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Cache immagini svuotata</string>
|
||||
<string name="metadata_cache_wipe_title">Pulisci cache metadati</string>
|
||||
<string name="metadata_cache_wipe_title">Pulisci Cache Metadati</string>
|
||||
<string name="metadata_cache_wipe_summary">Elimina i dati delle pagine web memorizzati nella cache</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Cache metadati svuotata</string>
|
||||
<string name="playback_speed_control">Controlli della velocità di riproduzione</string>
|
||||
@@ -399,7 +399,7 @@
|
||||
<string name="unsubscribe">Disiscriviti</string>
|
||||
<string name="tab_new">Nuova scheda</string>
|
||||
<string name="tab_choose">Scegli scheda</string>
|
||||
<string name="volume_gesture_control_title">Gesti controllo volume</string>
|
||||
<string name="volume_gesture_control_title">Gesti Controllo Volume</string>
|
||||
<string name="volume_gesture_control_summary">Utilizza i gesti per controllare il volume del lettore multimediale</string>
|
||||
<string name="brightness_gesture_control_title">Gesti controllo luminosità</string>
|
||||
<string name="brightness_gesture_control_summary">Utilizza i gesti per controllare la luminosità del lettore multimediale</string>
|
||||
@@ -528,7 +528,7 @@
|
||||
<string name="permission_display_over_apps">Consentire la visualizzazione sopra altre applicazioni</string>
|
||||
<string name="app_language_title">Lingua dell\'applicazione</string>
|
||||
<string name="systems_language">Predefinita di sistema</string>
|
||||
<string name="subtitle_activity_recaptcha">Premere «Fatto» quando risolto</string>
|
||||
<string name="subtitle_activity_recaptcha">Premere \"Fatto\" quando risolto</string>
|
||||
<string name="recaptcha_done_button">Fatto</string>
|
||||
<string name="videos_string">Video</string>
|
||||
<plurals name="seconds">
|
||||
@@ -623,12 +623,12 @@
|
||||
<string name="clear_queue_confirmation_description">La coda del lettore attivo sarà sostituita</string>
|
||||
<string name="clear_queue_confirmation_title">Chiedi prima di svuotare la coda</string>
|
||||
<string name="clear_queue_confirmation_summary">Cambiare tipo di riproduzione potrebbe sostituire gli elementi in coda</string>
|
||||
<string name="notification_actions_summary">Le azioni dei pulsanti della notifica possono essere modificate qua sotto. Selezionane fino a 3, utilizzando le caselle di controllo sulla destra, da visualizzare nella notifica compatta.</string>
|
||||
<string name="notification_action_4_title">Azione quinto pulsante</string>
|
||||
<string name="notification_action_3_title">Azione quarto pulsante</string>
|
||||
<string name="notification_action_2_title">Azione terzo pulsante</string>
|
||||
<string name="notification_action_1_title">Azione secondo pulsante</string>
|
||||
<string name="notification_action_0_title">Azione primo pulsante</string>
|
||||
<string name="notification_actions_summary">Le azioni dei pulsanti della notifica possono essere modificate qua sotto. Selezionane fino a 3, utilizzando le caselle di controllo sulla destra. Verranno visualizzate nella notifica compatta.</string>
|
||||
<string name="notification_action_4_title">Azione Pulsante 5</string>
|
||||
<string name="notification_action_3_title">Azione Pulsante 4</string>
|
||||
<string name="notification_action_2_title">Azione Pulsante 3</string>
|
||||
<string name="notification_action_1_title">Azione Pulsante 2</string>
|
||||
<string name="notification_action_0_title">Azione Pulsante 1</string>
|
||||
<string name="notification_action_buffering">Buffering</string>
|
||||
<string name="notification_actions_at_most_three">Nella notifica compatta è possibile visualizzare al massimo 3 azioni!</string>
|
||||
<string name="notification_action_shuffle">Casuale</string>
|
||||
@@ -643,8 +643,10 @@
|
||||
<string name="clear_cookie_summary">Cancella i cookie che NewPipe memorizza quando si risolve un reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Cookie reCAPTCHA puliti</string>
|
||||
<string name="clear_cookie_title">Pulisci cookie reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">Consente di usufruire della «Modalità con restrizioni» di YouTube, che esclude contenuti potenzialmente inappropriati per i minori.</string>
|
||||
<string name="show_age_restricted_content_summary">Mostra contenuti che hanno un limite di età (es. 18+). Potrebbero essere inadatti ai bambini.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">Consente di usufruire della «Modalità con restrizioni» di YouTube, che esclude contenuti potenzialmente inappropriati per i minori</string>
|
||||
<string name="show_age_restricted_content_summary">Mostra contenuti che hanno un limite di età (es. 18+). Potrebbero essere inadatti ai bambini</string>
|
||||
<string name="notification_colorize_summary">Lascia che Android modifichi il colore della notifica, secondo il colore principale della copertina (funzione non disponibile per tutti i dispositivi)</string>
|
||||
<string name="notification_colorize_title">Colora notifica</string>
|
||||
<string name="show_thumbnail_summary">Mostra le copertine come sfondo della schermata di blocco e all\'interno delle notifiche</string>
|
||||
<string name="show_thumbnail_title">Mostra copertina</string>
|
||||
</resources>
|
||||
@@ -93,7 +93,7 @@
|
||||
<string name="msg_server_unsupported">このサーバーには対応していません</string>
|
||||
<string name="msg_exists">ファイルが既に存在します</string>
|
||||
<string name="msg_url_malform">URL の形式が正しくないか、通信が利用できません</string>
|
||||
<string name="msg_running">NewPipeで保存中</string>
|
||||
<string name="msg_running">NewPipe ダウンロード中</string>
|
||||
<string name="msg_running_detail">タップして詳細を表示</string>
|
||||
<string name="msg_wait">お待ちください…</string>
|
||||
<string name="msg_copied">クリップボードにコピーしました</string>
|
||||
@@ -176,7 +176,7 @@
|
||||
<string name="playlist">プレイリスト</string>
|
||||
<string name="undo">元に戻す</string>
|
||||
<string name="play_all">すべて再生</string>
|
||||
<string name="notification_channel_name">NewPipeの通知</string>
|
||||
<string name="notification_channel_name">NewPipe の通知</string>
|
||||
<string name="unknown_content">[不明]</string>
|
||||
<string name="player_stream_failure">動画の再生ができませんでした</string>
|
||||
<string name="player_unrecoverable_failure">回復不能な再生エラーが発生しました</string>
|
||||
@@ -228,8 +228,8 @@
|
||||
<string name="just_once">一度だけ</string>
|
||||
<string name="import_data_title">データベースをインポート</string>
|
||||
<string name="export_data_title">データベースをエクスポート</string>
|
||||
<string name="import_data_summary">既存の履歴と登録リストは上書きされます</string>
|
||||
<string name="export_data_summary">履歴や登録リスト、プレイリストをエクスポートします</string>
|
||||
<string name="import_data_summary">既存の再生履歴、登録チャンネル一覧、プレイリストおよび(任意の)設定は上書きされます</string>
|
||||
<string name="export_data_summary">再生履歴、登録チャンネル一覧、プレイリストおよび設定をエクスポートします</string>
|
||||
<string name="player_recoverable_failure">再生エラーからの回復中</string>
|
||||
<string name="external_player_unsupported_link_type">外部プレイヤーは、これらのタイプのリンクをサポートしていません</string>
|
||||
<string name="invalid_url_toast">無効なURL</string>
|
||||
@@ -324,11 +324,11 @@
|
||||
<string name="delete_search_history_alert">すべての検索履歴を削除しますか?</string>
|
||||
<string name="invalid_source">このファイル/コンテンツはありません</string>
|
||||
<plurals name="subscribers">
|
||||
<item quantity="other">%s人が登録しています</item>
|
||||
<item quantity="other">チャンネル登録者数 %s人</item>
|
||||
</plurals>
|
||||
<string name="no_views">再生なし</string>
|
||||
<plurals name="views">
|
||||
<item quantity="other">再生回数 %s再生</item>
|
||||
<item quantity="other">再生回数 %s回</item>
|
||||
</plurals>
|
||||
<string name="one_item_deleted">1 つのアイテムが削除されました。</string>
|
||||
<string name="give_back">支援する</string>
|
||||
@@ -341,7 +341,7 @@
|
||||
<string name="controls_add_to_playlist_title">プレイリスト</string>
|
||||
<string name="show_hold_to_append_title">「長押しして追加」のヒントを表示</string>
|
||||
<string name="tracks">トラック</string>
|
||||
<string name="notification_channel_description">NewPipeのバックグラウンドおよびポップアッププレイヤーの通知</string>
|
||||
<string name="notification_channel_description">NewPipe のバックグラウンドおよびポップアッププレイヤーの通知</string>
|
||||
<string name="new_and_hot">新着と人気</string>
|
||||
<string name="hold_to_append">長押ししてキューに追加</string>
|
||||
<string name="start_here_on_popup">ポップアップで連続再生を開始</string>
|
||||
@@ -632,4 +632,8 @@
|
||||
<string name="clear_cookie_title">reCAPTCHA の Cookie を消去</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA の Cookie が消去されました</string>
|
||||
<string name="show_memory_leaks">メモリリークを表示</string>
|
||||
<string name="show_thumbnail_summary">ロックスクリーンの背景と通知にサムネイルを表示する</string>
|
||||
<string name="show_thumbnail_title">サムネイルを表示する</string>
|
||||
<string name="notification_colorize_title">通知をカラーにする</string>
|
||||
<string name="notification_colorize_summary">サムネイルのメインカラーを元に、通知をカラーにします(全てのデバイスで動作するとは限りません)</string>
|
||||
</resources>
|
||||
@@ -550,4 +550,32 @@
|
||||
<string name="search_showing_result_for">%s에 대한 검색 결과</string>
|
||||
<string name="notification_action_shuffle">셔플</string>
|
||||
<string name="notification_action_repeat">연속 재생</string>
|
||||
<string name="playlist_page_summary">재생목록 페이지</string>
|
||||
<string name="show_thumbnail_title">썸네일 보기</string>
|
||||
<string name="feed_group_dialog_empty_name">그룹 이름이 없음</string>
|
||||
<plurals name="days">
|
||||
<item quantity="other">%d 일</item>
|
||||
</plurals>
|
||||
<plurals name="hours">
|
||||
<item quantity="other">%d 시간</item>
|
||||
</plurals>
|
||||
<plurals name="minutes">
|
||||
<item quantity="other">%d 분</item>
|
||||
</plurals>
|
||||
<plurals name="seconds">
|
||||
<item quantity="other">%d 초</item>
|
||||
</plurals>
|
||||
<string name="remove_watched_popup_title">시청 기록을 지우겠습니까\?</string>
|
||||
<string name="remove_watched">시청 기록 지우기</string>
|
||||
<string name="title_activity_play_queue">재생목록 실행</string>
|
||||
<string name="settings_category_notification_title">알림</string>
|
||||
<string name="unsupported_url_dialog_message">URL을 인식할 수 없습니다. 다른 앱으로 여시겠습니까\?</string>
|
||||
<string name="clear_queue_confirmation_title">스트림을 비우기 전 확인을 요청합니다.</string>
|
||||
<string name="notification_colorize_summary">안드로이드에서 썸네일의 색상에 따라 알림 색상을 조절합니다. (지원되지 않는 기기가 있을 수 있습니다.)</string>
|
||||
<string name="notification_action_buffering">버퍼링</string>
|
||||
<string name="notification_action_4_title">다섯번째 버튼</string>
|
||||
<string name="notification_action_3_title">네번째 버튼</string>
|
||||
<string name="notification_action_2_title">세번째 버튼</string>
|
||||
<string name="notification_action_1_title">두번째 버튼</string>
|
||||
<string name="permission_display_over_apps">다른 앱 위에 표시되는 권한 부여</string>
|
||||
</resources>
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="main_bg_subtitle">Tekan carian untuk bermula</string>
|
||||
<string name="main_bg_subtitle">Tekan \"Cari\" untuk bermula
|
||||
\n</string>
|
||||
<string name="view_count_text">%1$s tontonan</string>
|
||||
<string name="upload_date_text">Diterbitkan pada %1$s</string>
|
||||
<string name="no_player_found">Tiada pemain strim ditemui. Adakah anda mahu memasang VLC\?</string>
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<string name="autoplay_by_calling_app_title">Automatisk avspilling</string>
|
||||
<string name="autoplay_by_calling_app_summary">Spiller en video når NewPipe blir forespurt av et annet program</string>
|
||||
<string name="content">Innhold</string>
|
||||
<string name="show_age_restricted_content_title">Aldersbegrenset innhold</string>
|
||||
<string name="show_age_restricted_content_title">Vis aldersbegrenset innhold</string>
|
||||
<string name="general_error">Feil</string>
|
||||
<string name="could_not_load_thumbnails">Kunne ikke laste inn alle miniatyrbilder</string>
|
||||
<string name="youtube_signature_deobfuscation_error">Kunne ikke dekryptere signaturen til videoens nettadresse</string>
|
||||
@@ -225,7 +225,7 @@
|
||||
<string name="play_queue_audio_settings">Lydinnstillinger</string>
|
||||
<string name="hold_to_append">Hold for å legge i kø</string>
|
||||
<string name="show_hold_to_append_title">Vis \"Hold for å legge til\" -tips</string>
|
||||
<string name="show_hold_to_append_summary">Vis tips når bakgrunnen eller oppsprettsknappen i videoens «Detaljer:» trykkes</string>
|
||||
<string name="show_hold_to_append_summary">Vis tips når det trykkes på bakgrunnen eller oppsprettsknappen i videoens «Detaljer:»</string>
|
||||
<string name="background_player_append">Lagt i kø for bakgrunnsavspiller</string>
|
||||
<string name="popup_playing_append">Lagt i kø for oppsprettsspiller</string>
|
||||
<string name="unknown_content">[Ukjent]</string>
|
||||
@@ -265,7 +265,7 @@
|
||||
<string name="import_data_title">Importer database</string>
|
||||
<string name="export_data_title">Eksporter database</string>
|
||||
<string name="import_data_summary">Overstyrer din nåværende historikk og abonnementsliste</string>
|
||||
<string name="export_data_summary">Eksporter historikk, abonnementer og spillelister</string>
|
||||
<string name="export_data_summary">Eksporter historikk, abonnementer, spillelister og innstillinger</string>
|
||||
<string name="export_complete_toast">Eksportert</string>
|
||||
<string name="import_complete_toast">Importert</string>
|
||||
<string name="no_valid_zip_file">Ingen gyldig ZIP-fil</string>
|
||||
@@ -357,7 +357,10 @@
|
||||
\n
|
||||
\n1. Gå til denne nettadressen: %1$s
|
||||
\n2. Logg inn når forespurt
|
||||
\n3. En nedlasting av eksportfilen bør starte</string>
|
||||
\n3. En nedlasting av eksportfilen bør starte
|
||||
\n4. Klikk på «Neste steg» og så på «Opprett eksport»
|
||||
\n5. Klikk på «Last ned»-knappen etter den vises, og
|
||||
\n6. Fra nedlastet takeout.zip, pakk ut .json-filen (vanligvis under «YouTube og YouTube Music/subscriptions/subscriptions.json» og importer den her.</string>
|
||||
<string name="import_soundcloud_instructions">Importer en SoundCloud-profil ved å skrive enten nettadressen eller din ID:
|
||||
\n
|
||||
\n1. Skru på \"skrivebordsmodus\" i en nettleser ( siden er ikke tilgjengelig for mobile enheter)
|
||||
@@ -644,4 +647,6 @@
|
||||
<string name="show_age_restricted_content_summary">Vis innhold som muligens er upassende for barn, siden det har aldersgrense (som 18+).</string>
|
||||
<string name="notification_colorize_summary">Få Android til å tilpasse merknadens farge i henhold til hovedfargen på miniatyrbildet (merk at dette ikke støttes på alle enheter)</string>
|
||||
<string name="notification_colorize_title">Fargelegg merknad</string>
|
||||
<string name="show_thumbnail_summary">Vis miniatyrbilde på låseskjerm som bakgrunn og i merknader</string>
|
||||
<string name="show_thumbnail_title">Vis miniatyrbilde</string>
|
||||
</resources>
|
||||
@@ -607,9 +607,9 @@
|
||||
<string name="restricted_video">Deze video heeft een leeftijdsbeperking.
|
||||
\n
|
||||
\nSchakel \"%1$s\" in bij de instellingen als u die wilt zien.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube biedt een \"beperkte modes\" aan, dit verbergt mogelijk materiaal voor volwassenen.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube biedt een \"beperkte modes\" aan, dit verbergt mogelijk materiaal voor volwassenen</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">YouTube \"beperkte modus\" aanzetten</string>
|
||||
<string name="show_age_restricted_content_summary">Toon inhoud die mogelijk niet geschikt is voor kinderen omwille van een leeftijdslimiet (zoals 18+).</string>
|
||||
<string name="show_age_restricted_content_summary">Toon inhoud die mogelijk niet geschikt is voor kinderen omwille van een leeftijdslimiet (zoals 18+)</string>
|
||||
<string name="settings_category_notification_title">Melding</string>
|
||||
<string name="peertube_instance_add_exists">Kanaal bestaat al</string>
|
||||
<string name="peertube_instance_add_https_only">Alleen HTTPS URL\'s worden ondersteund</string>
|
||||
|
||||
@@ -643,8 +643,8 @@
|
||||
<string name="clear_cookie_summary">Verwijder cookies die NewPipe opslaat wanneer u een reCAPTCHA oplost</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies zijn verwijderd</string>
|
||||
<string name="clear_cookie_title">Verwijder reCAPTCHA cookies</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube biedt een \"beperkte modes\" aan, dit verbergt mogelijk materiaal voor volwassenen.</string>
|
||||
<string name="show_age_restricted_content_summary">Toon inhoud die mogelijk niet geschikt is voor kinderen omwille van een leeftijdslimiet (zoals 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube biedt een \"beperkte modes\" aan, dit verbergt mogelijk materiaal voor volwassenen</string>
|
||||
<string name="show_age_restricted_content_summary">Toon inhoud die mogelijk niet geschikt is voor kinderen omwille van een leeftijdslimiet (zoals 18+)</string>
|
||||
<string name="notification_colorize_summary">Laat Android de kleur van de notificatie aanpassen, op basis van de meest voorkomende kleur in de thumbnail (let op: niet beschikbaar op elk apparaat)</string>
|
||||
<string name="notification_colorize_title">Notificatie kleur aanpassen</string>
|
||||
</resources>
|
||||
@@ -269,8 +269,8 @@
|
||||
<string name="switch_to_main">Odtwarzaj na pierwszym planie</string>
|
||||
<string name="import_data_title">Importuj dane</string>
|
||||
<string name="export_data_title">Eksportuj dane</string>
|
||||
<string name="import_data_summary">Zastępuje Twoją bieżącą historię i subskrypcje</string>
|
||||
<string name="export_data_summary">Eksportuje bieżącą historię, subskrypcje i playlisty</string>
|
||||
<string name="import_data_summary">Zastępuje Twoją bieżącą historię, subskrypcje, playlisty i (opcjonalnie) ustawienia</string>
|
||||
<string name="export_data_summary">Eksportuje bieżącą historię, subskrypcje, playlisty i ustawienia</string>
|
||||
<string name="detail_drag_description">Przeciągnij, aby zmienić kolejność</string>
|
||||
<string name="create">Utwórz</string>
|
||||
<string name="delete_one">Usuń bieżący</string>
|
||||
@@ -653,8 +653,10 @@
|
||||
<string name="clear_cookie_summary">Wyczyść ciasteczka, które NewPipe przechowuje po rozwiązaniu reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Ciasteczka reCAPTCHA zostały wyczyszczone</string>
|
||||
<string name="clear_cookie_title">Wyczyść ciasteczka reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube udostępnia \"Tryb ograniczonego dostępu\", który ukrywa treści potencjalnie dla dorosłych.</string>
|
||||
<string name="show_age_restricted_content_summary">Pokaż treści nieodpowiednie dla dzieci, ponieważ mają ograniczenia wiekowe (np. 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube udostępnia \"Tryb ograniczonego dostępu\", który ukrywa treści potencjalnie dla dorosłych</string>
|
||||
<string name="show_age_restricted_content_summary">Pokaż treści nieodpowiednie dla dzieci, ponieważ mają ograniczenia wiekowe (np. 18+)</string>
|
||||
<string name="notification_colorize_summary">Niech Android dostosuje kolor powiadomienia zgodnie z głównym kolorem na miniaturze (nie jest to dostępne na wszystkich urządzeniach)</string>
|
||||
<string name="notification_colorize_title">Pokolorowanie powiadomienia</string>
|
||||
<string name="show_thumbnail_summary">Pokazuj miniaturkę na ekranie blokady jako tło oraz wewnątrz powiadomień</string>
|
||||
<string name="show_thumbnail_title">Pokaż miniaturkę</string>
|
||||
</resources>
|
||||
@@ -262,8 +262,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">Carregando conteúdo solicitado</string>
|
||||
<string name="import_data_title">Importar base de dados</string>
|
||||
<string name="export_data_title">Exportar base de dados</string>
|
||||
<string name="import_data_summary">Substitui seu histórico e inscrições atuai</string>
|
||||
<string name="export_data_summary">Exporte histórico, inscrições e playlists</string>
|
||||
<string name="import_data_summary">Substitui seu histórico atual, inscrições, playlists e (opcionalmente) configurações</string>
|
||||
<string name="export_data_summary">Exporte histórico, inscrições, playlists e configurações</string>
|
||||
<string name="export_complete_toast">Exportado</string>
|
||||
<string name="import_complete_toast">Importado</string>
|
||||
<string name="no_valid_zip_file">Não há nenhum arquivo ZIP válido</string>
|
||||
@@ -596,7 +596,7 @@
|
||||
\n
|
||||
\nAtive \"%1$s\" nas configurações se quiser vê-lo.</string>
|
||||
<string name="remove_watched_popup_yes_and_partially_watched_videos">Sim, e vídeos parcialmente vistos</string>
|
||||
<string name="remove_watched_popup_warning">Vídeos vistos antes e depois de adicionar à lista de reprodução serão removidos.
|
||||
<string name="remove_watched_popup_warning">Vídeos vistos antes e depois de adicionar à playlists serão removidos.
|
||||
\nTem certeza\? Isto não pode ser desfeito!</string>
|
||||
<string name="remove_watched_popup_title">Remover vídeos vistos\?</string>
|
||||
<string name="remove_watched">Remover vistos</string>
|
||||
@@ -643,8 +643,8 @@
|
||||
<string name="clear_cookie_summary">Apaga os cookies que o NewPipe armazena quando você resolve um reCAPTCHA</string>
|
||||
<string name="clear_cookie_title">Apagar cookies de reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Os cookies de reCAPTCHA foram apagados</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">O YouTube oferece um \"Modo Restrito\" que oculta conteúdo potencialmente adulto.</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar conteúdo possivelmente inadequado para crianças porque tem um limite de idade (como +18).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">O YouTube oferece um \"Modo Restrito\" que oculta conteúdo potencialmente adulto</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar conteúdo possivelmente inadequado para crianças porque tem um limite de idade (como +18)</string>
|
||||
<string name="notification_colorize_summary">Permite o Android personalizar a cor da notificação de acordo com a cor principal da miniatura (note que isso não está disponível em todos os dispositivos)</string>
|
||||
<string name="notification_colorize_title">Colorir notificação</string>
|
||||
<string name="show_thumbnail_summary">Mostrar miniaturas como fundo da tela de bloqueio e nas notificações</string>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<string name="import_network_expensive_warning">Tenha em atenção de que esta operação pode sobrecarregar a sua rede.
|
||||
\n
|
||||
\nDeseja continuar\?</string>
|
||||
<string name="main_bg_subtitle">Toque em \"Pesquisar\" para iniciar
|
||||
<string name="main_bg_subtitle">Toque \"Pesquisar\" para iniciar
|
||||
\n</string>
|
||||
<string name="enable_playback_resume_title">Continuar reprodução</string>
|
||||
<string name="msg_threads">Processos</string>
|
||||
@@ -50,7 +50,7 @@
|
||||
<string name="new_seek_duration_toast">Devido às restrições de ExoPlayer, a duração da pesquisa foi definida para %d segundos</string>
|
||||
<string name="overwrite">Sobrescrever</string>
|
||||
<string name="mute">Sem som</string>
|
||||
<string name="enable_watch_history_title">Ver histórico</string>
|
||||
<string name="enable_watch_history_title">Histórico de visualizações</string>
|
||||
<plurals name="views">
|
||||
<item quantity="one">%s visualização</item>
|
||||
<item quantity="other">%s visualizações</item>
|
||||
@@ -83,12 +83,12 @@
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="feed_processing_message">A processar…</string>
|
||||
<string name="volume_gesture_control_title">Gestos para controlo de volume</string>
|
||||
<string name="restricted_video">Este vídeo é de restrita à idade.
|
||||
<string name="restricted_video">Este vídeo está restringido a idades.
|
||||
\n
|
||||
\nPara o poder ver, tem que ativar \"%1$s\" nas definições.</string>
|
||||
<string name="read_full_license">Ver licença</string>
|
||||
<string name="help">Ajuda</string>
|
||||
<string name="peertube_instance_add_https_only">Apenas pode usar URL no formato HTTPS</string>
|
||||
<string name="peertube_instance_add_https_only">Apenas os URL HTTPS são suportados</string>
|
||||
<string name="peertube_instance_add_fail">Falha ao validar a instância</string>
|
||||
<string name="delete_all">Eliminar tudo</string>
|
||||
<string name="clear_download_history">Limpar histórico de descargas</string>
|
||||
@@ -108,7 +108,7 @@
|
||||
<string name="artists">Artistas</string>
|
||||
<string name="error_connect_host">Não foi possível ligar ao servidor</string>
|
||||
<string name="show_play_with_kodi_summary">Mostrar uma opção para reproduzir o vídeo no Kodi</string>
|
||||
<string name="list_view_mode">Modo de vista em lista</string>
|
||||
<string name="list_view_mode">Modo de exibição</string>
|
||||
<string name="use_inexact_seek_summary">A pesquisa inexata permite que esta seja mais rápida mas reduz a precisão. Procurar por 5, 15 ou 25 segundos não funciona corretamente.</string>
|
||||
<string name="permission_display_over_apps">Permitir sobreposição a outras aplicações</string>
|
||||
<string name="autoplay_by_calling_app_title">Reprodução automática</string>
|
||||
@@ -121,7 +121,7 @@
|
||||
<string name="error_report_open_issue_button_text">Reportar no GitHub</string>
|
||||
<string name="detail_likes_img_view_description">Gosto</string>
|
||||
<string name="history_disabled">O histórico está desativado</string>
|
||||
<string name="download_path_title">Pasta para os vídeos</string>
|
||||
<string name="download_path_title">Pasta para os ficheiros de vídeo</string>
|
||||
<string name="subtitle_activity_recaptcha">Prima \"Feito\" ao resolver</string>
|
||||
<string name="feed_notification_loading">A carregar…</string>
|
||||
<string name="play_audio">Áudio</string>
|
||||
@@ -141,7 +141,7 @@
|
||||
<string name="share">Partilhar</string>
|
||||
<string name="read_privacy_policy">Ver política de privacidade</string>
|
||||
<string name="player_unrecoverable_failure">Ocorreu um erro compulsivo do reprodutor</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Ligar o \"Modo Restringido\" do YouTube</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Ativar \"Modo restrito\" do YouTube</string>
|
||||
<string name="invalid_directory">Pasta inexistente</string>
|
||||
<string name="all">Tudo</string>
|
||||
<string name="sorry_string">Bolas, isto não deveria ter acontecido.</string>
|
||||
@@ -192,14 +192,14 @@
|
||||
<string name="default_content_country_title">País padrão para conteúdo</string>
|
||||
<string name="app_description">Aplicação livre de reprodução de emissões para Android.</string>
|
||||
<string name="content_language_title">Idioma padrão para conteúdo</string>
|
||||
<string name="import_youtube_instructions">Importar subscrições do YouTube do Google Takeout:
|
||||
<string name="import_youtube_instructions">Importar subscrições YouTube do Google Takeout:
|
||||
\n
|
||||
\n1. Vá para este URL: %1$s
|
||||
\n2. Faça o login quando solicitado
|
||||
\n3. Clique em \"Todos os dados incluídos\", depois em \"Desmarcar todos\", depois selecione apenas \"subscrições\" e clique em \"OK\".
|
||||
\n1. Aceda a este URL: %1$s
|
||||
\n2. Inicie a sessão
|
||||
\n3. Clique em \"Todos os dados incluídos\", depois em \"Desmarcar tudo\", selecione \"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 e
|
||||
\n6. A partir do zip do takeout descarregado extraia o ficheiro .json (normalmente em \"YouTube e YouTube Music/subscriptions/subscriptions.json\") e importe-o aqui.</string>
|
||||
\n5. Clique no botão \"Descarregar\"
|
||||
\n6. A partir do zip descarregado extraia o ficheiro .json (normalmente em \"YouTube e YouTube Music/subscriptions/subscriptions.json\") e importe-o aqui.</string>
|
||||
<string name="minimize_on_exit_background_description">Ativar reprodutor em segundo plano</string>
|
||||
<string name="later">Mais tarde</string>
|
||||
<string name="recaptcha_request_toast">Desafio reCAPTCHA solicitado</string>
|
||||
@@ -228,7 +228,7 @@
|
||||
<string name="title_licenses">Licenças de terceiros</string>
|
||||
<string name="generate_unique_name">Gerar nome único</string>
|
||||
<string name="minimize_on_exit_summary">Ação a executar ao trocar para outra aplicação a partir do menu principal - %s</string>
|
||||
<string name="use_external_video_player_title">Usar reprodutor de vídeo externo</string>
|
||||
<string name="use_external_video_player_title">Utilizar reprodutor de vídeo externo</string>
|
||||
<string name="info_labels">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:</string>
|
||||
<string name="contribution_encouragement">Se tem ideias para: tradução, alterações de desenho, limpeza de código, ou alterações significativas no código fonte - todas as ajudas são bem-vindas. Quanto mais se faz, melhor ficará!</string>
|
||||
<string name="settings_category_clear_data_title">Limpar dados</string>
|
||||
@@ -298,8 +298,8 @@
|
||||
<string name="restore_defaults_confirmation">Deseja repor as predefinições\?</string>
|
||||
<string name="external_player_unsupported_link_type">Os reprodutores externos não suportam este tipo de hiperligações</string>
|
||||
<string name="rename">Mudar nome</string>
|
||||
<string name="downloads_storage_use_saf_summary">O \'Storage Access Framework\' permite transferências para um cartão SD externo.
|
||||
\nAlguns aparelhos não são compatíveis</string>
|
||||
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' permite descargas para um cartão SD externo.
|
||||
\nAlguns dipositivos não são compatíveis</string>
|
||||
<string name="seek_duration_title">Duração da pesquisa de avanço/recuo rápido</string>
|
||||
<string name="channel">Canal</string>
|
||||
<string name="missing_file">Ficheiro movido ou eliminado</string>
|
||||
@@ -356,12 +356,12 @@
|
||||
<string name="charset_most_special_characters">Mais caracteres especiais</string>
|
||||
<string name="download_path_audio_title">Pasta para ficheiros de áudio</string>
|
||||
<string name="error_details_headline">Detalhes:</string>
|
||||
<string name="settings_category_downloads_title">Descarregar</string>
|
||||
<string name="settings_category_downloads_title">Descargas</string>
|
||||
<string name="settings_category_feed_title">Fonte</string>
|
||||
<string name="playlist_page_summary">Página da lista de reprodução</string>
|
||||
<string name="settings">Definições</string>
|
||||
<string name="title_most_played">Mais reproduzido</string>
|
||||
<string name="search_showing_result_for">Mostrando resultados para: %s</string>
|
||||
<string name="search_showing_result_for">A mostrar resultados para: %s</string>
|
||||
<string name="switch_to_background">Mudar para segundo plano</string>
|
||||
<string name="albums">Álbuns</string>
|
||||
<string name="previous_export">Exportação anterior</string>
|
||||
@@ -398,7 +398,7 @@
|
||||
<string name="auto_queue_title">Colocar vídeo seguinte na fila</string>
|
||||
<string name="peertube_instance_url_summary">Defina as suas instâncias favoritas PeerTube</string>
|
||||
<string name="import_export_title">Importar/exportar</string>
|
||||
<string name="export_data_summary">Exportar histórico, subscrições e listas de reprodução</string>
|
||||
<string name="export_data_summary">Exportar histórico, subscrições, listas de reprodução e definições</string>
|
||||
<string name="best_resolution">Melhor resolução</string>
|
||||
<string name="select_a_channel">Selecione um canal</string>
|
||||
<string name="choose_browser">Escolher navegador</string>
|
||||
@@ -419,7 +419,7 @@
|
||||
<string name="export_ongoing">A exportar…</string>
|
||||
<string name="most_liked">Mais apreciados</string>
|
||||
<string name="title_history_view">Visualizado</string>
|
||||
<string name="downloads_storage_use_saf_title">Usar SAF</string>
|
||||
<string name="downloads_storage_use_saf_title">Utilizar SAF</string>
|
||||
<string name="play_queue_stream_detail">Detalhes</string>
|
||||
<string name="network_error">Erro de rede</string>
|
||||
<string name="enable_search_history_title">Histórico de pesquisa</string>
|
||||
@@ -453,7 +453,7 @@
|
||||
<string name="clear_search_history_title">Limpar histórico de pesquisas</string>
|
||||
<string name="msg_error">Erro</string>
|
||||
<string name="popup_remember_size_pos_title">Lembrar propriedades de popup</string>
|
||||
<string name="download_path_summary">Os ficheiros de vídeo transferidos são armazenados aqui</string>
|
||||
<string name="download_path_summary">Os ficheiros de vídeo descarregados serão guardados aqui</string>
|
||||
<string name="switch_to_main">Mudar para principal</string>
|
||||
<string name="msg_popup_permission">Esta permissão é necessária
|
||||
\npara o modo popup</string>
|
||||
@@ -471,7 +471,7 @@
|
||||
<string name="missions_header_pending">Pendente</string>
|
||||
<string name="import_complete_toast">Importado</string>
|
||||
<string name="auto">Automático</string>
|
||||
<string name="import_data_summary">Substitui o histórico e as subscrições atuais</string>
|
||||
<string name="import_data_summary">Substitui o seu histórico, subscrições, listas de reprodução e (opcionalmente) definições</string>
|
||||
<string name="settings_category_popup_title">Popup</string>
|
||||
<string name="short_thousand">k</string>
|
||||
<string name="err_dir_create">Não foi possível criar a pasta \'%1$s\'</string>
|
||||
@@ -528,7 +528,7 @@
|
||||
<string name="playlist_add_stream_success">Adicionado à lista de reprodução</string>
|
||||
<string name="delete_one">Eliminar um</string>
|
||||
<string name="default_video_format_title">Formato padrão de vídeo</string>
|
||||
<string name="show_hold_to_append_title">Mostrar dica \"Toque longo para pôr na fila\"</string>
|
||||
<string name="show_hold_to_append_title">Mostrar dica \"Toque longo para colocar na fila\"</string>
|
||||
<string name="choose_instance_prompt">Escolha uma instância</string>
|
||||
<string name="metadata_cache_wipe_summary">Remover todos os dados da página web</string>
|
||||
<string name="drawer_close">Fechar menu</string>
|
||||
@@ -538,7 +538,7 @@
|
||||
<string name="settings_file_replacement_character_title">Carácter de substituição</string>
|
||||
<string name="video">Vídeo</string>
|
||||
<string name="no_streams_available_download">Não existem vídeos para descarregar</string>
|
||||
<string name="download_path_audio_summary">Os ficheiros de áudio descarregados serão armazenados aqui</string>
|
||||
<string name="download_path_audio_summary">Os ficheiros de áudio descarregados serão guardados aqui</string>
|
||||
<string name="videos_string">Vídeos</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Meta-dados em cache limpos</string>
|
||||
<string name="show_hold_to_append_summary">Mostrar dica ao premir em segundo plano ou no botão \"Detalhes:\" da janela popup</string>
|
||||
@@ -590,7 +590,7 @@
|
||||
<string name="preferred_player_fetcher_notification_message">A carregar o conteúdo solicitado</string>
|
||||
<string name="channel_page_summary">Página do canal</string>
|
||||
<string name="export_data_title">Exportar base de dados</string>
|
||||
<string name="use_tor_title">Usar Tor</string>
|
||||
<string name="use_tor_title">Utilizar Tor</string>
|
||||
<string name="feed_group_show_only_ungrouped_subscriptions">Mostrar apenas assinaturas não agrupadas</string>
|
||||
<string name="player_stream_failure">Não foi possível reproduzir este vídeo</string>
|
||||
<string name="background_player">Reprodutor em segundo plano</string>
|
||||
@@ -622,7 +622,7 @@
|
||||
<string name="auto_queue_toggle">Colocar na fila automaticamente</string>
|
||||
<string name="clear_queue_confirmation_description">A fila do reprodutor ativo será substituída</string>
|
||||
<string name="clear_queue_confirmation_summary">Mudar de um reprodutor para outro pode substituir a sua fila</string>
|
||||
<string name="clear_queue_confirmation_title">Solicitar confirmação antes de limpar uma fila</string>
|
||||
<string name="clear_queue_confirmation_title">Pedir confirmação antes de limpar uma fila</string>
|
||||
<string name="popup_remember_size_pos_summary">Lembrar do último tamanho e posição do popup</string>
|
||||
<string name="notification_action_nothing">Nada</string>
|
||||
<string name="notification_action_buffering">Processamento...</string>
|
||||
@@ -637,14 +637,16 @@
|
||||
<string name="notification_action_0_title">Primeiro botão de ação</string>
|
||||
<string name="notification_scale_to_square_image_summary">Ajustar miniatura de vídeo mostrada na notificação de 16:9 para 1:1 (pode introduzir distorções)</string>
|
||||
<string name="notification_scale_to_square_image_title">Ajustar miniatura à proporção de 1:1</string>
|
||||
<string name="show_memory_leaks">Mostrar vazamentos de memória</string>
|
||||
<string name="enqueued">Enfileirado</string>
|
||||
<string name="enqueue_stream">Pôr na fila</string>
|
||||
<string name="show_memory_leaks">Mostrar \'leaks\' de memória</string>
|
||||
<string name="enqueued">Colocado na fila</string>
|
||||
<string name="enqueue_stream">Colocar na fila</string>
|
||||
<string name="clear_cookie_summary">Limpar cookies que NewPipe armazena quando resolve um reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Os cookies reCAPTCHA foram limpos</string>
|
||||
<string name="clear_cookie_title">Limpar cookies reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">O YouTube fornece um \"Modo Restrito\" que oculta conteúdo potencialmente para adultos.</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar conteúdo possivelmente impróprio para crianças porque tem um limite de idade (como 18+).</string>
|
||||
<string name="notification_colorize_summary">Fazer com que o Android personalize a cor da notificação de acordo com a cor principal na miniatura (note que esta não está disponível em todos os aparelhos)</string>
|
||||
<string name="notification_colorize_title">Colorir a notificação</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">O YouTube fornece um \"Modo restrito\" que oculta o conteúdo destinado a adultos</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar conteúdo possivelmente impróprio para crianças porque tem um limite de idade (como 18+)</string>
|
||||
<string name="notification_colorize_summary">Fazer com que o Android personalize a cor da notificação de acordo com a cor principal na miniatura (esta opção não está disponível em todos os dispositivos)</string>
|
||||
<string name="notification_colorize_title">Colorir notificação</string>
|
||||
<string name="show_thumbnail_summary">Mostrar miniaturas no ecrã de bloqueio como fundo e como notificação</string>
|
||||
<string name="show_thumbnail_title">Mostrar miniatura</string>
|
||||
</resources>
|
||||
@@ -14,10 +14,10 @@
|
||||
<string name="share_dialog_title">Partilhar com</string>
|
||||
<string name="choose_browser">Escolher navegador</string>
|
||||
<string name="screen_rotation">rotação</string>
|
||||
<string name="use_external_video_player_title">Usar reprodutor de vídeo externo</string>
|
||||
<string name="use_external_video_player_title">Utilizar reprodutor de vídeo externo</string>
|
||||
<string name="use_external_audio_player_title">Utilizar reprodutor de áudio externo</string>
|
||||
<string name="download_path_title">Pasta para os vídeos</string>
|
||||
<string name="download_path_summary">Os ficheiros de vídeo descarregados serão armazenados aqui</string>
|
||||
<string name="download_path_title">Pasta para os ficheiros de vídeo</string>
|
||||
<string name="download_path_summary">Os ficheiros de vídeo descarregados serão guardados aqui</string>
|
||||
<string name="download_path_dialog_title">Escolha a pasta para colocar os ficheiros de vídeo</string>
|
||||
<string name="default_resolution_title">Resolução padrão</string>
|
||||
<string name="play_with_kodi_title">Reproduzir no Kodi</string>
|
||||
@@ -43,10 +43,10 @@
|
||||
<string name="settings_category_other_title">Outros</string>
|
||||
<string name="background_player_playing_toast">Reprodução em segundo plano</string>
|
||||
<string name="network_error">Erro de rede</string>
|
||||
<string name="use_tor_title">Usar Tor</string>
|
||||
<string name="use_tor_title">Utilizar Tor</string>
|
||||
<string name="use_tor_summary">(Experimental) Forçar tráfego via Tor para aumentar a privacidade (ainda não é suportada a emissão de vídeos).</string>
|
||||
<string name="download_path_audio_title">Pasta para ficheiros de áudio</string>
|
||||
<string name="download_path_audio_summary">Os ficheiros de áudio descarregados serão armazenados aqui</string>
|
||||
<string name="download_path_audio_summary">Os ficheiros de áudio descarregados serão guardados aqui</string>
|
||||
<string name="download_path_audio_dialog_title">Escolha a pasta para colocar os ficheiros de áudio</string>
|
||||
<string name="err_dir_create">Não foi possível criar a pasta \'%1$s\'</string>
|
||||
<string name="info_dir_created">Pasta \'%1$s\' criada com sucesso</string>
|
||||
@@ -165,8 +165,8 @@
|
||||
<string name="fragment_feed_title">Novidades</string>
|
||||
<string name="enable_search_history_title">Histórico de pesquisa</string>
|
||||
<string name="enable_search_history_summary">Guardar termos de pesquisa localmente</string>
|
||||
<string name="enable_watch_history_title">Ver histórico</string>
|
||||
<string name="enable_watch_history_summary">Manter histórico dos vídeos vistos</string>
|
||||
<string name="enable_watch_history_title">Histórico de visualizações</string>
|
||||
<string name="enable_watch_history_summary">Manter histórico dos vídeos visualizados</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Continuar reprodução</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Continuar reprodução após interrupções (ex. chamadas)</string>
|
||||
<string name="settings_category_player_title">Reprodutor</string>
|
||||
@@ -193,7 +193,7 @@
|
||||
<item quantity="one">%s vídeo</item>
|
||||
<item quantity="other">%s vídeos</item>
|
||||
</plurals>
|
||||
<string name="settings_category_downloads_title">Descarregar</string>
|
||||
<string name="settings_category_downloads_title">Descargas</string>
|
||||
<string name="settings_file_charset_title">Carateres permitidos no nome dos ficheiros</string>
|
||||
<string name="settings_file_replacement_character_summary">Os carateres inválidos são substituídos por este valor</string>
|
||||
<string name="settings_file_replacement_character_title">Carácter de substituição</string>
|
||||
@@ -237,8 +237,8 @@
|
||||
<string name="toggle_orientation">Alternar orientação</string>
|
||||
<string name="import_data_title">Importar base de dados</string>
|
||||
<string name="export_data_title">Exportar base de dados</string>
|
||||
<string name="import_data_summary">Substitui o histórico e as subscrições atuais</string>
|
||||
<string name="export_data_summary">Exportar histórico, subscrições e listas de reprodução</string>
|
||||
<string name="import_data_summary">Substitui o seu histórico, subscrições, listas de reprodução e (opcionalmente) definições</string>
|
||||
<string name="export_data_summary">Exportar histórico, subscrições, listas de reprodução e definições</string>
|
||||
<string name="background_player_append">Na fila do reprodutor em segundo plano</string>
|
||||
<string name="popup_playing_append">Na fila do reprodutor popup</string>
|
||||
<string name="switch_to_background">Mudar para segundo plano</string>
|
||||
@@ -323,14 +323,14 @@
|
||||
<string name="previous_export">Exportação anterior</string>
|
||||
<string name="subscriptions_import_unsuccessful">Não foi possível importar as subscrições</string>
|
||||
<string name="subscriptions_export_unsuccessful">Não foi possível exportar as subscrições</string>
|
||||
<string name="import_youtube_instructions">Importar subscrições do YouTube do Google Takeout:
|
||||
<string name="import_youtube_instructions">Importar subscrições YouTube do Google Takeout:
|
||||
\n
|
||||
\n1. Vá para este URL: %1$s
|
||||
\n2. Faça o login quando solicitado
|
||||
\n3. Clique em \"Todos os dados incluídos\", depois em \"Desmarcar todos\", depois selecione apenas \"subscrições\" e clique em \"OK\".
|
||||
\n1. Aceda a este URL: %1$s
|
||||
\n2. Inicie a sessão
|
||||
\n3. Clique em \"Todos os dados incluídos\", depois em \"Desmarcar tudo\", selecione \"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 e
|
||||
\n6. A partir do zip do takeout descarregado extraia o ficheiro .json (normalmente em \"YouTube e YouTube Music/subscriptions/subscriptions.json\") e importe-o aqui.</string>
|
||||
\n5. Clique no botão \"Descarregar\"
|
||||
\n6. A partir do zip descarregado extraia o ficheiro .json (normalmente em \"YouTube e YouTube Music/subscriptions/subscriptions.json\") e importe-o aqui.</string>
|
||||
<string name="import_soundcloud_instructions">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 aparelhos móveis)
|
||||
@@ -342,7 +342,7 @@
|
||||
<string name="playback_tempo">Ritmo</string>
|
||||
<string name="clear_views_history_title">Limpar histórico de visualizações</string>
|
||||
<string name="auto_queue_summary">Continuar (sem repetição) a fila de reprodução anexando um vídeo relacionado</string>
|
||||
<string name="show_hold_to_append_title">Mostrar dica \"Toque longo para pôr na fila\"</string>
|
||||
<string name="show_hold_to_append_title">Mostrar dica \"Toque longo para colocar na fila\"</string>
|
||||
<string name="show_hold_to_append_summary">Mostrar dica ao premir em segundo plano ou no botão \"Detalhes:\" da janela popup</string>
|
||||
<string name="channels">Canais</string>
|
||||
<string name="playlists">Listas de reprodução</string>
|
||||
@@ -417,7 +417,7 @@
|
||||
<string name="selection">Seleção</string>
|
||||
<string name="updates_setting_title">Atualizações</string>
|
||||
<string name="updates_setting_description">Mostrar uma notificação para pedir a atualização da aplicação se existir uma nova versão</string>
|
||||
<string name="list_view_mode">Modo de vista em lista</string>
|
||||
<string name="list_view_mode">Modo de exibição</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="grid">Grelha</string>
|
||||
<string name="auto">Automático</string>
|
||||
@@ -486,9 +486,9 @@
|
||||
<string name="downloads_storage_ask_summary">Sempre que descarregar um ficheiro, terá que indicar o local para o guardar</string>
|
||||
<string name="downloads_storage_ask_summary_kitkat">Sempre que descarregar um ficheiro, terá que indicar o local.
|
||||
\nEscolha SAF se quiser descarregar para o cartão SD externo</string>
|
||||
<string name="downloads_storage_use_saf_title">Usar SAF</string>
|
||||
<string name="downloads_storage_use_saf_summary">O \'Storage Access Framework\' permite transferências para um cartão SD externo.
|
||||
\nAlguns aparelhos não são compatíveis</string>
|
||||
<string name="downloads_storage_use_saf_title">Utilizar SAF</string>
|
||||
<string name="downloads_storage_use_saf_summary">\'Storage Access Framework\' permite descargas para um cartão SD externo.
|
||||
\nAlguns dipositivos não são compatíveis</string>
|
||||
<string name="clear_playback_states_title">Remover posições de reprodução</string>
|
||||
<string name="clear_playback_states_summary">Remove todas as posições de reprodução</string>
|
||||
<string name="delete_playback_states_alert">Remover todas as posições de reprodução\?</string>
|
||||
@@ -513,7 +513,7 @@
|
||||
<string name="peertube_instance_add_title">Adicionar instância</string>
|
||||
<string name="peertube_instance_add_help">Digite o URL da instância</string>
|
||||
<string name="peertube_instance_add_fail">Falha ao validar a instância</string>
|
||||
<string name="peertube_instance_add_https_only">Apenas pode usar URL no formato HTTPS</string>
|
||||
<string name="peertube_instance_add_https_only">Apenas os URL HTTPS são suportados</string>
|
||||
<string name="peertube_instance_add_exists">Instância já existe</string>
|
||||
<string name="local">Local</string>
|
||||
<string name="recently_added">Recentes</string>
|
||||
@@ -592,7 +592,7 @@
|
||||
<string name="artists">Artistas</string>
|
||||
<string name="albums">Álbuns</string>
|
||||
<string name="songs">Músicas</string>
|
||||
<string name="restricted_video">Este vídeo é de restrita à idade.
|
||||
<string name="restricted_video">Este vídeo está restringido a idades.
|
||||
\n
|
||||
\nPara o poder ver, tem que ativar \"%1$s\" nas definições.</string>
|
||||
<string name="remove_watched_popup_warning">Os vídeos que tenham sido vistos antes e depois de serem adicionados à lista de reprodução serão removidos.
|
||||
@@ -602,7 +602,7 @@
|
||||
<string name="remove_watched">Remover visualizados</string>
|
||||
<string name="show_original_time_ago_summary">Os textos originais dos serviços serão visíveis nos itens de fluxo</string>
|
||||
<string name="show_original_time_ago_title">Mostrar antiguidade nos itens</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Ligar o \"Modo Restringido\" do YouTube</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Ativar \"Modo restrito\" do YouTube</string>
|
||||
<string name="video_detail_by">Por %s</string>
|
||||
<string name="channel_created_by">Criado por %s</string>
|
||||
<string name="detail_sub_channel_thumbnail_view_description">Miniatura do avatar do canal</string>
|
||||
@@ -637,14 +637,16 @@
|
||||
<string name="notification_actions_at_most_three">Pode selecionar, no máximo, três ações para mostrar na notificação compacta!</string>
|
||||
<string name="notification_action_repeat">Repetir</string>
|
||||
<string name="notification_action_4_title">Quinto botão de ação</string>
|
||||
<string name="show_memory_leaks">Mostrar vazamentos de memória</string>
|
||||
<string name="enqueued">Enfileirado</string>
|
||||
<string name="enqueue_stream">Pôr na fila</string>
|
||||
<string name="show_memory_leaks">Mostrar \'leaks\' de memória</string>
|
||||
<string name="enqueued">Colocado na fila</string>
|
||||
<string name="enqueue_stream">Colocar na fila</string>
|
||||
<string name="clear_cookie_summary">Limpar cookies que NewPipe armazena quando resolve um reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">Os cookies reCAPTCHA foram limpos</string>
|
||||
<string name="clear_cookie_title">Limpar cookies reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">O YouTube fornece um \"Modo Restrito\" que oculta conteúdo potencialmente para adultos.</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar conteúdo possivelmente impróprio para crianças porque tem um limite de idade (como 18+).</string>
|
||||
<string name="notification_colorize_summary">Fazer com que o Android personalize a cor da notificação de acordo com a cor principal na miniatura (note que esta não está disponível em todos os aparelhos)</string>
|
||||
<string name="notification_colorize_title">Colorir a notificação</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">O YouTube fornece um \"Modo restrito\" que oculta o conteúdo destinado a adultos</string>
|
||||
<string name="show_age_restricted_content_summary">Mostrar conteúdo possivelmente impróprio para crianças porque tem um limite de idade (como 18+)</string>
|
||||
<string name="notification_colorize_summary">Fazer com que o Android personalize a cor da notificação de acordo com a cor principal na miniatura (esta opção não está disponível em todos os dispositivos)</string>
|
||||
<string name="notification_colorize_title">Colorir notificação</string>
|
||||
<string name="show_thumbnail_summary">Mostrar miniaturas no ecrã de bloqueio como fundo e como notificação</string>
|
||||
<string name="show_thumbnail_title">Mostrar miniatura</string>
|
||||
</resources>
|
||||
@@ -26,7 +26,7 @@
|
||||
<string name="default_audio_format_title">Формат аудио по умолчанию</string>
|
||||
<string name="download_dialog_title">Скачать</string>
|
||||
<string name="unsupported_url">URL не поддерживается</string>
|
||||
<string name="show_next_and_similar_title">\"Следующее\" и похожие видео</string>
|
||||
<string name="show_next_and_similar_title">Показать похожие видео</string>
|
||||
<string name="content_language_title">Язык контента по умолчанию</string>
|
||||
<string name="settings_category_video_audio_title">Видео и аудио</string>
|
||||
<string name="settings_category_appearance_title">Внешний вид</string>
|
||||
@@ -65,7 +65,7 @@
|
||||
<string name="msg_running_detail">Подробнее</string>
|
||||
<string name="msg_copied">Скопировано в буфер обмена</string>
|
||||
<string name="no_available_dir">Выберите папку для загрузки позже в настройках</string>
|
||||
<string name="show_age_restricted_content_title">Показать контент с возрастным ограничением</string>
|
||||
<string name="show_age_restricted_content_title">Контент с возрастным ограничением</string>
|
||||
<string name="general_error">Ошибка</string>
|
||||
<string name="your_comment">Ваш комментарий (English):</string>
|
||||
<string name="err_dir_create">Не удалось создать папку для загрузки \"%1$s\"</string>
|
||||
@@ -107,7 +107,7 @@
|
||||
<string name="show_higher_resolutions_summary">Только некоторые устройства поддерживают видео в 2K/4K</string>
|
||||
<string name="default_video_format_title">Формат видео по умолчанию</string>
|
||||
<string name="black_theme_title">Чёрная</string>
|
||||
<string name="popup_remember_size_pos_title">Запомнить параметры всплывающего окна</string>
|
||||
<string name="popup_remember_size_pos_title">Помнить параметры окна</string>
|
||||
<string name="player_gesture_controls_summary">Изменять яркость и громкость жестами</string>
|
||||
<string name="settings_category_popup_title">Всплывающее окно</string>
|
||||
<string name="popup_playing_toast">Воспроизведение во всплывающем окне</string>
|
||||
@@ -153,7 +153,7 @@
|
||||
<string name="app_description">Свободное и легковесное потоковое воспроизведение для Android.</string>
|
||||
<string name="view_on_github">Открыть на GitHub</string>
|
||||
<string name="contribution_encouragement">Приветствуется всё — идеи, перевод, изменения дизайна, чистка кода или огромные изменения в коде. Чем больше сделано, тем лучше!</string>
|
||||
<string name="copyright" formatted="true">© %1$s %2$s под лицензией %3$s</string>
|
||||
<string name="copyright" formatted="true">© %1$s • %2$s • %3$s</string>
|
||||
<string name="contribution_title">Помощь проекту</string>
|
||||
<string name="subscribe_button_title">Подписаться</string>
|
||||
<string name="subscription_change_failed">Не удалось изменить подписку</string>
|
||||
@@ -162,7 +162,7 @@
|
||||
<string name="tab_subscriptions">Подписки</string>
|
||||
<string name="fragment_feed_title">Что нового</string>
|
||||
<string name="enable_search_history_title">История поиска</string>
|
||||
<string name="enable_search_history_summary">Хранить запросы поиска локально</string>
|
||||
<string name="enable_search_history_summary">Хранить запросы поиска (локально)</string>
|
||||
<string name="enable_watch_history_title">История просмотров</string>
|
||||
<string name="enable_playback_resume_title">Продолжать воспроизведение</string>
|
||||
<string name="enable_playback_resume_summary">Восстанавливать последнюю позицию</string>
|
||||
@@ -282,8 +282,8 @@
|
||||
<string name="file">Файл</string>
|
||||
<string name="import_data_title">Импорт данных</string>
|
||||
<string name="export_data_title">Экспорт данных</string>
|
||||
<string name="import_data_summary">Текущие подписки, плейлисты и история будут заменены</string>
|
||||
<string name="export_data_summary">Экспорт подписок, плейлистов и истории</string>
|
||||
<string name="import_data_summary">Текущие подписки, плейлисты, история и (опционально) настройки будут заменены</string>
|
||||
<string name="export_data_summary">Экспорт подписок, плейлистов, истории и настроек</string>
|
||||
<string name="invalid_directory">Папка не существует</string>
|
||||
<string name="invalid_source">Папка или источник контента не существуют</string>
|
||||
<string name="invalid_file">Файл не существует или нет разрешения на его чтение или запись</string>
|
||||
@@ -383,7 +383,7 @@
|
||||
<string name="preferred_open_action_settings_title">При открытии ссылки</string>
|
||||
<string name="import_settings">Хотите импортировать настройки?</string>
|
||||
<string name="privacy_policy_title">Конфиденциальность</string>
|
||||
<string name="privacy_policy_encouragement">Проект NewPipe очень серьёзно относится к вашей конфиденциальности. Поэтому приложение не собирает никаких данных без вашего согласия.
|
||||
<string name="privacy_policy_encouragement">Проект NewPipe очень серьёзно относится к вашей конфиденциальности. Приложение не собирает никаких данных без вашего согласия.
|
||||
\nПолитика конфиденциальности NewPipe подробно объясняет, какие данные отправляются и хранятся при отправке отчёта о сбоях.</string>
|
||||
<string name="read_privacy_policy">Прочитать политику</string>
|
||||
<string name="start_accept_privacy_policy">В соответствии с Общим регламентом по защите данных ЕС (GDPR), обращаем ваше внимание на политику конфиденциальности NewPipe. Пожалуйста, внимательно ознакомьтесь с ней.
|
||||
@@ -580,19 +580,19 @@
|
||||
<string name="feed_update_threshold_option_always_update">Обновлять всегда</string>
|
||||
<string name="feed_group_dialog_empty_selection">Подписки не выбраны</string>
|
||||
<string name="feed_groups_header_title">Группы каналов</string>
|
||||
<string name="feed_use_dedicated_fetch_method_help_text">Если обновление подписок кажется вам слишком медленным, попробуйте быстрый режим (включите в настройках или кнопкой внизу).
|
||||
<string name="feed_use_dedicated_fetch_method_help_text">Если подписки обновляются слишком медленно, попробуйте быстрый режим (включите в настройках или кнопкой внизу).
|
||||
\n
|
||||
\nNewPipe позволяет обновлять подписки двумя способами:
|
||||
\n• получение канала целиком, медленное, но с полными сведениями;
|
||||
\n• обновление по RSS, быстрое, но с потерей сведений.
|
||||
\nNewPipe может обновлять подписки двумя способами:
|
||||
\n• получение канала целиком, медленное, с полными сведениями;
|
||||
\n• обновление по RSS, быстрое, с потерей сведений.
|
||||
\n
|
||||
\nПри быстром обновлении теряются длительность элемента и его тип (нельзя определить, трансляция это или обычное видео), могут быть получены не все элементы канала.
|
||||
\nПри быстром обновлении теряются длительность элемента и его тип (трансляция или обычное видео), могут быть получены не все элементы канала.
|
||||
\n
|
||||
\nYouTube является примером такого сервиса, допуская быстрое обновление по RSS.
|
||||
\nКак пример, YouTube поддерживает быстрое обновление.
|
||||
\n
|
||||
\nВыбор за вами: скорость или точность.</string>
|
||||
<string name="feed_use_dedicated_fetch_method_title">Обновление по RSS, если доступно</string>
|
||||
<string name="feed_use_dedicated_fetch_method_summary">Доступно для некоторых сервисов, быстрое, но может возвращать не всё содержимое канала и не содержать часть сведений (длительность, тип элемента, статус трансляции)</string>
|
||||
<string name="feed_use_dedicated_fetch_method_summary">Доступно для некоторых сервисов, быстрое, но может возвращать не всё содержимое канала и не содержать часть сведений (длительность, статус трансляции)</string>
|
||||
<string name="feed_update_threshold_summary">Период актуальности подписок после обновления — %s</string>
|
||||
<string name="restricted_video">Это видео имеет возрастное ограничение.
|
||||
\n
|
||||
@@ -613,7 +613,7 @@
|
||||
<string name="remove_watched_popup_title">Удалить просмотренные видео\?</string>
|
||||
<string name="show_original_time_ago_summary">Отображать сообщённое сервисом время с момента публикации</string>
|
||||
<string name="show_original_time_ago_title">Исходное время публикации</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">\"Безопасный режим\"</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">\"Безопасный режим\" YouTube</string>
|
||||
<string name="video_detail_by">От %s</string>
|
||||
<string name="channel_created_by">Создано %s</string>
|
||||
<string name="detail_sub_channel_thumbnail_view_description">Миниатюра значка канала</string>
|
||||
@@ -627,35 +627,37 @@
|
||||
<string name="copy_for_github">Копировать отформатированный отчет</string>
|
||||
<string name="never">Никогда</string>
|
||||
<string name="wifi_only">Только по Wi-Fi</string>
|
||||
<string name="autoplay_summary">Автоматический запуск воспроизведения — %s</string>
|
||||
<string name="autoplay_summary">Автовоспроизведение — %s</string>
|
||||
<string name="title_activity_play_queue">Очередь воспроизведения</string>
|
||||
<string name="unsupported_url_dialog_message">Не удалось распознать URL. Открыть в другом приложении\?</string>
|
||||
<string name="auto_queue_toggle">Авто-очередь</string>
|
||||
<string name="clear_queue_confirmation_description">Очередь активного плеера будет заменена</string>
|
||||
<string name="clear_queue_confirmation_title">Запросить подтверждение перед очисткой очереди</string>
|
||||
<string name="clear_queue_confirmation_title">Подтверждать очистку очереди</string>
|
||||
<string name="clear_queue_confirmation_summary">Переход от одного плеера к другому может заменить вашу очередь</string>
|
||||
<string name="settings_category_notification_title">Уведомление</string>
|
||||
<string name="notification_action_nothing">Ничего</string>
|
||||
<string name="notification_action_buffering">Буферизация</string>
|
||||
<string name="notification_action_shuffle">Перемешивать</string>
|
||||
<string name="notification_action_repeat">Повторение</string>
|
||||
<string name="notification_actions_at_most_three">Вы можете выбрать не более трёх действий для отображения в компактном уведомлении!</string>
|
||||
<string name="notification_actions_summary">Отредактируйте каждое действие уведомления ниже, нажав на него. Выберите до трёх из них, которые будут отображаться в компактном уведомлении, с помощью флажков справа.</string>
|
||||
<string name="notification_action_4_title">Кнопка пятого действия</string>
|
||||
<string name="notification_action_3_title">Кнопка четвёртого действия</string>
|
||||
<string name="notification_action_2_title">Кнопка третьего действия</string>
|
||||
<string name="notification_action_1_title">Кнопка второго действия</string>
|
||||
<string name="notification_action_0_title">Кнопка первого действия</string>
|
||||
<string name="notification_scale_to_square_image_summary">Масштабировать эскиз видео, отображаемый в уведомлении, с соотношением сторон 16:9 до 1:1 (может привести к искажениям)</string>
|
||||
<string name="notification_scale_to_square_image_title">Масштабировать эскиз до соотношения сторон 1: 1</string>
|
||||
<string name="notification_action_shuffle">Перемешать</string>
|
||||
<string name="notification_action_repeat">Повтор</string>
|
||||
<string name="notification_actions_at_most_three">В компактном уведомлении доступно не более трёх действий!</string>
|
||||
<string name="notification_actions_summary">Действия можно изменить, нажав на них. Отметьте не более трёх для отображения в компактном уведомлении</string>
|
||||
<string name="notification_action_4_title">Пятое действие</string>
|
||||
<string name="notification_action_3_title">Четвёртое действие</string>
|
||||
<string name="notification_action_2_title">Третье действие</string>
|
||||
<string name="notification_action_1_title">Второе действие</string>
|
||||
<string name="notification_action_0_title">Первое действие</string>
|
||||
<string name="notification_scale_to_square_image_summary">Масштабировать миниатюру видео 16:9 к 1:1 (возможны искажения)</string>
|
||||
<string name="notification_scale_to_square_image_title">Миниатюра 1:1</string>
|
||||
<string name="show_memory_leaks">Показать утечки памяти</string>
|
||||
<string name="recaptcha_cookies_cleared">Файлы cookie reCAPTCHA были удалены</string>
|
||||
<string name="clear_cookie_title">Очистить файлы cookie reCAPTCHA</string>
|
||||
<string name="show_age_restricted_content_summary">Показывать контент, который, возможно, не подходит для детей, потому что он имеет возрастное ограничение (например, 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube предоставляет \"Ограниченный режим\", который скрывает потенциально взрослый контент.</string>
|
||||
<string name="recaptcha_cookies_cleared">Куки reCAPTCHA удалены</string>
|
||||
<string name="clear_cookie_title">Удалить куки reCAPTCHA</string>
|
||||
<string name="show_age_restricted_content_summary">Показывать контент, который, возможно, не подходит для детей, так как имеет возрастное ограничение (например, 18+)</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube предоставляет \"Безопасный режим\", скрывая потенциально взрослый контент</string>
|
||||
<string name="enqueued">Добавлено в очередь</string>
|
||||
<string name="enqueue_stream">Добавить в очередь</string>
|
||||
<string name="clear_cookie_summary">Очистить cookie, которые NewPipe сохраняет при решении reCAPTCHA</string>
|
||||
<string name="notification_colorize_summary">Позволить Android изменять цвет уведомления в соответствии с основным цветом миниатюры (доступно не на всех устройствах)</string>
|
||||
<string name="clear_cookie_summary">Удалить сохранённые при решении reCAPTCHA куки</string>
|
||||
<string name="notification_colorize_summary">Окрашивать уведомление основным цветом миниатюры. Поддерживается не всеми устройствами</string>
|
||||
<string name="notification_colorize_title">Цветное уведомление</string>
|
||||
<string name="show_thumbnail_summary">Отображать миниатюру в уведомлении и на экране блокировки</string>
|
||||
<string name="show_thumbnail_title">Показать миниатюру</string>
|
||||
</resources>
|
||||
@@ -443,8 +443,8 @@
|
||||
<string name="delete_view_history_alert">Cheres iscantzellare totu sa cronologia de sos pompiados\?</string>
|
||||
<string name="clear_views_history_summary">Iscantzellat sa cronologia de sos cuntenutos riproduidos e sas positziones de riprodutzione</string>
|
||||
<string name="clear_views_history_title">Isbòida sa cronologia de sos pompiados</string>
|
||||
<string name="export_data_summary">Esporta sa cronologia, sos abbonamentos e sas iscalitas</string>
|
||||
<string name="import_data_summary">Subraiscriet sa cronologia e sos abbonamentos atuales tuos</string>
|
||||
<string name="export_data_summary">Esporta sa cronologia, sos abbonamentos, sas iscalitas e sas impostatziones</string>
|
||||
<string name="import_data_summary">Subraiscriet sa cronologia, sos abbonamentos, sas iscalita e (optzionalmente) sas impostatziones tuas atuales</string>
|
||||
<string name="export_data_title">Esporta sa base de datos</string>
|
||||
<string name="import_data_title">Importa sa base de datos</string>
|
||||
<string name="switch_to_main">Cola a sa modalidade printzipale</string>
|
||||
@@ -642,9 +642,11 @@
|
||||
<string name="clear_cookie_summary">Iscantzella sos testimòngios chi NewPipe sarvat cando risolves unu reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">As isboidadu sos testimòngios reCAPTCHA</string>
|
||||
<string name="clear_cookie_title">Isbòida sos testimòngios reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube frunit una \"Modalidade cun restritziones\" chi cuat sos cuntenudos chi diant pòdere èssere pro adultos.</string>
|
||||
<string name="show_age_restricted_content_summary">Ammustra sos cuntenutos chi diant pòdere no èssere adatos pro sos pitzinnos ca tenent unu lìmite de edade (che a 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube frunit una \"Modalidade cun restritziones\" chi cuat sos cuntenudos chi diant pòdere èssere pro adultos</string>
|
||||
<string name="show_age_restricted_content_summary">Ammustra sos cuntenutos chi diant pòdere no èssere adatos pro sos pitzinnos ca tenent unu lìmite de edade (che a 18+)</string>
|
||||
<string name="notification_colorize_summary">Pedi a Android de personalizare su colore de sa notìfica sighende su colore printzipale de sa miniadura (ammenta·ti chi custu no est a disponimentu pro totu sos dispositivos)</string>
|
||||
<string name="notification_colorize_title">Colora sas notìficas</string>
|
||||
<string name="popup_remember_size_pos_summary">Ammenta s\'ùrtima mannària e sa positzione in sa ventanedda</string>
|
||||
<string name="show_thumbnail_summary">Ammustra sa miniatura in s\'ischermada de blocu e in intro de sas notìficas</string>
|
||||
<string name="show_thumbnail_title">Ammustra sa miniatura</string>
|
||||
</resources>
|
||||
@@ -231,8 +231,8 @@
|
||||
<string name="switch_to_main">Prepnúť na Video</string>
|
||||
<string name="import_data_title">Importovať databázu</string>
|
||||
<string name="export_data_title">Exportovať databázu</string>
|
||||
<string name="import_data_summary">Prepíše aktuálnu históriu pozretí a odberov</string>
|
||||
<string name="export_data_summary">Exportovať históriu, odbery a zoznamy skladieb</string>
|
||||
<string name="import_data_summary">Prepíše aktuálnu históriu, odbery, zoznamy skladieb a (voliteľne aj) nastavenia</string>
|
||||
<string name="export_data_summary">Exportovať históriu, odbery, zoznamy skladieb a nastavenia</string>
|
||||
<string name="player_stream_failure">Nepodarilo sa prehrať tento stream</string>
|
||||
<string name="player_unrecoverable_failure">Pri prehrávaní došlo k chybe a nemožno pokračovať</string>
|
||||
<string name="player_recoverable_failure">Zotavovanie po chybe v prehrávaní</string>
|
||||
@@ -307,7 +307,7 @@
|
||||
<string name="resize_fill">Vyplniť</string>
|
||||
<string name="resize_zoom">Zväčšiť</string>
|
||||
<string name="use_inexact_seek_title">Používať rýchly posun</string>
|
||||
<string name="use_inexact_seek_summary">Rýchly posun umožňuje prejsť na novú pozíciu rýchlejšie, ale s menšou presnosťou. Posúvanie o 5,15 alebo 25 sekúnd s týmto nastavením nefunguje.</string>
|
||||
<string name="use_inexact_seek_summary">Rýchly posun umožňuje prejsť na novú pozíciu rýchlejšie, ale s menšou presnosťou. Posúvanie o 5, 15 alebo 25 sekúnd s týmto nastavením nefunguje.</string>
|
||||
<string name="download_thumbnail_title">Načítanie miniatúr</string>
|
||||
<string name="download_thumbnail_summary">Vypnutím tejto funkcie sa nebudú vytvárať miniatúry a tým sa ušetrí miesto a pamäť. Zmena nastavení spôsobuje vyčistenie vyrovnávacej pamäte.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Vyrovnávacia pamäť obrázkov vymazaná</string>
|
||||
@@ -653,8 +653,10 @@
|
||||
<string name="clear_cookie_summary">Vymazať cookies, ktoré NewPipe ukladá, keď vyriešite reCAPTCHA</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies boli vymazané</string>
|
||||
<string name="clear_cookie_title">Vymazať cookies reCAPTCHA</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube poskytuje \"Obmedzený režim\", ktorý skrýva potenciálny obsah pre dospelých.</string>
|
||||
<string name="show_age_restricted_content_summary">Zobraziť obsah, ktorý je možno nevhodný pre deti, pretože má vekovú hranicu (napríklad 18+).</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube poskytuje \"Obmedzený režim\", ktorý skrýva potenciálny obsah pre dospelých</string>
|
||||
<string name="show_age_restricted_content_summary">Zobraziť obsah, ktorý je možno nevhodný pre deti, pretože má vekovú hranicu (napríklad 18+)</string>
|
||||
<string name="notification_colorize_summary">Nechajte Android, aby prispôsobil farbu upozornenia podľa hlavnej farby v miniatúre (nemusí to fungovať na všetkých zariadeniach)</string>
|
||||
<string name="notification_colorize_title">Farby upozornení</string>
|
||||
<string name="show_thumbnail_title">Zobrazovať miniatúru</string>
|
||||
<string name="show_thumbnail_summary">Zobrazovať miniatúru pri uzamknutej obrazovke a v upozorneniach</string>
|
||||
</resources>
|
||||
@@ -101,14 +101,14 @@
|
||||
<string name="msg_copied">Panoya kopyalandı</string>
|
||||
<string name="no_available_dir">Lütfen daha sonra ayarlardan uygun bir indirme dizini belirleyin</string>
|
||||
<string name="could_not_setup_download_menu">İndirme menüsü ayarlanamadı</string>
|
||||
<string name="open_in_popup_mode">Açılır pencere modunda aç</string>
|
||||
<string name="popup_mode_share_menu_title">Açılır pencere modu</string>
|
||||
<string name="open_in_popup_mode">Açılır pencere kipinde aç</string>
|
||||
<string name="popup_mode_share_menu_title">Açılır pencere kipi</string>
|
||||
<string name="default_popup_resolution_title">Varsayılan açılır pencere çözünürlüğü</string>
|
||||
<string name="show_higher_resolutions_title">Yüksek çözünürlükleri göster</string>
|
||||
<string name="show_higher_resolutions_summary">Yalnızca bazı aygıtlar 2K/4K videoları oynatabilir</string>
|
||||
<string name="default_video_format_title">Varsayılan video biçimi</string>
|
||||
<string name="black_theme_title">Siyah</string>
|
||||
<string name="popup_playing_toast">Açılır pencere modunda oynatılıyor</string>
|
||||
<string name="popup_playing_toast">Açılır pencere kipinde oynatılıyor</string>
|
||||
<string name="all">Tümü</string>
|
||||
<string name="channel">Kanal</string>
|
||||
<string name="yes">Evet</string>
|
||||
@@ -120,7 +120,7 @@
|
||||
<string name="short_thousand">b</string>
|
||||
<string name="short_million">M</string>
|
||||
<string name="short_billion">B</string>
|
||||
<string name="msg_popup_permission">Bu izin, açılır pencere modunda
|
||||
<string name="msg_popup_permission">Bu izin, açılır pencere kipinde
|
||||
\naçmak için gereklidir</string>
|
||||
<string name="title_activity_recaptcha">reCAPTCHA formu</string>
|
||||
<string name="recaptcha_request_toast">reCAPTCHA formu istendi</string>
|
||||
@@ -260,8 +260,8 @@
|
||||
<string name="preferred_player_fetcher_notification_message">İstenen içerik yükleniyor</string>
|
||||
<string name="import_data_title">Veri tabanını içe aktar</string>
|
||||
<string name="export_data_title">Veri tabanını dışa aktar</string>
|
||||
<string name="import_data_summary">Geçerli geçmişinizi ve aboneliklerinizi geçersiz kılar</string>
|
||||
<string name="export_data_summary">Geçmişi, abonelikleri ve oynatma listelerini dışa aktar</string>
|
||||
<string name="import_data_summary">Geçerli geçmişinizi, aboneliklerinizi, oynatma listelerinizi ve (isteğe bağlı olarak) ayarlarınızı geçersiz kılar</string>
|
||||
<string name="export_data_summary">Geçmişi, abonelikleri, oynatma listelerini ve ayarları dışa aktar</string>
|
||||
<string name="export_complete_toast">Dışa aktarıldı</string>
|
||||
<string name="import_complete_toast">İçe aktarıldı</string>
|
||||
<string name="no_valid_zip_file">Geçerli ZIP dosyası yok</string>
|
||||
@@ -325,14 +325,17 @@
|
||||
<string name="previous_export">Önceki dışa aktarım</string>
|
||||
<string name="subscriptions_import_unsuccessful">Abonelikler içe aktarılamadı</string>
|
||||
<string name="subscriptions_export_unsuccessful">Abonelikler dışa aktarılamadı</string>
|
||||
<string name="import_youtube_instructions">Dışa aktarım dosyasını indirerek YouTube aboneliklerinizi içe aktarın:
|
||||
\n
|
||||
\n1. Şu adrese gidin: %1$s
|
||||
\n2. Sorulduğunda hesabınıza giriş yapın
|
||||
\n3. İndirme başlamalı (bu, dışa aktarma dosyasıdır)</string>
|
||||
<string name="import_youtube_instructions">Google Takeout\'tan YouTube aboneliklerini içe aktar:
|
||||
\n
|
||||
\n1. Şu adrese gidin: %1$s
|
||||
\n2. Sorulduğunda hesabınıza giriş yapın
|
||||
\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. İndirilen zip dosyasından .json dosyasını çıkarın (genellikle \"YouTube and YouTube Music/subscriptions/subscriptions.json\") ve buradan içe aktarın.</string>
|
||||
<string name="import_soundcloud_instructions">URL\'yi veya ID\'nizi yazarak SoundCloud profilini içe aktarın:
|
||||
\n
|
||||
\n1. Web tarayıcısında \"masaüstü modu\" etkinleştirin (site, mobil aygıtlar için uygun değildir)
|
||||
\n1. Web tarayıcısında \"masaüstü kipi\" etkinleştirin (site, mobil aygıtlar için uygun değildir)
|
||||
\n2. Şu adrese gidin: %1$s
|
||||
\n3. Sorulduğunda giriş yapın
|
||||
\n4. Yönlendirildiğiniz profil URL\'sini kopyalayın.</string>
|
||||
@@ -410,7 +413,7 @@
|
||||
<string name="selection">Seçim</string>
|
||||
<string name="updates_setting_title">Güncellemeler</string>
|
||||
<string name="updates_setting_description">Yeni bir sürüm mevcut olduğunda uygulama güncellemesi için bir bildirim göster</string>
|
||||
<string name="list_view_mode">Liste görünümü modu</string>
|
||||
<string name="list_view_mode">Liste görünümü kipi</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="grid">Izgara</string>
|
||||
<string name="auto">Otomatik</string>
|
||||
@@ -568,8 +571,8 @@
|
||||
<string name="feed_update_threshold_option_always_update">Her zaman güncelle</string>
|
||||
<string name="feed_use_dedicated_fetch_method_title">Uygunken özel akıştan edinin</string>
|
||||
<string name="feed_use_dedicated_fetch_method_summary">Bazı servislerde kullanılabilir, genellikle daha hızlıdır ancak kısıtlı sayıda öge ve eksik bilgi (örn. süre, öge türü, canlı durumu olmaksızın) getirilebilir.</string>
|
||||
<string name="feed_use_dedicated_fetch_method_enable_button">Hızlı modu etkinleştir</string>
|
||||
<string name="feed_use_dedicated_fetch_method_disable_button">Hızlı modu devre dışı bırak</string>
|
||||
<string name="feed_use_dedicated_fetch_method_enable_button">Hızlı kipi etkinleştir</string>
|
||||
<string name="feed_use_dedicated_fetch_method_disable_button">Hızlı kipi devre dışı bırak</string>
|
||||
<string name="feed_use_dedicated_fetch_method_help_text">Akışın çok yavaş yüklendiğini mi düşünüyorsunuz\? Öyleyse, hızlı yüklemeyi etkinleştirin (ayarlardan değiştirebilir veya aşağıdaki düğmeye dokunabilirsiniz).
|
||||
\n
|
||||
\nNewPipe iki akış yükleme yordamı sunar:
|
||||
@@ -599,7 +602,7 @@
|
||||
<string name="remove_watched">İzleneni kaldır</string>
|
||||
<string name="show_original_time_ago_summary">Akış ögelerinde hizmetlerden alınan özgün metinler görünecektir</string>
|
||||
<string name="show_original_time_ago_title">Ögelerde özgün \'… önce\'yi göster</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">YouTube\'un \"Kısıtlı Mod\"unu aç</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">YouTube\'un \"Kısıtlı Kip\"ini aç</string>
|
||||
<string name="video_detail_by">%s tarafından</string>
|
||||
<string name="channel_created_by">%s tarafından oluşturuldu</string>
|
||||
<string name="detail_sub_channel_thumbnail_view_description">Kanalın avatar küçük resmi</string>
|
||||
@@ -640,6 +643,10 @@
|
||||
<string name="clear_cookie_summary">reCAPTCHA çözdüğünüzde NewPipe\'ın sakladığı çerezleri temizle</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA çerezleri temizlendi</string>
|
||||
<string name="clear_cookie_title">reCAPTCHA çerezlerini temizle</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube, olası yetişkin içeriği gizleyen \"Kısıtlı Mod\" sağlamaktadır.</string>
|
||||
<string name="show_age_restricted_content_summary">Yaş kısıtı (18+ gibi) nedeniyle çocuklara uygun olmayabilecek içeriği göster.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube, olası yetişkin içeriği gizleyen \"Kısıtlı Kip\" sağlamaktadır</string>
|
||||
<string name="show_age_restricted_content_summary">Yaş kısıtı (18+ gibi) nedeniyle çocuklara uygun olmayabilecek içeriği göster</string>
|
||||
<string name="show_thumbnail_summary">Küçük resmi kilit ekranında arka plan olarak ve bildirimlerin içinde göster</string>
|
||||
<string name="show_thumbnail_title">Küçük resmi göster</string>
|
||||
<string name="notification_colorize_summary">Android\'in bildirim rengini küçük resimdeki ana renge göre özelleştirmesini sağlayın (bunun tüm aygıtlarda kullanılamadığını unutmayın)</string>
|
||||
<string name="notification_colorize_title">Bildirimi renklendir</string>
|
||||
</resources>
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="main_bg_subtitle">Nhấn \"Tìm kiếm\" để bắt đầu</string>
|
||||
<string name="main_bg_subtitle">Nhấn \"Tìm kiếm\" để tìm kiếm video
|
||||
\n</string>
|
||||
<string name="view_count_text">%1$s lượt xem</string>
|
||||
<string name="upload_date_text">Đăng vào %1$s</string>
|
||||
<string name="no_player_found">Không tìm thấy trình phát. Cài đặt VLC\?</string>
|
||||
@@ -58,7 +59,7 @@
|
||||
<string name="background_player_playing_toast">Phát ở chế độ nền</string>
|
||||
<string name="popup_playing_toast">Phát ở chế độ popup</string>
|
||||
<string name="content">Nội dung</string>
|
||||
<string name="show_age_restricted_content_title">Cho phép nội dung có giới hạn độ tuổi</string>
|
||||
<string name="show_age_restricted_content_title">Cho phép và hiển thị nội dung có giới hạn độ tuổi</string>
|
||||
<string name="duration_live">Trực tiếp</string>
|
||||
<string name="downloads">Tải xuống</string>
|
||||
<string name="downloads_title">Tải xuống</string>
|
||||
@@ -359,7 +360,8 @@
|
||||
\n
|
||||
\n1. Truy cập URL này: %1$s
|
||||
\n2. Đăng nhập khi được yêu cầu
|
||||
\n3. Một tệp sẽ được tải về (đó là tệp xuất)</string>
|
||||
\n3. Một tệp sẽ được tải về (đó là tệp xuất)
|
||||
\n4. Làm theo yêu cầu như màn hình và tải xuống file .json và cho nó vào đây để hoàn tất</string>
|
||||
<string name="import_soundcloud_instructions">Nhập hồ sơ SoundCloud bằng cách nhập URL hoặc ID của bạn:
|
||||
\n
|
||||
\n1. Bật \"chế độ màn hình\" trong trình duyệt web (trang web không khả dụng cho thiết bị di động)
|
||||
@@ -541,8 +543,8 @@
|
||||
<string name="videos_string">Video</string>
|
||||
<string name="restricted_video">Video này bị giới hạn độ tuổi.
|
||||
\n
|
||||
\nBật \"Nội dung giới hạn độ tuổi\" trong cài đặt nếu bạn muốn xem video này.</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Chế độ giới hạn YouTube</string>
|
||||
\nBật \"Cho phép nội dung giới hạn độ tuổi\" trong cài đặt nếu bạn muốn xem video này.</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">hế độ giới hạn YouTube</string>
|
||||
<string name="peertube_instance_add_https_only">Chỉ URL HTTPS được hỗ trợ</string>
|
||||
<string name="peertube_instance_url_summary">Chọn thực thể PeerTube ưa thích</string>
|
||||
<string name="peertube_instance_url_title">Thực thể PeerTube</string>
|
||||
@@ -623,4 +625,16 @@
|
||||
<string name="notification_scale_to_square_image_summary">Thu nhỏ ảnh thumbnail trong thông báo từ tỉ lệ 16:9 xuống 1:1 (có thể gây méo ảnh)</string>
|
||||
<string name="notification_scale_to_square_image_title">Thu nhỏ ảnh thumbnail theo tỉ lệ 1:1</string>
|
||||
<string name="search_showing_result_for">Hiện kết quả cho: %s</string>
|
||||
<string name="enqueue_stream">Hàng</string>
|
||||
<string name="show_age_restricted_content_summary">Hiển thị nội dung không an toàn cho trẻ em vì có giới hạn độ tuổi (+18)</string>
|
||||
<string name="show_thumbnail_summary">Hiển thị hình thu nhỏ trong màn hình khoá dưới dạng nền và đặt trong thanh thông báo</string>
|
||||
<string name="show_thumbnail_title">Xem hình thu nhỏ</string>
|
||||
<string name="show_memory_leaks">Kiểm tra bộ</string>
|
||||
<string name="enqueued">Hàng</string>
|
||||
<string name="clear_cookie_summary">Xoá Cookie mà NewPipe lưu trữ sau khi bạn vượt</string>
|
||||
<string name="recaptcha_cookies_cleared">Cookie đã được</string>
|
||||
<string name="clear_cookie_title">Xoá bỏ Cookie của</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube cung cấp \"Chế độ hạn chế\" để ẩn nội dung người lớn</string>
|
||||
<string name="notification_colorize_summary">Yêu cầu Android tùy chỉnh màu của thông báo theo màu chính của video, có thể không khả dụng trong vài thiết bị</string>
|
||||
<string name="notification_colorize_title">àu thông báo</string>
|
||||
</resources>
|
||||
@@ -228,8 +228,8 @@
|
||||
<string name="website_title">網站</string>
|
||||
<string name="import_data_title">匯入資料庫</string>
|
||||
<string name="export_data_title">匯出資料庫</string>
|
||||
<string name="import_data_summary">覆蓋您目前的歷史記錄和訂閱</string>
|
||||
<string name="export_data_summary">匯出歷史記錄、訂閱和播放清單</string>
|
||||
<string name="import_data_summary">覆蓋您目前的歷史記錄、訂閱與(可選的)設定</string>
|
||||
<string name="export_data_summary">匯出歷史記錄、訂閱、播放清單與設定</string>
|
||||
<string name="give_back">回饋</string>
|
||||
<string name="website_encouragement">如欲了解更多有關 NewPipe 的資訊和新聞,請造訪我們的網站。</string>
|
||||
<string name="main_page_content">首頁內容</string>
|
||||
@@ -633,8 +633,10 @@
|
||||
<string name="clear_cookie_summary">清除 NewPipe 在您解決 reCAPTCHA 時儲存的 cookie</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies 已被清除</string>
|
||||
<string name="clear_cookie_title">清除 reCAPTCHA cookies</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube 提供了「受限模式」,可以隱藏潛在的成人內容。</string>
|
||||
<string name="show_age_restricted_content_summary">顯示可能不適於兒童的內容(因為其有年齡限制,如18歲以上等)。</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube 提供了「受限模式」,可以隱藏潛在的成人內容</string>
|
||||
<string name="show_age_restricted_content_summary">顯示可能不適於兒童的內容(因為其有年齡限制,如18歲以上等)</string>
|
||||
<string name="notification_colorize_summary">讓 Android 根據縮圖中的主要色彩來自訂通知的顏色(請注意,此功能不是在所有裝置上都能正常運作)</string>
|
||||
<string name="notification_colorize_title">彩色通知</string>
|
||||
<string name="show_thumbnail_summary">在鎖定畫面上顯示縮圖作為背景與內部通知</string>
|
||||
<string name="show_thumbnail_title">顯示縮圖</string>
|
||||
</resources>
|
||||
@@ -155,9 +155,9 @@
|
||||
<string name="c3s_url" translatable="false">https://www.c3s.cc/</string>
|
||||
<string name="content">Content</string>
|
||||
<string name="show_age_restricted_content_title">Show age restricted content</string>
|
||||
<string name="show_age_restricted_content_summary">Show content possibly unsuitable for children because it has an age limit (like 18+).</string>
|
||||
<string name="show_age_restricted_content_summary">Show content possibly unsuitable for children because it has an age limit (like 18+)</string>
|
||||
<string name="youtube_restricted_mode_enabled_title">Turn on YouTube\'s \"Restricted Mode\"</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube provides a \"Restricted Mode\" which hides potentially mature content.</string>
|
||||
<string name="youtube_restricted_mode_enabled_summary">YouTube provides a \"Restricted Mode\" which hides potentially mature content</string>
|
||||
<string name="restricted_video">This video is age restricted.\n\nTurn on \"%1$s\" in the settings if you want to see it.</string>
|
||||
<string name="duration_live">Live</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
@@ -204,8 +204,8 @@
|
||||
<string name="export_data_title">Export database</string>
|
||||
<string name="clear_cookie_title">Clear reCAPTCHA cookies</string>
|
||||
<string name="recaptcha_cookies_cleared">reCAPTCHA cookies have been cleared</string>
|
||||
<string name="import_data_summary">Overrides your current history and subscriptions</string>
|
||||
<string name="export_data_summary">Export history, subscriptions and playlists</string>
|
||||
<string name="import_data_summary">Overrides your current history, subscriptions, playlists and (optionally) settings</string>
|
||||
<string name="export_data_summary">Export history, subscriptions, playlists and settings</string>
|
||||
<string name="clear_cookie_summary">Clear cookies that NewPipe stores when you solve a reCAPTCHA</string>
|
||||
<string name="clear_views_history_title">Clear watch history</string>
|
||||
<string name="clear_views_history_summary">Deletes the history of played streams and the playback positions</string>
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.schabi.newpipe.ktx
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
import java.time.LocalDate
|
||||
import java.time.OffsetDateTime
|
||||
import java.time.ZoneId
|
||||
import java.time.ZoneOffset
|
||||
import java.util.Calendar
|
||||
import java.util.TimeZone
|
||||
|
||||
class OffsetDateTimeToCalendarTest {
|
||||
@Test
|
||||
fun testRelativeTimeWithCurrentOffsetDateTime() {
|
||||
val calendar = LocalDate.of(2020, 1, 1).atStartOfDay().atOffset(ZoneOffset.UTC)
|
||||
.toCalendar()
|
||||
|
||||
assertEquals(2020, calendar[Calendar.YEAR])
|
||||
assertEquals(0, calendar[Calendar.MONTH])
|
||||
assertEquals(1, calendar[Calendar.DAY_OF_MONTH])
|
||||
assertEquals(0, calendar[Calendar.HOUR])
|
||||
assertEquals(0, calendar[Calendar.MINUTE])
|
||||
assertEquals(0, calendar[Calendar.SECOND])
|
||||
assertEquals(TimeZone.getTimeZone("UTC"), calendar.timeZone)
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException::class)
|
||||
fun testRelativeTimeWithFarOffOffsetDateTime() {
|
||||
OffsetDateTime.MAX.minusYears(1).toCalendar()
|
||||
}
|
||||
}
|
||||
@@ -205,7 +205,7 @@ public class ListHelperTest {
|
||||
assertEquals(MediaFormat.M4A, stream.getFormat());
|
||||
|
||||
// Adding a new format and bitrate. Adding another stream will have no impact since
|
||||
// it's not a prefered format.
|
||||
// it's not a preferred format.
|
||||
testList.add(new AudioStream("", MediaFormat.WEBMA, /**/ 192));
|
||||
stream = testList.get(ListHelper.getHighestQualityAudioIndex(MediaFormat.MP3, testList));
|
||||
assertEquals(192, stream.average_bitrate);
|
||||
|
||||
3
fastlane/metadata/android/ar/changelogs/959.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
إصلاح انهيارات متكررة لا نهائية بعد فتح مقرر الأخطاء.
|
||||
تحديث مجموعة نماذج PeerTube التي يمكن فتحها أوتوماتيكيًا عن طريق NewPipe.
|
||||
تحديث التراجم.
|
||||
@@ -2,10 +2,12 @@ Neu und verbessert:
|
||||
• Einstellung, kein Vorschaubild auf dem Lockscreen anzuzeigen, wurde hinzugefügt
|
||||
• Feeds durch Gesten aktualisieren
|
||||
• Verbesserte Performance beim laden von lokalen Listen
|
||||
|
||||
Behoben:
|
||||
• Absturz beim Starten von NewPipe ohne Internetverbindung
|
||||
• Absturz beim Wiederherstellen von NewPipe aus dem Arbeitsspeicher
|
||||
• [YouTube] Lange Wiedergabelisten
|
||||
|
||||
Anderes:
|
||||
• Code Verbesserungen und mehrere interne Verbesserungen
|
||||
• Bibliotheken wurden aktualisiert
|
||||
|
||||
3
fastlane/metadata/android/de/changelogs/959.txt
Normal file
3
fastlane/metadata/android/de/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Endlose Abstürze bach Öffnen eines Fehlerberichts wurden behoben.
|
||||
Die Liste der PeerTube Instanzen, die von NewPipe automatisch geöffnet werden können, wurde aktualisisert.
|
||||
Übersetzungen wurden aktualisert.
|
||||
3
fastlane/metadata/android/en-US/changelogs/959.txt
Normal file
3
fastlane/metadata/android/en-US/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Fixed endless loop of crashes after opening the error reporter.
|
||||
Updated list of PeerTube instances which can be opened automatically by NewPipe.
|
||||
Updated translations.
|
||||
4
fastlane/metadata/android/en-US/changelogs/960.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/960.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
• Improved description of export database option in settings.
|
||||
• Fixed YouTube comments parsing.
|
||||
• Fixed display name of media.ccc.de service.
|
||||
• Updated translations.
|
||||
@@ -1,7 +1,7 @@
|
||||
Mejorado
|
||||
• Reproducción automática disponible para todos los servicios (no sólo para YouTube)
|
||||
|
||||
Reparado
|
||||
Arreglado
|
||||
• Streams relacionados, gracias al soporte de las nuevas continuaciones de YouTube
|
||||
• Videos con restricción de edad en YouTube
|
||||
• [Android TV] Foco retenido
|
||||
• [Android TV] Superposición de los destacados de foco persistente
|
||||
|
||||
1
fastlane/metadata/android/es/changelogs/956.txt
Normal file
1
fastlane/metadata/android/es/changelogs/956.txt
Normal file
@@ -0,0 +1 @@
|
||||
[YouTube] Arreglado crasheo cargando cualquier video
|
||||
10
fastlane/metadata/android/es/changelogs/957.txt
Normal file
10
fastlane/metadata/android/es/changelogs/957.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
• Unificacion de acciones de cola
|
||||
• Gesto de 2 dedos para cerrar el reproductor
|
||||
• Permitir borrado de cookies reCAPTCHA
|
||||
• Descolorizar la notificación
|
||||
• Mejoras en detalles de video para prevenir carga infinita, bugs al compartir y otras inconsistencias
|
||||
• Acelerar videos y arreglo de los de edad restringida
|
||||
• Arreglo en crasheo cuando se recorría en el video
|
||||
• No reordenar listas agarrando miniaturas
|
||||
• Recordar opciones del pop up
|
||||
• Añadido el lenguaje Santali
|
||||
15
fastlane/metadata/android/es/changelogs/958.txt
Normal file
15
fastlane/metadata/android/es/changelogs/958.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
Nuevo/ Mejoras:
|
||||
• Opción de ocultar miniatura en pantalla de bloqueo
|
||||
• Deslizar para actualizar el feed
|
||||
• Rendimiento mejorado para listas
|
||||
|
||||
Arreglos:
|
||||
• Crasheos cuando se iniciaba la app tras cerrarla en RAM
|
||||
• Crasheos cuando no había internet
|
||||
• Gestos de brillo y volumen
|
||||
• [YouTube] listas largas
|
||||
|
||||
Otros:
|
||||
• Limpieza en código y mejoras internas
|
||||
• Dependencias actualizadas
|
||||
• Traducciones
|
||||
3
fastlane/metadata/android/es/changelogs/959.txt
Normal file
3
fastlane/metadata/android/es/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Arreglado un bucle interminable de caídas después de abrir el reportador de errores.
|
||||
Lista actualizada de instancias de PeerTube que pueden ser abiertas automáticamente por NewPipe.
|
||||
Traducciones actualizadas.
|
||||
15
fastlane/metadata/android/eu/changelogs/958.txt
Normal file
15
fastlane/metadata/android/eu/changelogs/958.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
Berria eta hobetua:
|
||||
• Blokeo pantailan miniatura ezkutatzeko aukera berriro gehitu da
|
||||
• Tiratu jarioa freskatzeko
|
||||
• Errendimendu hobea zerrendak eskuratzerakoan
|
||||
|
||||
Konponduta:
|
||||
• Hutsegitea NewPipe RAMetik kendu ondoren abiaraztean
|
||||
• Hutsegitea abiaraztean konexiorik ez dagoenean
|
||||
• Distira eta bolumen-keinuen ezarpenak errespetatzen dira
|
||||
• [YouTube] Erreprodukzio zerrenda luzeak konponduta
|
||||
|
||||
Bestelakoak:
|
||||
• Kodearen garbiketa eta barne hobekuntzak
|
||||
• Menpekotasunen eguneraketa
|
||||
• Itzulpenen eguneraketa
|
||||
3
fastlane/metadata/android/eu/changelogs/959.txt
Normal file
3
fastlane/metadata/android/eu/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Akatsen txostena ireki ostean zeuden hutsegite amaigabeak konpondu dira.
|
||||
NewPipekin automatikoki ireki daitezkeen PeerTube instantziak eguneratu dira.
|
||||
Itzulpenak eguneratuta.
|
||||
3
fastlane/metadata/android/fr/changelogs/959.txt
Normal file
3
fastlane/metadata/android/fr/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Correction d'une boucle infinie de crash lors de l'ouverture du système de reportage des erreurs.
|
||||
Mise à jour de la liste des instances PeerTube qui peuvent être ouvertes automatiquement par NewPipe.
|
||||
Mise à jour des traductions.
|
||||
15
fastlane/metadata/android/he/changelogs/958.txt
Normal file
15
fastlane/metadata/android/he/changelogs/958.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
חידושים ושיפורים:
|
||||
• האפשרות להסתרת התמונה הממוזערת על מסך הנעילה נוספה מחדש
|
||||
• משיכה לרענון ההזנה
|
||||
• ביצועים משופרים בקבלת רשימות מקומיות
|
||||
|
||||
תיקונים:
|
||||
• תוקנה קריסה עם הפעלת NewPipe לאחר הסרה מהזיכרון
|
||||
• תוקנה קריסה בהפעלה כשאין חיבור לאינטרנט
|
||||
• תוקנו תקלות עם מחוות בהירות ושמע
|
||||
• [YouTube] תוקנות רשימות נגינה ארוכות
|
||||
|
||||
שונות:
|
||||
• מחיקת קוד ישן וכמה שינויים פנימיים
|
||||
• עדכון תלויות
|
||||
• התרגומים עודכנו
|
||||
3
fastlane/metadata/android/he/changelogs/959.txt
Normal file
3
fastlane/metadata/android/he/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
תוקנה לולאה אינסופית בפתיחת מדווח השגיאות.
|
||||
רשימת מופעי ה־PeerTube שניתן לפתוח אוטומטית עם NewPipe עודכנה.
|
||||
התרגומים עודכנו.
|
||||
4
fastlane/metadata/android/it/changelogs/770.txt
Normal file
4
fastlane/metadata/android/it/changelogs/770.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
Modifiche su 0.17.2
|
||||
|
||||
Correzionw
|
||||
• Risolto il problema con nessun video disponibile
|
||||
1
fastlane/metadata/android/it/changelogs/830.txt
Normal file
1
fastlane/metadata/android/it/changelogs/830.txt
Normal file
@@ -0,0 +1 @@
|
||||
Aggiornato SoundCloud client_id per risolvere i problemi di SoundCloud.
|
||||
1
fastlane/metadata/android/it/changelogs/850.txt
Normal file
1
fastlane/metadata/android/it/changelogs/850.txt
Normal file
@@ -0,0 +1 @@
|
||||
In questa versione è stata aggiornata la versione del sito web di YouTube. La vecchia versione del sito web verrà interrotta a Marzo e quindi è necessario aggiornare NewPipe.
|
||||
7
fastlane/metadata/android/it/changelogs/860.txt
Normal file
7
fastlane/metadata/android/it/changelogs/860.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
Migliorato
|
||||
• Salvare e ripristinare se intonazione e tempo sono sganciati o meno
|
||||
• Supporta il ritaglio del display nel lettore
|
||||
• Visualizzazione rotonda e numero di iscritti
|
||||
• YouTube ottimizzato per utilizzare meno dati
|
||||
|
||||
In questa versione sono stati corretti più di 15 errori relativi a YouTube.
|
||||
2
fastlane/metadata/android/it/changelogs/870.txt
Normal file
2
fastlane/metadata/android/it/changelogs/870.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
Questa è una versione hotfix che aggiorna NewPipe per consentire nuovamente l'utilizzo di SoundCloud senza grossi problemi.
|
||||
L'API v2 di SoundCloud viene ora utilizzata nell'estrattore e il rilevamento di ID client non validi è stato migliorato.
|
||||
1
fastlane/metadata/android/it/changelogs/910.txt
Normal file
1
fastlane/metadata/android/it/changelogs/910.txt
Normal file
@@ -0,0 +1 @@
|
||||
Corretta la migrazione del database che in alcuni rari casi impediva l'avvio di NewPipe.
|
||||
1
fastlane/metadata/android/it/changelogs/956.txt
Normal file
1
fastlane/metadata/android/it/changelogs/956.txt
Normal file
@@ -0,0 +1 @@
|
||||
[YouTube] Risolto un arresto anomalo durante il caricamento di qualsiasi video
|
||||
@@ -1,14 +1,15 @@
|
||||
Novità e miglioramenti:
|
||||
- Opzione per nascondere la miniatura nella notifica e sul blocco schermo
|
||||
- Trascina verso il basso per ricaricare il feed
|
||||
- Migliori prestazioni nelle liste locali
|
||||
Novità e Miglioramenti:
|
||||
• Ripristinata opzione per nascondere la copertina nella notifica e sul blocco schermo
|
||||
• Trascina verso il basso per aggiornare i feed
|
||||
• Prestazioni migliorate nelle liste locali
|
||||
|
||||
Bug sistemati:
|
||||
- Crash all'avvio e dopo il ripristino dalla RAM
|
||||
- Se solo un gesto tra luminosità e volume è abilitato, esso può essere usato dovunque sullo schermo
|
||||
- [YouTube] Sistemate le playlist lunghe
|
||||
Correzioni:
|
||||
• Crash all'avvio e dopo che NewPipr è stato rimosso dalla RAM
|
||||
• Crash all'avvio quando manca la connessione internet
|
||||
• Gesto per luminosità e volume
|
||||
• [YouTube] Sistemate le playlist lunghe
|
||||
|
||||
Altro:
|
||||
- Pulizia generale del codice
|
||||
- Aggiornamento delle dipendenze
|
||||
- Aggiornamento delle traduzioni
|
||||
• Pulizia e miglioramenti del codice
|
||||
• Dipendenze aggiornate
|
||||
• Traduzioni aggiornate
|
||||
|
||||
3
fastlane/metadata/android/it/changelogs/959.txt
Normal file
3
fastlane/metadata/android/it/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
• Sistemato un loop infinito di crash dopo l'apertura della pagina di segnalazione degli errori.
|
||||
• Aggiornata la lista di istanze di PeerTube che possono essere aperte in automatico da parte di NewPipe.
|
||||
• Le traduzioni sono state aggiornate.
|
||||
@@ -1 +1 @@
|
||||
Android のフリーで軽量な YouTube フロントエンドアプリ。
|
||||
Androidのフリーで軽量なYouTubeアプリ。
|
||||
|
||||
3
fastlane/metadata/android/nb-NO/changelogs/959.txt
Normal file
3
fastlane/metadata/android/nb-NO/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Fikset uendelig kræsjløkke ved åpning av feilrapportering.
|
||||
Oppdatert liste over PeerTube-isntanser som kan åpnes automatisk av NewPipe.
|
||||
Oppdaterte oversettelser.
|
||||
13
fastlane/metadata/android/pl/changelogs/958.txt
Normal file
13
fastlane/metadata/android/pl/changelogs/958.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Nowości i ulepszenia:
|
||||
• Dodano ponownie opcję ukrycia miniaturki filmu z ekranu blokady
|
||||
• Naciśnij, aby odświeżyć kanał "Co nowego"
|
||||
• Ulepszono wydajność podczas pobierania list lokalnych
|
||||
|
||||
Naprawiono:
|
||||
• Naprawiono awarię podczas uruchamiania NewPipe po usunięciu go z pamięci RAM
|
||||
• Naprawiono awarię podczas uruchamiania, gdy nie ma połączenia z Internetem
|
||||
|
||||
Pozostałe:
|
||||
• Porządki i kilka wewnętrznych ulepszeń w kodzie programu
|
||||
• Aktualizacje zależności i tłumaczeń
|
||||
i wiele innych
|
||||
3
fastlane/metadata/android/pl/changelogs/959.txt
Normal file
3
fastlane/metadata/android/pl/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Naprawiono niekończącą się pętlę awarii po otwarciu raportu o błędach.
|
||||
Zaktualizowana lista instancji PeerTube, które mogą być otwierane automatycznie przez NewPipe.
|
||||
Zaktualizowano tłumaczenia.
|
||||
@@ -1,4 +1,4 @@
|
||||
Esta versão traz três pequenas correções:
|
||||
- Acesso de armazenamento no Adroid 10+ corrigido
|
||||
- Quiosques de abertura corrigidos
|
||||
- Análise de duração vídeos longos corrigida
|
||||
Este lançamento traz três pequenas correções:
|
||||
- Acesso de armazenamento no Android 10+ corrigido
|
||||
- Quiosques de abertura corrigido
|
||||
- Análise de duração vídeos longos corrigido
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
Novo
|
||||
Pesquisa p/ subscrição no feed de grupo
|
||||
Filtro no feed de grupo p/ apenas subscrições isoladas
|
||||
Lista de reprod. na pg principal
|
||||
Avanço/recuo rapido no reprod. de pano de fundo e pop-up
|
||||
Sugestão de pesquisa: quis dizer...
|
||||
• Pesquisa de selecionador de assinaturas
|
||||
• Filtro ao diálogo do grupo de feed
|
||||
• Ficha de lista de reprodução à página principal
|
||||
• Avanço/retrocesso rápido na fila de fundo/pop-up de jogadores
|
||||
• Mostrar sugestão de pesquisa: quis dizer & a mostrar resultado para
|
||||
|
||||
Melhorado
|
||||
Solte a app de escrita de metadados nos arquivos multiplexados
|
||||
N/ remover da lista transmissões c/ erro
|
||||
Barra de estado e ferramentas: cores correspondentes
|
||||
• Não escrever metadados de apps em ficheiros muxed
|
||||
• Não remover fluxos falhados da fila
|
||||
• A cor da barra de estado corresponde à da de ferramentas
|
||||
|
||||
Corrigido
|
||||
Dessinc A/V por erros cumulativos de pt flutuante
|
||||
[PeerTube] Gestão de comentários apagados
|
||||
...
|
||||
Fixo
|
||||
• Desync de áudio/vídeo
|
||||
• [PeerTube] Gerir comentários apagados
|
||||
|
||||
15
fastlane/metadata/android/pt/changelogs/958.txt
Normal file
15
fastlane/metadata/android/pt/changelogs/958.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
Novo e melhorado:
|
||||
- Opção reajustada para esconder a miniatura na tela de bloqueio
|
||||
- Puxar para atualizar o feed
|
||||
- Melhor desempenho na busca de listas locais
|
||||
|
||||
Corrigido:
|
||||
- Falha ao iniciar o NewPipe depois de ter sido removido da RAM
|
||||
- Falha na inicialização quando não há conexão à Internet
|
||||
- Respeitando as configurações de luminosidade e de volume
|
||||
- Listas de reprodução longas
|
||||
|
||||
Outros:
|
||||
- Limpeza de códigos e várias melhorias internas
|
||||
- Atualizações de dependências
|
||||
- Atualizações de tradução
|
||||
3
fastlane/metadata/android/pt/changelogs/959.txt
Normal file
3
fastlane/metadata/android/pt/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
O loop infinito de falhas corrigido após a abertura do repórter de erro.
|
||||
Lista atualizada de instâncias do PeerTube que podem ser abertas automaticamente pelo NewPipe.
|
||||
Traduções atualizadas.
|
||||
3
fastlane/metadata/android/pt_BR/changelogs/959.txt
Normal file
3
fastlane/metadata/android/pt_BR/changelogs/959.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Corrigimos um loop interminável de crash depois de abrir o reportar erro.
|
||||
Atualizado lista de instâncias do PeerTube que podem ser abertas automaticamente pelo NewPipe.
|
||||
Traduções atualizadas.
|
||||
16
fastlane/metadata/android/pt_PT/changelogs/940.txt
Normal file
16
fastlane/metadata/android/pt_PT/changelogs/940.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Novo
|
||||
• Suporte para comentários SoundCloud
|
||||
• Modo restrito - YouTub
|
||||
• Mostrar detalhes do canal interligado - PeerTube
|
||||
|
||||
Melhorado
|
||||
• Mostar botão Kore apenas nos serviços suportados
|
||||
• Bloquear gestos que começam nas barras de navegção ou estado
|
||||
• Cor de fundo dos botões Tentar e Subscrever baseada na cor do serviço
|
||||
|
||||
Corrigido
|
||||
• Bloqueio da evolução de transferência
|
||||
• Botão abrir browser
|
||||
• Erro ao abri videos "não é possível reproduzir..."
|
||||
|
||||
e outros
|
||||
@@ -1,4 +1,4 @@
|
||||
Este lançamento traz três pequenas correções:
|
||||
- Acesso de armazenamento no Adroid 10+ corrigido
|
||||
- Acesso de armazenamento no Android 10+ corrigido
|
||||
- Quiosques de abertura corrigido
|
||||
- Análise de duração vídeos longos corrigido
|
||||
|
||||
15
fastlane/metadata/android/pt_PT/changelogs/951.txt
Normal file
15
fastlane/metadata/android/pt_PT/changelogs/951.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
Novo
|
||||
• Pesquisa de selecionador de assinaturas
|
||||
• Filtro ao diálogo do grupo de feed
|
||||
• Ficha de lista de reprodução à página principal
|
||||
• Avanço/retrocesso rápido na fila de fundo/pop-up de jogadores
|
||||
• Mostrar sugestão de pesquisa: quis dizer & a mostrar resultado para
|
||||
|
||||
Melhorado
|
||||
• Não escrever metadados de apps em ficheiros muxed
|
||||
• Não remover fluxos falhados da fila
|
||||
• A cor da barra de estado corresponde à da de ferramentas
|
||||
|
||||
Fixo
|
||||
• Desync de áudio/vídeo
|
||||
• [PeerTube] Gerir comentários apagados
|
||||
10
fastlane/metadata/android/pt_PT/changelogs/957.txt
Normal file
10
fastlane/metadata/android/pt_PT/changelogs/957.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
- Unir ações específicas de inquérito em uma
|
||||
- Gesto de dois dedos para fechar o jogador
|
||||
- Permitir a limpeza de cookies reCAPTCHA
|
||||
- Opção de não colorir a notificação
|
||||
- Melhorar como os detalhes do vídeo são abertos para não por no buffer infinitamente
|
||||
- Acelerar os vídeos do YouTube e corrigir os de idade restrita
|
||||
- Reparação de colisão em avanço/retrocesso rápido
|
||||
- Não reordenar as listas a arrastar as miniaturas
|
||||
- Lembrar sempre das propriedades popup
|
||||
- Acrescentar a língua Santali
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user