mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2026-01-15 14:08:02 +00:00
Compare commits
227 Commits
v0.13.0-be
...
v0.13.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d427b4cc4 | ||
|
|
6c7e54868d | ||
|
|
9484a5e2ee | ||
|
|
3cbd2057e3 | ||
|
|
71ff1cf713 | ||
|
|
c737d891bc | ||
|
|
82a53343fc | ||
|
|
03fdc60018 | ||
|
|
42d19d98ad | ||
|
|
c9915bba18 | ||
|
|
a275d7ff50 | ||
|
|
74199c8624 | ||
|
|
238bff1fee | ||
|
|
de534b58c5 | ||
|
|
111a0f9f17 | ||
|
|
50392ed67d | ||
|
|
3de9da0528 | ||
|
|
ece93cadd5 | ||
|
|
7219c8d33c | ||
|
|
b0a09c7876 | ||
|
|
1d017d3cbc | ||
|
|
5fa56f2aca | ||
|
|
5ded1b139f | ||
|
|
2abb0db272 | ||
|
|
674c041c13 | ||
|
|
03c89a69a2 | ||
|
|
dbed5e2a62 | ||
|
|
d7519903a1 | ||
|
|
ab14f0d7ac | ||
|
|
3b6e43b7ca | ||
|
|
7d3b7af874 | ||
|
|
2acc348062 | ||
|
|
33ba8acd05 | ||
|
|
0c56af7090 | ||
|
|
4375ecaad7 | ||
|
|
90c538d4b6 | ||
|
|
1ffa8329d0 | ||
|
|
b404b7974a | ||
|
|
de44b580f9 | ||
|
|
2a630cd745 | ||
|
|
1ccccc5e39 | ||
|
|
aec851acfa | ||
|
|
ad5ac479fd | ||
|
|
67b82a404c | ||
|
|
f7f86a2f62 | ||
|
|
6e42b4af27 | ||
|
|
fe9ed8af76 | ||
|
|
c4c3f369c0 | ||
|
|
9b9bf40e47 | ||
|
|
14a888a610 | ||
|
|
f3d777c65c | ||
|
|
d494b6c934 | ||
|
|
7294220727 | ||
|
|
665b9087b1 | ||
|
|
f1691050cd | ||
|
|
169b6acd24 | ||
|
|
35b3bf2edb | ||
|
|
8f73c8c98b | ||
|
|
94ea8c21eb | ||
| b6a19c3e2d | |||
|
|
21455d58a6 | ||
|
|
239e9bd3db | ||
|
|
0832171a2b | ||
|
|
1edfcc629c | ||
|
|
9a2a8698ef | ||
|
|
54c31422d9 | ||
|
|
a33464284c | ||
|
|
4842caf426 | ||
|
|
02b6b4d8eb | ||
|
|
4b0d7c7d88 | ||
|
|
559b53acc3 | ||
|
|
4233c18dbb | ||
|
|
adec2c9fcc | ||
|
|
6ad2406262 | ||
|
|
bfeb8ca104 | ||
|
|
5614edfa2f | ||
|
|
946f7b2305 | ||
|
|
dfcf435f88 | ||
|
|
0e734c267c | ||
|
|
faadcec4d1 | ||
|
|
eb81784818 | ||
|
|
327010f76b | ||
|
|
371669dcb6 | ||
|
|
fb702b93ca | ||
|
|
50c8453785 | ||
|
|
14fb5ee6c4 | ||
|
|
46c2343ec6 | ||
|
|
f5c226362f | ||
|
|
9114c1157d | ||
|
|
a4f4230275 | ||
|
|
46a6147c08 | ||
|
|
0d26923d79 | ||
|
|
b57c93cf03 | ||
|
|
ec19e4bc8f | ||
|
|
cb68a9c2ce | ||
|
|
b51ded1580 | ||
|
|
4b6fb5bfeb | ||
|
|
9b8175b5be | ||
|
|
3ecfc622e2 | ||
|
|
d8d2ee4e09 | ||
|
|
be478cb088 | ||
|
|
c187b4487f | ||
|
|
f6d21e74cb | ||
|
|
bde4c4bd25 | ||
|
|
d9aaceea95 | ||
|
|
676d64a24a | ||
|
|
8ae1768f71 | ||
| 212705e7e3 | |||
|
|
b3f6524e5c | ||
|
|
5ca0a0adf2 | ||
|
|
669d2c44c9 | ||
|
|
604bc5b4c1 | ||
|
|
88268ae569 | ||
|
|
140fb86401 | ||
|
|
2b281c4357 | ||
|
|
7b6dbfb456 | ||
|
|
b3c49ac86b | ||
|
|
d309fd9c97 | ||
|
|
f3a280dcb6 | ||
|
|
43894687a2 | ||
|
|
8dd8928dab | ||
|
|
282a4d15c2 | ||
|
|
83a2ffc67e | ||
|
|
e9a6e3fae0 | ||
|
|
97944b9793 | ||
|
|
0b5d995b6d | ||
|
|
1781a9fe9a | ||
|
|
a0479bf7ca | ||
|
|
2affa31edf | ||
|
|
0bd040a851 | ||
|
|
616c6a1607 | ||
| a5176fbf80 | |||
|
|
f2b76b7582 | ||
|
|
f4847f31ae | ||
|
|
05adcf2c12 | ||
|
|
ea301be3c1 | ||
|
|
88e9785b01 | ||
|
|
78efabfc1c | ||
|
|
9d3e22200c | ||
|
|
183f9701fd | ||
|
|
ebbba134fe | ||
|
|
c257be8176 | ||
|
|
afb0aea660 | ||
|
|
960bf46f44 | ||
|
|
16db799e88 | ||
|
|
f8f2cdcfcc | ||
|
|
a1f7862f96 | ||
|
|
3ff9284f2a | ||
|
|
edf8f27c0f | ||
|
|
a720953ff3 | ||
|
|
f79dd26a82 | ||
|
|
36b5fce4dd | ||
|
|
89537322fd | ||
|
|
2229ce1fe9 | ||
|
|
f257b2177a | ||
|
|
056c1fd43e | ||
|
|
acacd3134f | ||
|
|
1fe0ba1a6e | ||
|
|
e639f4b5de | ||
|
|
5a234bd989 | ||
|
|
661227266e | ||
|
|
e01556fd9a | ||
|
|
5cb53ffc18 | ||
|
|
e7178626ab | ||
|
|
7f0948b0ed | ||
|
|
4baee67781 | ||
|
|
7061f38abe | ||
|
|
2aa259c0b2 | ||
|
|
a0f74e715a | ||
|
|
c13e761c3f | ||
|
|
2837e44bab | ||
|
|
d41e3bb41e | ||
|
|
4160bbb8c4 | ||
|
|
404a20f280 | ||
|
|
2241146b9f | ||
|
|
bcb26c5721 | ||
|
|
a681d8c1ba | ||
|
|
0515b74f75 | ||
|
|
7eeb96d88e | ||
|
|
5b6c73ef06 | ||
|
|
c70b866d16 | ||
|
|
b84f2874dc | ||
|
|
c372b5529b | ||
|
|
a43156c38d | ||
|
|
a15112febc | ||
|
|
1c6a677a39 | ||
|
|
9bf749a2c8 | ||
|
|
f6c9d9df20 | ||
|
|
5386e0ded9 | ||
|
|
8fab405a3a | ||
|
|
ee409f3ca9 | ||
|
|
bda9beacaa | ||
|
|
5d8c7e5733 | ||
|
|
a68c763125 | ||
|
|
31ac89d9d6 | ||
|
|
8b258cbbe4 | ||
|
|
53676fc0fd | ||
|
|
42c561af9e | ||
|
|
fae777c14c | ||
|
|
1af6dc614a | ||
|
|
2986004638 | ||
|
|
d6f7b4706b | ||
|
|
b40dd3e5c0 | ||
|
|
2f4097ca9d | ||
|
|
c8a91fbb25 | ||
|
|
0ec259a5fc | ||
|
|
2fda99bdb7 | ||
|
|
1bb4ac4e9c | ||
|
|
f376b98c09 | ||
|
|
7382fdb2d2 | ||
|
|
aead9592cf | ||
|
|
bedacf29d9 | ||
| 570e9a8307 | |||
|
|
fcb94ec603 | ||
| 69886ed58b | |||
|
|
798235cd21 | ||
|
|
b38b6b6f35 | ||
|
|
2dba13c52e | ||
|
|
ff366cb2c5 | ||
|
|
a87861a993 | ||
|
|
65476356c9 | ||
|
|
8af6667f3e | ||
|
|
b546df7b95 | ||
|
|
20c1f12da8 | ||
|
|
e65ff201af | ||
|
|
4f367a3dcd | ||
|
|
d7093bce4d |
1
.github/CONTRIBUTING.md
vendored
1
.github/CONTRIBUTING.md
vendored
@@ -11,6 +11,7 @@ Do not report crashes in the GitHub issue tracker. NewPipe has an automated cras
|
||||
|
||||
* 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/implement an issue/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.
|
||||
|
||||
@@ -5,7 +5,7 @@ android:
|
||||
components:
|
||||
# The BuildTools version used by NewPipe
|
||||
- tools
|
||||
- build-tools-27.0.1
|
||||
- build-tools-27.0.3
|
||||
|
||||
# The SDK version used to compile NewPipe
|
||||
- android-27
|
||||
|
||||
Binary file not shown.
@@ -1,170 +0,0 @@
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.regex.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
public final class CheckTranslations {
|
||||
|
||||
private static boolean debug = false;
|
||||
private static boolean plurals = false;
|
||||
private static boolean empty = false;
|
||||
private static boolean remove = false;
|
||||
private static int checks = 0;
|
||||
private static int matches = 0;
|
||||
private static int changes = 0;
|
||||
private static Pattern p, pb, pe, e, o;
|
||||
|
||||
/**
|
||||
* Search translated strings.xml files for empty item / plural tags
|
||||
* and remove them.
|
||||
* @param args directories which contain string.xml files (in any subdirectory)
|
||||
* -e option to find all empty string tags
|
||||
* -p option to find all empty plurals and item tags
|
||||
* -r option to remove all occurrences from the files
|
||||
* -d option to see more details
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if (args.length < 1 || (args[0].equals("-d") && args.length < 2)) {
|
||||
System.out.println("Not enough arguments");
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
switch (args[i]) {
|
||||
case "-d":
|
||||
debug = true;
|
||||
break;
|
||||
case "-p":
|
||||
plurals = true;
|
||||
break;
|
||||
case "-e":
|
||||
empty = true;
|
||||
break;
|
||||
case "-r":
|
||||
remove = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!plurals && !empty) {
|
||||
plurals = true;
|
||||
empty = true;
|
||||
}
|
||||
|
||||
p = Pattern.compile("(<item quantity=\")(zero|one|two|three|few|many|other)(\"></item>|\"/>)");
|
||||
pb = Pattern.compile("(<plurals[\\sa-zA-Z=\"]*>)");
|
||||
pe = Pattern.compile("(</plurals>)");
|
||||
e = Pattern.compile("(<string[\\sa-z_\\\"=]*)((><\\/string>|\\/>){1})");
|
||||
o = Pattern.compile("(<item quantity=\"other\">)[^</>]*(<\\/item>)");
|
||||
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
if (!args[i].equals("-d") && !args[i].equals("-p") && !args[i].equals("-e") && !args[i].equals("-r")) {
|
||||
File f = new File(args[i]);
|
||||
if (f.exists() && !f.isDirectory()) {
|
||||
checkFile(f);
|
||||
} else if (f.isDirectory()) {
|
||||
checkFiles(f.listFiles());
|
||||
} else {
|
||||
System.out.println("'" + args[i] + "' does not exist!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println(checks + " files were checked.");
|
||||
System.out.println(matches + " corrupt lines detected.");
|
||||
if (remove) {
|
||||
System.out.println(matches + " corrupt lines removed and " + changes + " lines fixed.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void checkFiles(File[] f) {
|
||||
for (int i = 0; i < f.length; i++) {
|
||||
if (f[i].exists() && !f[i].isDirectory()) {
|
||||
if (f[i].toString().contains("strings.xml")) {
|
||||
checkFile(f[i]);
|
||||
}
|
||||
} else if (f[i].isDirectory()) {
|
||||
checkFiles(f[i].listFiles());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkFile(File f) {
|
||||
// Do not check our original English strings to cause no unwanted changes
|
||||
// Btw. there should not be empty plural/item tags
|
||||
if (f.toString().contains("values/strings.xml")) {
|
||||
return;
|
||||
}
|
||||
if (debug) System.out.println("Checking " + f.toString());
|
||||
checks++;
|
||||
|
||||
|
||||
List<String> lines = new ArrayList<String>();
|
||||
boolean checkFailed = false;
|
||||
boolean otherDetected = false;
|
||||
boolean inPlurals = false;
|
||||
try (BufferedReader br = new BufferedReader(new FileReader(f))) {
|
||||
String line;
|
||||
int ln = 0;
|
||||
while ((line = br.readLine()) != null) {
|
||||
ln++;
|
||||
if (plurals && p.matcher(line).find()) {
|
||||
matches++;
|
||||
if (debug) System.out.println(" Line " + ln + " was " + ((remove) ? "removed" : "detected") + ": '" + line + "'");
|
||||
checkFailed = true;
|
||||
} else if (empty && e.matcher(line).find()) {
|
||||
matches++;
|
||||
checkFailed = true;
|
||||
if (debug) System.out.println(" Line " + ln + " was " + ((remove) ? "removed" : "detected") + ": '" + line + "'");
|
||||
} else {
|
||||
if (remove) lines.add(line);
|
||||
}
|
||||
}
|
||||
br.close();
|
||||
int pluralsLine = 0;
|
||||
for (int i = 0; i < lines.size(); i++) {
|
||||
if (o.matcher(lines.get(i)).find()) {
|
||||
otherDetected = true;
|
||||
}
|
||||
if (plurals && pb.matcher(lines.get(i)).find()) {
|
||||
inPlurals = true;
|
||||
pluralsLine = i;
|
||||
} else if (plurals && pe.matcher(lines.get(i)).find()) {
|
||||
inPlurals = false;
|
||||
if (!otherDetected) {
|
||||
boolean b = false;
|
||||
check: for(int j = pluralsLine; j < i; j++) {
|
||||
if (lines.get(j).contains("many")) {
|
||||
b = true;
|
||||
pluralsLine = j;
|
||||
break check;
|
||||
}
|
||||
}
|
||||
if (remove && b) {
|
||||
if (debug) System.out.println(" Line " + (pluralsLine + 1) + " was " + ((remove) ? "changed" : "detected") + ": '" + lines.get(pluralsLine) + "'");
|
||||
lines.set(pluralsLine, lines.get(pluralsLine).replace("many", "other"));
|
||||
changes++;
|
||||
checkFailed = true;
|
||||
} else if (debug) {
|
||||
if (debug) System.out.println(" WARNING: Line " + (i + 1) + " - No <item quantity=\"other\"> found!");
|
||||
}
|
||||
}
|
||||
otherDetected = false;
|
||||
}
|
||||
|
||||
}
|
||||
if (remove && checkFailed) {
|
||||
Files.write(f.toPath(), lines, Charset.forName("UTF-8"));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.out.println(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ If you like NewPipe we'd be happy about a donation. You can either donate via Bi
|
||||
<tr>
|
||||
<td><a href="https://liberapay.com/TeamNewPipe/"><img src="https://upload.wikimedia.org/wikipedia/commons/2/27/Liberapay_logo_v2_white-on-yellow.svg" alt="Liberapay" width="80px" /></a></td>
|
||||
<td><a href="https://liberapay.com/TeamNewPipe/"><img src="assets/liberapay_qr_code.png" alt="Visit NewPipe at liberapay.com" width="100px"/></a></td>
|
||||
<td><a href="https://liberapay.com/TeamNewPipe/donate/"><img src="assets/liberapay_donate_button.svg" alt="Donate via Liberapay" height="35px" /></a></td>
|
||||
<td><a href="https://liberapay.com/TeamNewPipe/donate"><img src="assets/liberapay_donate_button.svg" alt="Donate via Liberapay" height="35px" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://www.bountysource.com/teams/newpipe"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Bountysource.png/320px-Bountysource.png" alt="Bountysource" width="190px" /></a></td>
|
||||
|
||||
@@ -2,14 +2,14 @@ apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 27
|
||||
buildToolsVersion '27.0.1'
|
||||
buildToolsVersion '27.0.3'
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.schabi.newpipe"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 27
|
||||
versionCode 49
|
||||
versionName "0.13.0"
|
||||
versionCode 61
|
||||
versionName "0.13.2"
|
||||
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
@@ -26,13 +26,6 @@ android {
|
||||
debuggable true
|
||||
applicationIdSuffix ".debug"
|
||||
}
|
||||
beta {
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
|
||||
applicationIdSuffix ".beta"
|
||||
}
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
@@ -49,7 +42,7 @@ android {
|
||||
|
||||
ext {
|
||||
supportLibVersion = '27.1.0'
|
||||
exoPlayerLibVersion = '2.7.1'
|
||||
exoPlayerLibVersion = '2.7.3'
|
||||
roomDbLibVersion = '1.0.0'
|
||||
leakCanaryLibVersion = '1.5.4'
|
||||
okHttpLibVersion = '1.5.0'
|
||||
@@ -61,7 +54,8 @@ dependencies {
|
||||
exclude module: 'support-annotations'
|
||||
}
|
||||
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:f787b375e5fb6d'
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:77a74b8'
|
||||
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.mockito:mockito-core:1.10.19'
|
||||
@@ -79,6 +73,7 @@ dependencies {
|
||||
implementation 'de.hdodenhof:circleimageview:2.2.0'
|
||||
implementation 'com.github.nirhart:ParallaxScroll:dd53d1f9d1'
|
||||
implementation 'com.nononsenseapps:filepicker:4.2.1'
|
||||
|
||||
implementation "com.google.android.exoplayer:exoplayer:$exoPlayerLibVersion"
|
||||
implementation "com.google.android.exoplayer:extension-mediasession:$exoPlayerLibVersion"
|
||||
|
||||
@@ -98,7 +93,6 @@ dependencies {
|
||||
annotationProcessor "frankiesardo:icepick-processor:$icepickLibVersion"
|
||||
|
||||
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryLibVersion"
|
||||
betaImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryLibVersion"
|
||||
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryLibVersion"
|
||||
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:label="NewPipe Beta"
|
||||
tools:replace="android:label">
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB |
@@ -42,7 +42,11 @@
|
||||
|
||||
<service
|
||||
android:name=".player.BackgroundPlayer"
|
||||
android:exported="false"/>
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<activity
|
||||
android:name=".player.BackgroundPlayerActivity"
|
||||
@@ -132,7 +136,7 @@
|
||||
<activity
|
||||
android:name=".RouterActivity"
|
||||
android:excludeFromRecents="true"
|
||||
android:label="@string/preferred_player_share_menu_title"
|
||||
android:label="@string/preferred_open_action_share_menu_title"
|
||||
android:taskAffinity=""
|
||||
android:theme="@style/RouterActivityThemeDark">
|
||||
|
||||
|
||||
@@ -73,6 +73,31 @@ public class Downloader implements org.schabi.newpipe.extractor.Downloader {
|
||||
mCookies = cookies;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the size of the content that the url is pointing by firing a HEAD request.
|
||||
*
|
||||
* @param url an url pointing to the content
|
||||
* @return the size of the content, in bytes
|
||||
*/
|
||||
public long getContentLength(String url) throws IOException {
|
||||
Response response = null;
|
||||
try {
|
||||
final Request request = new Request.Builder()
|
||||
.head().url(url)
|
||||
.addHeader("User-Agent", USER_AGENT)
|
||||
.build();
|
||||
response = client.newCall(request).execute();
|
||||
|
||||
return Long.parseLong(response.header("Content-Length"));
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IOException("Invalid content length", e);
|
||||
} finally {
|
||||
if (response != null) {
|
||||
response.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the text file at the supplied URL as in download(String),
|
||||
* but set the HTTP header field "Accept-Language" to the supplied string.
|
||||
|
||||
@@ -22,11 +22,13 @@ package org.schabi.newpipe;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.NavigationView;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.view.GravityCompat;
|
||||
@@ -44,7 +46,6 @@ import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.StreamingService;
|
||||
@@ -55,6 +56,7 @@ import org.schabi.newpipe.fragments.list.search.SearchFragment;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.util.Constants;
|
||||
import org.schabi.newpipe.util.NavigationHelper;
|
||||
import org.schabi.newpipe.util.PermissionHelper;
|
||||
import org.schabi.newpipe.util.ServiceHelper;
|
||||
import org.schabi.newpipe.util.StateSaver;
|
||||
import org.schabi.newpipe.util.ThemeHelper;
|
||||
@@ -94,44 +96,47 @@ public class MainActivity extends AppCompatActivity {
|
||||
drawer = findViewById(R.id.drawer_layout);
|
||||
drawerItems = findViewById(R.id.navigation);
|
||||
|
||||
//drawerItems.setItemIconTintList(null); // Set null to use the original icon
|
||||
for(StreamingService s : NewPipe.getServices()) {
|
||||
final String title = s.getServiceInfo().getName() +
|
||||
(ServiceHelper.isBeta(s) ? " (beta)" : "");
|
||||
final MenuItem item = drawerItems.getMenu()
|
||||
.add(R.id.menu_services_group, s.getServiceId(), 0, title);
|
||||
item.setIcon(ServiceHelper.getIcon(s.getServiceId()));
|
||||
}
|
||||
|
||||
drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(true);
|
||||
|
||||
if (!BuildConfig.BUILD_TYPE.equals("release")) {
|
||||
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
|
||||
toggle.syncState();
|
||||
drawer.addDrawerListener(toggle);
|
||||
drawer.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
|
||||
private int lastService;
|
||||
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
|
||||
toggle.syncState();
|
||||
drawer.addDrawerListener(toggle);
|
||||
drawer.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
|
||||
private int lastService;
|
||||
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
lastService = ServiceHelper.getSelectedServiceId(MainActivity.this);
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
lastService = ServiceHelper.getSelectedServiceId(MainActivity.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerClosed(View drawerView) {
|
||||
if (lastService != ServiceHelper.getSelectedServiceId(MainActivity.this)) {
|
||||
new Handler(Looper.getMainLooper()).post(MainActivity.this::recreate);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@Override
|
||||
public void onDrawerClosed(View drawerView) {
|
||||
if (lastService != ServiceHelper.getSelectedServiceId(MainActivity.this)) {
|
||||
new Handler(Looper.getMainLooper()).post(MainActivity.this::recreate);
|
||||
}
|
||||
}
|
||||
});
|
||||
drawerItems.setNavigationItemSelectedListener(this::changeService);
|
||||
|
||||
drawerItems.setNavigationItemSelectedListener(this::changeService);
|
||||
|
||||
setupDrawerFooter();
|
||||
setupDrawerHeader();
|
||||
} else {
|
||||
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
|
||||
}
|
||||
setupDrawerFooter();
|
||||
setupDrawerHeader();
|
||||
}
|
||||
|
||||
|
||||
private boolean changeService(MenuItem item) {
|
||||
if (item.getGroupId() == R.id.menu_services_group) {
|
||||
drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(false);
|
||||
ServiceHelper.setSelectedServiceId(this, item.getTitle().toString());
|
||||
ServiceHelper.setSelectedServiceId(this, item.getItemId());
|
||||
drawerItems.getMenu().getItem(ServiceHelper.getSelectedServiceId(this)).setChecked(true);
|
||||
headerServiceView.setText("gurken");
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -176,11 +181,9 @@ public class MainActivity extends AppCompatActivity {
|
||||
// when the user returns to MainActivity
|
||||
drawer.closeDrawer(Gravity.START, false);
|
||||
try {
|
||||
if(BuildConfig.BUILD_TYPE != "release" ) {
|
||||
String selectedServiceName = NewPipe.getService(
|
||||
ServiceHelper.getSelectedServiceId(this)).getServiceInfo().getName();
|
||||
headerServiceView.setText(selectedServiceName);
|
||||
}
|
||||
String selectedServiceName = NewPipe.getService(
|
||||
ServiceHelper.getSelectedServiceId(this)).getServiceInfo().getName();
|
||||
headerServiceView.setText(selectedServiceName);
|
||||
} catch (Exception e) {
|
||||
ErrorActivity.reportUiError(this, e);
|
||||
}
|
||||
@@ -232,6 +235,26 @@ public class MainActivity extends AppCompatActivity {
|
||||
} else super.onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
for (int i: grantResults){
|
||||
if (i == PackageManager.PERMISSION_DENIED){
|
||||
return;
|
||||
}
|
||||
}
|
||||
switch (requestCode) {
|
||||
case PermissionHelper.DOWNLOADS_REQUEST_CODE:
|
||||
NavigationHelper.openDownloads(this);
|
||||
break;
|
||||
case PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE:
|
||||
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder);
|
||||
if (fragment instanceof VideoDetailFragment) {
|
||||
((VideoDetailFragment) fragment).openDownloadDialog();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement the following diagram behavior for the up button:
|
||||
* <pre>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.schabi.newpipe;
|
||||
|
||||
import android.app.IntentService;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
@@ -24,7 +25,6 @@ import android.widget.Toast;
|
||||
|
||||
import org.schabi.newpipe.extractor.Info;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.ServiceList;
|
||||
import org.schabi.newpipe.extractor.StreamingService;
|
||||
import org.schabi.newpipe.extractor.StreamingService.LinkType;
|
||||
import org.schabi.newpipe.extractor.channel.ChannelInfo;
|
||||
@@ -43,9 +43,11 @@ import org.schabi.newpipe.util.PermissionHelper;
|
||||
import org.schabi.newpipe.util.ThemeHelper;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import icepick.Icepick;
|
||||
import icepick.State;
|
||||
@@ -57,6 +59,7 @@ import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.functions.Consumer;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
import static org.schabi.newpipe.extractor.StreamingService.ServiceInfo.MediaCapability.*;
|
||||
import static org.schabi.newpipe.util.ThemeHelper.resolveResourceIdFromAttr;
|
||||
|
||||
/**
|
||||
@@ -122,7 +125,7 @@ public class RouterActivity extends AppCompatActivity {
|
||||
currentService = NewPipe.getServiceByUrl(url);
|
||||
currentServiceId = currentService.getServiceId();
|
||||
currentLinkType = currentService.getLinkTypeByUrl(url);
|
||||
currentUrl = NavigationHelper.getCleanUrl(currentService, url, currentLinkType);
|
||||
currentUrl = url;
|
||||
} else {
|
||||
currentService = NewPipe.getService(currentServiceId);
|
||||
}
|
||||
@@ -168,18 +171,23 @@ public class RouterActivity extends AppCompatActivity {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Add some sort of "capabilities" field to services (audio only, video and audio, etc.)
|
||||
if (currentService == ServiceList.SoundCloud) {
|
||||
handleChoice(getString(R.string.background_player_key));
|
||||
return;
|
||||
}
|
||||
final String playerChoiceKey = preferences.getString(getString(R.string.preferred_open_action_key), getString(R.string.preferred_open_action_default));
|
||||
|
||||
final String playerChoiceKey = preferences.getString(
|
||||
getString(R.string.preferred_open_action_key),
|
||||
getString(R.string.preferred_open_action_default));
|
||||
final String videoPlayerKey = getString(R.string.video_player_key);
|
||||
final String backgroundPlayerKey = getString(R.string.background_player_key);
|
||||
final String popupPlayerKey = getString(R.string.popup_player_key);
|
||||
final String alwaysAskKey = getString(R.string.always_ask_open_action_key);
|
||||
|
||||
if (playerChoiceKey.equals(alwaysAskKey)) {
|
||||
final List<StreamingService.ServiceInfo.MediaCapability> capabilities = currentService.getServiceInfo().getMediaCapabilities();
|
||||
|
||||
boolean serviceSupportsPlayer = false;
|
||||
if (playerChoiceKey.equals(videoPlayerKey) || playerChoiceKey.equals(popupPlayerKey)) {
|
||||
serviceSupportsPlayer = capabilities.contains(VIDEO);
|
||||
} else if (playerChoiceKey.equals(backgroundPlayerKey)) {
|
||||
serviceSupportsPlayer = capabilities.contains(AUDIO);
|
||||
}
|
||||
|
||||
if (playerChoiceKey.equals(alwaysAskKey) || !serviceSupportsPlayer) {
|
||||
showDialog();
|
||||
} else {
|
||||
handleChoice(playerChoiceKey);
|
||||
@@ -187,29 +195,20 @@ public class RouterActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
private void showDialog() {
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
final ContextThemeWrapper themeWrapper = new ContextThemeWrapper(this,
|
||||
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
final ContextThemeWrapper themeWrapperContext = new ContextThemeWrapper(this,
|
||||
ThemeHelper.isLightThemeSelected(this) ? R.style.LightTheme : R.style.DarkTheme);
|
||||
|
||||
LayoutInflater inflater = LayoutInflater.from(themeWrapper);
|
||||
final LayoutInflater inflater = LayoutInflater.from(themeWrapperContext);
|
||||
final LinearLayout rootLayout = (LinearLayout) inflater.inflate(R.layout.preferred_player_dialog_view, null, false);
|
||||
final RadioGroup radioGroup = rootLayout.findViewById(android.R.id.list);
|
||||
|
||||
final AdapterChoiceItem[] choices = {
|
||||
new AdapterChoiceItem(getString(R.string.show_info_key), getString(R.string.show_info),
|
||||
resolveResourceIdFromAttr(themeWrapper, R.attr.info)),
|
||||
new AdapterChoiceItem(getString(R.string.video_player_key), getString(R.string.video_player),
|
||||
resolveResourceIdFromAttr(themeWrapper, R.attr.play)),
|
||||
new AdapterChoiceItem(getString(R.string.background_player_key), getString(R.string.background_player),
|
||||
resolveResourceIdFromAttr(themeWrapper, R.attr.audio)),
|
||||
new AdapterChoiceItem(getString(R.string.popup_player_key), getString(R.string.popup_player),
|
||||
resolveResourceIdFromAttr(themeWrapper, R.attr.popup))
|
||||
};
|
||||
final List<AdapterChoiceItem> choices = getChoicesForService(themeWrapperContext, currentService);
|
||||
|
||||
final DialogInterface.OnClickListener dialogButtonsClickListener = (dialog, which) -> {
|
||||
final int indexOfChild = radioGroup.indexOfChild(
|
||||
radioGroup.findViewById(radioGroup.getCheckedRadioButtonId()));
|
||||
final AdapterChoiceItem choice = choices[indexOfChild];
|
||||
final AdapterChoiceItem choice = choices.get(indexOfChild);
|
||||
|
||||
handleChoice(choice.key);
|
||||
|
||||
@@ -218,8 +217,8 @@ public class RouterActivity extends AppCompatActivity {
|
||||
}
|
||||
};
|
||||
|
||||
final AlertDialog alertDialog = new AlertDialog.Builder(themeWrapper)
|
||||
.setTitle(R.string.preferred_player_share_menu_title)
|
||||
final AlertDialog alertDialog = new AlertDialog.Builder(themeWrapperContext)
|
||||
.setTitle(R.string.preferred_open_action_share_menu_title)
|
||||
.setView(radioGroup)
|
||||
.setCancelable(true)
|
||||
.setNegativeButton(R.string.just_once, dialogButtonsClickListener)
|
||||
@@ -227,6 +226,7 @@ public class RouterActivity extends AppCompatActivity {
|
||||
.setOnDismissListener((dialog) -> finish())
|
||||
.create();
|
||||
|
||||
//noinspection CodeBlock2Expr
|
||||
alertDialog.setOnShowListener(dialog -> {
|
||||
setDialogButtonsState(alertDialog, radioGroup.getCheckedRadioButtonId() != -1);
|
||||
});
|
||||
@@ -240,7 +240,7 @@ public class RouterActivity extends AppCompatActivity {
|
||||
selectedRadioPosition = indexOfChild;
|
||||
|
||||
if (selectedPreviously == selectedRadioPosition) {
|
||||
handleChoice(choices[selectedRadioPosition].key);
|
||||
handleChoice(choices.get(selectedRadioPosition).key);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -259,8 +259,8 @@ public class RouterActivity extends AppCompatActivity {
|
||||
if (selectedRadioPosition == -1) {
|
||||
final String lastSelectedPlayer = preferences.getString(getString(R.string.preferred_open_action_last_selected_key), null);
|
||||
if (!TextUtils.isEmpty(lastSelectedPlayer)) {
|
||||
for (int i = 0; i < choices.length; i++) {
|
||||
AdapterChoiceItem c = choices[i];
|
||||
for (int i = 0; i < choices.size(); i++) {
|
||||
AdapterChoiceItem c = choices.get(i);
|
||||
if (lastSelectedPlayer.equals(c.key)) {
|
||||
selectedRadioPosition = i;
|
||||
break;
|
||||
@@ -269,7 +269,7 @@ public class RouterActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
selectedRadioPosition = Math.min(Math.max(-1, selectedRadioPosition), choices.length - 1);
|
||||
selectedRadioPosition = Math.min(Math.max(-1, selectedRadioPosition), choices.size() - 1);
|
||||
if (selectedRadioPosition != -1) {
|
||||
((RadioButton) radioGroup.getChildAt(selectedRadioPosition)).setChecked(true);
|
||||
}
|
||||
@@ -278,6 +278,28 @@ public class RouterActivity extends AppCompatActivity {
|
||||
alertDialog.show();
|
||||
}
|
||||
|
||||
private List<AdapterChoiceItem> getChoicesForService(Context context, StreamingService service) {
|
||||
final List<AdapterChoiceItem> returnList = new ArrayList<>();
|
||||
final List<StreamingService.ServiceInfo.MediaCapability> capabilities = service.getServiceInfo().getMediaCapabilities();
|
||||
|
||||
returnList.add(new AdapterChoiceItem(getString(R.string.show_info_key), getString(R.string.show_info),
|
||||
resolveResourceIdFromAttr(context, R.attr.info)));
|
||||
|
||||
if (capabilities.contains(VIDEO)) {
|
||||
returnList.add(new AdapterChoiceItem(getString(R.string.video_player_key), getString(R.string.video_player),
|
||||
resolveResourceIdFromAttr(context, R.attr.play)));
|
||||
returnList.add(new AdapterChoiceItem(getString(R.string.popup_player_key), getString(R.string.popup_player),
|
||||
resolveResourceIdFromAttr(context, R.attr.popup)));
|
||||
}
|
||||
|
||||
if (capabilities.contains(AUDIO)) {
|
||||
returnList.add(new AdapterChoiceItem(getString(R.string.background_player_key), getString(R.string.background_player),
|
||||
resolveResourceIdFromAttr(context, R.attr.audio)));
|
||||
}
|
||||
|
||||
return returnList;
|
||||
}
|
||||
|
||||
private void setDialogButtonsState(AlertDialog dialog, boolean state) {
|
||||
final Button negativeButton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
|
||||
final Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
|
||||
@@ -288,16 +310,14 @@ public class RouterActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
private void handleChoice(final String playerChoiceKey) {
|
||||
if (Arrays.asList(getResources()
|
||||
.getStringArray(R.array.preferred_open_action_values_list))
|
||||
.contains(playerChoiceKey)) {
|
||||
final List<String> validChoicesList = Arrays.asList(getResources().getStringArray(R.array.preferred_open_action_values_list));
|
||||
if (validChoicesList.contains(playerChoiceKey)) {
|
||||
PreferenceManager.getDefaultSharedPreferences(this).edit()
|
||||
.putString(getString(R.string.preferred_open_action_last_selected_key),
|
||||
playerChoiceKey).apply();
|
||||
.putString(getString(R.string.preferred_open_action_last_selected_key), playerChoiceKey)
|
||||
.apply();
|
||||
}
|
||||
|
||||
if (playerChoiceKey.equals(getString(R.string.popup_player_key))
|
||||
&& !PermissionHelper.isPopupEnabled(this)) {
|
||||
if (playerChoiceKey.equals(getString(R.string.popup_player_key)) && !PermissionHelper.isPopupEnabled(this)) {
|
||||
PermissionHelper.showPopupEnablementToast(this);
|
||||
finish();
|
||||
return;
|
||||
@@ -305,7 +325,7 @@ public class RouterActivity extends AppCompatActivity {
|
||||
|
||||
// stop and bypass FetcherService if InfoScreen was selected since
|
||||
// StreamDetailFragment can fetch data itself
|
||||
if(playerChoiceKey.equals(getString(R.string.show_info_key))) {
|
||||
if (playerChoiceKey.equals(getString(R.string.show_info_key))) {
|
||||
disposables.add(Observable
|
||||
.fromCallable(() -> NavigationHelper.getIntentByLink(this, currentUrl))
|
||||
.subscribeOn(Schedulers.io())
|
||||
@@ -322,11 +342,8 @@ public class RouterActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
final Intent intent = new Intent(this, FetcherService.class);
|
||||
intent.putExtra(FetcherService.KEY_CHOICE,
|
||||
new Choice(currentService.getServiceId(),
|
||||
currentLinkType,
|
||||
currentUrl,
|
||||
playerChoiceKey));
|
||||
final Choice choice = new Choice(currentService.getServiceId(), currentLinkType, currentUrl, playerChoiceKey);
|
||||
intent.putExtra(FetcherService.KEY_CHOICE, choice);
|
||||
startService(intent);
|
||||
|
||||
finish();
|
||||
@@ -334,8 +351,7 @@ public class RouterActivity extends AppCompatActivity {
|
||||
|
||||
private static class AdapterChoiceItem {
|
||||
final String description, key;
|
||||
@DrawableRes
|
||||
final int icon;
|
||||
@DrawableRes final int icon;
|
||||
|
||||
AdapterChoiceItem(String key, String description, int icon) {
|
||||
this.description = description;
|
||||
@@ -554,7 +570,7 @@ public class RouterActivity extends AppCompatActivity {
|
||||
* @param sharedText text to scan for URLs.
|
||||
* @return potential URLs
|
||||
*/
|
||||
protected String[] getUris(final String sharedText) {
|
||||
protected String[] getUris(final String sharedText) {
|
||||
final Collection<String> result = new HashSet<>();
|
||||
if (sharedText != null) {
|
||||
final String[] array = sharedText.split("\\p{Space}");
|
||||
|
||||
@@ -1,56 +1,61 @@
|
||||
package org.schabi.newpipe.download;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.IdRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.EditText;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.SeekBar;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.schabi.newpipe.MainActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.MediaFormat;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.stream.Stream;
|
||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
import org.schabi.newpipe.fragments.detail.SpinnerToolbarAdapter;
|
||||
import org.schabi.newpipe.settings.NewPipeSettings;
|
||||
import org.schabi.newpipe.util.FilenameUtils;
|
||||
import org.schabi.newpipe.util.ListHelper;
|
||||
import org.schabi.newpipe.util.PermissionHelper;
|
||||
import org.schabi.newpipe.util.StreamItemAdapter;
|
||||
import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper;
|
||||
import org.schabi.newpipe.util.ThemeHelper;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import icepick.Icepick;
|
||||
import icepick.State;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
import us.shandian.giga.service.DownloadManagerService;
|
||||
|
||||
public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheckedChangeListener, AdapterView.OnItemSelectedListener {
|
||||
private static final String TAG = "DialogFragment";
|
||||
private static final boolean DEBUG = MainActivity.DEBUG;
|
||||
|
||||
private static final String INFO_KEY = "info_key";
|
||||
private static final String SORTED_VIDEOS_LIST_KEY = "sorted_videos_list_key";
|
||||
private static final String SELECTED_VIDEO_KEY = "selected_video_key";
|
||||
private static final String SELECTED_AUDIO_KEY = "selected_audio_key";
|
||||
@State protected StreamInfo currentInfo;
|
||||
@State protected StreamSizeWrapper<AudioStream> wrappedAudioStreams = StreamSizeWrapper.empty();
|
||||
@State protected StreamSizeWrapper<VideoStream> wrappedVideoStreams = StreamSizeWrapper.empty();
|
||||
@State protected int selectedVideoIndex = 0;
|
||||
@State protected int selectedAudioIndex = 0;
|
||||
|
||||
private StreamInfo currentInfo;
|
||||
private ArrayList<VideoStream> sortedStreamVideosList;
|
||||
private int selectedVideoIndex;
|
||||
private int selectedAudioIndex;
|
||||
private StreamItemAdapter<AudioStream> audioStreamsAdapter;
|
||||
private StreamItemAdapter<VideoStream> videoStreamsAdapter;
|
||||
|
||||
private CompositeDisposable disposables = new CompositeDisposable();
|
||||
|
||||
private EditText nameEditText;
|
||||
private Spinner streamsSpinner;
|
||||
@@ -58,17 +63,50 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
private TextView threadsCountTextView;
|
||||
private SeekBar threadsSeekBar;
|
||||
|
||||
public static DownloadDialog newInstance(StreamInfo info, ArrayList<VideoStream> sortedStreamVideosList, int selectedVideoIndex) {
|
||||
public static DownloadDialog newInstance(StreamInfo info) {
|
||||
DownloadDialog dialog = new DownloadDialog();
|
||||
dialog.setInfo(info, sortedStreamVideosList, selectedVideoIndex);
|
||||
dialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
|
||||
dialog.setInfo(info);
|
||||
return dialog;
|
||||
}
|
||||
|
||||
private void setInfo(StreamInfo info, ArrayList<VideoStream> sortedStreamVideosList, int selectedVideoIndex) {
|
||||
public static DownloadDialog newInstance(Context context, StreamInfo info) {
|
||||
final ArrayList<VideoStream> streamsList = new ArrayList<>(ListHelper.getSortedStreamVideosList(context,
|
||||
info.getVideoStreams(), info.getVideoOnlyStreams(), false));
|
||||
final int selectedStreamIndex = ListHelper.getDefaultResolutionIndex(context, streamsList);
|
||||
|
||||
final DownloadDialog instance = newInstance(info);
|
||||
instance.setVideoStreams(streamsList);
|
||||
instance.setSelectedVideoStream(selectedStreamIndex);
|
||||
instance.setAudioStreams(info.getAudioStreams());
|
||||
return instance;
|
||||
}
|
||||
|
||||
private void setInfo(StreamInfo info) {
|
||||
this.currentInfo = info;
|
||||
}
|
||||
|
||||
public void setAudioStreams(List<AudioStream> audioStreams) {
|
||||
setAudioStreams(new StreamSizeWrapper<>(audioStreams));
|
||||
}
|
||||
|
||||
public void setAudioStreams(StreamSizeWrapper<AudioStream> wrappedAudioStreams) {
|
||||
this.wrappedAudioStreams = wrappedAudioStreams;
|
||||
}
|
||||
|
||||
public void setVideoStreams(List<VideoStream> videoStreams) {
|
||||
setVideoStreams(new StreamSizeWrapper<>(videoStreams));
|
||||
}
|
||||
|
||||
public void setVideoStreams(StreamSizeWrapper<VideoStream> wrappedVideoStreams) {
|
||||
this.wrappedVideoStreams = wrappedVideoStreams;
|
||||
}
|
||||
|
||||
public void setSelectedVideoStream(int selectedVideoIndex) {
|
||||
this.selectedVideoIndex = selectedVideoIndex;
|
||||
this.sortedStreamVideosList = sortedStreamVideosList;
|
||||
}
|
||||
|
||||
public void setSelectedAudioStream(int selectedAudioIndex) {
|
||||
this.selectedAudioIndex = selectedAudioIndex;
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -79,33 +117,26 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
|
||||
if (!PermissionHelper.checkStoragePermissions(getActivity())) {
|
||||
if (!PermissionHelper.checkStoragePermissions(getActivity(), PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
|
||||
getDialog().dismiss();
|
||||
return;
|
||||
}
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
Serializable serial = savedInstanceState.getSerializable(INFO_KEY);
|
||||
if (serial instanceof StreamInfo) currentInfo = (StreamInfo) serial;
|
||||
setStyle(STYLE_NO_TITLE, ThemeHelper.getDialogTheme(getContext()));
|
||||
Icepick.restoreInstanceState(this, savedInstanceState);
|
||||
|
||||
serial = savedInstanceState.getSerializable(SORTED_VIDEOS_LIST_KEY);
|
||||
if (serial instanceof ArrayList) { //noinspection unchecked
|
||||
sortedStreamVideosList = (ArrayList<VideoStream>) serial;
|
||||
}
|
||||
|
||||
selectedVideoIndex = savedInstanceState.getInt(SELECTED_VIDEO_KEY, 0);
|
||||
selectedAudioIndex = savedInstanceState.getInt(SELECTED_AUDIO_KEY, 0);
|
||||
}
|
||||
this.videoStreamsAdapter = new StreamItemAdapter<>(getContext(), wrappedVideoStreams, true);
|
||||
this.audioStreamsAdapter = new StreamItemAdapter<>(getContext(), wrappedAudioStreams);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
if (DEBUG) Log.d(TAG, "onCreateView() called with: inflater = [" + inflater + "], container = [" + container + "], savedInstanceState = [" + savedInstanceState + "]");
|
||||
return inflater.inflate(R.layout.dialog_url, container);
|
||||
return inflater.inflate(R.layout.download_dialog, container);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
nameEditText = view.findViewById(R.id.file_name);
|
||||
nameEditText.setText(FilenameUtils.createFilename(getContext(), currentInfo.getName()));
|
||||
@@ -116,12 +147,12 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
|
||||
threadsCountTextView = view.findViewById(R.id.threads_count);
|
||||
threadsSeekBar = view.findViewById(R.id.threads);
|
||||
|
||||
radioVideoAudioGroup = view.findViewById(R.id.video_audio_group);
|
||||
radioVideoAudioGroup.setOnCheckedChangeListener(this);
|
||||
|
||||
initToolbar(view.<Toolbar>findViewById(R.id.toolbar));
|
||||
checkDownloadOptions(view);
|
||||
setupVideoSpinner(sortedStreamVideosList, streamsSpinner);
|
||||
initToolbar(view.findViewById(R.id.toolbar));
|
||||
setupDownloadOptions();
|
||||
|
||||
int def = 3;
|
||||
threadsCountTextView.setText(String.valueOf(def));
|
||||
@@ -141,15 +172,35 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
public void onStopTrackingTouch(SeekBar p1) {
|
||||
}
|
||||
});
|
||||
|
||||
fetchStreamsSize();
|
||||
}
|
||||
|
||||
private void fetchStreamsSize() {
|
||||
disposables.clear();
|
||||
|
||||
disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedVideoStreams).subscribe(result -> {
|
||||
if (radioVideoAudioGroup.getCheckedRadioButtonId() == R.id.video_button) {
|
||||
setupVideoSpinner();
|
||||
}
|
||||
}));
|
||||
disposables.add(StreamSizeWrapper.fetchSizeForWrapper(wrappedAudioStreams).subscribe(result -> {
|
||||
if (radioVideoAudioGroup.getCheckedRadioButtonId() == R.id.audio_button) {
|
||||
setupAudioSpinner();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
disposables.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putSerializable(INFO_KEY, currentInfo);
|
||||
outState.putSerializable(SORTED_VIDEOS_LIST_KEY, sortedStreamVideosList);
|
||||
outState.putInt(SELECTED_VIDEO_KEY, selectedVideoIndex);
|
||||
outState.putInt(SELECTED_AUDIO_KEY, selectedAudioIndex);
|
||||
Icepick.saveInstanceState(this, outState);
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -161,39 +212,31 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
toolbar.setTitle(R.string.download_dialog_title);
|
||||
toolbar.setNavigationIcon(ThemeHelper.isLightThemeSelected(getActivity()) ? R.drawable.ic_arrow_back_black_24dp : R.drawable.ic_arrow_back_white_24dp);
|
||||
toolbar.inflateMenu(R.menu.dialog_url);
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
getDialog().dismiss();
|
||||
}
|
||||
});
|
||||
toolbar.setNavigationOnClickListener(v -> getDialog().dismiss());
|
||||
|
||||
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
if (item.getItemId() == R.id.okay) {
|
||||
downloadSelected();
|
||||
return true;
|
||||
} else return false;
|
||||
toolbar.setOnMenuItemClickListener(item -> {
|
||||
if (item.getItemId() == R.id.okay) {
|
||||
downloadSelected();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
public void setupAudioSpinner(final List<AudioStream> audioStreams, Spinner spinner) {
|
||||
String[] items = new String[audioStreams.size()];
|
||||
for (int i = 0; i < audioStreams.size(); i++) {
|
||||
AudioStream audioStream = audioStreams.get(i);
|
||||
items[i] = audioStream.getFormat().getName() + " " + audioStream.getAverageBitrate() + "kbps";
|
||||
}
|
||||
private void setupAudioSpinner() {
|
||||
if (getContext() == null) return;
|
||||
|
||||
ArrayAdapter<String> itemAdapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, items);
|
||||
spinner.setAdapter(itemAdapter);
|
||||
spinner.setSelection(selectedAudioIndex);
|
||||
streamsSpinner.setAdapter(audioStreamsAdapter);
|
||||
streamsSpinner.setSelection(selectedAudioIndex);
|
||||
setRadioButtonsState(true);
|
||||
}
|
||||
|
||||
public void setupVideoSpinner(final List<VideoStream> videoStreams, Spinner spinner) {
|
||||
spinner.setAdapter(new SpinnerToolbarAdapter(getContext(), videoStreams, true));
|
||||
spinner.setSelection(selectedVideoIndex);
|
||||
private void setupVideoSpinner() {
|
||||
if (getContext() == null) return;
|
||||
|
||||
streamsSpinner.setAdapter(videoStreamsAdapter);
|
||||
streamsSpinner.setSelection(selectedVideoIndex);
|
||||
setRadioButtonsState(true);
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -205,10 +248,10 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
if (DEBUG) Log.d(TAG, "onCheckedChanged() called with: group = [" + group + "], checkedId = [" + checkedId + "]");
|
||||
switch (checkedId) {
|
||||
case R.id.audio_button:
|
||||
setupAudioSpinner(currentInfo.getAudioStreams(), streamsSpinner);
|
||||
setupAudioSpinner();
|
||||
break;
|
||||
case R.id.video_button:
|
||||
setupVideoSpinner(sortedStreamVideosList, streamsSpinner);
|
||||
setupVideoSpinner();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -238,37 +281,53 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
// Utils
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
protected void checkDownloadOptions(View view) {
|
||||
RadioButton audioButton = view.findViewById(R.id.audio_button);
|
||||
RadioButton videoButton = view.findViewById(R.id.video_button);
|
||||
protected void setupDownloadOptions() {
|
||||
setRadioButtonsState(false);
|
||||
|
||||
if (currentInfo.getAudioStreams() == null || currentInfo.getAudioStreams().size() == 0) {
|
||||
audioButton.setVisibility(View.GONE);
|
||||
final RadioButton audioButton = radioVideoAudioGroup.findViewById(R.id.audio_button);
|
||||
final RadioButton videoButton = radioVideoAudioGroup.findViewById(R.id.video_button);
|
||||
final boolean isVideoStreamsAvailable = videoStreamsAdapter.getCount() > 0;
|
||||
final boolean isAudioStreamsAvailable = audioStreamsAdapter.getCount() > 0;
|
||||
|
||||
audioButton.setVisibility(isAudioStreamsAvailable ? View.VISIBLE : View.GONE);
|
||||
videoButton.setVisibility(isVideoStreamsAvailable ? View.VISIBLE : View.GONE);
|
||||
|
||||
if (isVideoStreamsAvailable) {
|
||||
videoButton.setChecked(true);
|
||||
} else if (sortedStreamVideosList == null || sortedStreamVideosList.size() == 0) {
|
||||
videoButton.setVisibility(View.GONE);
|
||||
setupVideoSpinner();
|
||||
} else if (isAudioStreamsAvailable) {
|
||||
audioButton.setChecked(true);
|
||||
setupAudioSpinner();
|
||||
} else {
|
||||
Toast.makeText(getContext(), R.string.no_streams_available_download, Toast.LENGTH_SHORT).show();
|
||||
getDialog().dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
private void setRadioButtonsState(boolean enabled) {
|
||||
radioVideoAudioGroup.findViewById(R.id.audio_button).setEnabled(enabled);
|
||||
radioVideoAudioGroup.findViewById(R.id.video_button).setEnabled(enabled);
|
||||
}
|
||||
|
||||
private void downloadSelected() {
|
||||
String url, location;
|
||||
Stream stream;
|
||||
String location;
|
||||
|
||||
String fileName = nameEditText.getText().toString().trim();
|
||||
if (fileName.isEmpty()) fileName = FilenameUtils.createFilename(getContext(), currentInfo.getName());
|
||||
|
||||
boolean isAudio = radioVideoAudioGroup.getCheckedRadioButtonId() == R.id.audio_button;
|
||||
if (isAudio) {
|
||||
url = currentInfo.getAudioStreams().get(selectedAudioIndex).getUrl();
|
||||
stream = audioStreamsAdapter.getItem(selectedAudioIndex);
|
||||
location = NewPipeSettings.getAudioDownloadPath(getContext());
|
||||
fileName += "." + currentInfo.getAudioStreams().get(selectedAudioIndex).getFormat().getSuffix();
|
||||
} else {
|
||||
url = sortedStreamVideosList.get(selectedVideoIndex).getUrl();
|
||||
stream = videoStreamsAdapter.getItem(selectedVideoIndex);
|
||||
location = NewPipeSettings.getVideoDownloadPath(getContext());
|
||||
fileName += "." + sortedStreamVideosList.get(selectedVideoIndex).getFormat().getSuffix();
|
||||
}
|
||||
|
||||
String url = stream.getUrl();
|
||||
fileName += "." + stream.getFormat().getSuffix();
|
||||
|
||||
DownloadManagerService.startMission(getContext(), url, location, fileName, isAudio, threadsSeekBar.getProgress() + 1);
|
||||
getDialog().dismiss();
|
||||
}
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
package org.schabi.newpipe.fragments.detail;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.MediaFormat;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SpinnerToolbarAdapter extends BaseAdapter {
|
||||
private final List<VideoStream> videoStreams;
|
||||
private final boolean showIconNoAudio;
|
||||
|
||||
private final Context context;
|
||||
|
||||
public SpinnerToolbarAdapter(Context context, List<VideoStream> videoStreams, boolean showIconNoAudio) {
|
||||
this.context = context;
|
||||
this.videoStreams = videoStreams;
|
||||
this.showIconNoAudio = showIconNoAudio;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return videoStreams.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return videoStreams.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||
return getCustomView(position, convertView, parent, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
return getCustomView(((Spinner) parent).getSelectedItemPosition(), convertView, parent, false);
|
||||
}
|
||||
|
||||
private View getCustomView(int position, View convertView, ViewGroup parent, boolean isDropdownItem) {
|
||||
if (convertView == null) {
|
||||
convertView = LayoutInflater.from(context).inflate(R.layout.resolutions_spinner_item, parent, false);
|
||||
}
|
||||
|
||||
ImageView woSoundIcon = convertView.findViewById(R.id.wo_sound_icon);
|
||||
TextView text = convertView.findViewById(android.R.id.text1);
|
||||
VideoStream item = (VideoStream) getItem(position);
|
||||
text.setText(item.getFormat().getName() + " " + item.getResolution());
|
||||
|
||||
int visibility = !showIconNoAudio ? View.GONE
|
||||
: item.isVideoOnly ? View.VISIBLE
|
||||
: isDropdownItem ? View.INVISIBLE
|
||||
: View.GONE;
|
||||
woSoundIcon.setVisibility(visibility);
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import android.preference.PreferenceManager;
|
||||
import android.support.annotation.DrawableRes;
|
||||
import android.support.annotation.FloatRange;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.view.animation.FastOutSlowInInterpolator;
|
||||
import android.support.v7.app.ActionBar;
|
||||
@@ -61,6 +62,8 @@ import org.schabi.newpipe.extractor.stream.StreamType;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
import org.schabi.newpipe.fragments.BackPressable;
|
||||
import org.schabi.newpipe.fragments.BaseStateFragment;
|
||||
import org.schabi.newpipe.util.StreamItemAdapter;
|
||||
import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper;
|
||||
import org.schabi.newpipe.fragments.local.dialog.PlaylistAppendDialog;
|
||||
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
||||
import org.schabi.newpipe.info_list.InfoItemDialog;
|
||||
@@ -70,7 +73,6 @@ import org.schabi.newpipe.player.helper.PlayerHelper;
|
||||
import org.schabi.newpipe.player.old.PlayVideoActivity;
|
||||
import org.schabi.newpipe.playlist.PlayQueue;
|
||||
import org.schabi.newpipe.playlist.SinglePlayQueue;
|
||||
import org.schabi.newpipe.report.ErrorActivity;
|
||||
import org.schabi.newpipe.report.UserAction;
|
||||
import org.schabi.newpipe.util.Constants;
|
||||
import org.schabi.newpipe.util.ExtractorHelper;
|
||||
@@ -84,9 +86,10 @@ import org.schabi.newpipe.util.PermissionHelper;
|
||||
import org.schabi.newpipe.util.ThemeHelper;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import icepick.State;
|
||||
import io.reactivex.Single;
|
||||
@@ -108,8 +111,6 @@ public class VideoDetailFragment
|
||||
// Amount of videos to show on start
|
||||
private static final int INITIAL_RELATED_VIDEOS = 8;
|
||||
|
||||
private ArrayList<VideoStream> sortedStreamVideosList;
|
||||
|
||||
private InfoItemBuilder infoItemBuilder = null;
|
||||
|
||||
private int updateFlags = 0;
|
||||
@@ -121,18 +122,16 @@ public class VideoDetailFragment
|
||||
private boolean showRelatedStreams;
|
||||
private boolean wasRelatedStreamsExpanded = false;
|
||||
|
||||
@State
|
||||
protected int serviceId = Constants.NO_SERVICE_ID;
|
||||
@State
|
||||
protected String name;
|
||||
@State
|
||||
protected String url;
|
||||
@State protected int serviceId = Constants.NO_SERVICE_ID;
|
||||
@State protected String name;
|
||||
@State protected String url;
|
||||
|
||||
private StreamInfo currentInfo;
|
||||
private Disposable currentWorker;
|
||||
private CompositeDisposable disposables = new CompositeDisposable();
|
||||
|
||||
private int selectedVideoStream = -1;
|
||||
private List<VideoStream> sortedVideoStreams;
|
||||
private int selectedVideoStreamIndex = -1;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Views
|
||||
@@ -205,7 +204,7 @@ public class VideoDetailFragment
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_video_detail, container, false);
|
||||
}
|
||||
|
||||
@@ -356,21 +355,8 @@ public class VideoDetailFragment
|
||||
}
|
||||
break;
|
||||
case R.id.detail_controls_download:
|
||||
if (!PermissionHelper.checkStoragePermissions(activity)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
DownloadDialog downloadDialog =
|
||||
DownloadDialog.newInstance(currentInfo,
|
||||
sortedStreamVideosList,
|
||||
selectedVideoStream);
|
||||
downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog");
|
||||
} catch (Exception e) {
|
||||
Toast.makeText(activity,
|
||||
R.string.could_not_setup_download_menu,
|
||||
Toast.LENGTH_LONG).show();
|
||||
e.printStackTrace();
|
||||
if (PermissionHelper.checkStoragePermissions(activity, PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
|
||||
this.openDownloadDialog();
|
||||
}
|
||||
break;
|
||||
case R.id.detail_uploader_root_layout:
|
||||
@@ -412,6 +398,9 @@ public class VideoDetailFragment
|
||||
case R.id.detail_controls_popup:
|
||||
openPopupPlayer(true);
|
||||
break;
|
||||
case R.id.detail_controls_download:
|
||||
NavigationHelper.openDownloads(getActivity());
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -533,6 +522,7 @@ public class VideoDetailFragment
|
||||
detailControlsPopup.setOnClickListener(this);
|
||||
detailControlsAddToPlaylist.setOnClickListener(this);
|
||||
detailControlsDownload.setOnClickListener(this);
|
||||
detailControlsDownload.setOnLongClickListener(this);
|
||||
relatedStreamExpandButton.setOnClickListener(this);
|
||||
|
||||
detailControlsBackground.setLongClickable(true);
|
||||
@@ -549,7 +539,8 @@ public class VideoDetailFragment
|
||||
|
||||
final String[] commands = new String[]{
|
||||
context.getResources().getString(R.string.enqueue_on_background),
|
||||
context.getResources().getString(R.string.enqueue_on_popup)
|
||||
context.getResources().getString(R.string.enqueue_on_popup),
|
||||
context.getResources().getString(R.string.append_playlist)
|
||||
};
|
||||
|
||||
final DialogInterface.OnClickListener actions = (DialogInterface dialogInterface, int i) -> {
|
||||
@@ -560,6 +551,12 @@ public class VideoDetailFragment
|
||||
case 1:
|
||||
NavigationHelper.enqueueOnPopupPlayer(getActivity(), new SinglePlayQueue(item));
|
||||
break;
|
||||
case 2:
|
||||
if (getFragmentManager() != null) {
|
||||
PlaylistAppendDialog.fromStreamInfoItems(Collections.singletonList(item))
|
||||
.show(getFragmentManager(), TAG);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -681,15 +678,15 @@ public class VideoDetailFragment
|
||||
int id = item.getItemId();
|
||||
switch (id) {
|
||||
case R.id.menu_item_share: {
|
||||
if(currentInfo != null) {
|
||||
shareUrl(currentInfo.getName(), url);
|
||||
} else {
|
||||
shareUrl(url, url);
|
||||
if (currentInfo != null) {
|
||||
shareUrl(currentInfo.getName(), currentInfo.getUrl());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
case R.id.menu_item_openInBrowser: {
|
||||
openUrlInBrowser(url);
|
||||
if (currentInfo != null) {
|
||||
openUrlInBrowser(currentInfo.getUrl());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
case R.id.action_play_with_kodi:
|
||||
@@ -722,27 +719,25 @@ public class VideoDetailFragment
|
||||
|
||||
private void setupActionBar(final StreamInfo info) {
|
||||
if (DEBUG) Log.d(TAG, "setupActionBarHandler() called with: info = [" + info + "]");
|
||||
sortedStreamVideosList = new ArrayList<>(ListHelper.getSortedStreamVideosList(
|
||||
activity, info.getVideoStreams(), info.getVideoOnlyStreams(), false));
|
||||
|
||||
selectedVideoStream = ListHelper.getDefaultResolutionIndex(activity, sortedStreamVideosList);
|
||||
|
||||
boolean isExternalPlayerEnabled = PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
.getBoolean(activity.getString(R.string.use_external_video_player_key), false);
|
||||
spinnerToolbar.setAdapter(new SpinnerToolbarAdapter(activity, sortedStreamVideosList,
|
||||
isExternalPlayerEnabled));
|
||||
spinnerToolbar.setSelection(selectedVideoStream);
|
||||
|
||||
sortedVideoStreams = ListHelper.getSortedStreamVideosList(activity, info.getVideoStreams(), info.getVideoOnlyStreams(), false);
|
||||
selectedVideoStreamIndex = ListHelper.getDefaultResolutionIndex(activity, sortedVideoStreams);
|
||||
|
||||
final StreamItemAdapter<VideoStream> streamsAdapter = new StreamItemAdapter<>(activity, new StreamSizeWrapper<>(sortedVideoStreams), isExternalPlayerEnabled);
|
||||
spinnerToolbar.setAdapter(streamsAdapter);
|
||||
spinnerToolbar.setSelection(selectedVideoStreamIndex);
|
||||
spinnerToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
selectedVideoStream = position;
|
||||
selectedVideoStreamIndex = position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -818,7 +813,7 @@ public class VideoDetailFragment
|
||||
public void prepareAndHandleInfo(final StreamInfo info, boolean scrollToTop) {
|
||||
if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = [" + info + "], scrollToTop = [" + scrollToTop + "]");
|
||||
|
||||
setInitialData(info.getServiceId(), info.getUrl(), info.getName());
|
||||
setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName());
|
||||
pushToStack(serviceId, url, name);
|
||||
showLoading();
|
||||
|
||||
@@ -954,8 +949,9 @@ public class VideoDetailFragment
|
||||
this.autoPlayEnabled = autoplay;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private VideoStream getSelectedVideoStream() {
|
||||
return sortedStreamVideosList.get(selectedVideoStream);
|
||||
return sortedVideoStreams != null ? sortedVideoStreams.get(selectedVideoStreamIndex) : null;
|
||||
}
|
||||
|
||||
private void prepareDescription(final String descriptionHtml) {
|
||||
@@ -1112,7 +1108,7 @@ public class VideoDetailFragment
|
||||
public void handleResult(@NonNull StreamInfo info) {
|
||||
super.handleResult(info);
|
||||
|
||||
setInitialData(info.getServiceId(), info.getUrl(), info.getName());
|
||||
setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName());
|
||||
pushToStack(serviceId, url, name);
|
||||
|
||||
animateView(thumbnailPlayButton, true, 200);
|
||||
@@ -1192,7 +1188,9 @@ public class VideoDetailFragment
|
||||
toggleExpandRelatedVideos(currentInfo);
|
||||
wasRelatedStreamsExpanded = false;
|
||||
}
|
||||
|
||||
setTitleToUrl(info.getServiceId(), info.getUrl(), info.getName());
|
||||
setTitleToUrl(info.getServiceId(), info.getOriginalUrl(), info.getName());
|
||||
|
||||
if (!info.getErrors().isEmpty()) {
|
||||
showSnackBarError(info.getErrors(),
|
||||
@@ -1226,6 +1224,23 @@ public class VideoDetailFragment
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void openDownloadDialog() {
|
||||
try {
|
||||
DownloadDialog downloadDialog = DownloadDialog.newInstance(currentInfo);
|
||||
downloadDialog.setVideoStreams(sortedVideoStreams);
|
||||
downloadDialog.setAudioStreams(currentInfo.getAudioStreams());
|
||||
downloadDialog.setSelectedVideoStream(selectedVideoStreamIndex);
|
||||
|
||||
downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog");
|
||||
} catch (Exception e) {
|
||||
Toast.makeText(activity,
|
||||
R.string.could_not_setup_download_menu,
|
||||
Toast.LENGTH_LONG).show();
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Stream Results
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.schabi.newpipe.extractor.stream.Stream;
|
||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
|
||||
import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
|
||||
import org.schabi.newpipe.fragments.local.dialog.PlaylistAppendDialog;
|
||||
import org.schabi.newpipe.info_list.InfoItemDialog;
|
||||
import org.schabi.newpipe.playlist.ChannelPlayQueue;
|
||||
import org.schabi.newpipe.playlist.PlayQueue;
|
||||
@@ -49,6 +50,7 @@ import org.schabi.newpipe.util.Localization;
|
||||
import org.schabi.newpipe.util.NavigationHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -161,6 +163,7 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
|
||||
context.getResources().getString(R.string.start_here_on_main),
|
||||
context.getResources().getString(R.string.start_here_on_background),
|
||||
context.getResources().getString(R.string.start_here_on_popup),
|
||||
context.getResources().getString(R.string.append_playlist)
|
||||
};
|
||||
|
||||
final DialogInterface.OnClickListener actions = new DialogInterface.OnClickListener() {
|
||||
@@ -183,6 +186,12 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
|
||||
case 4:
|
||||
NavigationHelper.playOnPopupPlayer(activity, getPlayQueue(index));
|
||||
break;
|
||||
case 5:
|
||||
if (getFragmentManager() != null) {
|
||||
PlaylistAppendDialog.fromStreamInfoItems(Collections.singletonList(item))
|
||||
.show(getFragmentManager(), TAG);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ public class KioskFragment extends BaseListInfoFragment<KioskInfo> {
|
||||
|
||||
if (!result.getErrors().isEmpty()) {
|
||||
showSnackBarError(result.getErrors(),
|
||||
UserAction.REQUESTED_PLAYLIST,
|
||||
UserAction.REQUESTED_KIOSK,
|
||||
NewPipe.getNameOfService(result.getServiceId()), result.getUrl(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,8 @@ public final class BookmarkFragment
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
final AppDatabase database = NewPipeDatabase.getInstance(getContext());
|
||||
if (activity == null) return;
|
||||
final AppDatabase database = NewPipeDatabase.getInstance(activity);
|
||||
localPlaylistManager = new LocalPlaylistManager(database);
|
||||
remotePlaylistManager = new RemotePlaylistManager(database);
|
||||
disposables = new CompositeDisposable();
|
||||
@@ -79,7 +80,9 @@ public final class BookmarkFragment
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) setTitle(getString(R.string.tab_bookmarks));
|
||||
if (activity != null && isVisibleToUser) {
|
||||
setTitle(activity.getString(R.string.tab_bookmarks));
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -104,8 +104,8 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
setTitle(getString(R.string.tab_subscriptions));
|
||||
if (activity != null && isVisibleToUser) {
|
||||
setTitle(activity.getString(R.string.tab_subscriptions));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -118,8 +118,12 @@ public final class BackgroundPlayer extends Service {
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
if (DEBUG) Log.d(TAG, "onStartCommand() called with: intent = [" + intent + "], flags = [" + flags + "], startId = [" + startId + "]");
|
||||
if (DEBUG) Log.d(TAG, "onStartCommand() called with: intent = [" + intent +
|
||||
"], flags = [" + flags + "], startId = [" + startId + "]");
|
||||
basePlayerImpl.handleIntent(intent);
|
||||
if (basePlayerImpl.mediaSessionManager != null) {
|
||||
basePlayerImpl.mediaSessionManager.handleMediaButtonIntent(intent);
|
||||
}
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
|
||||
@@ -160,6 +164,11 @@ public final class BackgroundPlayer extends Service {
|
||||
if (DEBUG) Log.d(TAG, "onScreenOnOff() called with: on = [" + on + "]");
|
||||
shouldUpdateOnProgress = on;
|
||||
basePlayerImpl.triggerProgressUpdate();
|
||||
if (on) {
|
||||
basePlayerImpl.startProgressLoop();
|
||||
} else {
|
||||
basePlayerImpl.stopProgressLoop();
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -545,7 +554,6 @@ public final class BackgroundPlayer extends Service {
|
||||
super.onPaused();
|
||||
|
||||
updateNotification(R.drawable.ic_play_arrow_white);
|
||||
if (isProgressLoopRunning()) stopProgressLoop();
|
||||
|
||||
lockManager.releaseWifiAndCpu();
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ import com.google.android.exoplayer2.Timeline;
|
||||
import com.google.android.exoplayer2.source.BehindLiveWindowException;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.TrackGroupArray;
|
||||
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
|
||||
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
||||
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
||||
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
@@ -64,6 +64,7 @@ import org.schabi.newpipe.player.helper.LoadController;
|
||||
import org.schabi.newpipe.player.helper.MediaSessionManager;
|
||||
import org.schabi.newpipe.player.helper.PlayerDataSource;
|
||||
import org.schabi.newpipe.player.helper.PlayerHelper;
|
||||
import org.schabi.newpipe.player.mediasource.FailedMediaSource;
|
||||
import org.schabi.newpipe.player.playback.BasePlayerMediaSession;
|
||||
import org.schabi.newpipe.player.playback.CustomTrackSelector;
|
||||
import org.schabi.newpipe.player.playback.MediaSourceManager;
|
||||
@@ -124,7 +125,6 @@ public abstract class BasePlayer implements
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
protected static final float[] PLAYBACK_SPEEDS = {0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f};
|
||||
protected static final float[] PLAYBACK_PITCHES = {0.8f, 0.9f, 0.95f, 1f, 1.05f, 1.1f, 1.2f};
|
||||
|
||||
protected PlayQueue playQueue;
|
||||
protected PlayQueueAdapter playQueueAdapter;
|
||||
@@ -140,10 +140,10 @@ public abstract class BasePlayer implements
|
||||
// Player
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
protected final static int FAST_FORWARD_REWIND_AMOUNT = 10000; // 10 Seconds
|
||||
protected final static int PLAY_PREV_ACTIVATION_LIMIT = 5000; // 5 seconds
|
||||
protected final static int PROGRESS_LOOP_INTERVAL = 500;
|
||||
protected final static int RECOVERY_SKIP_THRESHOLD = 3000; // 3 seconds
|
||||
protected final static int FAST_FORWARD_REWIND_AMOUNT_MILLIS = 10000; // 10 Seconds
|
||||
protected final static int PLAY_PREV_ACTIVATION_LIMIT_MILLIS = 5000; // 5 seconds
|
||||
protected final static int PROGRESS_LOOP_INTERVAL_MILLIS = 500;
|
||||
protected final static int RECOVERY_SKIP_THRESHOLD_MILLIS = 3000; // 3 seconds
|
||||
|
||||
protected CustomTrackSelector trackSelector;
|
||||
protected PlayerDataSource dataSource;
|
||||
@@ -177,11 +177,11 @@ public abstract class BasePlayer implements
|
||||
}
|
||||
|
||||
public void setup() {
|
||||
if (simpleExoPlayer == null) initPlayer();
|
||||
if (simpleExoPlayer == null) initPlayer(/*playOnInit=*/true);
|
||||
initListeners();
|
||||
}
|
||||
|
||||
public void initPlayer() {
|
||||
public void initPlayer(final boolean playOnReady) {
|
||||
if (DEBUG) Log.d(TAG, "initPlayer() called with: context = [" + context + "]");
|
||||
|
||||
if (databaseUpdateReactor != null) databaseUpdateReactor.dispose();
|
||||
@@ -191,15 +191,15 @@ public abstract class BasePlayer implements
|
||||
final DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
|
||||
dataSource = new PlayerDataSource(context, userAgent, bandwidthMeter);
|
||||
|
||||
final AdaptiveTrackSelection.Factory trackSelectionFactory =
|
||||
new AdaptiveTrackSelection.Factory(bandwidthMeter);
|
||||
final TrackSelection.Factory trackSelectionFactory =
|
||||
PlayerHelper.getQualitySelector(context, bandwidthMeter);
|
||||
trackSelector = new CustomTrackSelector(trackSelectionFactory);
|
||||
|
||||
final LoadControl loadControl = new LoadController(context);
|
||||
final RenderersFactory renderFactory = new DefaultRenderersFactory(context);
|
||||
simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(renderFactory, trackSelector, loadControl);
|
||||
simpleExoPlayer.addListener(this);
|
||||
simpleExoPlayer.setPlayWhenReady(true);
|
||||
simpleExoPlayer.setPlayWhenReady(playOnReady);
|
||||
simpleExoPlayer.setSeekParameters(PlayerHelper.getSeekParameters(context));
|
||||
|
||||
audioReactor = new AudioReactor(context, simpleExoPlayer);
|
||||
@@ -237,15 +237,16 @@ public abstract class BasePlayer implements
|
||||
final float playbackPitch = intent.getFloatExtra(PLAYBACK_PITCH, getPlaybackPitch());
|
||||
|
||||
// Good to go...
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch);
|
||||
initPlayback(queue, repeatMode, playbackSpeed, playbackPitch, /*playOnInit=*/true);
|
||||
}
|
||||
|
||||
protected void initPlayback(@NonNull final PlayQueue queue,
|
||||
@Player.RepeatMode final int repeatMode,
|
||||
final float playbackSpeed,
|
||||
final float playbackPitch) {
|
||||
final float playbackPitch,
|
||||
final boolean playOnReady) {
|
||||
destroyPlayer();
|
||||
initPlayer();
|
||||
initPlayer(playOnReady);
|
||||
setRepeatMode(repeatMode);
|
||||
setPlaybackParameters(playbackSpeed, playbackPitch);
|
||||
|
||||
@@ -518,15 +519,16 @@ public abstract class BasePlayer implements
|
||||
}
|
||||
|
||||
public void triggerProgressUpdate() {
|
||||
if (simpleExoPlayer == null) return;
|
||||
onUpdateProgress(
|
||||
(int) simpleExoPlayer.getCurrentPosition(),
|
||||
Math.max((int) simpleExoPlayer.getCurrentPosition(), 0),
|
||||
(int) simpleExoPlayer.getDuration(),
|
||||
simpleExoPlayer.getBufferedPercentage()
|
||||
);
|
||||
}
|
||||
|
||||
private Disposable getProgressReactor() {
|
||||
return Observable.interval(PROGRESS_LOOP_INTERVAL, TimeUnit.MILLISECONDS)
|
||||
return Observable.interval(PROGRESS_LOOP_INTERVAL_MILLIS, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(ignored -> triggerProgressUpdate());
|
||||
}
|
||||
@@ -553,8 +555,8 @@ public abstract class BasePlayer implements
|
||||
// Ensure dynamic/livestream timeline changes does not cause negative position
|
||||
if (isPlaylistStable && !isCurrentWindowValid() && !isSynchronizing) {
|
||||
if (DEBUG) Log.d(TAG, "Playback - negative time position reached, " +
|
||||
"clamping position to 0ms.");
|
||||
seekTo(/*clampToTime=*/0);
|
||||
"clamping to default position.");
|
||||
seekToDefault();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -640,12 +642,12 @@ public abstract class BasePlayer implements
|
||||
seekTo(recoveryPositionMillis);
|
||||
playQueue.unsetRecovery(currentSourceIndex);
|
||||
|
||||
} else if (isSynchronizing && simpleExoPlayer.isCurrentWindowDynamic()) {
|
||||
} else if (isSynchronizing && isLive()) {
|
||||
if (DEBUG) Log.d(TAG, "Playback - Synchronizing livestream to default time");
|
||||
// Is still synchronizing?
|
||||
seekToDefault();
|
||||
|
||||
} else if (isSynchronizing && presetStartPositionMillis != 0L) {
|
||||
} else if (isSynchronizing && presetStartPositionMillis > 0L) {
|
||||
if (DEBUG) Log.d(TAG, "Playback - Seeking to preset start " +
|
||||
"position=[" + presetStartPositionMillis + "]");
|
||||
// Has another start position?
|
||||
@@ -700,41 +702,23 @@ public abstract class BasePlayer implements
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes {@link ExoPlaybackException} tagged with {@link ExoPlaybackException#TYPE_SOURCE}.
|
||||
* <br><br>
|
||||
* If the current {@link com.google.android.exoplayer2.Timeline.Window window} is valid,
|
||||
* then we know the error is produced by transitioning into a bad window, therefore we report
|
||||
* an error to the play queue based on if the current error can be skipped.
|
||||
* <br><br>
|
||||
* This is done because ExoPlayer reports the source exceptions before window is
|
||||
* transitioned on seamless playback. Because player error causes ExoPlayer to go
|
||||
* back to {@link Player#STATE_IDLE STATE_IDLE}, we reset and prepare the media source
|
||||
* again to resume playback.
|
||||
* <br><br>
|
||||
* In the event that this error is produced during a valid stream playback, we save the
|
||||
* current position so the playback may be recovered and resumed manually by the user. This
|
||||
* happens only if the playback is {@link #RECOVERY_SKIP_THRESHOLD} milliseconds until complete.
|
||||
* <br><br>
|
||||
* In the event of livestreaming being lagged behind for any reason, most notably pausing for
|
||||
* too long, a {@link BehindLiveWindowException} will be produced. This will trigger a reload
|
||||
* instead of skipping or removal.
|
||||
* */
|
||||
private void processSourceError(final IOException error) {
|
||||
if (simpleExoPlayer == null || playQueue == null) return;
|
||||
|
||||
if (simpleExoPlayer.getCurrentPosition() <
|
||||
simpleExoPlayer.getDuration() - RECOVERY_SKIP_THRESHOLD) {
|
||||
setRecovery();
|
||||
}
|
||||
setRecovery();
|
||||
|
||||
final Throwable cause = error.getCause();
|
||||
if (cause instanceof BehindLiveWindowException) {
|
||||
reload();
|
||||
} else if (cause instanceof UnknownHostException) {
|
||||
playQueue.error(/*isNetworkProblem=*/true);
|
||||
} else if (isCurrentWindowValid()) {
|
||||
playQueue.error(/*isTransitioningToBadStream=*/true);
|
||||
} else if (cause instanceof FailedMediaSource.MediaSourceResolutionException) {
|
||||
playQueue.error(/*recoverableWithNoAvailableStream=*/false);
|
||||
} else if (cause instanceof FailedMediaSource.StreamInfoLoadException) {
|
||||
playQueue.error(/*recoverableIfLoadFailsWhenNetworkIsFine=*/false);
|
||||
} else {
|
||||
playQueue.error(isCurrentWindowValid());
|
||||
playQueue.error(/*noIdeaWhatHappenedAndLetUserChooseWhatToDo=*/true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -787,9 +771,10 @@ public abstract class BasePlayer implements
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@Override
|
||||
public boolean isNearPlaybackEdge(final long timeToEndMillis) {
|
||||
public boolean isApproachingPlaybackEdge(final long timeToEndMillis) {
|
||||
// If live, then not near playback edge
|
||||
if (simpleExoPlayer == null || simpleExoPlayer.isCurrentWindowDynamic()) return false;
|
||||
// If not playing, then not approaching playback edge
|
||||
if (simpleExoPlayer == null || isLive() || !isPlaying()) return false;
|
||||
|
||||
final long currentPositionMillis = simpleExoPlayer.getCurrentPosition();
|
||||
final long currentDurationMillis = simpleExoPlayer.getDuration();
|
||||
@@ -985,22 +970,22 @@ public abstract class BasePlayer implements
|
||||
|
||||
public void onFastRewind() {
|
||||
if (DEBUG) Log.d(TAG, "onFastRewind() called");
|
||||
seekBy(-FAST_FORWARD_REWIND_AMOUNT);
|
||||
seekBy(-FAST_FORWARD_REWIND_AMOUNT_MILLIS);
|
||||
}
|
||||
|
||||
public void onFastForward() {
|
||||
if (DEBUG) Log.d(TAG, "onFastForward() called");
|
||||
seekBy(FAST_FORWARD_REWIND_AMOUNT);
|
||||
seekBy(FAST_FORWARD_REWIND_AMOUNT_MILLIS);
|
||||
}
|
||||
|
||||
public void onPlayPrevious() {
|
||||
if (simpleExoPlayer == null || playQueue == null) return;
|
||||
if (DEBUG) Log.d(TAG, "onPlayPrevious() called");
|
||||
|
||||
/* If current playback has run for PLAY_PREV_ACTIVATION_LIMIT milliseconds,
|
||||
/* If current playback has run for PLAY_PREV_ACTIVATION_LIMIT_MILLIS milliseconds,
|
||||
* restart current track. Also restart the track if the current track
|
||||
* is the first in a queue.*/
|
||||
if (simpleExoPlayer.getCurrentPosition() > PLAY_PREV_ACTIVATION_LIMIT ||
|
||||
if (simpleExoPlayer.getCurrentPosition() > PLAY_PREV_ACTIVATION_LIMIT_MILLIS ||
|
||||
playQueue.getIndex() == 0) {
|
||||
seekToDefault();
|
||||
playQueue.offsetIndex(0);
|
||||
@@ -1050,7 +1035,9 @@ public abstract class BasePlayer implements
|
||||
}
|
||||
|
||||
public void seekToDefault() {
|
||||
if (simpleExoPlayer != null) simpleExoPlayer.seekToDefaultPosition();
|
||||
if (simpleExoPlayer != null) {
|
||||
simpleExoPlayer.seekToDefaultPosition();
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -1091,9 +1078,9 @@ public abstract class BasePlayer implements
|
||||
private void savePlaybackState() {
|
||||
if (simpleExoPlayer == null || currentInfo == null) return;
|
||||
|
||||
if (simpleExoPlayer.getCurrentPosition() > RECOVERY_SKIP_THRESHOLD &&
|
||||
if (simpleExoPlayer.getCurrentPosition() > RECOVERY_SKIP_THRESHOLD_MILLIS &&
|
||||
simpleExoPlayer.getCurrentPosition() <
|
||||
simpleExoPlayer.getDuration() - RECOVERY_SKIP_THRESHOLD) {
|
||||
simpleExoPlayer.getDuration() - RECOVERY_SKIP_THRESHOLD_MILLIS) {
|
||||
savePlaybackState(currentInfo, simpleExoPlayer.getCurrentPosition());
|
||||
}
|
||||
}
|
||||
@@ -1127,9 +1114,7 @@ public abstract class BasePlayer implements
|
||||
|
||||
/** Checks if the current playback is a livestream AND is playing at or beyond the live edge */
|
||||
public boolean isLiveEdge() {
|
||||
if (simpleExoPlayer == null) return false;
|
||||
final boolean isLive = simpleExoPlayer.isCurrentWindowDynamic();
|
||||
if (!isLive) return false;
|
||||
if (simpleExoPlayer == null || !isLive()) return false;
|
||||
|
||||
final Timeline currentTimeline = simpleExoPlayer.getCurrentTimeline();
|
||||
final int currentWindowIndex = simpleExoPlayer.getCurrentWindowIndex();
|
||||
@@ -1143,6 +1128,16 @@ public abstract class BasePlayer implements
|
||||
return timelineWindow.getDefaultPositionMs() <= simpleExoPlayer.getCurrentPosition();
|
||||
}
|
||||
|
||||
public boolean isLive() {
|
||||
if (simpleExoPlayer == null) return false;
|
||||
try {
|
||||
return simpleExoPlayer.isCurrentWindowDynamic();
|
||||
} catch (@NonNull IndexOutOfBoundsException ignored) {
|
||||
// Why would this even happen =(
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isPlaying() {
|
||||
final int state = simpleExoPlayer.getPlaybackState();
|
||||
return (state == Player.STATE_READY || state == Player.STATE_BUFFERING)
|
||||
@@ -1170,10 +1165,6 @@ public abstract class BasePlayer implements
|
||||
setPlaybackParameters(speed, getPlaybackPitch());
|
||||
}
|
||||
|
||||
public void setPlaybackPitch(float pitch) {
|
||||
setPlaybackParameters(getPlaybackSpeed(), pitch);
|
||||
}
|
||||
|
||||
public PlaybackParameters getPlaybackParameters() {
|
||||
final PlaybackParameters defaultParameters = new PlaybackParameters(1f, 1f);
|
||||
if (simpleExoPlayer == null) return defaultParameters;
|
||||
|
||||
@@ -30,8 +30,10 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.Settings;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.helper.ItemTouchHelper;
|
||||
@@ -50,6 +52,7 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.text.CaptionStyleCompat;
|
||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||
import com.google.android.exoplayer2.ui.SubtitleView;
|
||||
|
||||
@@ -59,7 +62,6 @@ import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
|
||||
import org.schabi.newpipe.player.helper.PlaybackParameterDialog;
|
||||
import org.schabi.newpipe.player.helper.PlayerHelper;
|
||||
import org.schabi.newpipe.playlist.PlayQueue;
|
||||
import org.schabi.newpipe.playlist.PlayQueueItem;
|
||||
import org.schabi.newpipe.playlist.PlayQueueItemBuilder;
|
||||
import org.schabi.newpipe.playlist.PlayQueueItemHolder;
|
||||
@@ -95,12 +97,12 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
|
||||
private GestureDetector gestureDetector;
|
||||
|
||||
private boolean activityPaused;
|
||||
private VideoPlayerImpl playerImpl;
|
||||
|
||||
private SharedPreferences defaultPreferences;
|
||||
|
||||
@Nullable private StateSaver.SavedState savedState;
|
||||
@Nullable private PlayerState playerState;
|
||||
private boolean isInMultiWindow;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Activity LifeCycle
|
||||
@@ -135,8 +137,9 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
|
||||
@Override
|
||||
protected void onRestoreInstanceState(@NonNull Bundle bundle) {
|
||||
if (DEBUG) Log.d(TAG, "onRestoreInstanceState() called");
|
||||
super.onRestoreInstanceState(bundle);
|
||||
savedState = StateSaver.tryToRestore(bundle, this);
|
||||
StateSaver.tryToRestore(bundle, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -148,26 +151,28 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (DEBUG) Log.d(TAG, "onResume() called");
|
||||
if (playerImpl.getPlayer() != null && activityPaused && playerImpl.wasPlaying()
|
||||
&& !playerImpl.isPlaying()) {
|
||||
playerImpl.onPlay();
|
||||
}
|
||||
activityPaused = false;
|
||||
super.onResume();
|
||||
|
||||
if(globalScreenOrientationLocked()) {
|
||||
boolean lastOrientationWasLandscape
|
||||
= defaultPreferences.getBoolean(getString(R.string.last_orientation_landscape_key), false);
|
||||
if (globalScreenOrientationLocked()) {
|
||||
boolean lastOrientationWasLandscape = defaultPreferences.getBoolean(
|
||||
getString(R.string.last_orientation_landscape_key), false);
|
||||
setLandscape(lastOrientationWasLandscape);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (DEBUG) Log.d(TAG, "onBackPressed() called");
|
||||
super.onBackPressed();
|
||||
if (playerImpl.isPlaying()) playerImpl.getPlayer().setPlayWhenReady(false);
|
||||
// Upon going in or out of multiwindow mode, isInMultiWindow will always be false,
|
||||
// since the first onResume needs to restore the player.
|
||||
// Subsequent onResume calls while multiwindow mode remains the same and the player is
|
||||
// prepared should be ignored.
|
||||
if (isInMultiWindow) return;
|
||||
isInMultiWindow = isInMultiWindow();
|
||||
|
||||
if (playerState != null) {
|
||||
playerImpl.setPlaybackQuality(playerState.getPlaybackQuality());
|
||||
playerImpl.initPlayback(playerState.getPlayQueue(), playerState.getRepeatMode(),
|
||||
playerState.getPlaybackSpeed(), playerState.getPlaybackPitch(),
|
||||
playerState.wasPlaying());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -180,33 +185,24 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
if (DEBUG) Log.d(TAG, "onPause() called");
|
||||
|
||||
if (playerImpl != null && playerImpl.getPlayer() != null && !activityPaused) {
|
||||
playerImpl.wasPlaying = playerImpl.isPlaying();
|
||||
playerImpl.onPause();
|
||||
}
|
||||
activityPaused = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
if (DEBUG) Log.d(TAG, "onSaveInstanceState() called");
|
||||
super.onSaveInstanceState(outState);
|
||||
if (playerImpl == null) return;
|
||||
|
||||
playerImpl.setRecovery();
|
||||
savedState = StateSaver.tryToSave(isChangingConfigurations(), savedState,
|
||||
outState, this);
|
||||
playerState = new PlayerState(playerImpl.getPlayQueue(), playerImpl.getRepeatMode(),
|
||||
playerImpl.getPlaybackSpeed(), playerImpl.getPlaybackPitch(),
|
||||
playerImpl.getPlaybackQuality(), playerImpl.isPlaying());
|
||||
StateSaver.tryToSave(isChangingConfigurations(), null, outState, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (DEBUG) Log.d(TAG, "onDestroy() called");
|
||||
if (playerImpl != null) playerImpl.destroy();
|
||||
protected void onStop() {
|
||||
if (DEBUG) Log.d(TAG, "onStop() called");
|
||||
super.onStop();
|
||||
playerImpl.destroy();
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -221,48 +217,19 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
@Override
|
||||
public void writeTo(Queue<Object> objectsToSave) {
|
||||
if (objectsToSave == null) return;
|
||||
objectsToSave.add(playerImpl.getPlayQueue());
|
||||
objectsToSave.add(playerImpl.getRepeatMode());
|
||||
objectsToSave.add(playerImpl.getPlaybackSpeed());
|
||||
objectsToSave.add(playerImpl.getPlaybackPitch());
|
||||
objectsToSave.add(playerImpl.getPlaybackQuality());
|
||||
objectsToSave.add(playerState);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public void readFrom(@NonNull Queue<Object> savedObjects) throws Exception {
|
||||
@NonNull final PlayQueue queue = (PlayQueue) savedObjects.poll();
|
||||
final int repeatMode = (int) savedObjects.poll();
|
||||
final float playbackSpeed = (float) savedObjects.poll();
|
||||
final float playbackPitch = (float) savedObjects.poll();
|
||||
@NonNull final String playbackQuality = (String) savedObjects.poll();
|
||||
|
||||
playerImpl.setPlaybackQuality(playbackQuality);
|
||||
playerImpl.initPlayback(queue, repeatMode, playbackSpeed, playbackPitch);
|
||||
|
||||
StateSaver.onDestroy(savedState);
|
||||
public void readFrom(@NonNull Queue<Object> savedObjects) {
|
||||
playerState = (PlayerState) savedObjects.poll();
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// View
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
/**
|
||||
* Prior to Kitkat, hiding system ui causes the player view to be overlaid and require two
|
||||
* clicks to get rid of that invisible overlay. By showing the system UI on actions/events,
|
||||
* that overlay is removed and the player view is put to the foreground.
|
||||
*
|
||||
* Post Kitkat, navbar and status bar can be pulled out by swiping the edge of
|
||||
* screen, therefore, we can do nothing or hide the UI on actions/events.
|
||||
* */
|
||||
private void changeSystemUi() {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
||||
showSystemUi();
|
||||
} else {
|
||||
hideSystemUi();
|
||||
}
|
||||
}
|
||||
|
||||
private void showSystemUi() {
|
||||
if (DEBUG) Log.d(TAG, "showSystemUi() called");
|
||||
if (playerImpl != null && playerImpl.queueVisible) return;
|
||||
@@ -275,6 +242,14 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
} else {
|
||||
visibility = View.STATUS_BAR_VISIBLE;
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
@ColorInt final int systenUiColor =
|
||||
ActivityCompat.getColor(getApplicationContext(), R.color.video_overlay_color);
|
||||
getWindow().setStatusBarColor(systenUiColor);
|
||||
getWindow().setNavigationBarColor(systenUiColor);
|
||||
}
|
||||
|
||||
getWindow().getDecorView().setSystemUiVisibility(visibility);
|
||||
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
}
|
||||
@@ -342,6 +317,10 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isInMultiWindow() {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isInMultiWindowMode();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Playback Parameters Listener
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@@ -411,15 +390,6 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
this.itemsListCloseButton = findViewById(R.id.playQueueClose);
|
||||
this.itemsList = findViewById(R.id.playQueue);
|
||||
|
||||
this.windowRootLayout = rootView.findViewById(R.id.playbackWindowRoot);
|
||||
// Prior to Kitkat, there is no way of setting translucent navbar programmatically.
|
||||
// Thus, fit system windows is opted instead.
|
||||
// See https://stackoverflow.com/questions/29069070/completely-transparent-status-bar-and-navigation-bar-on-lollipop
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
windowRootLayout.setFitsSystemWindows(false);
|
||||
windowRootLayout.invalidate();
|
||||
}
|
||||
|
||||
titleTextView.setSelected(true);
|
||||
channelTextView.setSelected(true);
|
||||
|
||||
@@ -428,20 +398,15 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
|
||||
@Override
|
||||
protected void setupSubtitleView(@NonNull SubtitleView view,
|
||||
@NonNull String captionSizeKey) {
|
||||
final float captionRatioInverse;
|
||||
if (captionSizeKey.equals(getString(R.string.smaller_caption_size_key))) {
|
||||
captionRatioInverse = 22f;
|
||||
} else if (captionSizeKey.equals(getString(R.string.larger_caption_size_key))) {
|
||||
captionRatioInverse = 18f;
|
||||
} else {
|
||||
captionRatioInverse = 20f;
|
||||
}
|
||||
|
||||
final float captionScale,
|
||||
@NonNull final CaptionStyleCompat captionStyle) {
|
||||
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
||||
final int minimumLength = Math.min(metrics.heightPixels, metrics.widthPixels);
|
||||
final float captionRatioInverse = 20f + 4f * (1f - captionScale);
|
||||
view.setFixedTextSize(TypedValue.COMPLEX_UNIT_PX,
|
||||
(float) minimumLength / captionRatioInverse);
|
||||
view.setApplyEmbeddedStyles(captionStyle.equals(CaptionStyleCompat.DEFAULT));
|
||||
view.setStyle(captionStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -727,7 +692,7 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
animatePlayButtons(true, 200);
|
||||
});
|
||||
|
||||
changeSystemUi();
|
||||
showSystemUi();
|
||||
getRootView().setKeepScreenOn(false);
|
||||
}
|
||||
|
||||
@@ -900,7 +865,7 @@ public final class MainVideoPlayer extends AppCompatActivity
|
||||
playerImpl.hideControls(150, 0);
|
||||
} else {
|
||||
playerImpl.showControlsThenHide();
|
||||
changeSystemUi();
|
||||
showSystemUi();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
88
app/src/main/java/org/schabi/newpipe/player/PlayerState.java
Normal file
88
app/src/main/java/org/schabi/newpipe/player/PlayerState.java
Normal file
@@ -0,0 +1,88 @@
|
||||
package org.schabi.newpipe.player;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
|
||||
import org.schabi.newpipe.playlist.PlayQueue;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class PlayerState implements Serializable {
|
||||
private final static String TAG = "PlayerState";
|
||||
|
||||
@NonNull private final PlayQueue playQueue;
|
||||
private final int repeatMode;
|
||||
private final float playbackSpeed;
|
||||
private final float playbackPitch;
|
||||
@Nullable private final String playbackQuality;
|
||||
private final boolean wasPlaying;
|
||||
|
||||
PlayerState(@NonNull final PlayQueue playQueue, final int repeatMode,
|
||||
final float playbackSpeed, final float playbackPitch, final boolean wasPlaying) {
|
||||
this(playQueue, repeatMode, playbackSpeed, playbackPitch, null, wasPlaying);
|
||||
}
|
||||
|
||||
PlayerState(@NonNull final PlayQueue playQueue, final int repeatMode,
|
||||
final float playbackSpeed, final float playbackPitch,
|
||||
@Nullable final String playbackQuality, final boolean wasPlaying) {
|
||||
this.playQueue = playQueue;
|
||||
this.repeatMode = repeatMode;
|
||||
this.playbackSpeed = playbackSpeed;
|
||||
this.playbackPitch = playbackPitch;
|
||||
this.playbackQuality = playbackQuality;
|
||||
this.wasPlaying = wasPlaying;
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Serdes
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@Nullable
|
||||
public static PlayerState fromJson(@NonNull final String json) {
|
||||
try {
|
||||
return new Gson().fromJson(json, PlayerState.class);
|
||||
} catch (JsonSyntaxException error) {
|
||||
Log.e(TAG, "Failed to deserialize PlayerState from json=[" + json + "]", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String toJson() {
|
||||
return new Gson().toJson(this);
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Getters
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
@NonNull
|
||||
public PlayQueue getPlayQueue() {
|
||||
return playQueue;
|
||||
}
|
||||
|
||||
public int getRepeatMode() {
|
||||
return repeatMode;
|
||||
}
|
||||
|
||||
public float getPlaybackSpeed() {
|
||||
return playbackSpeed;
|
||||
}
|
||||
|
||||
public float getPlaybackPitch() {
|
||||
return playbackPitch;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getPlaybackQuality() {
|
||||
return playbackQuality;
|
||||
}
|
||||
|
||||
public boolean wasPlaying() {
|
||||
return wasPlaying;
|
||||
}
|
||||
}
|
||||
@@ -52,6 +52,7 @@ import android.widget.TextView;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.PlaybackParameters;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.text.CaptionStyleCompat;
|
||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||
import com.google.android.exoplayer2.ui.SubtitleView;
|
||||
|
||||
@@ -397,14 +398,12 @@ public final class PopupVideoPlayer extends Service {
|
||||
|
||||
@Override
|
||||
protected void setupSubtitleView(@NonNull SubtitleView view,
|
||||
@NonNull String captionSizeKey) {
|
||||
float captionRatio = SubtitleView.DEFAULT_TEXT_SIZE_FRACTION;
|
||||
if (captionSizeKey.equals(getString(R.string.smaller_caption_size_key))) {
|
||||
captionRatio *= 0.9;
|
||||
} else if (captionSizeKey.equals(getString(R.string.larger_caption_size_key))) {
|
||||
captionRatio *= 1.1;
|
||||
}
|
||||
view.setFractionalTextSize(captionRatio);
|
||||
final float captionScale,
|
||||
@NonNull final CaptionStyleCompat captionStyle) {
|
||||
float captionRatio = (captionScale - 1f) / 5f + 1f;
|
||||
view.setFractionalTextSize(SubtitleView.DEFAULT_TEXT_SIZE_FRACTION * captionRatio);
|
||||
view.setApplyEmbeddedStyles(captionStyle.equals(CaptionStyleCompat.DEFAULT));
|
||||
view.setStyle(captionStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
|
||||
import org.schabi.newpipe.fragments.local.dialog.PlaylistAppendDialog;
|
||||
import org.schabi.newpipe.player.event.PlayerEventListener;
|
||||
import org.schabi.newpipe.player.helper.PlaybackParameterDialog;
|
||||
import org.schabi.newpipe.playlist.PlayQueueAdapter;
|
||||
import org.schabi.newpipe.playlist.PlayQueueItem;
|
||||
import org.schabi.newpipe.playlist.PlayQueueItemBuilder;
|
||||
import org.schabi.newpipe.playlist.PlayQueueItemHolder;
|
||||
@@ -40,6 +41,9 @@ import org.schabi.newpipe.util.Localization;
|
||||
import org.schabi.newpipe.util.NavigationHelper;
|
||||
import org.schabi.newpipe.util.ThemeHelper;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.schabi.newpipe.player.helper.PlayerHelper.formatPitch;
|
||||
import static org.schabi.newpipe.player.helper.PlayerHelper.formatSpeed;
|
||||
|
||||
@@ -151,7 +155,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
finish();
|
||||
return true;
|
||||
case R.id.action_append_playlist:
|
||||
appendToPlaylist();
|
||||
appendAllToPlaylist();
|
||||
return true;
|
||||
case R.id.action_settings:
|
||||
NavigationHelper.openSettings(this);
|
||||
@@ -187,13 +191,6 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
}
|
||||
|
||||
private void appendToPlaylist() {
|
||||
if (this.player != null && this.player.getPlayQueue() != null) {
|
||||
PlaylistAppendDialog.fromPlayQueueItems(this.player.getPlayQueue().getStreams())
|
||||
.show(getSupportFragmentManager(), getTag());
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Service Connection
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@@ -319,7 +316,8 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
|
||||
private void buildItemPopupMenu(final PlayQueueItem item, final View view) {
|
||||
final PopupMenu menu = new PopupMenu(this, view);
|
||||
final MenuItem remove = menu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 0, Menu.NONE, R.string.play_queue_remove);
|
||||
final MenuItem remove = menu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, /*pos=*/0,
|
||||
Menu.NONE, R.string.play_queue_remove);
|
||||
remove.setOnMenuItemClickListener(menuItem -> {
|
||||
if (player == null) return false;
|
||||
|
||||
@@ -328,12 +326,20 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
return true;
|
||||
});
|
||||
|
||||
final MenuItem detail = menu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, 1, Menu.NONE, R.string.play_queue_stream_detail);
|
||||
final MenuItem detail = menu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, /*pos=*/1,
|
||||
Menu.NONE, R.string.play_queue_stream_detail);
|
||||
detail.setOnMenuItemClickListener(menuItem -> {
|
||||
onOpenDetail(item.getServiceId(), item.getUrl(), item.getTitle());
|
||||
return true;
|
||||
});
|
||||
|
||||
final MenuItem append = menu.getMenu().add(RECYCLER_ITEM_POPUP_MENU_GROUP_ID, /*pos=*/2,
|
||||
Menu.NONE, R.string.append_playlist);
|
||||
append.setOnMenuItemClickListener(menuItem -> {
|
||||
openPlaylistAppendDialog(Collections.singletonList(item));
|
||||
return true;
|
||||
});
|
||||
|
||||
menu.show();
|
||||
}
|
||||
|
||||
@@ -488,6 +494,21 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
seeking = false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Playlist append
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private void appendAllToPlaylist() {
|
||||
if (player != null && player.getPlayQueue() != null) {
|
||||
openPlaylistAppendDialog(player.getPlayQueue().getStreams());
|
||||
}
|
||||
}
|
||||
|
||||
private void openPlaylistAppendDialog(final List<PlayQueueItem> playlist) {
|
||||
PlaylistAppendDialog.fromPlayQueueItems(playlist)
|
||||
.show(getSupportFragmentManager(), getTag());
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Binding Service Listener
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@@ -497,6 +518,7 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
onStateChanged(state);
|
||||
onPlayModeChanged(repeatMode, shuffled);
|
||||
onPlaybackParameterChanged(parameters);
|
||||
onMaybePlaybackAdapterChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -609,4 +631,12 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
|
||||
playbackPitchButton.setText(formatPitch(parameters.pitch));
|
||||
}
|
||||
}
|
||||
|
||||
private void onMaybePlaybackAdapterChanged() {
|
||||
if (itemsList == null || player == null) return;
|
||||
final PlayQueueAdapter maybeNewAdapter = player.getPlayQueueAdapter();
|
||||
if (maybeNewAdapter != null && itemsList.getAdapter() != maybeNewAdapter) {
|
||||
itemsList.setAdapter(maybeNewAdapter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@ import android.graphics.PorterDuff;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
@@ -55,6 +54,7 @@ import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.MergingMediaSource;
|
||||
import com.google.android.exoplayer2.source.TrackGroup;
|
||||
import com.google.android.exoplayer2.source.TrackGroupArray;
|
||||
import com.google.android.exoplayer2.text.CaptionStyleCompat;
|
||||
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
|
||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||
import com.google.android.exoplayer2.ui.SubtitleView;
|
||||
@@ -189,10 +189,10 @@ public abstract class VideoPlayer extends BasePlayer
|
||||
this.qualityTextView = rootView.findViewById(R.id.qualityTextView);
|
||||
|
||||
this.subtitleView = rootView.findViewById(R.id.subtitleView);
|
||||
final String captionSizeKey = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
.getString(context.getString(R.string.caption_size_key),
|
||||
context.getString(R.string.caption_size_default));
|
||||
setupSubtitleView(subtitleView, captionSizeKey);
|
||||
|
||||
final float captionScale = PlayerHelper.getCaptionScale(context);
|
||||
final CaptionStyleCompat captionStyle = PlayerHelper.getCaptionStyle(context);
|
||||
setupSubtitleView(subtitleView, captionScale, captionStyle);
|
||||
|
||||
this.resizeView = rootView.findViewById(R.id.resizeTextView);
|
||||
resizeView.setText(PlayerHelper.resizeTypeOf(context, aspectRatioFrameLayout.getResizeMode()));
|
||||
@@ -214,7 +214,8 @@ public abstract class VideoPlayer extends BasePlayer
|
||||
}
|
||||
|
||||
protected abstract void setupSubtitleView(@NonNull SubtitleView view,
|
||||
@NonNull String captionSizeKey);
|
||||
final float captionScale,
|
||||
@NonNull final CaptionStyleCompat captionStyle);
|
||||
|
||||
@Override
|
||||
public void initListeners() {
|
||||
@@ -228,8 +229,8 @@ public abstract class VideoPlayer extends BasePlayer
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initPlayer() {
|
||||
super.initPlayer();
|
||||
public void initPlayer(final boolean playOnReady) {
|
||||
super.initPlayer(playOnReady);
|
||||
|
||||
// Setup video view
|
||||
simpleExoPlayer.setVideoSurfaceView(surfaceView);
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package org.schabi.newpipe.player.helper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.media.session.MediaButtonReceiver;
|
||||
import android.support.v4.media.session.MediaSessionCompat;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
|
||||
@@ -15,8 +19,8 @@ import org.schabi.newpipe.player.mediasession.PlayQueuePlaybackController;
|
||||
public class MediaSessionManager {
|
||||
private static final String TAG = "MediaSessionManager";
|
||||
|
||||
private final MediaSessionCompat mediaSession;
|
||||
private final MediaSessionConnector sessionConnector;
|
||||
@NonNull private final MediaSessionCompat mediaSession;
|
||||
@NonNull private final MediaSessionConnector sessionConnector;
|
||||
|
||||
public MediaSessionManager(@NonNull final Context context,
|
||||
@NonNull final Player player,
|
||||
@@ -28,11 +32,9 @@ public class MediaSessionManager {
|
||||
this.sessionConnector.setPlayer(player, new DummyPlaybackPreparer());
|
||||
}
|
||||
|
||||
public MediaSessionCompat getMediaSession() {
|
||||
return mediaSession;
|
||||
}
|
||||
|
||||
public MediaSessionConnector getSessionConnector() {
|
||||
return sessionConnector;
|
||||
@Nullable
|
||||
@SuppressWarnings("UnusedReturnValue")
|
||||
public KeyEvent handleMediaButtonIntent(final Intent intent) {
|
||||
return MediaButtonReceiver.handleIntent(mediaSession, intent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,18 @@ package org.schabi.newpipe.player.helper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.view.accessibility.CaptioningManager;
|
||||
|
||||
import com.google.android.exoplayer2.SeekParameters;
|
||||
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
|
||||
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
||||
import com.google.android.exoplayer2.text.CaptionStyleCompat;
|
||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||
import com.google.android.exoplayer2.upstream.BandwidthMeter;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
@@ -203,6 +209,16 @@ public class PlayerHelper {
|
||||
return 60000;
|
||||
}
|
||||
|
||||
public static TrackSelection.Factory getQualitySelector(@NonNull final Context context,
|
||||
@NonNull final BandwidthMeter meter) {
|
||||
return new AdaptiveTrackSelection.Factory(meter,
|
||||
AdaptiveTrackSelection.DEFAULT_MAX_INITIAL_BITRATE,
|
||||
/*bufferDurationRequiredForQualityIncrease=*/1000,
|
||||
AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS,
|
||||
AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS,
|
||||
AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION);
|
||||
}
|
||||
|
||||
public static boolean isUsingDSP(@NonNull final Context context) {
|
||||
return true;
|
||||
}
|
||||
@@ -215,6 +231,35 @@ public class PlayerHelper {
|
||||
return 2500;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static CaptionStyleCompat getCaptionStyle(@NonNull final Context context) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return CaptionStyleCompat.DEFAULT;
|
||||
|
||||
final CaptioningManager captioningManager = (CaptioningManager)
|
||||
context.getSystemService(Context.CAPTIONING_SERVICE);
|
||||
if (captioningManager == null || !captioningManager.isEnabled()) {
|
||||
return CaptionStyleCompat.DEFAULT;
|
||||
}
|
||||
|
||||
return CaptionStyleCompat.createFromCaptionStyle(captioningManager.getUserStyle());
|
||||
}
|
||||
|
||||
/**
|
||||
* System font scaling:
|
||||
* Very small - 0.25f, Small - 0.5f, Normal - 1.0f, Large - 1.5f, Very Large - 2.0f
|
||||
* */
|
||||
@NonNull
|
||||
public static float getCaptionScale(@NonNull final Context context) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return 1f;
|
||||
|
||||
final CaptioningManager captioningManager = (CaptioningManager)
|
||||
context.getSystemService(Context.CAPTIONING_SERVICE);
|
||||
if (captioningManager == null || !captioningManager.isEnabled()) {
|
||||
return 1f;
|
||||
}
|
||||
|
||||
return captioningManager.getFontScale();
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Private helpers
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -14,13 +14,35 @@ import java.io.IOException;
|
||||
public class FailedMediaSource implements ManagedMediaSource {
|
||||
private final String TAG = "FailedMediaSource@" + Integer.toHexString(hashCode());
|
||||
|
||||
public static class FailedMediaSourceException extends Exception {
|
||||
FailedMediaSourceException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
FailedMediaSourceException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class MediaSourceResolutionException extends FailedMediaSourceException {
|
||||
public MediaSourceResolutionException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static final class StreamInfoLoadException extends FailedMediaSourceException {
|
||||
public StreamInfoLoadException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
|
||||
private final PlayQueueItem playQueueItem;
|
||||
private final Throwable error;
|
||||
private final FailedMediaSourceException error;
|
||||
|
||||
private final long retryTimestamp;
|
||||
|
||||
public FailedMediaSource(@NonNull final PlayQueueItem playQueueItem,
|
||||
@NonNull final Throwable error,
|
||||
@NonNull final FailedMediaSourceException error,
|
||||
final long retryTimestamp) {
|
||||
this.playQueueItem = playQueueItem;
|
||||
this.error = error;
|
||||
@@ -32,7 +54,7 @@ public class FailedMediaSource implements ManagedMediaSource {
|
||||
* The error will always be propagated to ExoPlayer.
|
||||
* */
|
||||
public FailedMediaSource(@NonNull final PlayQueueItem playQueueItem,
|
||||
@NonNull final Throwable error) {
|
||||
@NonNull final FailedMediaSourceException error) {
|
||||
this.playQueueItem = playQueueItem;
|
||||
this.error = error;
|
||||
this.retryTimestamp = Long.MAX_VALUE;
|
||||
@@ -42,7 +64,7 @@ public class FailedMediaSource implements ManagedMediaSource {
|
||||
return playQueueItem;
|
||||
}
|
||||
|
||||
public Throwable getError() {
|
||||
public FailedMediaSourceException getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
package org.schabi.newpipe.player.mediasource;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.google.android.exoplayer2.source.DynamicConcatenatingMediaSource;
|
||||
import com.google.android.exoplayer2.source.ShuffleOrder;
|
||||
|
||||
public class ManagedMediaSourcePlaylist {
|
||||
@NonNull private final DynamicConcatenatingMediaSource internalSource;
|
||||
|
||||
public ManagedMediaSourcePlaylist() {
|
||||
internalSource = new DynamicConcatenatingMediaSource(/*isPlaylistAtomic=*/false,
|
||||
new ShuffleOrder.UnshuffledShuffleOrder(0));
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// MediaSource Delegations
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
public int size() {
|
||||
return internalSource.getSize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link ManagedMediaSource} at the given index of the playlist.
|
||||
* If the index is invalid, then null is returned.
|
||||
* */
|
||||
@Nullable
|
||||
public ManagedMediaSource get(final int index) {
|
||||
return (index < 0 || index >= size()) ?
|
||||
null : (ManagedMediaSource) internalSource.getMediaSource(index);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
internalSource.releaseSource();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public DynamicConcatenatingMediaSource getParentMediaSource() {
|
||||
return internalSource;
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Playlist Manipulation
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
/**
|
||||
* Expands the {@link DynamicConcatenatingMediaSource} by appending it with a
|
||||
* {@link PlaceholderMediaSource}.
|
||||
*
|
||||
* @see #append(ManagedMediaSource)
|
||||
* */
|
||||
public synchronized void expand() {
|
||||
append(new PlaceholderMediaSource());
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a {@link ManagedMediaSource} to the end of {@link DynamicConcatenatingMediaSource}.
|
||||
* @see DynamicConcatenatingMediaSource#addMediaSource
|
||||
* */
|
||||
public synchronized void append(@NonNull final ManagedMediaSource source) {
|
||||
internalSource.addMediaSource(source);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a {@link ManagedMediaSource} from {@link DynamicConcatenatingMediaSource}
|
||||
* at the given index. If this index is out of bound, then the removal is ignored.
|
||||
* @see DynamicConcatenatingMediaSource#removeMediaSource(int)
|
||||
* */
|
||||
public synchronized void remove(final int index) {
|
||||
if (index < 0 || index > internalSource.getSize()) return;
|
||||
|
||||
internalSource.removeMediaSource(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves a {@link ManagedMediaSource} in {@link DynamicConcatenatingMediaSource}
|
||||
* from the given source index to the target index. If either index is out of bound,
|
||||
* then the call is ignored.
|
||||
* @see DynamicConcatenatingMediaSource#moveMediaSource(int, int)
|
||||
* */
|
||||
public synchronized void move(final int source, final int target) {
|
||||
if (source < 0 || target < 0) return;
|
||||
if (source >= internalSource.getSize() || target >= internalSource.getSize()) return;
|
||||
|
||||
internalSource.moveMediaSource(source, target);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidates the {@link ManagedMediaSource} at the given index by replacing it
|
||||
* with a {@link PlaceholderMediaSource}.
|
||||
* @see #update(int, ManagedMediaSource, Runnable)
|
||||
* */
|
||||
public synchronized void invalidate(final int index,
|
||||
@Nullable final Runnable finalizingAction) {
|
||||
if (get(index) instanceof PlaceholderMediaSource) return;
|
||||
update(index, new PlaceholderMediaSource(), finalizingAction);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the {@link ManagedMediaSource} in {@link DynamicConcatenatingMediaSource}
|
||||
* at the given index with a given {@link ManagedMediaSource}.
|
||||
* @see #update(int, ManagedMediaSource, Runnable)
|
||||
* */
|
||||
public synchronized void update(final int index, @NonNull final ManagedMediaSource source) {
|
||||
update(index, source, /*doNothing=*/null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the {@link ManagedMediaSource} in {@link DynamicConcatenatingMediaSource}
|
||||
* at the given index with a given {@link ManagedMediaSource}. If the index is out of bound,
|
||||
* then the replacement is ignored.
|
||||
* @see DynamicConcatenatingMediaSource#addMediaSource
|
||||
* @see DynamicConcatenatingMediaSource#removeMediaSource(int, Runnable)
|
||||
* */
|
||||
public synchronized void update(final int index, @NonNull final ManagedMediaSource source,
|
||||
@Nullable final Runnable finalizingAction) {
|
||||
if (index < 0 || index >= internalSource.getSize()) return;
|
||||
|
||||
// Add and remove are sequential on the same thread, therefore here, the exoplayer
|
||||
// message queue must receive and process add before remove, effectively treating them
|
||||
// as atomic.
|
||||
|
||||
// Since the finalizing action occurs strictly after the timeline has completed
|
||||
// all its changes on the playback thread, thus, it is possible, in the meantime,
|
||||
// other calls that modifies the playlist media source occur in between. This makes
|
||||
// it unsafe to call remove as the finalizing action of add.
|
||||
internalSource.addMediaSource(index + 1, source);
|
||||
|
||||
// Because of the above race condition, it is thus only safe to synchronize the player
|
||||
// in the finalizing action AFTER the removal is complete and the timeline has changed.
|
||||
internalSource.removeMediaSource(index, finalizingAction);
|
||||
}
|
||||
}
|
||||
@@ -2,11 +2,11 @@ package org.schabi.newpipe.player.playback;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.ArraySet;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.android.exoplayer2.source.DynamicConcatenatingMediaSource;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.ShuffleOrder;
|
||||
|
||||
import org.reactivestreams.Subscriber;
|
||||
import org.reactivestreams.Subscription;
|
||||
@@ -14,6 +14,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||
import org.schabi.newpipe.player.mediasource.FailedMediaSource;
|
||||
import org.schabi.newpipe.player.mediasource.LoadedMediaSource;
|
||||
import org.schabi.newpipe.player.mediasource.ManagedMediaSource;
|
||||
import org.schabi.newpipe.player.mediasource.ManagedMediaSourcePlaylist;
|
||||
import org.schabi.newpipe.player.mediasource.PlaceholderMediaSource;
|
||||
import org.schabi.newpipe.playlist.PlayQueue;
|
||||
import org.schabi.newpipe.playlist.PlayQueueItem;
|
||||
@@ -23,8 +24,10 @@ import org.schabi.newpipe.playlist.events.RemoveEvent;
|
||||
import org.schabi.newpipe.playlist.events.ReorderEvent;
|
||||
import org.schabi.newpipe.util.ServiceHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
@@ -37,8 +40,11 @@ import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.disposables.SerialDisposable;
|
||||
import io.reactivex.functions.Consumer;
|
||||
import io.reactivex.internal.subscriptions.EmptySubscription;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import io.reactivex.subjects.PublishSubject;
|
||||
|
||||
import static org.schabi.newpipe.player.mediasource.FailedMediaSource.MediaSourceResolutionException;
|
||||
import static org.schabi.newpipe.player.mediasource.FailedMediaSource.StreamInfoLoadException;
|
||||
import static org.schabi.newpipe.playlist.PlayQueue.DEBUG;
|
||||
|
||||
public class MediaSourceManager {
|
||||
@@ -52,7 +58,6 @@ public class MediaSourceManager {
|
||||
* streams before will only be cached for future usage.
|
||||
*
|
||||
* @see #onMediaSourceReceived(PlayQueueItem, ManagedMediaSource)
|
||||
* @see #update(int, MediaSource, Runnable)
|
||||
* */
|
||||
private final static int WINDOW_SIZE = 1;
|
||||
|
||||
@@ -103,7 +108,7 @@ public class MediaSourceManager {
|
||||
|
||||
@NonNull private final AtomicBoolean isBlocked;
|
||||
|
||||
@NonNull private DynamicConcatenatingMediaSource sources;
|
||||
@NonNull private ManagedMediaSourcePlaylist playlist;
|
||||
|
||||
public MediaSourceManager(@NonNull final PlaybackListener listener,
|
||||
@NonNull final PlayQueue playQueue) {
|
||||
@@ -143,9 +148,9 @@ public class MediaSourceManager {
|
||||
|
||||
this.isBlocked = new AtomicBoolean(false);
|
||||
|
||||
this.sources = new DynamicConcatenatingMediaSource();
|
||||
this.playlist = new ManagedMediaSourcePlaylist();
|
||||
|
||||
this.loadingItems = Collections.synchronizedSet(new HashSet<>());
|
||||
this.loadingItems = Collections.synchronizedSet(new ArraySet<>());
|
||||
|
||||
playQueue.getBroadcastReceiver()
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
@@ -167,7 +172,7 @@ public class MediaSourceManager {
|
||||
playQueueReactor.cancel();
|
||||
loaderReactor.dispose();
|
||||
syncReactor.dispose();
|
||||
sources.releaseSource();
|
||||
playlist.dispose();
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -215,17 +220,18 @@ public class MediaSourceManager {
|
||||
break;
|
||||
case REMOVE:
|
||||
final RemoveEvent removeEvent = (RemoveEvent) event;
|
||||
remove(removeEvent.getRemoveIndex());
|
||||
playlist.remove(removeEvent.getRemoveIndex());
|
||||
break;
|
||||
case MOVE:
|
||||
final MoveEvent moveEvent = (MoveEvent) event;
|
||||
move(moveEvent.getFromIndex(), moveEvent.getToIndex());
|
||||
playlist.move(moveEvent.getFromIndex(), moveEvent.getToIndex());
|
||||
break;
|
||||
case REORDER:
|
||||
// Need to move to ensure the playing index from play queue matches that of
|
||||
// the source timeline, and then window correction can take care of the rest
|
||||
final ReorderEvent reorderEvent = (ReorderEvent) event;
|
||||
move(reorderEvent.getFromSelectedIndex(), reorderEvent.getToSelectedIndex());
|
||||
playlist.move(reorderEvent.getFromSelectedIndex(),
|
||||
reorderEvent.getToSelectedIndex());
|
||||
break;
|
||||
case RECOVERY:
|
||||
default:
|
||||
@@ -266,10 +272,11 @@ public class MediaSourceManager {
|
||||
}
|
||||
|
||||
private boolean isPlaybackReady() {
|
||||
if (sources.getSize() != playQueue.size()) return false;
|
||||
if (playlist.size() != playQueue.size()) return false;
|
||||
|
||||
final ManagedMediaSource mediaSource = playlist.get(playQueue.getIndex());
|
||||
if (mediaSource == null) return false;
|
||||
|
||||
final ManagedMediaSource mediaSource =
|
||||
(ManagedMediaSource) sources.getMediaSource(playQueue.getIndex());
|
||||
final PlayQueueItem playQueueItem = playQueue.getItem();
|
||||
return mediaSource.isStreamEqual(playQueueItem);
|
||||
}
|
||||
@@ -288,9 +295,9 @@ public class MediaSourceManager {
|
||||
private void maybeUnblock() {
|
||||
if (DEBUG) Log.d(TAG, "maybeUnblock() called.");
|
||||
|
||||
if (isPlayQueueReady() && isPlaybackReady() && isBlocked.get()) {
|
||||
if (isBlocked.get()) {
|
||||
isBlocked.set(false);
|
||||
playbackListener.onPlaybackUnblock(sources);
|
||||
playbackListener.onPlaybackUnblock(playlist.getParentMediaSource());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,10 +306,10 @@ public class MediaSourceManager {
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
private void maybeSync() {
|
||||
if (DEBUG) Log.d(TAG, "onPlaybackSynchronize() called.");
|
||||
if (DEBUG) Log.d(TAG, "maybeSync() called.");
|
||||
|
||||
final PlayQueueItem currentItem = playQueue.getItem();
|
||||
if (isBlocked.get() || !isPlaybackReady() || currentItem == null) return;
|
||||
if (isBlocked.get() || currentItem == null) return;
|
||||
|
||||
final Consumer<StreamInfo> onSuccess = info -> syncInternal(currentItem, info);
|
||||
final Consumer<Throwable> onError = throwable -> syncInternal(currentItem, null);
|
||||
@@ -321,9 +328,11 @@ public class MediaSourceManager {
|
||||
}
|
||||
}
|
||||
|
||||
private void maybeSynchronizePlayer() {
|
||||
maybeUnblock();
|
||||
maybeSync();
|
||||
private synchronized void maybeSynchronizePlayer() {
|
||||
if (isPlayQueueReady() && isPlaybackReady()) {
|
||||
maybeUnblock();
|
||||
maybeSync();
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -332,12 +341,14 @@ public class MediaSourceManager {
|
||||
|
||||
private Observable<Long> getEdgeIntervalSignal() {
|
||||
return Observable.interval(progressUpdateIntervalMillis, TimeUnit.MILLISECONDS)
|
||||
.filter(ignored -> playbackListener.isNearPlaybackEdge(playbackNearEndGapMillis));
|
||||
.filter(ignored ->
|
||||
playbackListener.isApproachingPlaybackEdge(playbackNearEndGapMillis));
|
||||
}
|
||||
|
||||
private Disposable getDebouncedLoader() {
|
||||
return debouncedSignal.mergeWith(nearEndIntervalSignal)
|
||||
.debounce(loadDebounceMillis, TimeUnit.MILLISECONDS)
|
||||
.subscribeOn(Schedulers.single())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(timestamp -> loadImmediate());
|
||||
}
|
||||
@@ -348,42 +359,21 @@ public class MediaSourceManager {
|
||||
|
||||
private void loadImmediate() {
|
||||
if (DEBUG) Log.d(TAG, "MediaSource - loadImmediate() called");
|
||||
// The current item has higher priority
|
||||
final int currentIndex = playQueue.getIndex();
|
||||
final PlayQueueItem currentItem = playQueue.getItem(currentIndex);
|
||||
if (currentItem == null) return;
|
||||
final ItemsToLoad itemsToLoad = getItemsToLoad(playQueue, WINDOW_SIZE);
|
||||
if (itemsToLoad == null) return;
|
||||
|
||||
// Evict the items being loaded to free up memory
|
||||
if (loaderReactor.size() > MAXIMUM_LOADER_SIZE) {
|
||||
loaderReactor.clear();
|
||||
loadingItems.clear();
|
||||
}
|
||||
maybeLoadItem(currentItem);
|
||||
// Evict the previous items being loaded to free up memory, before start loading new ones
|
||||
maybeClearLoaders();
|
||||
|
||||
// The rest are just for seamless playback
|
||||
// Although timeline is not updated prior to the current index, these sources are still
|
||||
// loaded into the cache for faster retrieval at a potentially later time.
|
||||
final int leftBound = Math.max(0, currentIndex - WINDOW_SIZE);
|
||||
final int rightLimit = currentIndex + WINDOW_SIZE + 1;
|
||||
final int rightBound = Math.min(playQueue.size(), rightLimit);
|
||||
final Set<PlayQueueItem> items = new HashSet<>(
|
||||
playQueue.getStreams().subList(leftBound,rightBound));
|
||||
|
||||
// Do a round robin
|
||||
final int excess = rightLimit - playQueue.size();
|
||||
if (excess >= 0) {
|
||||
items.addAll(playQueue.getStreams().subList(0, Math.min(playQueue.size(), excess)));
|
||||
}
|
||||
items.remove(currentItem);
|
||||
|
||||
for (final PlayQueueItem item : items) {
|
||||
maybeLoadItem(itemsToLoad.center);
|
||||
for (final PlayQueueItem item : itemsToLoad.neighbors) {
|
||||
maybeLoadItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
private void maybeLoadItem(@NonNull final PlayQueueItem item) {
|
||||
if (DEBUG) Log.d(TAG, "maybeLoadItem() called.");
|
||||
if (playQueue.indexOf(item) >= sources.getSize()) return;
|
||||
if (playQueue.indexOf(item) >= playlist.size()) return;
|
||||
|
||||
if (!loadingItems.contains(item) && isCorrectionNeeded(item)) {
|
||||
if (DEBUG) Log.d(TAG, "MediaSource - Loading=[" + item.getTitle() +
|
||||
@@ -402,19 +392,19 @@ public class MediaSourceManager {
|
||||
return stream.getStream().map(streamInfo -> {
|
||||
final MediaSource source = playbackListener.sourceOf(stream, streamInfo);
|
||||
if (source == null) {
|
||||
final Exception exception = new IllegalStateException(
|
||||
"Unable to resolve source from stream info." +
|
||||
" URL: " + stream.getUrl() +
|
||||
", audio count: " + streamInfo.getAudioStreams().size() +
|
||||
", video count: " + streamInfo.getVideoOnlyStreams().size() +
|
||||
streamInfo.getVideoStreams().size());
|
||||
return new FailedMediaSource(stream, exception);
|
||||
final String message = "Unable to resolve source from stream info." +
|
||||
" URL: " + stream.getUrl() +
|
||||
", audio count: " + streamInfo.getAudioStreams().size() +
|
||||
", video count: " + streamInfo.getVideoOnlyStreams().size() +
|
||||
streamInfo.getVideoStreams().size();
|
||||
return new FailedMediaSource(stream, new MediaSourceResolutionException(message));
|
||||
}
|
||||
|
||||
final long expiration = System.currentTimeMillis() +
|
||||
ServiceHelper.getCacheExpirationMillis(streamInfo.getServiceId());
|
||||
return new LoadedMediaSource(source, stream, expiration);
|
||||
}).onErrorReturn(throwable -> new FailedMediaSource(stream, throwable));
|
||||
}).onErrorReturn(throwable -> new FailedMediaSource(stream,
|
||||
new StreamInfoLoadException(throwable)));
|
||||
}
|
||||
|
||||
private void onMediaSourceReceived(@NonNull final PlayQueueItem item,
|
||||
@@ -426,10 +416,10 @@ public class MediaSourceManager {
|
||||
|
||||
final int itemIndex = playQueue.indexOf(item);
|
||||
// Only update the playlist timeline for items at the current index or after.
|
||||
if (itemIndex >= playQueue.getIndex() && isCorrectionNeeded(item)) {
|
||||
if (isCorrectionNeeded(item)) {
|
||||
if (DEBUG) Log.d(TAG, "MediaSource - Updating index=[" + itemIndex + "] with " +
|
||||
"title=[" + item.getTitle() + "] at url=[" + item.getUrl() + "]");
|
||||
update(itemIndex, mediaSource, this::maybeSynchronizePlayer);
|
||||
playlist.update(itemIndex, mediaSource, this::maybeSynchronizePlayer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -445,10 +435,8 @@ public class MediaSourceManager {
|
||||
* */
|
||||
private boolean isCorrectionNeeded(@NonNull final PlayQueueItem item) {
|
||||
final int index = playQueue.indexOf(item);
|
||||
if (index == -1 || index >= sources.getSize()) return false;
|
||||
|
||||
final ManagedMediaSource mediaSource = (ManagedMediaSource) sources.getMediaSource(index);
|
||||
return mediaSource.shouldBeReplacedWith(item,
|
||||
final ManagedMediaSource mediaSource = playlist.get(index);
|
||||
return mediaSource != null && mediaSource.shouldBeReplacedWith(item,
|
||||
/*mightBeInProgress=*/index != playQueue.getIndex());
|
||||
}
|
||||
|
||||
@@ -465,10 +453,9 @@ public class MediaSourceManager {
|
||||
* */
|
||||
private void maybeRenewCurrentIndex() {
|
||||
final int currentIndex = playQueue.getIndex();
|
||||
if (sources.getSize() <= currentIndex) return;
|
||||
final ManagedMediaSource currentSource = playlist.get(currentIndex);
|
||||
if (currentSource == null) return;
|
||||
|
||||
final ManagedMediaSource currentSource =
|
||||
(ManagedMediaSource) sources.getMediaSource(currentIndex);
|
||||
final PlayQueueItem currentItem = playQueue.getItem();
|
||||
if (!currentSource.shouldBeReplacedWith(currentItem, /*canInterruptOnRenew=*/true)) {
|
||||
maybeSynchronizePlayer();
|
||||
@@ -477,7 +464,16 @@ public class MediaSourceManager {
|
||||
|
||||
if (DEBUG) Log.d(TAG, "MediaSource - Reloading currently playing, " +
|
||||
"index=[" + currentIndex + "], item=[" + currentItem.getTitle() + "]");
|
||||
update(currentIndex, new PlaceholderMediaSource(), this::loadImmediate);
|
||||
playlist.invalidate(currentIndex, this::loadImmediate);
|
||||
}
|
||||
|
||||
private void maybeClearLoaders() {
|
||||
if (DEBUG) Log.d(TAG, "MediaSource - maybeClearLoaders() called.");
|
||||
if (!loadingItems.contains(playQueue.getItem()) &&
|
||||
loaderReactor.size() > MAXIMUM_LOADER_SIZE) {
|
||||
loaderReactor.clear();
|
||||
loadingItems.clear();
|
||||
}
|
||||
}
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// MediaSource Playlist Helpers
|
||||
@@ -486,72 +482,55 @@ public class MediaSourceManager {
|
||||
private void resetSources() {
|
||||
if (DEBUG) Log.d(TAG, "resetSources() called.");
|
||||
|
||||
this.sources.releaseSource();
|
||||
this.sources = new DynamicConcatenatingMediaSource(false,
|
||||
// Shuffling is done on PlayQueue, thus no need to use ExoPlayer's shuffle order
|
||||
new ShuffleOrder.UnshuffledShuffleOrder(0));
|
||||
playlist.dispose();
|
||||
playlist = new ManagedMediaSourcePlaylist();
|
||||
}
|
||||
|
||||
private void populateSources() {
|
||||
if (DEBUG) Log.d(TAG, "populateSources() called.");
|
||||
if (sources.getSize() >= playQueue.size()) return;
|
||||
|
||||
for (int index = sources.getSize() - 1; index < playQueue.size(); index++) {
|
||||
emplace(index, new PlaceholderMediaSource());
|
||||
while (playlist.size() < playQueue.size()) {
|
||||
playlist.expand();
|
||||
}
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// MediaSource Playlist Manipulation
|
||||
// Manager Helpers
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
@Nullable
|
||||
private static ItemsToLoad getItemsToLoad(@NonNull final PlayQueue playQueue,
|
||||
final int windowSize) {
|
||||
// The current item has higher priority
|
||||
final int currentIndex = playQueue.getIndex();
|
||||
final PlayQueueItem currentItem = playQueue.getItem(currentIndex);
|
||||
if (currentItem == null) return null;
|
||||
|
||||
/**
|
||||
* Places a {@link MediaSource} into the {@link DynamicConcatenatingMediaSource}
|
||||
* with position in respect to the play queue only if no {@link MediaSource}
|
||||
* already exists at the given index.
|
||||
* */
|
||||
private synchronized void emplace(final int index, @NonNull final MediaSource source) {
|
||||
if (index < sources.getSize()) return;
|
||||
// The rest are just for seamless playback
|
||||
// Although timeline is not updated prior to the current index, these sources are still
|
||||
// loaded into the cache for faster retrieval at a potentially later time.
|
||||
final int leftBound = Math.max(0, currentIndex - windowSize);
|
||||
final int rightLimit = currentIndex + windowSize + 1;
|
||||
final int rightBound = Math.min(playQueue.size(), rightLimit);
|
||||
final Set<PlayQueueItem> neighbors = new ArraySet<>(
|
||||
playQueue.getStreams().subList(leftBound,rightBound));
|
||||
|
||||
sources.addMediaSource(index, source);
|
||||
// Do a round robin
|
||||
final int excess = rightLimit - playQueue.size();
|
||||
if (excess >= 0) {
|
||||
neighbors.addAll(playQueue.getStreams().subList(0, Math.min(playQueue.size(), excess)));
|
||||
}
|
||||
neighbors.remove(currentItem);
|
||||
|
||||
return new ItemsToLoad(currentItem, neighbors);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a {@link MediaSource} from {@link DynamicConcatenatingMediaSource}
|
||||
* at the given index. If this index is out of bound, then the removal is ignored.
|
||||
* */
|
||||
private synchronized void remove(final int index) {
|
||||
if (index < 0 || index > sources.getSize()) return;
|
||||
private static class ItemsToLoad {
|
||||
@NonNull final private PlayQueueItem center;
|
||||
@NonNull final private Collection<PlayQueueItem> neighbors;
|
||||
|
||||
sources.removeMediaSource(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves a {@link MediaSource} in {@link DynamicConcatenatingMediaSource}
|
||||
* from the given source index to the target index. If either index is out of bound,
|
||||
* then the call is ignored.
|
||||
* */
|
||||
private synchronized void move(final int source, final int target) {
|
||||
if (source < 0 || target < 0) return;
|
||||
if (source >= sources.getSize() || target >= sources.getSize()) return;
|
||||
|
||||
sources.moveMediaSource(source, target);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the {@link MediaSource} in {@link DynamicConcatenatingMediaSource}
|
||||
* at the given index with a given {@link MediaSource}. If the index is out of bound,
|
||||
* then the replacement is ignored.
|
||||
* <br><br>
|
||||
* Not recommended to use on indices LESS THAN the currently playing index, since
|
||||
* this will modify the playback timeline prior to the index and may cause desynchronization
|
||||
* on the playing item between {@link PlayQueue} and {@link DynamicConcatenatingMediaSource}.
|
||||
* */
|
||||
private synchronized void update(final int index, @NonNull final MediaSource source,
|
||||
@Nullable final Runnable finalizingAction) {
|
||||
if (index < 0 || index >= sources.getSize()) return;
|
||||
|
||||
sources.addMediaSource(index + 1, source, () ->
|
||||
sources.removeMediaSource(index, finalizingAction));
|
||||
ItemsToLoad(@NonNull final PlayQueueItem center,
|
||||
@NonNull final Collection<PlayQueueItem> neighbors) {
|
||||
this.center = center;
|
||||
this.neighbors = neighbors;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,13 +13,13 @@ import java.util.List;
|
||||
public interface PlaybackListener {
|
||||
|
||||
/**
|
||||
* Called to check if the currently playing stream is close to the end of its playback.
|
||||
* Implementation should return true when the current playback position is within
|
||||
* timeToEndMillis or less until its playback completes or transitions.
|
||||
* Called to check if the currently playing stream is approaching the end of its playback.
|
||||
* Implementation should return true when the current playback position is progressing within
|
||||
* timeToEndMillis or less to its playback during.
|
||||
*
|
||||
* May be called at any time.
|
||||
* */
|
||||
boolean isNearPlaybackEdge(final long timeToEndMillis);
|
||||
boolean isApproachingPlaybackEdge(final long timeToEndMillis);
|
||||
|
||||
/**
|
||||
* Called when the stream at the current queue index is not ready yet.
|
||||
|
||||
@@ -28,12 +28,12 @@ public class PlayQueueItem implements Serializable {
|
||||
private long recoveryPosition;
|
||||
private Throwable error;
|
||||
|
||||
private transient Single<StreamInfo> stream;
|
||||
|
||||
PlayQueueItem(@NonNull final StreamInfo info) {
|
||||
this(info.getName(), info.getUrl(), info.getServiceId(), info.getDuration(),
|
||||
info.getThumbnailUrl(), info.getUploaderName(), info.getStreamType());
|
||||
this.stream = Single.just(info);
|
||||
|
||||
if (info.getStartPosition() > 0)
|
||||
setRecoveryPosition(info.getStartPosition() * 1000);
|
||||
}
|
||||
|
||||
PlayQueueItem(@NonNull final StreamInfoItem item) {
|
||||
@@ -100,11 +100,6 @@ public class PlayQueueItem implements Serializable {
|
||||
|
||||
@NonNull
|
||||
public Single<StreamInfo> getStream() {
|
||||
return stream == null ? stream = getInfo() : stream;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Single<StreamInfo> getInfo() {
|
||||
return ExtractorHelper.getStreamInfo(this.serviceId, this.url, false)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.doOnError(throwable -> error = throwable);
|
||||
|
||||
@@ -89,7 +89,8 @@ public class ErrorActivity extends AppCompatActivity {
|
||||
private TextView errorMessageView;
|
||||
|
||||
public static void reportUiError(final AppCompatActivity activity, final Throwable el) {
|
||||
reportError(activity, el, activity.getClass(), null, ErrorInfo.make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
|
||||
reportError(activity, el, activity.getClass(), null,
|
||||
ErrorInfo.make(UserAction.UI_ERROR, "none", "", R.string.app_ui_crash));
|
||||
}
|
||||
|
||||
public static void reportError(final Context context, final List<Throwable> el,
|
||||
@@ -97,12 +98,8 @@ public class ErrorActivity extends AppCompatActivity {
|
||||
if (rootView != null) {
|
||||
Snackbar.make(rootView, R.string.error_snackbar_message, 15 * 1000)
|
||||
.setActionTextColor(Color.YELLOW)
|
||||
.setAction(R.string.error_snackbar_action, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
startErrorActivity(returnActivity, context, errorInfo, el);
|
||||
}
|
||||
}).show();
|
||||
.setAction(R.string.error_snackbar_action, v ->
|
||||
startErrorActivity(returnActivity, context, errorInfo, el)).show();
|
||||
} else {
|
||||
startErrorActivity(returnActivity, context, errorInfo, el);
|
||||
}
|
||||
@@ -220,7 +217,6 @@ public class ErrorActivity extends AppCompatActivity {
|
||||
|
||||
startActivity(Intent.createChooser(i, "Send Email"));
|
||||
});
|
||||
reportButton.setEnabled(false);
|
||||
|
||||
// normal bugreport
|
||||
buildInfo(errorInfo);
|
||||
|
||||
@@ -13,7 +13,8 @@ public enum UserAction {
|
||||
GET_SUGGESTIONS("get suggestions"),
|
||||
REQUESTED_STREAM("requested stream"),
|
||||
REQUESTED_CHANNEL("requested channel"),
|
||||
REQUESTED_PLAYLIST("requested playlist");
|
||||
REQUESTED_PLAYLIST("requested playlist"),
|
||||
REQUESTED_KIOSK("requested kiosk");
|
||||
|
||||
|
||||
private final String message;
|
||||
|
||||
@@ -1,17 +1,25 @@
|
||||
package org.schabi.newpipe.settings;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.util.Log;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.util.Constants;
|
||||
|
||||
public class AppearanceSettingsFragment extends BasePreferenceFragment {
|
||||
private final static boolean CAPTIONING_SETTINGS_ACCESSIBLE =
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
|
||||
|
||||
/**
|
||||
* Theme that was applied when the settings was opened (or recreated after a theme change)
|
||||
*/
|
||||
private String startThemeKey;
|
||||
private String captionSettingsKey;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@@ -19,6 +27,12 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment {
|
||||
String themeKey = getString(R.string.theme_key);
|
||||
startThemeKey = defaultPreferences.getString(themeKey, getString(R.string.default_theme_value));
|
||||
findPreference(themeKey).setOnPreferenceChangeListener(themePreferenceChange);
|
||||
|
||||
captionSettingsKey = getString(R.string.caption_settings_key);
|
||||
if (!CAPTIONING_SETTINGS_ACCESSIBLE) {
|
||||
final Preference captionSettings = findPreference(captionSettingsKey);
|
||||
getPreferenceScreen().removePreference(captionSettings);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -26,13 +40,23 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment {
|
||||
addPreferencesFromResource(R.xml.appearance_settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(Preference preference) {
|
||||
if (preference.getKey().equals(captionSettingsKey) && CAPTIONING_SETTINGS_ACCESSIBLE) {
|
||||
startActivity(new Intent(Settings.ACTION_CAPTIONING_SETTINGS));
|
||||
}
|
||||
|
||||
return super.onPreferenceTreeClick(preference);
|
||||
}
|
||||
|
||||
private Preference.OnPreferenceChangeListener themePreferenceChange = new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
defaultPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, true).apply();
|
||||
defaultPreferences.edit().putString(getString(R.string.theme_key), newValue.toString()).apply();
|
||||
|
||||
if (!newValue.equals(startThemeKey)) { // If it's not the current theme
|
||||
if (!newValue.equals(startThemeKey) && getActivity() != null) {
|
||||
// If it's not the current theme
|
||||
getActivity().recreate();
|
||||
}
|
||||
|
||||
|
||||
@@ -428,7 +428,7 @@ public class NavigationHelper {
|
||||
}
|
||||
|
||||
public static boolean openDownloads(Activity activity) {
|
||||
if (!PermissionHelper.checkStoragePermissions(activity)) {
|
||||
if (!PermissionHelper.checkStoragePermissions(activity, PermissionHelper.DOWNLOADS_REQUEST_CODE)) {
|
||||
return false;
|
||||
}
|
||||
Intent intent = new Intent(activity, DownloadActivity.class);
|
||||
@@ -475,7 +475,6 @@ public class NavigationHelper {
|
||||
throw new ExtractionException("Url not known to service. service=" + service + " url=" + url);
|
||||
}
|
||||
|
||||
url = getCleanUrl(service, url, linkType);
|
||||
Intent rIntent = getOpenIntent(context, url, service.getServiceId(), linkType);
|
||||
|
||||
switch (linkType) {
|
||||
@@ -488,20 +487,6 @@ public class NavigationHelper {
|
||||
return rIntent;
|
||||
}
|
||||
|
||||
public static String getCleanUrl(StreamingService service, String dirtyUrl, StreamingService.LinkType linkType) throws ExtractionException {
|
||||
switch (linkType) {
|
||||
case STREAM:
|
||||
return service.getStreamUrlIdHandler().cleanUrl(dirtyUrl);
|
||||
case CHANNEL:
|
||||
return service.getChannelUrlIdHandler().cleanUrl(dirtyUrl);
|
||||
case PLAYLIST:
|
||||
return service.getPlaylistUrlIdHandler().cleanUrl(dirtyUrl);
|
||||
case NONE:
|
||||
break;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Uri openMarketUrl(String packageName) {
|
||||
return Uri.parse("market://details")
|
||||
.buildUpon()
|
||||
|
||||
@@ -18,26 +18,26 @@ import android.widget.Toast;
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
public class PermissionHelper {
|
||||
public static final int PERMISSION_WRITE_STORAGE = 778;
|
||||
public static final int PERMISSION_READ_STORAGE = 777;
|
||||
public static final int DOWNLOAD_DIALOG_REQUEST_CODE = 778;
|
||||
public static final int DOWNLOADS_REQUEST_CODE = 777;
|
||||
|
||||
|
||||
public static boolean checkStoragePermissions(Activity activity) {
|
||||
public static boolean checkStoragePermissions(Activity activity, int requestCode) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||
if(!checkReadStoragePermissions(activity)) return false;
|
||||
if(!checkReadStoragePermissions(activity, requestCode)) return false;
|
||||
}
|
||||
return checkWriteStoragePermissions(activity);
|
||||
return checkWriteStoragePermissions(activity, requestCode);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
|
||||
public static boolean checkReadStoragePermissions(Activity activity) {
|
||||
public static boolean checkReadStoragePermissions(Activity activity, int requestCode) {
|
||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(activity,
|
||||
new String[]{
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
PERMISSION_READ_STORAGE);
|
||||
requestCode);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -45,7 +45,7 @@ public class PermissionHelper {
|
||||
}
|
||||
|
||||
|
||||
public static boolean checkWriteStoragePermissions(Activity activity) {
|
||||
public static boolean checkWriteStoragePermissions(Activity activity, int requestCode) {
|
||||
// Here, thisActivity is the current activity
|
||||
if (ContextCompat.checkSelfPermission(activity,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
@@ -63,7 +63,7 @@ public class PermissionHelper {
|
||||
// No explanation needed, we can request the permission.
|
||||
ActivityCompat.requestPermissions(activity,
|
||||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
PERMISSION_WRITE_STORAGE);
|
||||
requestCode);
|
||||
|
||||
// PERMISSION_WRITE_STORAGE is an
|
||||
// app-defined int constant. The callback method gets the
|
||||
|
||||
@@ -65,7 +65,6 @@ public class ServiceHelper {
|
||||
}
|
||||
|
||||
public static int getSelectedServiceId(Context context) {
|
||||
if (BuildConfig.BUILD_TYPE.equals("release")) return DEFAULT_FALLBACK_SERVICE.getServiceId();
|
||||
|
||||
final String serviceName = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
.getString(context.getString(R.string.current_service_key), context.getString(R.string.default_service_value));
|
||||
@@ -110,4 +109,11 @@ public class ServiceHelper {
|
||||
return TimeUnit.MILLISECONDS.convert(1, TimeUnit.HOURS);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isBeta(final StreamingService s) {
|
||||
switch(s.getServiceInfo().getName()) {
|
||||
case "YouTube": return false;
|
||||
default: return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
196
app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
Normal file
196
app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
Normal file
@@ -0,0 +1,196 @@
|
||||
package org.schabi.newpipe.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.schabi.newpipe.Downloader;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.stream.AudioStream;
|
||||
import org.schabi.newpipe.extractor.stream.Stream;
|
||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import us.shandian.giga.util.Utility;
|
||||
|
||||
/**
|
||||
* A list adapter for a list of {@link Stream streams}, currently supporting {@link VideoStream} and {@link AudioStream}.
|
||||
*/
|
||||
public class StreamItemAdapter<T extends Stream> extends BaseAdapter {
|
||||
private final Context context;
|
||||
|
||||
private StreamSizeWrapper<T> streamsWrapper;
|
||||
private final boolean showIconNoAudio;
|
||||
|
||||
public StreamItemAdapter(Context context, StreamSizeWrapper<T> streamsWrapper, boolean showIconNoAudio) {
|
||||
this.context = context;
|
||||
this.streamsWrapper = streamsWrapper;
|
||||
this.showIconNoAudio = showIconNoAudio;
|
||||
}
|
||||
|
||||
public StreamItemAdapter(Context context, StreamSizeWrapper<T> streamsWrapper) {
|
||||
this(context, streamsWrapper, false);
|
||||
}
|
||||
|
||||
public List<T> getAll() {
|
||||
return streamsWrapper.getStreamsList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return streamsWrapper.getStreamsList().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T getItem(int position) {
|
||||
return streamsWrapper.getStreamsList().get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||
return getCustomView(position, convertView, parent, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
return getCustomView(((Spinner) parent).getSelectedItemPosition(), convertView, parent, false);
|
||||
}
|
||||
|
||||
private View getCustomView(int position, View convertView, ViewGroup parent, boolean isDropdownItem) {
|
||||
if (convertView == null) {
|
||||
convertView = LayoutInflater.from(context).inflate(R.layout.stream_quality_item, parent, false);
|
||||
}
|
||||
|
||||
final ImageView woSoundIconView = convertView.findViewById(R.id.wo_sound_icon);
|
||||
final TextView formatNameView = convertView.findViewById(R.id.stream_format_name);
|
||||
final TextView qualityView = convertView.findViewById(R.id.stream_quality);
|
||||
final TextView sizeView = convertView.findViewById(R.id.stream_size);
|
||||
|
||||
final T stream = getItem(position);
|
||||
|
||||
int woSoundIconVisibility = View.GONE;
|
||||
String qualityString;
|
||||
|
||||
if (stream instanceof VideoStream) {
|
||||
qualityString = ((VideoStream) stream).getResolution();
|
||||
|
||||
if (!showIconNoAudio) {
|
||||
woSoundIconVisibility = View.GONE;
|
||||
} else if (((VideoStream) stream).isVideoOnly()) {
|
||||
woSoundIconVisibility = View.VISIBLE;
|
||||
} else if (isDropdownItem) {
|
||||
woSoundIconVisibility = View.INVISIBLE;
|
||||
}
|
||||
} else if (stream instanceof AudioStream) {
|
||||
qualityString = ((AudioStream) stream).getAverageBitrate() + "kbps";
|
||||
} else {
|
||||
qualityString = stream.getFormat().getSuffix();
|
||||
}
|
||||
|
||||
if (streamsWrapper.getSizeInBytes(position) > 0) {
|
||||
sizeView.setText(streamsWrapper.getFormattedSize(position));
|
||||
sizeView.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
sizeView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
formatNameView.setText(stream.getFormat().getName());
|
||||
qualityView.setText(qualityString);
|
||||
woSoundIconView.setVisibility(woSoundIconVisibility);
|
||||
|
||||
return convertView;
|
||||
}
|
||||
|
||||
/**
|
||||
* A wrapper class that includes a way of storing the stream sizes.
|
||||
*/
|
||||
public static class StreamSizeWrapper<T extends Stream> implements Serializable {
|
||||
private static final StreamSizeWrapper<Stream> EMPTY = new StreamSizeWrapper<>(Collections.emptyList());
|
||||
private final List<T> streamsList;
|
||||
private long[] streamSizes;
|
||||
|
||||
public StreamSizeWrapper(List<T> streamsList) {
|
||||
this.streamsList = streamsList;
|
||||
this.streamSizes = new long[streamsList.size()];
|
||||
|
||||
for (int i = 0; i < streamSizes.length; i++) streamSizes[i] = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to fetch the sizes of all the streams in a wrapper.
|
||||
*
|
||||
* @param streamsWrapper the wrapper
|
||||
* @return a {@link Single} that returns a boolean indicating if any elements were changed
|
||||
*/
|
||||
public static <X extends Stream> Single<Boolean> fetchSizeForWrapper(StreamSizeWrapper<X> streamsWrapper) {
|
||||
final Callable<Boolean> fetchAndSet = () -> {
|
||||
boolean hasChanged = false;
|
||||
for (X stream : streamsWrapper.getStreamsList()) {
|
||||
if (streamsWrapper.getSizeInBytes(stream) > 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final long contentLength = Downloader.getInstance().getContentLength(stream.getUrl());
|
||||
streamsWrapper.setSize(stream, contentLength);
|
||||
hasChanged = true;
|
||||
}
|
||||
return hasChanged;
|
||||
};
|
||||
|
||||
return Single.fromCallable(fetchAndSet)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.onErrorReturnItem(true);
|
||||
}
|
||||
|
||||
public List<T> getStreamsList() {
|
||||
return streamsList;
|
||||
}
|
||||
|
||||
public long getSizeInBytes(int streamIndex) {
|
||||
return streamSizes[streamIndex];
|
||||
}
|
||||
|
||||
public long getSizeInBytes(T stream) {
|
||||
return streamSizes[streamsList.indexOf(stream)];
|
||||
}
|
||||
|
||||
public String getFormattedSize(int streamIndex) {
|
||||
return Utility.formatBytes(getSizeInBytes(streamIndex));
|
||||
}
|
||||
|
||||
public String getFormattedSize(T stream) {
|
||||
return Utility.formatBytes(getSizeInBytes(stream));
|
||||
}
|
||||
|
||||
public void setSize(int streamIndex, long sizeInBytes) {
|
||||
streamSizes[streamIndex] = sizeInBytes;
|
||||
}
|
||||
|
||||
public void setSize(T stream, long sizeInBytes) {
|
||||
streamSizes[streamsList.indexOf(stream)] = sizeInBytes;
|
||||
}
|
||||
|
||||
public static <X extends Stream> StreamSizeWrapper<X> empty() {
|
||||
//noinspection unchecked
|
||||
return (StreamSizeWrapper<X>) EMPTY;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,5 +3,5 @@
|
||||
<gradient
|
||||
android:angle="90"
|
||||
android:endColor="#00000000"
|
||||
android:startColor="#8c000000"/>
|
||||
android:startColor="@color/video_overlay_color"/>
|
||||
</shape>
|
||||
@@ -3,5 +3,5 @@
|
||||
<gradient
|
||||
android:angle="-90"
|
||||
android:endColor="#00000000"
|
||||
android:startColor="#8c000000"/>
|
||||
android:startColor="@color/video_overlay_color"/>
|
||||
</shape>
|
||||
@@ -304,7 +304,7 @@
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/duration_live"
|
||||
android:text="@string/duration_live_button"
|
||||
android:textAllCaps="true"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:maxLength="4"
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
android:id="@+id/playbackControlRoot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#64000000"
|
||||
android:background="@color/video_overlay_color"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
@@ -406,7 +406,7 @@
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/duration_live"
|
||||
android:text="@string/duration_live_button"
|
||||
android:textAllCaps="true"
|
||||
android:textColor="@android:color/white"
|
||||
android:maxLength="4"
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/duration_live"
|
||||
android:text="@string/duration_live_button"
|
||||
android:textAllCaps="true"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:maxLength="4"
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/file_name"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginBottom="6dp"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:gravity="left"
|
||||
android:orientation="horizontal"
|
||||
tools:ignore="RtlHardcoded">
|
||||
@@ -59,12 +59,12 @@
|
||||
android:id="@+id/quality_spinner"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minWidth="150dp"
|
||||
android:layout_below="@+id/video_audio_group"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginRight="20dp"
|
||||
tools:listitem="@layout/resolutions_spinner_item"/>
|
||||
android:minWidth="150dp"
|
||||
tools:listitem="@layout/stream_quality_item"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/threads_text_view"
|
||||
@@ -82,8 +82,8 @@
|
||||
android:layout_below="@+id/threads_text_view"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:orientation="horizontal">
|
||||
android:orientation="horizontal"
|
||||
android:paddingBottom="12dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/threads_count"
|
||||
@@ -75,8 +75,8 @@
|
||||
android:layout_below="@id/drawer_header"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:menu="@menu/drawer_items"
|
||||
app:elevation="0dp"/>
|
||||
<!-- app:menu="@menu/drawer_items" -->
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/navigation_drawer_footer"
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:gravity="center_vertical"
|
||||
android:text="@string/duration_live"
|
||||
android:text="@string/duration_live_button"
|
||||
android:textAllCaps="true"
|
||||
android:textColor="@android:color/white"
|
||||
android:maxLength="4"
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/wo_sound_icon"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="4dp"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="?attr/volume_off"
|
||||
tools:ignore="ContentDescription,RtlHardcoded"/>
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/text1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:layout_toRightOf="@+id/wo_sound_icon"
|
||||
android:ellipsize="end"
|
||||
android:gravity="left"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textSize="14sp"
|
||||
tools:ignore="RtlHardcoded"
|
||||
tools:text="MPEG-4 1080p60"/>
|
||||
</RelativeLayout>
|
||||
66
app/src/main/res/layout/stream_quality_item.xml
Normal file
66
app/src/main/res/layout/stream_quality_item.xml
Normal file
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/wo_sound_icon"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="6dp"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="?attr/volume_off"
|
||||
tools:ignore="ContentDescription,RtlHardcoded"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/stream_format_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="22dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_toRightOf="@+id/wo_sound_icon"
|
||||
android:ellipsize="end"
|
||||
android:gravity="left|bottom"
|
||||
android:maxLines="1"
|
||||
android:paddingLeft="12dp"
|
||||
android:paddingRight="18dp"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
|
||||
android:textSize="12sp"
|
||||
tools:ignore="RtlHardcoded"
|
||||
tools:text="MPEG-4"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/stream_quality"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="26dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_toRightOf="@+id/wo_sound_icon"
|
||||
android:ellipsize="end"
|
||||
android:gravity="left|top"
|
||||
android:maxLines="1"
|
||||
android:paddingLeft="12dp"
|
||||
android:paddingRight="18dp"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textSize="14sp"
|
||||
tools:ignore="RtlHardcoded"
|
||||
tools:text="1080p60"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/stream_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:gravity="right|center_vertical"
|
||||
android:maxLines="1"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
|
||||
android:textSize="12sp"
|
||||
android:visibility="gone"
|
||||
tools:ignore="RtlHardcoded"
|
||||
tools:text="123.4 MB"
|
||||
tools:visibility="visible"/>
|
||||
</RelativeLayout>
|
||||
@@ -1,25 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:id="@+id/action_show_downloads"
|
||||
android:orderInCategory="980"
|
||||
android:title="@string/downloads"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_show_downloads"
|
||||
android:orderInCategory="980"
|
||||
android:title="@string/downloads"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item android:id="@+id/action_history"
|
||||
<item
|
||||
android:id="@+id/action_history"
|
||||
android:orderInCategory="981"
|
||||
android:title="@string/action_history"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item android:id="@+id/action_settings"
|
||||
android:orderInCategory="990"
|
||||
android:title="@string/settings"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
|
||||
<item android:id="@+id/action_about"
|
||||
android:orderInCategory="1000"
|
||||
android:title="@string/action_about"/>
|
||||
<item
|
||||
android:id="@+id/action_settings"
|
||||
android:orderInCategory="990"
|
||||
android:title="@string/settings"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_about"
|
||||
android:orderInCategory="1000"
|
||||
android:title="@string/action_about"/>
|
||||
</menu>
|
||||
@@ -154,7 +154,7 @@
|
||||
<string name="error_snackbar_action">تقرير</string>
|
||||
<string name="what_device_headline">معلومات:</string>
|
||||
<string name="what_happened_headline">ماذا حدث:</string>
|
||||
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP range:</string>
|
||||
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:</string>
|
||||
<string name="your_comment">تعليقك (باللغة الإنجليزية):</string>
|
||||
<string name="error_details_headline">تفاصيل:</string>
|
||||
|
||||
@@ -305,7 +305,6 @@
|
||||
<string name="just_once">مرة واحدة فقط</string>
|
||||
|
||||
<string name="invalid_url_toast">العنوان خاطئ</string>
|
||||
<string name="preferred_player_share_menu_title">\@string/preferred_player_settings_title</string>
|
||||
<string name="no_player_found_toast">لم يتم العثور على مشغل بث (يمكنك تثبيت VLC لتشغيله)</string>
|
||||
<string name="import_data_title">استيراد قاعدة البيانات</string>
|
||||
<string name="export_data_title">تصدير قاعدة البيانات</string>
|
||||
@@ -334,8 +333,6 @@
|
||||
<string name="drawer_header_action_paceholder_text">سوف نقوم بإدماج شيء جديد هنا قريبا ;D</string>
|
||||
|
||||
|
||||
<string name="preferred_player_settings_title">قارئ الوسائط المُفضّل</string>
|
||||
|
||||
<string name="video_player">قارئ الفيديوهات</string>
|
||||
<string name="always_ask_open_action">أُطلُب دائمًا</string>
|
||||
|
||||
|
||||
56
app/src/main/res/values-az/strings.xml
Normal file
56
app/src/main/res/values-az/strings.xml
Normal file
@@ -0,0 +1,56 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources><string name="main_bg_subtitle">Başlamaq üçün axtarışa bas</string>
|
||||
<string name="view_count_text">%1$s baxış</string>
|
||||
<string name="upload_date_text">Dərc edilib %1$s</string>
|
||||
<string name="no_player_found">Axın oynadıcısı tapılmadı. VLC ni yükləmək istərdinizmi?</string>
|
||||
<string name="no_player_found_toast">Axın oynadıcısı tapılmadı (baxmaq üçün VLC ni yükləyə bilərsən)</string>
|
||||
<string name="install">Quraşdır</string>
|
||||
<string name="cancel">İmtina</string>
|
||||
<string name="open_in_browser">Brauzerdə aç</string>
|
||||
<string name="share">Paylaş</string>
|
||||
<string name="download">Endir</string>
|
||||
<string name="controls_download_desc">Axın faylını endir.</string>
|
||||
<string name="search">Axtarış</string>
|
||||
<string name="settings">Ayarlar</string>
|
||||
<string name="did_you_mean">Bunu mu demək istədin: %1$s ?</string>
|
||||
<string name="share_dialog_title">Paylaş</string>
|
||||
<string name="choose_browser">Brauzeri seç</string>
|
||||
<string name="use_external_video_player_title">Kənar video oynadıcı istifadə et</string>
|
||||
<string name="use_external_video_player_summary">Bu seçim aktivləşdirildiyi zaman bəzi ölçülərdə səs OLMAYACAQ</string>
|
||||
<string name="use_external_audio_player_title">Kənar audio oynadıcı istifadə et</string>
|
||||
<string name="subscribe_button_title">Abunə ol</string>
|
||||
<string name="subscribed_button_title">Abunə olunub</string>
|
||||
<string name="channel_unsubscribed">Kanal</string>
|
||||
<string name="show_info">Məlumat göstər</string>
|
||||
|
||||
<string name="tab_main">Əsas</string>
|
||||
<string name="tab_subscriptions">Abunəliklər</string>
|
||||
<string name="tab_bookmarks">Əlfəcinlər</string>
|
||||
|
||||
<string name="fragment_whats_new">Yeni nə var</string>
|
||||
|
||||
<string name="controls_background_title">Arxa fon</string>
|
||||
<string name="download_path_title">Video yükləmə ünvanı</string>
|
||||
<string name="download_path_summary">Yüklənən videoları saxlamaq üçün yer</string>
|
||||
<string name="download_path_dialog_title">Videolar üçün yükləmə yerini daxil et</string>
|
||||
|
||||
<string name="download_path_audio_title">Audio yükləmə yeri</string>
|
||||
<string name="download_path_audio_summary">Yüklənən audioları saxlamaq üçün yer</string>
|
||||
<string name="download_path_audio_dialog_title">Audiolar üçün yükləmə yerini daxil et</string>
|
||||
|
||||
<string name="autoplay_by_calling_app_summary">NewPipe başqa bir uyğulamadan çağrıldığı zaman avtomatik olaraq videonu oynadır</string>
|
||||
<string name="default_resolution_title">Defolt ölçü</string>
|
||||
<string name="show_higher_resolutions_title">Daha böyük ölçüləri göstər</string>
|
||||
<string name="play_with_kodi_title">Kodi ilə oynat</string>
|
||||
<string name="kore_not_found">Kore app tapılmadı. Yükləyək?</string>
|
||||
<string name="show_play_with_kodi_title">\"Kodi ilə oynat\" seçimini göstər</string>
|
||||
<string name="show_play_with_kodi_summary">Videonu Kodi media center ilə oynatmaq üçün seçim göstər</string>
|
||||
<string name="play_audio">Audio</string>
|
||||
<string name="default_audio_format_title">Defolt audio formatı</string>
|
||||
<string name="default_video_format_title">Defolt video formatı</string>
|
||||
<string name="m4a_description">M4A — daha yaxşı keyfiyyət</string>
|
||||
<string name="theme_title">Mövzu</string>
|
||||
<string name="light_theme_title">Açıq</string>
|
||||
<string name="dark_theme_title">Qaranlıq</string>
|
||||
<string name="black_theme_title">Qara</string>
|
||||
</resources>
|
||||
@@ -122,7 +122,7 @@
|
||||
<string name="msg_running">NewPipe baxando</string>
|
||||
<string name="could_not_load_image">Nun pudo cargase la imaxe</string>
|
||||
<string name="app_ui_crash">Cascó l\'aplicación/IU</string>
|
||||
<string name="info_labels">Lo qu\'asocedió:\\nSolicitú:\\nLlingua del conteníu:\\nServiciu:\\nHora GMT:\\nPaquete:\\nVersión:\\nVersión del SO:\\nRangu global d\'IP:</string>
|
||||
<string name="info_labels">Lo qu\'asocedió:\\nSolicitú:\\nLlingua del conteníu:\\nServiciu:\\nHora GMT:\\nPaquete:\\nVersión:\\nVersión del SO:</string>
|
||||
<string name="open_in_popup_mode">Abrir en ventanu emerxente</string>
|
||||
<string name="popup_mode_share_menu_title">Mou de ventanu emerxente de NewPipe</string>
|
||||
|
||||
@@ -323,8 +323,6 @@
|
||||
|
||||
<string name="drawer_open">Abrir caxón</string>
|
||||
<string name="drawer_close">Zarrar caxón</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Abrir col reproductor preferíu</string>
|
||||
<string name="preferred_player_settings_title">Reproductor preferíu</string>
|
||||
|
||||
<string name="video_player">Reproductor de videu</string>
|
||||
<string name="background_player">Reproductor en segundu planu</string>
|
||||
|
||||
@@ -108,7 +108,6 @@
|
||||
<string name="error_snackbar_action">প্রতিবেদন</string>
|
||||
<string name="what_device_headline">তথ্য:</string>
|
||||
<string name="what_happened_headline">কি হয়েছিল:</string>
|
||||
<!-- <string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP range:</string> -->
|
||||
<string name="your_comment">তোমার মন্তব্য (ইংরেজিতে):</string>
|
||||
<string name="error_details_headline">বর্ণনা:</string>
|
||||
|
||||
|
||||
427
app/src/main/res/values-ca/strings.xml
Normal file
427
app/src/main/res/values-ca/strings.xml
Normal file
@@ -0,0 +1,427 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources><string name="install">Instal·la</string>
|
||||
<string name="cancel">Cancel·la</string>
|
||||
<string name="open_in_browser">Obre al navegador</string>
|
||||
<string name="share">Comparteix</string>
|
||||
<string name="download">Baixa</string>
|
||||
<string name="search">Cerca</string>
|
||||
<string name="settings">Configuració</string>
|
||||
<string name="choose_browser">Tria un navegador</string>
|
||||
<string name="subscribe_button_title">Subscriu-t\'hi</string>
|
||||
<string name="subscribed_button_title">Subscrit</string>
|
||||
<string name="show_info">Mostra la informació</string>
|
||||
|
||||
<string name="tab_subscriptions">Subscripcions</string>
|
||||
<string name="tab_bookmarks">Adreces d\'interès</string>
|
||||
|
||||
<string name="fragment_whats_new">Novetats</string>
|
||||
|
||||
<string name="download_path_title">Ruta de baixada del vídeo</string>
|
||||
<string name="download_path_audio_title">Ruta de baixada de l\'àudio</string>
|
||||
<string name="autoplay_by_calling_app_title">Reproducció automàtica</string>
|
||||
<string name="default_resolution_title">Resolució per defecte</string>
|
||||
<string name="play_audio">Àudio</string>
|
||||
<string name="default_audio_format_title">Format d\'àudio per defecte</string>
|
||||
<string name="default_video_format_title">Format de vídeo per defecte</string>
|
||||
<string name="webm_description">WebM — format lliure</string>
|
||||
<string name="m4a_description">M4A — millor qualitat</string>
|
||||
<string name="theme_title">Tema</string>
|
||||
<string name="light_theme_title">Clar</string>
|
||||
<string name="dark_theme_title">Fosc</string>
|
||||
<string name="black_theme_title">Negre</string>
|
||||
<string name="enable_watch_history_title">Historial</string>
|
||||
<string name="download_dialog_title">Baixa</string>
|
||||
<string name="service_title">Servei</string>
|
||||
<string name="settings_category_player_title">Reproductor</string>
|
||||
<string name="settings_category_player_behavior_title">Comportament</string>
|
||||
<string name="settings_category_video_audio_title">Vídeo i àudio</string>
|
||||
<string name="settings_category_history_title">Historial i memòria cau</string>
|
||||
<string name="settings_category_appearance_title">Aparença</string>
|
||||
<string name="settings_category_other_title">Altres</string>
|
||||
<string name="settings_category_debug_title">Depuració</string>
|
||||
<string name="content">Contingut</string>
|
||||
<string name="show_age_restricted_content_title">Mostra el contingut restringit per edat</string>
|
||||
<string name="video_is_age_restricted">Vídeo restringit per edat. Podeu permetre aquesta mena de continguts des de la configuració.</string>
|
||||
<string name="duration_live">en directe</string>
|
||||
<string name="downloads">Baixades</string>
|
||||
<string name="downloads_title">Baixades</string>
|
||||
<string name="all">Tot</string>
|
||||
<string name="channel">Canal</string>
|
||||
<string name="playlist">Llista de reproducció</string>
|
||||
<string name="yes">Sí</string>
|
||||
<string name="disabled">Desactivat</string>
|
||||
<string name="clear">Esborra</string>
|
||||
<string name="best_resolution">Millor resolució</string>
|
||||
<string name="undo">Desfés</string>
|
||||
<string name="always">Sempre</string>
|
||||
<string name="just_once">Només una vegada</string>
|
||||
<string name="file">Fitxer</string>
|
||||
|
||||
<string name="unknown_content">[Desconegut]</string>
|
||||
|
||||
<string name="import_data_title">Importa una base de dades</string>
|
||||
<string name="export_data_title">Exporta una base de dades</string>
|
||||
<string name="export_data_summary">Exporta l\'historial, les subscripcions i les llistes de reproducció.</string>
|
||||
<string name="general_error">Error</string>
|
||||
<string name="network_error">Error de xarxa</string>
|
||||
<string name="video">Vídeo</string>
|
||||
<string name="audio">Àudio</string>
|
||||
<plurals name="subscribers">
|
||||
<item quantity="one">%s subscriptor</item>
|
||||
<item quantity="other">%s subscriptors</item>
|
||||
</plurals>
|
||||
|
||||
<string name="finish">D\'acord</string>
|
||||
|
||||
<string name="msg_name">Nom de fitxer</string>
|
||||
<string name="msg_error">Error</string>
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="settings_category_downloads_title">Baixa</string>
|
||||
<string name="action_settings">Configuració</string>
|
||||
<string name="action_about">Quant a</string>
|
||||
<string name="title_licenses">Llicències de tercers</string>
|
||||
<string name="error_unable_to_load_license">No s\'ha pogut carregar la llicència</string>
|
||||
<string name="action_open_website">Obre el lloc web</string>
|
||||
<string name="tab_about">Quant a</string>
|
||||
<string name="tab_contributors">Col·laboradors</string>
|
||||
<string name="tab_licenses">Llicències</string>
|
||||
<string name="contribution_title">Col·labora-hi</string>
|
||||
<string name="website_title">Lloc web</string>
|
||||
<string name="app_license_title">Llicència del NewPipe</string>
|
||||
<string name="read_full_license">Llegeix la llicència</string>
|
||||
|
||||
|
||||
<string name="title_activity_history">Historial</string>
|
||||
<string name="history_disabled">L\'historial està desactivat</string>
|
||||
<string name="action_history">Historial</string>
|
||||
<string name="history_empty">L\'historial és buit</string>
|
||||
<string name="history_cleared">S\'ha esborrat l\'historial</string>
|
||||
<string name="item_deleted">S\'ha eliminat l\'element</string>
|
||||
<string name="delete_item_search_history">Voleu eliminar aquest element de l\'historial de cerca?</string>
|
||||
<string name="delete_stream_history_prompt">Voleu eliminar aquest element de l\'historial de reproduccions?</string>
|
||||
<string name="delete_all_history_prompt">Segur que voleu eliminar tots els elements de l\'historial?</string>
|
||||
<string name="main_page_content">Contingut de la pàgina principal</string>
|
||||
<string name="blank_page_summary">Pàgina en blanc</string>
|
||||
<string name="subscription_page_summary">Pàgina de subscripcions</string>
|
||||
<string name="select_a_channel">Tria un canal</string>
|
||||
<string name="export_complete_toast">S\'ha completat l\'exportació</string>
|
||||
<string name="import_complete_toast">S\'ha completat la importació</string>
|
||||
<string name="play_queue_remove">Elimina</string>
|
||||
<string name="play_queue_stream_detail">Detalls</string>
|
||||
<string name="play_queue_audio_settings">Configuració d\'àudio</string>
|
||||
<string name="video_player">Reproductor de vídeo</string>
|
||||
<string name="background_player">Reproductor en segon pla</string>
|
||||
<string name="popup_player">Reproductor emergent</string>
|
||||
<string name="always_ask_open_action">Demana-ho sempre</string>
|
||||
|
||||
<string name="create_playlist">Crea una nova llista de reproducció</string>
|
||||
<string name="delete_playlist">Elimina la llista de reproducció</string>
|
||||
<string name="rename_playlist">Canvia el nom de la llista de reproducció</string>
|
||||
<string name="playlist_name_input">Nom</string>
|
||||
<string name="append_playlist">Afegeix a la llista de reproducció</string>
|
||||
<string name="import_title">Importa</string>
|
||||
<string name="import_from">Importa des de</string>
|
||||
<string name="export_to">Exporta a</string>
|
||||
|
||||
<string name="import_ongoing">S\'està important…</string>
|
||||
<string name="export_ongoing">S\'està exportant…</string>
|
||||
|
||||
<string name="import_file_title">Importa un fitxer</string>
|
||||
<string name="playback_default">Per defecte</string>
|
||||
<string name="view_count_text">%1$s visualitzacions</string>
|
||||
<string name="upload_date_text">Publicat el %1$s</string>
|
||||
<string name="no_player_found">No s\'ha trobat un reproductor de fluxos. Voleu instal·lar el VLC?</string>
|
||||
<string name="no_player_found_toast">No s\'ha trobat cap reproductor de fluxos (podeu instal·lar el VLC per reproduir-lo)</string>
|
||||
<string name="open_in_popup_mode">Obre en mode emergent</string>
|
||||
<string name="controls_download_desc">Baixa el fitxer de vídeo.</string>
|
||||
<string name="did_you_mean">Volíeu dir: %1$s?</string>
|
||||
<string name="share_dialog_title">Comparteix-ho amb</string>
|
||||
<string name="screen_rotation">rotació</string>
|
||||
<string name="use_external_video_player_title">Fes servir un reproductor de vídeo extern</string>
|
||||
<string name="popup_mode_share_menu_title">Mode emergent del NewPipe</string>
|
||||
<string name="channel_unsubscribed">Heu eliminat la subscripció d\'aquest canal</string>
|
||||
<string name="subscription_change_failed">No s\'ha pogut modificar la subscripció</string>
|
||||
<string name="subscription_update_failed">No s\'ha pogut actualitzar la subscripció</string>
|
||||
<string name="tab_main">Principal</string>
|
||||
<string name="controls_background_title">Segon pla</string>
|
||||
<string name="controls_popup_title">Emergent</string>
|
||||
<string name="controls_add_to_playlist_title">Afegeix a</string>
|
||||
|
||||
<string name="download_path_summary">Ruta d\'emmagatzematge dels vídeos baixats</string>
|
||||
<string name="download_path_dialog_title">Introduïu una ruta de baixada per als vídeos</string>
|
||||
|
||||
<string name="download_path_audio_summary">Ruta d\'emmagatzematge dels fitxers d\'àudio baixats</string>
|
||||
<string name="download_path_audio_dialog_title">Introduïu una ruta de baixada per als fitxers d\'àudio</string>
|
||||
|
||||
<string name="autoplay_by_calling_app_summary">Reprodueix automàtica un vídeo quan el NewPipe s\'executa des d\'una altra aplicació</string>
|
||||
<string name="default_popup_resolution_title">Resolució per defecte del reproductor emergent</string>
|
||||
<string name="show_higher_resolutions_title">Mostra resolucions superiors</string>
|
||||
<string name="show_higher_resolutions_summary">Només alguns dispositius són compatibles amb la reproducció de vídeos en 2K/4K</string>
|
||||
<string name="play_with_kodi_title">Reprodueix amb Kodi</string>
|
||||
<string name="kore_not_found">No s\'ha trobat l\'aplicació Kodi. Voleu instal·lar-la?</string>
|
||||
<string name="show_play_with_kodi_title">Mostra l\'opció «Reprodueix amb Kodi»</string>
|
||||
<string name="show_play_with_kodi_summary">Mostra una opció per reproduir un vídeo amb el centre multimèdia Kodi</string>
|
||||
<string name="popup_remember_size_pos_title">Recorda la mida i la posició del reproductor emergent</string>
|
||||
<string name="popup_remember_size_pos_summary">Recorda la darrera mida i posició del reproductor emergent</string>
|
||||
<string name="use_inexact_seek_title">Fes servir la cerca ràpida poc precisa</string>
|
||||
<string name="use_inexact_seek_summary">La cerca poc precisa permet que el reproductor cerqui una posició més ràpidament amb menys precisió</string>
|
||||
<string name="download_thumbnail_title">Carrega les miniatures</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">S\'ha esborrat la memòria cau d\'imatges</string>
|
||||
<string name="metadata_cache_wipe_title">Esborra les metadades de la memòria cau</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">S\'ha esborrat la memòria cau de metadades</string>
|
||||
<string name="auto_queue_title">Afegeix automàticament a la cua el següent vídeo</string>
|
||||
<string name="player_gesture_controls_title">Control per gestos del reproductor</string>
|
||||
<string name="player_gesture_controls_summary">Feu servir gestos per regular la brillantor i el volum del reproductor</string>
|
||||
<string name="show_search_suggestions_title">Suggeriments de cerca</string>
|
||||
<string name="show_search_suggestions_summary">Mostra suggeriments durant la cerca</string>
|
||||
<string name="enable_search_history_title">Historial de cerca</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Reprèn la reproducció després d\'una interrupció (per exemple, una trucada)</string>
|
||||
<string name="next_video_title">Vídeo següent</string>
|
||||
<string name="show_next_and_similar_title">Mostra el següent vídeo i vídeos similars</string>
|
||||
<string name="default_content_country_title">País per defecte dels continguts</string>
|
||||
<string name="search_language_title">Llengua per defecte dels continguts</string>
|
||||
<string name="settings_category_popup_title">Emergent</string>
|
||||
<string name="background_player_playing_toast">S\'està reproduint en segon pla</string>
|
||||
<string name="popup_playing_toast">S\'està reproduint en mode emergent</string>
|
||||
<string name="background_player_append">Afegit a la cua del reproductor en segon pla</string>
|
||||
<string name="popup_playing_append">Afegit a la cua del reproductor emergent</string>
|
||||
<string name="play_btn_text">Reprodueix</string>
|
||||
<string name="notification_channel_name">Notificació del NewPipe</string>
|
||||
<string name="notification_channel_description">Notificacions dels reproductors en segon pla o emergents del NewPipe</string>
|
||||
|
||||
<string name="could_not_load_thumbnails">No s\'han pogut carregar totes les miniatures</string>
|
||||
<string name="youtube_signature_decryption_error">No s\'ha pogut desencriptar la signatura de l\'URL del vídeo</string>
|
||||
<string name="parsing_error">No s\'ha pogut processar el lloc web</string>
|
||||
<string name="light_parsing_error">No s\'ha pogut processar del tot el lloc web</string>
|
||||
<string name="content_not_available">Contingut no disponible</string>
|
||||
<string name="blocked_by_gema">Blocat per la GEMA</string>
|
||||
<string name="could_not_setup_download_menu">No s\'ha pogut configurar el menú de baixades</string>
|
||||
<string name="live_streams_not_supported">Això és una emissió en directe, que encara no és compatible.</string>
|
||||
<string name="could_not_get_stream">No s\'ha pogut obtenir cap vídeo</string>
|
||||
<string name="could_not_load_image">No s\'ha pogut carregar la imatge</string>
|
||||
<string name="app_ui_crash">Ha fallat l\'aplicació o la interfície d\'usuari</string>
|
||||
<string name="player_stream_failure">No s\'ha pogut reproduir aquest vídeo</string>
|
||||
<string name="player_unrecoverable_failure">S\'ha produït un error irrecuperable al reproductor</string>
|
||||
<string name="external_player_unsupported_link_type">Els reproductors externs no són compatibles amb aquesta mena d\'enllaços</string>
|
||||
<string name="invalid_url_toast">L\'URL no és vàlid</string>
|
||||
<string name="video_streams_empty">No s\'ha trobat cap flux de vídeo</string>
|
||||
<string name="audio_streams_empty">No s\'ha trobat cap flux d\'àudio</string>
|
||||
<string name="invalid_directory">Directori no vàlid</string>
|
||||
<string name="invalid_source">Fitxer o font de contingut no vàlid</string>
|
||||
<string name="invalid_file">El fitxer no existeix o no teniu permisos suficients per llegir-lo o escriure-hi</string>
|
||||
<string name="file_name_empty_error">El nom del fitxer no pot estar en blanc</string>
|
||||
<string name="error_occurred_detail">S\'ha produït un error: %1$s</string>
|
||||
<string name="error_report_button_text">Informa de l\'error per correu electrònic</string>
|
||||
<string name="error_snackbar_message">S\'han produït alguns errors.</string>
|
||||
<string name="error_snackbar_action">INFORME</string>
|
||||
<string name="what_device_headline">Informació:</string>
|
||||
<string name="what_happened_headline">Què ha passat:</string>
|
||||
<string name="your_comment">Comentari (en anglès):</string>
|
||||
<string name="error_details_headline">Detalls:</string>
|
||||
|
||||
|
||||
<string name="list_thumbnail_view_description">Miniatura de previsualització del vídeo</string>
|
||||
<string name="detail_thumbnail_view_description">Miniatura de previsualització del vídeo</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Miniatura de l\'avatar del propietari</string>
|
||||
<string name="detail_likes_img_view_description">M\'agrada</string>
|
||||
<string name="detail_dislikes_img_view_description">No m\'agrada</string>
|
||||
<string name="use_tor_title">Fes servir el Tor</string>
|
||||
<string name="use_tor_summary">(En proves) Força el trànsit de baixada a través del Tot per a més privadesa (no compatible encara amb les emissions de vídeo).</string>
|
||||
<string name="report_error">Informa sobre un error</string>
|
||||
<string name="user_report">Informe de l\'usuari</string>
|
||||
<string name="search_no_results">Cap resultat</string>
|
||||
<string name="empty_subscription_feed_subtitle">No hi ha res aquí</string>
|
||||
<string name="err_dir_create">No s\'ha pogut crear el directori de baixades «%1$s»</string>
|
||||
<string name="info_dir_created">S\'ha creat el directori de baixades «%1$s»</string>
|
||||
|
||||
<string name="retry">Torna a intentar-ho</string>
|
||||
<string name="storage_permission_denied">S\'ha denegat el permís d\'accés a l\'emmagatzematge</string>
|
||||
<string name="use_old_player_title">Fes servir el reproductor antic</string>
|
||||
<string name="use_old_player_summary">Antic reproductor integrat de Mediaframework</string>
|
||||
|
||||
<string name="no_subscribers">Sense subscriptors</string>
|
||||
<string name="no_views">Sense visualitzacions</string>
|
||||
<plurals name="views">
|
||||
<item quantity="one">%s visualització</item>
|
||||
<item quantity="other">%s visualitzacions</item>
|
||||
</plurals>
|
||||
|
||||
<string name="no_videos">Sense vídeos</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="one">%s vídeo</item>
|
||||
<item quantity="other">%s vídeos</item>
|
||||
</plurals>
|
||||
|
||||
<string name="pause">Pausa</string>
|
||||
<string name="view">Reprodueix</string>
|
||||
<string name="create">Crea</string>
|
||||
<string name="delete">Elimina</string>
|
||||
<string name="delete_one">Elimina\'n un</string>
|
||||
<string name="delete_all">Elimina\'ls tots</string>
|
||||
<string name="checksum">Suma de verificació</string>
|
||||
<string name="dismiss">Tanca</string>
|
||||
<string name="rename">Canvia el nom</string>
|
||||
|
||||
<string name="msg_threads">Fils</string>
|
||||
<string name="msg_server_unsupported">Servidor incompatible</string>
|
||||
<string name="msg_exists">El fitxer ja existeix</string>
|
||||
<string name="msg_running">Baixada del NewPipe activa</string>
|
||||
<string name="msg_wait">Espereu…</string>
|
||||
<string name="msg_copied">S\'ha copiat al porta-retalls</string>
|
||||
<string name="settings_file_charset_title">Caràcters permesos als noms de fitxer</string>
|
||||
<string name="charset_letters_and_digits">Lletres i dígits</string>
|
||||
<string name="title_activity_about">Quant al NewPipe</string>
|
||||
<string name="copyright" formatted="true">© %1$s per %2$s sota %3$s</string>
|
||||
<string name="app_description">Aplicació lliure i lleugera de YouTube per a Android.</string>
|
||||
<string name="view_on_github">Visualitza a GitHub</string>
|
||||
<string name="donation_title">Fes una donació</string>
|
||||
<string name="website_encouragement">Si voleu conèixer més informació i veure les últimes notícies del NewPipe visiteu el nostre lloc web.</string>
|
||||
<string name="title_last_played">Última reproducció</string>
|
||||
<string name="title_most_played">Més reproduïts</string>
|
||||
|
||||
<string name="kiosk_page_summary">Pàgina d\'un quiosc</string>
|
||||
<string name="feed_page_summary">Pàgina de novetats</string>
|
||||
<string name="channel_page_summary">Pàgina d\'un canal</string>
|
||||
<string name="select_a_kiosk">Tria un quiosc</string>
|
||||
<string name="no_valid_zip_file">El fitxer no té un format ZIP vàlid</string>
|
||||
<string name="could_not_import_all_files">Avís: No s\'han pogut importar tots els fitxers.</string>
|
||||
<string name="override_current_data">Això sobreescriurà la configuració actual.</string>
|
||||
|
||||
<string name="kiosk">Quiosc</string>
|
||||
<string name="trending">Tendències</string>
|
||||
<string name="top_50">Els millors 50</string>
|
||||
<string name="title_activity_background_player">Reproductor en segon pla</string>
|
||||
<string name="title_activity_popup_player">Reproductor emergent</string>
|
||||
<string name="enqueue_on_background">Afegeix a la cua de reproducció en segon pla</string>
|
||||
<string name="enqueue_on_popup">Afegeix a la cua de reproducció emergent</string>
|
||||
<string name="start_here_on_main">Comença la reproducció aquí</string>
|
||||
<string name="drawer_open">Obre el calaix</string>
|
||||
<string name="drawer_close">Tanca el calaix</string>
|
||||
<string name="preferred_player_fetcher_notification_title">S\'està obtenint la informació…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">S\'està carregant el contingut seleccionat</string>
|
||||
|
||||
<string name="delete_playlist_prompt">Voleu eliminar aquesta llista de reproducció?</string>
|
||||
<string name="playlist_delete_failure">No s\'ha pogut eliminar la llista de reproducció</string>
|
||||
|
||||
<string name="import_export_title">Importació i exportació</string>
|
||||
<string name="playback_speed_control">Control de la velocitat de reproducció</string>
|
||||
<string name="playback_tempo">Tempo</string>
|
||||
<string name="playback_pitch">To</string>
|
||||
<string name="main_bg_subtitle">Toqueu el botó de cerca per començar</string>
|
||||
<string name="use_external_video_player_summary">En algunes resolucions NO hi haurà àudio quan aquesta opció estigui activada</string>
|
||||
<string name="use_external_audio_player_title">Fes servir un reproductor d\'àudio extern</string>
|
||||
<string name="download_thumbnail_summary">Desactiveu-ho per evitar que es carreguin les miniatures i estalviar dades i memòria. Si canvieu aquesta opció, s\'esborrarà la memòria cau d\'imatges tant de la memòria com de l\'emmagatzematge.</string>
|
||||
<string name="enable_search_history_summary">Emmagatzema les cerques localment</string>
|
||||
<string name="enable_watch_history_summary">Registra els vídeos visualitzats</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Reprèn la reproducció en passar a primer pla</string>
|
||||
<string name="url_not_supported_toast">Aquesta URL no és compatible</string>
|
||||
<string name="error_report_title">Informe d\'error</string>
|
||||
<string name="later">Més tard</string>
|
||||
<string name="filter">Filtra</string>
|
||||
<string name="refresh">Actualitza</string>
|
||||
<string name="popup_resizing_indicator_title">S\'està redimensionant</string>
|
||||
<string name="play_all">Reprodueix-ho tot</string>
|
||||
<string name="toggle_orientation">Canvia l\'orientació</string>
|
||||
<string name="switch_to_background">Canvia al mode en segon pla</string>
|
||||
<string name="switch_to_popup">Canvia al mode emergent</string>
|
||||
<string name="switch_to_main">Canvia al mode principal</string>
|
||||
|
||||
<string name="import_data_summary">Això sobreescriurà l\'historial i les subscripcions actuals</string>
|
||||
<string name="player_recoverable_failure">S\'està recuperant el reproductor després de l\'error</string>
|
||||
<string name="sorry_string">Ho sentim, això no hauria d\'haver ocorregut.</string>
|
||||
<string name="detail_drag_description">Arrossegueu per a reordenar la llista</string>
|
||||
|
||||
<string name="short_thousand">mil</string>
|
||||
<string name="short_million">milions</string>
|
||||
<string name="short_billion">mil milions</string>
|
||||
|
||||
<string name="start">Inicia</string>
|
||||
<string name="add">Nova missió</string>
|
||||
<string name="msg_url_malform">L\'URL té un format incorrecte o no hi ha connexió a internet</string>
|
||||
<string name="msg_running_detail">Toqueu aquí per a més detalls</string>
|
||||
<string name="no_available_dir">Trieu una carpeta de baixades disponible</string>
|
||||
<string name="msg_popup_permission">Es necessita aquest permís per a obrir el mode emergent</string>
|
||||
|
||||
<string name="reCaptcha_title">Camp reCAPTCHA</string>
|
||||
<string name="recaptcha_request_toast">S\'ha sol·licitat l\'emplenament d\'un camp reCAPTCHA</string>
|
||||
|
||||
<string name="settings_file_replacement_character_summary">Se substituiran els caràcters no vàlids amb aquest valor</string>
|
||||
<string name="settings_file_replacement_character_title">Caràcter de substitució</string>
|
||||
|
||||
<string name="charset_most_special_characters">Principals caràcters especials</string>
|
||||
|
||||
<string name="contribution_encouragement">Ja siguin idees, traduccions, canvis en el disseny, una neteja del codi o canvis importants de programació, la vostra ajuda sempre és benvinguda. Com més feina feta hi hagi, millor!</string>
|
||||
<string name="donation_encouragement">El NewPipe està desenvolupat per voluntaris que fan servir el seu temps lliure per a oferir-vos la millor experiència possible. Ara és el moment de fer una aportació per assegurar que els nostres desenvolupadors puguin millorar encara més el NewPipe mentre fan un cafè!</string>
|
||||
<string name="give_back">Fes la teva aportació</string>
|
||||
<string name="title_history_search">Cerques</string>
|
||||
<string name="title_history_view">Visualitzacions</string>
|
||||
<string name="no_channel_subscribed_yet">Encara no us heu subscrit a cap canal</string>
|
||||
<string name="new_and_hot">Novetats</string>
|
||||
<string name="hold_to_append">Manteniu premut per afegir a la cua</string>
|
||||
<string name="start_here_on_background">Inicia en segon pla</string>
|
||||
<string name="start_here_on_popup">Inicia en mode emergent</string>
|
||||
|
||||
<string name="set_as_playlist_thumbnail">Defineix com a miniatura de la llista de reproducció</string>
|
||||
|
||||
<string name="bookmark_playlist">Afegeix la llista de reproducció a les adreces d\'interès</string>
|
||||
<string name="unbookmark_playlist">Elimina l\'adreça d\'interès</string>
|
||||
|
||||
<string name="playlist_creation_success">S\'ha creat correctament la llista de reproducció</string>
|
||||
<string name="playlist_add_stream_success">Afegeix a la llista de reproducció</string>
|
||||
<string name="playlist_thumbnail_change_success">S\'ha canviat la miniatura de la llista de reproducció</string>
|
||||
<string name="caption_none">Sense subtítols</string>
|
||||
|
||||
<string name="resize_fit">AJUSTA</string>
|
||||
<string name="resize_fill">OMPLE</string>
|
||||
<string name="resize_zoom">ESCALA</string>
|
||||
|
||||
<string name="caption_auto_generated">Generats automàticament</string>
|
||||
<string name="caption_font_size_settings_title">Mida dels subtítols</string>
|
||||
<string name="smaller_caption_font_size">Mida més petita</string>
|
||||
<string name="normal_caption_font_size">Mida normal</string>
|
||||
<string name="larger_caption_font_size">Mida més gran</string>
|
||||
|
||||
<string name="enable_leak_canary_title">Habilita el LeakCanary</string>
|
||||
<string name="previous_export">Darrera exportació</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">Ha fallat la importació de les subscripcions</string>
|
||||
<string name="subscriptions_export_unsuccessful">Ha fallat l\'exportació de les subscripcions</string>
|
||||
|
||||
<string name="unhook_checkbox">Desvincula (pot provocar distorsió)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="metadata_cache_wipe_summary">Elimina totes les dades de llocs web de la memòria cau</string>
|
||||
<string name="auto_queue_summary">Afegeix automàticament a la cua un vídeo relacionat quan s\'inicia la reproducció de l\'últim vídeo en una cua de reproducció sense repetició.</string>
|
||||
<string name="show_hold_to_append_title">Mostra el consell «Mantingueu premut per afegir a la cua»</string>
|
||||
<string name="show_hold_to_append_summary">Mostra el consell quan el botó de mode en segon pla o emergent està premut a la pàgina de detalls del vídeo</string>
|
||||
<string name="info_labels">Què:\\nPetició:\\nIdioma del contingut:\\nServei:\\nHora GMT:\\nPaquet:\\nVersió:\\nVersió del SO:</string>
|
||||
<string name="drawer_header_action_paceholder_text">Aviat hi haurà novetats aquí ;D</string>
|
||||
|
||||
|
||||
<string name="preferred_open_action_settings_title">Acció d\'obertura preferida</string>
|
||||
<string name="preferred_open_action_settings_summary">Acció per defecte en obrir continguts — %s</string>
|
||||
|
||||
<string name="enable_leak_canary_summary">"La supervisió de fugues de memòria pot fer que l\'aplicació deixi de respondre mentre es bolca la memòria "</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Informa d\'errors fora del cicle de vida</string>
|
||||
<string name="enable_disposed_exceptions_summary">Força l\'informe d\'excepcions Rx que no es puguin transmetre que tinguin lloc fora del cicle de vida d\'un fragment o activitat després de disposar-los</string>
|
||||
|
||||
<string name="import_youtube_instructions">Per importar les vostres subscripcions de YouTube necessitareu el fitxer d\'exportació. El podeu aconseguir seguint aquestes instruccions:
|
||||
\n
|
||||
\n1. Aneu a aquesta URL: %1$s
|
||||
\n2. Inicieu sessió quan se us demani
|
||||
\n3. S\'hauria d\'iniciar una baixada (el fitxer d\'exportació)</string>
|
||||
<string name="import_soundcloud_instructions">Per a importar les vostres subscripcions de SoundCloud heu de conèixer l\'URL o l\'identificador del vostre perfil. Si el sabeu, escriviu-lo a sota i no caldrà fer res més.
|
||||
\n
|
||||
\nSi no els sabeu, seguiu aquestes instruccions:
|
||||
\n
|
||||
\n1. Activeu el «Mode d\'ordinador» en un navegador (el lloc web no està disponible per a dispositius mòbils)
|
||||
\n2. Aneu a aquesta URL: %1$s
|
||||
\n3. Inicieu sessió al vostre compte quan se us demani
|
||||
\n4. Copieu l\'URL de la pàgina on se us redireccionarà (l\'URL del vostre perfil)</string>
|
||||
<string name="import_soundcloud_instructions_hint">identificador, soundcloud.com/identificador</string>
|
||||
|
||||
<string name="import_network_expensive_warning">Tingueu en compte que això pot comportar un ús intensiu de la xarxa.
|
||||
\n
|
||||
\nVoleu continuar?</string>
|
||||
|
||||
</resources>
|
||||
2
app/src/main/res/values-cmn/strings.xml
Normal file
2
app/src/main/res/values-cmn/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
<string name="user_report">Hlášení uživatele</string>
|
||||
|
||||
<string name="info_labels">Co:\\nŽádost:\\nJazyk obsahu:\\nSlužba:\\nČas GMT:\\nBalíček:\\nVerze:\\nVerze OS:\\nGlobální rozsah IP:</string>
|
||||
<string name="info_labels">Co:\\nŽádost:\\nJazyk obsahu:\\nSlužba:\\nČas GMT:\\nBalíček:\\nVerze:\\nVerze OS:</string>
|
||||
<string name="all">Vše</string>
|
||||
<string name="channel">Kanál</string>
|
||||
<string name="yes">Ano</string>
|
||||
@@ -178,7 +178,7 @@ otevření ve vyskakovacím okně</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Pokračovat v přehrávání po přerušení (např. hovor)</string>
|
||||
<string name="settings_category_player_title">Přehrávač</string>
|
||||
<string name="settings_category_player_behavior_title">Chování</string>
|
||||
<string name="settings_category_history_title">Historie</string>
|
||||
<string name="settings_category_history_title">Historie a mezipamět</string>
|
||||
<string name="settings_category_popup_title">V okně</string>
|
||||
<string name="popup_playing_toast">Přehrávání v okně</string>
|
||||
<string name="playlist">Playlist</string>
|
||||
@@ -326,9 +326,6 @@ otevření ve vyskakovacím okně</string>
|
||||
<string name="could_not_import_all_files">Upozornění: Nelze importovat všechny soubory.</string>
|
||||
<string name="override_current_data">Tímto se anuluje vaše aktuální nastavení.</string>
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Otevřít preferovaným přehrávačem</string>
|
||||
<string name="preferred_player_settings_title">Preferovaný přehrávač</string>
|
||||
|
||||
<string name="video_player">Video přehrávač</string>
|
||||
<string name="background_player">Přehrávač na pozadí</string>
|
||||
<string name="popup_player">Přehrávač v okně</string>
|
||||
@@ -383,7 +380,7 @@ otevření ve vyskakovacím okně</string>
|
||||
<string name="resize_fill">VYPLNIT</string>
|
||||
<string name="resize_zoom">ZVĚTŠIT</string>
|
||||
|
||||
<string name="caption_font_size_settings_title">Velikost písma titulků</string>
|
||||
<string name="caption_font_size_settings_title">Velikost písma nadpisu</string>
|
||||
<string name="smaller_caption_font_size">Menší písmo</string>
|
||||
<string name="normal_caption_font_size">Normální písmo</string>
|
||||
<string name="larger_caption_font_size">Větší písmo</string>
|
||||
@@ -399,4 +396,69 @@ otevření ve vyskakovacím okně</string>
|
||||
<string name="enable_disposed_exceptions_title">Nahlásit mimocyklické chyby</string>
|
||||
<string name="enable_disposed_exceptions_summary">Vynutit vykazování výjimek Rx, které se vyskytnou mimo fragment nebo životnost cyklu po odstranění</string>
|
||||
|
||||
</resources>
|
||||
<string name="use_inexact_seek_title">Použít rychlé nepřesné hledání</string>
|
||||
<string name="use_inexact_seek_summary">Nepřesné hledání umožní přehrávači posouvat se rychleji, ale se sníženou přesností</string>
|
||||
<string name="download_thumbnail_title">Načítat náhledy</string>
|
||||
<string name="download_thumbnail_summary">Zakažte, chcete-li zabránit načítání všech náhledů a tím šetřit data a využití paměti. Změnou tohoto nastavení dojde k vyčištění mezipaměti obrázků.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Mezipaměť obrázků vymazána</string>
|
||||
<string name="metadata_cache_wipe_title">Vymazat metadata v mezipaměti</string>
|
||||
<string name="metadata_cache_wipe_summary">Odebrat všechna data uložená v mezipaměti</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Mezipaměť metadat vymazána</string>
|
||||
<string name="auto_queue_title">Auto-fronta dalšího streamu</string>
|
||||
<string name="auto_queue_summary">Automaticky připojí související stream, když přehřávání začne na posledním streamu v neopakující se přehráváné frontě.</string>
|
||||
<string name="file">Soubor</string>
|
||||
|
||||
<string name="invalid_directory">Neplatný adresář</string>
|
||||
<string name="invalid_source">Neplatný zdroj souboru/obsahu</string>
|
||||
<string name="invalid_file">Soubor neexistuje nebo máte nedostatečné oprávnění k jeho čtení či zápisu</string>
|
||||
<string name="file_name_empty_error">Název souboru nesmí být prázdný</string>
|
||||
<string name="error_occurred_detail">Došlo k chybě: %1$s</string>
|
||||
|
||||
<string name="import_export_title">Import/Export
|
||||
\n</string>
|
||||
<string name="import_title">Importovat
|
||||
\n</string>
|
||||
<string name="import_from">Importovat z
|
||||
\n</string>
|
||||
<string name="export_to">Exportovat do</string>
|
||||
|
||||
<string name="import_ongoing">Importuji…</string>
|
||||
<string name="export_ongoing">Exportuji…</string>
|
||||
|
||||
<string name="import_file_title">Import souboru</string>
|
||||
<string name="previous_export">Předchozí export</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">Import odběrů selhal</string>
|
||||
<string name="subscriptions_export_unsuccessful">Export odběrů selhal</string>
|
||||
|
||||
<string name="import_youtube_instructions">K importu vašich YouTube odběrů potřebujete exportní soubor, který lze stáhnout následujícím způsobem:
|
||||
\n
|
||||
\n1. Přejděte na tuto adresu: %1$s
|
||||
\n2. Na vyžádání se přihlašte ke svému účtu
|
||||
\n3. Mělo by začít stahování (onoho exportního souboru)</string>
|
||||
<string name="import_soundcloud_instructions">K importu vašich SoundCloud sledovaných musíte znát URL adresu nebo ID vašeho profilu. Pokud jednu z těchto věcí znáte, zadejte ji níže a to je celé.
|
||||
\n
|
||||
\nPokud ne, můžete postupovat dle následujících kroků:
|
||||
\n
|
||||
\n1. Ve svém prohlížeči povolte \"režim pro PC\" (pro mobilní zařízení není stránka dostupná)
|
||||
\n2. Přejděte na tuto adresu: %1$s
|
||||
\n3. Na vyžádání se přihlašte ke svému účtu
|
||||
\n4. Zkopírujte URL adresu, na kterou jste byli přesměrováni (to je URL adresa vašeho profilu)</string>
|
||||
<string name="import_soundcloud_instructions_hint">tvojeid, soundcloud.com/tvojeid</string>
|
||||
|
||||
<string name="import_network_expensive_warning">Mějte na paměti, že tato operace může být náročná na data.
|
||||
\n
|
||||
\nChcete pokračovat?</string>
|
||||
|
||||
<string name="playback_speed_control">Ovládání rychlosti přehrávání</string>
|
||||
<string name="playback_tempo">Rychlost</string>
|
||||
<string name="playback_pitch">Stupeň tónu</string>
|
||||
<string name="unhook_checkbox">Zvolnit (může způsobit zkreslení)</string>
|
||||
<string name="playback_nightcore">Nightcore mód</string>
|
||||
<string name="playback_default">Výchozí nastavení</string>
|
||||
<string name="no_streams_available_download">Ke stažení nejsou dostupné žádné streamy</string>
|
||||
|
||||
<string name="preferred_open_action_settings_title">Preferovaná akce při otevření</string>
|
||||
<string name="preferred_open_action_settings_summary">Výchozí chování při otevírání obsahu — %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -13,15 +13,15 @@
|
||||
<string name="did_you_mean">Meintest du: %1$s ?</string>
|
||||
<string name="share_dialog_title">Teilen mit</string>
|
||||
<string name="choose_browser">Browser</string>
|
||||
<string name="screen_rotation">Rotation</string>
|
||||
<string name="download_path_title">Downloadverzeichnis für Videos</string>
|
||||
<string name="screen_rotation">Drehen des Geräts</string>
|
||||
<string name="download_path_title">Download-Verzeichnis für Videos</string>
|
||||
<string name="download_path_summary">Verzeichnis für heruntergeladene Videos</string>
|
||||
<string name="download_path_dialog_title">Downloadverzeichnis für Videos eingeben</string>
|
||||
<string name="download_path_dialog_title">Download-Verzeichnis für Videos angeben</string>
|
||||
<string name="default_resolution_title">Standardauflösung</string>
|
||||
<string name="play_with_kodi_title">Mit Kodi abspielen</string>
|
||||
<string name="kore_not_found">Kore App wurde nicht gefunden. Möchten Sie Kore jetzt installieren?</string>
|
||||
<string name="show_play_with_kodi_title">Zeige \"Mit Kodi abspielen\" Option</string>
|
||||
<string name="show_play_with_kodi_summary">Zeigt eine Option an, über die man Videos mit dem Kodi Mediacenter abspielen kann</string>
|
||||
<string name="show_play_with_kodi_summary">Zeigt eine Option an, über die man Videos mit dem Kodi Media Center abspielen kann</string>
|
||||
<string name="play_audio">Audio</string>
|
||||
<string name="default_audio_format_title">Bevorzugtes Audioformat</string>
|
||||
<string name="webm_description">WebM — freies Format</string>
|
||||
@@ -46,9 +46,9 @@
|
||||
<string name="use_tor_summary">(Experimentell) Erzwinge das Herunterladen durch Tor für verbesserte Privatsphäre (Videostream noch nicht unterstützt).</string>
|
||||
<string name="network_error">Netzwerkfehler</string>
|
||||
|
||||
<string name="download_path_audio_title">Downloadverzeichnis für Audiodateien</string>
|
||||
<string name="download_path_audio_title">Download-Verzeichnis für Audiodateien</string>
|
||||
<string name="download_path_audio_summary">Verzeichnis für heruntergeladene Audiodateien</string>
|
||||
<string name="download_path_audio_dialog_title">Downloadverzeichnis für Audiodateien eingeben</string>
|
||||
<string name="download_path_audio_dialog_title">Download-Verzeichnis für Audiodateien angeben</string>
|
||||
|
||||
<string name="theme_title">Design</string>
|
||||
<string name="dark_theme_title">Dunkel</string>
|
||||
@@ -56,8 +56,8 @@
|
||||
|
||||
<string name="settings_category_appearance_title">Aussehen</string>
|
||||
<string name="settings_category_other_title">Andere</string>
|
||||
<string name="err_dir_create">Kann Downloadverzeichnis nicht anlegen \'%1$s\'</string>
|
||||
<string name="info_dir_created">Downloadverzeichnis \'%1$s\' erstellt</string>
|
||||
<string name="err_dir_create">Kann Download-Verzeichnis nicht anlegen \'%1$s\'</string>
|
||||
<string name="info_dir_created">Download-Verzeichnis \'%1$s\' erstellt</string>
|
||||
<string name="general_error">Fehler</string>
|
||||
<string name="could_not_load_thumbnails">Konnte nicht alle Vorschaubilder laden</string>
|
||||
<string name="youtube_signature_decryption_error">Konnte Video-URL-Signatur nicht entschlüsseln</string>
|
||||
@@ -69,7 +69,7 @@
|
||||
<string name="show_age_restricted_content_title">Altersbeschränkte Inhalte anzeigen</string>
|
||||
<string name="video_is_age_restricted">Video ist altersbeschränkt. Schalten Sie erst altersbeschränkte Videos in den Einstellungen ein.</string>
|
||||
|
||||
<string name="could_not_setup_download_menu">Konnte Downloadmenü nicht einrichten</string>
|
||||
<string name="could_not_setup_download_menu">Konnte Download-Menü nicht einrichten</string>
|
||||
<string name="live_streams_not_supported">Dies ist ein LIVESTREAM. Diese werden noch nicht unterstützt.</string>
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="error_snackbar_action">MELDEN</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">Dies ist passiert:</string>
|
||||
<string name="info_labels">Was:\\nAnfrage:\\nSprache des Inhalts:\\nDienst:\\nZeit (GMT):\\nPacket:\\nVersion:\\nOS-Version:\\nGlob. IP-Bereich:</string>
|
||||
<string name="info_labels">Was:\\nAnfrage:\\nSprache des Inhalts:\\nDienst:\\nZeit (GMT):\\nPaket:\\nVersion:\\nOS-Version:</string>
|
||||
<string name="error_details_headline">Details:</string>
|
||||
|
||||
<string name="video">Video</string>
|
||||
@@ -115,7 +115,7 @@
|
||||
<string name="msg_exists">Datei existiert bereits</string>
|
||||
<string name="msg_wait">Bitte warten…</string>
|
||||
<string name="msg_copied">In Zwischenablage kopiert</string>
|
||||
<string name="no_available_dir">Bitte wählen Sie ein verfügbares Downloadverzeichnis</string>
|
||||
<string name="no_available_dir">Bitte wählen Sie ein verfügbares Download-Verzeichnis</string>
|
||||
|
||||
<string name="start">Starten</string>
|
||||
<string name="pause">Pause</string>
|
||||
@@ -134,7 +134,7 @@
|
||||
<string name="black_theme_title">Schwarz</string>
|
||||
|
||||
<string name="reCaptcha_title">reCAPTCHA-Aufgabe</string>
|
||||
<string name="recaptcha_request_toast">reCAPTCHA Herausforderung angefordert</string>
|
||||
<string name="recaptcha_request_toast">reCAPTCHA-Herausforderung angefordert</string>
|
||||
|
||||
<string name="later">Später</string>
|
||||
|
||||
@@ -145,13 +145,13 @@
|
||||
<string name="disabled">Deaktiviert</string>
|
||||
|
||||
<string name="use_old_player_title">Benutze den alten Player</string>
|
||||
<string name="open_in_popup_mode">Im Pop-up Modus öffnen</string>
|
||||
<string name="open_in_popup_mode">Im Pop-up-Modus öffnen</string>
|
||||
<string name="default_video_format_title">Bevorzugtes Videoformat</string>
|
||||
<string name="popup_playing_toast">Spiele im Pop-up Modus ab</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe Pop-up Modus</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe-Pop-up-Modus</string>
|
||||
|
||||
|
||||
<string name="msg_popup_permission">Diese Berechtigung ist für das Öffnen im Pop-up Modus erforderlich</string>
|
||||
<string name="msg_popup_permission">Diese Berechtigung ist für das Öffnen im Pop-up-Modus erforderlich</string>
|
||||
|
||||
<string name="use_old_player_summary">Alter eingebauter Mediaframework-Player</string>
|
||||
<string name="default_popup_resolution_title">Standardauflösung des Pop-ups</string>
|
||||
@@ -164,7 +164,7 @@
|
||||
<string name="use_external_video_player_summary">Manche Auflösungen werden KEINE Tonspur haben, wenn diese Option eingeschaltet ist</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">Benutze Gesten um Helligkeit und Lautstärke zu justieren</string>
|
||||
<string name="player_gesture_controls_summary">Helligkeit und Lautstärke mittels Gesten einstellen</string>
|
||||
<string name="show_search_suggestions_title">Durchsuche Vorschläge</string>
|
||||
<string name="show_search_suggestions_summary">Zeige Vorschläge beim Suchen</string>
|
||||
|
||||
@@ -185,15 +185,15 @@
|
||||
<string name="error_unable_to_load_license">Lizenz konnte nicht geladen werden</string>
|
||||
<string name="copyright" formatted="true">© %1$s von %2$s unter %3$s</string>
|
||||
<string name="tab_about">Über</string>
|
||||
<string name="app_description">Eine offene, leichtgewichtige YouTube App für Android.</string>
|
||||
<string name="app_description">Eine offene, schlanke YouTube App für Android.</string>
|
||||
<string name="app_license_title">NewPipes Lizenz</string>
|
||||
<string name="contribution_encouragement">Ob Ideen, Übersetzung, Design-Änderungen, Code-Aufräumung oder richtig große Code-Änderungen - Hilfe ist immer willkommen. Je mehr geholfen wird, desto besser wird NewPipe!</string>
|
||||
<string name="title_licenses">Drittanbieter Lizenzen</string>
|
||||
<string name="title_licenses">Drittanbieter-Lizenzen</string>
|
||||
<string name="view_on_github">Auf GitHub ansehen</string>
|
||||
<string name="contribution_title">Beitragen</string>
|
||||
<string name="settings_category_downloads_title">Download</string>
|
||||
<string name="settings_file_charset_title">Erlaubt Zeichen im Dateinamen</string>
|
||||
<string name="settings_file_replacement_character_summary">Ungültige Zeichen werden mit diesem Zeichen ersetzt</string>
|
||||
<string name="settings_file_replacement_character_summary">Ungültige Zeichen werden durch dieses Zeichen ersetzt</string>
|
||||
<string name="settings_file_replacement_character_title">Ersetzungszeichen</string>
|
||||
|
||||
<string name="charset_letters_and_digits">Buchstaben und Zahlen</string>
|
||||
@@ -223,12 +223,12 @@
|
||||
|
||||
|
||||
<string name="notification_channel_name">NewPipe Benachrichtigung</string>
|
||||
<string name="notification_channel_description">Benachrichtigungen für NewPipe Hintergrund- und Pop-up Player</string>
|
||||
<string name="notification_channel_description">Benachrichtigungen für NewPipe-Hintergrund- und Pop-up Player</string>
|
||||
|
||||
<string name="tab_main">Main</string>
|
||||
<string name="tab_main">Hauptmenü</string>
|
||||
<string name="settings_category_player_behavior_title">Verhalten</string>
|
||||
<string name="settings_category_history_title">Verlauf</string>
|
||||
<string name="playlist">Playlist</string>
|
||||
<string name="settings_category_history_title">Verlauf & Cache</string>
|
||||
<string name="playlist">Wiedergabeliste</string>
|
||||
<string name="undo">Rückgängig machen</string>
|
||||
|
||||
<string name="search_no_results">Keine Ergebnisse</string>
|
||||
@@ -262,7 +262,7 @@
|
||||
<string name="select_a_channel">Wähle einen Kanal aus</string>
|
||||
<string name="no_channel_subscribed_yet">Noch kein Kanal abonniert</string>
|
||||
<string name="trending">Trends</string>
|
||||
<string name="popup_playing_append">In der Warteschlange des Pop-up Players</string>
|
||||
<string name="popup_playing_append">In der Warteschlange des Pop-up-Players</string>
|
||||
<string name="play_all">Alles abspielen</string>
|
||||
|
||||
<string name="play_queue_remove">Entfernen</string>
|
||||
@@ -286,7 +286,7 @@
|
||||
<string name="show_hold_to_append_summary">Tipp anzeigen, wenn der Hintergrundwiedergabe- oder Pop-up-Button auf der Videodetailseite gedrückt gehalten wird</string>
|
||||
<string name="background_player_append">In der Warteschlange der Hintergrundwiedergabe</string>
|
||||
<string name="new_and_hot">Neu & Heiß</string>
|
||||
<string name="hold_to_append">Halten zum Hinzufügen zur Warteschleife</string>
|
||||
<string name="hold_to_append">Halten, um der Playlist hinzuzufügen</string>
|
||||
<string name="show_hold_to_append_title">\"Gedrückt halten, um Tipp hinzuzufügen\" anzeigen</string>
|
||||
<string name="unknown_content">[Unbekannt]</string>
|
||||
|
||||
@@ -298,8 +298,8 @@
|
||||
<string name="donation_title">Spenden</string>
|
||||
<string name="give_back">Zurückgeben</string>
|
||||
<string name="website_title">Website</string>
|
||||
<string name="website_encouragement">Um mehr Informationen und die aktuellsten Nachrichten über NewPipe zu bekommen, besuche unsere Website.</string>
|
||||
<string name="donation_encouragement">NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit damit verbringen, dir das beste Erlebnis zu bieten. Jetzt ist es an der Zeit, etwas zurückzugeben, um sicherzustellen, dass unsere Entwickler NewPipe noch besser machen können, während sie eine Tasse Java genießen!</string>
|
||||
<string name="website_encouragement">Um mehr Informationen und die neuesten Nachrichten über NewPipe zu erhalten, besuche unsere Website.</string>
|
||||
<string name="donation_encouragement">NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit darauf verwenden, dir die beste Nutzererfahrung zu bieten. Hilf jetzt den Entwicklern, NewPipe noch besser zu machen, und spendiere Ihnen eine Tasse Java-Kaffee!</string>
|
||||
<string name="service_title">Service</string>
|
||||
<string name="no_player_found_toast">Kein Streamplayer gefunden (Du kannst VLC installieren, um ihn abzuspielen)</string>
|
||||
<string name="default_content_country_title">Standard-Land des Inhalts</string>
|
||||
@@ -318,8 +318,6 @@
|
||||
|
||||
<string name="drawer_open">Navigationsleiste öffnen</string>
|
||||
<string name="drawer_close">Navigationsleiste schließen</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Mit bevorzugtem Player öffnen</string>
|
||||
<string name="preferred_player_settings_title">Bevorzugter Player</string>
|
||||
|
||||
<string name="video_player">Video-Player</string>
|
||||
<string name="background_player">Hintergrund-Player</string>
|
||||
@@ -331,7 +329,7 @@
|
||||
<string name="import_data_title">Datenbank importieren</string>
|
||||
<string name="export_data_title">Datenbank exportieren</string>
|
||||
<string name="import_data_summary">Wird deinen Verlauf und deine Abos überschreiben</string>
|
||||
<string name="export_data_summary">Verlauf, Abos und Playlists exportieren.</string>
|
||||
<string name="export_data_summary">Verlauf, Abos und Wiedergabelisten exportieren.</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>
|
||||
@@ -351,24 +349,24 @@
|
||||
|
||||
<string name="delete_stream_history_prompt">Möchtest du dieses Element aus dem Wiedergabeverlauf löschen?</string>
|
||||
<string name="delete_all_history_prompt">Bist du sicher, dass du alle Elemente aus dem Verlauf löschen möchtest?</string>
|
||||
<string name="title_last_played">Zuletzt Wiedergegeben</string>
|
||||
<string name="title_most_played">Am Meisten Wiedergegeben</string>
|
||||
<string name="title_last_played">Zuletzt wiedergegeben</string>
|
||||
<string name="title_most_played">Am häufigsten wiedergegeben</string>
|
||||
|
||||
<string name="always_ask_open_action">Immer fragen</string>
|
||||
|
||||
<string name="create_playlist">Neue Playlist Erstellen</string>
|
||||
<string name="delete_playlist">Playlist Löschen</string>
|
||||
<string name="rename_playlist">Playlist umbenennen</string>
|
||||
<string name="append_playlist">Zu Playlist Hinzufügen</string>
|
||||
<string name="set_as_playlist_thumbnail">Als Thumbnail der Playlist festlegen</string>
|
||||
<string name="create_playlist">Wiedergabeliste erstellen</string>
|
||||
<string name="delete_playlist">Wiedergabeliste löschen</string>
|
||||
<string name="rename_playlist">Wiedergabeliste umbenennen</string>
|
||||
<string name="append_playlist">Zur Wiedergabeliste hinzufügen</string>
|
||||
<string name="set_as_playlist_thumbnail">Als Vorschaubild der Wiedergabeliste festlegen</string>
|
||||
|
||||
<string name="unbookmark_playlist">Lesezeichen entfernen</string>
|
||||
|
||||
<string name="delete_playlist_prompt">Möchtest du diese Playlist löschen?</string>
|
||||
<string name="playlist_creation_success">Playlist erfolgreich erstellt</string>
|
||||
<string name="playlist_add_stream_success">Zur Playlist hinzugefügt</string>
|
||||
<string name="playlist_thumbnail_change_success">Thumbnail der Playlist geändert</string>
|
||||
<string name="playlist_delete_failure">Löschen der Playlist fehlgeschlagen</string>
|
||||
<string name="delete_playlist_prompt">Diese Wiedergabeliste löschen?</string>
|
||||
<string name="playlist_creation_success">Wiedergabeliste erstellt</string>
|
||||
<string name="playlist_add_stream_success">Zur Wiedergabeliste hinzugefügt</string>
|
||||
<string name="playlist_thumbnail_change_success">Vorschaubild der Wiedergabeliste geändert</string>
|
||||
<string name="playlist_delete_failure">Löschen der Wiedergabeliste fehlgeschlagen</string>
|
||||
|
||||
<string name="caption_none">Keine Untertitel</string>
|
||||
|
||||
@@ -377,17 +375,17 @@
|
||||
<string name="normal_caption_font_size">Normale Schriftgröße</string>
|
||||
<string name="controls_download_desc">Stream-Datei herunterladen</string>
|
||||
<string name="use_inexact_seek_title">Benutze schnelle ungenaue Suche</string>
|
||||
<string name="use_inexact_seek_summary">Ungenaues Suchen erlaubt dem Player die Positionen schneller mit geringerer Genauigkeit zu suchen</string>
|
||||
<string name="use_inexact_seek_summary">Mit ungenauem Suchen kann die Abspielposition schneller erreicht werden, aber auf Kosten der Genauigkeit</string>
|
||||
<string name="file">Datei</string>
|
||||
|
||||
<string name="invalid_directory">Ungültiges Verzeichnis</string>
|
||||
<string name="invalid_file">Datei existiert nicht oder nicht ausreichende Rechte um sie zu lesen oder zu beschreiben</string>
|
||||
<string name="invalid_file">"Datei existiert nicht, oder die Rechte zum Lesen oder Schreiben fehlen"</string>
|
||||
<string name="file_name_empty_error">Dateiname darf nicht leer sein</string>
|
||||
<string name="error_occurred_detail">Ein Fehler ist aufgetreten: %1$s</string>
|
||||
|
||||
<string name="caption_auto_generated">Automatisch erzeugt</string>
|
||||
<string name="smaller_caption_font_size">Kleinere Schriftgröße</string>
|
||||
<string name="larger_caption_font_size">Größere Schriftgröße</string>
|
||||
<string name="smaller_caption_font_size">Kleinere Schrift</string>
|
||||
<string name="larger_caption_font_size">Größere Schrift</string>
|
||||
|
||||
<string name="enable_leak_canary_title">LeakCanary aktivieren</string>
|
||||
<string name="import_from">Import von</string>
|
||||
@@ -399,11 +397,64 @@
|
||||
<string name="import_file_title">Datei importieren</string>
|
||||
<string name="previous_export">Vorheriger Export</string>
|
||||
|
||||
<string name="import_network_expensive_warning">Beachte, dass diese Aktion sehr Netzwerk intensiv sein kann.
|
||||
\n
|
||||
<string name="import_network_expensive_warning">Beachte, dass diese Aktion das Netzwerk stark belasten kann.
|
||||
\n
|
||||
\nMöchtest du fortfahren?</string>
|
||||
<string name="download_thumbnail_title">Thumbnails laden</string>
|
||||
<string name="download_thumbnail_title">Vorschaubilder laden</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Bildercache gelöscht</string>
|
||||
<string name="metadata_cache_wipe_title">Leere die gecachten Metadaten</string>
|
||||
<string name="metadata_cache_wipe_summary">Entferte all die gecachten Website Daten</string>
|
||||
<string name="metadata_cache_wipe_summary">Entfene alle gecachten Website-Daten</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Metadatencache gelöscht</string>
|
||||
<string name="settings_category_debug_title">Debug</string>
|
||||
<string name="invalid_source">Ungültige Datei-/Inhaltsquelle</string>
|
||||
<string name="export_complete_toast">Export vollständig</string>
|
||||
<string name="import_complete_toast">"Import vollständig "</string>
|
||||
<string name="playlist_name_input">Name</string>
|
||||
<string name="import_export_title">Import/Export</string>
|
||||
<string name="import_title">Import</string>
|
||||
<string name="subscriptions_import_unsuccessful">Import der Abonnements fehlgeschlagen</string>
|
||||
<string name="subscriptions_export_unsuccessful">Export der Abonnements fehlgeschlagen</string>
|
||||
|
||||
<string name="playback_speed_control">Wiedergabegeschwindigkeit</string>
|
||||
<string name="playback_tempo">Geschwindigkeit</string>
|
||||
<string name="playback_pitch">Tonhöhe</string>
|
||||
<string name="unhook_checkbox">Aushaken (kann zu Verzerrungen führen)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">Standard</string>
|
||||
<string name="download_thumbnail_summary">Deaktivieren Sie diese Option, um das Laden aller Miniaturansichten zu stoppen und Daten und Speicherverbrauch zu sparen. Wenn Sie dies ändern, wird sowohl der In-Memory- als auch der On-Disk-Image-Cache gelöscht.</string>
|
||||
<string name="auto_queue_title">Nächsten Stream automatisch einreihen</string>
|
||||
<string name="auto_queue_summary">Fügen Sie automatisch einen zugehörigen Stream hinzu, wenn die Wiedergabe auf dem letzten Stream in einer sich nicht wiederholenden Wiedergabewarteschlange beginnt.</string>
|
||||
<string name="drawer_header_action_paceholder_text">Hier wird bald etwas stehen ;D</string>
|
||||
|
||||
|
||||
<string name="bookmark_playlist">Lesezeichen Wiedergabeliste</string>
|
||||
<string name="resize_fit">ANPASSEN</string>
|
||||
<string name="resize_fill">FÜLLEN</string>
|
||||
<string name="resize_zoom">VERGRÖßERN</string>
|
||||
|
||||
<string name="enable_leak_canary_summary">Speicherlecküberwachung kann dazu führen, dass die App beim Heap-Dumping nicht mehr reagiert</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Fehler außerhalb des Lebenszyklus melden</string>
|
||||
<string name="enable_disposed_exceptions_summary">Erzwingen der Meldung unzustellbarer Rx-Ausnahmen, die außerhalb des Lebenszyklus von Fragmenten oder Aktivitäten nach der Entsorgung auftreten</string>
|
||||
|
||||
<string name="import_youtube_instructions">Um Ihre YouTube-Abonnements zu importieren, benötigen Sie die Exportdatei, die Sie mit dieser Anleitung herunterladen können:
|
||||
\n
|
||||
\n1. Gehen Sie zu dieser URL: %1$s
|
||||
\n2. Melden Sie sich bei Ihrem Konto an, wenn Sie dazu aufgefordert werden.
|
||||
\n3. Der Ladevorgang sollte beginnen (das ist die Exportdatei)</string>
|
||||
<string name="import_soundcloud_instructions">Um Ihre SoundCloud-Folgen zu importieren, müssen Sie Ihre Profil-URL oder -ID kennen. Wenn ja, geben Sie einfach einen der beiden in die untenstehende Eingabe ein und Sie können loslegen.
|
||||
\n
|
||||
\nWenn nicht, können Sie diesen Schritten folgen:
|
||||
\n
|
||||
\n1. Aktivieren Sie den \"Desktop-Modus\" in einigen Browsern (die Seite ist für mobile Geräte nicht verfügbar).
|
||||
\n2. Gehen Sie zu dieser URL: %1$s
|
||||
\n3. Melden Sie sich bei Ihrem Konto an, wenn Sie dazu aufgefordert werden.
|
||||
\n4. Kopieren Sie die URL, zu der Sie umgeleitet wurden (das ist Ihre Profil-URL)</string>
|
||||
<string name="import_soundcloud_instructions_hint">yourid, soundcloud.com/yourid</string>
|
||||
|
||||
<string name="no_streams_available_download">Keine Streams zum Download verfügbar</string>
|
||||
|
||||
<string name="preferred_open_action_settings_title">Bevorzugte öffnen Aktion</string>
|
||||
<string name="preferred_open_action_settings_summary">Standardaktion beim Öffnen von Inhalten - %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
<string name="finish">OK</string>
|
||||
|
||||
<string name="msg_name">Nombre del archivo</string>
|
||||
<string name="msg_threads">Conexiones simultáneas</string>
|
||||
<string name="msg_threads">Threads</string>
|
||||
<string name="msg_error">Error</string>
|
||||
<string name="msg_server_unsupported">Servidor no soportado</string>
|
||||
<string name="msg_exists">El archivo ya existe</string>
|
||||
@@ -125,7 +125,7 @@
|
||||
|
||||
<string name="could_not_load_image">No se pudo cargar la imagen</string>
|
||||
<string name="app_ui_crash">La interfaz de la app dejó de funcionar</string>
|
||||
<string name="info_labels">Lo sucedido:\\nSolicitud:\\nIdioma del contenido:\\nServicio:\\nHora GMT:\\nPaquete:\\nVersión:\\nVersión del S.O:\\nRango global de la IP:</string>
|
||||
<string name="info_labels">Lo sucedido:\\nPetición:\\nIdioma del contenido:\\nServicio:\\nHora GMT:\\nPaquete:\\nVersión:\\nVersión del SO:</string>
|
||||
|
||||
<string name="black_theme_title">Negro</string>
|
||||
|
||||
@@ -233,7 +233,7 @@ abrir en modo popup</string>
|
||||
|
||||
<string name="settings_category_player_title">Reproductor</string>
|
||||
<string name="settings_category_player_behavior_title">Funcionamiento</string>
|
||||
<string name="settings_category_history_title">Historial</string>
|
||||
<string name="settings_category_history_title">Historial y Caché</string>
|
||||
<string name="playlist">Lista de reproducción</string>
|
||||
<string name="undo">Deshacer</string>
|
||||
|
||||
@@ -320,10 +320,6 @@ abrir en modo popup</string>
|
||||
<string name="video_streams_empty">No se encontraron transmisiones de vídeo</string>
|
||||
<string name="audio_streams_empty">No se encontraron transmisiones de audio</string>
|
||||
|
||||
<string name="preferred_player_share_menu_title">\@string/preferred_player_settings_title</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Abrir con el reproductor preferido</string>
|
||||
<string name="preferred_player_settings_title">Reproductor preferido</string>
|
||||
|
||||
<string name="video_player">Reproductor de vídeo</string>
|
||||
<string name="background_player">Reproductor de fondo</string>
|
||||
<string name="popup_player">Reproductor de popup</string>
|
||||
@@ -450,4 +446,21 @@ abrir en modo popup</string>
|
||||
<string name="import_network_expensive_warning">Tenga en cuenta que esta operación puede ser costosa para la red.
|
||||
\n
|
||||
\n¿Desea continuar?</string>
|
||||
</resources>
|
||||
<string name="download_thumbnail_title">Cargar Miniaturas</string>
|
||||
<string name="download_thumbnail_summary">Descativar todas las miniaturas para evitar que se carguen, guarden datos y usen memoria. Al cambiar esto se borrarán tanto la caché de imágenes en la memoria como en el disco.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Caché de imagen limpiado</string>
|
||||
<string name="metadata_cache_wipe_title">Metadatos eliminados del caché</string>
|
||||
<string name="metadata_cache_wipe_summary">Eliminar todos los datos de la página web en caché</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Metadatos del caché limpiados</string>
|
||||
<string name="playback_speed_control">Control de velocidad de la reproducción</string>
|
||||
<string name="playback_tempo">Tiempo</string>
|
||||
<string name="playback_pitch">Tono</string>
|
||||
<string name="unhook_checkbox">Desenganchar (puede casusar distorsión)</string>
|
||||
<string name="playback_nightcore">Nightcore (tipo de música)</string>
|
||||
<string name="playback_default">Reproducción por defecto</string>
|
||||
<string name="no_streams_available_download">No hay streams disponibles para descargar</string>
|
||||
|
||||
<string name="preferred_open_action_settings_title">Acción de abrir preferida</string>
|
||||
<string name="preferred_open_action_settings_summary">Acción por defecto al abrir contenido — %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -307,9 +307,6 @@
|
||||
<string name="video_streams_empty">Ez da bideo jariorik aurkitu</string>
|
||||
<string name="audio_streams_empty">Ez da audio jariorik aurkitu</string>
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Ireki gogoko erreproduzigailuarekin</string>
|
||||
<string name="preferred_player_settings_title">Gogoko erreproduzigailua</string>
|
||||
|
||||
<string name="video_player">Bideo erreproduzigailua</string>
|
||||
<string name="background_player">Bigarren planoko erreproduzigailua</string>
|
||||
<string name="popup_player">Laster-leiho erreproduzigailua</string>
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
<string name="delete_item_search_history">Haluatko poistaa tämän hakuhistoriasta?</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Jatka toistoa</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="info_labels">Mikä:\\nPyyntö:\\nSisällön kieli:\\nPalvelu:\\nGMT Aika:\\nPaketti:\\nVersio:\\nOS versio:\\nGlob. IP väli:</string>
|
||||
<string name="info_labels">Mikä:\\nPyyntö:\\nSisällön kieli:\\nPalvelu:\\nGMT Aika:\\nPaketti:\\nVersio:\\nOS versio:</string>
|
||||
<string name="copyright" formatted="true">© %1$s %2$s %3$s alla</string>
|
||||
<string name="main_page_content">Pääsivun sisältö</string>
|
||||
<string name="blank_page_summary">Tyhjä sivu</string>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<string name="m4a_description">M4A — meilleure qualité</string>
|
||||
<string name="download_dialog_title">Télécharger</string>
|
||||
<string name="next_video_title">Vidéo suivante</string>
|
||||
<string name="show_next_and_similar_title">Afficher les vidéos suivantes et similaires</string>
|
||||
<string name="show_next_and_similar_title">Afficher vidéos suivantes/liées</string>
|
||||
<string name="url_not_supported_toast">Lien non pris en charge</string>
|
||||
<string name="settings_category_video_audio_title">Vidéo et audio</string>
|
||||
<string name="settings_category_other_title">Autre</string>
|
||||
@@ -66,11 +66,11 @@
|
||||
|
||||
<string name="error_snackbar_message">Désolé, des erreurs se sont produites.</string>
|
||||
<string name="content">Contenu</string>
|
||||
<string name="show_age_restricted_content_title">Afficher le contenu avec restriction d\'âge</string>
|
||||
<string name="show_age_restricted_content_title">Afficher le contenu pour adultes</string>
|
||||
<string name="duration_live">Direct</string>
|
||||
|
||||
<string name="could_not_load_thumbnails">Impossible de charger toutes les miniatures</string>
|
||||
<string name="youtube_signature_decryption_error">Impossible de déchiffrer la signature du lien</string>
|
||||
<string name="youtube_signature_decryption_error">Impossible de déchiffrer le lien de la vidéo</string>
|
||||
<string name="light_parsing_error">Impossible d\'analyser complètement le site web</string>
|
||||
<string name="live_streams_not_supported">Il s\'agit d\'un direct, non supporté pour le moment.</string>
|
||||
<string name="sorry_string">Désolé, une erreur inattendue s\'est produite.</string>
|
||||
@@ -121,7 +121,7 @@
|
||||
<string name="no_available_dir">Sélectionner un dossier de téléchargement disponible</string>
|
||||
|
||||
<string name="could_not_load_image">Impossible de charger l\'image</string>
|
||||
<string name="app_ui_crash">L’appli/l’interface a crashé</string>
|
||||
<string name="app_ui_crash">L’application a crashé</string>
|
||||
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="black_theme_title">Noir</string>
|
||||
@@ -141,7 +141,7 @@
|
||||
<string name="later">Plus tard</string>
|
||||
<string name="disabled">Désactivé</string>
|
||||
|
||||
<string name="info_labels">Quoi :\\nRequête :\\nLangue du contenu :\\nService :\\nHeure GMT :\\nPaquet :\\nVersion :\\nVersion du système :\\nGlob. Plage IP :</string>
|
||||
<string name="info_labels">Quoi :\\nRequête :\\nLangue du contenu :\\nService :\\nHeure GMT :\\nPaquet :\\nVersion :\\nVersion du système :</string>
|
||||
<string name="use_old_player_title">Utiliser l\'ancien lecteur</string>
|
||||
<string name="use_old_player_summary">Ancienne version du lecteur Mediaframework</string>
|
||||
<string name="short_thousand">K</string>
|
||||
@@ -154,7 +154,7 @@
|
||||
<string name="controls_popup_title">Fenêtre</string>
|
||||
|
||||
<string name="default_popup_resolution_title">Résolution de la fenêtre par défaut</string>
|
||||
<string name="show_higher_resolutions_title">Afficher des résolutions plus élevées</string>
|
||||
<string name="show_higher_resolutions_title">Afficher résolutions plus élevées</string>
|
||||
<string name="show_higher_resolutions_summary">Certains appareils uniquement supportent la lecture 2K/4K</string>
|
||||
<string name="default_video_format_title">Format vidéo par défaut</string>
|
||||
<string name="popup_remember_size_pos_title">Mémoriser la taille et la position de la fenêtre</string>
|
||||
@@ -225,11 +225,11 @@
|
||||
<string name="notification_channel_name">Notification NewPipe</string>
|
||||
<string name="undo">Annuler</string>
|
||||
|
||||
<string name="enable_watch_history_summary">Conserver les vidéos vues</string>
|
||||
<string name="enable_watch_history_summary">Conserver les vidéos regardées</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Reprendre si au premier plan</string>
|
||||
<string name="settings_category_player_title">Lecteur</string>
|
||||
<string name="settings_category_player_behavior_title">Comportement</string>
|
||||
<string name="settings_category_history_title">Historique</string>
|
||||
<string name="settings_category_history_title">Historique et cache</string>
|
||||
<string name="playlist">Liste de lecture</string>
|
||||
<string name="notification_channel_description">Notifications pour les lecteurs \"Arrière-plan\" et \"Fenêtre\" de NewPipe</string>
|
||||
|
||||
@@ -279,8 +279,8 @@
|
||||
<string name="play_queue_remove">Retirer</string>
|
||||
<string name="play_queue_stream_detail">Détails</string>
|
||||
<string name="play_queue_audio_settings">Paramètres audio</string>
|
||||
<string name="show_hold_to_append_title">Afficher l\'aide \"Appui long pour mettre en file d\'attente\"</string>
|
||||
<string name="show_hold_to_append_summary">Afficher l\'aide en appuyant sur les boutons \"Arrière-plan\" et \"Fenêtre\" sur la page de détails d\'une vidéo</string>
|
||||
<string name="show_hold_to_append_title">Afficher les fenêtres d\'aide</string>
|
||||
<string name="show_hold_to_append_summary">Afficher l\'aide \"Appui long pour mettre en file d\'attente\" en appuyant sur les boutons \"Arrière-plan\" et \"Fenêtre\" sur la page de détails d\'une vidéo</string>
|
||||
<string name="unknown_content">[Inconnu]</string>
|
||||
|
||||
<string name="player_recoverable_failure">Récupération de l\'erreur du lecteur</string>
|
||||
@@ -318,9 +318,6 @@
|
||||
<string name="video_streams_empty">Aucun flux vidéo trouvé</string>
|
||||
<string name="audio_streams_empty">Aucun flux audio trouvé</string>
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Ouvrir avec le lecteur préféré</string>
|
||||
<string name="preferred_player_settings_title">Lecteur préféré</string>
|
||||
|
||||
<string name="video_player">Lecteur vidéo</string>
|
||||
<string name="background_player">Lecteur en arrière-plan</string>
|
||||
<string name="popup_player">Lecteur en fenêtré</string>
|
||||
@@ -354,7 +351,7 @@
|
||||
<string name="delete_all">Tout supprimer</string>
|
||||
<string name="delete_stream_history_prompt">Voulez vous supprimer cet élément de votre historique ?</string>
|
||||
<string name="delete_all_history_prompt">Êtes vous sûr de supprimer tout votre historique ?</string>
|
||||
<string name="title_most_played">Titres les plus joués</string>
|
||||
<string name="title_most_played">Vidéos les plus regardées</string>
|
||||
|
||||
<string name="always_ask_open_action">Toujours demander</string>
|
||||
|
||||
@@ -371,17 +368,89 @@
|
||||
<string name="delete_playlist_prompt">Voulez-vous supprimer cette playlist ?</string>
|
||||
<string name="playlist_creation_success">Playlist créée avec succès</string>
|
||||
<string name="playlist_add_stream_success">Ajoutée à la playlist</string>
|
||||
<string name="playlist_thumbnail_change_success">La playlist à été modifiée avec succès</string>
|
||||
<string name="playlist_thumbnail_change_success">Modification de la playlist réussie</string>
|
||||
<string name="playlist_delete_failure">Échec de la suppression de la playlist</string>
|
||||
|
||||
<string name="caption_none">Aucun sous-titre</string>
|
||||
|
||||
<string name="resize_fit">Redimensionner</string>
|
||||
<string name="resize_fit">Ajuster</string>
|
||||
<string name="resize_zoom">Zoom</string>
|
||||
|
||||
<string name="caption_font_size_settings_title">Taille de police des sous-titres</string>
|
||||
<string name="smaller_caption_font_size">Police plus petite</string>
|
||||
<string name="normal_caption_font_size">Police normale</string>
|
||||
<string name="larger_caption_font_size">Police plus grande</string>
|
||||
<string name="caption_font_size_settings_title">Taille des sous-titres</string>
|
||||
<string name="smaller_caption_font_size">Petite</string>
|
||||
<string name="normal_caption_font_size">Normale</string>
|
||||
<string name="larger_caption_font_size">Grande</string>
|
||||
|
||||
<string name="use_inexact_seek_title">Recherche rapide approximative</string>
|
||||
<string name="use_inexact_seek_summary">Permettre au lecteur d\'accéder plus rapidement à une position au détriment de la précision</string>
|
||||
<string name="download_thumbnail_title">Charger miniatures</string>
|
||||
<string name="download_thumbnail_summary">Désactiver pour arrêter le chargement de toutes les vignettes et sauvegarder les données et l\'utilisation de la mémoire. Modifier cela effacera à la fois le cache d\'image en mémoire et le cache d\'image sur disque.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Le cache des images a été nettoyé</string>
|
||||
<string name="metadata_cache_wipe_title">Supprimer les données en cache</string>
|
||||
<string name="metadata_cache_wipe_summary">Supprimer toutes les pages web mises en cache</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Données en cache supprimées</string>
|
||||
<string name="file">Fichier</string>
|
||||
|
||||
<string name="invalid_directory">Dossier non valide</string>
|
||||
<string name="invalid_source">Fichier/source du contenu non valide</string>
|
||||
<string name="invalid_file">Le fichier n\'existe pas ou il n\'est pas permis de le lire</string>
|
||||
<string name="file_name_empty_error">Le nom du fichier ne peut être vide</string>
|
||||
<string name="error_occurred_detail">Une erreur s\'est produite: %1$s</string>
|
||||
|
||||
<string name="delete_one">Supprimer un seul média</string>
|
||||
<string name="drawer_header_action_paceholder_text">En cours de développement ;D</string>
|
||||
|
||||
|
||||
<string name="controls_download_desc">Télécharger le fichier de flux</string>
|
||||
<string name="auto_queue_title">Vidéo suivante en file d\'attente</string>
|
||||
<string name="auto_queue_summary">Mettre automatiquement en file d\'attente la vidéo suivante liée à la vidéo en cours de lecture (si vous n\'êtes pas en mode répétition)</string>
|
||||
<string name="settings_category_debug_title">Débogage</string>
|
||||
<string name="resize_fill">Remplir</string>
|
||||
<string name="caption_auto_generated">Générés automatiquement</string>
|
||||
<string name="enable_leak_canary_title">Activer LeakCanary</string>
|
||||
<string name="enable_leak_canary_summary">Surveiller la baisse de mémoire. L\'application pourrait ne plus répondre correctement</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Signaler erreurs Out-of-lifecycle</string>
|
||||
<string name="enable_disposed_exceptions_summary">Forcer le signalement des exceptions Rx qui surviennent hors activité</string>
|
||||
|
||||
<string name="import_export_title">Importer/Exporter</string>
|
||||
<string name="import_title">Importer</string>
|
||||
<string name="import_from">Importer de</string>
|
||||
<string name="export_to">Exporter vers</string>
|
||||
|
||||
<string name="import_ongoing">Importation en cours…</string>
|
||||
<string name="export_ongoing">Exporation en cours…</string>
|
||||
|
||||
<string name="import_file_title">Importer fichier</string>
|
||||
<string name="previous_export">Export précédent</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">Import des abonnements échoué</string>
|
||||
<string name="subscriptions_export_unsuccessful">Export des abonnements échoué</string>
|
||||
|
||||
<string name="import_youtube_instructions">\"Pour importer vos abonnements YouTube vous devez d\'abord télécharger un fichier export de YouTube, selon les modalités suivantes:
|
||||
\n
|
||||
\n1. Allez à ce lien: %1$s
|
||||
\n2. Connectez-vous à votre compte
|
||||
\n3. Le téléchargement devrait démarrer (votre fichier export YouTube)\"</string>
|
||||
<string name="import_soundcloud_instructions">Pour importer vos abonnements SoundCloud vous devez connaitre l\'URL de votre profil ou votre identifiant (id). Si vous le savez, tapez-le ci-dessous.
|
||||
\n
|
||||
\nSi vous ne le connaissez pas, veuillez suivre les étapes suivantes:
|
||||
\n
|
||||
\n1. Activer le \\\"mode bureau\\\" dans votre navigateur (le site n\'est pas accesible en mode mobile)
|
||||
\n2. Aller à ce lien: %1$s
|
||||
\n3. Connectez-vous à votre compte
|
||||
\n4. Copier l\'URL vers lequel vous venez d\'être redirigé (qui est l\'URL de votre profil)</string>
|
||||
<string name="import_soundcloud_instructions_hint">votreid, soundcloud.com/votreid</string>
|
||||
|
||||
<string name="import_network_expensive_warning">N\'oubliez pas que cette opération peut consommer beaucoup de données mobiles.
|
||||
\n
|
||||
\nSouhaitez-vous continuer ?</string>
|
||||
|
||||
<string name="playback_speed_control">Vitesse de lecture</string>
|
||||
<string name="playback_tempo"/>
|
||||
<string name="unhook_checkbox">Unhook (déformations possibles)</string>
|
||||
<string name="playback_default">Défaut</string>
|
||||
<string name="preferred_open_action_settings_title">Ouverture préférée</string>
|
||||
<string name="preferred_open_action_settings_summary">Action par défaut lors de l\'ouverture de contenu - %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
<string name="error_snackbar_action">דווח</string>
|
||||
<string name="what_device_headline">מידע:</string>
|
||||
<string name="what_happened_headline">מה קרה:</string>
|
||||
<string name="info_labels">מה:\\nבקשה:\\nשפת התוכן:\\nשירות:\\nזמן GMT:\\nחבילה:\\nגרסה:\\nגרסת מערכת ההפעלה:\\nGlob. טווח IP:</string>
|
||||
<string name="info_labels">מה:\\nבקשה:\\nשפת התוכן:\\nשירות:\\nזמן GMT:\\nחבילה:\\nגרסה:\\nגרסת מערכת ההפעלה:</string>
|
||||
<string name="subscribe_button_title">הירשם כמנוי</string>
|
||||
<string name="subscribed_button_title">רשום כמנוי</string>
|
||||
<string name="channel_unsubscribed">ביטול מנוי לערוץ</string>
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
<string name="error_snackbar_action">रिपोर्ट</string>
|
||||
<string name="what_device_headline">जानकारी:</string>
|
||||
<string name="what_happened_headline">क्या हुआ:</string>
|
||||
<string name="info_labels">क्या:\\nमांग:\\nविषयवस्तु की भाषा:\\nसेवा:\\nजीएमटी समय:\\nपैकेज:\\nसंस्करण:\\nOS संस्करण:\\nGLOB. IP रेंज:</string>
|
||||
<string name="info_labels">क्या:\\nमांग:\\nविषयवस्तु की भाषा:\\nसेवा:\\nजीएमटी समय:\\nपैकेज:\\nसंस्करण:\\nOS संस्करण:</string>
|
||||
<string name="your_comment">आपकी टिप्पणी:</string>
|
||||
<string name="error_details_headline">विवरण:</string>
|
||||
|
||||
@@ -332,9 +332,6 @@
|
||||
<string name="drawer_header_action_paceholder_text">जल्द ही यहां पर कुछ आएगा ;D</string>
|
||||
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">पसंदीदा प्लेयर से खोलें</string>
|
||||
<string name="preferred_player_settings_title">पसंदीदा प्लेयर</string>
|
||||
|
||||
<string name="video_player">वीडियो प्लेयर</string>
|
||||
<string name="background_player">बैकग्राउंड प्लेयर</string>
|
||||
<string name="popup_player">पॉपअप प्लेयर</string>
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
<string name="error_snackbar_action">PRIJAVI</string>
|
||||
<string name="what_device_headline">Informacije:</string>
|
||||
<string name="what_happened_headline">Što se dogodilo:</string>
|
||||
<string name="info_labels">Što:\\nRequest:\\nContent Jezik:\\nService:\\nGMT Vrijeme:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP range:</string>
|
||||
<string name="info_labels">Što:\\nRequest:\\nContent Jezik:\\nService:\\nGMT Vrijeme:\\nPackage:\\nVersion:\\nOS version:</string>
|
||||
<string name="your_comment">Vaš komentar (na engleskom):</string>
|
||||
<string name="error_details_headline">Detalji:</string>
|
||||
|
||||
@@ -272,10 +272,10 @@
|
||||
|
||||
<string name="kiosk">Nazivi kioska</string>
|
||||
<string name="trending">U trendu</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="top_50">Vrh 50</string>
|
||||
<string name="new_and_hot">Novo i popularno</string>
|
||||
<string name="title_activity_background_player">Red čekanja</string>
|
||||
<string name="title_activity_popup_player">Skočni reproduktor</string>
|
||||
<string name="title_activity_background_player">Lista čekanja</string>
|
||||
<string name="title_activity_popup_player">Skočni reproduktcija</string>
|
||||
<string name="play_queue_remove">Ukloni</string>
|
||||
<string name="play_queue_stream_detail">Detalji</string>
|
||||
<string name="play_queue_audio_settings">Postavke zvuka</string>
|
||||
@@ -286,4 +286,53 @@
|
||||
<string name="website_title">Web stranica</string>
|
||||
<string name="start_here_on_main">Ovdje započni reprodukciju</string>
|
||||
<string name="start_here_on_background">Ovdje započni repr. u pozadini</string>
|
||||
<string name="enqueue_on_background">Dadaj na red čekanja u pozadini</string>
|
||||
<string name="enqueue_on_popup">Dodaj na red u skočnom prozoru</string>
|
||||
<string name="start_here_on_popup">Započni ovdje u Skočnom prozoru</string>
|
||||
|
||||
<string name="drawer_open">Otvori ladicu</string>
|
||||
<string name="drawer_close">Zatvori ladicu</string>
|
||||
<string name="drawer_header_action_paceholder_text">Nešto će zasigurno doći ovdje :D</string>
|
||||
|
||||
|
||||
<string name="video_player">Video reprodukcija</string>
|
||||
<string name="background_player">Pozadinska reprodukcija</string>
|
||||
<string name="popup_player">Skočna reprodukcija</string>
|
||||
<string name="always_ask_open_action">Uvjek pitaj</string>
|
||||
|
||||
<string name="preferred_player_fetcher_notification_title">Dohvaćam informacije…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">Odabrani sadržaj se učitava</string>
|
||||
|
||||
<string name="create_playlist">Napravi novu reprodukcijsku listu</string>
|
||||
<string name="delete_playlist">Izbriši reprodukcijsku listu</string>
|
||||
<string name="rename_playlist">Preimenuj reprodukcijsku listu</string>
|
||||
<string name="playlist_name_input">Ime liste</string>
|
||||
<string name="append_playlist">Dodaj na reprodukcijsku listu</string>
|
||||
<string name="set_as_playlist_thumbnail">Postavi kao sliku na listu</string>
|
||||
|
||||
<string name="bookmark_playlist">Markirajte reprodukcijsku listu</string>
|
||||
<string name="unbookmark_playlist">"Odmarkirajte "</string>
|
||||
|
||||
<string name="delete_playlist_prompt">Želite li izbrisati listu?</string>
|
||||
<string name="playlist_creation_success">Reprodukcijska lista je kreirana</string>
|
||||
<string name="playlist_add_stream_success">Dodano na listuu</string>
|
||||
<string name="playlist_thumbnail_change_success">Slika liste se promjenila</string>
|
||||
<string name="playlist_delete_failure">Greška prilikom brisanja liste</string>
|
||||
|
||||
<string name="caption_none">Bez naslova</string>
|
||||
|
||||
<string name="resize_fit">Podesno</string>
|
||||
<string name="resize_fill">Ispuniti</string>
|
||||
<string name="resize_zoom">Povećaj</string>
|
||||
|
||||
<string name="caption_auto_generated">Auto generirano</string>
|
||||
<string name="caption_font_size_settings_title">Veličina fonta naslova</string>
|
||||
<string name="smaller_caption_font_size">Manji font</string>
|
||||
<string name="normal_caption_font_size">Normalni font</string>
|
||||
<string name="larger_caption_font_size">Veći font</string>
|
||||
|
||||
<string name="enable_leak_canary_title">Omogući \"LeakCanary\"</string>
|
||||
<string name="enable_leak_canary_summary">Monitoring curenja memorije može uzrokovati greške u radu aplikacije prilikom odlaganje gomile</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Izvijestite o pogreškama izvan životnog ciklusa</string>
|
||||
</resources>
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
<string name="video_streams_empty">Nem található videó formátum</string>
|
||||
<string name="audio_streams_empty">Nem található hang csatorna</string>
|
||||
|
||||
<string name="info_labels">Mi:\\nKérés:\\nTartalom nyelve:\\nSzolgáltatás:\\nGMT Idő:\\nCsomag:\\nVerzió:\\nOperációs Rendszer verzió:\\nGlobális IP tartomány:</string>
|
||||
<string name="info_labels">Mi:\\nKérés:\\nTartalom nyelve:\\nSzolgáltatás:\\nGMT Idő:\\nCsomag:\\nVerzió:\\nOperációs Rendszer verzió:</string>
|
||||
<string name="search_no_results">Nincs találat</string>
|
||||
<string name="use_old_player_title">Régi lejátszó használata</string>
|
||||
</resources>
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<string name="next_video_title">Video berikutnya</string>
|
||||
<string name="show_next_and_similar_title">Tampilkan video berikutnya dan terkait</string>
|
||||
<string name="url_not_supported_toast">URL tidak didukung</string>
|
||||
<string name="search_language_title">Bahasa konten</string>
|
||||
<string name="search_language_title">Bahasa konten bawaan</string>
|
||||
<string name="settings_category_video_audio_title">Video & Audio</string>
|
||||
<string name="settings_category_appearance_title">Tampilan</string>
|
||||
<string name="settings_category_other_title">Lainnya</string>
|
||||
@@ -50,7 +50,7 @@
|
||||
<string name="play_btn_text">Putar</string>
|
||||
<string name="content">Konten</string>
|
||||
<string name="show_age_restricted_content_title">Tampilkan konten batasan usia</string>
|
||||
<string name="video_is_age_restricted">Video Dibatasi Usia. Aktifkan video batasan usia di pengaturan terlebih dahulu.</string>
|
||||
<string name="video_is_age_restricted">Video Dibatasi Usia. Aktifkan video batasan usia bisa lewat Pengaturan.</string>
|
||||
<string name="network_error">Galat jaringan</string>
|
||||
<string name="could_not_load_thumbnails">Tidak bisa memuat semua Thumbnail</string>
|
||||
<string name="did_you_mean">Mungkin maksud Anda: %1$s ?</string>
|
||||
@@ -95,13 +95,13 @@
|
||||
<string name="storage_permission_denied">Izin akses penyimpanan ditolak</string>
|
||||
|
||||
<string name="delete">Hapus</string>
|
||||
<string name="view">Tonton</string>
|
||||
<string name="view">Putar</string>
|
||||
<string name="start">Mulai</string>
|
||||
<string name="pause">Jeda</string>
|
||||
<string name="checksum">Ceksum</string>
|
||||
|
||||
<string name="add">Misi baru</string>
|
||||
<string name="finish">Oke</string>
|
||||
<string name="finish">OK</string>
|
||||
|
||||
<string name="msg_name">Nama berkas</string>
|
||||
<string name="msg_error">Galat</string>
|
||||
@@ -111,14 +111,14 @@
|
||||
<string name="msg_running">NewPipe sedang Mengunduh</string>
|
||||
<string name="msg_running_detail">Sentuh untuk detail</string>
|
||||
<string name="msg_wait">Mohon tunggu…</string>
|
||||
<string name="msg_copied">Disalin ke papan klip.</string>
|
||||
<string name="no_available_dir">Silakan pilih direktori unduhan yang tersedia.</string>
|
||||
<string name="msg_copied">Disalin ke papan klip</string>
|
||||
<string name="no_available_dir">Silakan pilih direktori unduhan yang tersedia</string>
|
||||
|
||||
<string name="no_player_found">Tidak ditemukan pemutar stream. Apakah anda ingin memasang VLC?</string>
|
||||
<string name="youtube_signature_decryption_error">Tidak bisa mendekrip tanda tangan URL video.</string>
|
||||
<string name="youtube_signature_decryption_error">Tidak bisa mendekrip tanda tangan URL video</string>
|
||||
<string name="app_ui_crash">App/UI rusak</string>
|
||||
<string name="could_not_get_stream">Tidak bisa mendapatkan stream apapun</string>
|
||||
<string name="info_labels">Apa:\\nPermintaan:\\nBahasa Konten:\\nLayanan:\\nWaktu GMT:\\nPaket:\\nVersi:\\nVersi OS:\\nIP:</string>
|
||||
<string name="info_labels">Apa:\\nPermintaan:\\nBahasa Konten:\\nLayanan:\\nWaktu GMT:\\nPaket:\\nVersi:\\nVersi OS:</string>
|
||||
<string name="user_report">Laporan pengguna</string>
|
||||
|
||||
<string name="msg_threads">Thread</string>
|
||||
@@ -217,5 +217,170 @@ membuka di mode popup</string>
|
||||
<string name="title_activity_history">Riwayat</string>
|
||||
<string name="history_disabled">Riwayat dinonaktifkan</string>
|
||||
<string name="action_history">Riwayat</string>
|
||||
<string name="history_empty">Riwayat kosong.</string>
|
||||
</resources>
|
||||
<string name="history_empty">Riwayat kosong</string>
|
||||
<string name="download_thumbnail_title">"Muat "</string>
|
||||
<string name="download_thumbnail_summary">Matikan untuk memberhentikan semua thumbnail dari pemuatan untuk menghemat data dan penggunaan memoti. Mengubah ini akan membersihkan tembolok didalam-memori dan gambar didalam-diska.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">"Tembolok gambar "</string>
|
||||
<string name="metadata_cache_wipe_title">Bersihkan metadata tembolok</string>
|
||||
<string name="metadata_cache_wipe_summary">Hapus semua data tembolok laman web</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Tembolok metadata dibersihkan</string>
|
||||
<string name="auto_queue_summary">Otomatis menambahkan stream yg terkait ketika playback mulai saat stream terakhir di antri memutar tidak-mengulang</string>
|
||||
<string name="enable_watch_history_summary">Simpan daftar video yg telah ditonton</string>
|
||||
<string name="show_hold_to_append_title">Tampilkan tahan untuk menambahkan tip</string>
|
||||
<string name="show_hold_to_append_summary">Tampilkan tip ketika belakang layar atau tombol sembul ditekan pada laman rinci video</string>
|
||||
<string name="default_content_country_title">Konten negara bawaan</string>
|
||||
<string name="service_title">Layanan</string>
|
||||
<string name="settings_category_player_title">Pemutar</string>
|
||||
<string name="settings_category_player_behavior_title">Kebiasaan</string>
|
||||
<string name="settings_category_history_title">Riwayat & Tembolok</string>
|
||||
<string name="settings_category_debug_title">Debug</string>
|
||||
<string name="background_player_append">Mengantri di belakang pemutar</string>
|
||||
<string name="popup_playing_append">Mengantri di pemutar sembulan</string>
|
||||
<string name="playlist">Daftar putar</string>
|
||||
<string name="undo">Tidak jadi</string>
|
||||
<string name="play_all">Putar Semua</string>
|
||||
<string name="always">Selalu</string>
|
||||
<string name="just_once">Hanya Sekali</string>
|
||||
<string name="file">Berkas</string>
|
||||
|
||||
<string name="notification_channel_description">Notifikasi untuk Layar Belakang NewPipe dan Pemutar Sembulan</string>
|
||||
|
||||
<string name="unknown_content">[Tidak diketahui]</string>
|
||||
|
||||
<string name="toggle_orientation">Ubah Orientasi</string>
|
||||
<string name="switch_to_background">Kembali ke Layar Belakang</string>
|
||||
<string name="switch_to_popup">Kembali ke Sembulan</string>
|
||||
<string name="switch_to_main">Kembali 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">Akan menimpa riwayat dan langganan kamu saat ini</string>
|
||||
<string name="export_data_summary">Ekspor riwayat, langganan dan daftar putar.</string>
|
||||
<string name="player_stream_failure">Gagal memutar stream ini</string>
|
||||
<string name="player_unrecoverable_failure">Galat yg tidak bisa dibetulkan terjadi di pemutar</string>
|
||||
<string name="player_recoverable_failure">Memulihkan dari galat pemutar</string>
|
||||
<string name="external_player_unsupported_link_type">Playar eksternal tidak mendukung tipe tautan ini</string>
|
||||
<string name="invalid_url_toast">URL tidak valid</string>
|
||||
<string name="video_streams_empty">Stream video tidak ditemukan</string>
|
||||
<string name="audio_streams_empty">Stream audio tidak ditemukan</string>
|
||||
<string name="invalid_directory">Direktori tidak valid</string>
|
||||
<string name="invalid_source">Berkas/konten sumber tidak valid</string>
|
||||
<string name="invalid_file">Berkas tidak ada atau tidak memiliki izin untuk membaca atau menulisnya</string>
|
||||
<string name="file_name_empty_error">Nama berkas tidak boleh kosong</string>
|
||||
<string name="error_occurred_detail">Sebuah galat terjadi: %1$s</string>
|
||||
|
||||
<string name="search_no_results">Tidak ada hasil</string>
|
||||
<string name="empty_subscription_feed_subtitle">Tidak Ada Apapun Disini</string>
|
||||
<string name="detail_drag_description">Geser untuk ubah urutan</string>
|
||||
|
||||
<string name="no_subscribers">Tidak ada pelanggan</string>
|
||||
<plurals name="subscribers">
|
||||
<item quantity="other">%s pelanggan</item>
|
||||
</plurals>
|
||||
|
||||
<string name="no_views">Tidak ada tampil</string>
|
||||
<plurals name="views">
|
||||
<item quantity="other">%s tampil</item>
|
||||
</plurals>
|
||||
|
||||
<string name="no_videos">Tidak ada video</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="other">%s video</item>
|
||||
</plurals>
|
||||
|
||||
<string name="create">Buat</string>
|
||||
<string name="delete_one">Hapus Satu</string>
|
||||
<string name="delete_all">Hapus Semua</string>
|
||||
<string name="dismiss">Diamkan</string>
|
||||
<string name="rename">Ubah nama</string>
|
||||
|
||||
<string name="donation_title">Donasi</string>
|
||||
<string name="donation_encouragement">NewPipe dikembangkan oleh relawan yg menghabiskan waktu luangnya untuk pengalaman terbaik kamu. Kini saatnya memberikan kembali untuk memastikan pengembang kita dapat membuat NewPipe lebih baik lagi sambil menikmati secangkir kopi jawa!</string>
|
||||
<string name="give_back">Beri balik</string>
|
||||
<string name="website_title">Situs</string>
|
||||
<string name="website_encouragement">Untuk mendapatkan informasi lebih jauh dan berita terbaru tentang NewPipe kunjungi situs kami.</string>
|
||||
<string name="title_history_search">Sudah dicari</string>
|
||||
<string name="history_cleared">Riwayat terhapus</string>
|
||||
<string name="item_deleted">Item terhapus</string>
|
||||
<string name="delete_item_search_history">Kamu ingin menghapus item ini dari riwayat pencarian?</string>
|
||||
<string name="delete_stream_history_prompt">Kamu ingin menghapus item ini dari riwayat tontonan?</string>
|
||||
<string name="delete_all_history_prompt">Kamu yakin ingin menghapus semua item dari riwayat?</string>
|
||||
<string name="title_last_played">Diputar Terakhir</string>
|
||||
<string name="title_most_played">Paling sering Diputar</string>
|
||||
|
||||
<string name="main_page_content">Konten laman utama</string>
|
||||
<string name="blank_page_summary">Laman Kosong</string>
|
||||
<string name="kiosk_page_summary">Laman Kiosk</string>
|
||||
<string name="subscription_page_summary">Laman Langganan</string>
|
||||
<string name="feed_page_summary">Laman Umpan</string>
|
||||
<string name="channel_page_summary">Laman Kanal</string>
|
||||
<string name="select_a_channel">Pilih sebuah kanal</string>
|
||||
<string name="no_channel_subscribed_yet">Tidak ada kanal yg dilanggani</string>
|
||||
<string name="select_a_kiosk">Pilih sebuah kiosk</string>
|
||||
<string name="export_complete_toast">Ekspor berhasil</string>
|
||||
<string name="import_complete_toast">Impor berhasil</string>
|
||||
<string name="no_valid_zip_file">Berkas ZIP tidak valid</string>
|
||||
<string name="could_not_import_all_files">Perhatian: Tidak dapat mengimpor semua berkas.</string>
|
||||
<string name="override_current_data">Ini akan menimpa pengaturan kamu saat ini.</string>
|
||||
|
||||
<string name="kiosk">Kiosk</string>
|
||||
<string name="trending">Tren</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">Baru & Panas</string>
|
||||
<string name="title_activity_background_player">Pemutar Layar Belakang</string>
|
||||
<string name="title_activity_popup_player">Pemutar Sembulan</string>
|
||||
<string name="play_queue_remove">Hapus</string>
|
||||
<string name="play_queue_stream_detail">Rincian</string>
|
||||
<string name="play_queue_audio_settings">Pengaturan Audio</string>
|
||||
<string name="hold_to_append">Tahan Untuk Mengantri</string>
|
||||
<string name="enqueue_on_background">Antri di Layar Belakang</string>
|
||||
<string name="enqueue_on_popup">Antri di Sembulan</string>
|
||||
<string name="start_here_on_main">Mulai Putar Disini</string>
|
||||
<string name="start_here_on_background">Mulai Disini di Layar Belakang</string>
|
||||
<string name="start_here_on_popup">Mulai Disini di Sembulan</string>
|
||||
|
||||
<string name="drawer_open">Bukan Menu</string>
|
||||
<string name="drawer_close">Tutup Menu</string>
|
||||
<string name="drawer_header_action_paceholder_text">Sesuatu akan hadir disini nanti ;D</string>
|
||||
|
||||
|
||||
<string name="video_player">Pemutar video</string>
|
||||
<string name="background_player">Pemutar Layar Belakang</string>
|
||||
<string name="popup_player">Pemutar sembulan</string>
|
||||
<string name="always_ask_open_action">Selalu tanya</string>
|
||||
|
||||
<string name="preferred_player_fetcher_notification_title">Mendapatkan info…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">Konten yg diminta sedang dimuat</string>
|
||||
|
||||
<string name="create_playlist">Buat Daftar Putar Baru</string>
|
||||
<string name="delete_playlist">Hapus Daftar Putar</string>
|
||||
<string name="rename_playlist">Ubah Nama Daftar Putar</string>
|
||||
<string name="playlist_name_input">Nama</string>
|
||||
<string name="append_playlist">Tambah Ke Daftar Putar</string>
|
||||
<string name="set_as_playlist_thumbnail">Atur sebagai Thumbnail Daftar Putar</string>
|
||||
|
||||
<string name="bookmark_playlist">Markah Daftar Putar</string>
|
||||
<string name="unbookmark_playlist">Hapus Markah</string>
|
||||
|
||||
<string name="delete_playlist_prompt">Kamu ingin menghapus daftar putar ini?</string>
|
||||
<string name="playlist_creation_success">Daftar putar berhasil dibuat</string>
|
||||
<string name="playlist_add_stream_success">Ditambahkan ke daftar putar</string>
|
||||
<string name="playlist_thumbnail_change_success">Thumbnail daftar putar diubah</string>
|
||||
<string name="playlist_delete_failure">Gagal untuk menghapus daftar putar</string>
|
||||
|
||||
<string name="caption_none">Tidak ada deskripsi</string>
|
||||
|
||||
<string name="resize_fit">PAS</string>
|
||||
<string name="resize_fill">ISI</string>
|
||||
<string name="resize_zoom">PERBESAR</string>
|
||||
|
||||
<string name="caption_auto_generated">Dihasilkan-otomatis</string>
|
||||
<string name="caption_font_size_settings_title">Ukuran fon deskripsi</string>
|
||||
<string name="smaller_caption_font_size">Fon lebih kecil</string>
|
||||
<string name="normal_caption_font_size">Fon normal</string>
|
||||
<string name="larger_caption_font_size">Fon lebih besar</string>
|
||||
|
||||
<string name="enable_leak_canary_title">Aktifkan LeakCanary</string>
|
||||
<string name="playback_nightcore"></string>
|
||||
<string name="playback_default">Bawaan</string>
|
||||
</resources>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<resources>
|
||||
<string name="view_count_text">%1$s visualizzazioni</string>
|
||||
<string name="upload_date_text">Pubblicato il %1$s</string>
|
||||
<string name="no_player_found">Nessun riproduttore trovato. Vuoi installare VLC?</string>
|
||||
<string name="no_player_found">Nessun lettore multimediale trovato. Vuoi installare VLC?</string>
|
||||
<string name="install">Installa</string>
|
||||
<string name="cancel">Annulla</string>
|
||||
<string name="open_in_browser">Apri nel browser</string>
|
||||
@@ -15,8 +15,8 @@
|
||||
<string name="choose_browser">Scegli il browser</string>
|
||||
<string name="screen_rotation">rotazione</string>
|
||||
<string name="download_path_title">Percorso dei video scaricati</string>
|
||||
<string name="download_path_summary">Cartella in cui memorizzare i video scaricati</string>
|
||||
<string name="download_path_dialog_title">Inserisci il percorso per i download</string>
|
||||
<string name="download_path_summary">Cartella in cui salvare i video scaricati</string>
|
||||
<string name="download_path_dialog_title">Inserisci il percorso per i video scaricati</string>
|
||||
<string name="default_resolution_title">Risoluzione predefinita</string>
|
||||
<string name="play_with_kodi_title">Riproduci con Kodi</string>
|
||||
<string name="kore_not_found">L\'applicazione Kore non è stata trovata. Vuoi installarla?</string>
|
||||
@@ -25,27 +25,27 @@
|
||||
<string name="play_audio">Audio</string>
|
||||
<string name="default_audio_format_title">Formato audio predefinito</string>
|
||||
<string name="webm_description">WebM — formato libero</string>
|
||||
<string name="m4a_description">M4A — qualità migliore</string>
|
||||
<string name="m4a_description">M4A — miglior qualità</string>
|
||||
<string name="download_dialog_title">Scarica</string>
|
||||
<string name="next_video_title">Prossimo video</string>
|
||||
<string name="show_next_and_similar_title">Mostra video a seguire e video simili</string>
|
||||
<string name="show_next_and_similar_title">Mostra prossimi video e video simili</string>
|
||||
<string name="url_not_supported_toast">URL non supportato</string>
|
||||
<string name="search_language_title">Lingua predefinita per i contenuti</string>
|
||||
<string name="settings_category_video_audio_title">Video e Audio</string>
|
||||
|
||||
<string name="list_thumbnail_view_description">Anteprima video</string>
|
||||
<string name="detail_thumbnail_view_description">Anteprima video</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Miniatura dell\'immagine di profilo degli utenti</string>
|
||||
<string name="list_thumbnail_view_description">Miniatura anteprima video</string>
|
||||
<string name="detail_thumbnail_view_description">Miniatura anteprima video</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Miniatura dell\'immagine di profilo dell\'utente</string>
|
||||
<string name="detail_dislikes_img_view_description">Non mi piace</string>
|
||||
<string name="detail_likes_img_view_description">Mi piace</string>
|
||||
<string name="err_dir_create">Impossibile creare la cartella di download \'%1$s\'</string>
|
||||
<string name="info_dir_created">Creata la cartella per i download \'%1$s\'</string>
|
||||
<string name="use_external_video_player_title">Usa un riproduttore video esterno</string>
|
||||
<string name="use_external_audio_player_title">Usa un riproduttore audio esterno</string>
|
||||
<string name="use_external_video_player_title">Usa un lettore video esterno</string>
|
||||
<string name="use_external_audio_player_title">Usa un lettore audio esterno</string>
|
||||
|
||||
<string name="download_path_audio_title">Percorso degli audio scaricati</string>
|
||||
<string name="download_path_audio_summary">Percorso dove salvare gli audio scaricati</string>
|
||||
<string name="download_path_audio_dialog_title">Inserisci la cartella per i file audio</string>
|
||||
<string name="download_path_audio_summary">Cartella in cui salvare gli audio scaricati</string>
|
||||
<string name="download_path_audio_dialog_title">Inserisci la cartella per gli audio scaricati</string>
|
||||
|
||||
<string name="theme_title">Tema</string>
|
||||
<string name="dark_theme_title">Scuro</string>
|
||||
@@ -53,17 +53,17 @@
|
||||
|
||||
<string name="settings_category_appearance_title">Aspetto</string>
|
||||
<string name="settings_category_other_title">Altro</string>
|
||||
<string name="background_player_playing_toast">In riproduzione in sottofondo</string>
|
||||
<string name="background_player_playing_toast">Riproduzione in sottofondo</string>
|
||||
<string name="play_btn_text">Riproduci</string>
|
||||
|
||||
<string name="general_error">Errore</string>
|
||||
<string name="network_error">Errore di rete</string>
|
||||
<string name="network_error">Errore di connessione</string>
|
||||
<string name="could_not_load_thumbnails">Impossibile caricare tutte le miniature</string>
|
||||
<string name="youtube_signature_decryption_error">Impossibile decriptare la firma dell\'URL del video</string>
|
||||
<string name="content_not_available">Contenuto non disponibile</string>
|
||||
<string name="blocked_by_gema">Bloccato dalla GEMA</string>
|
||||
<string name="blocked_by_gema">Bloccato da GEMA</string>
|
||||
<string name="use_tor_title">Usa Tor</string>
|
||||
<string name="use_tor_summary">(Sperimentale) Forza il traffico in download tramite Tor per una maggiore riservatezza (lo streaming dei video non è ancora supportato).</string>
|
||||
<string name="use_tor_summary">(Sperimentale) Forza il download tramite Tor per una maggiore riservatezza (lo streaming dei video non è ancora supportato).</string>
|
||||
|
||||
<string name="parsing_error">Impossibile analizzare il sito web</string>
|
||||
<string name="could_not_setup_download_menu">Impossibile impostare il menù di download</string>
|
||||
@@ -73,19 +73,19 @@
|
||||
|
||||
|
||||
<string name="content">Contenuti</string>
|
||||
<string name="show_age_restricted_content_title">Mostra contenuti vincolati all\'età</string>
|
||||
<string name="video_is_age_restricted">Questo video è riservato ad un pubblico maggiorenne. Per accedervi, abilita \"Mostra video vincolati all\'età\" nelle impostazioni.</string>
|
||||
<string name="show_age_restricted_content_title">Mostra contenuti vietati ai minori</string>
|
||||
<string name="video_is_age_restricted">Questo video è riservato ad un pubblico maggiorenne. Per accedervi, abilita \"Mostra contenuti vietati ai minori\" nelle impostazioni.</string>
|
||||
|
||||
<string name="main_bg_subtitle">Tocca cerca per iniziare</string>
|
||||
<string name="autoplay_by_calling_app_title">Riproduzione automatica</string>
|
||||
<string name="autoplay_by_calling_app_summary">Riproduci i video automaticamente quando NewPipe viene aperto da un\'altra app</string>
|
||||
<string name="autoplay_by_calling_app_summary">Riproduci automaticamente i video quando NewPipe viene aperto da un\'altra app</string>
|
||||
<string name="duration_live">in diretta</string>
|
||||
|
||||
<string name="light_parsing_error">Impossibile analizzare completamente il sito web</string>
|
||||
<string name="could_not_get_stream">Non è stato ottenuto alcun flusso</string>
|
||||
<string name="sorry_string">Ci dispiace, non sarebbe dovuto succedere.</string>
|
||||
<string name="could_not_get_stream">Impossibile ottenere alcun flusso</string>
|
||||
<string name="sorry_string">Spiacenti, non sarebbe dovuto succedere.</string>
|
||||
<string name="error_report_button_text">Segnala l\'errore via e-mail</string>
|
||||
<string name="error_snackbar_message">Ci dispiace, c\'è stato qualche errore.</string>
|
||||
<string name="error_snackbar_message">Spiacenti, si sono verificati degli errori.</string>
|
||||
<string name="error_snackbar_action">SEGNALA</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">Cosa è successo:</string>
|
||||
@@ -108,7 +108,7 @@
|
||||
<string name="pause">Pausa</string>
|
||||
<string name="view">Riproduci</string>
|
||||
<string name="delete">Elimina</string>
|
||||
<string name="checksum">Codice di controllo</string>
|
||||
<string name="checksum">Checksum</string>
|
||||
|
||||
<string name="add">Nuovo obiettivo</string>
|
||||
<string name="finish">OK</string>
|
||||
@@ -118,16 +118,16 @@
|
||||
<string name="msg_error">Errore</string>
|
||||
<string name="msg_server_unsupported">Server non supportato</string>
|
||||
<string name="msg_exists">File già esistente</string>
|
||||
<string name="msg_url_malform">URL errato od errore di rete</string>
|
||||
<string name="msg_url_malform">URL errato o errore di connessione</string>
|
||||
<string name="msg_running">Download di NewPipe</string>
|
||||
<string name="msg_running_detail">Tocca per maggiori dettagli</string>
|
||||
<string name="msg_wait">Attendi…</string>
|
||||
<string name="msg_copied">Copiato negli appunti</string>
|
||||
<string name="no_available_dir">Seleziona una cartella disponibile in cui salvare i download</string>
|
||||
<string name="no_available_dir">Seleziona una cartella per il salvataggio dei download</string>
|
||||
|
||||
<string name="could_not_load_image">Impossibile caricare l\'immagine</string>
|
||||
<string name="app_ui_crash">L\'app/UI si è interrotta</string>
|
||||
<string name="info_labels">Cosa:\\nRichiesta:\\nLingua contenuto:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO:\\nRange IP glob.:</string>
|
||||
<string name="info_labels">Cosa:\\nRichiesta:\\nLingua contenuto:\\nServizio:\\nOrario GMT:\\nPacchetto:\\nVersione:\\nVersione SO:</string>
|
||||
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="reCaptcha_title">reCAPTCHA</string>
|
||||
@@ -142,20 +142,20 @@
|
||||
<string name="short_million">M</string>
|
||||
<string name="short_billion">B</string>
|
||||
|
||||
<string name="recaptcha_request_toast">È richiesto di risolvere un reCAPTCHA</string>
|
||||
<string name="recaptcha_request_toast">È richiesta la risoluzione del reCAPTCHA</string>
|
||||
|
||||
<string name="yes">Si</string>
|
||||
<string name="yes">Sì</string>
|
||||
<string name="later">Più tardi</string>
|
||||
|
||||
|
||||
<string name="open_in_popup_mode">Apri in modalità popup</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe modalità a comparsa</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe modalità popup</string>
|
||||
|
||||
<string name="popup_playing_toast">Riproduzione in modalità popup</string>
|
||||
<string name="disabled">Disattivato</string>
|
||||
|
||||
<string name="use_old_player_title">Usa il vecchio riproduttore</string>
|
||||
<string name="use_external_video_player_summary">Alcune risoluzioni NON avranno l\'audio se questa opzione viene abilitata</string>
|
||||
<string name="use_old_player_title">Usa il vecchio lettore multimediale</string>
|
||||
<string name="use_external_video_player_summary">Alcune risoluzioni NON riprodurranno l\'audio se questa opzione viene abilitata</string>
|
||||
<string name="controls_background_title">In sottofondo</string>
|
||||
<string name="controls_popup_title">Popup</string>
|
||||
|
||||
@@ -163,10 +163,10 @@
|
||||
<string name="show_higher_resolutions_title">Mostra risoluzioni più alte</string>
|
||||
<string name="show_higher_resolutions_summary">Solo alcuni dispositivi supportano la riproduzione video in 2K e 4K</string>
|
||||
<string name="default_video_format_title">Formato video predefinito</string>
|
||||
<string name="popup_remember_size_pos_title">Ricorda grandezza e posizione del popup</string>
|
||||
<string name="popup_remember_size_pos_summary">Ricorda l\'ultima grandezza e posizione del popup</string>
|
||||
<string name="player_gesture_controls_title">Controlli gestuali</string>
|
||||
<string name="player_gesture_controls_summary">Usa i gesti per controllare luminosità e volume</string>
|
||||
<string name="popup_remember_size_pos_title">Ricorda dimensione e posizione del popup</string>
|
||||
<string name="popup_remember_size_pos_summary">Ricorda l\'ultima dimensione e posizione del popup</string>
|
||||
<string name="player_gesture_controls_title">Controlli gestuali del 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="show_search_suggestions_title">Suggerimenti di ricerca</string>
|
||||
<string name="show_search_suggestions_summary">Mostra i suggerimenti durante la ricerca</string>
|
||||
|
||||
@@ -177,26 +177,26 @@
|
||||
<string name="popup_resizing_indicator_title">Ridimensionamento</string>
|
||||
<string name="best_resolution">Risoluzione migliore</string>
|
||||
|
||||
<string name="use_old_player_summary">Precedente riproduttore integrato Mediaframework</string>
|
||||
<string name="use_old_player_summary">Precedente lettore multimediale Mediaframework integrato</string>
|
||||
|
||||
<string name="msg_popup_permission">Questo permesso è necessario
|
||||
\nper aprire la modalità popup</string>
|
||||
\nper riprodurre in modalità popup</string>
|
||||
|
||||
<string name="action_settings">Impostazioni</string>
|
||||
<string name="action_about">Informazioni</string>
|
||||
<string name="title_licenses">Licenze di terzi</string>
|
||||
<string name="copyright" formatted="true">© %1$s %2$s protetto da licenza %3$s</string>
|
||||
<string name="title_licenses">Licenze di terze parti</string>
|
||||
<string name="copyright" formatted="true">© %1$s di %2$s protetto da licenza %3$s</string>
|
||||
<string name="error_unable_to_load_license">Impossible caricare il contratto di licenza</string>
|
||||
<string name="action_open_website">Visita il sito</string>
|
||||
<string name="tab_about">Informazioni</string>
|
||||
<string name="tab_contributors">Contributori</string>
|
||||
<string name="tab_licenses">Licenze</string>
|
||||
<string name="app_description">Un\'interfaccia leggera e libera per accedere a YouTube su Android.</string>
|
||||
<string name="app_description">Un\'interfaccia libera e leggera per accedere a YouTube su Android.</string>
|
||||
<string name="view_on_github">Mostra su GitHub</string>
|
||||
<string name="app_license_title">Licenza di NewPipe</string>
|
||||
<string name="contribution_encouragement">Un aiuto è sempre il benvenuto: nuove idee, design o traduzioni, piccoli cambi o modifiche radicali del codice rendono l\'applicazione sempre migliore!</string>
|
||||
<string name="contribution_encouragement">Un aiuto è sempre il benvenuto: nuove idee e funzionalità, traduzioni, modifiche al design o cambiamenti radicali del codice rendono l\'applicazione sempre migliore!</string>
|
||||
<string name="read_full_license">Leggi la licenza</string>
|
||||
<string name="contribution_title">Partecipa</string>
|
||||
<string name="contribution_title">Contribuisci</string>
|
||||
<string name="title_activity_about">Informazioni su NewPipe</string>
|
||||
<string name="subscribe_button_title">Iscriviti</string>
|
||||
<string name="subscribed_button_title">Iscritto</string>
|
||||
@@ -209,9 +209,9 @@
|
||||
<string name="fragment_whats_new">Novità</string>
|
||||
|
||||
<string name="enable_search_history_title">Cronologia ricerche</string>
|
||||
<string name="enable_search_history_summary">Salva le ricerche localmente</string>
|
||||
<string name="enable_search_history_summary">Salva le ricerche</string>
|
||||
<string name="enable_watch_history_title">Cronologia</string>
|
||||
<string name="enable_watch_history_summary">Salva la cronologia dei video guardati</string>
|
||||
<string name="enable_watch_history_summary">Salva la cronologia dei video visualizzati</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Riprendi tornando in primo piano</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Continua a riprodurre dopo le interruzioni (es. chiamate)</string>
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
<string name="charset_most_special_characters">Caratteri speciali</string>
|
||||
|
||||
<string name="title_activity_history">Cronologia</string>
|
||||
<string name="title_history_search">Ricerche</string>
|
||||
<string name="title_history_search">Ricerche effettuate</string>
|
||||
<string name="title_history_view">Visualizzati</string>
|
||||
<string name="history_disabled">La cronologia è disabilitata</string>
|
||||
<string name="action_history">Cronologia</string>
|
||||
@@ -233,10 +233,10 @@
|
||||
<string name="history_cleared">Cronologia cancellata</string>
|
||||
|
||||
<string name="tab_main">Principale</string>
|
||||
<string name="settings_category_player_title">Riproduttore</string>
|
||||
<string name="settings_category_player_title">Lettore multimediale</string>
|
||||
<string name="settings_category_player_behavior_title">Comportamento</string>
|
||||
<string name="settings_category_history_title">Cronologia</string>
|
||||
<string name="playlist">Scaletta</string>
|
||||
<string name="settings_category_history_title">Cronologia e cache</string>
|
||||
<string name="playlist">Playlist</string>
|
||||
<string name="undo">Annulla</string>
|
||||
|
||||
<string name="notification_channel_name">Notifiche NewPipe</string>
|
||||
@@ -257,8 +257,8 @@
|
||||
|
||||
<string name="no_videos">Nessun video</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="one">%s filmato</item>
|
||||
<item quantity="other">%s filmati</item>
|
||||
<item quantity="one">%s video</item>
|
||||
<item quantity="other">%s video</item>
|
||||
</plurals>
|
||||
|
||||
<string name="item_deleted">Elemento eliminato</string>
|
||||
@@ -269,84 +269,80 @@
|
||||
<string name="blank_page_summary">Pagina vuota</string>
|
||||
<string name="kiosk_page_summary">Edicola</string>
|
||||
<string name="subscription_page_summary">Pagina iscrizione</string>
|
||||
<string name="feed_page_summary">Pagina del feed</string>
|
||||
<string name="feed_page_summary">Pagina feed</string>
|
||||
<string name="channel_page_summary">Pagina del canale</string>
|
||||
<string name="select_a_channel">Seleziona un canale</string>
|
||||
<string name="no_channel_subscribed_yet">Non ancora iscritto a nessun canale</string>
|
||||
<string name="no_channel_subscribed_yet">Non sei ancora iscritto a nessun canale</string>
|
||||
<string name="select_a_kiosk">Seleziona un\'edicola</string>
|
||||
|
||||
<string name="kiosk">Edicola</string>
|
||||
<string name="trending">In tendenza</string>
|
||||
<string name="top_50">Primi 50</string>
|
||||
<string name="new_and_hot">Nuovi e caldi</string>
|
||||
<string name="show_hold_to_append_title">Mostra il suggerimento di tenere premuto per appendere</string>
|
||||
<string name="show_hold_to_append_summary">Mostra un suggerimento quando il pulsante in sottofondo o a comparsa viene premuto nella pagina dei dettagli di un video</string>
|
||||
<string name="background_player_append">In coda sul lettore di sfondo</string>
|
||||
<string name="popup_playing_append">In coda al riproduttore a comparsa</string>
|
||||
<string name="trending">Tendenze</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">New & hot</string>
|
||||
<string name="show_hold_to_append_title">Mostra il suggerimento \"tenere premuto per aggiungere video alla coda\"</string>
|
||||
<string name="show_hold_to_append_summary">Mostra suggerimento quando il pulsante per la riproduzione popup o in sottofondo viene premuto nella pagina dei dettagli del video</string>
|
||||
<string name="background_player_append">In coda al lettore multimediale in sottofondo</string>
|
||||
<string name="popup_playing_append">In coda al lettore multimediale a comparsa</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 irrecuperabile al riproduttore</string>
|
||||
<string name="player_recoverable_failure">Recupero dall\'errore del riproduttore</string>
|
||||
<string name="player_unrecoverable_failure">Si è verificato un errore irreversibile</string>
|
||||
<string name="player_recoverable_failure">Ripristino dell\'errore del lettore multimediale</string>
|
||||
|
||||
<string name="title_activity_background_player">Riproduttore di sottofondo</string>
|
||||
<string name="title_activity_popup_player">Riproduttore a comparsa</string>
|
||||
<string name="title_activity_background_player">Riproduzione in sottofondo</string>
|
||||
<string name="title_activity_popup_player">Riproduzione in modalità popup</string>
|
||||
<string name="play_queue_remove">Rimuovi</string>
|
||||
<string name="play_queue_stream_detail">Dettagli</string>
|
||||
<string name="play_queue_audio_settings">Impostazioni audio</string>
|
||||
<string name="hold_to_append">Tieni premuto per accodare</string>
|
||||
<string name="hold_to_append">Tieni premuto per aggiungere alla coda</string>
|
||||
<string name="unknown_content">[Sconosciuto]</string>
|
||||
|
||||
<string name="enqueue_on_background">In coda sullo sfondo</string>
|
||||
<string name="enqueue_on_background">In coda in sottofondo</string>
|
||||
<string name="enqueue_on_popup">In coda nel Popup</string>
|
||||
<string name="start_here_on_main">Inizia la riproduzione qui</string>
|
||||
<string name="start_here_on_background">Inizia qui sullo sfondo</string>
|
||||
<string name="start_here_on_background">Inizia qui in sottofondo</string>
|
||||
<string name="start_here_on_popup">Inizia qui nel Popup</string>
|
||||
<string name="donation_title">Dona</string>
|
||||
<string name="website_title">Sito web</string>
|
||||
<string name="website_encouragement">Per ricevere maggiori informazioni e le ultime novità su NewPipe visita il nostro sito web.</string>
|
||||
<string name="donation_encouragement">NewPipe è sviluppato da volontari che spendono il loro tempo libero per regalarti la migliore esperienza. È tempo di restituire il favore permettendo ai nostri sviluppatori di migliorare ulteriormente NewPipe mentre gustano una tazza di Giava!</string>
|
||||
<string name="donation_encouragement">NewPipe è sviluppato da volontari che trascorrono il loro tempo libero per offrirti la migliore esperienza. È il momento di restituire il favore per assicurarsi che i nostri sviluppatori possano rendere NewPipe ancora più piacevole mentre si gustano una tazza di java!</string>
|
||||
<string name="give_back">Restituisci</string>
|
||||
<string name="default_content_country_title">Paese predefinito per i contenuti</string>
|
||||
<string name="toggle_orientation">Cambia orientamento</string>
|
||||
<string name="switch_to_background">Cambia in background</string>
|
||||
<string name="switch_to_popup">Cambia in visualizzazione a comparsa</string>
|
||||
<string name="switch_to_main">Cambia al menù principale</string>
|
||||
<string name="switch_to_background">Passa alla riproduzione in background</string>
|
||||
<string name="switch_to_popup">Passa alla visualizzazione popup</string>
|
||||
<string name="switch_to_main">Passa alla produzione predefinita</string>
|
||||
|
||||
<string name="service_title">Servizio</string>
|
||||
<string name="drawer_open">"Apri il menù "</string>
|
||||
<string name="drawer_close">Chiudi il menù</string>
|
||||
<string name="no_player_found_toast">Nessun riproduttore multimediale trovato (puoi installare VLC per riprodurlo)</string>
|
||||
<string name="no_player_found_toast">Nessun lettore multimediale trovato (puoi installare VLC per riprodurlo)</string>
|
||||
<string name="always">Sempre</string>
|
||||
<string name="just_once">Solo una volta</string>
|
||||
|
||||
<string name="external_player_unsupported_link_type">I riproduttori esterni non supportano questa tipologia di collegamenti</string>
|
||||
<string name="invalid_url_toast">URL invalido</string>
|
||||
<string name="external_player_unsupported_link_type">I lettori multimediali esterni non supportano questa tipologia di collegamenti</string>
|
||||
<string name="invalid_url_toast">URL non valido</string>
|
||||
<string name="video_streams_empty">Nessun flusso video trovato</string>
|
||||
<string name="audio_streams_empty">Nessun flusso audio trovato</string>
|
||||
|
||||
<string name="preferred_player_share_menu_title">Riproduttore preferito</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Apri con il riproduttore preferito</string>
|
||||
<string name="preferred_player_settings_title">Riproduttore preferito</string>
|
||||
|
||||
<string name="video_player">Riproduttore video</string>
|
||||
<string name="background_player">Riproduttore di fondo</string>
|
||||
<string name="popup_player">Riproduttore a comparsa</string>
|
||||
<string name="always_ask_player">Chiedi sempre</string>
|
||||
|
||||
<string name="preferred_player_fetcher_notification_title">Raccogliendo informazioni…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">Il contenuto richiesto sta caricando</string>
|
||||
<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">sovrascriverà la cronologia corrente e le iscrizioni</string>
|
||||
<string name="import_data_summary">Sovrascriverà la cronologia corrente e le iscrizioni</string>
|
||||
<string name="export_data_summary">Esporta la cronologia, le iscrizioni e le playlist.</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>
|
||||
<string name="could_not_import_all_files">Attenzione: Non posso importare tutti i file.</string>
|
||||
<string name="override_current_data">Questo sovrascriverà le tue impostazioni attuali.</string>
|
||||
<string name="could_not_import_all_files">Attenzione: Impossibile importare tutti i file.</string>
|
||||
<string name="override_current_data">Questa operazione sostituirà le tue impostazioni attuali.</string>
|
||||
|
||||
<string name="controls_download_desc">Download file del flusso.</string>
|
||||
<string name="controls_download_desc">Scarica il video.</string>
|
||||
<string name="show_info">Mostra informazioni</string>
|
||||
|
||||
<string name="tab_bookmarks">Segnalibri</string>
|
||||
@@ -361,28 +357,28 @@
|
||||
<string name="dismiss">Ignora</string>
|
||||
<string name="rename">Rinomina</string>
|
||||
|
||||
<string name="delete_stream_history_prompt">Vuoi eliminare questo oggetto dalla cronologia delle visualizzazioni?</string>
|
||||
<string name="delete_stream_history_prompt">Vuoi eliminare questo elemento dalla cronologia delle visualizzazioni?</string>
|
||||
<string name="delete_all_history_prompt">Sei sicuro di voler eliminare tutti gli elementi dalla cronologia?</string>
|
||||
<string name="title_last_played">L\'ultimo riprodotto</string>
|
||||
<string name="title_last_played">Ultima riproduzione</string>
|
||||
<string name="title_most_played">I più riprodotti</string>
|
||||
|
||||
<string name="always_ask_open_action">Chiedi sempre</string>
|
||||
|
||||
<string name="create_playlist">Crea una nuova scaletta</string>
|
||||
<string name="delete_playlist">Elimina scaletta</string>
|
||||
<string name="rename_playlist">Rinomina scaletta</string>
|
||||
<string name="create_playlist">Crea nuova playlist</string>
|
||||
<string name="delete_playlist">Elimina playlist</string>
|
||||
<string name="rename_playlist">Rinomina playlist</string>
|
||||
<string name="playlist_name_input">Nome</string>
|
||||
<string name="append_playlist">Aggiunti alla scaletta</string>
|
||||
<string name="set_as_playlist_thumbnail">Imposta come miniatura della scaletta</string>
|
||||
<string name="append_playlist">Aggiunti alla playlist</string>
|
||||
<string name="set_as_playlist_thumbnail">Imposta come miniatura della playlist</string>
|
||||
|
||||
<string name="bookmark_playlist">Segna scaletta</string>
|
||||
<string name="bookmark_playlist">Segnalibri playlist</string>
|
||||
<string name="unbookmark_playlist">Rimuovi segnalibro</string>
|
||||
|
||||
<string name="delete_playlist_prompt">Vuoi eliminarlo dalla scaletta?</string>
|
||||
<string name="playlist_creation_success">Scaletta correttamente creata</string>
|
||||
<string name="playlist_add_stream_success">Aggiunti alla scaletta</string>
|
||||
<string name="playlist_thumbnail_change_success">Miniatura della scaletta cambiata</string>
|
||||
<string name="playlist_delete_failure">L\'eliminazione della scaletta non è andata a buon fine</string>
|
||||
<string name="delete_playlist_prompt">Vuoi eliminare questa playlist?</string>
|
||||
<string name="playlist_creation_success">Playlist creata con successo</string>
|
||||
<string name="playlist_add_stream_success">Aggiunti alla playlist</string>
|
||||
<string name="playlist_thumbnail_change_success">Miniatura della playlist cambiata</string>
|
||||
<string name="playlist_delete_failure">Impossibile eliminare la playlist</string>
|
||||
|
||||
<string name="caption_none">No sottotitoli</string>
|
||||
|
||||
@@ -400,22 +396,22 @@
|
||||
<string name="settings_category_debug_title">Debug</string>
|
||||
<string name="caption_auto_generated">Generato automaticamente</string>
|
||||
<string name="enable_leak_canary_title">Abilita LeakCanary</string>
|
||||
<string name="enable_leak_canary_summary">Il controllo dei buchi di memoria potrebbe causare l\'applicazione a diventare non reattiva mentre effettua lo scarico dell\'heap</string>
|
||||
<string name="enable_leak_canary_summary">Il monitoraggio delle perdite di memoria potrebbe causare la mancata risposta dell\'applicazione durante il dumping dell\'heap</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Riporta gli errori \"fuori dal ciclo di vita\"</string>
|
||||
<string name="enable_disposed_exceptions_summary">Forza il riporto delle eccezioni Rx non consegnabili verificate fuori dal frammento o dall\'attività del \"ciclo di vita\"</string>
|
||||
<string name="enable_disposed_exceptions_title">Segnala errori \"Out-of-lifecycle\"</string>
|
||||
<string name="enable_disposed_exceptions_summary">Forza la segnalazione di eccezioni Rx non consegnabili che si verificano al di fuori del ciclo di vita dell\'attività dopo la chiusura</string>
|
||||
|
||||
<string name="use_inexact_seek_title">Usa una ricerca rapida ma imprecisa</string>
|
||||
<string name="use_inexact_seek_summary">La ricerca imprecisa permette al riproduttore di spostarti nelle posizioni più velocemente con una precisione ridotta</string>
|
||||
<string name="use_inexact_seek_title">Usa la ricerca rapida ma imprecisa</string>
|
||||
<string name="use_inexact_seek_summary">La ricerca imprecisa permette al lettore multimediale di spostarsi nelle posizioni più velocemente con una precisione ridotta</string>
|
||||
<string name="auto_queue_title">Metti in coda automaticamente il prossimo flusso</string>
|
||||
<string name="auto_queue_summary">Aggiungi automaticamente un flusso correlato mentre il playback parte dall\'ultimo flusso in una cosa non ripetitiva.</string>
|
||||
<string name="auto_queue_summary">Aggiungi automaticamente un flusso correlato quando la riproduzione inizia dall\'ultimo flusso in una coda non ripetitiva.</string>
|
||||
<string name="live_sync">SINCRONIZZAZIONE</string>
|
||||
|
||||
<string name="file">File</string>
|
||||
|
||||
<string name="invalid_directory">Cartella invalida</string>
|
||||
<string name="invalid_source">Fonte del contenuto o file invalido</string>
|
||||
<string name="invalid_file">Il file non esiste o non si hanno i permessi sufficenti per leggerlo o scriverci</string>
|
||||
<string name="invalid_directory">Cartella non valida</string>
|
||||
<string name="invalid_source">Fonte del contenuto o file non valido</string>
|
||||
<string name="invalid_file">Il file non esiste o non si hanno i permessi sufficienti per leggerlo o scriverci</string>
|
||||
<string name="file_name_empty_error">Il nome del file non può essere vuoto</string>
|
||||
<string name="error_occurred_detail">Si è verificato un errore: %1$s</string>
|
||||
|
||||
@@ -433,22 +429,39 @@
|
||||
<string name="subscriptions_import_unsuccessful">L\'importazione delle iscrizioni è fallita</string>
|
||||
<string name="subscriptions_export_unsuccessful">L\'esportazione delle iscrizioni è fallita</string>
|
||||
|
||||
<string name="import_youtube_instructions">Per importare le tue iscrizioni YouTube devi procurarti il file d\'esportazione, il quale può essere scaricato seguendo le seguenti istruzioni:
|
||||
\n
|
||||
\n1. Vai a questo URL: %2$s
|
||||
\n2. Accedi al tuo account quando è richiedto
|
||||
\n3. Un download dovrebbe essere partito (è il file d\'esportazione)</string>
|
||||
<string name="import_soundcloud_instructions">Per importare i tuoi seguiti di SoundCloud devi conoscere l\'URL del tuo profilo od il tuo ID. Se lo sai, ti basta scrivere uno dei due nell\'immisione in basso ed hai fatto.
|
||||
<string name="import_youtube_instructions">Per importare le tue iscrizioni di YouTube è necessario il file d\'esportazione, che può essere scaricato seguendo le seguenti istruzioni:
|
||||
\n
|
||||
\n1. Vai a questo URL: %1$s
|
||||
\n2. Accedi al tuo account quando richiesto
|
||||
\n3. Il download del file d\'esportazione dovrebbe partire in automatico</string>
|
||||
<string name="import_soundcloud_instructions">Per importare gli artisti che segui su SoundCloud devi conoscere l\'URL del tuo profilo o il tuo ID. Se ne sei a conoscenza, digita uno di questi nel campo qui sotto e sei pronto per iniziare.
|
||||
\n
|
||||
\nSe non lo sai, puoi seguire le seguenti istruzioni:
|
||||
\n
|
||||
\n1. Abilita la \"modalità desktop\" nel browser che usi (il sito non funziona nella modalità mobile)
|
||||
\n2. Vai a questo URL: %2$s
|
||||
\n1. Abilita la \"modalità desktop\" nel browser che utilizzi (il sito non è disponibile per i dispositivi mobili)
|
||||
\n2. Vai a questo URL: %1$s
|
||||
\n3. Accedi al tuo account quando richiesto
|
||||
\n4. Copia l\'URL a cui vieni indirizzato (è l\'URL del tuo profilo)</string>
|
||||
<string name="import_soundcloud_instructions_hint">iltuoid, soundcloud.com/iltuoid</string>
|
||||
|
||||
<string name="import_network_expensive_warning">Tieni in mente che questa operazione può richiedere un costo di connessione dati.
|
||||
\n
|
||||
<string name="import_network_expensive_warning">Tieni presente che questa operazione può consumare una grande quantità di traffico dati.
|
||||
\n
|
||||
\nVuoi continuare?</string>
|
||||
</resources>
|
||||
<string name="download_thumbnail_title">Carica miniature</string>
|
||||
<string name="download_thumbnail_summary">Disabilita per interrompere il caricamento delle miniature, la loro archiviazione e l\'utilizzo della memoria. La modifica di questa opzione cancellerà la cache delle immagini in memoria e sul disco.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Pulizia della cache delle immagini completata</string>
|
||||
<string name="metadata_cache_wipe_title">Pulisci la cache dei metadati</string>
|
||||
<string name="metadata_cache_wipe_summary">Rimuovi tutti i dati delle pagine web memorizzati nella cache</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Pulizia della cache dei metadati completata</string>
|
||||
<string name="playback_speed_control">Controllo della velocità di riproduzione</string>
|
||||
<string name="playback_tempo">Tempo</string>
|
||||
<string name="playback_pitch">Tono</string>
|
||||
<string name="unhook_checkbox">Slega (può causare distorsione)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">Valore predefinito</string>
|
||||
<string name="no_streams_available_download">Nessun flusso disponibile per il download</string>
|
||||
|
||||
<string name="preferred_open_action_settings_title">Apri preferibilmente con</string>
|
||||
<string name="preferred_open_action_settings_summary">Azione predefinita all\'apertura del contenuto — %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<string name="m4a_description">m4a形式</string>
|
||||
<string name="download_dialog_title">保存</string>
|
||||
<string name="next_video_title">次の動画</string>
|
||||
<string name="show_next_and_similar_title">次の同様の動画を表示します</string>
|
||||
<string name="show_next_and_similar_title">\"次の動画\"と\"関連動画\"を表示します</string>
|
||||
<string name="url_not_supported_toast">URLは使用できません</string>
|
||||
<string name="search_language_title">優先言語</string>
|
||||
<string name="settings_category_video_audio_title">動画と音楽</string>
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
<string name="content">内容</string>
|
||||
<string name="show_age_restricted_content_title">年齢制限のあるコンテンツを表示する</string>
|
||||
<string name="video_is_age_restricted">この動画には、年齢制限があります。設定から制限を解除して下さい。</string>
|
||||
<string name="video_is_age_restricted">この動画には年齢制限があります。視聴するには設定から制限を解除して下さい。</string>
|
||||
|
||||
<string name="light_parsing_error">Webサイトを完全には解析できませんでした</string>
|
||||
<string name="could_not_get_stream">動画を取得できませんでした</string>
|
||||
@@ -128,7 +128,7 @@
|
||||
<string name="could_not_load_image">画像を読み込みできません</string>
|
||||
|
||||
<string name="app_ui_crash">アプリ/UI がクラッシュしました</string>
|
||||
<string name="info_labels">何:\\n提案:\\nコンテンツ言語:\\nサービス:\\nGMT 時間:\\nパッケージ:\\nバージョン:\\nOS バージョン:\\nグローバル IP 範囲:</string>
|
||||
<string name="info_labels">何:\\n提案:\\nコンテンツ言語:\\nサービス:\\nGMT 時間:\\nパッケージ:\\nバージョン:\\nOS バージョン:</string>
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="reCaptcha_title">reCAPTCHA の要求</string>
|
||||
|
||||
@@ -302,8 +302,6 @@
|
||||
<string name="start_here_on_background">ここからバックグランド再生を開始</string>
|
||||
<string name="drawer_open">ドロワーを開く</string>
|
||||
<string name="drawer_close">ドロワーを閉じる</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">優先プレーヤーで開く</string>
|
||||
<string name="preferred_player_settings_title">優先プレーヤー</string>
|
||||
|
||||
<string name="video_player">動画プレーヤー</string>
|
||||
<string name="background_player">バックグラウンドプレーヤー</string>
|
||||
@@ -312,4 +310,76 @@
|
||||
|
||||
<string name="preferred_player_fetcher_notification_title">情報を取得しています…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">要求したコンテンツを読み込んでいます</string>
|
||||
</resources>
|
||||
<string name="controls_download_desc">動画ファイルをダウンロード</string>
|
||||
<string name="show_info">情報を表示</string>
|
||||
|
||||
<string name="tab_bookmarks">ブックマーク</string>
|
||||
|
||||
<string name="download_thumbnail_title">サムネイルを読み込む</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">画像キャッシュを消去しました</string>
|
||||
<string name="metadata_cache_wipe_title">メタデータのキャッシュを消去</string>
|
||||
<string name="metadata_cache_wipe_summary">ウェブページのキャッシュデータをすべて削除します</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">メタデータのキャッシュを消去しました</string>
|
||||
<string name="auto_queue_title">次の動画を自動でキューに追加</string>
|
||||
<string name="settings_category_debug_title">デバッグ</string>
|
||||
<string name="file">ファイル</string>
|
||||
|
||||
<string name="video_streams_empty">動画が見つかりません</string>
|
||||
<string name="audio_streams_empty">音声が見つかりません</string>
|
||||
<string name="invalid_directory">無効なディレクトリ</string>
|
||||
<string name="invalid_file">ファイルが存在しないか、ファイルへの読み書きができません</string>
|
||||
<string name="file_name_empty_error">ファイル名は空白にできません</string>
|
||||
<string name="error_occurred_detail">エラーが発生しました: %1$s</string>
|
||||
<string name="no_streams_available_download">ダウンロードできる動画はありません</string>
|
||||
|
||||
<string name="detail_drag_description">ドラッグして並べ替え</string>
|
||||
|
||||
<string name="create">作成</string>
|
||||
<string name="delete_one">削除</string>
|
||||
<string name="delete_all">すべて削除</string>
|
||||
<string name="dismiss">破棄</string>
|
||||
<string name="rename">名前を変更</string>
|
||||
|
||||
<string name="delete_stream_history_prompt">このアイテムを再生履歴から削除しますか?</string>
|
||||
<string name="delete_all_history_prompt">すべてのアイテムを再生履歴から削除しますか?</string>
|
||||
<string name="always_ask_open_action">常に確認</string>
|
||||
|
||||
<string name="create_playlist">新規プレイリストを作成</string>
|
||||
<string name="delete_playlist">プレイリストを削除</string>
|
||||
<string name="rename_playlist">プレイリストの名前を変更</string>
|
||||
<string name="playlist_name_input">プレイリスト名</string>
|
||||
<string name="append_playlist">プレイリストに追加</string>
|
||||
<string name="set_as_playlist_thumbnail">プレイリストのサムネイルとして設定</string>
|
||||
|
||||
<string name="bookmark_playlist">プレイリストをブックマーク</string>
|
||||
<string name="unbookmark_playlist">ブックマークを削除</string>
|
||||
|
||||
<string name="delete_playlist_prompt">このプレイリストを削除しますか?</string>
|
||||
<string name="playlist_creation_success">プレイリストが正常に作成されました</string>
|
||||
<string name="playlist_add_stream_success">プレイリストに追加しました</string>
|
||||
<string name="playlist_thumbnail_change_success">プレイリストのサムネイルを変更しました</string>
|
||||
<string name="playlist_delete_failure">プレイリストの削除に失敗しました</string>
|
||||
|
||||
<string name="caption_none">字幕なし</string>
|
||||
|
||||
<string name="caption_font_size_settings_title">字幕の文字サイズ</string>
|
||||
<string name="import_export_title">インポート/エクスポート</string>
|
||||
<string name="import_title">インポート</string>
|
||||
<string name="import_from">インポート元</string>
|
||||
<string name="export_to">エクスポート先</string>
|
||||
|
||||
<string name="import_ongoing">インポートしています…</string>
|
||||
<string name="export_ongoing">エクスポートしています…</string>
|
||||
|
||||
<string name="import_file_title">ファイルからインポート</string>
|
||||
<string name="previous_export">前回のエクスポート</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">購読リストのインポートに失敗しました</string>
|
||||
<string name="subscriptions_export_unsuccessful">購読リストのエクスポートに失敗しました</string>
|
||||
|
||||
<string name="playback_tempo">テンポ</string>
|
||||
<string name="playback_pitch">音程</string>
|
||||
<string name="playback_default">デフォルト</string>
|
||||
<string name="background_player_append">バックグラウンド再生リストに追加されました</string>
|
||||
<string name="popup_playing_append">ポップアップ再生リストに追加されました</string>
|
||||
</resources>
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
<string name="show_hold_to_append_summary">비디오 상세 정보 페이지에서 백그라운드 재생 또는 팝업 버튼을 누를 경우 팁 표시</string>
|
||||
<string name="settings_category_player_title">플레이어</string>
|
||||
<string name="settings_category_player_behavior_title">동작</string>
|
||||
<string name="settings_category_history_title">기록</string>
|
||||
<string name="settings_category_history_title">기록과 캐시</string>
|
||||
<string name="settings_category_popup_title">팝업</string>
|
||||
<string name="popup_playing_toast">팝업 모드에서 재생 중</string>
|
||||
<string name="background_player_append">백그라운드 플레이어에 대기됨</string>
|
||||
@@ -342,9 +342,6 @@
|
||||
<string name="drawer_header_action_paceholder_text">여기에 무언가가 추가될 거에요~ :D</string>
|
||||
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">선호하는 플레이어로 열기</string>
|
||||
<string name="preferred_player_settings_title">선호하는 플레이어</string>
|
||||
|
||||
<string name="video_player">비디오 플레이어</string>
|
||||
<string name="background_player">백그라운드 플레이어</string>
|
||||
<string name="popup_player">팝업 플레이어</string>
|
||||
@@ -428,4 +425,16 @@
|
||||
<string name="import_network_expensive_warning">경고: 데이터 소모량이 늘어날 수 있습니다.
|
||||
\n
|
||||
\n진행하시겠습니까?</string>
|
||||
<string name="download_thumbnail_title">썸내일 로드하기</string>
|
||||
<string name="download_thumbnail_summary">모든 썸내일의 로드와 데이터에 저장하기를 멈춥니다. 이것은 메모리와 이미지 캐시를 지울 것입니다.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">이미지 캐시 지워짐</string>
|
||||
<string name="metadata_cache_wipe_title">캐시된 메타데이터 지우기</string>
|
||||
<string name="metadata_cache_wipe_summary">캐시된 모든 웹페이지 데이터 지우기</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">메타데이터 캐시 지워짐</string>
|
||||
<string name="playback_speed_control">재생 속도 조절</string>
|
||||
<string name="playback_tempo">템포</string>
|
||||
<string name="playback_pitch">피치</string>
|
||||
<string name="unhook_checkbox">후크 취소 (소리가 깨질수 있음)</string>
|
||||
<string name="playback_nightcore">나이트코어</string>
|
||||
<string name="playback_default">기본</string>
|
||||
</resources>
|
||||
|
||||
73
app/src/main/res/values-ku/strings.xml
Normal file
73
app/src/main/res/values-ku/strings.xml
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources><string name="main_bg_subtitle">گرته له گهڕان بكه بۆ دهستپێكردن</string>
|
||||
<string name="view_count_text">%1$s بینراو</string>
|
||||
<string name="upload_date_text">بڵاوكراوهتهوه له %1$s</string>
|
||||
<string name="no_player_found">هیچ كارپێكهرێكی ڤیدیۆیی نهدۆزرایهوه، دهتهوێت VLC داگریت؟</string>
|
||||
<string name="no_player_found_toast">هیچ كارپێكهرێكی ڤیدیۆییت نییه دهتوانیت VLC داگریت بۆ لێدان</string>
|
||||
<string name="install">داگرتن</string>
|
||||
<string name="cancel">پاشگهزبوونهوه</string>
|
||||
<string name="open_in_browser">كردنهوه له وێبگهر</string>
|
||||
<string name="open_in_popup_mode">كردنهوه له پهنجهرهی بچووك</string>
|
||||
<string name="share">هاوبهشپێكردن</string>
|
||||
<string name="download">داگرتن</string>
|
||||
<string name="controls_download_desc">.داگرتنی پهڕگه</string>
|
||||
<string name="search">گهڕان</string>
|
||||
<string name="settings">ڕێكخستنهكان</string>
|
||||
<string name="did_you_mean">مهبهستت ئهمهیه: %1$s</string>
|
||||
<string name="share_dialog_title">"هاوبهشپێكردن لهگهڵ "</string>
|
||||
<string name="choose_browser">ههڵبژاردنی وێبگهر</string>
|
||||
<string name="screen_rotation">سوڕان</string>
|
||||
<string name="use_external_video_player_title">بهكارهێنانی كارپێكهری ڤیدیۆی دهرهكی</string>
|
||||
<string name="use_external_video_player_summary">ههنێ له قهبارهكان دهنگیان تێدا نابێت لهحاڵهتی كارا كردنی ئهم بژاردهیه</string>
|
||||
<string name="use_external_audio_player_title">بهكارهێنانی كارپێكهری دهنگی دهرهكی</string>
|
||||
<string name="popup_mode_share_menu_title">پهنجهرهی بچووك</string>
|
||||
<string name="subscribe_button_title">بهشداربوون</string>
|
||||
<string name="subscribed_button_title">بهشداربوویت</string>
|
||||
<string name="channel_unsubscribed">بهشدارنابیت له كهناڵ</string>
|
||||
<string name="subscription_change_failed">ناتوانیت گۆڕانكاری لهم بهشدارییهدا بكهیت</string>
|
||||
<string name="subscription_update_failed">ناتوانرێت بهشداریكردنهكه نوێبكرێتهوه</string>
|
||||
<string name="show_info">پیشاندانی زانیاری</string>
|
||||
|
||||
<string name="tab_main">سهرهكی</string>
|
||||
<string name="tab_subscriptions">بهشدارییهكان</string>
|
||||
<string name="tab_bookmarks">نیشانكردنهكان</string>
|
||||
|
||||
<string name="fragment_whats_new">چی نوێ ههیه</string>
|
||||
|
||||
<string name="controls_background_title">لهپشتهوه</string>
|
||||
<string name="controls_popup_title">پهنجهره</string>
|
||||
<string name="controls_add_to_playlist_title">ناردن بۆ</string>
|
||||
|
||||
<string name="download_path_title">شوێنی داگرتنی ڤیدیۆ</string>
|
||||
<string name="download_path_summary">شوێنی ڤیدیۆ داگیراوهكان</string>
|
||||
<string name="download_path_dialog_title">نوسینی شوێنی داگرتنی ڤیدیۆكان</string>
|
||||
|
||||
<string name="download_path_audio_title">شوێنی داگرتنی دهنگ</string>
|
||||
<string name="download_path_audio_summary">شوێنی دهنگه داگیراوهكان</string>
|
||||
<string name="download_path_audio_dialog_title">نوسینی شوێنی داگرتنی دهنگهكان</string>
|
||||
|
||||
<string name="autoplay_by_calling_app_title">كاركردنی خۆكارانه</string>
|
||||
<string name="default_resolution_title">قهبارهی سهرهكی</string>
|
||||
<string name="default_popup_resolution_title">قهبارهی سهرهكی پهنجهره</string>
|
||||
<string name="show_higher_resolutions_title">پیشاندانی قهبارهی بهرزتر</string>
|
||||
<string name="show_higher_resolutions_summary">چهند مۆبایلێك پشتگیری له قهبارهی 2K/4K دهكهن</string>
|
||||
<string name="play_with_kodi_title">كاركردن به Kodi</string>
|
||||
<string name="kore_not_found">نهرمهواڵا نهدۆزرایهوه. دابمهزرێت؟</string>
|
||||
<string name="show_play_with_kodi_title">پیشاندانی بژاردهی “كاركردن به Kodi”</string>
|
||||
<string name="show_play_with_kodi_summary">پیشاندانی بژاردهی كارپێكردنی ڤیدیۆ به Kodi</string>
|
||||
<string name="play_audio">دهنگ</string>
|
||||
<string name="default_audio_format_title">جۆری سهرهكی دهنگ</string>
|
||||
<string name="default_video_format_title">جۆری سهرهكی ڤیدیۆ</string>
|
||||
<string name="webm_description">WebM — جۆری ئاسایی</string>
|
||||
<string name="m4a_description">M4A — كوالێتی بهرزتر</string>
|
||||
<string name="theme_title">ڕووكار</string>
|
||||
<string name="light_theme_title">ڕووناك</string>
|
||||
<string name="dark_theme_title">تاریك</string>
|
||||
<string name="black_theme_title">ڕهش</string>
|
||||
<string name="popup_remember_size_pos_title">بیرهاتنهوهی شوێن و قهبارهی پهنجهره</string>
|
||||
<string name="popup_remember_size_pos_summary">بیرهاتنهوهی كۆتا قهباره و شوێنی پهنجهرهی بچووك</string>
|
||||
<string name="download_thumbnail_title">باركردنی وێنۆچكهكان</string>
|
||||
<string name="download_thumbnail_summary">ناچالاكی بكه بۆ ڕاگرتنی وێنۆچكهكان له باركردن و پاشهكهوتبوون لهسهر بیرگهی ئامێرهكهت.
|
||||
\nگۆڕینی ئهمه دهبێته هۆی سڕینهوهیان لهسهر بیرگهی مۆبایلهكهت.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">پاشماوهی وێنۆچكهكان سڕایهوه</string>
|
||||
</resources>
|
||||
@@ -46,11 +46,11 @@
|
||||
<string name="webm_description">WebM — laisvas formatas</string>
|
||||
<string name="m4a_description">M4A - geresnė kokybė</string>
|
||||
<string name="theme_title">Tema</string>
|
||||
<string name="light_theme_title">Šviesumas</string>
|
||||
<string name="light_theme_title">Šviesi</string>
|
||||
<string name="dark_theme_title">Tamsi</string>
|
||||
<string name="black_theme_title">Juoda</string>
|
||||
<string name="popup_remember_size_pos_title">Prisiminti sumažinto lango dydį ir vietą</string>
|
||||
<string name="popup_remember_size_pos_summary">Prisiminti paskutinį dydį ir vietą nustatytą langelio rėžimui</string>
|
||||
<string name="popup_remember_size_pos_title">Prisiminti iššokančio lango dydį ir vietą</string>
|
||||
<string name="popup_remember_size_pos_summary">Prisiminti paskutinį iššokančio lango dydį ir vietą</string>
|
||||
<string name="player_gesture_controls_title">Grotuvo valdymas gestais</string>
|
||||
<string name="player_gesture_controls_summary">Naudokite gestus valdyti grotuvo ryškumą ir garsumą</string>
|
||||
<string name="show_search_suggestions_title">Paieškos nuspėjimai</string>
|
||||
@@ -102,7 +102,7 @@
|
||||
<string name="error_snackbar_action">ATASKAITA</string>
|
||||
<string name="what_device_headline">Informacija:</string>
|
||||
<string name="what_happened_headline">Kas nutiko:</string>
|
||||
<string name="info_labels">Kas:\\nUžklausa:\\nTurinys Kalba:\\nPaslauga:\\nGMT Time:\\nPaketas:\\nVersija:\\nOperacinė Sistema versija:\\nGlob. IP diapazonas:</string>
|
||||
<string name="info_labels">Kas:\\nUžklausa:\\nTurinys Kalba:\\nPaslauga:\\nGMT Time:\\nPaketas:\\nVersija:\\nOperacinė Sistema versija:</string>
|
||||
<string name="your_comment">Jūsų komentaras (anglų kalba):</string>
|
||||
<string name="error_details_headline">Detalės:</string>
|
||||
|
||||
@@ -336,9 +336,6 @@
|
||||
<string name="drawer_header_action_paceholder_text">Kai kas čia greit atsiras ;D</string>
|
||||
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Atidaryti su numatytu grotuvu</string>
|
||||
<string name="preferred_player_settings_title">Numatytas grotuvas</string>
|
||||
|
||||
<string name="video_player">Video grotuvas</string>
|
||||
<string name="background_player">Foninis grotuvas</string>
|
||||
<string name="popup_player">Iššokantis grotuvas</string>
|
||||
|
||||
426
app/src/main/res/values-mk/strings.xml
Normal file
426
app/src/main/res/values-mk/strings.xml
Normal file
@@ -0,0 +1,426 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources><string name="main_bg_subtitle">Стисни на пребарување за да почнеш</string>
|
||||
<string name="view_count_text">%1$s прегледи</string>
|
||||
<string name="upload_date_text">Објавено на %1$s</string>
|
||||
<string name="no_player_found">Не е најден плеер за стримови. Инсталирај VLC?</string>
|
||||
<string name="no_player_found_toast">Не е најден плеер за стримови (можеш да инсталираш VLC)</string>
|
||||
<string name="install">Инсталирај</string>
|
||||
<string name="cancel">Откажи</string>
|
||||
<string name="open_in_browser">Отвори во пребарувач</string>
|
||||
<string name="open_in_popup_mode">Отвори во прозорче</string>
|
||||
<string name="share">Сподели</string>
|
||||
<string name="download">Превземи</string>
|
||||
<string name="controls_download_desc">Превземи стрим датотека.</string>
|
||||
<string name="search">Пребарај</string>
|
||||
<string name="settings">Поставки</string>
|
||||
<string name="did_you_mean">Мислеше на: %1$s ?</string>
|
||||
<string name="share_dialog_title">Сподели со</string>
|
||||
<string name="choose_browser">Одбери пребарувач</string>
|
||||
<string name="screen_rotation">ротација</string>
|
||||
<string name="use_external_video_player_title">Користи надворешен видео плеер</string>
|
||||
<string name="use_external_video_player_summary">Некои резолуции НЕМААТ звук со оваа опција</string>
|
||||
<string name="use_external_audio_player_title">Користи надворешен аудио плеер</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe мало прозорче</string>
|
||||
<string name="subscribe_button_title">Зачлени се</string>
|
||||
<string name="subscribed_button_title">Зачленет</string>
|
||||
<string name="channel_unsubscribed">Откажано е членството на каналот</string>
|
||||
<string name="subscription_change_failed">Не може да се промени членството</string>
|
||||
<string name="subscription_update_failed">Не може да се освежи членството</string>
|
||||
<string name="show_info">Покажи информации</string>
|
||||
|
||||
<string name="tab_main">Почетна</string>
|
||||
<string name="tab_subscriptions">Членства</string>
|
||||
<string name="tab_bookmarks">Обележани</string>
|
||||
|
||||
<string name="fragment_whats_new">Новости</string>
|
||||
|
||||
<string name="controls_background_title">Позадина</string>
|
||||
<string name="controls_popup_title">Подпрозорче</string>
|
||||
<string name="controls_add_to_playlist_title">Додај на</string>
|
||||
|
||||
<string name="download_path_title">Локација за зачувување на видеата</string>
|
||||
<string name="download_path_summary">Локација за зачувување на видеата</string>
|
||||
<string name="download_path_dialog_title">Внеси локација за зачувување на видеата</string>
|
||||
|
||||
<string name="download_path_audio_title">Локација за зачувување аудио</string>
|
||||
<string name="download_path_audio_summary">Локација за зачувување аудио</string>
|
||||
<string name="download_path_audio_dialog_title">Внеси локација за зачувување аудио</string>
|
||||
|
||||
<string name="autoplay_by_calling_app_title">Автоматско пуштање</string>
|
||||
<string name="autoplay_by_calling_app_summary">Автоматски пушта видео кога NewPipe е повикана од друга апликација</string>
|
||||
<string name="default_resolution_title">Стандардна резолуција</string>
|
||||
<string name="default_popup_resolution_title">Стандардна резолуција на подпрозорчето</string>
|
||||
<string name="show_higher_resolutions_title">Покажи повисоки резолуции</string>
|
||||
<string name="show_higher_resolutions_summary">Само некои уреди поддржуваат 2К/4К видеа</string>
|
||||
<string name="play_with_kodi_title">Пушти на Kodi</string>
|
||||
<string name="kore_not_found">Аплик. Kore не е најдена. Инсталирај?</string>
|
||||
<string name="show_play_with_kodi_title">Покажи опција „Пушти со Kodi“</string>
|
||||
<string name="show_play_with_kodi_summary">Покажи опција да се пушти видео со Kodi media center</string>
|
||||
<string name="play_audio">Звук</string>
|
||||
<string name="default_audio_format_title">Стандарден аудио формат</string>
|
||||
<string name="default_video_format_title">Стандарден видео формат</string>
|
||||
<string name="webm_description">WebM — слободен формат</string>
|
||||
<string name="m4a_description">М4А — подобар квалитет</string>
|
||||
<string name="theme_title">Тема</string>
|
||||
<string name="light_theme_title">Светла</string>
|
||||
<string name="dark_theme_title">Темна</string>
|
||||
<string name="black_theme_title">Црна</string>
|
||||
<string name="popup_remember_size_pos_title">Запамти го местото и големината на прозорчето</string>
|
||||
<string name="popup_remember_size_pos_summary">Запамти ја последната големина и место на прозорчето</string>
|
||||
<string name="use_inexact_seek_title">Брзо, непрецизно премотување</string>
|
||||
<string name="use_inexact_seek_summary">Со непрецизното премотување може да се пребарува побрзо, но понепрецизно</string>
|
||||
<string name="download_thumbnail_title">Прочитај сликички</string>
|
||||
<string name="download_thumbnail_summary">Оневозможи, за да не се читаат сликичките од видеото, за штедење меморија и интернет. Промена на опцијата ќе ја избрише кеш-меморијата.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Сликичките се избришани</string>
|
||||
<string name="metadata_cache_wipe_title">Избриши ги собраните мета-податоци</string>
|
||||
<string name="metadata_cache_wipe_summary">Избриши ги сите собрани податоци од веб-страни</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Избришани се мета-податоците</string>
|
||||
<string name="auto_queue_title">Автоматски постави го на листа следното видео</string>
|
||||
<string name="auto_queue_summary">Автоматски прикачи поврзано видео кога ќе почне последното пуштено видео во неповторлива листа.</string>
|
||||
<string name="player_gesture_controls_title">Управување на плеерот со гестови</string>
|
||||
<string name="player_gesture_controls_summary">Користи гестови за управување на светлоста и тонот</string>
|
||||
<string name="show_search_suggestions_title">Предлози за пребарување</string>
|
||||
<string name="show_search_suggestions_summary">Покажи предлози при пребарување</string>
|
||||
<string name="enable_search_history_title">Историја на пребарувањата</string>
|
||||
<string name="enable_search_history_summary">Зачувај ги пребарувањата локално</string>
|
||||
<string name="enable_watch_history_title">Историја</string>
|
||||
<string name="enable_watch_history_summary">Зачувај ја листата на гледани видеа</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Продолжи видео при враќање на фокусот</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Продолжи го видеото по прекини (пр. телефонски повик)</string>
|
||||
<string name="download_dialog_title">Превземи</string>
|
||||
<string name="next_video_title">Следно видео</string>
|
||||
<string name="show_next_and_similar_title">Покажи следни и слични видеа</string>
|
||||
<string name="show_hold_to_append_title">Покажи совет „задржи за прикачување“</string>
|
||||
<string name="show_hold_to_append_summary">Прикажи совет кога позадината или копче од подпрозорчето се притиснати, на страната за видео детаљи</string>
|
||||
<string name="url_not_supported_toast">Неподдржана URL врска</string>
|
||||
<string name="default_content_country_title">Земја на прикажани видеа</string>
|
||||
<string name="service_title">Услуга</string>
|
||||
<string name="search_language_title">Претпочитан јазик на видеата</string>
|
||||
<string name="settings_category_player_title">Плеер</string>
|
||||
<string name="settings_category_player_behavior_title">Однесување</string>
|
||||
<string name="settings_category_video_audio_title">Видео и Звук</string>
|
||||
<string name="settings_category_history_title">Историја</string>
|
||||
<string name="settings_category_popup_title">Подпрозорче</string>
|
||||
<string name="settings_category_appearance_title">Изглед</string>
|
||||
<string name="settings_category_other_title">Друго</string>
|
||||
<string name="settings_category_debug_title">Дебагирање</string>
|
||||
<string name="background_player_playing_toast">Пуштено во позадина</string>
|
||||
<string name="popup_playing_toast">Пуштено во прозорче</string>
|
||||
<string name="background_player_append">Ставено на листа, за заднинско пуштање</string>
|
||||
<string name="popup_playing_append">Ставено на листа, за пуштање во прозорче</string>
|
||||
<string name="play_btn_text">Пушти</string>
|
||||
<string name="content">Содржина</string>
|
||||
<string name="show_age_restricted_content_title">Покажи видеа со граница на возрастта</string>
|
||||
<string name="video_is_age_restricted">Видео за возрасни. Можете да дозволите вакви видеа преку Поставки.</string>
|
||||
<string name="duration_live">во живо</string>
|
||||
<string name="downloads">Превземања</string>
|
||||
<string name="downloads_title">Превземања</string>
|
||||
<string name="error_report_title">Извештај за грешки</string>
|
||||
<string name="all">Сите</string>
|
||||
<string name="channel">Канал</string>
|
||||
<string name="playlist">Плејлиста</string>
|
||||
<string name="yes">Да</string>
|
||||
<string name="later">Подоцна</string>
|
||||
<string name="disabled">Оневозможено</string>
|
||||
<string name="filter">Филтер</string>
|
||||
<string name="refresh">Освежи</string>
|
||||
<string name="clear">Избриши</string>
|
||||
<string name="popup_resizing_indicator_title">Менување големина</string>
|
||||
<string name="best_resolution">Најдобра резолуција</string>
|
||||
<string name="undo">Врати</string>
|
||||
<string name="play_all">Пушти ги сите</string>
|
||||
<string name="always">Секогаш</string>
|
||||
<string name="just_once">Само еднаш</string>
|
||||
<string name="file">Датотека</string>
|
||||
|
||||
<string name="notification_channel_name">Известување од NewPipe</string>
|
||||
<string name="notification_channel_description">NewPipe Известувања за подпрозорчето и заднинското пуштање</string>
|
||||
|
||||
<string name="unknown_content">[Непознато]</string>
|
||||
|
||||
<string name="toggle_orientation">Смени ориентација</string>
|
||||
<string name="switch_to_background">Пушти во позадина</string>
|
||||
<string name="switch_to_popup">Пушти во подпрозорче</string>
|
||||
<string name="switch_to_main">Пушти во главната апликација</string>
|
||||
|
||||
<string name="import_data_title">Внеси датабаза</string>
|
||||
<string name="export_data_title">Изнеси база на податоци</string>
|
||||
<string name="import_data_summary">Ќе ги избрише моменталните членства и историја</string>
|
||||
<string name="export_data_summary">Изнеси историја, членства и плејлисти.</string>
|
||||
<string name="general_error">Грешка</string>
|
||||
<string name="network_error">Мрежна грешка</string>
|
||||
<string name="could_not_load_thumbnails">Не можеа да се прочитаат сите сликички</string>
|
||||
<string name="youtube_signature_decryption_error">Невозможно децифрирање на URL потписот</string>
|
||||
<string name="parsing_error">Не може да се прочита страната</string>
|
||||
<string name="light_parsing_error">Не може целосно да се прочита страната</string>
|
||||
<string name="content_not_available">Содржината е недостапна</string>
|
||||
<string name="blocked_by_gema">Блокирано од GEMA</string>
|
||||
<string name="could_not_setup_download_menu">Неуспешно поставување на менито за превземања</string>
|
||||
<string name="live_streams_not_supported">Ова е пренос ВО ЖИВО, што сеуште не е поддржано.</string>
|
||||
<string name="could_not_get_stream">Не е пронајден поток на податоци</string>
|
||||
<string name="could_not_load_image">Сликата не се прочита</string>
|
||||
<string name="app_ui_crash">Се сруши Апп./Интерфејс</string>
|
||||
<string name="player_stream_failure">Неуспех при пуштање на видеото</string>
|
||||
<string name="player_unrecoverable_failure">Се случи критичен проблем</string>
|
||||
<string name="player_recoverable_failure">Опоравување од проблемот</string>
|
||||
<string name="external_player_unsupported_link_type">Надворешните плеери не поддржуваат вакви врски</string>
|
||||
<string name="invalid_url_toast">Невалидно URL</string>
|
||||
<string name="video_streams_empty">Нема видео стримови</string>
|
||||
<string name="audio_streams_empty">Нема аудио стримови</string>
|
||||
<string name="invalid_directory">Невалидна локација</string>
|
||||
<string name="invalid_source">Невалиден извор на датотека/содржина</string>
|
||||
<string name="invalid_file">Датотеката не постои или се потребни привилегии за достапност</string>
|
||||
<string name="file_name_empty_error">Датотеката не може да биде празна</string>
|
||||
<string name="error_occurred_detail">Настана проблем: %1$s</string>
|
||||
|
||||
<string name="sorry_string">Извинете, не требаше да се случи тоа.</string>
|
||||
<string name="error_report_button_text">Извести за грешката по е-пошта</string>
|
||||
<string name="error_snackbar_message">Извинете, настана проблем.</string>
|
||||
<string name="error_snackbar_action">ИЗВЕШТАЈ</string>
|
||||
<string name="what_device_headline">Инфо:</string>
|
||||
<string name="what_happened_headline">Што се случи:</string>
|
||||
<string name="info_labels">Што:\\nБарање:\\nЈазик на Содрж.:\\nУслуга:\\nGMT Час:\\nПакет:\\nВерзија:\\nВерз. на ОС:</string>
|
||||
<string name="your_comment">Ваш коментар (на Англиски):</string>
|
||||
<string name="error_details_headline">Детали:</string>
|
||||
|
||||
|
||||
<string name="list_thumbnail_view_description">Сликичка за преглед на видеото</string>
|
||||
<string name="detail_thumbnail_view_description">Сликичка за преглед на видеото</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Икона од аватарот на објавителот</string>
|
||||
<string name="detail_likes_img_view_description">Допаѓања</string>
|
||||
<string name="detail_dislikes_img_view_description">Недопаѓања</string>
|
||||
<string name="use_tor_title">Користи Tor</string>
|
||||
<string name="use_tor_summary">(Експериментално) Пренасочувај го мрежниот сообраќај преку Tor за зголемена приватност (не е можно стримање сеуште).</string>
|
||||
<string name="report_error">Пријави грешка</string>
|
||||
<string name="user_report">Корисничка пријава</string>
|
||||
<string name="search_no_results">Нема резултати</string>
|
||||
<string name="empty_subscription_feed_subtitle">Тука Е Празно :(</string>
|
||||
<string name="detail_drag_description">Влечи за да разместиш</string>
|
||||
|
||||
<string name="err_dir_create">Не може да се создаде локација \'%1$s\'</string>
|
||||
<string name="info_dir_created">Создадена локација \'%1$s\'</string>
|
||||
|
||||
<string name="video">Видео</string>
|
||||
<string name="audio">Звук</string>
|
||||
<string name="retry">Пробај повторно</string>
|
||||
<string name="storage_permission_denied">Нема привилегии за пристап</string>
|
||||
<string name="use_old_player_title">Користи го стариот плеер</string>
|
||||
<string name="use_old_player_summary">Користи го стариот Mediaframework плеер</string>
|
||||
|
||||
<string name="short_thousand">K</string>
|
||||
<string name="short_million">M</string>
|
||||
<string name="short_billion">B</string>
|
||||
|
||||
<string name="no_subscribers">Нема зачленети</string>
|
||||
<plurals name="subscribers">
|
||||
<item quantity="one">%s зачленет</item>
|
||||
<item quantity="other">%s зачленети</item>
|
||||
</plurals>
|
||||
|
||||
<string name="no_views">Нула прегледи</string>
|
||||
<plurals name="views">
|
||||
<item quantity="one">%s преглед</item>
|
||||
<item quantity="other">%s прегледи</item>
|
||||
</plurals>
|
||||
|
||||
<string name="no_videos">Нема видеа</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="one">%s видео</item>
|
||||
<item quantity="other">%s видеа</item>
|
||||
</plurals>
|
||||
|
||||
<string name="start">Започни</string>
|
||||
<string name="pause">Пауза</string>
|
||||
<string name="view">Пушти</string>
|
||||
<string name="create">Создади</string>
|
||||
<string name="delete">Избриши</string>
|
||||
<string name="delete_one">Избриши едно</string>
|
||||
<string name="delete_all">Избриши се</string>
|
||||
<string name="checksum">Чексума</string>
|
||||
<string name="dismiss">Отфрли</string>
|
||||
<string name="rename">Прекрсти</string>
|
||||
|
||||
<string name="add">Нова мисија</string>
|
||||
<string name="finish">Готово</string>
|
||||
|
||||
<string name="msg_name">Име на датотека</string>
|
||||
<string name="msg_threads">Нишки</string>
|
||||
<string name="msg_error">Грешка</string>
|
||||
<string name="msg_server_unsupported">Неподдржан сервер</string>
|
||||
<string name="msg_exists">Датотеката веќе постои</string>
|
||||
<string name="msg_url_malform">Неправилно URL или нема интернет</string>
|
||||
<string name="msg_running">NewPipe Превземање</string>
|
||||
<string name="msg_running_detail">Притисни за детали</string>
|
||||
<string name="msg_wait">Почекајте…</string>
|
||||
<string name="msg_copied">Копирано во привремена меморија</string>
|
||||
<string name="no_available_dir">Одберете достапна локација за превземања</string>
|
||||
<string name="msg_popup_permission">Оваа привилегија е потребна за
|
||||
\nотворање во подпрозорче</string>
|
||||
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="reCaptcha_title">reCAPTCHA Предизвик</string>
|
||||
<string name="recaptcha_request_toast">Потребен е reCAPTCHA предизвик</string>
|
||||
|
||||
<string name="settings_category_downloads_title">Превземања</string>
|
||||
<string name="settings_file_charset_title">Дозволени знаци во имињата на датотеките</string>
|
||||
<string name="settings_file_replacement_character_summary">Невалидните знаци се менуваат со оваа вредност</string>
|
||||
<string name="settings_file_replacement_character_title">Знак за замена</string>
|
||||
|
||||
<string name="charset_letters_and_digits">Букви и броеви</string>
|
||||
<string name="charset_most_special_characters">Повеќето посебни знаци</string>
|
||||
|
||||
<string name="title_activity_about">За NewPipe</string>
|
||||
<string name="action_settings">Поставки</string>
|
||||
<string name="action_about">За апликацијата</string>
|
||||
<string name="title_licenses">Лиценци од трети страни</string>
|
||||
<string name="copyright" formatted="true">© %1$s од %2$s под %3$s</string>
|
||||
<string name="error_unable_to_load_license">Не може да се вчита лиценцата</string>
|
||||
<string name="action_open_website">Отвори вебсајт</string>
|
||||
<string name="tab_about">За апликацијата</string>
|
||||
<string name="tab_contributors">Соработници</string>
|
||||
<string name="tab_licenses">Лиценци</string>
|
||||
<string name="app_description">Слободна, лесна YouTube апликација за Андроид.</string>
|
||||
<string name="contribution_title">Допринеси</string>
|
||||
<string name="contribution_encouragement">Ако имаш идеи за; превод, дизајн, чистење или големи промени во кодот - помошта е секогаш добредојдена. Што повеќе се работи, подобра е апликацијата!</string>
|
||||
<string name="view_on_github">Види на GitHub</string>
|
||||
<string name="donation_title">Донирај</string>
|
||||
<string name="donation_encouragement">NewPipe се гради од волонтери кои го вложуваат слободното време за важето задоволство. Време е да им возвратиме за тие да можат да ја подобрат апликацијата, уживајќи во топло кафе!</string>
|
||||
<string name="give_back">Возврати</string>
|
||||
<string name="website_title">Вебсајт</string>
|
||||
<string name="website_encouragement">За повеќе информации и најновите новости за NewPipe посети ја вебстраната.</string>
|
||||
<string name="app_license_title">"Лиценцата на NewPipe "</string>
|
||||
<string name="read_full_license">Прочитај лиценца</string>
|
||||
|
||||
|
||||
<string name="title_activity_history">Историја</string>
|
||||
<string name="title_history_search">Пребарано</string>
|
||||
<string name="title_history_view">Гледано</string>
|
||||
<string name="history_disabled">Историјата е оневозможена</string>
|
||||
<string name="action_history">Историја</string>
|
||||
<string name="history_empty">Историјата е празна</string>
|
||||
<string name="history_cleared">Историјата е избришана</string>
|
||||
<string name="item_deleted">Предметот е избришан</string>
|
||||
<string name="delete_item_search_history">Сакаш да го избришеш предметот од историјата?</string>
|
||||
<string name="delete_stream_history_prompt">Сакаш да го избришеш предметот од историјата на прегледи?</string>
|
||||
<string name="delete_all_history_prompt">Сигурно сакаш да ја избришеш целата историја?</string>
|
||||
<string name="title_last_played">Последно пуштено</string>
|
||||
<string name="title_most_played">Најгледани</string>
|
||||
|
||||
<string name="main_page_content">Содржина</string>
|
||||
<string name="blank_page_summary">Празна страна</string>
|
||||
<string name="kiosk_page_summary">Киоск</string>
|
||||
<string name="subscription_page_summary">Членства</string>
|
||||
<string name="feed_page_summary">Новости</string>
|
||||
<string name="channel_page_summary">Канали</string>
|
||||
<string name="select_a_channel">Одбери канал</string>
|
||||
<string name="no_channel_subscribed_yet">Не сте член на канал</string>
|
||||
<string name="select_a_kiosk">Одбери киоск</string>
|
||||
<string name="export_complete_toast">Успешно извезување</string>
|
||||
<string name="import_complete_toast">Успешно внесување</string>
|
||||
<string name="no_valid_zip_file">Нема валиден ZIP фајл</string>
|
||||
<string name="could_not_import_all_files">Предупредување: Не се внесени сите датотеки.</string>
|
||||
<string name="override_current_data">Ова ќе ги избрише моменталните поставки.</string>
|
||||
|
||||
<string name="kiosk">Киоск</string>
|
||||
<string name="trending">Популарни</string>
|
||||
<string name="top_50">Топ 50</string>
|
||||
<string name="new_and_hot">Нови и жешки</string>
|
||||
<string name="title_activity_background_player">Позадински плеер</string>
|
||||
<string name="title_activity_popup_player">Подпрозорче</string>
|
||||
<string name="play_queue_remove">Одстрани</string>
|
||||
<string name="play_queue_stream_detail">Детали</string>
|
||||
<string name="play_queue_audio_settings">Звучни поставки</string>
|
||||
<string name="hold_to_append">Задржи за ставање во листа</string>
|
||||
<string name="enqueue_on_background">Додај во листата за заднинско пуштање</string>
|
||||
<string name="enqueue_on_popup">Додај во листата за пуштање во прозорче</string>
|
||||
<string name="start_here_on_main">Пушти тука</string>
|
||||
<string name="start_here_on_background">Пушти тука во позадина</string>
|
||||
<string name="start_here_on_popup">Пушти тука во прозорче</string>
|
||||
|
||||
<string name="drawer_open">Отвори картон</string>
|
||||
<string name="drawer_close">Затвори картон</string>
|
||||
<string name="drawer_header_action_paceholder_text">Нешто спремаме за тука ;D</string>
|
||||
|
||||
|
||||
<string name="video_player">Видео плеер</string>
|
||||
<string name="background_player">Позадински плеер</string>
|
||||
<string name="popup_player">Пушти во прозорче</string>
|
||||
<string name="always_ask_open_action">Секогаш прашај</string>
|
||||
|
||||
<string name="preferred_player_fetcher_notification_title">Чекање информации…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">Одбраната содржина се чита</string>
|
||||
|
||||
<string name="create_playlist">Создај нова плејлиста</string>
|
||||
<string name="delete_playlist">Избриши плејлиста</string>
|
||||
<string name="rename_playlist">Прекрсти плејлиста</string>
|
||||
<string name="playlist_name_input">Име</string>
|
||||
<string name="append_playlist">Додај во плејлиста</string>
|
||||
<string name="set_as_playlist_thumbnail">Постави како икона на плејлистата</string>
|
||||
|
||||
<string name="bookmark_playlist">Обележи ја плејлистата</string>
|
||||
<string name="unbookmark_playlist">Избриши ја белешката</string>
|
||||
|
||||
<string name="delete_playlist_prompt">Сакаш да ја избришеш плејлистата?</string>
|
||||
<string name="playlist_creation_success">Успешно создадена плејлиста</string>
|
||||
<string name="playlist_add_stream_success">Додадено во плејлиста</string>
|
||||
<string name="playlist_thumbnail_change_success">Се смени иконата на плејлистата</string>
|
||||
<string name="playlist_delete_failure">Неуспешно бришење на плејлистата</string>
|
||||
|
||||
<string name="caption_none">Без превод</string>
|
||||
|
||||
<string name="resize_fit">ВКЛОПИ</string>
|
||||
<string name="resize_fill">ИСПОЛНИ</string>
|
||||
<string name="resize_zoom">ЗУМИРАЈ</string>
|
||||
|
||||
<string name="caption_auto_generated">Автоматски создадено</string>
|
||||
<string name="caption_font_size_settings_title">Големина на преводот</string>
|
||||
<string name="smaller_caption_font_size">Помал фонт</string>
|
||||
<string name="normal_caption_font_size">Нормален фонт</string>
|
||||
<string name="larger_caption_font_size">Поголем фонт</string>
|
||||
|
||||
<string name="enable_leak_canary_title">Вклучи LeakCanary</string>
|
||||
<string name="enable_leak_canary_summary">Следењето на мемориските грешки може да ја прикочува апликацијата</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Пријави Out-of-lifecycle грешки</string>
|
||||
<string name="enable_disposed_exceptions_summary">Секогаш пријавувај неуспешни Rx исклучоци кои настануваат надвор од fragment или activity циклусот по отстранување</string>
|
||||
|
||||
<string name="import_export_title">Внеси/Изнеси</string>
|
||||
<string name="import_title">Внеси</string>
|
||||
<string name="import_from">Внеси од</string>
|
||||
<string name="export_to">Изнеси до</string>
|
||||
|
||||
<string name="import_ongoing">Внесување…</string>
|
||||
<string name="export_ongoing">Изнесување…</string>
|
||||
|
||||
<string name="import_file_title">Внеси датотека</string>
|
||||
<string name="previous_export">Претходно изнесување</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">Неуспешно внесување членства</string>
|
||||
<string name="subscriptions_export_unsuccessful">Неуспешно изнесување членства</string>
|
||||
|
||||
<string name="import_youtube_instructions">За да ги внесеш твоите YouTube членства, ти треба фајл кој можеш да го добиеш на следниот начин:
|
||||
\n
|
||||
\n1. Оди на оваа врска: %1$s
|
||||
\n2. Пријави се на твојот профил
|
||||
\n3. Ќе започне превземање (тој фајл ти треба)</string>
|
||||
<string name="import_soundcloud_instructions">За да ги внесете вашите SoundCloud членства, ви треба URL или ID на профилот. Ако ги знаете, само внесете едно од нив во полето, и готови сте.
|
||||
\n
|
||||
\nАко не ги знаете, одете по следните чекори:
|
||||
\n
|
||||
\n1. Вклучете „десктоп режим“ во вашиот пребарувач (страната не е достапна за мобилни уреди)
|
||||
\n2. Одете на оваа врска: %1$s
|
||||
\n3. Пријавете се на вашиот профил
|
||||
\n4. Копирајте го URL-то на кое бевте пренасочени (тоа е URL-то на вашиот профил)</string>
|
||||
<string name="import_soundcloud_instructions_hint">korisnickoime, soundcloud.com/korisnickoime</string>
|
||||
|
||||
<string name="import_network_expensive_warning">Треба да знаеш дека оваа операција троши многу интернет.
|
||||
\n
|
||||
\nСакаш да продолжиш?</string>
|
||||
|
||||
<string name="playback_speed_control">Контрола на брзина на траката</string>
|
||||
<string name="playback_tempo">Темпо</string>
|
||||
<string name="playback_pitch">Тон</string>
|
||||
<string name="unhook_checkbox">Откачи (може да создаде мутации)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">Стандардно</string>
|
||||
</resources>
|
||||
@@ -118,7 +118,7 @@
|
||||
<string name="msg_running_detail">Trykk for detaljer</string>
|
||||
<string name="msg_wait">Vent…</string>
|
||||
<string name="msg_copied">Kopiert til utklippstavle</string>
|
||||
<string name="info_labels">Hva:\\nForespørsel:\\nInnholdsspråk:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersjon:\\nOperativsystemsversjon:\\nGlobal IP-blokk:</string>
|
||||
<string name="info_labels">Hva:\\nForespørsel:\\nInnholdsspråk:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersjon:\\nOperativsystemsversjon:</string>
|
||||
<string name="start">Start</string>
|
||||
<string name="add">Nytt mål</string>
|
||||
<string name="msg_url_malform">Feilaktig nettadresse eller manglende internettilknytning</string>
|
||||
@@ -314,9 +314,6 @@
|
||||
<string name="video_streams_empty">Fant ingen videostrømmer</string>
|
||||
<string name="audio_streams_empty">Fant ingen lydstrømmer</string>
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Åpne med foretrukket avspiller</string>
|
||||
<string name="preferred_player_settings_title">Foretrukket avpsiller</string>
|
||||
|
||||
<string name="video_player">Videoavspiller</string>
|
||||
<string name="background_player">Bakgrunnsavspiller</string>
|
||||
<string name="popup_player">Oppsprettsavspiller</string>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<string name="could_not_load_image">Kon afbeelding niet laden</string>
|
||||
<string name="app_ui_crash">App/UI gecrasht</string>
|
||||
<string name="info_labels">Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem:\\nGlob. IP-bereik:</string>
|
||||
<string name="info_labels">Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem:</string>
|
||||
<string name="report_error">Meld een probleem</string>
|
||||
<string name="user_report">Gebruikersrapport</string>
|
||||
|
||||
@@ -234,7 +234,7 @@ te openen in pop-upmodus</string>
|
||||
|
||||
<string name="settings_category_player_title">Speler</string>
|
||||
<string name="settings_category_player_behavior_title">Gedrag</string>
|
||||
<string name="settings_category_history_title">Geschiedenis</string>
|
||||
<string name="settings_category_history_title">Geschiedenis & Cache</string>
|
||||
<string name="playlist">Afspeellijst</string>
|
||||
<string name="undo">Ongedaan maken</string>
|
||||
|
||||
@@ -321,10 +321,6 @@ te openen in pop-upmodus</string>
|
||||
<string name="video_streams_empty">Geen videostreams gevonden</string>
|
||||
<string name="audio_streams_empty">Geen audiostreams gevonden</string>
|
||||
|
||||
<string name="preferred_player_share_menu_title">Voorkeursspeler</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Openen met voorkeursspeler</string>
|
||||
<string name="preferred_player_settings_title">Voorkeursspeler</string>
|
||||
|
||||
<string name="video_player">Videospeler</string>
|
||||
<string name="background_player">Achtergrondspeler</string>
|
||||
<string name="popup_player">Pop-upspeler</string>
|
||||
@@ -446,4 +442,21 @@ te openen in pop-upmodus</string>
|
||||
<string name="import_network_expensive_warning">Let op: deze actie kan veel MB\'s van uw netwerk gebruiken.
|
||||
\n
|
||||
\nWilt u doorgaan?</string>
|
||||
</resources>
|
||||
<string name="download_thumbnail_title">Miniatuurvoorbeelden laden</string>
|
||||
<string name="download_thumbnail_summary">Schakel dit uit om alle miniatuurvoorbeelden niet meer te laden; dit bespaart gegevens en geheugen. Het wijzigen van deze instelling wist het geheugen en de afbeeldingscache.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Afbeeldingscache gewist</string>
|
||||
<string name="metadata_cache_wipe_title">Gecachete metagegevens wissen</string>
|
||||
<string name="metadata_cache_wipe_summary">Alle gecachete webpagina-gegevens wissen</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Metagegevens-cache gewist</string>
|
||||
<string name="playback_speed_control">Afspeelsnelheid</string>
|
||||
<string name="playback_tempo">Tempo</string>
|
||||
<string name="playback_pitch">Toon</string>
|
||||
<string name="unhook_checkbox">Ontkoppelen (kan ruis veroorzaken)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">Standaard</string>
|
||||
<string name="preferred_open_action_settings_title">Voorkeursactie voor openen</string>
|
||||
<string name="preferred_open_action_settings_summary">Standaardactie bij openen van inhoud — %s</string>
|
||||
|
||||
<string name="no_streams_available_download">Geen streams beschikbaar voor downloaden</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
<string name="next_video_title">Następny film</string>
|
||||
<string name="show_next_and_similar_title">Pokaż następne i podobne filmy</string>
|
||||
<string name="url_not_supported_toast">URL nieobsługiwany</string>
|
||||
<string name="search_language_title">Preferowany język zawartości</string>
|
||||
<string name="settings_category_video_audio_title">Odtwarzanie</string>
|
||||
<string name="search_language_title">Domyślny język zawartości</string>
|
||||
<string name="settings_category_video_audio_title">Wideo i audio</string>
|
||||
<string name="settings_category_appearance_title">Wygląd</string>
|
||||
<string name="settings_category_other_title">Inne</string>
|
||||
<string name="background_player_playing_toast">Odtwarzanie w tle</string>
|
||||
@@ -64,7 +64,7 @@
|
||||
<string name="could_not_load_thumbnails">Nie można załadować wszystkich miniatur</string>
|
||||
<string name="youtube_signature_decryption_error">Nie można odszyfrować sygnatury URL filmu</string>
|
||||
<string name="parsing_error">Nie można przetworzyć strony</string>
|
||||
<string name="light_parsing_error">Całkowicie nie można przetworzyć strony</string>
|
||||
<string name="light_parsing_error">Nie można przetworzyć całości strony</string>
|
||||
<string name="content_not_available">Zawartość niedostępna</string>
|
||||
<string name="blocked_by_gema">Zablokowane przez GEMA</string>
|
||||
<string name="could_not_setup_download_menu">Nie można ustawić menu pobierania</string>
|
||||
@@ -76,7 +76,7 @@
|
||||
<string name="error_snackbar_action">ZGŁOŚ</string>
|
||||
<string name="what_device_headline">Informacje:</string>
|
||||
<string name="what_happened_headline">Co się stało:</string>
|
||||
<string name="info_labels">Co:\\nRequest:\\nJęzyk treści:\\nUsługa:\\nCzas GMT:\\nPakiet:\\nWersja:\\nWersja systemu:\\nGlob. zakres IP:</string>
|
||||
<string name="info_labels">Co:\\nRequest:\\nJęzyk treści:\\nUsługa:\\nCzas GMT:\\nPakiet:\\nWersja:\\nWersja systemu:</string>
|
||||
<string name="your_comment">Twój komentarz (po angielsku):</string>
|
||||
<string name="error_details_headline">Szczegóły:</string>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
<string name="detail_thumbnail_view_description">Miniatura filmu</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Miniatura zdjęcia wysyłającego</string>
|
||||
<string name="detail_likes_img_view_description">Polubienia</string>
|
||||
<string name="detail_dislikes_img_view_description">To mi się nie podoba</string>
|
||||
<string name="detail_dislikes_img_view_description">Łapki w dół</string>
|
||||
<string name="use_tor_title">Użyj Tora</string>
|
||||
<string name="report_error">Zgłoś błąd</string>
|
||||
<string name="user_report">Raport użytkownika</string>
|
||||
@@ -131,13 +131,13 @@
|
||||
<string name="default_popup_resolution_title">Domyślna rozdzielczość dla trybu okienkowego</string>
|
||||
<string name="show_higher_resolutions_title">Pokaż wyższe rozdzielczości</string>
|
||||
<string name="show_higher_resolutions_summary">Tylko niektóre urządzenia wspierają odtwarzanie wideo 2K/4K</string>
|
||||
<string name="default_video_format_title">Preferowany format wideo</string>
|
||||
<string name="default_video_format_title">Domyślny format wideo</string>
|
||||
<string name="black_theme_title">Czarny</string>
|
||||
<string name="popup_remember_size_pos_title">Zapamiętaj rozmiar i pozycję trybu okienkowego</string>
|
||||
<string name="popup_remember_size_pos_summary">Zapamiętaj ostatni rozmiar i pozycję trybu okienkowego</string>
|
||||
<string name="player_gesture_controls_title">Sterowanie odtwarzaczem za pomocą gestów</string>
|
||||
<string name="player_gesture_controls_summary">Użyj gestów, aby sterować jasnością i głośnością odtwarzacza</string>
|
||||
<string name="show_search_suggestions_title">Wyszukaj sugestie</string>
|
||||
<string name="show_search_suggestions_title">Podpowiedzi wyszukiwania</string>
|
||||
<string name="show_search_suggestions_summary">Pokazuj sugestie podczas wyszukiwania</string>
|
||||
|
||||
<string name="settings_category_popup_title">Tryb okienkowy</string>
|
||||
@@ -164,7 +164,7 @@
|
||||
\notworzyć w trybie okienkowym</string>
|
||||
|
||||
<string name="open_in_popup_mode">Odtwórz w trybie okienkowym</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe tryb okienkowy</string>
|
||||
<string name="popup_mode_share_menu_title">Tryb okienkowy NewPipe</string>
|
||||
<string name="controls_popup_title">Tryb okienkowy</string>
|
||||
|
||||
<string name="best_resolution">Najlepsza rozdzielczość</string>
|
||||
@@ -175,7 +175,7 @@
|
||||
<string name="title_activity_about">O NewPipe</string>
|
||||
<string name="action_settings">Ustawienia</string>
|
||||
<string name="action_about">O programie</string>
|
||||
<string name="title_licenses">Licencje osób trzecich</string>
|
||||
<string name="title_licenses">Licencje stron trzecich</string>
|
||||
<string name="error_unable_to_load_license">Nie można załadować licencji</string>
|
||||
<string name="action_open_website">Otwórz stronę</string>
|
||||
<string name="tab_about">O programie</string>
|
||||
@@ -209,7 +209,7 @@
|
||||
<string name="resume_on_audio_focus_gain_summary">Kontynuuj odtwarzanie po przerwaniu (np. po rozmowie telefonicznej)</string>
|
||||
|
||||
|
||||
<string name="notification_channel_name">Powiadomienie NewPipe</string>
|
||||
<string name="notification_channel_name">Powiadomienia NewPipe</string>
|
||||
<string name="notification_channel_description">Powiadomienia dla odtwarzacza NewPipe w tle i w okienku</string>
|
||||
|
||||
<string name="tab_contributors">Współautorzy</string>
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
<string name="settings_category_player_title">Odtwarzacz</string>
|
||||
<string name="settings_category_player_behavior_title">Zachowanie</string>
|
||||
<string name="settings_category_history_title">Historia</string>
|
||||
<string name="settings_category_history_title">Historia i pamięć podręczna</string>
|
||||
<string name="playlist">Playlista</string>
|
||||
<string name="undo">Cofnij</string>
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
<string name="charset_most_special_characters">Większość znaków specjalnych</string>
|
||||
|
||||
<string name="donation_title">Dotacja</string>
|
||||
<string name="donation_encouragement">NewPipe rozwijane jest przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić Ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment, aby wesprzeć programistów i sprawić, aby program był jeszcze lepszy, nie przerywając przy tym popijania kawy!</string>
|
||||
<string name="donation_encouragement">NewPipe rozwijane jest przez wolontariuszy, którzy poświęcają swój wolny czas, by zapewnić ci jak najlepsze wrażenia podczas korzystania z aplikacji. To dobry moment aby wesprzeć programistów i sprawić, aby program był jeszcze lepszy, nie przerywając przy tym popijania kawy!</string>
|
||||
<string name="give_back">Daj od siebie</string>
|
||||
<string name="website_title">Witryna</string>
|
||||
<string name="website_encouragement">By otrzymać więcej informacji oraz najnowsze wiadomości o NewPipe, odwiedź naszą stronę.</string>
|
||||
@@ -311,10 +311,6 @@
|
||||
<string name="video_streams_empty">Nie znaleziono strumieni wideo</string>
|
||||
<string name="audio_streams_empty">Nie znaleziono strumieni audio</string>
|
||||
|
||||
<string name="preferred_player_share_menu_title">Preferowany odtwarzacz</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Otwórz za pomocą preferowanego odtwarzacza</string>
|
||||
<string name="preferred_player_settings_title">Preferowany odtwarzacz</string>
|
||||
|
||||
<string name="video_player">Odtwarzacz wideo</string>
|
||||
<string name="background_player">Odtwarzacz w tle</string>
|
||||
<string name="always_ask_player">Pytaj za każdym razem</string>
|
||||
@@ -386,7 +382,7 @@
|
||||
<string name="resize_zoom">POWIĘKSZ</string>
|
||||
|
||||
<string name="caption_auto_generated">Wygenerowane automatycznie</string>
|
||||
<string name="caption_font_size_settings_title">Rozmiar etykiet</string>
|
||||
<string name="caption_font_size_settings_title">Rozmiar czcionki etykiet</string>
|
||||
<string name="smaller_caption_font_size">Mniejszy rozmiar</string>
|
||||
<string name="normal_caption_font_size">Normalny rozmiar</string>
|
||||
<string name="larger_caption_font_size">Większy rozmiar</string>
|
||||
@@ -394,8 +390,69 @@
|
||||
<string name="enable_leak_canary_title">Włącz LeakCanary</string>
|
||||
<string name="enable_leak_canary_summary">Monitorowanie wycieków pamięci może powodować niestabilność aplikacji podczas zrzutu pamięci</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Raportuj błędy Out-of-Lifecycle</string>
|
||||
<string name="enable_disposed_exceptions_title">Raportuj błędy Out-of-lifecycle</string>
|
||||
<string name="enable_disposed_exceptions_summary">Wymusza raportowanie niedostarczonych wyjątków Rx poza cyklem życia fragmentu lub aktywności</string>
|
||||
|
||||
<string name="use_inexact_seek_title">Użyj szybkiego niedokładnego wyszukiwania</string>
|
||||
<string name="use_inexact_seek_summary">Szybkie wyszukiwanie pozwala przeskoczyć do wybranej pozycji szybciej, lecz jest mniej precyzyjne</string>
|
||||
<string name="download_thumbnail_title">Załaduj miniatury</string>
|
||||
<string name="download_thumbnail_summary">Wyłącz, by aplikacja nie ściągała miniatur. Oszczędza transfer i pamięć. Zmiana tej opcji spowoduje wyczyszczenie pamięci podręcznej miniatur.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Wyczyszczono pamięć podręczną miniatur</string>
|
||||
<string name="metadata_cache_wipe_title">Wyczyść pamięć podręczną metadanych</string>
|
||||
<string name="metadata_cache_wipe_summary">Wyczyść pamięć podręczną stron</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Wyczyszczono pamięć podręczną metadanych</string>
|
||||
<string name="auto_queue_title">Automatycznie dołącz kolejny stream</string>
|
||||
<string name="auto_queue_summary">Automatycznie dodaj kolejny powiązany stream w momencie rozpoczęcia odtwarzania ostatniego elementu w niezapętlonej kolejce.</string>
|
||||
<string name="file">Plik</string>
|
||||
|
||||
<string name="invalid_directory">Nieprawidłowy katalog</string>
|
||||
<string name="invalid_source">Nieprawidłowy plik/źródło treści</string>
|
||||
<string name="invalid_file">Plik nie istnieje lub brak wystarczających uprawnień do zapisu/odczytu</string>
|
||||
<string name="file_name_empty_error">Nazwa pliku nie może być pusta</string>
|
||||
<string name="error_occurred_detail">Wystąpił błąd: %1$s</string>
|
||||
|
||||
<string name="import_export_title">Import/Eksport</string>
|
||||
<string name="import_title">Import</string>
|
||||
<string name="import_from">Importuj z</string>
|
||||
<string name="export_to">Eksportuj do</string>
|
||||
|
||||
<string name="import_ongoing">Importowanie…</string>
|
||||
<string name="export_ongoing">Eksportowanie…</string>
|
||||
|
||||
<string name="import_file_title">Importuj z pliku</string>
|
||||
<string name="previous_export">Poprzedni eksport</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">Import subskrypcji nie powiódł się</string>
|
||||
<string name="subscriptions_export_unsuccessful">Eksport subskrypcji nie powiódł się</string>
|
||||
|
||||
<string name="import_youtube_instructions">Aby zaimportować subskrypcje YouTube, potrzebny jest plik eksportu subskrypcji. Możesz go wygenerować w następujący sposób:
|
||||
\n
|
||||
\n1. Odwiedź stronę: %1$s
|
||||
\n2. Zaloguj się na swoje konto
|
||||
\n3. Powinno rozpocząć się pobieranie (to jest twój plik eksportu)</string>
|
||||
<string name="import_network_expensive_warning">Ta operacja może wygenerować duże użycie danych.
|
||||
\n
|
||||
\nCzy chcesz kontynuować?</string>
|
||||
|
||||
<string name="playback_speed_control">Kontrola prędkości odtwarzania</string>
|
||||
<string name="playback_tempo">Tempo</string>
|
||||
<string name="playback_pitch">Wysokość dźwięku</string>
|
||||
<string name="playback_default">Domyślna</string>
|
||||
<string name="import_soundcloud_instructions_hint">twojeid, soundcloud.com/twojeid</string>
|
||||
|
||||
<string name="unhook_checkbox">Odczep (może powodować zniekształcenia)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="import_soundcloud_instructions">"Aby zaimportować obserwowane z SoundCloud, musisz znać identyfikator lub link do swojego profilu. Jeśli znasz którykolwiek z nich, po prostu wpisz go w polu poniżej.
|
||||
\n
|
||||
\nW przeciwnym wypadku spróbuj poniższych kroków:
|
||||
\n
|
||||
\n1. Włącz \"tryb stacjonarny\" w przeglądarce (strona z której zaraz skorzystasz nie jest dostępna w trybie mobilnym)
|
||||
\n2. Odwiedź stronę: %1$s
|
||||
\n3. Zaloguj się na swoje konto
|
||||
\n4. Skopiuj adres, na który przeglądarka przekieruje cię po zalogowaniu (to jest adres twojego profilu)"</string>
|
||||
<string name="no_streams_available_download">Brak źródeł dostępnych do pobrania</string>
|
||||
|
||||
<string name="preferred_open_action_settings_title">Preferowane otwieranie</string>
|
||||
<string name="preferred_open_action_settings_summary">Domyślna akcja podczas otwierania treści - %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
<string name="use_tor_title">Usar Tor</string>
|
||||
<string name="user_report">Relatório do usuário</string>
|
||||
<string name="show_play_with_kodi_title">Exibir opção \"Reproduzir com Kodi\"</string>
|
||||
<string name="info_labels">O que:\\nRequisição:\\nIdioma do conteúdo:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão SO:\\nFaixa de IP:</string>
|
||||
<string name="info_labels">O que:\\nRequisição:\\nIdioma do conteúdo:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão SO:</string>
|
||||
|
||||
<string name="open_in_popup_mode">Abrir em modo popup</string>
|
||||
<string name="default_popup_resolution_title">Resolução padrão de popup</string>
|
||||
@@ -214,7 +214,7 @@ abrir em modo popup</string>
|
||||
<string name="notification_channel_description">Notificações em plano de fundo para o NewPipe e players em popup</string>
|
||||
|
||||
<string name="settings_category_player_behavior_title">Comportamento</string>
|
||||
<string name="settings_category_history_title">História</string>
|
||||
<string name="settings_category_history_title">Histórico e Cache</string>
|
||||
<string name="playlist">Playlist</string>
|
||||
<string name="undo">Desfazer</string>
|
||||
|
||||
@@ -256,7 +256,7 @@ abrir em modo popup</string>
|
||||
<string name="trending">Em Alta</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">Novos e tendências</string>
|
||||
<string name="show_hold_to_append_title">Mostrar dica para Mantenha pressionado para colocar na fila</string>
|
||||
<string name="show_hold_to_append_title">Mostrar dica para mantenha pressionado para pendurar</string>
|
||||
<string name="show_hold_to_append_summary">Mostrar dica quando o botão de plano de fundo ou de popup for pressionado na página de detalhes do vídeo</string>
|
||||
<string name="background_player_append">Adicionado a fila do reprodutor em plano de fundo</string>
|
||||
<string name="popup_playing_append">Adicionado a fila no reprodutor popup</string>
|
||||
@@ -300,9 +300,6 @@ abrir em modo popup</string>
|
||||
<string name="video_streams_empty">Nenhum stream de vídeo encontrado</string>
|
||||
<string name="audio_streams_empty">Nenhum stream de áudio encontrado</string>
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Abrir com reprodutor padrão</string>
|
||||
<string name="preferred_player_settings_title">Reprodutor padrão</string>
|
||||
|
||||
<string name="video_player">Reprodutor de vídeo</string>
|
||||
<string name="background_player">Reprodutor em plano de fundo</string>
|
||||
<string name="popup_player">Reprodutor popup</string>
|
||||
@@ -382,7 +379,7 @@ abrir em modo popup</string>
|
||||
<string name="use_inexact_seek_title">Usar índice de indexação rápido porém não preciso</string>
|
||||
<string name="use_inexact_seek_summary">Usar índice de indexação inexato</string>
|
||||
<string name="auto_queue_title">Adicionar a próxima stream à fila automaticamente</string>
|
||||
<string name="auto_queue_summary">Anexar automaticamente uma stream relacionada quando a reprodução iniciar na última stream em uma fila não repetitiva</string>
|
||||
<string name="auto_queue_summary">Anexar automaticamente uma stream relacionada quando a reprodução iniciar na última stream em uma fila não repetitiva.</string>
|
||||
<string name="live_sync">Sincronizar</string>
|
||||
|
||||
<string name="file">Arquivo</string>
|
||||
@@ -425,4 +422,18 @@ abrir em modo popup</string>
|
||||
<string name="import_network_expensive_warning">Tenha em mente que esta operação poderá usar bastante a conexão com a internet.
|
||||
\n
|
||||
\nVocê deseja continuar?</string>
|
||||
</resources>
|
||||
<string name="download_thumbnail_title">Carregar miniaturas</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Cache de imagem foi limpo</string>
|
||||
<string name="metadata_cache_wipe_title">Limpar o cache de metadados</string>
|
||||
<string name="metadata_cache_wipe_summary">Remover todos os dados de páginas em cache</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Cache de metadados foi limpo</string>
|
||||
<string name="playback_speed_control">Controle de Velocidade de reprodução</string>
|
||||
<string name="playback_tempo">Tempo</string>
|
||||
<string name="download_thumbnail_summary">Desabilite para para de carregar todas as miniaturas e economizar dados e uso de memória. Alterar esta configuração irá limpar o cache de imagens na memória e em disco.</string>
|
||||
<string name="playback_pitch">Passo</string>
|
||||
<string name="unhook_checkbox">Desenganchar</string>
|
||||
<string name="playback_default">Padrão</string>
|
||||
<string name="preferred_open_action_settings_title">Ação de abrir preferida</string>
|
||||
<string name="preferred_open_action_settings_summary">Ação padrão quando abrir conteúdo — %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -28,18 +28,18 @@
|
||||
<string name="default_audio_format_title">Formato áudio padrão</string>
|
||||
<string name="webm_description">WebM — formato livre</string>
|
||||
<string name="m4a_description">M4A — melhor qualidade</string>
|
||||
<string name="download_dialog_title">Transferir</string>
|
||||
<string name="download_dialog_title">Descarregar</string>
|
||||
<string name="next_video_title">Vídeo seguinte</string>
|
||||
<string name="show_next_and_similar_title">Mostrar vídeos seguintes e semelhantes</string>
|
||||
<string name="url_not_supported_toast">URL não suportado</string>
|
||||
<string name="search_language_title">Idioma predefinido do conteúdo</string>
|
||||
<string name="search_language_title">Idioma padrão do conteúdo</string>
|
||||
<string name="settings_category_video_audio_title">Vídeo e áudio</string>
|
||||
|
||||
<string name="list_thumbnail_view_description">Miniatura de vídeos</string>
|
||||
<string name="detail_thumbnail_view_description">Miniatura de vídeos</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Miniatura da foto do canal</string>
|
||||
<string name="detail_dislikes_img_view_description">Não gostou</string>
|
||||
<string name="detail_likes_img_view_description">Gostos</string>
|
||||
<string name="detail_dislikes_img_view_description">Não gosto</string>
|
||||
<string name="detail_likes_img_view_description">Gosto</string>
|
||||
<string name="theme_title">Tema</string>
|
||||
<string name="dark_theme_title">Escuro</string>
|
||||
<string name="light_theme_title">Claro</string>
|
||||
@@ -60,7 +60,7 @@
|
||||
<string name="info_dir_created">Diretório \'%1$s\' criado com sucesso</string>
|
||||
<string name="general_error">Erro</string>
|
||||
<string name="could_not_load_thumbnails">Incapaz de carregar todas as miniaturas</string>
|
||||
<string name="youtube_signature_decryption_error">Incapaz de decodificar a assinatura do vídeo</string>
|
||||
<string name="youtube_signature_decryption_error">Incapaz de descodificar a assinatura do vídeo</string>
|
||||
<string name="parsing_error">Incapaz de processar o site</string>
|
||||
<string name="content_not_available">Conteúdo não disponível</string>
|
||||
<string name="blocked_by_gema">Bloqueado pela GEMA</string>
|
||||
@@ -70,8 +70,8 @@
|
||||
<string name="video_is_age_restricted">Vídeo com restrição de idade. É possível permitir este material através das Definições.</string>
|
||||
|
||||
<string name="light_parsing_error">Não foi possível processar totalmente o site</string>
|
||||
<string name="could_not_setup_download_menu">Não foi possível configurar o menu de transferências</string>
|
||||
<string name="live_streams_not_supported">Esta é uma EMISSÃO EM DIRETO, as quais ainda não são suportadas.</string>
|
||||
<string name="could_not_setup_download_menu">Não foi possível configurar o menu de descargas</string>
|
||||
<string name="live_streams_not_supported">Esta é uma emissão em direto, as quais ainda não são suportadas.</string>
|
||||
<string name="could_not_get_stream">Não foi possível obter a emissão</string>
|
||||
<string name="sorry_string">Desculpe, isto não deveria ter acontecido.</string>
|
||||
<string name="error_report_button_text">Reportar erro por e-mail</string>
|
||||
@@ -95,8 +95,8 @@
|
||||
<string name="report_error">Reportar um erro</string>
|
||||
<string name="user_report">Relatório</string>
|
||||
|
||||
<string name="downloads">Transferências</string>
|
||||
<string name="downloads_title">Transferências</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="downloads_title">Descargas</string>
|
||||
<string name="error_report_title">Relatório de erro</string>
|
||||
|
||||
<string name="start">Iniciar</string>
|
||||
@@ -120,12 +120,12 @@
|
||||
|
||||
<string name="finish">OK</string>
|
||||
<string name="msg_threads">Processos</string>
|
||||
<string name="msg_running">NewPipe a Transferir</string>
|
||||
<string name="msg_running">Descarga do NewPipe</string>
|
||||
<string name="could_not_load_image">Não foi possível carregar a Imagem</string>
|
||||
|
||||
<string name="app_ui_crash">Aplicação encerrada</string>
|
||||
<string name="info_labels">O quê:\\nPedido:\\nIdioma do conteúdo:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão do SO:\\nIP global:</string>
|
||||
<string name="open_in_popup_mode">Abrir no modo “popup“</string>
|
||||
<string name="info_labels">O quê:\\nPedido:\\nIdioma do conteúdo:\\nServiço:\\nHora GMT:\\nPacote:\\nVersão:\\nVersão do SO:</string>
|
||||
<string name="open_in_popup_mode">Abrir no modo \"popup\"</string>
|
||||
<string name="black_theme_title">Preto</string>
|
||||
|
||||
<string name="all">Tudo</string>
|
||||
@@ -138,35 +138,35 @@
|
||||
<string name="short_million">M</string>
|
||||
<string name="short_billion">MM</string>
|
||||
|
||||
<string name="msg_popup_permission">Permissão necessário para
|
||||
o modo “popup“</string>
|
||||
<string name="msg_popup_permission">Esta permissão é necessária
|
||||
\npara o modo \"popup\"</string>
|
||||
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="reCaptcha_title">Desafio reCAPTCHA</string>
|
||||
<string name="recaptcha_request_toast">Desafio reCAPTCHA solicitado</string>
|
||||
|
||||
<string name="popup_mode_share_menu_title">Modo popup do NewPipe</string>
|
||||
<string name="popup_mode_share_menu_title">Modo \"popup\" do NewPipe</string>
|
||||
|
||||
<string name="popup_playing_toast">Reproduzir em modo de popup</string>
|
||||
<string name="popup_playing_toast">Reproduzir em modo \"popup\"</string>
|
||||
<string name="use_old_player_title">Usar reprodutor antigo</string>
|
||||
<string name="use_old_player_summary">Versão antiga do reprodutor Mediaframework</string>
|
||||
<string name="default_video_format_title">Formato de vídeo preferido</string>
|
||||
<string name="disabled">Desativado</string>
|
||||
|
||||
|
||||
<string name="default_popup_resolution_title">Resolução padrão do popup</string>
|
||||
<string name="default_popup_resolution_title">Resolução padrão do \"popup\"</string>
|
||||
<string name="show_higher_resolutions_title">Mostrar resoluções mais altas</string>
|
||||
<string name="show_higher_resolutions_summary">Apenas alguns dispositivos possuem suporte a vídeos 2K/4K</string>
|
||||
<string name="controls_popup_title">Popup</string>
|
||||
|
||||
<string name="popup_remember_size_pos_title">Lembrar tamanho e posição do popup</string>
|
||||
<string name="popup_remember_size_pos_title">Lembrar tamanho e posição do \"popup\"</string>
|
||||
<string name="settings_category_popup_title">Popup</string>
|
||||
<string name="filter">Filtrar</string>
|
||||
<string name="refresh">Atualizar</string>
|
||||
<string name="clear">Limpar</string>
|
||||
<string name="controls_background_title">Em segundo plano</string>
|
||||
<string name="controls_background_title">Segundo plano</string>
|
||||
<string name="use_external_video_player_summary">Algumas resoluções não terão áudio se esta opção estiver ativa</string>
|
||||
<string name="popup_remember_size_pos_summary">Lembrar último tamanho e posição do popup</string>
|
||||
<string name="popup_remember_size_pos_summary">Lembrar último tamanho e posição do \"popup\"</string>
|
||||
|
||||
<string name="popup_resizing_indicator_title">Redimensionar</string>
|
||||
<string name="player_gesture_controls_title">Controlos de gesto do reprodutor</string>
|
||||
@@ -180,8 +180,8 @@ o modo “popup“</string>
|
||||
<string name="action_settings">Definições</string>
|
||||
<string name="action_about">Sobre</string>
|
||||
<string name="title_licenses">Licenças de terceiros</string>
|
||||
<string name="copyright" formatted="true">© %1$s %2$s protegido pela licença %3$s</string>
|
||||
<string name="error_unable_to_load_license">Não foi possível carregar licença</string>
|
||||
<string name="copyright" formatted="true">© %1$s de %2$s nos termos da %3$s</string>
|
||||
<string name="error_unable_to_load_license">Não foi possível carregar a licença</string>
|
||||
<string name="action_open_website">Abrir website</string>
|
||||
<string name="tab_about">Sobre</string>
|
||||
<string name="tab_contributors">Colaboradores</string>
|
||||
@@ -191,7 +191,7 @@ o modo “popup“</string>
|
||||
<string name="app_license_title">Licença do NewPipe</string>
|
||||
<string name="contribution_encouragement">Se tem ideias de tradução, alterações de design, limpeza de código ou alterações de código pesado—ajuda é sempre bem-vinda. Quanto mais se faz melhor fica!</string>
|
||||
<string name="read_full_license">Ler licença</string>
|
||||
<string name="contribution_title">Contribuição</string>
|
||||
<string name="contribution_title">Participar</string>
|
||||
<string name="subscribe_button_title">Subscrever</string>
|
||||
<string name="subscribed_button_title">Subscrito</string>
|
||||
<string name="channel_unsubscribed">Canal não subscrito</string>
|
||||
@@ -203,20 +203,20 @@ o modo “popup“</string>
|
||||
|
||||
<string name="fragment_whats_new">Novidades</string>
|
||||
|
||||
<string name="enable_search_history_title">Histórico de Pesquisa</string>
|
||||
<string name="enable_search_history_summary">Armazenar termos de pesquisa localmente</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">Histórico</string>
|
||||
<string name="enable_watch_history_summary">Armazenar histórico de vídeos assistidos</string>
|
||||
<string name="enable_watch_history_summary">Guardar histórico de vídeos assistidos</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Retomar ao ganhar foco</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>
|
||||
<string name="settings_category_player_behavior_title">Comportamento</string>
|
||||
<string name="settings_category_history_title">Histórico</string>
|
||||
<string name="playlist">Lista de Reprodução</string>
|
||||
<string name="settings_category_history_title">Histórico e cache</string>
|
||||
<string name="playlist">Lista de reprodução</string>
|
||||
<string name="undo">Desfazer</string>
|
||||
|
||||
<string name="notification_channel_name">Notificação do NewPipe</string>
|
||||
<string name="notification_channel_description">Notificações do NewPipe e para reprodutores pop-up</string>
|
||||
<string name="notification_channel_description">Notificações para o NewPipe e para os reprodutores \"popup\"</string>
|
||||
|
||||
<string name="search_no_results">Sem resultados</string>
|
||||
<string name="empty_subscription_feed_subtitle">Aqui não há nada para ver</string>
|
||||
@@ -239,7 +239,7 @@ o modo “popup“</string>
|
||||
<item quantity="other">%s vídeos</item>
|
||||
</plurals>
|
||||
|
||||
<string name="settings_category_downloads_title">Download</string>
|
||||
<string name="settings_category_downloads_title">Descarregar</string>
|
||||
<string name="settings_file_charset_title">Caracteres permitidos em nomes de ficheiros</string>
|
||||
<string name="settings_file_replacement_character_summary">Caracteres inválidos são substituídos por este valor</string>
|
||||
<string name="settings_file_replacement_character_title">Carácter de substituição</string>
|
||||
@@ -261,28 +261,28 @@ o modo “popup“</string>
|
||||
<string name="unknown_content">[Desconhecido]</string>
|
||||
|
||||
<string name="player_unrecoverable_failure">Ocorreu um erro irrecuperável do reprodutor</string>
|
||||
<string name="player_recoverable_failure">Em recuperação de um erro do reprodutor</string>
|
||||
<string name="player_recoverable_failure">A recuperar de um erro do reprodutor</string>
|
||||
|
||||
<string name="main_page_content">Conteúdo da página principal</string>
|
||||
<string name="blank_page_summary">Página em branco</string>
|
||||
<string name="subscription_page_summary">Página de Subscrições</string>
|
||||
<string name="subscription_page_summary">Página de subscrições</string>
|
||||
<string name="channel_page_summary">Página do canal</string>
|
||||
<string name="select_a_channel">Selecione um canal</string>
|
||||
<string name="no_channel_subscribed_yet">Nenhum canal subscreveu ainda</string>
|
||||
<string name="select_a_kiosk">Selecione um quiosque</string>
|
||||
<string name="no_channel_subscribed_yet">Não existem canais subscritos</string>
|
||||
<string name="select_a_kiosk">Selecione um \"kiosk\"</string>
|
||||
|
||||
<string name="kiosk">Quiosque</string>
|
||||
<string name="kiosk">Kiosk</string>
|
||||
<string name="trending">Tendências</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">Novo e popular</string>
|
||||
<string name="title_activity_background_player">Reprodutor em segundo plano</string>
|
||||
<string name="title_activity_popup_player">Reprodutor Popup</string>
|
||||
<string name="title_activity_popup_player">Reprodutor \"popup\"</string>
|
||||
<string name="play_queue_remove">Remover</string>
|
||||
<string name="play_queue_stream_detail">Detalhes</string>
|
||||
<string name="play_queue_audio_settings">Definições de Áudio</string>
|
||||
<string name="start_here_on_main">Começar a reproduzir aqui</string>
|
||||
<string name="start_here_on_background">Começar aqui em Segundo Plano</string>
|
||||
<string name="start_here_on_popup">Começar aqui em Popup</string>
|
||||
<string name="play_queue_audio_settings">Definições de áudio</string>
|
||||
<string name="start_here_on_main">Iniciar reprodução aqui</string>
|
||||
<string name="start_here_on_background">Iniciar aqui em segundo plano</string>
|
||||
<string name="start_here_on_popup">Iniciar aqui em \"popup\"</string>
|
||||
<string name="show_info">Mostrar informação</string>
|
||||
|
||||
<string name="tab_bookmarks">Favoritos</string>
|
||||
@@ -299,18 +299,52 @@ o modo “popup“</string>
|
||||
<string name="background_player_append">Em lista de espera no reprodutor em segundo plano</string>
|
||||
<string name="popup_playing_append">Em lista de espera no reprodutor popup</string>
|
||||
<string name="switch_to_background">Mudar para segundo plano</string>
|
||||
<string name="switch_to_popup">Mudar para popup</string>
|
||||
<string name="switch_to_main">Mudar para primeiro plano</string>
|
||||
<string name="switch_to_popup">Mudar para \"popup\"</string>
|
||||
<string name="switch_to_main">Mudar para principal</string>
|
||||
|
||||
<string name="player_stream_failure">Incapaz de reproduzir este vídeo</string>
|
||||
<string name="external_player_unsupported_link_type">Reprodutores externos não suportam este tipo de hiperligações</string>
|
||||
<string name="invalid_url_toast">Endereço inválido</string>
|
||||
<string name="external_player_unsupported_link_type">Reprodutores externos não suportam este tipo de ligações</string>
|
||||
<string name="invalid_url_toast">URL inválido</string>
|
||||
<string name="detail_drag_description">Arraste para reordenar</string>
|
||||
|
||||
<string name="create">Criar</string>
|
||||
<string name="delete_one">Eliminar um</string>
|
||||
<string name="delete_all">Eliminar todos</string>
|
||||
<string name="rename">Alterar nome</string>
|
||||
<string name="delete_one">Apagar um</string>
|
||||
<string name="delete_all">Apagar todos</string>
|
||||
<string name="rename">Renomear</string>
|
||||
|
||||
<string name="donation_title">Doar</string>
|
||||
<string name="no_player_found_toast">Nenhum reprodutor encontrado (pode instalar o reprodutor VLC)</string>
|
||||
<string name="controls_download_desc">Descarregar ficheiro da emissão.</string>
|
||||
<string name="controls_add_to_playlist_title">Adicionar a</string>
|
||||
|
||||
<string name="use_inexact_seek_title">Utilizar pesquisa rápida</string>
|
||||
<string name="use_inexact_seek_summary">A pesquisa rápida permite que a pesquisa seja mais rápida mas diminui a qualidade da precisão</string>
|
||||
<string name="download_thumbnail_title">Carregar miniaturas</string>
|
||||
<string name="download_thumbnail_summary">Desative para parar o carregamento das miniaturas e poupar dados e memória. Se alterar esta opção limpa a cache de memória e do disco.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Cache de imagens limpa</string>
|
||||
<string name="default_content_country_title">País padrão para o conteúdo</string>
|
||||
<string name="settings_category_debug_title">Depuração</string>
|
||||
<string name="video_streams_empty">Não foram encontradas emissões de vídeo</string>
|
||||
<string name="audio_streams_empty">Não foram encontradas emissões de áudio</string>
|
||||
<string name="invalid_directory">Diretório inválido</string>
|
||||
<string name="invalid_source">Origem de conteúdo ou ficheiro inválida</string>
|
||||
<string name="invalid_file">Ficheiro inexistente ou permissões insuficientes para ler ou escrever</string>
|
||||
<string name="file_name_empty_error">O nome do ficheiro não pode estar vazio</string>
|
||||
<string name="error_occurred_detail">Ocorreu um erro: %1$s</string>
|
||||
<string name="no_streams_available_download">Não existem emissões para descarregar</string>
|
||||
|
||||
<string name="dismiss">Descartar</string>
|
||||
<string name="website_title">Site</string>
|
||||
<string name="website_encouragement">Para obter mais informações e saber as novidades do NewPipe, aceda ao nosso site.</string>
|
||||
<string name="kiosk_page_summary">Página \"kiosk\"</string>
|
||||
<string name="feed_page_summary">Página da fonte</string>
|
||||
<string name="export_complete_toast">Exportação terminada</string>
|
||||
<string name="import_complete_toast">Importação terminada</string>
|
||||
<string name="no_valid_zip_file">Ficheiro ZIP inválido</string>
|
||||
<string name="could_not_import_all_files">Aviso: nem todos os ficheiros foram importados.</string>
|
||||
<string name="override_current_data">Está prestes a substituir a configuração atual.</string>
|
||||
|
||||
<string name="drawer_open">Abrir menu</string>
|
||||
<string name="drawer_close">Fechar menu</string>
|
||||
<string name="playlist_name_input">Nome</string>
|
||||
</resources>
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
<resources>
|
||||
<string name="view_count_text">%1$s vizionări</string>
|
||||
<string name="upload_date_text">Încărcat pe %1$s</string>
|
||||
<string name="no_player_found">Niciun player pentru stream-uri găsit. Instalați VLC?</string>
|
||||
<string name="no_player_found">Niciun player pentru streaming găsit. Doriți să instalați VLC?</string>
|
||||
<string name="install">Instalare</string>
|
||||
<string name="cancel">Anulare</string>
|
||||
<string name="open_in_browser">Deschidere în browser</string>
|
||||
<string name="share">Partajează</string>
|
||||
<string name="share">Partajare</string>
|
||||
<string name="download">Descărcare</string>
|
||||
<string name="search">Căutare</string>
|
||||
<string name="settings">Setări</string>
|
||||
@@ -29,9 +29,9 @@
|
||||
<string name="play_with_kodi_title">Redați folosind Kodi</string>
|
||||
<string name="kore_not_found">Aplicația Kore nu a fost găsită. Doriți să o instalați?</string>
|
||||
<string name="show_play_with_kodi_title">Arată opțiunea \"Redați folosind Kodi\"</string>
|
||||
<string name="show_play_with_kodi_summary">Arătați o opțiune de redare a videoclipurilor via centrului media Kodi</string>
|
||||
<string name="show_play_with_kodi_summary">Arată opțiunea de redare a videoclipurilor via centrului media Kodi</string>
|
||||
<string name="play_audio">Audio</string>
|
||||
<string name="default_audio_format_title">Format audio de bază</string>
|
||||
<string name="default_audio_format_title">Format audio implicit</string>
|
||||
<string name="info_dir_created">Directorul de descărcare \'%1$s\' a fost creat</string>
|
||||
<string name="webm_description">WebM — format liber</string>
|
||||
<string name="m4a_description">M4A — calitate superioară</string>
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
<string name="download_dialog_title">Descărcați</string>
|
||||
<string name="next_video_title">Următorul videoclip</string>
|
||||
<string name="show_next_and_similar_title">Arată videoclipurile care urmează și pe cele similare</string>
|
||||
<string name="show_next_and_similar_title">Arată videoclipurile care urmează</string>
|
||||
<string name="url_not_supported_toast">URL nesuportat</string>
|
||||
<string name="search_language_title">Limba dorită a conținutului</string>
|
||||
<string name="settings_category_video_audio_title">Video & Audio</string>
|
||||
@@ -51,11 +51,11 @@
|
||||
<string name="play_btn_text">Redați</string>
|
||||
<string name="content">Conținut</string>
|
||||
<string name="show_age_restricted_content_title">Arată conținutul restricționat în funcție de vârstă</string>
|
||||
<string name="video_is_age_restricted">Videoclipul este restricționat în funcție de vârstă. Permiterea vizualizării este posibilă din setări.</string>
|
||||
<string name="video_is_age_restricted">Videoclipul este restricționat în funcție de vârstă. Permiterea vizionării este posibilă din Setări.</string>
|
||||
|
||||
<string name="general_error">Eroare</string>
|
||||
<string name="network_error">Eroare de rețea</string>
|
||||
<string name="could_not_load_thumbnails">Nu s-au putut încărca toate Thumbnail-urile</string>
|
||||
<string name="could_not_load_thumbnails">Nu s-au putut încărca toate thumbnail-urile</string>
|
||||
<string name="youtube_signature_decryption_error">Nu s-a putut decripta semnătura URL a videoclipului</string>
|
||||
<string name="parsing_error">Nu s-a putut analiza website-ul</string>
|
||||
<string name="content_not_available">Conținut indisponibil</string>
|
||||
@@ -64,17 +64,17 @@
|
||||
<string name="live_streams_not_supported">Acesta este un LIVE STREAM, care încă nu este suportat.</string>
|
||||
|
||||
|
||||
<string name="list_thumbnail_view_description">Thumbnail de previzualizare al videoclipului</string>
|
||||
<string name="list_thumbnail_view_description">Thumbnail-ul videoclipului</string>
|
||||
<string name="detail_thumbnail_view_description">Thumbnail de previzualizare al videoclipului</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Thumbnail-ul autorului</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Thumbnail-ul avatarului autorului</string>
|
||||
<string name="detail_likes_img_view_description">Au apreciat</string>
|
||||
<string name="detail_dislikes_img_view_description">Nu au apreciat</string>
|
||||
<string name="use_tor_title">Folosiți Tor</string>
|
||||
<string name="use_tor_summary">Forțați descărcarea traficului prin Tor pentru intimitate crescută (transmiterea în flux a videoclipurilor nu este deocamdată suportată).</string>
|
||||
<string name="use_tor_title">Folosește Tor</string>
|
||||
<string name="use_tor_summary">(Experimental) Forțează descărcarea traficului prin Tor pentru intimitate crescută (transmiterea în flux a videoclipurilor nu este deocamdată suportată).</string>
|
||||
|
||||
<string name="err_dir_create">Nu s-a putut crea directorul de descărcare \'%1$s\'</string>
|
||||
<string name="main_bg_subtitle">Apăsați căutare pentru a începe</string>
|
||||
<string name="autoplay_by_calling_app_title">Redă automat</string>
|
||||
<string name="autoplay_by_calling_app_title">Redare automată</string>
|
||||
<string name="autoplay_by_calling_app_summary">Redă automat un videoclip atunci când NewPipe este deschis din altă aplicație</string>
|
||||
<string name="duration_live">În direct</string>
|
||||
<string name="downloads">Descărcări</string>
|
||||
@@ -85,7 +85,7 @@
|
||||
<string name="could_not_get_stream">Nu s-a putut prelua niciun stream</string>
|
||||
<string name="sorry_string">Scuze, asta n-ar fi trebui să se întâmple.</string>
|
||||
<string name="error_report_button_text">Raportează eroarea prin e-mail</string>
|
||||
<string name="error_snackbar_message">Ne scuzați, au apărut câteva erori.</string>
|
||||
<string name="error_snackbar_message">Scuze, au apărut câteva erori.</string>
|
||||
<string name="error_snackbar_action">RAPORTAȚI</string>
|
||||
<string name="what_device_headline">Informații:</string>
|
||||
<string name="what_happened_headline">Ce s-a întâmplat:</string>
|
||||
@@ -133,10 +133,10 @@ pentru a deschide în mod pop-up</string>
|
||||
|
||||
<string name="popup_mode_share_menu_title">NewPipe mod pop-up</string>
|
||||
|
||||
<string name="default_popup_resolution_title">Rezoluție inițială pop-up</string>
|
||||
<string name="default_popup_resolution_title">"Rezoluție pop-up inițială "</string>
|
||||
<string name="show_higher_resolutions_title">Afișează rezoluții mai mari</string>
|
||||
<string name="show_higher_resolutions_summary">Doar anumite dispozitive suportă redarea videoclipurilor 2K/4K</string>
|
||||
<string name="default_video_format_title">Format video preferat</string>
|
||||
<string name="default_video_format_title">Format video implicit</string>
|
||||
<string name="black_theme_title">Negru</string>
|
||||
|
||||
<string name="popup_playing_toast">Redare în mod pop-up</string>
|
||||
@@ -148,7 +148,7 @@ pentru a deschide în mod pop-up</string>
|
||||
|
||||
<string name="could_not_load_image">Nu s-a putut încărca imaginea</string>
|
||||
<string name="app_ui_crash">App/UI eroare</string>
|
||||
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP clasa:</string>
|
||||
<string name="info_labels">Ce:\\nCerere:\\nLimba Conținutului:\\nServiciu:\\nTimp GMT:\\nPachet:\\nVersiune:\\nVersiune OS:</string>
|
||||
<string name="use_old_player_title">Folosește player vechi</string>
|
||||
<string name="use_old_player_summary">Player Mediaframework implicit</string>
|
||||
|
||||
@@ -161,22 +161,22 @@ pentru a deschide în mod pop-up</string>
|
||||
<string name="controls_background_title">Fundal</string>
|
||||
<string name="controls_popup_title">Pop-up</string>
|
||||
|
||||
<string name="popup_remember_size_pos_title">Ține minte mărimea și poziția pop-up-ului</string>
|
||||
<string name="popup_remember_size_pos_summary">Memorează ultima dimensiune și poziție pentru popup</string>
|
||||
<string name="player_gesture_controls_title">Controale gesturi player</string>
|
||||
<string name="player_gesture_controls_summary">Folosește gesturi pentru a controla luminozitatea și volumul player-ului</string>
|
||||
<string name="popup_remember_size_pos_title">Reține dimensiunea și poziția pop-up-ului</string>
|
||||
<string name="popup_remember_size_pos_summary">Reține ultima dimensiune și poziție a pop-up-ului</string>
|
||||
<string name="player_gesture_controls_title">Gesturi player</string>
|
||||
<string name="player_gesture_controls_summary">Folosește gesturile pentru a controla luminozitatea și volumul player-ului</string>
|
||||
<string name="show_search_suggestions_title">Arată sugestii</string>
|
||||
<string name="show_search_suggestions_summary">Arată sugestii în timpul căutării</string>
|
||||
|
||||
<string name="settings_category_popup_title">Popup</string>
|
||||
<string name="filter">Filtrează</string>
|
||||
<string name="refresh">Reîmprospătare</string>
|
||||
<string name="clear">Șterge</string>
|
||||
<string name="filter">Filtru</string>
|
||||
<string name="refresh">Reîmprospătează</string>
|
||||
<string name="clear">Curăță</string>
|
||||
<string name="popup_resizing_indicator_title">Redimensionare</string>
|
||||
<string name="best_resolution">Rezoluția optimă</string>
|
||||
<string name="best_resolution">Rezoluție maximă</string>
|
||||
|
||||
<string name="subscribe_button_title">Abonează-te</string>
|
||||
<string name="subscribed_button_title">Abonat</string>
|
||||
<string name="subscribed_button_title">Abonat(ă)</string>
|
||||
<string name="channel_unsubscribed">Canal dezabonat</string>
|
||||
<string name="subscription_change_failed">Nu s-a putut modifica abonamentul</string>
|
||||
<string name="subscription_update_failed">Nu s-a putut actualiza abonamentul</string>
|
||||
@@ -186,20 +186,20 @@ pentru a deschide în mod pop-up</string>
|
||||
|
||||
<string name="fragment_whats_new">Ce este nou</string>
|
||||
|
||||
<string name="enable_search_history_title">Istoric de căutare</string>
|
||||
<string name="enable_search_history_title">Istoric de căutări</string>
|
||||
<string name="enable_search_history_summary">Stochează local căutările</string>
|
||||
<string name="enable_watch_history_title">Istoric</string>
|
||||
<string name="enable_watch_history_summary">Memorează videourile văzute</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Reia la câștigarea focalizării</string>
|
||||
<string name="enable_watch_history_summary">Reține videoclipurile vizionate</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Reluați la refocalizare</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Continuă redarea după întreruperi (ex. după apeluri)</string>
|
||||
<string name="settings_category_player_title">"Player "</string>
|
||||
<string name="settings_category_player_title">Player</string>
|
||||
<string name="settings_category_player_behavior_title">Comportament</string>
|
||||
<string name="settings_category_history_title">Istoric</string>
|
||||
<string name="settings_category_history_title">Istoric & Cache</string>
|
||||
<string name="playlist">Playlist</string>
|
||||
<string name="undo">Anulează</string>
|
||||
|
||||
<string name="notification_channel_name">Notificare NewPipe</string>
|
||||
<string name="notification_channel_description">Notificări pentru NewPipe Background și Popup Players</string>
|
||||
<string name="notification_channel_description">Notificări pentru Playere de fundal și pop-up</string>
|
||||
|
||||
<string name="search_no_results">Fără rezultate</string>
|
||||
<string name="empty_subscription_feed_subtitle">Nimic aici în afară de sunetul greierilor</string>
|
||||
@@ -274,6 +274,57 @@ pentru a deschide în mod pop-up</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">Tendințe</string>
|
||||
<string name="service_title">Serviciu</string>
|
||||
<string name="background_player_append">Adăugaţi în playlist fundal</string>
|
||||
<string name="popup_playing_append">Adăugaţi în playlist pop-up</string>
|
||||
<string name="background_player_append">Adăugat în player de fundal</string>
|
||||
<string name="popup_playing_append">Adăugat în player pop-up</string>
|
||||
<string name="no_player_found_toast">Niciun player pentru streaming găsit. (Totuși, puteți instala VLC)</string>
|
||||
<string name="controls_download_desc">Descărcați fișierul de streaming.</string>
|
||||
<string name="show_info">Arată informații</string>
|
||||
|
||||
<string name="tab_bookmarks">Marcaje</string>
|
||||
|
||||
<string name="controls_add_to_playlist_title">Adaugă La</string>
|
||||
|
||||
<string name="use_inexact_seek_title">Folosește parcurgerea inexactă</string>
|
||||
<string name="use_inexact_seek_summary">Parcurgerea inexactă permite player-ului să traverseze videoclipul mai rapid, dar cu o precizie redusă.</string>
|
||||
<string name="download_thumbnail_title">încarcă thumbnail-urile</string>
|
||||
<string name="download_thumbnail_summary">Dezactivați pentru a opri încărcarea și salvarea tuturor thumbnail-urilor, pentru a economisi consumul de date și de memorie. Schimbarea acestei opțiuni va curăța tot cache-ul din memorie și de pe disc.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Cache pentru imagini șters</string>
|
||||
<string name="metadata_cache_wipe_title">Șterge cache-ul pentru metadata</string>
|
||||
<string name="metadata_cache_wipe_summary">Șterge cache-ul pentru datele de pagini web</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Cache pentru metadata șters</string>
|
||||
<string name="auto_queue_title">Adaugă următorul stream în coadă automat</string>
|
||||
<string name="auto_queue_summary">Adaugă automat un stream asociat când redarea începe pe ultimul stream într-o coadă non-repetitivă.</string>
|
||||
<string name="show_hold_to_append_title">Arată sfatul Țineți apăsat pentru a adăuga</string>
|
||||
<string name="show_hold_to_append_summary">Arată sfatul când butonul de background sau de popup este apăsat în pagina de informații a videoclipului</string>
|
||||
<string name="default_content_country_title">Țara implicită pentru conținut</string>
|
||||
<string name="settings_category_debug_title">Debug</string>
|
||||
<string name="play_all">Redă Tot</string>
|
||||
<string name="always">Întotdeauna</string>
|
||||
<string name="just_once">Doar Odată</string>
|
||||
<string name="file">Fișier</string>
|
||||
|
||||
<string name="unknown_content">[Necunoscut]</string>
|
||||
|
||||
<string name="toggle_orientation">Activează Orientarea</string>
|
||||
<string name="switch_to_background">Schimbă pe Modul fundal</string>
|
||||
<string name="switch_to_popup">Schimbă pe modul popup</string>
|
||||
<string name="switch_to_main">Schimbă pe modul principal</string>
|
||||
|
||||
<string name="import_data_title">Importează baza de date</string>
|
||||
<string name="export_data_title">Exportează baza de date</string>
|
||||
<string name="import_data_summary">Va înlocui istoricul și abonamentele curente</string>
|
||||
<string name="export_data_summary">Exportează istoricul, abonamentele și playlist-urile.</string>
|
||||
<string name="player_stream_failure">Nu s-a putut reda acest stream</string>
|
||||
<string name="player_unrecoverable_failure">A apărut o eroare de player irecuperabilă</string>
|
||||
<string name="player_recoverable_failure">Recuperare după eroare player</string>
|
||||
<string name="external_player_unsupported_link_type">Playerele externe nu suportă acest tip de link-uri</string>
|
||||
<string name="invalid_url_toast">URL Invalid</string>
|
||||
<string name="video_streams_empty">Niciun stream video găsit</string>
|
||||
<string name="audio_streams_empty">Niciun stream audio găsit</string>
|
||||
<string name="invalid_directory">Director Invalid</string>
|
||||
<string name="invalid_source">Sursă de conținut sau fișier invalidă</string>
|
||||
<string name="invalid_file">Fișierul nu există, sau nu dețineți suficiente permisiuni pentru a îl citi sau scrie</string>
|
||||
<string name="file_name_empty_error">Numele fișierului nu poate fi gol</string>
|
||||
<string name="error_occurred_detail">O eroare a apărut: %1$s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<string name="main_bg_subtitle">Нажмите поиск, чтобы начать</string>
|
||||
<string name="msg_wait">Подождите…</string>
|
||||
<string name="msg_exists">Файл уже существует</string>
|
||||
<string name="msg_threads">Темы</string>
|
||||
<string name="msg_threads">Потоки</string>
|
||||
<string name="finish">OK</string>
|
||||
<string name="start">Начать</string>
|
||||
<string name="pause">Пауза</string>
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
|
||||
<string name="add">Новая цель</string>
|
||||
<string name="info_labels">Что:\\nЗапрос:\\nЯзык контента:\\nСервис:\\nВремя по Гринвичу:\\nПакет:\\nВерсия:\\nВерсия ОС:\\nГлобальный диапазон IP:</string>
|
||||
<string name="info_labels">Что:\\nЗапрос:\\nЯзык контента:\\nСервис:\\nВремя по Гринвичу:\\nПакет:\\nВерсия:\\nВерсия ОС:</string>
|
||||
<string name="msg_popup_permission">Это разрешение нужно для
|
||||
\nвоспроизведения в окне</string>
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
|
||||
<string name="settings_category_player_title">Плеер</string>
|
||||
<string name="settings_category_player_behavior_title">Поведение</string>
|
||||
<string name="settings_category_history_title">История</string>
|
||||
<string name="settings_category_history_title">История и кеш</string>
|
||||
<string name="playlist">Плейлист</string>
|
||||
<string name="undo">Отменить</string>
|
||||
|
||||
@@ -311,14 +311,12 @@
|
||||
<string name="audio_streams_empty">Потоки аудио не найдены</string>
|
||||
|
||||
<string name="donation_title">Пожертвовать</string>
|
||||
<string name="donation_encouragement">NewPipe разрабатывается добровольцами в свободное время ради вашего удобства использования программы. Пора воздать должное, разработчики могут сделать NewPipe еще лучше с чашечкой кофе!</string>
|
||||
<string name="donation_encouragement">NewPipe разрабатывается добровольцами в свободное время ради вашего удобства использования программы. Пора воздать должное, разработчики могут сделать NewPipe ещё лучше с чашечкой кофе!</string>
|
||||
<string name="give_back">Воздать должное</string>
|
||||
<string name="website_title">Веб-сайт</string>
|
||||
<string name="website_encouragement">Для получения более подробной информации и последних новостей о NewPipe посетите наш веб-сайт.</string>
|
||||
<string name="drawer_open">Открыть лоток</string>
|
||||
<string name="drawer_close">Закрыть лоток</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Открыть с помощью предпочитаемого проигрывателя</string>
|
||||
<string name="preferred_player_settings_title">Предпочитаемый проигрыватель</string>
|
||||
|
||||
<string name="video_player">Проигрыватель видео</string>
|
||||
<string name="background_player">Фоновый проигрыватель</string>
|
||||
@@ -347,7 +345,7 @@
|
||||
<string name="export_data_summary">Экспорт истории, подписок и плейлистов.</string>
|
||||
<string name="invalid_directory">Неправильная директория</string>
|
||||
<string name="invalid_source">Неправильный файл/контент источника</string>
|
||||
<string name="invalid_file">Файл не существует или нет разрешения на его прочтение или запись</string>
|
||||
<string name="invalid_file">Файл не существует или нет разрешения на его чтение или запись</string>
|
||||
<string name="file_name_empty_error">Имя файла не может быть пустым</string>
|
||||
<string name="error_occurred_detail">Произошла ошибка: %1$s</string>
|
||||
|
||||
@@ -370,7 +368,7 @@
|
||||
<string name="could_not_import_all_files">Предупреждение: нет возможности импорта всех файлов.</string>
|
||||
<string name="override_current_data">Это перезапишет вашу текущую установку.</string>
|
||||
|
||||
<string name="drawer_header_action_paceholder_text">Что-то будет тут, скоро ;D</string>
|
||||
<string name="drawer_header_action_paceholder_text">Скоро тут что-то будет ;D</string>
|
||||
|
||||
|
||||
<string name="always_ask_open_action">Всегда спрашивать</string>
|
||||
@@ -382,8 +380,8 @@
|
||||
<string name="append_playlist">Добавить в плейлист</string>
|
||||
<string name="set_as_playlist_thumbnail">Установить как иконку плейлиста</string>
|
||||
|
||||
<string name="bookmark_playlist">Пометить плейлист</string>
|
||||
<string name="unbookmark_playlist">Удалить пометку</string>
|
||||
<string name="bookmark_playlist">Добавить плейлист в закладки</string>
|
||||
<string name="unbookmark_playlist">Удалить закладку</string>
|
||||
|
||||
<string name="delete_playlist_prompt">Вы хотите удалить этот плейлист?</string>
|
||||
<string name="playlist_creation_success">Плейлист успешно создан</string>
|
||||
@@ -391,14 +389,14 @@
|
||||
<string name="playlist_thumbnail_change_success">Иконка плейлиста изменена</string>
|
||||
<string name="playlist_delete_failure">Ошибка при удалении плейлиста</string>
|
||||
|
||||
<string name="caption_none">Без подписи</string>
|
||||
<string name="caption_none">Без субтитров</string>
|
||||
|
||||
<string name="resize_fit">Уместить</string>
|
||||
<string name="resize_fill">Заполнить</string>
|
||||
<string name="resize_zoom">Приближение</string>
|
||||
|
||||
<string name="caption_auto_generated">Автоматически созданный</string>
|
||||
<string name="caption_font_size_settings_title">Размер шрифта подписи</string>
|
||||
<string name="caption_auto_generated">Созданы автоматически</string>
|
||||
<string name="caption_font_size_settings_title">Размер шрифта субтитров</string>
|
||||
<string name="smaller_caption_font_size">Маленький шрифт</string>
|
||||
<string name="normal_caption_font_size">Обычный шрифт</string>
|
||||
<string name="larger_caption_font_size">Большой шрифт</string>
|
||||
@@ -422,14 +420,14 @@
|
||||
<string name="import_file_title">Импорт файла</string>
|
||||
<string name="previous_export">Предыдущий экспорт</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">Импорт подписок провален</string>
|
||||
<string name="subscriptions_export_unsuccessful">Экспорт подписок провален</string>
|
||||
<string name="subscriptions_import_unsuccessful">Ошибка при импорте подписок</string>
|
||||
<string name="subscriptions_export_unsuccessful">Ошибка при экспорте подписок</string>
|
||||
|
||||
<string name="import_youtube_instructions">Для импорта подписок из YouTube вам необходимо файл экспорта, которые можно загрузить в соответствии с этими инструкциями:
|
||||
<string name="import_youtube_instructions">Для импорта подписок из YouTube вам необходим файл экспорта, который можно получить следующим образом:
|
||||
\n
|
||||
\n1. Перейдите на: %1$s
|
||||
\n2. Войдите в ваш аккаунт, если необходимо
|
||||
\n3. Загрузка должна начаться (это файл экспорта)</string>
|
||||
\n2. Войдите в аккаунт, если необходимо
|
||||
\n3. Должна начаться загрузка (это будет файл экспорта)</string>
|
||||
<string name="import_soundcloud_instructions">"Для импорта ваших подписок из SoundCloud вы должны знать ссылку на ваш профиль или id. Если вы знаете, просто напишите это в поле ниже и будьте готовы начинать.
|
||||
\n
|
||||
\nЕсли вы не знаете, то проследуйте следующей инструкции:
|
||||
@@ -445,4 +443,18 @@
|
||||
<string name="import_network_expensive_warning">Помните, что за выход в интернет может взиматься плата.
|
||||
\n
|
||||
\nВы хотите продолжить?</string>
|
||||
</resources>
|
||||
<string name="download_thumbnail_title">Загружать миниатюры</string>
|
||||
<string name="download_thumbnail_summary">Отключите, чтобы перестать загружать миниатюры и начать экономить трафик и память. Изменение настройки очистит кеш изображений в памяти и на диске.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Кеш изображений очищен</string>
|
||||
<string name="metadata_cache_wipe_title">Очистить кеш метаданных</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Кеш метаданных очищен</string>
|
||||
<string name="playback_speed_control">Скорость воспроизведения</string>
|
||||
<string name="playback_tempo">Темп</string>
|
||||
<string name="playback_pitch">Тон</string>
|
||||
<string name="unhook_checkbox">Независимо (может вызвать искажение)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">По умолчанию</string>
|
||||
<string name="metadata_cache_wipe_summary">Удалить все загруженные данные веб-страниц</string>
|
||||
<string name="preferred_open_action_settings_summary">Действие по умолчанию при открытии контента — %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
|
||||
<string name="could_not_load_image">Nemožno načítať obrázok</string>
|
||||
<string name="app_ui_crash">Aplikácia/UP zlyhalo</string>
|
||||
<string name="info_labels">Čo:\\nPožiadavka:\\nJazyk obsahu:\\nSlužba:\\nČas v GMT:\\nBalík:\\nVerzia:\\nVerzia OS:\\nGlob. IP rozsah:</string>
|
||||
<string name="info_labels">Čo:\\nPožiadavka:\\nJazyk obsahu:\\nSlužba:\\nČas v GMT:\\nBalík:\\nVerzia:\\nVerzia OS:</string>
|
||||
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="reCaptcha_title">Výzva reCAPTCHA</string>
|
||||
@@ -354,8 +354,6 @@ otvorenie okna na popredí</string>
|
||||
|
||||
<string name="drawer_open">Otvoriť zásuvku</string>
|
||||
<string name="drawer_close">Zavrieť zásuvku</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Otvoriť v preferovanom prehrávači</string>
|
||||
<string name="preferred_player_settings_title">Preferovaný prehrávač</string>
|
||||
|
||||
<string name="video_player">Prehrávač videa</string>
|
||||
<string name="background_player">Prehrávač na pozadí</string>
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
<string name="reCaptcha_title">Izziv reCAPTCHA</string>
|
||||
<string name="recaptcha_request_toast">Zahteva izziva reCAPTCHA</string>
|
||||
|
||||
<string name="info_labels">Predmet:\\nZahteva:\\nJezik vsebine:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS:\\nObseg IP:</string>
|
||||
<string name="info_labels">Predmet:\\nZahteva:\\nJezik vsebine:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS:</string>
|
||||
<string name="black_theme_title">Črna</string>
|
||||
|
||||
<string name="all">Vse</string>
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
<string name="player_recoverable_failure">Återhämtar sig från spelarfel</string>
|
||||
|
||||
<string name="error_report_button_text">Rapportera fel via e-post</string>
|
||||
<string name="info_labels">Vad:\\nBegäran:\\nInnehålls Språk:\\nTjänst:\\nGMT Tid:\\nPaket:\\nVersion:\\nOS-version:\\nGlob. IP-intervall:</string>
|
||||
<string name="info_labels">Vad:\\nBegäran:\\nInnehålls Språk:\\nTjänst:\\nGMT Tid:\\nPaket:\\nVersion:\\nOS-version:</string>
|
||||
<string name="list_thumbnail_view_description">Videons miniatyrbild</string>
|
||||
<string name="detail_thumbnail_view_description">Videons miniatyrbild</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Uppladdarens avatar miniatyrbild</string>
|
||||
|
||||
@@ -26,17 +26,17 @@
|
||||
<string name="download_path_audio_summary">İndirilmiş seslerin saklanacağı konum</string>
|
||||
<string name="download_path_audio_dialog_title">Ses dosyaları için indirme konumu girin</string>
|
||||
|
||||
<string name="autoplay_by_calling_app_title">Kendiliğinden oynat</string>
|
||||
<string name="autoplay_by_calling_app_summary">NewPipe başka bir uygulamadan çağırıldığında videoyu kendiliğinden oynatır</string>
|
||||
<string name="autoplay_by_calling_app_title">Otomatik Oynat</string>
|
||||
<string name="autoplay_by_calling_app_summary">NewPipe başka bir uygulamadan çağırıldığında videoyu otomatik oynatır</string>
|
||||
<string name="default_resolution_title">Öntanımlı çözünürlük</string>
|
||||
<string name="play_with_kodi_title">Kodi ile oynat</string>
|
||||
<string name="kore_not_found">Kore uygulaması bulunamadı. Kur?</string>
|
||||
<string name="kore_not_found">Kore uygulaması bulunamadı. Kurulsun mu?</string>
|
||||
<string name="show_play_with_kodi_title">\"Kodi ile Oynat\" seçeneğini göster</string>
|
||||
<string name="show_play_with_kodi_summary">Kodi ortam merkezi aracılığıyla video oynatmak için bir seçenek görüntüler</string>
|
||||
<string name="default_audio_format_title">Öntanımlı ses biçimi</string>
|
||||
<string name="webm_description">WebM — özgür biçim</string>
|
||||
<string name="m4a_description">M4A — daha iyi nitelik</string>
|
||||
<string name="theme_title">Gövde</string>
|
||||
<string name="m4a_description">M4A — daha iyi kalite</string>
|
||||
<string name="theme_title">Tema</string>
|
||||
<string name="dark_theme_title">Koyu</string>
|
||||
<string name="light_theme_title">Açık</string>
|
||||
|
||||
@@ -52,8 +52,8 @@
|
||||
<string name="background_player_playing_toast">Arka planda oynatıyor</string>
|
||||
<string name="play_btn_text">Oynat</string>
|
||||
<string name="content">İçerik</string>
|
||||
<string name="show_age_restricted_content_title">Yaş sınırlı içeriği göster</string>
|
||||
<string name="video_is_age_restricted">Yaş Sınırlı Video. Bu gibi materyallere Ayarlar\'dan izin verilebilir.</string>
|
||||
<string name="show_age_restricted_content_title">Yaş kısıtlamalı içerik göster</string>
|
||||
<string name="video_is_age_restricted">Yaş Kısıtlamalı Video. Bu gibi materyallere Ayarlar\'dan izin verilebilir.</string>
|
||||
<string name="duration_live">canlı</string>
|
||||
<string name="downloads">İndirilenler</string>
|
||||
<string name="downloads_title">İndirilenler</string>
|
||||
@@ -67,7 +67,7 @@
|
||||
<string name="light_parsing_error">Web sitesi tümüyle ayrıştırılamadı</string>
|
||||
<string name="content_not_available">İçerik kullanılabilir değil</string>
|
||||
<string name="blocked_by_gema">GEMA tarafından engellendi</string>
|
||||
<string name="live_streams_not_supported">Bu bir CANLI AKIŞ, henüz desteklenmiyor.</string>
|
||||
<string name="live_streams_not_supported">Bu bir CANLI YAYIN ve henüz desteklenmiyor.</string>
|
||||
<string name="could_not_get_stream">Herhangi bir akış alınamadı</string>
|
||||
<string name="could_not_load_image">Resim yüklenemedi</string>
|
||||
<string name="app_ui_crash">Uygulama/Kullanıcı arayüzü çöktü</string>
|
||||
@@ -77,7 +77,7 @@
|
||||
<string name="error_snackbar_action">BİLDİR</string>
|
||||
<string name="what_device_headline">Bilgi:</string>
|
||||
<string name="what_happened_headline">Ne oldu:</string>
|
||||
<string name="info_labels">Ne:\\nİstek:\\nİçerik Dili:\\nHizmet:\\nGMT Zamanı:\\nPaket:\\nSürüm:\\nİşletim sistemi sürümü:\\nGlob. IP aralığı:</string>
|
||||
<string name="info_labels">Ne:\\nİstek:\\nİçerik Dili:\\nHizmet:\\nGMT Zamanı:\\nPaket:\\nSürüm:\\nİşletim sistemi sürümü:</string>
|
||||
<string name="detail_thumbnail_view_description">Video ön izleme küçük resmi</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Yükleyenin küçük resmi</string>
|
||||
<string name="detail_likes_img_view_description">Beğeni</string>
|
||||
@@ -119,16 +119,16 @@
|
||||
|
||||
|
||||
<string name="could_not_setup_download_menu">İndirme menüsü ayarlanamadı</string>
|
||||
<string name="open_in_popup_mode">Açılır pencere kipinde aç</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe açılır pencere kipi</string>
|
||||
<string name="open_in_popup_mode">Açılır pencere modunda aç</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe açılır pencere modu</string>
|
||||
|
||||
<string name="default_popup_resolution_title">Öntanımlı açılır pencere çözünürlüğü</string>
|
||||
<string name="show_higher_resolutions_title">Daha yüksek çözünürlükleri göster</string>
|
||||
<string name="show_higher_resolutions_summary">Yalnızca bazı aygıtlar 2K/4K video oynatmayı destekler</string>
|
||||
<string name="default_video_format_title">Yeğlenen video biçimi</string>
|
||||
<string name="default_video_format_title">Öntanımlı video biçimi</string>
|
||||
<string name="black_theme_title">Siyah</string>
|
||||
|
||||
<string name="popup_playing_toast">Açılır pencere kipinde oynatılıyor</string>
|
||||
<string name="popup_playing_toast">Açılır pencere modunda oynatılıyor</string>
|
||||
<string name="all">Tümü</string>
|
||||
<string name="channel">Kanal</string>
|
||||
<string name="yes">Evet</string>
|
||||
@@ -155,10 +155,10 @@
|
||||
<string name="reCaptcha_title">reCAPTCHA Formu</string>
|
||||
<string name="recaptcha_request_toast">reCAPTCHA Formu istendi</string>
|
||||
|
||||
<string name="controls_background_title">Arka plan</string>
|
||||
<string name="controls_popup_title">Açılır pencere</string>
|
||||
<string name="controls_background_title">Arka Plan</string>
|
||||
<string name="controls_popup_title">Açılır Pencere</string>
|
||||
|
||||
<string name="filter">Süzgeç</string>
|
||||
<string name="filter">Filtrele</string>
|
||||
<string name="refresh">Yenile</string>
|
||||
<string name="clear">Temizle</string>
|
||||
|
||||
@@ -168,18 +168,18 @@
|
||||
<string name="settings_category_popup_title">Açılır Pencere</string>
|
||||
<string name="popup_resizing_indicator_title">Boyutlandırılıyor</string>
|
||||
|
||||
<string name="use_external_video_player_summary">Bu seçenek etkinken bazı çözünürlüklerin sesi olmayacak</string>
|
||||
<string name="use_external_video_player_summary">Bu seçenek etkinken bazı çözünürlüklerin sesi olmayacaktır</string>
|
||||
<string name="player_gesture_controls_summary">Oynatıcının parlaklığını ve sesini yönetmek için el hareketlerini kullan</string>
|
||||
<string name="player_gesture_controls_title">Oynatıcı el hareketi denetimleri</string>
|
||||
<string name="show_search_suggestions_title">Arama önerileri</string>
|
||||
<string name="show_search_suggestions_summary">Ararken önerileri göster</string>
|
||||
<string name="show_search_suggestions_summary">Arama yaparken önerileri göster</string>
|
||||
|
||||
<string name="best_resolution">En iyi çözünürlük</string>
|
||||
|
||||
<string name="title_activity_about">NewPipe Hakkında</string>
|
||||
<string name="action_settings">Ayarlar</string>
|
||||
<string name="action_about">Hakkında</string>
|
||||
<string name="title_licenses">Üçüncü-taraf Lisanslar</string>
|
||||
<string name="title_licenses">Üçüncü taraf Lisanslar</string>
|
||||
<string name="copyright" formatted="true">© %1$s, %2$s tarafından %3$s altında</string>
|
||||
<string name="error_unable_to_load_license">Lisans yüklenemedi</string>
|
||||
<string name="action_open_website">Web sitesini aç</string>
|
||||
@@ -189,7 +189,7 @@
|
||||
<string name="app_description">Android için özgür hafif bir YouTube arayüzü.</string>
|
||||
<string name="view_on_github">GitHub\'da gör</string>
|
||||
<string name="app_license_title">NewPipe\'ın Lisansı</string>
|
||||
<string name="contribution_encouragement">Fikirleriniz; çeviri, tasarım değişiklikleri, kod temizliği, ya da gerçek köklü kod değişikleri olsun—yardımınıza her zaman açığız. Daha çok yapıldıkça daha iyiye gider!</string>
|
||||
<string name="contribution_encouragement">Fikirleriniz; çeviri, tasarım değişiklikleri, kod temizliğ ya da gerçek köklü kod değişikleri olsun yardımınıza her zaman açığız. Ne kadar çok yapılırsa o kadar iyi olur!</string>
|
||||
<string name="read_full_license">Lisansı oku</string>
|
||||
<string name="contribution_title">Katkıda bulun</string>
|
||||
<string name="settings_category_downloads_title">İndirme</string>
|
||||
@@ -209,22 +209,22 @@
|
||||
<string name="tab_main">Temel</string>
|
||||
<string name="tab_subscriptions">Abonelikler</string>
|
||||
|
||||
<string name="fragment_whats_new">Yenilikler Ne</string>
|
||||
<string name="fragment_whats_new">Neler Yeni</string>
|
||||
|
||||
<string name="enable_search_history_title">Arama geçmişi</string>
|
||||
<string name="enable_search_history_summary">Arama sorgularını yerel olarak biriktir</string>
|
||||
<string name="enable_watch_history_title">Geçmiş</string>
|
||||
<string name="enable_watch_history_summary">İzlenen videoların kaydını tut</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Odaklanıldığında sürdür</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Kesilmelerden sonra (örn. telefon çağrıları) oynatmayı sürdür</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Kesilmelerden (ör: Telefon çağrıları) sonra oynatmayı sürdür</string>
|
||||
<string name="settings_category_player_title">Oynatıcı</string>
|
||||
<string name="settings_category_player_behavior_title">Davranış</string>
|
||||
<string name="settings_category_history_title">Geçmiş</string>
|
||||
<string name="playlist">Oynatma listesi</string>
|
||||
<string name="settings_category_history_title">Geçmiş ve Önbellek</string>
|
||||
<string name="playlist">Oynatma Listesi</string>
|
||||
<string name="undo">Geri al</string>
|
||||
|
||||
<string name="notification_channel_name">NewPipe Bildirimi</string>
|
||||
<string name="notification_channel_description">New Pipe Arka Plan ve Açılır Pencere Oynatıcıları için bildirimler</string>
|
||||
<string name="notification_channel_description">NewPipe Arka Plan ve Açılır Pencere Oynatıcıları için Bildirimler</string>
|
||||
|
||||
<string name="search_no_results">Sonuç yok</string>
|
||||
<string name="empty_subscription_feed_subtitle">Burada Cırcır Böceklerinden Başka Şey Yok</string>
|
||||
@@ -256,7 +256,7 @@
|
||||
<string name="history_cleared">Geçmiş temizlendi</string>
|
||||
<string name="item_deleted">Öge silindi</string>
|
||||
<string name="delete_item_search_history">Bu içeriği arama geçmişinden silmek istiyor musunuz?</string>
|
||||
<string name="show_hold_to_append_title">Eklemek İçin Bas İpucunu Göster</string>
|
||||
<string name="show_hold_to_append_title">Sardırmak için tutun ipucu\'nu göster</string>
|
||||
<string name="show_hold_to_append_summary">Video ayrıntıları sayfasında arka plan veya açılır pencere düğmesine basıldığında ipucu göster</string>
|
||||
<string name="background_player_append">Arka plan oynatıcıda kuyruğa eklendi</string>
|
||||
<string name="popup_playing_append">Açılır pencere oynatıcıda kuyruğa eklendi</string>
|
||||
@@ -279,8 +279,8 @@
|
||||
<string name="select_a_kiosk">Köşk seç</string>
|
||||
|
||||
<string name="kiosk">Köşk</string>
|
||||
<string name="trending">Eğilimler</string>
|
||||
<string name="top_50">En Üst 50</string>
|
||||
<string name="trending">Trendler</string>
|
||||
<string name="top_50">En İyi 50</string>
|
||||
<string name="new_and_hot">Yeni ve sıcak</string>
|
||||
<string name="title_activity_background_player">Arka Plan Oynatıcı</string>
|
||||
<string name="title_activity_popup_player">Açılır Pencere Oynatıcı</string>
|
||||
@@ -290,9 +290,9 @@
|
||||
<string name="hold_to_append">Kuyruğa Almak İçin Bas</string>
|
||||
<string name="enqueue_on_background">Arka Planda Kuyruğa Al</string>
|
||||
<string name="enqueue_on_popup">Açılır Pencerede Kuyruğa Al</string>
|
||||
<string name="start_here_on_main">Burayı Oynatmaya Başla</string>
|
||||
<string name="start_here_on_background">Burayı Arka Planda Başlat</string>
|
||||
<string name="start_here_on_popup">Burayı Açılır Pencerede Başlat</string>
|
||||
<string name="start_here_on_main">Burada Oynatmaya Başla</string>
|
||||
<string name="start_here_on_background">Burada Arka Planda Başlat</string>
|
||||
<string name="start_here_on_popup">Burada Açılır Pencerede Başlat</string>
|
||||
<string name="donation_title">Bağış yapın</string>
|
||||
<string name="donation_encouragement">NewPipe, size en iyi deneyimi sunmak için boş zamanını harcayan gönüllüler tarafından geliştirilmektedir. Geliştiricilerimizin bir fincan kahvenin tadını çıkarırken NewPipe\'ı daha da çok iyileştirebilmelerinden emin olmak için karşılığını vermenin tam zamanı!</string>
|
||||
<string name="give_back">Karşılığını ver</string>
|
||||
@@ -316,9 +316,6 @@
|
||||
<string name="video_streams_empty">Video akışı bulunamadı</string>
|
||||
<string name="audio_streams_empty">Ses akışı bulunamadı</string>
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Yeğlenen oynatıcıyla aç</string>
|
||||
<string name="preferred_player_settings_title">Yeğlenen oynatıcı</string>
|
||||
|
||||
<string name="video_player">Video oynatıcı</string>
|
||||
<string name="background_player">Arka plan oynatıcı</string>
|
||||
<string name="popup_player">Açılır pencere oynatıcı</string>
|
||||
@@ -337,7 +334,7 @@
|
||||
<string name="override_current_data">Bu şimdiki kurulumunuzu geçersiz kılacak.</string>
|
||||
|
||||
<string name="controls_download_desc">Akış dosyasını indir.</string>
|
||||
<string name="show_info">Bilgiyi göster</string>
|
||||
<string name="show_info">Bilgileri göster</string>
|
||||
|
||||
<string name="tab_bookmarks">Yer imleri</string>
|
||||
|
||||
@@ -346,7 +343,7 @@
|
||||
<string name="detail_drag_description">Yeniden sıralamak için sürükle</string>
|
||||
|
||||
<string name="create">Oluştur</string>
|
||||
<string name="delete_one">Tekini Sil</string>
|
||||
<string name="delete_one">Birini Sil</string>
|
||||
<string name="delete_all">Tümünü Sil</string>
|
||||
<string name="dismiss">Görmezden gel</string>
|
||||
<string name="rename">Yeniden adlandır</string>
|
||||
@@ -354,7 +351,7 @@
|
||||
<string name="delete_stream_history_prompt">Bu ögeyi izleme geçmişinden silmek ister misiniz?</string>
|
||||
<string name="delete_all_history_prompt">Tüm ögeleri geçmişten silmek istediğinize emin misiniz?</string>
|
||||
<string name="title_last_played">Son Oynatılan</string>
|
||||
<string name="title_most_played">Çok Oynatılan</string>
|
||||
<string name="title_most_played">En Çok Oynatılan</string>
|
||||
|
||||
<string name="always_ask_open_action">Her zaman sor</string>
|
||||
|
||||
@@ -380,10 +377,10 @@
|
||||
<string name="resize_fill">DOLDUR</string>
|
||||
<string name="resize_zoom">YAKLAŞTIR</string>
|
||||
|
||||
<string name="caption_font_size_settings_title">Alt Yazı Boyutu</string>
|
||||
<string name="smaller_caption_font_size">Küçük Yazı Tipi</string>
|
||||
<string name="normal_caption_font_size">Olağan Yazı Tipi</string>
|
||||
<string name="larger_caption_font_size">Büyük Yazı Tipi</string>
|
||||
<string name="caption_font_size_settings_title">Alt yazı boyutu</string>
|
||||
<string name="smaller_caption_font_size">Daha küçük yazı tipi</string>
|
||||
<string name="normal_caption_font_size">Normal yazı tipi</string>
|
||||
<string name="larger_caption_font_size">Daha büyük yazı tipi</string>
|
||||
<string name="settings_category_debug_title">Hata Ayıklama</string>
|
||||
<string name="drawer_header_action_paceholder_text">Buraya yakında bir şeyler gelecek ;D</string>
|
||||
|
||||
@@ -392,13 +389,13 @@
|
||||
<string name="enable_leak_canary_title">LeakCanary\'i Etkinleştir</string>
|
||||
<string name="enable_leak_canary_summary">Bellek sızıntı gözlemlemesi, yığın boşaltımı sırasında uygulamanın tepkisiz kalmasına neden olabilir</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Out-of-Lifecycle Hatalarını Bildir</string>
|
||||
<string name="enable_disposed_exceptions_title">Olağan dışı işleyiş hatalarını bildir</string>
|
||||
<string name="enable_disposed_exceptions_summary">Parçanın dışında veya atımdan sonraki etkinlik yaşam döngüsünde meydana gelen ve teslim edilemeyen Rx beklentilerinin bildirimini zorla</string>
|
||||
|
||||
<string name="use_inexact_seek_title">Hızlı isabetsiz konumlama kullan</string>
|
||||
<string name="use_inexact_seek_summary">İsabetsiz konumlama, oynatıcının konumları düşürülmüş duyarlıkla saptamasını sağlar</string>
|
||||
<string name="auto_queue_title">Sonraki akışı kendiliğinden kuyrukla</string>
|
||||
<string name="auto_queue_summary">Yinelemeyen oynatma kuyruğundaki son akış başladığında ilişkili akışı kuyruğun sonuna kendiliğinden ekle.</string>
|
||||
<string name="auto_queue_title">Sonraki akışı otomatik olarak kuyruğa ekle</string>
|
||||
<string name="auto_queue_summary">Yinelemeyen oynatma kuyruğundaki son akış başladığında ilişkili akışı kuyruğun sonuna otomatik olarak ekle.</string>
|
||||
<string name="live_sync">EŞZAMANLA</string>
|
||||
|
||||
<string name="file">Dosya</string>
|
||||
@@ -423,22 +420,39 @@
|
||||
<string name="subscriptions_import_unsuccessful">Aboneliklerin içe aktarımı başarısız</string>
|
||||
<string name="subscriptions_export_unsuccessful">Aboneliklerin dışa aktarımı başarısız</string>
|
||||
|
||||
<string name="import_youtube_instructions">YouTube aboneliklerinizi içe aktarmak için dışa aktarılmış dosya gerekiyor, dosya şu yönergeler izlenerek indirilebilir:
|
||||
\n
|
||||
\n1. Şu adrese gidin: %1$s
|
||||
\n2. Sorulduğunda hesabınıza giriş yapın
|
||||
<string name="import_youtube_instructions">YouTube aboneliklerinizi içe aktarmak için aşağıdaki yönergelerle indirilebilecek dışa aktarılmış dosya gerekiyor:
|
||||
\n
|
||||
\n1. Şu adrese gidin: %1$s
|
||||
\n2. Sorulduğunda hesabınıza giriş yapın
|
||||
\n3. İndirme başlamalı (bu dışa aktarılmış dosyadır)</string>
|
||||
<string name="import_soundcloud_instructions">SoundCloud takiplerinizi içe aktarmak için profil adresinizi veya kimliğinizi bilmelisiniz. Eğer biliyorsanız, ikisinden birini aşağıdaki giriye yazın ve işte hazırsınız.
|
||||
\n
|
||||
\nEğer bilmiyorsanız şu adımları izleyebilirsiniz:
|
||||
\n
|
||||
\n1. Herhangi bir tarayıcıda \"masaüstü kipi\"ni açın (site, mobil aygıtlar için uygun değildir)
|
||||
\n2. Şu adrese gidin: %1$s
|
||||
\n3. Sorulduğunda hesabınıza giriş yapın
|
||||
<string name="import_soundcloud_instructions">SoundCloud takiplerinizi içe aktarmak için profil adresinizi veya kimliğinizi bilmelisiniz. Eğer biliyorsanız, ikisinden birini aşağıdaki alana yazın ve işte hazırsınız.
|
||||
\n
|
||||
\nEğer bilmiyorsanız şu adımları izleyebilirsiniz:
|
||||
\n
|
||||
\n1. Herhangi bir tarayıcıda \"masaüstü modu\"nu açın (site, mobil aygıtlar için uygun değildir)
|
||||
\n2. Şu adrese gidin: %1$s
|
||||
\n3. Sorulduğunda hesabınıza giriş yapın
|
||||
\n4. Yönlendirildiğiniz adresi kopyalayın (bu sizin profil adresinizdir)</string>
|
||||
<string name="import_soundcloud_instructions_hint">kimliginiz, soundcloud.com/kimliginiz</string>
|
||||
|
||||
<string name="import_network_expensive_warning">Bu sürecin ağ masrafına neden olabileceğini unutmayın.
|
||||
\n
|
||||
\nDevam etmek istiyor musunuz?</string>
|
||||
</resources>
|
||||
<string name="download_thumbnail_title">Önizlemeleri yükle</string>
|
||||
<string name="download_thumbnail_summary">Bellek ve veri kullanımını azaltmak için önizleme yüklemelerini devre dışı bırakın. Bunu değiştirmek, hem bellek hem de disk üzerindeki önbelleği temizleyecektir.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Görsel önbelleği temizlendi</string>
|
||||
<string name="metadata_cache_wipe_title">Önbellek verisini temizle</string>
|
||||
<string name="metadata_cache_wipe_summary">Önbelleklenmiş tüm web içeriği verisini kaldır</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Veri önbelleği temizlendi</string>
|
||||
<string name="playback_speed_control">Oynatma Hızı Kontrolü</string>
|
||||
<string name="playback_tempo">Hız</string>
|
||||
<string name="playback_default">Varsayılan</string>
|
||||
<string name="playback_pitch">Ses titreşimi</string>
|
||||
<string name="unhook_checkbox">Çengelini Çıkar (bozukluğa neden olabilir)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="no_streams_available_download">İndirmeye uygun akış yok</string>
|
||||
|
||||
<string name="preferred_open_action_settings_title">Yeğlenen açma eylemi</string>
|
||||
<string name="preferred_open_action_settings_summary">İçerik açılırken öntanımlı eylem — %s</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -159,12 +159,12 @@
|
||||
<string name="enable_watch_history_summary">Вести облік перегляду відео</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Відновити фокус</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Продовжувати відтворення опісля переривання (наприклад телефонний дзвінок)</string>
|
||||
<string name="show_hold_to_append_title">Відображати вказівку Утримуйте для додачі</string>
|
||||
<string name="show_hold_to_append_title">Показувати стримання для підказки</string>
|
||||
<string name="default_content_country_title">Усталена країна контенту</string>
|
||||
<string name="service_title">Сервіс</string>
|
||||
<string name="settings_category_player_title">Програвач</string>
|
||||
<string name="settings_category_player_behavior_title">Поведінка</string>
|
||||
<string name="settings_category_history_title">Історія</string>
|
||||
<string name="settings_category_history_title">Історія та кеш</string>
|
||||
<string name="settings_category_popup_title">Вікно</string>
|
||||
<string name="popup_playing_toast">Відворення у вікні</string>
|
||||
<string name="background_player_append">Додано до фонового програвання</string>
|
||||
@@ -232,7 +232,6 @@
|
||||
<string name="new_and_hot">Новинки</string>
|
||||
<string name="play_queue_stream_detail">Деталі</string>
|
||||
<string name="play_queue_audio_settings">Налаштування аудіо</string>
|
||||
<string name="preferred_player_settings_title">Улюблений програвач</string>
|
||||
|
||||
<string name="video_player">Відео програвач</string>
|
||||
<string name="background_player">Фоновий програвач</string>
|
||||
@@ -252,7 +251,7 @@
|
||||
<string name="toggle_orientation">Перемкнути орієнтацію</string>
|
||||
<string name="player_unrecoverable_failure">Фатальна помилка програвача</string>
|
||||
<string name="external_player_unsupported_link_type">Зовнішні програвачі не підтримують такі види ланок</string>
|
||||
<string name="info_labels">Що:\\nЗапит:\\nМова змісту:\\nСервіс:\\nЧас GMT:\\nПакунок:\\nВерсія:\\nВерсія ОС:\\nГлоб. діапазон IP :</string>
|
||||
<string name="info_labels">Що:\\nЗапит:\\nМова змісту:\\nСервіс:\\nЧас GMT:\\nПакунок:\\nВерсія:\\nВерсія ОС:</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Ескіз аватару користувача</string>
|
||||
<string name="detail_likes_img_view_description">Сподобалося</string>
|
||||
<string name="detail_dislikes_img_view_description">Не сподобалося</string>
|
||||
@@ -349,7 +348,6 @@
|
||||
<string name="drawer_header_action_paceholder_text">Ми тут матимемо щось незабаром ;D</string>
|
||||
|
||||
|
||||
<string name="preferred_player_share_menu_dialog_title">Відкрити в улюбленому програвачеві</string>
|
||||
<string name="always_ask_open_action">Завжди питати</string>
|
||||
|
||||
<string name="create_playlist">Створити новий плейлист</string>
|
||||
@@ -383,7 +381,7 @@
|
||||
<string name="enable_leak_canary_title">Увімкнути LeakCanary</string>
|
||||
<string name="enable_leak_canary_summary">Під час роботи LeakCanary застосунок може стати несприйнятливим під час гіп-дампінґу</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">Зазвітувати Out-of-Lifecycle хиби</string>
|
||||
<string name="enable_disposed_exceptions_title">Зазвітувати Out-of-lifecycle хиби</string>
|
||||
<string name="enable_disposed_exceptions_summary">Примусове звітування про неможливість доставлення Rx винятків, які відбуваються за межами фраґменту або діяльності життєвого циклу після усунення</string>
|
||||
|
||||
<string name="use_inexact_seek_title">Використовувати неточне шукання</string>
|
||||
@@ -433,4 +431,16 @@
|
||||
<string name="import_network_expensive_warning">Майте на увазі: ця операція може потребувати багато трафіку.
|
||||
\n
|
||||
\nПродовжуватимете?</string>
|
||||
<string name="download_thumbnail_title">Завантажити ескізи</string>
|
||||
<string name="download_thumbnail_summary">Відключити аби зупинити завантаження ескізів та заощадити використання ресурсів та пам\'яті. Увімкнення функції призведе до повного вичищення кешу зображень.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Кеш зображень стерто</string>
|
||||
<string name="metadata_cache_wipe_title">Стерти кеш метаданих</string>
|
||||
<string name="metadata_cache_wipe_summary">"Усунути всі кешовані дані веб-сторінки "</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">Кеш метаданих стерто</string>
|
||||
<string name="playback_speed_control">Керування швидкістю програвання</string>
|
||||
<string name="playback_tempo">Темп</string>
|
||||
<string name="playback_pitch">Тон</string>
|
||||
<string name="unhook_checkbox">Від\'єднати (може спричинити спотворення)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">Усталено</string>
|
||||
</resources>
|
||||
|
||||
2
app/src/main/res/values-ur/strings.xml
Normal file
2
app/src/main/res/values-ur/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -102,7 +102,7 @@
|
||||
<string name="error_snackbar_action">BÁo CÁO</string>
|
||||
<string name="what_device_headline">Thông tin:</string>
|
||||
<string name="what_happened_headline">Chuyện gì đã xảy ra:</string>
|
||||
<string name="info_labels">Gì: \\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP range:</string>
|
||||
<string name="info_labels">Gì: \\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:</string>
|
||||
<string name="your_comment">Nhận xét của bạn (bằng tiếng Anh):</string>
|
||||
<string name="error_details_headline">Chi tiết:</string>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<resources>
|
||||
<string name="view_count_text">%1$s 次观看</string>
|
||||
<string name="upload_date_text">于 %1$s 发布</string>
|
||||
<string name="no_player_found">找不到任何串流播放器。您是否要安装 VLC?</string>
|
||||
<string name="no_player_found">找不到播放器。您是否要安装 VLC?</string>
|
||||
<string name="install">安装</string>
|
||||
<string name="cancel">取消</string>
|
||||
<string name="open_in_browser">在浏览器打开</string>
|
||||
@@ -17,11 +17,11 @@
|
||||
<string name="use_external_video_player_title">使用外置视频播放器</string>
|
||||
<string name="use_external_audio_player_title">使用外置音频播放器</string>
|
||||
<string name="download_path_title">视频下载路径</string>
|
||||
<string name="download_path_summary">下载视频存储路径</string>
|
||||
<string name="download_path_summary">下载视频存储的路径</string>
|
||||
<string name="download_path_dialog_title">输入视频存储路径</string>
|
||||
<string name="default_resolution_title">默认分辨率</string>
|
||||
<string name="play_with_kodi_title">用 Kodi 播放</string>
|
||||
<string name="kore_not_found">找不到 Kore 应用程式,安装它吗?</string>
|
||||
<string name="kore_not_found">找不到 Kore 应用,要安装吗?</string>
|
||||
<string name="show_play_with_kodi_title">显示 “用 Kodi 播放” 的选项</string>
|
||||
<string name="show_play_with_kodi_summary">显示以 Kodi 媒体中心播放视频的选项</string>
|
||||
<string name="play_audio">音频</string>
|
||||
@@ -29,8 +29,8 @@
|
||||
<string name="webm_description">WebM — 开放格式</string>
|
||||
<string name="m4a_description">M4A — 更佳品质</string>
|
||||
<string name="theme_title">主题</string>
|
||||
<string name="dark_theme_title">暗色系</string>
|
||||
<string name="light_theme_title">明亮色系</string>
|
||||
<string name="dark_theme_title">暗色</string>
|
||||
<string name="light_theme_title">明亮色</string>
|
||||
|
||||
<string name="download_dialog_title">下载</string>
|
||||
<string name="next_video_title">即将播放</string>
|
||||
@@ -52,11 +52,11 @@
|
||||
<string name="use_tor_title">使用 Tor</string>
|
||||
<string name="use_tor_summary">(实验性)强制下载流量使用 Tor 加强隐私(暂不支援流媒体视频)。</string>
|
||||
<string name="download_path_audio_title">音频存储路径</string>
|
||||
<string name="download_path_audio_summary">存放已下载音频的路径</string>
|
||||
<string name="download_path_audio_summary">下载音频存储的路径</string>
|
||||
<string name="download_path_audio_dialog_title">输入音频文件存储路径</string>
|
||||
|
||||
<string name="err_dir_create">未能建立下载路径 “%1$s”</string>
|
||||
<string name="info_dir_created">已建立下载路径 “%1$s”</string>
|
||||
<string name="info_dir_created">已创建下载目录 “%1$s”</string>
|
||||
<string name="content">内容</string>
|
||||
<string name="show_age_restricted_content_title">显示年龄限制内容</string>
|
||||
<string name="video_is_age_restricted">视频有年龄限制。请先在设置中启用\"显示年龄限制内容\"。</string>
|
||||
@@ -91,7 +91,7 @@
|
||||
<string name="autoplay_by_calling_app_summary">当 NewPipe 被其他应用调用时自动播放视频</string>
|
||||
<string name="duration_live">直播</string>
|
||||
|
||||
<string name="main_bg_subtitle">点按搜索开始使用</string>
|
||||
<string name="main_bg_subtitle">点击搜索以开始</string>
|
||||
<string name="start">开始</string>
|
||||
<string name="pause">暂停</string>
|
||||
<string name="view">播放</string>
|
||||
@@ -119,15 +119,15 @@
|
||||
|
||||
<string name="could_not_load_image">无法加载图像</string>
|
||||
<string name="app_ui_crash">应用/界面已崩溃</string>
|
||||
<string name="info_labels">原因:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:\\nIP地理范围:</string>
|
||||
<string name="info_labels">原因:\\n请求:\\n内容语言:\\n服务:\\nGMT时间:\\n包:\\n版本:\\n操作系统版本:</string>
|
||||
<string name="reCaptchaActivity">reCAPTCHA</string>
|
||||
<string name="reCaptcha_title">reCAPTCHA 验证</string>
|
||||
|
||||
<string name="recaptcha_request_toast">需要 reCAPTCHA 验证</string>
|
||||
|
||||
<string name="open_in_popup_mode">以窗口模式打开</string>
|
||||
<string name="use_external_video_player_summary">当启用该选项时某些分辨率的视频将没有声音</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe 窗口模式</string>
|
||||
<string name="open_in_popup_mode">以悬浮窗模式打开</string>
|
||||
<string name="use_external_video_player_summary">启用该选项时某些分辨率的视频将没有声音</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe 悬浮窗模式</string>
|
||||
<string name="subscribe_button_title">订阅</string>
|
||||
<string name="subscribed_button_title">已订阅</string>
|
||||
<string name="channel_unsubscribed">已取消订阅频道</string>
|
||||
@@ -140,15 +140,15 @@
|
||||
<string name="fragment_whats_new">有何更新</string>
|
||||
|
||||
<string name="controls_background_title">后台播放</string>
|
||||
<string name="controls_popup_title">窗口播放</string>
|
||||
<string name="controls_popup_title">悬浮窗</string>
|
||||
|
||||
<string name="default_popup_resolution_title">窗口模式默认分辨率</string>
|
||||
<string name="show_higher_resolutions_title">显示更高分辨率</string>
|
||||
<string name="show_higher_resolutions_summary">2K/4K 视频播放仅在某些设备上支持</string>
|
||||
<string name="default_video_format_title">首选视频格式</string>
|
||||
<string name="black_theme_title">黑色系</string>
|
||||
<string name="popup_remember_size_pos_title">记住窗口模式大小和位置</string>
|
||||
<string name="popup_remember_size_pos_summary">记住上一次设置窗口模式的大小和位置</string>
|
||||
<string name="black_theme_title">纯黑</string>
|
||||
<string name="popup_remember_size_pos_title">记住悬浮窗的大小和位置</string>
|
||||
<string name="popup_remember_size_pos_summary">记住上一次设置悬浮窗的大小和位置</string>
|
||||
<string name="player_gesture_controls_title">播放手势控制</string>
|
||||
<string name="player_gesture_controls_summary">使用手势操作控制播放器的亮度和音量</string>
|
||||
<string name="show_search_suggestions_title">搜索建议</string>
|
||||
@@ -204,10 +204,10 @@
|
||||
<string name="tab_about">关于</string>
|
||||
<string name="tab_contributors">贡献者</string>
|
||||
<string name="tab_licenses">许可</string>
|
||||
<string name="app_description">一款轻量级的安卓 YouTube 客户端。</string>
|
||||
<string name="app_description">一款开源、轻量级的安卓 YouTube 客户端。</string>
|
||||
<string name="view_on_github">在 GitHub 上查看</string>
|
||||
<string name="app_license_title">NewPipe 许可</string>
|
||||
<string name="contribution_encouragement">无论你想提供点子,翻译程序,改进设计,优化代码或是想做出大量修改,我们都随时欢迎你的加入。贡献有越多程序亦将越加好用!</string>
|
||||
<string name="contribution_encouragement">无论你有什么想法:翻译程序,改进设计,优化代码或是想做出大量修改——我们都随时欢迎。做得越多它将变得越好!</string>
|
||||
<string name="read_full_license">阅读许可</string>
|
||||
<string name="contribution_title">贡献</string>
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
|
||||
<string name="settings_category_player_title">播放器</string>
|
||||
<string name="settings_category_player_behavior_title">行为</string>
|
||||
<string name="settings_category_history_title">历史记录</string>
|
||||
<string name="settings_category_history_title">历史记录 & 缓存</string>
|
||||
<string name="background_player_append">在后台播放器上排队</string>
|
||||
<string name="popup_playing_append">在弹出播放器上排队</string>
|
||||
<string name="playlist">播放列表</string>
|
||||
@@ -251,4 +251,186 @@
|
||||
</plurals>
|
||||
|
||||
<string name="item_deleted">项目已删除</string>
|
||||
</resources>
|
||||
<string name="no_player_found_toast">找不到播放器(你可以安装 VLC 来播放)</string>
|
||||
<string name="controls_download_desc">下载媒体文件</string>
|
||||
<string name="show_info">显示详情</string>
|
||||
|
||||
<string name="tab_bookmarks">书签</string>
|
||||
|
||||
<string name="controls_add_to_playlist_title">添加至</string>
|
||||
|
||||
<string name="use_inexact_seek_title">使用不精确但快速的进度</string>
|
||||
<string name="use_inexact_seek_summary">不精确进度可以让播放器更快地定位到进度条的大致位置</string>
|
||||
<string name="download_thumbnail_title">加载缩略图</string>
|
||||
<string name="download_thumbnail_summary">禁用以停止加载所有缓存数据。更改此选项会清除内存和内存卡上的图像缓存。</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">图像缓存已清除</string>
|
||||
<string name="metadata_cache_wipe_title">清除缓存元数据</string>
|
||||
<string name="metadata_cache_wipe_summary">移除所有缓存的网页数据</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">元数据缓存已清除</string>
|
||||
<string name="auto_queue_title">自动播放下一个视频</string>
|
||||
<string name="auto_queue_summary">如果播放到非循环列表中的最后一个视频,则自动加入一个相关视频到列表中。</string>
|
||||
<string name="show_hold_to_append_title">显示长按以扩展的提示</string>
|
||||
<string name="show_hold_to_append_summary">当视频详情页中的背景或悬浮按钮被按下的时候显示提示</string>
|
||||
<string name="default_content_country_title">默认内容国家</string>
|
||||
<string name="service_title">服务</string>
|
||||
<string name="settings_category_debug_title">调试</string>
|
||||
<string name="always">总是</string>
|
||||
<string name="just_once">仅一次</string>
|
||||
<string name="file">文件</string>
|
||||
|
||||
<string name="toggle_orientation">切换方向</string>
|
||||
<string name="switch_to_background">切换到后台</string>
|
||||
<string name="switch_to_popup">切换到悬浮窗</string>
|
||||
<string name="switch_to_main">切换到主页</string>
|
||||
|
||||
<string name="import_data_title">导入数据库</string>
|
||||
<string name="export_data_title">导出数据库</string>
|
||||
<string name="import_data_summary">将覆盖你现有历史记录和订阅</string>
|
||||
<string name="export_data_summary">导出历史记录,订阅和播放列表。</string>
|
||||
<string name="player_recoverable_failure">从播放器错误中恢复</string>
|
||||
<string name="external_player_unsupported_link_type">外部播放器不支持这些链接类型</string>
|
||||
<string name="invalid_url_toast">无效的链接</string>
|
||||
<string name="video_streams_empty">未找到视频</string>
|
||||
<string name="audio_streams_empty">未找到音频</string>
|
||||
<string name="invalid_directory">无效的目录</string>
|
||||
<string name="invalid_source">无效的文件/内容来源</string>
|
||||
<string name="invalid_file">文件不存在或无读写权限</string>
|
||||
<string name="file_name_empty_error">文件名不能为空</string>
|
||||
<string name="error_occurred_detail">发生了一个错误:%1$s</string>
|
||||
<string name="no_streams_available_download">无视频媒体可以下载</string>
|
||||
|
||||
<string name="detail_drag_description">拖拽以重新排列</string>
|
||||
|
||||
<string name="create">创建</string>
|
||||
<string name="delete_one">删除一个</string>
|
||||
<string name="delete_all">删除全部</string>
|
||||
<string name="dismiss">解除</string>
|
||||
<string name="rename">重命名</string>
|
||||
|
||||
<string name="donation_title">捐赠</string>
|
||||
<string name="donation_encouragement">NewPipe 是一群志愿者花费业余时间开发的,目的是给你们带来最佳体验。你的一点心意,可以让开发者们可以享受一杯 Java 的咖啡的同时让 NewPipe 变得更好用!</string>
|
||||
<string name="give_back">捐赠</string>
|
||||
<string name="website_title">网页</string>
|
||||
<string name="website_encouragement">为了获得 NewPipe 的更多信息和最新消息请访问我们的网站。</string>
|
||||
<string name="delete_item_search_history">你想从搜索历史中删除此项吗?</string>
|
||||
<string name="delete_stream_history_prompt">你想从观看历史中删除此项吗?</string>
|
||||
<string name="delete_all_history_prompt">确实要删除历史记录的所有项目吗?</string>
|
||||
<string name="title_last_played">上一次播放</string>
|
||||
<string name="title_most_played">最多播放</string>
|
||||
|
||||
<string name="main_page_content">主页内容</string>
|
||||
<string name="blank_page_summary">空白页</string>
|
||||
<string name="kiosk_page_summary">Kiosk 页</string>
|
||||
<string name="subscription_page_summary">订阅页</string>
|
||||
<string name="feed_page_summary">Feed 页</string>
|
||||
<string name="channel_page_summary">频道页</string>
|
||||
<string name="select_a_channel">选择频道</string>
|
||||
<string name="no_channel_subscribed_yet">还没有订阅的频道</string>
|
||||
<string name="select_a_kiosk">选择 kiosk</string>
|
||||
<string name="export_complete_toast">导出完成</string>
|
||||
<string name="import_complete_toast">导入完成</string>
|
||||
<string name="no_valid_zip_file">无有效的 ZIP 文件</string>
|
||||
<string name="could_not_import_all_files">警告:无法导入所有文件。</string>
|
||||
<string name="override_current_data">将覆盖你现有设置。</string>
|
||||
|
||||
<string name="kiosk">Kiosk</string>
|
||||
<string name="trending">流行的</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">最新 & 最热</string>
|
||||
<string name="title_activity_background_player">后台播放器</string>
|
||||
<string name="title_activity_popup_player">悬浮窗播放器</string>
|
||||
<string name="play_queue_remove">移除</string>
|
||||
<string name="play_queue_stream_detail">详情</string>
|
||||
<string name="play_queue_audio_settings">音频设置</string>
|
||||
<string name="hold_to_append">按住以队列</string>
|
||||
<string name="enqueue_on_background">在后台队列</string>
|
||||
<string name="enqueue_on_popup">在悬浮窗队列</string>
|
||||
<string name="start_here_on_main">从这里播放</string>
|
||||
<string name="start_here_on_background">从这里在后台播放</string>
|
||||
<string name="start_here_on_popup">从这里在悬浮窗播放</string>
|
||||
|
||||
<string name="drawer_open">打开侧栏菜单</string>
|
||||
<string name="drawer_close">关闭侧栏菜单</string>
|
||||
<string name="drawer_header_action_paceholder_text">马上就好 ;D</string>
|
||||
|
||||
|
||||
<string name="preferred_open_action_settings_title">偏好的打开动作</string>
|
||||
<string name="preferred_open_action_settings_summary">打开内容的默认动作 — %s</string>
|
||||
|
||||
<string name="video_player">视频播放器</string>
|
||||
<string name="background_player">后台播放器</string>
|
||||
<string name="popup_player">悬浮窗播放器</string>
|
||||
<string name="always_ask_open_action">总是询问</string>
|
||||
|
||||
<string name="preferred_player_fetcher_notification_title">获取信息中…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">正在加载请求的内容</string>
|
||||
|
||||
<string name="create_playlist">创建新播放列表</string>
|
||||
<string name="delete_playlist">删除播放列表</string>
|
||||
<string name="rename_playlist">重命名播放列表</string>
|
||||
<string name="playlist_name_input">名称</string>
|
||||
<string name="append_playlist">加入播放列表</string>
|
||||
<string name="set_as_playlist_thumbnail">设置为播放列表缩略图</string>
|
||||
|
||||
<string name="bookmark_playlist">书签播放列表</string>
|
||||
<string name="unbookmark_playlist">移除书签</string>
|
||||
|
||||
<string name="delete_playlist_prompt">你想删除此播放列表吗?</string>
|
||||
<string name="playlist_creation_success">播放列表已创建</string>
|
||||
<string name="playlist_add_stream_success">加入播放列表</string>
|
||||
<string name="playlist_thumbnail_change_success">播放列表缩略图已更改</string>
|
||||
<string name="playlist_delete_failure">删除播放列表失败</string>
|
||||
|
||||
<string name="caption_none">无字幕</string>
|
||||
|
||||
<string name="resize_fit">适应屏幕</string>
|
||||
<string name="resize_fill">填充屏幕</string>
|
||||
<string name="resize_zoom">放大填充</string>
|
||||
|
||||
<string name="caption_auto_generated">自动生成</string>
|
||||
<string name="caption_font_size_settings_title">字幕字体大小</string>
|
||||
<string name="smaller_caption_font_size">小字体</string>
|
||||
<string name="normal_caption_font_size">中等字体</string>
|
||||
<string name="larger_caption_font_size">大字体</string>
|
||||
|
||||
<string name="enable_leak_canary_title">启用 LeakCanary</string>
|
||||
<string name="enable_leak_canary_summary">heap dumping 的时候,内存泄露监测可能会导致应用未响应</string>
|
||||
|
||||
<string name="enable_disposed_exceptions_title">报告生命周期外的错误</string>
|
||||
<string name="enable_disposed_exceptions_summary">处理之后,强制报告无法送达的、发生在Fragment或activity生命周期之外的Rx异常</string>
|
||||
|
||||
<string name="import_export_title">导入/导出</string>
|
||||
<string name="import_title">导入</string>
|
||||
<string name="import_from">从导入</string>
|
||||
<string name="export_to">导出至</string>
|
||||
|
||||
<string name="import_ongoing">导入中…</string>
|
||||
<string name="export_ongoing">导出中…</string>
|
||||
|
||||
<string name="import_file_title">导入文件</string>
|
||||
<string name="previous_export">之前的导出</string>
|
||||
|
||||
<string name="subscriptions_import_unsuccessful">订阅导入失败</string>
|
||||
<string name="subscriptions_export_unsuccessful">订阅导出失败</string>
|
||||
|
||||
<string name="import_youtube_instructions">为了导入你的 YouTube 订阅,你需要一个导出文件,按照下面的步骤来下载此文件:
|
||||
\n1. 浏览器打开链接:%1$s
|
||||
\n2. 登录你的账户
|
||||
\n3. 下载应该马上开始(这个就是你的导出文件)</string>
|
||||
<string name="import_soundcloud_instructions">为了导入你的 SoundCloud,你需要知道你的个人页链接或者id,如果你知道,只要在下面的输入框中输入任意一种就OK了。
|
||||
\n如果你不知道,你需要这么做:
|
||||
\n1. 浏览器打开链接:%1$s
|
||||
\n2. 在某些手机浏览器中你得开启桌面模式(desktop mode)
|
||||
\n3. 复制你跳转到的链接(这个就是你的个人页链接)</string>
|
||||
<string name="import_soundcloud_instructions_hint">你的ID 或 soundcloud.com/你的ID</string>
|
||||
|
||||
<string name="import_network_expensive_warning">请注意这个操作可能耗费大量流量。
|
||||
\n你想继续吗?</string>
|
||||
|
||||
<string name="playback_speed_control">播放速度控制</string>
|
||||
<string name="playback_tempo">速度</string>
|
||||
<string name="playback_pitch">音调</string>
|
||||
<string name="unhook_checkbox">Unhook(可能导致失真)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">默认</string>
|
||||
</resources>
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
<string name="later">稍候</string>
|
||||
<string name="could_not_load_image">無法取得圖片</string>
|
||||
<string name="app_ui_crash">應用程式或介面出現問題</string>
|
||||
<string name="info_labels">事件:\\n請求:\\n內容語言:\\n服務:\\nGMT 時間:\\nPackage:\\n版本:\\n作業系統版本:\\n全球 IP 域:</string>
|
||||
<string name="info_labels">事件:\\n請求:\\n內容語言:\\n服務:\\nGMT 時間:\\nPackage:\\n版本:\\n作業系統版本:</string>
|
||||
<string name="use_old_player_title">使用舊播放器</string>
|
||||
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
<string name="error_snackbar_action">回報</string>
|
||||
<string name="what_device_headline">資訊:</string>
|
||||
<string name="what_happened_headline">發生了什麼事:</string>
|
||||
<string name="info_labels">發生了什麼:\\n請求:\\n內容語言:\\n服務:\\nGMT 時間:\\n套件:\\n版本:\\n系統版本:\\nGlob. IP 範圍:</string>
|
||||
<string name="info_labels">發生了什麼:\\n請求:\\n內容語言:\\n服務:\\nGMT 時間:\\n套件:\\n版本:\\n系統版本:</string>
|
||||
<string name="your_comment">您的留言(請用英文):</string>
|
||||
<string name="error_details_headline">詳細資訊:</string>
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
<string name="resume_on_audio_focus_gain_summary">在干擾結束後繼續播放(例如有來電)</string>
|
||||
<string name="settings_category_player_title">播放器</string>
|
||||
<string name="settings_category_player_behavior_title">行為</string>
|
||||
<string name="settings_category_history_title">歷史紀錄</string>
|
||||
<string name="settings_category_history_title">歷史記錄和快取</string>
|
||||
<string name="playlist">播放清單</string>
|
||||
<string name="undo">復原</string>
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
<string name="item_deleted">項目已刪除</string>
|
||||
<string name="delete_item_search_history">確定要刪除此項搜尋紀錄嗎?</string>
|
||||
<string name="no_player_found_toast">沒有找到串流播放器(你可以安裝 VLC播放器 來播放)</string>
|
||||
<string name="show_hold_to_append_title">顯示鎖定到附加指引上</string>
|
||||
<string name="show_hold_to_append_title">顯示鎖定到附加提示</string>
|
||||
<string name="default_content_country_title">預設內容國家</string>
|
||||
<string name="service_title">服務</string>
|
||||
<string name="background_player_append">在背景播放器上等候</string>
|
||||
@@ -308,8 +308,6 @@
|
||||
<string name="donation_encouragement">NewPipe 由志願者所開發,他們花費了空閒時間將獲得的最佳體驗帶給您。現在是時候回過頭來,讓我們的開發人員可以能夠在享受一杯 java 的同時,使 NewPipe 更加的美好!</string>
|
||||
<string name="drawer_open">打開抽屜</string>
|
||||
<string name="drawer_close">關閉抽屜</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">開啟優先的播放器</string>
|
||||
<string name="preferred_player_settings_title">優先播放機</string>
|
||||
|
||||
<string name="video_player">影片播放</string>
|
||||
<string name="background_player">背景播放</string>
|
||||
@@ -426,4 +424,21 @@
|
||||
\n2. 移至此網址:%1$s
|
||||
\n3. 詢問時登入到您的帳號
|
||||
\n4. 複製網址您會被重新導向(這是您的個人資料網址)</string>
|
||||
<string name="download_thumbnail_title">載入縮圖</string>
|
||||
<string name="download_thumbnail_summary">停用可以停止載入所有的縮圖和儲存資料與使用的記憶體。更改此動作將清除在記憶體和磁碟上的影像快取。</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">圖片快取被抹除</string>
|
||||
<string name="metadata_cache_wipe_title">抹除快取中介資料</string>
|
||||
<string name="metadata_cache_wipe_summary">移除所有快取網頁的資料</string>
|
||||
<string name="metadata_cache_wipe_complete_notice">中介資料快取已抹除</string>
|
||||
<string name="playback_speed_control">重播速度控制</string>
|
||||
<string name="playback_tempo">節拍</string>
|
||||
<string name="playback_pitch">間距</string>
|
||||
<string name="unhook_checkbox">解除 (可能導致失真)</string>
|
||||
<string name="playback_nightcore">Nightcore</string>
|
||||
<string name="playback_default">預設</string>
|
||||
<string name="preferred_open_action_settings_title">偏好的開啟動作</string>
|
||||
<string name="preferred_open_action_settings_summary">開起內容時的預設動作 — %s</string>
|
||||
|
||||
<string name="no_streams_available_download">沒有可供下載的串流</string>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<color name="playlist_stream_count_background_color">#e6000000</color>
|
||||
<color name="duration_text_color">#EEFFFFFF</color>
|
||||
<color name="playlist_stream_count_text_color">#ffffff</color>
|
||||
<color name="video_overlay_color">#66000000</color>
|
||||
<color name="video_overlay_color">#64000000</color>
|
||||
|
||||
<color name="background_notification_color">#323232</color>
|
||||
<color name="background_title_color">#ffffff</color>
|
||||
|
||||
@@ -109,23 +109,7 @@
|
||||
</string-array>
|
||||
|
||||
<!-- Caption Size -->
|
||||
<string name="caption_size_key" translatable="false">caption_size_key</string>
|
||||
<string name="caption_size_default" translatable="false">@string/normal_caption_size_key</string>
|
||||
|
||||
<string name="smaller_caption_size_key" translatable="false">smaller_caption_size</string>
|
||||
<string name="normal_caption_size_key" translatable="false">normal_caption_size</string>
|
||||
<string name="larger_caption_size_key" translatable="false">larger_caption_size</string>
|
||||
|
||||
<string-array name="caption_size_descriptions_list" translatable="false">
|
||||
<item>@string/smaller_caption_font_size</item>
|
||||
<item>@string/normal_caption_font_size</item>
|
||||
<item>@string/larger_caption_font_size</item>
|
||||
</string-array>
|
||||
<string-array name="caption_size_values_list" translatable="false">
|
||||
<item>@string/smaller_caption_size_key</item>
|
||||
<item>@string/normal_caption_size_key</item>
|
||||
<item>@string/larger_caption_size_key</item>
|
||||
</string-array>
|
||||
<string name="caption_settings_key" translatable="false">caption_settings_key</string>
|
||||
|
||||
<!-- Content & History -->
|
||||
<string name="show_search_suggestions_key" translatable="false">show_search_suggestions</string>
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
<string name="show_age_restricted_content_title">Show age restricted content</string>
|
||||
<string name="video_is_age_restricted">Age Restricted Video. Allowing such material is possible from Settings.</string>
|
||||
<string name="duration_live">live</string>
|
||||
<string name="duration_live_button" translatable="false">LIVE</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="downloads_title">Downloads</string>
|
||||
<string name="error_report_title">Error report</string>
|
||||
@@ -180,6 +181,7 @@
|
||||
<string name="invalid_file">File doesn\'t exist or insufficient permission to read or write to it</string>
|
||||
<string name="file_name_empty_error">File name cannot be empty</string>
|
||||
<string name="error_occurred_detail">An error occurred: %1$s</string>
|
||||
<string name="no_streams_available_download">No streams available to download</string>
|
||||
|
||||
<!-- error activity -->
|
||||
<string name="sorry_string">Sorry, that should not have happened.</string>
|
||||
@@ -189,7 +191,7 @@
|
||||
<string name="error_snackbar_action">REPORT</string>
|
||||
<string name="what_device_headline">Info:</string>
|
||||
<string name="what_happened_headline">What happened:</string>
|
||||
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP range:</string>
|
||||
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:</string>
|
||||
<string name="your_comment">Your comment (in English):</string>
|
||||
<string name="error_details_headline">Details:</string>
|
||||
|
||||
@@ -387,15 +389,15 @@
|
||||
|
||||
|
||||
<!-- Preferred player -->
|
||||
<string name="preferred_player_share_menu_title" translatable="false">NewPipe</string>
|
||||
<string name="preferred_player_share_menu_dialog_title">Open with preferred player</string>
|
||||
<string name="preferred_player_settings_title">Preferred player</string>
|
||||
<string name="preferred_open_action_share_menu_title" translatable="false">NewPipe</string>
|
||||
<string name="preferred_open_action_settings_title">Preferred open action</string>
|
||||
<string name="preferred_open_action_settings_summary">Default action when opening content — %s</string>
|
||||
|
||||
<string name="video_player">Video player</string>
|
||||
<string name="background_player">Background player</string>
|
||||
<string name="popup_player">Popup player</string>
|
||||
<string name="always_ask_open_action">Always ask</string>
|
||||
|
||||
|
||||
<string name="preferred_player_fetcher_notification_title">Getting info…</string>
|
||||
<string name="preferred_player_fetcher_notification_message">"The requested content is loading"</string>
|
||||
|
||||
@@ -424,10 +426,10 @@
|
||||
<string name="resize_zoom">ZOOM</string>
|
||||
|
||||
<string name="caption_auto_generated">Auto-generated</string>
|
||||
<string name="caption_font_size_settings_title">Caption font size</string>
|
||||
<string name="smaller_caption_font_size">Smaller font</string>
|
||||
<string name="normal_caption_font_size">Normal font</string>
|
||||
<string name="larger_caption_font_size">Larger font</string>
|
||||
|
||||
<!-- Caption Settings -->
|
||||
<string name="caption_setting_title">Caption</string>
|
||||
<string name="caption_setting_description">Modify player caption text scale and background styles. Require player restart to take effect.</string>
|
||||
|
||||
<!-- Debug Settings -->
|
||||
<string name="enable_leak_canary_title">Enable LeakCanary</string>
|
||||
|
||||
@@ -22,11 +22,8 @@
|
||||
android:title="@string/show_hold_to_append_title"
|
||||
android:summary="@string/show_hold_to_append_summary"/>
|
||||
|
||||
<ListPreference
|
||||
android:defaultValue="@string/caption_size_default"
|
||||
android:entries="@array/caption_size_descriptions_list"
|
||||
android:entryValues="@array/caption_size_values_list"
|
||||
android:key="@string/caption_size_key"
|
||||
android:summary="%s"
|
||||
android:title="@string/caption_font_size_settings_title"/>
|
||||
<Preference
|
||||
android:key="@string/caption_settings_key"
|
||||
android:title="@string/caption_setting_title"
|
||||
android:summary="@string/caption_setting_description"/>
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -79,8 +79,8 @@
|
||||
android:entries="@array/preferred_open_action_description_list"
|
||||
android:entryValues="@array/preferred_open_action_values_list"
|
||||
android:key="@string/preferred_open_action_key"
|
||||
android:summary="%s"
|
||||
android:title="@string/preferred_player_settings_title"/>
|
||||
android:summary="@string/preferred_open_action_settings_summary"
|
||||
android:title="@string/preferred_open_action_settings_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user