mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-10-04 13:40:52 +02:00
Compare commits
154 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2152375227 | ||
![]() |
10d57afaac | ||
![]() |
42ff60ce85 | ||
![]() |
fd62411b35 | ||
![]() |
134850aa04 | ||
![]() |
0795135f2f | ||
![]() |
85eb1dc436 | ||
![]() |
2f2b8784f9 | ||
![]() |
181658e5a4 | ||
![]() |
d949894511 | ||
![]() |
235ead9222 | ||
![]() |
3ee6788753 | ||
![]() |
e3dfab5078 | ||
![]() |
5f232a059d | ||
![]() |
1b708d261d | ||
![]() |
3341742f66 | ||
![]() |
b731c79339 | ||
![]() |
29b12c2f84 | ||
![]() |
ba53f6611c | ||
![]() |
6eeed50418 | ||
![]() |
8caf9f87a1 | ||
![]() |
2e6089088b | ||
![]() |
40eaa166ae | ||
![]() |
41e2e5f951 | ||
![]() |
ac3938d529 | ||
![]() |
515ec4d66d | ||
![]() |
5adc27ea2b | ||
![]() |
ab089a5f93 | ||
![]() |
9f47a274a8 | ||
![]() |
1f8c0a9e5e | ||
![]() |
cef9ccd937 | ||
![]() |
3d93ecd6ec | ||
![]() |
36e38e50e9 | ||
![]() |
1a8be2bbf5 | ||
![]() |
92b1fa5743 | ||
![]() |
335e5c05db | ||
![]() |
bfead79c07 | ||
![]() |
bd8014bcbd | ||
![]() |
948d57d3d1 | ||
![]() |
31b830d6d0 | ||
![]() |
2038df976c | ||
![]() |
46cc215120 | ||
![]() |
3afce82aa7 | ||
![]() |
88e5be237e | ||
![]() |
7c4b9d8843 | ||
![]() |
b83e1716fe | ||
![]() |
c3e41e2427 | ||
![]() |
3f67b3b73c | ||
![]() |
78c9e4e1ad | ||
![]() |
69c090b5a1 | ||
![]() |
2c8222fd55 | ||
![]() |
d071891b2a | ||
![]() |
986acc5fc5 | ||
![]() |
e4295fb3fa | ||
![]() |
cfad3fb5de | ||
![]() |
b18236a27e | ||
![]() |
f6bbc69cf9 | ||
![]() |
707e4f7167 | ||
![]() |
99cdaec40e | ||
![]() |
bff5371e41 | ||
![]() |
a76398efd0 | ||
![]() |
99bcd8d043 | ||
![]() |
1602ecbaf9 | ||
![]() |
7e17bdf369 | ||
![]() |
d316bbad44 | ||
![]() |
72151c8c0c | ||
![]() |
e2e0a9bfa2 | ||
![]() |
8d53b07167 | ||
![]() |
1df852171d | ||
![]() |
399e2626fb | ||
![]() |
752a76eb44 | ||
![]() |
8feee05eec | ||
![]() |
e9a4caaf0b | ||
![]() |
8de367e03f | ||
![]() |
dad88b83fb | ||
![]() |
846f7f2f05 | ||
![]() |
41e18ae694 | ||
![]() |
deeac118a1 | ||
![]() |
594d77e713 | ||
![]() |
2ea404659b | ||
![]() |
e2ec95e6ff | ||
![]() |
db87df743d | ||
![]() |
23f9ffdab7 | ||
![]() |
28063c35c2 | ||
![]() |
21a39b06e7 | ||
![]() |
8fb29ae6c2 | ||
![]() |
21895caa3a | ||
![]() |
f17b92512c | ||
![]() |
014682664d | ||
![]() |
5bf1df9f14 | ||
![]() |
eb5fb42da9 | ||
![]() |
c46a0f7b2e | ||
![]() |
835476870b | ||
![]() |
718acb5059 | ||
![]() |
1aa763e86c | ||
![]() |
0395dc6e9e | ||
![]() |
96de70b71e | ||
![]() |
f44883e79f | ||
![]() |
c56fb8cec2 | ||
![]() |
3625a38a23 | ||
![]() |
1393d3ad7f | ||
![]() |
b674cfec24 | ||
![]() |
f0f0c43b72 | ||
![]() |
33caad4690 | ||
![]() |
0afc8005d0 | ||
![]() |
f04d2e76fa | ||
![]() |
8e1d7f162d | ||
![]() |
ee65e89230 | ||
![]() |
a8e26238a8 | ||
![]() |
a3dc95bef1 | ||
![]() |
a29df9a2dd | ||
![]() |
cc17d268fc | ||
![]() |
22a9a06b87 | ||
![]() |
d063d39dbc | ||
![]() |
87e29dbd84 | ||
![]() |
2227a7a6bd | ||
![]() |
867f633d16 | ||
![]() |
b9de3c202a | ||
![]() |
56364c4a2c | ||
![]() |
b1fd2c007d | ||
![]() |
741a872c39 | ||
![]() |
e1e2add616 | ||
![]() |
0c664e346a | ||
![]() |
7ddb856ccd | ||
![]() |
17c0b981d1 | ||
![]() |
7f0a9904ff | ||
![]() |
2b4190d85d | ||
![]() |
57e89babf1 | ||
![]() |
209dc5ace9 | ||
![]() |
1e7e8d4121 | ||
![]() |
04b75ef05f | ||
![]() |
de19421de1 | ||
![]() |
61f64a7349 | ||
![]() |
6fb16bad85 | ||
![]() |
694813ac90 | ||
![]() |
6f3fd50ed8 | ||
![]() |
c1e1c191d0 | ||
![]() |
f4c8fdaf07 | ||
![]() |
457ebe3aa2 | ||
![]() |
8da8ce0a0a | ||
![]() |
cc869b98a3 | ||
![]() |
f9e7873e54 | ||
![]() |
c4cba8aa37 | ||
![]() |
22e4ef4034 | ||
![]() |
708cdc4c62 | ||
![]() |
94931df60b | ||
![]() |
b3605fe6d4 | ||
![]() |
11e0ed7c4f | ||
![]() |
34e89448b1 | ||
![]() |
a08cd4ce6a | ||
![]() |
46b12ed819 | ||
![]() |
e8437052d8 | ||
![]() |
cf13f5ca56 | ||
![]() |
52f82ed228 |
@@ -11,8 +11,8 @@ android {
|
||||
applicationId "org.schabi.newpipe"
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 28
|
||||
versionCode 800
|
||||
versionName "0.18.0"
|
||||
versionCode 820
|
||||
versionName "0.18.2"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
@@ -62,7 +62,7 @@ dependencies {
|
||||
exclude module: 'support-annotations'
|
||||
})
|
||||
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:8e53fda'
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:ff61e284'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.mockito:mockito-core:2.23.0'
|
||||
|
||||
|
@@ -153,6 +153,7 @@
|
||||
<!-- channel prefix -->
|
||||
<data android:pathPrefix="/channel/"/>
|
||||
<data android:pathPrefix="/user/"/>
|
||||
<data android:pathPrefix="/c/"/>
|
||||
<!-- playlist prefix -->
|
||||
<data android:pathPrefix="/playlist"/>
|
||||
</intent-filter>
|
||||
|
@@ -38,6 +38,7 @@ import com.nononsenseapps.filepicker.Utils;
|
||||
|
||||
import org.schabi.newpipe.MainActivity;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.RouterActivity;
|
||||
import org.schabi.newpipe.extractor.MediaFormat;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.localization.Localization;
|
||||
@@ -368,6 +369,9 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
toolbar.setOnMenuItemClickListener(item -> {
|
||||
if (item.getItemId() == R.id.okay) {
|
||||
prepareSelectedDownload();
|
||||
if (getActivity() instanceof RouterActivity) {
|
||||
getActivity().finish();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -555,8 +559,16 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
|
||||
case R.id.audio_button:
|
||||
mainStorage = mainStorageAudio;
|
||||
format = audioStreamsAdapter.getItem(selectedAudioIndex).getFormat();
|
||||
mime = format.mimeType;
|
||||
filename += format.suffix;
|
||||
switch(format) {
|
||||
case WEBMA_OPUS:
|
||||
mime = "audio/ogg";
|
||||
filename += "opus";
|
||||
break;
|
||||
default:
|
||||
mime = format.mimeType;
|
||||
filename += format.suffix;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case R.id.video_button:
|
||||
mainStorage = mainStorageVideo;
|
||||
|
@@ -30,6 +30,7 @@ import org.schabi.newpipe.settings.tabs.Tab;
|
||||
import org.schabi.newpipe.settings.tabs.TabsManager;
|
||||
import org.schabi.newpipe.util.NavigationHelper;
|
||||
import org.schabi.newpipe.util.ServiceHelper;
|
||||
import org.schabi.newpipe.views.ScrollableTabLayout;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -37,7 +38,7 @@ import java.util.List;
|
||||
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
|
||||
private ViewPager viewPager;
|
||||
private SelectedTabsPagerAdapter pagerAdapter;
|
||||
private TabLayout tabLayout;
|
||||
private ScrollableTabLayout tabLayout;
|
||||
|
||||
private List<Tab> tabsList = new ArrayList<>();
|
||||
private TabsManager tabsManager;
|
||||
|
@@ -1,15 +1,16 @@
|
||||
package org.schabi.newpipe.local.dialog;
|
||||
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.schabi.newpipe.NewPipeDatabase;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.database.LocalItem;
|
||||
@@ -152,6 +153,12 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
|
||||
final Toast successToast = Toast.makeText(getContext(),
|
||||
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
|
||||
|
||||
if (playlist.thumbnailUrl.equals("drawable://" + R.drawable.dummy_thumbnail_playlist)) {
|
||||
playlistDisposables.add(manager.changePlaylistThumbnail(playlist.uid, streams.get(0).getThumbnailUrl())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(ignored -> successToast.show()));
|
||||
}
|
||||
|
||||
playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(ignored -> successToast.show()));
|
||||
|
@@ -4,11 +4,6 @@ import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -18,6 +13,12 @@ import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.reactivestreams.Subscriber;
|
||||
import org.reactivestreams.Subscription;
|
||||
import org.schabi.newpipe.NewPipeDatabase;
|
||||
@@ -325,6 +326,16 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
||||
headerBackgroundButton.setOnClickListener(view ->
|
||||
NavigationHelper.playOnBackgroundPlayer(activity, getPlayQueue(), false));
|
||||
|
||||
headerPopupButton.setOnLongClickListener(view -> {
|
||||
NavigationHelper.enqueueOnPopupPlayer(activity, getPlayQueue(), true);
|
||||
return true;
|
||||
});
|
||||
|
||||
headerBackgroundButton.setOnLongClickListener(view -> {
|
||||
NavigationHelper.enqueueOnBackgroundPlayer(activity, getPlayQueue(), true);
|
||||
return true;
|
||||
});
|
||||
|
||||
hideLoading();
|
||||
}
|
||||
|
||||
@@ -403,10 +414,25 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
||||
disposables.add(disposable);
|
||||
}
|
||||
|
||||
private void updateThumbnailUrl() {
|
||||
String newThumbnailUrl;
|
||||
|
||||
if (!itemListAdapter.getItemsList().isEmpty()) {
|
||||
newThumbnailUrl = ((PlaylistStreamEntry) itemListAdapter.getItemsList().get(0)).thumbnailUrl;
|
||||
} else {
|
||||
newThumbnailUrl = "drawable://" + R.drawable.dummy_thumbnail_playlist;
|
||||
}
|
||||
|
||||
changeThumbnailUrl(newThumbnailUrl);
|
||||
}
|
||||
|
||||
private void deleteItem(final PlaylistStreamEntry item) {
|
||||
if (itemListAdapter == null) return;
|
||||
|
||||
itemListAdapter.removeItem(item);
|
||||
if (playlistManager.getPlaylistThumbnail(playlistId).equals(item.thumbnailUrl))
|
||||
updateThumbnailUrl();
|
||||
|
||||
setVideoCount(itemListAdapter.getItemsList().size());
|
||||
saveChanges();
|
||||
}
|
||||
|
@@ -103,6 +103,10 @@ public class LocalPlaylistManager {
|
||||
return modifyPlaylist(playlistId, null, thumbnailUrl);
|
||||
}
|
||||
|
||||
public String getPlaylistThumbnail(final long playlistId) {
|
||||
return playlistTable.getPlaylist(playlistId).blockingFirst().get(0).getThumbnailUrl();
|
||||
}
|
||||
|
||||
private Maybe<Integer> modifyPlaylist(final long playlistId,
|
||||
@Nullable final String name,
|
||||
@Nullable final String thumbnailUrl) {
|
||||
|
@@ -25,12 +25,17 @@ import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.RemoteViews;
|
||||
@@ -48,6 +53,7 @@ import org.schabi.newpipe.player.helper.LockManager;
|
||||
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
|
||||
import org.schabi.newpipe.player.resolver.AudioPlaybackResolver;
|
||||
import org.schabi.newpipe.player.resolver.MediaSourceTag;
|
||||
import org.schabi.newpipe.util.BitmapUtils;
|
||||
import org.schabi.newpipe.util.NavigationHelper;
|
||||
import org.schabi.newpipe.util.ThemeHelper;
|
||||
|
||||
@@ -75,6 +81,7 @@ public final class BackgroundPlayer extends Service {
|
||||
|
||||
private BasePlayerImpl basePlayerImpl;
|
||||
private LockManager lockManager;
|
||||
private SharedPreferences sharedPreferences;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Service-Activity Binder
|
||||
@@ -95,6 +102,9 @@ public final class BackgroundPlayer extends Service {
|
||||
|
||||
private boolean shouldUpdateOnProgress;
|
||||
|
||||
private static final int NOTIFICATION_UPDATES_BEFORE_RESET = 60;
|
||||
private int timesNotificationUpdated;
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Service's LifeCycle
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
@@ -104,6 +114,7 @@ public final class BackgroundPlayer extends Service {
|
||||
if (DEBUG) Log.d(TAG, "onCreate() called");
|
||||
notificationManager = ((NotificationManager) getSystemService(NOTIFICATION_SERVICE));
|
||||
lockManager = new LockManager(this);
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
||||
|
||||
ThemeHelper.setTheme(this);
|
||||
basePlayerImpl = new BasePlayerImpl(this);
|
||||
@@ -180,6 +191,7 @@ public final class BackgroundPlayer extends Service {
|
||||
|
||||
private void resetNotification() {
|
||||
notBuilder = createNotification();
|
||||
timesNotificationUpdated = 0;
|
||||
}
|
||||
|
||||
private NotificationCompat.Builder createNotification() {
|
||||
@@ -195,12 +207,45 @@ public final class BackgroundPlayer extends Service {
|
||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||
.setCustomContentView(notRemoteView)
|
||||
.setCustomBigContentView(bigNotRemoteView);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
setLockScreenThumbnail(builder);
|
||||
}
|
||||
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
|
||||
builder.setPriority(NotificationCompat.PRIORITY_MAX);
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
private void setLockScreenThumbnail(NotificationCompat.Builder builder) {
|
||||
boolean isLockScreenThumbnailEnabled = sharedPreferences.getBoolean(
|
||||
getString(R.string.enable_lock_screen_video_thumbnail_key),
|
||||
true
|
||||
);
|
||||
|
||||
if (isLockScreenThumbnailEnabled) {
|
||||
basePlayerImpl.mediaSessionManager.setLockScreenArt(
|
||||
builder,
|
||||
getCenteredThumbnailBitmap()
|
||||
);
|
||||
} else {
|
||||
basePlayerImpl.mediaSessionManager.clearLockScreenArt(builder);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Bitmap getCenteredThumbnailBitmap() {
|
||||
int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
|
||||
int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
|
||||
|
||||
return BitmapUtils.centerCrop(
|
||||
basePlayerImpl.getThumbnail(),
|
||||
screenWidth,
|
||||
screenHeight);
|
||||
}
|
||||
|
||||
private void setupNotification(RemoteViews remoteViews) {
|
||||
if (basePlayerImpl == null) return;
|
||||
|
||||
@@ -248,10 +293,13 @@ public final class BackgroundPlayer extends Service {
|
||||
//if (DEBUG) Log.d(TAG, "updateNotification() called with: drawableId = [" + drawableId + "]");
|
||||
if (notBuilder == null) return;
|
||||
if (drawableId != -1) {
|
||||
if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
||||
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
||||
if (notRemoteView != null)
|
||||
notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
||||
if (bigNotRemoteView != null)
|
||||
bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
||||
}
|
||||
notificationManager.notify(NOTIFICATION_ID, notBuilder.build());
|
||||
timesNotificationUpdated++;
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
@@ -275,7 +323,8 @@ public final class BackgroundPlayer extends Service {
|
||||
|
||||
protected class BasePlayerImpl extends BasePlayer {
|
||||
|
||||
@NonNull final private AudioPlaybackResolver resolver;
|
||||
@NonNull
|
||||
final private AudioPlaybackResolver resolver;
|
||||
private int cachedDuration;
|
||||
private String cachedDurationString;
|
||||
|
||||
@@ -294,8 +343,10 @@ public final class BackgroundPlayer extends Service {
|
||||
super.handleIntent(intent);
|
||||
|
||||
resetNotification();
|
||||
if (bigNotRemoteView != null) bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
|
||||
if (notRemoteView != null) notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
|
||||
if (bigNotRemoteView != null)
|
||||
bigNotRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
|
||||
if (notRemoteView != null)
|
||||
notRemoteView.setProgressBar(R.id.notificationProgressBar, 100, 0, false);
|
||||
startForeground(NOTIFICATION_ID, notBuilder.build());
|
||||
}
|
||||
|
||||
@@ -330,6 +381,7 @@ public final class BackgroundPlayer extends Service {
|
||||
updateNotificationThumbnail();
|
||||
updateNotification(-1);
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// States Implementation
|
||||
//////////////////////////////////////////////////////////////////////////*/
|
||||
@@ -351,10 +403,15 @@ public final class BackgroundPlayer extends Service {
|
||||
updateProgress(currentProgress, duration, bufferPercent);
|
||||
|
||||
if (!shouldUpdateOnProgress) return;
|
||||
resetNotification();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) updateNotificationThumbnail();
|
||||
if (timesNotificationUpdated > NOTIFICATION_UPDATES_BEFORE_RESET) {
|
||||
resetNotification();
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /*Oreo*/) {
|
||||
updateNotificationThumbnail();
|
||||
}
|
||||
}
|
||||
if (bigNotRemoteView != null) {
|
||||
if(cachedDuration != duration) {
|
||||
if (cachedDuration != duration) {
|
||||
cachedDuration = duration;
|
||||
cachedDurationString = getTimeString(duration);
|
||||
}
|
||||
@@ -382,8 +439,10 @@ public final class BackgroundPlayer extends Service {
|
||||
@Override
|
||||
public void destroy() {
|
||||
super.destroy();
|
||||
if (notRemoteView != null) notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
|
||||
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
|
||||
if (notRemoteView != null)
|
||||
notRemoteView.setImageViewBitmap(R.id.notificationCover, null);
|
||||
if (bigNotRemoteView != null)
|
||||
bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, null);
|
||||
}
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
|
@@ -2,12 +2,19 @@ package org.schabi.newpipe.player.helper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.media.MediaMetadata;
|
||||
import android.os.Build;
|
||||
import android.support.v4.media.MediaMetadataCompat;
|
||||
import android.support.v4.media.session.MediaSessionCompat;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.media.session.MediaButtonReceiver;
|
||||
import androidx.media.app.NotificationCompat.MediaStyle;
|
||||
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
|
||||
@@ -19,8 +26,10 @@ import org.schabi.newpipe.player.mediasession.PlayQueuePlaybackController;
|
||||
public class MediaSessionManager {
|
||||
private static final String TAG = "MediaSessionManager";
|
||||
|
||||
@NonNull private final MediaSessionCompat mediaSession;
|
||||
@NonNull private final MediaSessionConnector sessionConnector;
|
||||
@NonNull
|
||||
private final MediaSessionCompat mediaSession;
|
||||
@NonNull
|
||||
private final MediaSessionConnector sessionConnector;
|
||||
|
||||
public MediaSessionManager(@NonNull final Context context,
|
||||
@NonNull final Player player,
|
||||
@@ -40,13 +49,45 @@ public class MediaSessionManager {
|
||||
return MediaButtonReceiver.handleIntent(mediaSession, intent);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public void setLockScreenArt(NotificationCompat.Builder builder, @Nullable Bitmap thumbnailBitmap) {
|
||||
if (thumbnailBitmap == null || !mediaSession.isActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mediaSession.setMetadata(
|
||||
new MediaMetadataCompat.Builder()
|
||||
.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, thumbnailBitmap)
|
||||
.build()
|
||||
);
|
||||
|
||||
MediaStyle mediaStyle = new MediaStyle()
|
||||
.setMediaSession(mediaSession.getSessionToken());
|
||||
|
||||
builder.setStyle(mediaStyle);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
public void clearLockScreenArt(NotificationCompat.Builder builder) {
|
||||
mediaSession.setMetadata(
|
||||
new MediaMetadataCompat.Builder()
|
||||
.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, null)
|
||||
.build()
|
||||
);
|
||||
|
||||
MediaStyle mediaStyle = new MediaStyle()
|
||||
.setMediaSession(mediaSession.getSessionToken());
|
||||
|
||||
builder.setStyle(mediaStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Should be called on player destruction to prevent leakage.
|
||||
* */
|
||||
*/
|
||||
public void dispose() {
|
||||
this.sessionConnector.setPlayer(null);
|
||||
this.sessionConnector.setQueueNavigator(null);
|
||||
this.mediaSession.setActive(false);
|
||||
this.mediaSession.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -319,6 +319,7 @@ public class MediaSourceManager {
|
||||
|
||||
private Observable<Long> getEdgeIntervalSignal() {
|
||||
return Observable.interval(progressUpdateIntervalMillis, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.filter(ignored ->
|
||||
playbackListener.isApproachingPlaybackEdge(playbackNearEndGapMillis));
|
||||
}
|
||||
|
@@ -89,6 +89,13 @@ public class PeertubeInstanceListFragment extends Fragment {
|
||||
public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(rootView, savedInstanceState);
|
||||
|
||||
initViews(rootView);
|
||||
}
|
||||
|
||||
private void initViews(@NonNull View rootView) {
|
||||
TextView instanceHelpTV = rootView.findViewById(R.id.instanceHelpTV);
|
||||
instanceHelpTV.setText(getString(R.string.peertube_instance_url_help, getString(R.string.peertube_instance_list_url)));
|
||||
|
||||
initButton(rootView);
|
||||
|
||||
RecyclerView listInstances = rootView.findViewById(R.id.instances);
|
||||
|
43
app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
Normal file
43
app/src/main/java/org/schabi/newpipe/util/BitmapUtils.java
Normal file
@@ -0,0 +1,43 @@
|
||||
package org.schabi.newpipe.util;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public class BitmapUtils {
|
||||
|
||||
@Nullable
|
||||
public static Bitmap centerCrop(Bitmap inputBitmap, int newWidth, int newHeight) {
|
||||
if (inputBitmap == null || inputBitmap.isRecycled()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
float sourceWidth = inputBitmap.getWidth();
|
||||
float sourceHeight = inputBitmap.getHeight();
|
||||
|
||||
float xScale = newWidth / sourceWidth;
|
||||
float yScale = newHeight / sourceHeight;
|
||||
|
||||
float newXScale;
|
||||
float newYScale;
|
||||
|
||||
if (yScale > xScale) {
|
||||
newXScale = xScale / yScale;
|
||||
newYScale = 1.0f;
|
||||
} else {
|
||||
newXScale = 1.0f;
|
||||
newYScale = yScale / xScale;
|
||||
}
|
||||
|
||||
float scaledWidth = newXScale * sourceWidth;
|
||||
float scaledHeight = newYScale * sourceHeight;
|
||||
|
||||
int left = (int) ((sourceWidth - scaledWidth) / 2);
|
||||
int top = (int) ((sourceHeight - scaledHeight) / 2);
|
||||
int width = (int) scaledWidth;
|
||||
int height = (int) scaledHeight;
|
||||
|
||||
return Bitmap.createBitmap(inputBitmap, left, top, width, height);
|
||||
}
|
||||
|
||||
}
|
@@ -140,7 +140,15 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
||||
if (stream instanceof SubtitlesStream) {
|
||||
formatNameView.setText(((SubtitlesStream) stream).getLanguageTag());
|
||||
} else {
|
||||
formatNameView.setText(stream.getFormat().getName());
|
||||
switch (stream.getFormat()) {
|
||||
case WEBMA_OPUS:
|
||||
// noinspection AndroidLintSetTextI18n
|
||||
formatNameView.setText("opus");
|
||||
break;
|
||||
default:
|
||||
formatNameView.setText(stream.getFormat().getName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
qualityView.setText(qualityString);
|
||||
|
@@ -0,0 +1,128 @@
|
||||
package org.schabi.newpipe.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import com.google.android.material.tabs.TabLayout.Tab;
|
||||
|
||||
/**
|
||||
* A TabLayout that is scrollable when tabs exceed its width.
|
||||
* Hides when there are less than 2 tabs.
|
||||
*/
|
||||
public class ScrollableTabLayout extends TabLayout {
|
||||
private static final String TAG = ScrollableTabLayout.class.getSimpleName();
|
||||
|
||||
private int layoutWidth = 0;
|
||||
private int prevVisibility = View.GONE;
|
||||
|
||||
public ScrollableTabLayout(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public ScrollableTabLayout(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public ScrollableTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||
super.onLayout(changed, l, t, r, b);
|
||||
|
||||
remeasureTabs();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||
super.onSizeChanged(w, h, oldw, oldh);
|
||||
|
||||
layoutWidth = w;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTab(@NonNull Tab tab, int position, boolean setSelected) {
|
||||
super.addTab(tab, position, setSelected);
|
||||
|
||||
hasMultipleTabs();
|
||||
|
||||
// Adding a tab won't decrease total tabs' width so tabMode won't have to change to FIXED
|
||||
if (getTabMode() != MODE_SCROLLABLE) {
|
||||
remeasureTabs();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeTabAt(int position) {
|
||||
super.removeTabAt(position);
|
||||
|
||||
hasMultipleTabs();
|
||||
|
||||
// Removing a tab won't increase total tabs' width so tabMode won't have to change to SCROLLABLE
|
||||
if (getTabMode() != MODE_FIXED) {
|
||||
remeasureTabs();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onVisibilityChanged(View changedView, int visibility) {
|
||||
super.onVisibilityChanged(changedView, visibility);
|
||||
|
||||
// Recheck content width in case some tabs have been added or removed while ScrollableTabLayout was invisible
|
||||
// We don't have to check if it was GONE because then requestLayout() will be called
|
||||
if (changedView == this) {
|
||||
if (prevVisibility == View.INVISIBLE) {
|
||||
remeasureTabs();
|
||||
}
|
||||
prevVisibility = visibility;
|
||||
}
|
||||
}
|
||||
|
||||
private void setMode(int mode) {
|
||||
if (mode == getTabMode()) return;
|
||||
|
||||
setTabMode(mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make ScrollableTabLayout not visible if there are less than two tabs
|
||||
*/
|
||||
private void hasMultipleTabs() {
|
||||
if (getTabCount() > 1) {
|
||||
setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate minimal width required by tabs and set tabMode accordingly
|
||||
*/
|
||||
private void remeasureTabs() {
|
||||
if (prevVisibility != View.VISIBLE) return;
|
||||
if (layoutWidth == 0) return;
|
||||
|
||||
final int count = getTabCount();
|
||||
int contentWidth = 0;
|
||||
for (int i = 0; i < count; i++) {
|
||||
View child = getTabAt(i).view;
|
||||
if (child.getVisibility() == View.VISIBLE) {
|
||||
// Use tab's minimum requested width should actual content be too small
|
||||
contentWidth += Math.max(child.getMinimumWidth(), child.getMeasuredWidth());
|
||||
}
|
||||
}
|
||||
|
||||
if (contentWidth > layoutWidth) {
|
||||
setMode(TabLayout.MODE_SCROLLABLE);
|
||||
} else {
|
||||
setMode(TabLayout.MODE_FIXED);
|
||||
}
|
||||
}
|
||||
}
|
@@ -5,6 +5,7 @@ import android.app.Activity;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
@@ -35,6 +36,8 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.RecyclerView.Adapter;
|
||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import org.schabi.newpipe.BuildConfig;
|
||||
import org.schabi.newpipe.R;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
@@ -46,6 +49,7 @@ import java.io.File;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
import us.shandian.giga.get.DownloadMission;
|
||||
import us.shandian.giga.get.FinishedMission;
|
||||
@@ -104,8 +108,12 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
|
||||
private MenuItem mPauseButton;
|
||||
private View mEmptyMessage;
|
||||
private RecoverHelper mRecover;
|
||||
private View mView;
|
||||
private ArrayList<Mission> mHidden;
|
||||
private Snackbar mSnackbar;
|
||||
|
||||
private final Runnable rUpdater = this::updater;
|
||||
private final Runnable rDelete = this::deleteFinishedDownloads;
|
||||
|
||||
public MissionAdapter(Context context, @NonNull DownloadManager downloadManager, View emptyMessage, View root) {
|
||||
mContext = context;
|
||||
@@ -122,6 +130,10 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
|
||||
|
||||
mDeleter = new Deleter(root, mContext, this, mDownloadManager, mIterator, mHandler);
|
||||
|
||||
mView = root;
|
||||
|
||||
mHidden = new ArrayList<>();
|
||||
|
||||
checkEmptyMessageVisibility();
|
||||
onResume();
|
||||
}
|
||||
@@ -557,9 +569,50 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
|
||||
);
|
||||
}
|
||||
|
||||
public void clearFinishedDownloads() {
|
||||
mDownloadManager.forgetFinishedDownloads();
|
||||
applyChanges();
|
||||
public void clearFinishedDownloads(boolean delete) {
|
||||
if (delete && mIterator.hasFinishedMissions() && mHidden.isEmpty()) {
|
||||
for (int i = 0; i < mIterator.getOldListSize(); i++) {
|
||||
FinishedMission mission = mIterator.getItem(i).mission instanceof FinishedMission ? (FinishedMission) mIterator.getItem(i).mission : null;
|
||||
if (mission != null) {
|
||||
mIterator.hide(mission);
|
||||
mHidden.add(mission);
|
||||
}
|
||||
}
|
||||
applyChanges();
|
||||
|
||||
String msg = String.format(mContext.getString(R.string.deleted_downloads), mHidden.size());
|
||||
mSnackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE);
|
||||
mSnackbar.setAction(R.string.undo, s -> {
|
||||
Iterator<Mission> i = mHidden.iterator();
|
||||
while (i.hasNext()) {
|
||||
mIterator.unHide(i.next());
|
||||
i.remove();
|
||||
}
|
||||
applyChanges();
|
||||
mHandler.removeCallbacks(rDelete);
|
||||
});
|
||||
mSnackbar.setActionTextColor(Color.YELLOW);
|
||||
mSnackbar.show();
|
||||
|
||||
mHandler.postDelayed(rDelete, 5000);
|
||||
} else if (!delete) {
|
||||
mDownloadManager.forgetFinishedDownloads();
|
||||
applyChanges();
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteFinishedDownloads() {
|
||||
if (mSnackbar != null) mSnackbar.dismiss();
|
||||
|
||||
Iterator<Mission> i = mHidden.iterator();
|
||||
while (i.hasNext()) {
|
||||
Mission mission = i.next();
|
||||
if (mission != null) {
|
||||
mDownloadManager.deleteMission(mission);
|
||||
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
|
||||
}
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean handlePopupItem(@NonNull ViewHolderItem h, @NonNull MenuItem option) {
|
||||
|
@@ -17,6 +17,7 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -189,10 +190,12 @@ public class MissionsFragment extends Fragment {
|
||||
return true;
|
||||
case R.id.clear_list:
|
||||
AlertDialog.Builder prompt = new AlertDialog.Builder(mContext);
|
||||
prompt.setTitle(R.string.clear_finished_download);
|
||||
prompt.setTitle(R.string.clear_download_history);
|
||||
prompt.setMessage(R.string.confirm_prompt);
|
||||
prompt.setPositiveButton(android.R.string.ok, (dialog, which) -> mAdapter.clearFinishedDownloads());
|
||||
prompt.setNegativeButton(R.string.cancel, null);
|
||||
// Intentionally misusing button's purpose in order to achieve good order
|
||||
prompt.setNegativeButton(R.string.clear_download_history, (dialog, which) -> mAdapter.clearFinishedDownloads(false));
|
||||
prompt.setPositiveButton(R.string.delete_downloaded_files, (dialog, which) -> mAdapter.clearFinishedDownloads(true));
|
||||
prompt.setNeutralButton(R.string.cancel, null);
|
||||
prompt.create().show();
|
||||
return true;
|
||||
case R.id.start_downloads:
|
||||
|
@@ -6,12 +6,13 @@
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
<org.schabi.newpipe.views.ScrollableTabLayout
|
||||
android:id="@+id/main_tab_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="?attr/colorPrimary"
|
||||
app:tabMinWidth="60dp"
|
||||
app:tabGravity="fill"/>
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
|
@@ -24,7 +24,7 @@
|
||||
<item android:id="@+id/clear_list"
|
||||
android:visible="false"
|
||||
android:icon="?attr/ic_delete"
|
||||
android:title="@string/clear_finished_download"
|
||||
android:title="@string/clear_download_history"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item android:id="@+id/action_settings"
|
||||
|
@@ -69,8 +69,8 @@
|
||||
<string name="enable_watch_history_title">مراقبة السجل</string>
|
||||
<string name="settings_category_history_title">التاريخ و ذاكرة التخزين المؤقت</string>
|
||||
<string name="content">محتوى</string>
|
||||
<string name="downloads">التحميلات</string>
|
||||
<string name="downloads_title">التحميلات</string>
|
||||
<string name="downloads">الملفات المحملة</string>
|
||||
<string name="downloads_title">الملفات المحملة</string>
|
||||
<string name="all">الجميع</string>
|
||||
<string name="channel">القناة</string>
|
||||
<string name="video">الفيديو</string>
|
||||
@@ -113,11 +113,11 @@
|
||||
<string name="show_age_restricted_content_title">محتوى مقيد بحسب العمر</string>
|
||||
<string name="video_is_age_restricted">"إظهار الفيديو المقيد بحسب العمر. يمكن السماح باستخدام هذه المواد من \"الإعدادات\"."</string>
|
||||
<string name="duration_live">بث مباشر</string>
|
||||
<string name="error_report_title">تقرير خطأ</string>
|
||||
<string name="error_report_title">تقرير عن مشكلة</string>
|
||||
<string name="playlist">قائمة التشغيل</string>
|
||||
<string name="yes">نعم</string>
|
||||
<string name="later">لاحقاً</string>
|
||||
<string name="disabled">تعطيل</string>
|
||||
<string name="disabled">متوقف</string>
|
||||
<string name="filter">فلتر</string>
|
||||
<string name="refresh">تحديث</string>
|
||||
<string name="clear">تنظيف</string>
|
||||
@@ -246,12 +246,12 @@
|
||||
<item quantity="other">%s شاهدو</item>
|
||||
</plurals>
|
||||
<plurals name="videos">
|
||||
<item quantity="zero">فيديو%s video</item>
|
||||
<item quantity="one">%s videosفيديوهات</item>
|
||||
<item quantity="two">%s videosفيديوهات</item>
|
||||
<item quantity="few">%s videosفيديوهات</item>
|
||||
<item quantity="many">%s videosفيديوهات</item>
|
||||
<item quantity="other">%s videosفيديوهات</item>
|
||||
<item quantity="zero">فيديوهات</item>
|
||||
<item quantity="one">فيديوهات</item>
|
||||
<item quantity="two">فيديوهات</item>
|
||||
<item quantity="few">فيديوهات</item>
|
||||
<item quantity="many">فيديوهات</item>
|
||||
<item quantity="other">فيديوهات</item>
|
||||
</plurals>
|
||||
<string name="recaptcha_request_toast">طلب اختبار الكابتشا مطلوب</string>
|
||||
<string name="copyright" formatted="true">© %1$sبواسطة%2$sتحت%3$s</string>
|
||||
@@ -425,8 +425,8 @@
|
||||
<string name="app_update_notification_channel_name">تتبيه تحديث التطبيق</string>
|
||||
<string name="volume_gesture_control_title">إيماءة التحكم بالصوت</string>
|
||||
<string name="events">الأحداث</string>
|
||||
<string name="app_update_notification_channel_description">"تنبيه عند تواجد إصدار جديد newpipe "</string>
|
||||
<string name="download_to_sdcard_error_title">وحدة التخزين الخارجية غير متاحة</string>
|
||||
<string name="app_update_notification_channel_description">إخطارات لنسخة NewPipe الجديدة</string>
|
||||
<string name="download_to_sdcard_error_title">وحدة التخزين الخارجية غير متوفرة</string>
|
||||
<string name="download_to_sdcard_error_message">"التنزيل على بطاقة SD الخارجية غير ممكن. إعادة تعيين موقع مجلد التحميل؟"</string>
|
||||
<string name="saved_tabs_invalid_json">باستخدام علامات التبويب الافتراضية ، خطأ أثناء قراءة علامات التبويب المحفوظة</string>
|
||||
<string name="restore_defaults">استعادة الضبط الافتراضي</string>
|
||||
@@ -524,4 +524,35 @@
|
||||
<string name="no_one_watching">لاتوجد مشاهدة</string>
|
||||
<string name="no_one_listening">لا أحد يستمع</string>
|
||||
<string name="localization_changes_requires_app_restart">ستتغير اللغة بمجرد إعادة تشغيل التطبيق.</string>
|
||||
<plurals name="watching">
|
||||
<item quantity="zero">مشاهد</item>
|
||||
<item quantity="one">مشاهدة</item>
|
||||
<item quantity="two">مشاهدة</item>
|
||||
<item quantity="few">مشاهدات</item>
|
||||
<item quantity="many">مشاهدات</item>
|
||||
<item quantity="other">مشاهدات</item>
|
||||
</plurals>
|
||||
<plurals name="listening">
|
||||
<item quantity="zero">مستمع</item>
|
||||
<item quantity="one">مستمع</item>
|
||||
<item quantity="two">مستمعين</item>
|
||||
<item quantity="few">مستمعين</item>
|
||||
<item quantity="many">مستمعين</item>
|
||||
<item quantity="other">مستمعين</item>
|
||||
</plurals>
|
||||
<string name="seek_duration_title">تسريع إلى الأمام/-ترجيع وقت البحث</string>
|
||||
<string name="peertube_instance_url_title">مثيلات خوادم پيرتيوب</string>
|
||||
<string name="peertube_instance_url_summary">عيّن مثيلات خوادم پيرتيوب التي تُفضّلها</string>
|
||||
<string name="peertube_instance_add_title">إضافة نموذج</string>
|
||||
<string name="peertube_instance_add_help">أدخل رابط مثيل الخادم</string>
|
||||
<string name="peertube_instance_add_fail">فشل في التحقق من مثيل الخادم</string>
|
||||
<string name="peertube_instance_add_https_only">فقط عناوين https المدعومة</string>
|
||||
<string name="peertube_instance_add_exists">مثيل الخادم موجود بالفعل</string>
|
||||
<string name="local">محلي</string>
|
||||
<string name="recently_added">أضيف مؤخرا</string>
|
||||
<string name="most_liked">الأكثر إعجابا</string>
|
||||
<string name="playlist_no_uploader">تم إنشاؤه-تلقائيًا (لم يتم العثور على برنامج تحميل)</string>
|
||||
<string name="recovering">استرد</string>
|
||||
<string name="error_download_resource_gone">لا يمكن استرداد هذا التنزيل</string>
|
||||
<string name="choose_instance_prompt">اختيار مثيل خادم</string>
|
||||
</resources>
|
@@ -206,7 +206,7 @@
|
||||
<string name="caption_setting_title">Sotítulos</string>
|
||||
<string name="accept">Aceutar</string>
|
||||
<string name="restore_defaults_confirmation">¿Quies reafitar los valores\?</string>
|
||||
<string name="error_unknown_host"></string>
|
||||
<string name="error_unknown_host"/>
|
||||
<string name="error_http_unsupported_range">El sirvidor nun aceuta descargues multifilu, volvi probar con @string/msg_threads = 1</string>
|
||||
<string name="no_comments">Nun hai comentarios</string>
|
||||
<string name="settings_category_clear_data_title">Llimpieza de datos</string>
|
||||
@@ -243,4 +243,18 @@
|
||||
<string name="enable_playback_resume_title">Siguir cola reproducción</string>
|
||||
<string name="main_page_content_summary">Les llingüetes que s\'amuesen na páxina principal</string>
|
||||
<string name="downloads_storage_ask_title">Entrugar ánde baxar</string>
|
||||
</resources>
|
||||
<string name="downloads">Descargues</string>
|
||||
<string name="downloads_title">Descargues</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="one">Vídeos</item>
|
||||
<item quantity="other"></item>
|
||||
</plurals>
|
||||
<string name="player_gesture_controls_title">Control per xestos del reproductor</string>
|
||||
<string name="preferred_player_fetcher_notification_message">Cargando\'l conteníu solicitáu</string>
|
||||
<string name="privacy_policy_title">Política de Privacidá de NewPipe</string>
|
||||
<string name="volume_gesture_control_title">Control per xestos del volume</string>
|
||||
<string name="brightness_gesture_control_title">Control per xestos del brilléu</string>
|
||||
<string name="error_file_creation">El ficheru nun pue crease</string>
|
||||
<string name="error_http_no_content">El sirvidor nun unvia datos</string>
|
||||
<string name="localization_changes_requires_app_restart">La llingua va camudar namái que se reanicie l\'aplicación.</string>
|
||||
</resources>
|
@@ -6,7 +6,7 @@
|
||||
<string name="open_in_browser">在浏览器中打开</string>
|
||||
<string name="open_in_popup_mode">在悬浮窗模式下打开</string>
|
||||
<string name="did_you_mean">您是不是要找:%1$s?</string>
|
||||
<string name="no_player_found_toast">找不到串流播放器 (您可以安裝并使用VLC播放)。</string>
|
||||
<string name="no_player_found_toast">找不到串流播放器 (您可以安装 VLC 进行播放)。</string>
|
||||
<string name="controls_download_desc">下载串流文件</string>
|
||||
<string name="install">安装</string>
|
||||
<string name="cancel">取消</string>
|
||||
@@ -16,7 +16,7 @@
|
||||
<string name="settings">设置</string>
|
||||
<string name="share_dialog_title">分享给...</string>
|
||||
<string name="choose_browser">选择浏览器</string>
|
||||
<string name="download_path_title">视频下载文件夹</string>
|
||||
<string name="download_path_title">视频下载路径</string>
|
||||
<string name="download_path_summary">已下载的视频存储在这里</string>
|
||||
<string name="download_path_dialog_title">请选择下载视频的保存位置</string>
|
||||
<string name="download_path_audio_summary">已下载的音频存储在这里</string>
|
||||
@@ -39,10 +39,10 @@
|
||||
<string name="network_error">网络错误</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="one">视频</item>
|
||||
<item quantity="other"></item>
|
||||
<item quantity="other"/>
|
||||
</plurals>
|
||||
<string name="disabled">禁用</string>
|
||||
<string name="controls_background_title">背景</string>
|
||||
<string name="controls_background_title">后台播放</string>
|
||||
<string name="filter">过滤器</string>
|
||||
<string name="refresh">刷新</string>
|
||||
<string name="show_search_suggestions_title">搜索建议</string>
|
||||
@@ -157,10 +157,10 @@
|
||||
<string name="drawer_header_description">切换服务,当前选择:</string>
|
||||
<string name="no_player_found">找不到串流播放器。您想安装 VLC 吗?</string>
|
||||
<string name="screen_rotation">旋转</string>
|
||||
<string name="use_external_video_player_title">使用第三方视频播放器</string>
|
||||
<string name="use_external_audio_player_title">使用第三方视频播放器</string>
|
||||
<string name="use_external_video_player_title">使用外部视频播放器</string>
|
||||
<string name="use_external_audio_player_title">使用外部音频播放器</string>
|
||||
<string name="download_path_audio_title">音频下载文件夹</string>
|
||||
<string name="autoplay_by_calling_app_summary">从其他应用打开 NewPipe 时就播放视频</string>
|
||||
<string name="autoplay_by_calling_app_summary">从其他应用调用 NewPipe 时播放视频</string>
|
||||
<string name="default_resolution_title">默认分辨率</string>
|
||||
<string name="kore_not_found">找不到Kore。是否安装?</string>
|
||||
<string name="show_play_with_kodi_title">显示“用Kodi播放”选项</string>
|
||||
@@ -180,7 +180,7 @@
|
||||
<string name="error_report_title">错误报告</string>
|
||||
<string name="general_error">错误</string>
|
||||
<string name="could_not_load_thumbnails">无法加载所有缩略图</string>
|
||||
<string name="youtube_signature_decryption_error">无法解密视频 URL 的签名</string>
|
||||
<string name="youtube_signature_decryption_error">无法解密视频的 URL 签名</string>
|
||||
<string name="parsing_error">无法解析网址</string>
|
||||
<string name="light_parsing_error">无法完全解析网址</string>
|
||||
<string name="content_not_available">内容不可用</string>
|
||||
@@ -209,7 +209,7 @@
|
||||
\n需要此权限</string>
|
||||
<string name="reCaptcha_title">reCAPTCHA验证</string>
|
||||
<string name="recaptcha_request_toast">请求的新的CAPTCHA验证</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe悬浮窗模式</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe 悬浮窗模式</string>
|
||||
<string name="popup_playing_toast">在悬浮窗中播放</string>
|
||||
<string name="default_popup_resolution_title">默认悬浮窗分辨率</string>
|
||||
<string name="show_higher_resolutions_title">使用更高的分辨率</string>
|
||||
@@ -219,7 +219,7 @@
|
||||
<string name="popup_remember_size_pos_summary">记住最后一次使用悬浮窗的大小和位置</string>
|
||||
<string name="settings_category_popup_title">悬浮窗</string>
|
||||
<string name="popup_resizing_indicator_title">调整大小</string>
|
||||
<string name="use_external_video_player_summary">删除“某些”分辨率的音频</string>
|
||||
<string name="use_external_video_player_summary">部分分辨率的视频将没有声音</string>
|
||||
<string name="player_gesture_controls_title">播放器手势控制</string>
|
||||
<string name="player_gesture_controls_summary">使用手势控制播放器的亮度和音量</string>
|
||||
<string name="show_search_suggestions_summary">显示搜索建议</string>
|
||||
@@ -234,9 +234,9 @@
|
||||
<string name="channel_unsubscribed">取消订阅频道</string>
|
||||
<string name="subscription_change_failed">无法修改订阅</string>
|
||||
<string name="subscription_update_failed">无法更新订阅</string>
|
||||
<string name="tab_main">主页面</string>
|
||||
<string name="tab_main">主页</string>
|
||||
<string name="tab_subscriptions">订阅</string>
|
||||
<string name="fragment_whats_new">新增功能</string>
|
||||
<string name="fragment_whats_new">最新</string>
|
||||
<string name="resume_on_audio_focus_gain_title">恢复前台焦点</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">中断后继续播放(例如突然来电后)</string>
|
||||
<string name="enable_search_history_title">搜索历史记录</string>
|
||||
@@ -321,7 +321,7 @@
|
||||
<string name="could_not_import_all_files">警告:无法导入所有文件。</string>
|
||||
<string name="override_current_data">这将覆盖当前设置。</string>
|
||||
<string name="show_info">显示信息</string>
|
||||
<string name="tab_bookmarks">已收藏</string>
|
||||
<string name="tab_bookmarks">书签</string>
|
||||
<string name="delete_stream_history_prompt">确定要从观看历史记录中删除该项吗?</string>
|
||||
<string name="delete_all_history_prompt">是否确实要从历史记录中删除所有项目?</string>
|
||||
<string name="title_last_played">最后播放</string>
|
||||
@@ -483,7 +483,7 @@
|
||||
<string name="overwrite_finished_warning">命名冲突,已存在具有此名称文件</string>
|
||||
<string name="overwrite_failed">无法覆盖文件</string>
|
||||
<string name="download_already_pending">有此名称的已暂停下载</string>
|
||||
<string name="error_postprocessing_stopped">处理文件时,NewPipe 已关闭</string>
|
||||
<string name="error_postprocessing_stopped">NewPipe 在处理文件时被关闭</string>
|
||||
<string name="error_insufficient_storage">设备上没有剩余储存空间</string>
|
||||
<string name="error_progress_lost">进度丢失,文件已被删除</string>
|
||||
<string name="error_timeout">连接超时</string>
|
||||
@@ -507,12 +507,33 @@
|
||||
<string name="no_one_watching">无人在线观看</string>
|
||||
<plurals name="watching">
|
||||
<item quantity="one">%s 人在观看</item>
|
||||
<item quantity="other"></item>
|
||||
<item quantity="other"/>
|
||||
</plurals>
|
||||
<string name="no_one_listening">没人在听</string>
|
||||
<plurals name="listening">
|
||||
<item quantity="one">%s个听众</item>
|
||||
<item quantity="one">%s 人在听</item>
|
||||
<item quantity="other"/>
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">重新启动应用后,语言将更改。</string>
|
||||
<string name="peertube_instance_url_title">PeerTube 服务器</string>
|
||||
<string name="peertube_instance_url_summary">设置自己喜欢的PeerTube服务器</string>
|
||||
<string name="peertube_instance_url_help">查找最适合你的服务器%s</string>
|
||||
<string name="peertube_instance_add_title">添加服务器</string>
|
||||
<string name="peertube_instance_add_help">输入服务器网址</string>
|
||||
<string name="peertube_instance_add_fail">无法验证服务器</string>
|
||||
<string name="peertube_instance_add_https_only">仅支持 https URL</string>
|
||||
<string name="peertube_instance_add_exists">该服务器已存在</string>
|
||||
<string name="local">本地</string>
|
||||
<string name="recently_added">最近添加</string>
|
||||
<string name="most_liked">最喜欢的</string>
|
||||
<string name="playlist_no_uploader">自动生成的(未找到上传者)</string>
|
||||
<string name="recovering">正在恢复</string>
|
||||
<string name="error_download_resource_gone">无法恢复此下载</string>
|
||||
<string name="choose_instance_prompt">选择一个服务器</string>
|
||||
<string name="seek_duration_title">快进 / 快退的单位时间</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">在锁屏界面显示视频缩略图</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">在后台播放时,锁屏界面将会显示视频的缩略图</string>
|
||||
<string name="clear_download_history">清除下载历史记录</string>
|
||||
<string name="delete_downloaded_files">删除下载了的文件</string>
|
||||
<string name="deleted_downloads">已删除 %1$s 下载</string>
|
||||
</resources>
|
@@ -14,7 +14,7 @@
|
||||
<string name="did_you_mean">Meintest du: %1$s\?</string>
|
||||
<string name="share_dialog_title">Teilen mit</string>
|
||||
<string name="choose_browser">Browser auswählen</string>
|
||||
<string name="screen_rotation">Drehen des Geräts</string>
|
||||
<string name="screen_rotation">Bildschirm drehen</string>
|
||||
<string name="download_path_title">Downloadordner für Videos</string>
|
||||
<string name="download_path_summary">Heruntergeladene Videodateien werden hier gespeichert</string>
|
||||
<string name="download_path_dialog_title">Wähle den Downloadordner für Videodateien aus</string>
|
||||
@@ -79,7 +79,7 @@
|
||||
<string name="your_comment">Dein Kommentar (auf englisch):</string>
|
||||
<string name="could_not_get_stream">Konnte keinen Stream abrufen</string>
|
||||
<string name="autoplay_by_calling_app_title">Automatische Wiedergabe</string>
|
||||
<string name="autoplay_by_calling_app_summary">Wiedergabe eines Videos, wenn NewPipe von einer anderen App aufgerufen wurde</string>
|
||||
<string name="autoplay_by_calling_app_summary">Video abspielen, wenn NewPipe von einer anderen App aufgerufen wird</string>
|
||||
<string name="report_error">Einen Fehler melden</string>
|
||||
<string name="user_report">Anwenderbericht</string>
|
||||
<string name="duration_live">LIVE</string>
|
||||
@@ -123,7 +123,8 @@
|
||||
<string name="default_video_format_title">Bevorzugtes Videoformat</string>
|
||||
<string name="popup_playing_toast">Im Pop-up Modus abspielen</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
|
||||
\nÖffnen im Pop-up-Modus erforderlich</string>
|
||||
<string name="default_popup_resolution_title">Standardauflösung des Pop-ups</string>
|
||||
<string name="show_higher_resolutions_title">Höhere Auflösungen anzeigen</string>
|
||||
<string name="show_higher_resolutions_summary">Nur manche Geräte unterstützen das Abspielen von 2K-/4K-Videos</string>
|
||||
@@ -202,8 +203,8 @@
|
||||
</plurals>
|
||||
<string name="no_videos">Keine Videos</string>
|
||||
<plurals name="videos">
|
||||
<item quantity="one">Video</item>
|
||||
<item quantity="other">Videos</item>
|
||||
<item quantity="one">%s Video</item>
|
||||
<item quantity="other">%s Videos</item>
|
||||
</plurals>
|
||||
<string name="charset_most_special_characters">Die meisten Sonderzeichen</string>
|
||||
<string name="item_deleted">Element gelöscht</string>
|
||||
@@ -278,7 +279,7 @@
|
||||
<string name="override_current_data">Dies wird deine aktuellen Einstellungen überschreiben.</string>
|
||||
<string name="show_info">Infos anzeigen</string>
|
||||
<string name="tab_bookmarks">Lesezeichen für Wiedergabelisten</string>
|
||||
<string name="controls_add_to_playlist_title">Hinzufügen zu</string>
|
||||
<string name="controls_add_to_playlist_title">Hinzufügen</string>
|
||||
<string name="detail_drag_description">Zum Neuordnen ziehen</string>
|
||||
<string name="create">Erstellen</string>
|
||||
<string name="delete_one">Einen löschen</string>
|
||||
@@ -395,7 +396,7 @@
|
||||
<string name="minimize_on_exit_none_description">Keine</string>
|
||||
<string name="minimize_on_exit_background_description">Zum Hintergrund-Player minimieren</string>
|
||||
<string name="minimize_on_exit_popup_description">Zum Popup-Player minimieren</string>
|
||||
<string name="skip_silence_checkbox">Vorspulen während der Stille</string>
|
||||
<string name="skip_silence_checkbox">Vorspulen bei Stille</string>
|
||||
<string name="playback_step">Schritt</string>
|
||||
<string name="playback_reset">Zurücksetzen</string>
|
||||
<string name="channels">Kanäle</string>
|
||||
@@ -488,7 +489,7 @@
|
||||
<string name="error_postprocessing_stopped">NewPipe wurde während der Verarbeitung der Datei geschlossen</string>
|
||||
<string name="error_insufficient_storage">Kein Speicherplatz mehr auf dem Gerät</string>
|
||||
<string name="error_progress_lost">Vorgang abgebrochen, da die Datei gelöscht wurde</string>
|
||||
<string name="confirm_prompt">Bist Du sicher\?</string>
|
||||
<string name="confirm_prompt">Möchtest du deinen Downloadverlauf oder alle heruntergeladenen Dateien löschen\?</string>
|
||||
<string name="enable_queue_limit">Downloadwarteschlange begrenzen</string>
|
||||
<string name="enable_queue_limit_desc">Ein Download wird zur gleichen Zeit ausgeführt</string>
|
||||
<string name="start_downloads">Downloads starten</string>
|
||||
@@ -517,4 +518,25 @@
|
||||
<item quantity="other">%s Zuhörer</item>
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">Die Sprache ändert sich, sobald die App neu gestartet wird.</string>
|
||||
<string name="peertube_instance_url_title">PeerTube-Instanzen</string>
|
||||
<string name="peertube_instance_url_help">Finde auf %s die Instanzen, die am besten zu dir passen</string>
|
||||
<string name="peertube_instance_add_title">Instanz hinzufügen</string>
|
||||
<string name="peertube_instance_add_help">URL der Instanz eingeben</string>
|
||||
<string name="peertube_instance_add_fail">Validierung der Instanz fehlgeschlagen</string>
|
||||
<string name="peertube_instance_add_exists">Instanz existiert bereits</string>
|
||||
<string name="local">Lokal</string>
|
||||
<string name="recently_added">Kürzlich hinzugefügt</string>
|
||||
<string name="playlist_no_uploader">Auto-generiert (kein Uploader gefunden)</string>
|
||||
<string name="choose_instance_prompt">Wähle eine Instanz</string>
|
||||
<string name="peertube_instance_url_summary">Bevorzugte Peertube-Instanzen auswählen</string>
|
||||
<string name="peertube_instance_add_https_only">Es werden nur HTTPS-Adressen unterstützt</string>
|
||||
<string name="seek_duration_title">Dauer der Suche bei schnellem Vor-/Zurückspulen</string>
|
||||
<string name="most_liked">Am beliebtesten</string>
|
||||
<string name="recovering">Wiederherstellen</string>
|
||||
<string name="error_download_resource_gone">Dieser Download kann nicht wiederhergestellt werden</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">Video-Vorschaubild für Sperrbildschirm aktivieren</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">Bei Verwendung des Hintergrundplayers wird ein Video-Miniaturbild auf dem Sperrbildschirm angezeigt</string>
|
||||
<string name="clear_download_history">Downloadverlauf löschen</string>
|
||||
<string name="delete_downloaded_files">Heruntergeladene Dateien löschen</string>
|
||||
<string name="deleted_downloads">%1$s Downloads gelöscht</string>
|
||||
</resources>
|
@@ -206,7 +206,7 @@
|
||||
<string name="sorry_string">Λυπούμαστε, αυτό δεν έπρεπε να έχει συμβεί.</string>
|
||||
<string name="error_report_button_text">Αναφορά σφάλματος με ηλεκτρονικό ταχυδρομίο</string>
|
||||
<string name="error_snackbar_message">Λυπούμαστε, συνέβησαν κάποια σφάλματα.</string>
|
||||
<string name="info_labels">What:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού:</string>
|
||||
<string name="info_labels">Τι:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού συστήματος:</string>
|
||||
<string name="user_report">Αναφορά χρήστη</string>
|
||||
<string name="search_no_results">Κανένα αποτέλεσμα</string>
|
||||
<string name="empty_subscription_feed_subtitle">Δεν υπάρχει τίποτα εδώ</string>
|
||||
@@ -516,4 +516,12 @@
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">Η γλώσσα θα αλλάξει μόλις θα επανεκκινηθεί η εφαρμογή.</string>
|
||||
<string name="default_kiosk_page_summary">Προεπιλεγμένο περίπτερο</string>
|
||||
<string name="peertube_instance_add_https_only">Υποστηρίζονται μόνο διευθύνσεις URL HTTPS</string>
|
||||
<string name="local">Τοπικό</string>
|
||||
<string name="recently_added">Προστέθηκε πρόσφατα</string>
|
||||
<string name="playlist_no_uploader">Δημιουργήθηκε αυτόματα (δεν βρέθηκε χρήστης μεταφόρτωσης)</string>
|
||||
<string name="recovering">Ανάκτηση</string>
|
||||
<string name="error_download_resource_gone">Δεν είναι δυνατή η ανάκτηση αυτής της λήψης</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">Ενεργοποίηση μικρογραφίας βίντεο στην οθόνη κλειδώματος</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">Όταν χρησιμοποιείται αναπαραγωγή παρασκηνίου μια μικρογραφία βίντεο θα εμφανίζεται στην οθόνη κλειδώματος</string>
|
||||
</resources>
|
@@ -15,9 +15,9 @@
|
||||
<string name="screen_rotation">turno</string>
|
||||
<string name="use_external_video_player_title">Uzi eksteran filmetoludilon</string>
|
||||
<string name="use_external_audio_player_title">Uzi eksteran sonludilon</string>
|
||||
<string name="default_resolution_title">Defaŭlta distingivo</string>
|
||||
<string name="play_with_kodi_title">Legi per Kodi</string>
|
||||
<string name="show_play_with_kodi_title">Montri \"Legi per Kodi\"-opcion</string>
|
||||
<string name="default_resolution_title">Defaŭlta rezolucio</string>
|
||||
<string name="play_with_kodi_title">Ludi per Kodi</string>
|
||||
<string name="show_play_with_kodi_title">Montri \"Ludi per Kodi\"-opcion</string>
|
||||
<string name="play_audio">Sono</string>
|
||||
<string name="default_audio_format_title">Defaŭlta sondosierformo</string>
|
||||
<string name="theme_title">Etoso</string>
|
||||
@@ -30,8 +30,8 @@
|
||||
<string name="settings_category_video_audio_title">Filmeto kaj sono</string>
|
||||
<string name="settings_category_appearance_title">Apero</string>
|
||||
<string name="settings_category_other_title">Alia</string>
|
||||
<string name="background_player_playing_toast">Ludado fone</string>
|
||||
<string name="play_btn_text">Legi</string>
|
||||
<string name="background_player_playing_toast">Ludanta fone</string>
|
||||
<string name="play_btn_text">Ludi</string>
|
||||
<string name="general_error">Eraro</string>
|
||||
<string name="network_error">Reteraro</string>
|
||||
<string name="content_not_available">Enhavo malhavebla</string>
|
||||
@@ -41,12 +41,12 @@
|
||||
<string name="no_player_found">Neniu elsendlflua ludilo trovita. Ĉu vi volas instali la aplikaĵon VLC\?</string>
|
||||
<string name="kore_not_found">La aplikaĵo Kore ne estas trovita. Ĉu instali ĝin?</string>
|
||||
<string name="show_next_and_similar_title">Montri la sekvan filmeton kaj similajn filmetojn</string>
|
||||
<string name="could_not_load_thumbnails">Ĉiuj miniaturoj ne ŝargeblas</string>
|
||||
<string name="could_not_load_thumbnails">Ĉiuj bildetoj ne ŝargeblas</string>
|
||||
<string name="youtube_signature_decryption_error">La subskribo de la ligilo de la filmeto ne malĉifreblas</string>
|
||||
<string name="parsing_error">La retejo ne analizeblas</string>
|
||||
<string name="list_thumbnail_view_description">Miniaturo de la antaŭrigardo de la filmeto</string>
|
||||
<string name="detail_thumbnail_view_description">Legi filmeton, daŭro:</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Miniaturo de la bildo de la alŝutinto</string>
|
||||
<string name="list_thumbnail_view_description">Bildeto de la antaŭrigardo de la filmeto</string>
|
||||
<string name="detail_thumbnail_view_description">Ludi filmeton, daŭro:</string>
|
||||
<string name="detail_uploader_thumbnail_view_description">Bildeto de la alŝutinto</string>
|
||||
<string name="err_dir_create">La elŝutujo \'%1$s\' ne kreeblas</string>
|
||||
<string name="info_dir_created">Elŝutujo \'%1$s\' kreita</string>
|
||||
<string name="download_path_title">Elŝutujo por filmetoj</string>
|
||||
@@ -61,7 +61,7 @@
|
||||
<string name="error_report_button_text">Signali eraron per retpoŝto</string>
|
||||
<string name="error_snackbar_action">SIGNALI</string>
|
||||
<string name="what_device_headline">Informoj:</string>
|
||||
<string name="your_comment">Via komento (en la angla):</string>
|
||||
<string name="your_comment">Vian komenton (angle):</string>
|
||||
<string name="error_details_headline">Detaloj:</string>
|
||||
<string name="report_error">Signali eraron</string>
|
||||
<string name="video">Filmeto</string>
|
||||
@@ -69,9 +69,9 @@
|
||||
<string name="main_bg_subtitle">Premu serĉo por komenci</string>
|
||||
<string name="no_player_found_toast">Neniu elsendlflua ludilo trovita (instalu VLC por ludi ĝin).</string>
|
||||
<string name="open_in_popup_mode">Malfermi en ŝprucfenestron modon</string>
|
||||
<string name="use_external_video_player_summary">Forigas aŭdion ĉe KELKAJ distingivoj</string>
|
||||
<string name="use_external_video_player_summary">Forigas aŭdon ĉe KELKAJ rezolucioj</string>
|
||||
<string name="popup_mode_share_menu_title">NewPipe ŝprucfenestron modon</string>
|
||||
<string name="subscribe_button_title">Abonu</string>
|
||||
<string name="subscribe_button_title">Aboni</string>
|
||||
<string name="subscribed_button_title">Abonita</string>
|
||||
<string name="channel_unsubscribed">Kanalo malabonita</string>
|
||||
<string name="subscription_change_failed">Ne povis ŝanĝi abonon</string>
|
||||
@@ -80,16 +80,16 @@
|
||||
<string name="show_info">Montri informojn</string>
|
||||
<string name="tab_main">Ĉefa</string>
|
||||
<string name="tab_subscriptions">Abonoj</string>
|
||||
<string name="tab_bookmarks">Legosigno</string>
|
||||
<string name="tab_bookmarks">Konservitaj ludlistoj</string>
|
||||
<string name="fragment_whats_new">Kio novas</string>
|
||||
<string name="controls_background_title">Fono</string>
|
||||
<string name="controls_popup_title">Ŝprucfenestro</string>
|
||||
<string name="controls_add_to_playlist_title">Aldonu al</string>
|
||||
<string name="autoplay_by_calling_app_title">Aŭtomata play</string>
|
||||
<string name="autoplay_by_calling_app_summary">Legas filmeton kiam NewPipe vokas de alia programo</string>
|
||||
<string name="default_popup_resolution_title">Defaŭlta distingivo de la ŝprucfenestro</string>
|
||||
<string name="show_higher_resolutions_title">Montri pli altajn distingivojn</string>
|
||||
<string name="show_higher_resolutions_summary">Nur kelkaj aparatoj subtenas legante 2K / 4K filmetojn</string>
|
||||
<string name="autoplay_by_calling_app_summary">Ludas filmeton kiam NewPipe vokas el alia programo</string>
|
||||
<string name="default_popup_resolution_title">Defaŭlta rezolucio de la ŝprucfenestro</string>
|
||||
<string name="show_higher_resolutions_title">Montri pli altajn rezoluciojn</string>
|
||||
<string name="show_higher_resolutions_summary">Nur kelkaj aparatoj subtenas ludi 2K / 4K filmetojn</string>
|
||||
<string name="default_video_format_title">Defaŭlta fomato de filmeto</string>
|
||||
<string name="black_theme_title">Nigra</string>
|
||||
<string name="popup_remember_size_pos_title">Memoru ŝprucfenestron kaj pozicion</string>
|
||||
@@ -122,7 +122,7 @@
|
||||
<string name="later">Poste</string>
|
||||
<string name="msg_popup_permission">Tiu permeso estas necesa por
|
||||
\nmalfermi en ŝprucfenestro modo</string>
|
||||
<string name="popup_playing_toast">Leganta en ŝprucfenestro modo</string>
|
||||
<string name="popup_playing_toast">Ludanta en ŝprucfenestro modo</string>
|
||||
<string name="disabled">Malaktiva</string>
|
||||
<string name="filter">Filtri</string>
|
||||
<string name="refresh">Aktualigi</string>
|
||||
@@ -133,13 +133,13 @@
|
||||
<string name="player_gesture_controls_summary">Uzu gestojn por kontroli la brilon kaj volumenon de la ludilo</string>
|
||||
<string name="show_search_suggestions_title">Serĉi sugestojn</string>
|
||||
<string name="show_search_suggestions_summary">Montri sugestojn kiam serĉanto</string>
|
||||
<string name="best_resolution">Plej bona distingivo</string>
|
||||
<string name="best_resolution">Plej bona rezolucio</string>
|
||||
<string name="app_description">Libera malpeza torentado ĉe Android.</string>
|
||||
<string name="settings_category_downloads_title">Elŝuti</string>
|
||||
<string name="charset_letters_and_digits">Leteroj kaj ciferoj</string>
|
||||
<string name="charset_most_special_characters">Plej specialaj karakteroj</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Rekomencu en fokusa gajno</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Daŭrigi la legon post la interrompaĵoj (ekzemple telefonadoj)</string>
|
||||
<string name="resume_on_audio_focus_gain_summary">Daŭrigi la ludon post la interrompaĵoj (ekzemple telefonadoj)</string>
|
||||
<string name="enable_search_history_title">Serĉa historio</string>
|
||||
<string name="enable_search_history_summary">Konservi la historio de serĉo lokale</string>
|
||||
<string name="enable_watch_history_title">Rigardu historion</string>
|
||||
@@ -205,21 +205,21 @@
|
||||
<string name="playlist_delete_failure">Ne povis forigi ludlisto.</string>
|
||||
<string name="settings_category_debug_title">Malcimigi</string>
|
||||
<string name="auto_queue_title">Auto-vico sekva fluo</string>
|
||||
<string name="auto_queue_summary">Aŭto-aldoni rilatan enhavon kiam leganta la lasta enhavo en malrepetita atendovico</string>
|
||||
<string name="auto_queue_summary">Aŭto-aldoni rilatan enhavon kiam ludanta la lasta enhavo en malrepetita atendovico</string>
|
||||
<string name="file">Dosiero</string>
|
||||
<string name="invalid_directory">Tia dosierujo ne ekzistas</string>
|
||||
<string name="invalid_source">Tia dosiero/enhavo ne ekzistas</string>
|
||||
<string name="file_name_empty_error">Dosiernomo ne povas esti malplena</string>
|
||||
<string name="error_occurred_detail">Eraro okazis : %1$s</string>
|
||||
<string name="import_youtube_instructions">Importu Jutubajn abonaĵojn per elŝuti la dosieron de eksporto :
|
||||
\n
|
||||
\n1. Iru ĉe tie retpaĝo : %1$s
|
||||
\n2. Ensalutu kiam oni petas vin
|
||||
<string name="error_occurred_detail">Eraro okazis: %1$s</string>
|
||||
<string name="import_youtube_instructions">Importu Jutubajn abonaĵojn per elŝuti la dosieron de eksporto :
|
||||
\n
|
||||
\n1. Iru ĉe tiu retpaĝo: %1$s
|
||||
\n2. Ensalutu kiam oni petas vin
|
||||
\n3. Elŝuto devus komenci (ĝi estas la dosiero de eksporto)</string>
|
||||
<string name="import_soundcloud_instructions">Importu Soundcloud-n profilon per elŝuti la dosieron de eksporto :
|
||||
<string name="import_soundcloud_instructions">Importu Soundcloud-n profilon tajpante ĉu la ligilon, ĉu vian ID :
|
||||
\n
|
||||
\n1. Ebligu komputilon modon en krozilo (la retejo malhaveblas por poŝtelefonoj)
|
||||
\n2. Iru al tie retpaĝo : %1$s
|
||||
\n2. Iru tien: %1$s
|
||||
\n3. Ensalutu kiam oni petas vin
|
||||
\n4. Kopiu la ligilon de profilo ke oni kondikis vin.</string>
|
||||
<string name="download_thumbnail_summary">Malŝaltu por malebligi ŝarĝajn bildetojn, konservi datumojn kaj uzadon de memoro. Ŝanĝoj forviŝas ambaŭ en-memoro kaj sur-disko bildo kaŝmemoro.</string>
|
||||
@@ -236,13 +236,13 @@
|
||||
<string name="clear_search_history_summary">Forviŝi la serĉajn ŝlosilvortojn</string>
|
||||
<string name="delete_search_history_alert">Ĉu vi volas forviŝi la totalon de la historio de serĉo \?</string>
|
||||
<string name="search_history_deleted">Historio de serĉo forviŝita.</string>
|
||||
<string name="limit_mobile_data_usage_title">Limigi distingivo kiam uzanta moveblan datumon</string>
|
||||
<string name="limit_mobile_data_usage_title">Limigi rezolucio kiam uzanta moveblan datumon</string>
|
||||
<string name="minimize_on_exit_popup_description">Minimumigi al ŝprucfenestro ludilo</string>
|
||||
<string name="channels">Kanaloj</string>
|
||||
<string name="playlists">Ludlistoj</string>
|
||||
<string name="tracks">Spuroj</string>
|
||||
<string name="users">Uzantoj</string>
|
||||
<string name="unsubscribe">Malabonu</string>
|
||||
<string name="unsubscribe">Malaboni</string>
|
||||
<string name="tab_new">Nova ongleto</string>
|
||||
<string name="tab_choose">Elektu ongleton</string>
|
||||
<string name="volume_gesture_control_title">Kontrolo de volumena gesto</string>
|
||||
@@ -265,7 +265,7 @@
|
||||
<string name="conferences">Konferencoj</string>
|
||||
<string name="show_comments_title">Montri komentojn</string>
|
||||
<string name="show_comments_summary">Malebligu por malvidigi komentojn</string>
|
||||
<string name="autoplay_title">Aŭtolego</string>
|
||||
<string name="autoplay_title">Aŭtoludo</string>
|
||||
<plurals name="comments">
|
||||
<item quantity="one">Komentoj</item>
|
||||
<item quantity="other"/>
|
||||
@@ -291,8 +291,8 @@
|
||||
<string name="downloads_storage_ask_summary_kitkat">Oni petos vin kie konservi ĉion elŝutaĵon.
|
||||
\nElektu AFM se vi volas elŝuti al ekstera SD-karto</string>
|
||||
<string name="downloads_storage_use_saf_title">Uzu AFM</string>
|
||||
<string name="downloads_storage_use_saf_summary">La Atinga Framo al la Memoro ebligas elŝuti al ekstera SD-karto.
|
||||
\nKomento : kelkaj aparatoj ne kongruas</string>
|
||||
<string name="downloads_storage_use_saf_summary">La Atinga Framo al la Memoro ebligas elŝuti al ekstera SD-karto.
|
||||
\nKomento: kelkaj aparatoj ne kongruas</string>
|
||||
<string name="clear_playback_states_title">Forviŝi ludajn poziciojn</string>
|
||||
<string name="clear_playback_states_summary">Forviŝi la totalon de ludaj pozicioj</string>
|
||||
<string name="delete_playback_states_alert">Ĉu vi volas forviŝi ĉiujn ludajn poziciojn \?</string>
|
||||
@@ -342,7 +342,7 @@
|
||||
<string name="view_on_github">Rigardu ĉe GitHub</string>
|
||||
<string name="app_license_title">Permesilo de NewPipe</string>
|
||||
<string name="contribution_encouragement">Ĉu vi havas ideojn pri; traduko, desegnaĵoj ŝanĝoj, purigado de kodo, aŭ realaj masivaj ŝanĝoj—helpo estas ĉiam bonvena. Ju pli oni faras, des pli bonas!</string>
|
||||
<string name="read_full_license">Legu permesilon</string>
|
||||
<string name="read_full_license">Legi permesilon</string>
|
||||
<string name="contribution_title">Kontribui</string>
|
||||
<string name="settings_file_charset_title">Permesitaj karakteroj en dosiernomoj</string>
|
||||
<string name="settings_file_replacement_character_summary">Nevalidaj karakteroj estas anstataŭigita kun ĉi tiu valoro</string>
|
||||
@@ -375,7 +375,7 @@
|
||||
<string name="no_channel_subscribed_yet">Neniuj kanalaj abonoj ankoraŭ</string>
|
||||
<string name="select_a_kiosk">Elekti kioskon</string>
|
||||
<string name="start_here_on_main">Komenci ludi ĉi tie</string>
|
||||
<string name="start_here_on_background">Komenci ludi en la fono</string>
|
||||
<string name="start_here_on_background">Komenci ludi fone</string>
|
||||
<string name="donation_title">Donaci</string>
|
||||
<string name="donation_encouragement">NewPipe estas programada par volontuoj, elspezante tempo por alporti vin la plej bona sperto. Redonu por helpi programistojn plibonigi NewPipe dum ĝuante tason da kafo.</string>
|
||||
<string name="give_back">Redoni</string>
|
||||
@@ -413,7 +413,7 @@
|
||||
<string name="enable_leak_canary_summary">La monitorado de la memorlikadoj povas frostigi la apon dum la hejta dumpingo</string>
|
||||
<string name="enable_disposed_exceptions_title">Signali ekster-vivciklajn erarojn</string>
|
||||
<string name="enable_disposed_exceptions_summary">Perforti signalante neenretigaj Rx esceptoj eksere la fragmento aŭ aktiveco vivciklo post dispono</string>
|
||||
<string name="invalid_file">La dosiero ne ekzistas aŭ la legopermeso mankas</string>
|
||||
<string name="invalid_file">La dosiero ne ekzistas aŭ la ludopermeso mankas</string>
|
||||
<string name="import_export_title">Importi/eksporti</string>
|
||||
<string name="import_title">Importi</string>
|
||||
<string name="import_from">Importi el</string>
|
||||
@@ -437,13 +437,13 @@
|
||||
<string name="caption_setting_title">Subtitoloj</string>
|
||||
<string name="caption_setting_description">Modifi la dimension de la teksto kaj la fonajn stilojn de la subtitoloj de la ludilo. Ĝi bezonas restarto de la apo por efektiviĝi.</string>
|
||||
<string name="one_item_deleted">1 ero forviŝita.</string>
|
||||
<string name="app_license">NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉojn de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.</string>
|
||||
<string name="app_license">NewPipe estas programaro sub rajtoceda permesilo: Vi povas uzi, studi, komuniki kaj plibonigi ĝin kiel vi volas. Precize, vi povas redistribui kaj/aŭ modifi ĝin sub la kondiĉoj de la Ĝenerala Publika Permesilo de GNU, kiel publikigita per la Free Software Foundation, ĉu en la versio 3, ĉu (se vi volas) ajna posta versio.</string>
|
||||
<string name="import_settings">Ĉu vi volas ankaŭ importi agordojn\?</string>
|
||||
<string name="privacy_policy_title">Privateca politiko de NewPipe</string>
|
||||
<string name="privacy_policy_encouragement">La NewPipe projekto respektas vian privatecon serioze. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
|
||||
<string name="privacy_policy_encouragement">La NewPipe projekto serioze respektas vian privatecon. Konsekvence, la apo ne kolektas ajnan datumo sen via konsento.
|
||||
\nLa privateco politiko de Newpipe detale eksplikas kion datumon estas sendita kaj stokita kiam vi sendas falegosignalon.</string>
|
||||
<string name="read_privacy_policy">Legi la privatecan politikon</string>
|
||||
<string name="start_accept_privacy_policy">Por konformiĝi al la Ĝenerala Datum-Protekta Regularon (GDPR), ni allogas vian atento al la privateca politiko de NewPipe. Bonvolu legi ĝin atentive.
|
||||
<string name="start_accept_privacy_policy">Por konformiĝi al la Ĝenerala Datum-Protekta Regularon (GDPR), ni allogas vian atenton al la privateca politiko de NewPipe. Bonvolu atentive legi ĝin.
|
||||
\nVi devas akcepti ĝin por sendi nin la cimsignalo.</string>
|
||||
<string name="accept">Akcepti</string>
|
||||
<string name="decline">Rifuzi</string>
|
||||
@@ -455,7 +455,7 @@
|
||||
<string name="skip_silence_checkbox">Plirapidigi dum silentoj</string>
|
||||
<string name="playback_step">Paŝo</string>
|
||||
<string name="playback_reset">Restarigi</string>
|
||||
<string name="saved_tabs_invalid_json">Uzante defaŭltajn ongletojn, eraro dum leganta savajn ongletojn</string>
|
||||
<string name="saved_tabs_invalid_json">Uzante defaŭltajn ongletojn, eraro ludante savajn ongletojn</string>
|
||||
<string name="restore_defaults">Restaŭri la defaŭltojn</string>
|
||||
<string name="restore_defaults_confirmation">Ĉu vi volas restaŭri la defaŭltojn \?</string>
|
||||
<string name="subscribers_count_not_available">Kalkulo de abonantoj malhavebla</string>
|
||||
@@ -516,4 +516,22 @@
|
||||
<item quantity="other">%s aŭskultantoj</item>
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">La lingvo ŝanĝos kiam la apo restartos.</string>
|
||||
<string name="seek_duration_title">Rapida antaŭen / posten daŭron</string>
|
||||
<string name="peertube_instance_url_title">Instancoj de PeerTube</string>
|
||||
<string name="peertube_instance_url_summary">Elekti viajn preferitajn instancojn de PeerTube</string>
|
||||
<string name="peertube_instance_url_help">Trovu la instancojn kiu vi povus ŝati ĉe %s</string>
|
||||
<string name="peertube_instance_add_title">Aldoni instanco</string>
|
||||
<string name="peertube_instance_add_help">Eniri la ligilon de la instanco</string>
|
||||
<string name="peertube_instance_add_fail">Ne povis validigi instanco</string>
|
||||
<string name="peertube_instance_add_https_only">Nur HTTPS ligiloj estas subtenitaj</string>
|
||||
<string name="peertube_instance_add_exists">La instanco jam ekzistas</string>
|
||||
<string name="local">Loka</string>
|
||||
<string name="recently_added">Freŝdate ĝisdatigita</string>
|
||||
<string name="most_liked">La plej ŝatitatj</string>
|
||||
<string name="playlist_no_uploader">Aŭtomate generita (neniu alŝutilo trovita)</string>
|
||||
<string name="recovering">Reakiranta</string>
|
||||
<string name="error_download_resource_gone">Ne povas reakiri tion elŝuton</string>
|
||||
<string name="choose_instance_prompt">Elektu instancon</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">Enablu bildeta filmeton ĉe ŝlosita ekrano</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">Uzante la fona ludilo, bildeta filmeto vidiĝos ĉe ŝlosita ekrano</string>
|
||||
</resources>
|
@@ -518,4 +518,20 @@
|
||||
<item quantity="other">%s escuchas</item>
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">El idioma cambiará luego de que la app sea reiniciada.</string>
|
||||
<string name="seek_duration_title">Duración de búsqueda al avanzar y/o retroceder</string>
|
||||
<string name="peertube_instance_url_title">Instancias de PeerTube</string>
|
||||
<string name="peertube_instance_url_summary">Selecciona tus instancias favoritas de PeerTube</string>
|
||||
<string name="peertube_instance_url_help">Encuentra las mejores instancias para ti en %s</string>
|
||||
<string name="peertube_instance_add_title">Agregar instancia</string>
|
||||
<string name="peertube_instance_add_help">Ingresar URL de la instancia</string>
|
||||
<string name="peertube_instance_add_fail">No se pudo validar la instancia</string>
|
||||
<string name="peertube_instance_add_https_only">Sólo URLs con HTTPS son soportados</string>
|
||||
<string name="peertube_instance_add_exists">La instancia ya existe</string>
|
||||
<string name="local">Local</string>
|
||||
<string name="recently_added">Agregados recientemente</string>
|
||||
<string name="most_liked">Más gustados</string>
|
||||
<string name="playlist_no_uploader">Generado automáticamente (no se encontró creador)</string>
|
||||
<string name="choose_instance_prompt">Elige una instancia</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">Habilitar miniatura de video de la pantalla de bloqueo</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">Al usar el reproductor de fondo, se mostrará una miniatura de video en la pantalla de bloqueo</string>
|
||||
</resources>
|
@@ -500,13 +500,13 @@
|
||||
<string name="download_choose_new_path">Aldatu deskargen karpetak indarrean jartzeko</string>
|
||||
<string name="no_one_watching">Ez dago inor ikusten</string>
|
||||
<plurals name="watching">
|
||||
<item quantity="one">%s ikusten</item>
|
||||
<item quantity="other">%s ikusten</item>
|
||||
<item quantity="one">ikusle %s</item>
|
||||
<item quantity="other">%s ikusle</item>
|
||||
</plurals>
|
||||
<string name="no_one_listening">Ez dago inor entzuten</string>
|
||||
<plurals name="listening">
|
||||
<item quantity="one">%s entzuten</item>
|
||||
<item quantity="other">%s entzuten</item>
|
||||
<item quantity="one">entzule %s</item>
|
||||
<item quantity="other">%s entzule</item>
|
||||
</plurals>
|
||||
<string name="downloads_storage_use_saf_title">SAF erabili</string>
|
||||
<string name="downloads_storage_use_saf_summary">Biltegian Sartzeko Armazoiak kanpoko SD txartel betera jaitsierak egitea ahalbidetzen du.
|
||||
@@ -517,4 +517,20 @@
|
||||
<string name="drawer_header_description">Aktibatu zerbitzua, orain hautatua:</string>
|
||||
<string name="localization_changes_requires_app_restart">Hizkuntza aldatuko da aplikazioa berrabiarazterakoan.</string>
|
||||
<string name="default_kiosk_page_summary">Kiosko Lehenetsia</string>
|
||||
<string name="seek_duration_title">Aurreratze/atzeratze bilaketaren iraupena</string>
|
||||
<string name="peertube_instance_url_title">PeerTube instantziak</string>
|
||||
<string name="peertube_instance_url_summary">Hautatu zure gogoko PeerTube instantziak</string>
|
||||
<string name="peertube_instance_url_help">Aurkitu instantziak hemen: %s</string>
|
||||
<string name="peertube_instance_add_title">Gehitu instantzia</string>
|
||||
<string name="peertube_instance_add_help">Sartu instantziaren URLa</string>
|
||||
<string name="peertube_instance_add_fail">Ezin izan da instantzia balioztatu</string>
|
||||
<string name="peertube_instance_add_https_only">HTTPS URLak onartzen dira soilik</string>
|
||||
<string name="peertube_instance_add_exists">Instantzia badago aurretik</string>
|
||||
<string name="local">Lokala</string>
|
||||
<string name="recently_added">Berriki gehitua</string>
|
||||
<string name="most_liked">Gogokoenak</string>
|
||||
<string name="playlist_no_uploader">Automatikoki sortua (igotzailea ez da aurkitu)</string>
|
||||
<string name="recovering">berreskuratzen</string>
|
||||
<string name="error_download_resource_gone">Ezin da deskarga hau berreskuratu</string>
|
||||
<string name="choose_instance_prompt">Aukeratu instantzia</string>
|
||||
</resources>
|
@@ -93,7 +93,7 @@
|
||||
<string name="add">Nouvelle mission</string>
|
||||
<string name="finish">OK</string>
|
||||
<string name="msg_name">Nom du fichier</string>
|
||||
<string name="msg_threads">Fils de discussion</string>
|
||||
<string name="msg_threads">Nombre de connexions simultanées</string>
|
||||
<string name="msg_error">Erreur</string>
|
||||
<string name="msg_server_unsupported">Serveur non pris en charge</string>
|
||||
<string name="msg_exists">Fichier déjà existant</string>
|
||||
@@ -122,7 +122,7 @@
|
||||
<string name="short_million">M</string>
|
||||
<string name="msg_popup_permission">Cette autorisation est nécessaire pour
|
||||
\nutiliser le mode flottant</string>
|
||||
<string name="controls_background_title">Arrière-plan</string>
|
||||
<string name="controls_background_title">Lire l\'audio</string>
|
||||
<string name="controls_popup_title">Flottant</string>
|
||||
<string name="default_popup_resolution_title">Définition de la fenêtre flottante par défaut</string>
|
||||
<string name="show_higher_resolutions_title">Afficher des définitions plus élevées</string>
|
||||
@@ -130,7 +130,7 @@
|
||||
<string name="default_video_format_title">Format vidéo par défaut</string>
|
||||
<string name="popup_remember_size_pos_title">Mémoriser les taille et position de la fenêtre flottante</string>
|
||||
<string name="popup_remember_size_pos_summary">Mémorise les dernières taille et position de la fenêtre flottante</string>
|
||||
<string name="settings_category_popup_title">Fenêtre flottante</string>
|
||||
<string name="settings_category_popup_title">Fenêtré</string>
|
||||
<string name="filter">Filtre</string>
|
||||
<string name="refresh">Rafraîchir</string>
|
||||
<string name="clear">Effacer</string>
|
||||
@@ -185,7 +185,7 @@
|
||||
<string name="notification_channel_name">Notification NewPipe</string>
|
||||
<string name="undo">Annuler</string>
|
||||
<string name="enable_watch_history_summary">Garde un suivi des vidéos vues</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Reprendre à l’obtention de la cible de saisie</string>
|
||||
<string name="resume_on_audio_focus_gain_title">Reprendre lors du retour dans l\'application</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 et cache</string>
|
||||
@@ -275,8 +275,8 @@
|
||||
<string name="export_data_summary">Exporte l’historique, les abonnements et les listes de lecture</string>
|
||||
<string name="export_complete_toast">Exporté</string>
|
||||
<string name="import_complete_toast">Importé</string>
|
||||
<string name="no_valid_zip_file">Aucun fichier ZIP valide</string>
|
||||
<string name="could_not_import_all_files">Avertissement : impossible d’importer tous les fichiers.</string>
|
||||
<string name="no_valid_zip_file">Fichier ZIP non valide</string>
|
||||
<string name="could_not_import_all_files">Avertissement : Impossible d\'importer tous les fichiers.</string>
|
||||
<string name="override_current_data">Cela effacera vos paramètres actuels.</string>
|
||||
<string name="show_info">Afficher les infos</string>
|
||||
<string name="tab_bookmarks">Listes de lecture enregistrées</string>
|
||||
@@ -310,7 +310,7 @@
|
||||
<string name="use_inexact_seek_title">Utiliser la recherche rapide approximative</string>
|
||||
<string name="use_inexact_seek_summary">Permet au lecteur d’accéder plus rapidement à une position au détriment de la précision</string>
|
||||
<string name="download_thumbnail_title">Charger les miniatures</string>
|
||||
<string name="download_thumbnail_summary">Désactiver pour empêcher le chargement des miniatures, afin de réduire l’utilisation de la bande passante et de la mémoire. Modifier cette option vide les caches d’image en mémoire vive et sur le disque.</string>
|
||||
<string name="download_thumbnail_summary">Désactivez pour empêcher le chargement des miniatures afin de réduire l’utilisation de la bande passante et de la mémoire. La modification de cette option, vide le cache en mémoire vive et sur le disque.</string>
|
||||
<string name="thumbnail_cache_wipe_complete_notice">Images en cache effacées</string>
|
||||
<string name="metadata_cache_wipe_title">Effacer les métadonnées en cache</string>
|
||||
<string name="metadata_cache_wipe_summary">Efface toutes les données de pages Web en cache</string>
|
||||
@@ -325,7 +325,7 @@
|
||||
<string name="drawer_header_action_paceholder_text">Quelque chose va bientôt apparaître ici ;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">Ajoute automatiquement un flux lié lors de la lecture du dernier flux dans une file d’attente sans répétition</string>
|
||||
<string name="auto_queue_summary">Lecture automatique après la file d\'attente</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>
|
||||
@@ -381,7 +381,7 @@
|
||||
<string name="app_license">NewPipe est un logiciel sous licence libre copyleft : vous pouvez l’utiliser, l’étudier, le partager et l’améliorer comme bon vous semble. Plus précisément, vous pouvez le redistribuer ou le modifier sous les termes de la licence générale publique GNU, comme publiée par la Free Software Foundation, dans sa version 3, ou, à votre convenance, dans une version quelconque version ultérieure.</string>
|
||||
<string name="privacy_policy_title">Politique de confidentialité de NewPipe</string>
|
||||
<string name="read_privacy_policy">Lire la politique de confidentialité</string>
|
||||
<string name="import_settings">Voulez-vous également importer des paramètres \?</string>
|
||||
<string name="import_settings">Voulez-vous également importer les paramètres \?</string>
|
||||
<string name="accept">Accepter</string>
|
||||
<string name="decline">Refuser</string>
|
||||
<string name="privacy_policy_encouragement">Le projet NewPipe prend votre vie privée très à cœur. Par conséquent, l’application n’envoie aucune donnée sans votre consentement.
|
||||
@@ -401,7 +401,7 @@
|
||||
<string name="minimize_on_exit_summary">Action lors du basculement à une autre application depuis le lecteur vidéo — %s</string>
|
||||
<string name="minimize_on_exit_none_description">Aucune</string>
|
||||
<string name="minimize_on_exit_background_description">Minimiser pour lire en arrière-plan</string>
|
||||
<string name="minimize_on_exit_popup_description">Minimiser pour lire en mode flottant</string>
|
||||
<string name="minimize_on_exit_popup_description">Basculer vers le mode fenêtré</string>
|
||||
<string name="unsubscribe">Se désabonner</string>
|
||||
<string name="tab_new">Nouvel onglet</string>
|
||||
<string name="tab_choose">Sélectionner un onglet</string>
|
||||
@@ -421,14 +421,14 @@
|
||||
<string name="stop">Arrêter</string>
|
||||
<string name="events">Évènements</string>
|
||||
<string name="download_to_sdcard_error_message">Impossible de télécharger dans la carte mémoire externe. Voulez-vous réinitialiser l’emplacement du dossier de téléchargement \?</string>
|
||||
<string name="main_page_content_summary">Sélection des onglets à afficher sur la page principale</string>
|
||||
<string name="main_page_content_summary">Choisir quels onglets seront visibles sur la page principale</string>
|
||||
<string name="updates_setting_title">Mises à jour</string>
|
||||
<string name="updates_setting_description">Afficher une notification pour proposer une mise à jour de l’application lorsqu’une nouvelle version est disponible</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="grid">Grille</string>
|
||||
<string name="auto">Auto</string>
|
||||
<string name="switch_view">Changer de vue</string>
|
||||
<string name="app_update_notification_content_title">Une mise à jour de NewPipe disponible !</string>
|
||||
<string name="app_update_notification_content_title">Une mise à jour de NewPipe est disponible !</string>
|
||||
<string name="app_update_notification_content_text">Appuyer pour télécharger</string>
|
||||
<string name="missions_header_finished">Terminé</string>
|
||||
<string name="missions_header_pending">En attente</string>
|
||||
@@ -443,7 +443,7 @@
|
||||
<string name="overwrite">Écraser</string>
|
||||
<string name="overwrite_unrelated_warning">Un fichier avec ce nom existe déjà</string>
|
||||
<string name="overwrite_finished_warning">Un fichier téléchargé avec ce nom existe déjà</string>
|
||||
<string name="download_already_running">Il y a un téléchargement en cours avec ce nom</string>
|
||||
<string name="download_already_running">Il y a déjà un téléchargement en cours avec ce nom</string>
|
||||
<string name="show_error">Afficher l’erreur</string>
|
||||
<string name="label_code">Code</string>
|
||||
<string name="error_path_creation">Le dossier de destination ne peut pas être créé</string>
|
||||
@@ -464,7 +464,7 @@
|
||||
<string name="error_postprocessing_failed">Le post-traitement a échoué</string>
|
||||
<string name="max_retry_msg">Nombre maximum de tentatives</string>
|
||||
<string name="max_retry_desc">Nombre maximum de tentatives avant d’annuler le téléchargement</string>
|
||||
<string name="saved_tabs_invalid_json">Utilisation des onglets par défaut, erreur lors de la lecture des onglets enregistrés</string>
|
||||
<string name="saved_tabs_invalid_json">En utilisation les onglets par défaut, une erreur est survenue en lisant les onglets sauvegardés</string>
|
||||
<string name="error_http_unsupported_range">Le serveur n’accepte pas les téléchargements multi-fils, veuillez réessayer avec @string/msg_threads = 1</string>
|
||||
<string name="show_comments_title">Afficher les commentaires</string>
|
||||
<string name="show_comments_summary">Désactiver pour ne pas afficher les commentaires</string>
|
||||
@@ -517,4 +517,22 @@
|
||||
<item quantity="other">%s auditeurs</item>
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">La langue changera lors du redémarrage de l\'application.</string>
|
||||
<string name="seek_duration_title">Avance/rembobinage rapide sur une durée</string>
|
||||
<string name="peertube_instance_url_title">Instances PeerTube</string>
|
||||
<string name="peertube_instance_url_summary">Choisissez vos instances PeerTube préférées</string>
|
||||
<string name="peertube_instance_url_help">Cherchez des instances qui pourraient vous intéresser sur %s</string>
|
||||
<string name="peertube_instance_add_title">Ajouter une instance</string>
|
||||
<string name="peertube_instance_add_help">Entrez l’URL de l’instance</string>
|
||||
<string name="peertube_instance_add_fail">Échec de validation de l’instance</string>
|
||||
<string name="peertube_instance_add_https_only">Sont prises en charge uniquement les URLs en HTTPS</string>
|
||||
<string name="peertube_instance_add_exists">L’instance existe déjà</string>
|
||||
<string name="local">Local</string>
|
||||
<string name="recently_added">Ajoutées récemment</string>
|
||||
<string name="most_liked">Les plus aimées</string>
|
||||
<string name="recovering">récupération</string>
|
||||
<string name="error_download_resource_gone">Impossible de récupérer ce téléchargement</string>
|
||||
<string name="choose_instance_prompt">Choisissez une instance</string>
|
||||
<string name="playlist_no_uploader">Généré automatiquement (pas de téléverseur trouvé)</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">Activer la vidéo miniaturisée sur l\'écran de verrouillage</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">En utilisant le lecteur audio, la miniature de la vidéo sera affichée sur l\'écran de verrouillage</string>
|
||||
</resources>
|
@@ -254,7 +254,7 @@
|
||||
<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="start_here_on_popup">להתחיל לנגן בנגן צף חדש</string>
|
||||
<string name="controls_download_desc">הורדת קובץ הזרמה</string>
|
||||
<string name="show_info">הצגת מידע</string>
|
||||
<string name="tab_bookmarks">רשימות נגינה מסומנות</string>
|
||||
@@ -490,13 +490,13 @@
|
||||
<string name="watch_history_states_deleted">מיקומי הנגינה נמחקו.</string>
|
||||
<string name="missing_file">הקובץ הועבר או נמחק</string>
|
||||
<string name="overwrite_unrelated_warning">כבר קיים קובץ בשם הזה</string>
|
||||
<string name="overwrite_failed">לא ניתן לשכתב על הקובץ</string>
|
||||
<string name="overwrite_failed">לא ניתן לשכתב את הקובץ</string>
|
||||
<string name="download_already_pending">כבר יש הורדה ממתינה בשם הזה</string>
|
||||
<string name="error_postprocessing_stopped">NewPipe נסגר בזמן העבודה על הקובץ</string>
|
||||
<string name="error_insufficient_storage">לא נשאר מקום במכשיר</string>
|
||||
<string name="error_progress_lost">התהליך אבד כיוון שהקובץ נמחק</string>
|
||||
<string name="error_timeout">החיבור המתין זמן רב מדי</string>
|
||||
<string name="confirm_prompt">בוודאות\?</string>
|
||||
<string name="confirm_prompt">למחוק את היסטוריית ההורדות שלך או למחוק את כל הקבצים שהורדת\?</string>
|
||||
<string name="enable_queue_limit">הגבלת תור ההורדה</string>
|
||||
<string name="enable_queue_limit_desc">רק הורדה אחת תרוץ בו־זמנית</string>
|
||||
<string name="start_downloads">התחלת הורדות</string>
|
||||
@@ -529,4 +529,25 @@
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">השפה תוחלף עם הפעלת היישומון מחדש.</string>
|
||||
<string name="default_kiosk_page_summary">קיוסק בררת מחדל</string>
|
||||
<string name="seek_duration_title">משך קפיצה מהירה קדימה/אחורה</string>
|
||||
<string name="peertube_instance_url_title">מופעים של PeerTube</string>
|
||||
<string name="peertube_instance_url_summary">נא לבחור את מופעי ה־PeerTube המועדפים עליך</string>
|
||||
<string name="peertube_instance_url_help">איתור המופעים שהכי מתאימים לך תחת %s</string>
|
||||
<string name="peertube_instance_add_title">הוספת מופע</string>
|
||||
<string name="peertube_instance_add_help">נא להכניס כתובת מופע</string>
|
||||
<string name="peertube_instance_add_fail">לא ניתן לאמת את המופע</string>
|
||||
<string name="peertube_instance_add_https_only">יש תמיכה בכתובות HTTPS בלבד</string>
|
||||
<string name="peertube_instance_add_exists">המופע כבר קיים</string>
|
||||
<string name="local">מקומי</string>
|
||||
<string name="recently_added">נוספו לאחרונה</string>
|
||||
<string name="most_liked">האהובים ביותר</string>
|
||||
<string name="playlist_no_uploader">נוצרה אוטומטית (לא נמצא מעלה)</string>
|
||||
<string name="recovering">בשחזור</string>
|
||||
<string name="error_download_resource_gone">לא ניתן לשחזר את ההורדה הזאת</string>
|
||||
<string name="choose_instance_prompt">נא לבחור מופע</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">הפעלת תמונה מוקטנת של הסרטון במסך הנעילה</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">בעת השימוש בנגן הרקע תופיע תמונה מוקטנת של הסרטון על מסך הנעילה</string>
|
||||
<string name="clear_download_history">מחיקת היסטוריית ההורדות</string>
|
||||
<string name="delete_downloaded_files">למחוק את הקבצים שהורדתי</string>
|
||||
<string name="deleted_downloads">נמחקו %1$s הורדות</string>
|
||||
</resources>
|
37
app/src/main/res/values-ia/strings.xml
Normal file
37
app/src/main/res/values-ia/strings.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="install">Installar</string>
|
||||
<string name="open_in_browser">Aperir in le navigator</string>
|
||||
<string name="share">Compartir</string>
|
||||
<string name="download">Discargar</string>
|
||||
<string name="search">Cercar</string>
|
||||
<string name="settings">Configurationes</string>
|
||||
<string name="share_dialog_title">Compartir con</string>
|
||||
<string name="choose_browser">Seliger un navigator</string>
|
||||
<string name="subscribed_button_title">Subscribite</string>
|
||||
<string name="unsubscribe">Cancellar le subscription</string>
|
||||
<string name="subscription_change_failed">Non poteva cambiar le subscription</string>
|
||||
<string name="subscription_update_failed">Non poteva actualisar le subscription</string>
|
||||
<string name="show_info">Monstrar information</string>
|
||||
<string name="tab_main">Principal</string>
|
||||
<string name="tab_subscriptions">Subscriptiones</string>
|
||||
<string name="tab_new">Nove scheda</string>
|
||||
<string name="tab_choose">Seliger le scheda</string>
|
||||
<string name="fragment_whats_new">Novitates</string>
|
||||
<string name="controls_background_title">Fundo</string>
|
||||
<string name="controls_popup_title">Emergente</string>
|
||||
<string name="controls_add_to_playlist_title">Adder a</string>
|
||||
<string name="download_path_title">Dossier de discarga de video</string>
|
||||
<string name="download_path_dialog_title">Selige le dossier de discarga pro files de video</string>
|
||||
<string name="download_path_audio_title">Dossier de discarga de audio</string>
|
||||
<string name="cancel">Cancellar</string>
|
||||
<string name="subscribe_button_title">Subscriber</string>
|
||||
<string name="download_path_audio_dialog_title">Selige le dossier de discarga pro files de audio</string>
|
||||
<string name="theme_title">Thema</string>
|
||||
<string name="show_comments_title">Monstrar le commentos</string>
|
||||
<string name="start_downloads">Initiar discargas</string>
|
||||
<string name="pause_downloads">Pausar le discargas</string>
|
||||
<string name="choose_instance_prompt">Seliger un instantia</string>
|
||||
<string name="error_connect_host">Non poteva connecter con le servitor</string>
|
||||
<string name="view_count_text">%1$s vistas</string>
|
||||
</resources>
|
@@ -510,4 +510,21 @@
|
||||
<item quantity="other">%s mendengarkan</item>
|
||||
</plurals>
|
||||
<string name="localization_changes_requires_app_restart">Bahasa akan diterapkan setelah aplikasi dimulai ulang.</string>
|
||||
<string name="peertube_instance_url_title">Situs PeerTube</string>
|
||||
<string name="peertube_instance_url_summary">Pilih situs PeerTube favorit anda</string>
|
||||
<string name="peertube_instance_url_help">Temukan situs yang sesuai dengan anda di %s</string>
|
||||
<string name="peertube_instance_add_title">Tambah situs</string>
|
||||
<string name="peertube_instance_add_help">Masukkan URL situs</string>
|
||||
<string name="peertube_instance_add_fail">Tidak bisa memvalidasi situs</string>
|
||||
<string name="peertube_instance_add_https_only">Hanya mendukung URL HTTPS</string>
|
||||
<string name="peertube_instance_add_exists">Situs sudah ada</string>
|
||||
<string name="local">Lokal</string>
|
||||
<string name="recently_added">Baru-baru ini ditambahkan</string>
|
||||
<string name="most_liked">Disukai terbanyak</string>
|
||||
<string name="playlist_no_uploader">Dibuat otomatis (pengunggah tidak ditemukan)</string>
|
||||
<string name="recovering">memulihkan</string>
|
||||
<string name="error_download_resource_gone">Tidak bisa memulihkan unduhan ini</string>
|
||||
<string name="choose_instance_prompt">Pilih situs</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_title">Aktifkan kunci layar thumbnail video</string>
|
||||
<string name="enable_lock_screen_video_thumbnail_summary">Ketika menggunakan pemutar latar belakang, thumbnail video akan ditampilkan di tampilan kunci layar</string>
|
||||
</resources>
|
File diff suppressed because it is too large
Load Diff
@@ -331,10 +331,10 @@
|
||||
<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. 요청에 따라 로그인을 진행합니다
|
||||
<string name="import_youtube_instructions">\'YouTube 구독 파일\'을 다운로드해서 구독 목록을 가져올 수 있습니다:
|
||||
\n
|
||||
\n1. 이곳으로 가세요: %1$s
|
||||
\n2. 요청에 따라 로그인을 진행합니다
|
||||
\n3. 다운로드가 곧 시작 됩니다 (이 파일이 구독 파일입니다)</string>
|
||||
<string name="import_soundcloud_instructions">SoundCloud 프로필을 가져오시려면 URL 및 ID를 입력해주세요.
|
||||
\n
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user