Merge remote-tracking branch 'origin/master' into toast

This commit is contained in:
Kavin 2023-04-29 19:09:15 +01:00
commit 096999a69e
No known key found for this signature in database
GPG key ID: 49451E4482CC5BCD
41 changed files with 804 additions and 569 deletions

View file

@ -1,5 +1,5 @@
<template>
<div class="flex flex-col w-full min-h-screen px-1vw py-5 reset" :class="[theme]">
<div class="flex flex-col w-full min-h-screen px-1vw py-5 antialiased reset" :class="[theme]">
<div class="flex-1">
<NavBar />
<router-view v-slot="{ Component }">
@ -167,7 +167,7 @@ b {
}
.video-grid {
@apply grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 col-auto lt-md:gap-x-2.5 md:gap-x-1vw gap-y-1.5;
@apply grid grid-cols-1 mx-2 sm:mx-0 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 col-auto lt-md:gap-x-3 md:gap-x-6 gap-y-5;
}
.btn {

View file

@ -146,7 +146,7 @@ export default {
},
async fetchChannel() {
const url = this.$route.path.includes("@")
? this.apiUrl() + "/c/" + this.$route.params.channelId
? this.apiUrl() + "/@/" + this.$route.params.channelId
: this.apiUrl() + "/" + this.$route.params.path + "/" + this.$route.params.channelId;
return await this.fetchJson(url);
},

View file

@ -25,7 +25,7 @@
@focus="onInputFocus"
@blur="onInputBlur"
/>
<span v-if="searchText" class="delete-search" @click="searchText = ''">x</span>
<span v-if="searchText" class="delete-search" @click="searchText = ''"></span>
</div>
<!-- three vertical lines for toggling the hamburger menu on mobile -->
<button class="md:hidden flex flex-col justify-end mr-3" @click="showTopNav = !showTopNav">
@ -100,7 +100,7 @@
@focus="onInputFocus"
@blur="onInputBlur"
/>
<span v-if="searchText" class="delete-search" @click="searchText = ''">x</span>
<span v-if="searchText" class="delete-search" @click="searchText = ''"></span>
</div>
<SearchSuggestions
v-show="(searchText || showSearchHistory) && suggestionsVisible"

View file

@ -10,14 +10,15 @@
</p>
</router-link>
<p v-if="props.item.description" v-text="props.item.description" />
<router-link v-if="props.item.uploaderUrl" class="link" :to="props.item.uploaderUrl">
<p>
<span v-text="props.item.uploader" />
<span v-text="props.item.uploaderName" />
<font-awesome-icon class="ml-1.5" v-if="props.item.uploaderVerified" icon="check" />
</p>
</router-link>
<a v-else-if="props.item.uploaderName" class="link" v-text="props.item.uploaderName" />
<a v-if="props.item.uploaderName" class="link" v-text="props.item.uploaderName" />
<template v-if="props.item.videos >= 0">
<br v-if="props.item.uploaderName" />
<strong v-text="`${props.item.videos} ${$t('video.videos')}`" />

View file

@ -1,6 +1,7 @@
<template>
<div v-if="showVideo">
<router-link
class="focus:underline hover:underline inline-block w-full"
:to="{
path: '/watch',
query: {
@ -50,60 +51,29 @@
<div>
<p
style="display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical"
class="my-2 overflow-hidden flex link"
class="pt-2 overflow-hidden flex link font-bold"
:title="item.title"
v-text="item.title"
/>
</div>
</router-link>
<div class="float-right m-0 inline-block children:px-1">
<router-link
:to="{
path: '/watch',
query: {
v: item.url.substr(-11),
...(playlistId && { list: playlistId }),
...(index >= 0 && { index: index + 1 }),
listen: '1',
},
}"
:aria-label="'Listen to ' + item.title"
:title="'Listen to ' + item.title"
>
<font-awesome-icon icon="headphones" />
</router-link>
<button v-if="authenticated" :title="$t('actions.add_to_playlist')" @click="showModal = !showModal">
<font-awesome-icon icon="circle-plus" />
</button>
<button
v-if="admin"
:title="$t('actions.remove_from_playlist')"
ref="removeButton"
@click="removeVideo(item.url.substr(-11))"
>
<font-awesome-icon icon="circle-minus" />
</button>
<PlaylistAddModal v-if="showModal" :video-id="item.url.substr(-11)" @close="showModal = !showModal" />
</div>
<div class="flex">
<router-link :to="item.uploaderUrl">
<img
v-if="item.uploaderAvatar"
:src="item.uploaderAvatar"
loading="lazy"
:alt="item.uploaderName"
class="rounded-full mr-0.5 mt-0.5 w-32px h-32px"
width="68"
height="68"
/>
</router-link>
<div class="w-[calc(100%-32px-1rem)]">
<div class="px-2 flex-1">
<router-link
v-if="item.uploaderUrl && item.uploaderName && !hideChannel"
class="link-secondary overflow-hidden block"
class="link-secondary overflow-hidden block text-sm"
:to="item.uploaderUrl"
:title="item.uploaderName"
>
@ -111,14 +81,44 @@
<font-awesome-icon class="ml-1.5" v-if="item.uploaderVerified" icon="check" />
</router-link>
<strong v-if="item.views >= 0 || item.uploadedDate" class="text-sm">
<div v-if="item.views >= 0 || item.uploadedDate" class="text-xs font-normal text-gray-300 mt-1">
<span v-if="item.views >= 0">
<font-awesome-icon icon="eye" />
<span class="pl-0.5" v-text="`${numberFormat(item.views)} •`" />
<span class="pl-1" v-text="`${numberFormat(item.views)} •`" />
</span>
<span v-if="item.uploaded > 0" class="pl-0.5" v-text="timeAgo(item.uploaded)" />
<span v-else-if="item.uploadedDate" class="pl-0.5" v-text="item.uploadedDate" />
</strong>
</div>
</div>
<div class="flex items-center gap-2.5">
<router-link
:to="{
path: '/watch',
query: {
v: item.url.substr(-11),
...(playlistId && { list: playlistId }),
...(index >= 0 && { index: index + 1 }),
listen: '1',
},
}"
:aria-label="'Listen to ' + item.title"
:title="'Listen to ' + item.title"
>
<font-awesome-icon icon="headphones" />
</router-link>
<button v-if="authenticated" :title="$t('actions.add_to_playlist')" @click="showModal = !showModal">
<font-awesome-icon icon="circle-plus" />
</button>
<button
v-if="admin"
:title="$t('actions.remove_from_playlist')"
ref="removeButton"
@click="removeVideo(item.url.substr(-11))"
>
<font-awesome-icon icon="circle-minus" />
</button>
<PlaylistAddModal v-if="showModal" :video-id="item.url.substr(-11)" @close="showModal = !showModal" />
</div>
</div>
</div>
@ -126,7 +126,7 @@
<style>
.shorts-img {
@apply max-h-[17.5vh] w-full object-contain;
@apply w-full object-contain;
}
</style>

View file

@ -6,6 +6,7 @@
:class="{ 'player-container': !isEmbed }"
>
<video ref="videoEl" class="w-full" data-shaka-player :autoplay="shouldAutoPlay" :loop="selectedAutoLoop" />
<canvas height="130" width="230" id="preview" />
<button
v-if="inSegment"
class="skip-segment-button"
@ -55,6 +56,7 @@ export default {
initialSeekComplete: false,
destroying: false,
inSegment: false,
isHoveringTimebar: false,
};
},
computed: {
@ -498,6 +500,8 @@ export default {
const player = this.$ui.getControls().getPlayer();
this.setupSeekbarPreview();
this.$player = player;
const disableVideo = this.getPreferenceBoolean("listen", false) && !this.video.livestream;
@ -671,6 +675,81 @@ export default {
});
}
},
setupSeekbarPreview() {
if (!this.video.previewFrames) return;
let seekBar = document.querySelector(".shaka-seek-bar");
// load the thumbnail preview when the user moves over the seekbar
seekBar.addEventListener("mousemove", e => {
this.isHoveringTimebar = true;
const position = (e.offsetX / e.target.offsetWidth) * this.video.duration;
this.showSeekbarPreview(position * 1000);
});
// hide the preview when the user stops hovering the seekbar
seekBar.addEventListener("mouseout", () => {
this.isHoveringTimebar = false;
let canvas = document.querySelector("#preview");
canvas.style.display = "none";
});
},
async showSeekbarPreview(position) {
let frame = this.getFrame(position);
let originalImage = await this.loadImage(frame.url);
if (!this.isHoveringTimebar) return;
let seekBar = document.querySelector(".shaka-seek-bar");
let canvas = document.querySelector("#preview");
let ctx = canvas.getContext("2d");
// get the new sizes for the image to be drawn into the canvas
const originalWidth = originalImage.naturalWidth;
const originalHeight = originalImage.naturalHeight;
const offsetX = originalWidth * (frame.positionX / frame.framesPerPageX);
const offsetY = originalHeight * (frame.positionY / frame.framesPerPageY);
const newWidth = originalWidth / frame.framesPerPageX;
const newHeight = originalHeight / frame.framesPerPageY;
// draw the thumbnail preview into the canvas by cropping only the relevant part
ctx.drawImage(originalImage, offsetX, offsetY, newWidth, newHeight, 0, 0, canvas.width, canvas.height);
// calculate the thumbnail preview offset and display it
const seekbarPadding = 2; // percentage of seekbar padding
const centerOffset = position / this.video.duration / 10;
const left = centerOffset - ((0.5 * canvas.width) / seekBar.clientWidth) * 100;
const maxLeft = ((seekBar.clientWidth - canvas.clientWidth) / seekBar.clientWidth) * 100 - seekbarPadding;
canvas.style.left = `max(${seekbarPadding}%, min(${left}%, ${maxLeft}%))`;
canvas.style.display = "block";
},
// ineffective algorithm to find the thumbnail corresponding to the currently hovered position in the video
getFrame(position) {
let startPosition = 0;
let framePage = this.video.previewFrames.at(-1);
for (let i = 0; i < framePage.urls.length; i++) {
for (let positionY = 0; positionY < framePage.framesPerPageY; positionY++) {
for (let positionX = 0; positionX < framePage.framesPerPageX; positionX++) {
const endPosition = startPosition + framePage.durationPerFrame;
if (position >= startPosition && position <= endPosition) {
return {
url: framePage.urls[i],
positionX: positionX,
positionY: positionY,
framesPerPageX: framePage.framesPerPageX,
framesPerPageY: framePage.framesPerPageY,
};
}
startPosition = endPosition;
}
}
}
return null;
},
// creates a new image from an URL
loadImage(url) {
return new Promise(r => {
let i = new Image();
i.onload = () => r(i);
i.src = url;
});
},
destroy(hotkeys) {
if (this.$ui && !document.pictureInPictureElement) {
this.$ui.destroy();
@ -750,4 +829,12 @@ export default {
font-size: 1.6em !important;
line-height: inherit !important;
}
#preview {
position: absolute;
z-index: 2000;
bottom: 0;
margin-bottom: 4.5%;
border-radius: 0.3rem;
}
</style>

View file

@ -42,7 +42,7 @@
"enable_sponsorblock": "تفعيل مانع الإعلانات",
"auto": "تلقائي",
"dark": "داكن",
"search": "بحث",
"search": "بحث (Ctrl+K)",
"autoplay_video": "تشغيل تلقائي",
"audio_only": "صوت فقط",
"default_quality": "الجودة الأساسية",

View file

@ -59,7 +59,7 @@
"disable_lbry": "Yayım üçün LBRY-ni deaktiv et",
"enable_lbry_proxy": "LBRY üçün Proksi-ni Aktivləşdir",
"view_ssl_score": "SSL Nəticəsinə Bax",
"search": "Axtarış",
"search": "Axtarış (Ctrl+K)",
"filter": "Filtr",
"loading": "Yüklənir...",
"clear_history": "Tarixçəni Təmizlə",
@ -80,7 +80,7 @@
"minimize_description_default": "Açıqlamanı Defolt Olaraq Kiçilt",
"language_selection": "Dil Seçimi",
"instances_list": "Nümunələr Siyahısı",
"show_more": "Daha Çox Göstər",
"show_more": "Daha çox göstər",
"no": "Xeyr",
"store_watch_history": "Baxış Tarixçəsini Saxla",
"enabled_codecs": "Aktiv Kodeklər (Birdən çox)",
@ -127,7 +127,8 @@
"skip_button_only": "Ötürmə düyməsin göstər",
"skip_automatically": "Avtomatik olaraq",
"min_segment_length": "Minimum Seqment Uzunluğu (saniyələrlə)",
"skip_segment": "Seqmenti ötür"
"skip_segment": "Seqmenti ötür",
"show_less": "Daha az göstər"
},
"comment": {
"pinned_by": "Tərəfindən Sabitləndi {author}",

View file

@ -104,7 +104,12 @@
"minimize_recommendations_default": "Smanjite preporuke po zadanom",
"reset_preferences": "Vrati postavke na zadano",
"bookmark_playlist": "Bilježak",
"playlist_bookmarked": "Obilježeno"
"playlist_bookmarked": "Obilježeno",
"show_less": "Prikaži manje",
"skip_button_only": "Prikaži dugme za preskakanje",
"skip_automatically": "Automatski",
"min_segment_length": "Najmanja dužina segmenta (u sekundama)",
"skip_segment": "Preskoči segment"
},
"titles": {
"register": "Registrirajte se",
@ -157,7 +162,9 @@
"watched": "Pogledano",
"videos": "Video zapisi",
"live": "{0} Uživo",
"shorts": "Kratki videi"
"shorts": "Kratki videi",
"category": "Kategorija",
"all": "Sve"
},
"comment": {
"pinned_by": "Prikačeno od {author}",
@ -173,6 +180,7 @@
"cannot_copy": "Nije moguće kopirati!",
"page_not_found": "Stranica nije pronađena",
"copied": "Kopirano!",
"local_storage": "Ova radnja zahtijeva lokalno pohranjivanje, jesu li kolačići omogućeni?"
"local_storage": "Ova radnja zahtijeva lokalno pohranjivanje, jesu li kolačići omogućeni?",
"register_no_email_note": "Korištenje e-maila kao korisničko ime se ne preporučuje. Svejedno nastaviti?"
}
}

View file

@ -43,7 +43,7 @@
"enabled_codecs": "Còdecs Habilitats (Múltiple)",
"instances_list": "Llista d'Instàncies",
"instance_selection": "Selecció d'Instàncies",
"show_more": "Mostrar Més",
"show_more": "Mostrar més",
"yes": "Sí",
"no": "No",
"export_to_json": "Exportar a JSON",
@ -124,7 +124,8 @@
"skip_automatically": "Automàticament",
"min_segment_length": "Longitud de segment mínima (en segons)",
"skip_segment": "Saltar segment",
"with_playlist": "Comparteix amb llista de reproducció"
"with_playlist": "Comparteix amb llista de reproducció",
"show_less": "Mostrar menys"
},
"comment": {
"pinned_by": "Fixat per {author}",
@ -150,7 +151,8 @@
"videos": "Vídeos",
"views": "{views} visualitzacions",
"shorts": "Curts",
"all": "Tot"
"all": "Tot",
"category": "Categoria"
},
"search": {
"did_you_mean": "Volies dir: {0}?",

View file

@ -60,7 +60,7 @@
"disable_lbry": "Zakázat LBRY pro streamování",
"enable_lbry_proxy": "Povolit proxy pro LBRY",
"view_ssl_score": "Zobrazit stav SSL",
"search": "Vyhledat",
"search": "Vyhledávání (Ctrl+K)",
"filter": "Filtr",
"loading": "Načítání...",
"clear_history": "Smazat historii",
@ -124,7 +124,8 @@
"skip_automatically": "Automaticky",
"skip_segment": "Přeskočit segment",
"skip_button_only": "Zobrazit tlačítko přeskočení",
"min_segment_length": "Minimální délka segmentu (v sekundách)"
"min_segment_length": "Minimální délka segmentu (v sekundách)",
"show_less": "Zobrazit méně"
},
"player": {
"watch_on": "Sledovat na {0}"

View file

@ -1,16 +1,16 @@
{
"actions": {
"skip_outro": "Abspann überspringen",
"skip_non_music": "Musik überspringen: Nicht-Musik-Bereich",
"skip_outro": "Endkarten und Abspann überspringen",
"skip_non_music": "Musik: Nicht-Musik-Abschnitte überspringen",
"skip_self_promo": "Unbezahlte Werbung/Eigenwerbung überspringen",
"skip_interaction": "Interaktionserinnerung überspringen (Abonnieren)",
"skip_preview": "Vorschau/Rückschau überspringen",
"skip_interaction": "Interaktionserinnerungen überspringen (Daumen hoch, abonnieren, ...)",
"skip_preview": "Vorschau und Rückblick überspringen",
"instances_list": "Liste der Instanzen",
"language_selection": "Sprachauswahl",
"store_watch_history": "Wiedergabeverlauf speichern",
"minimize_description_default": "Beschreibung standardmäßig minimieren",
"show_comments": "Kommentare anzeigen",
"default_homepage": "Standard-Startseite",
"default_homepage": "Startseite",
"country_selection": "Länderauswahl",
"buffering_goal": "Pufferungsziel (in Sekunden)",
"default_quality": "Standardqualität",
@ -20,9 +20,9 @@
"dark": "Dunkel",
"auto": "Automatisch",
"theme": "Farbschema",
"skip_intro": "Pausen-/Intro-Animation überspringen",
"skip_sponsors": "Sponsoren überspringen",
"enable_sponsorblock": "Sponsorblock einschalten",
"skip_intro": "Unterbrechungen und Intro-Animation überspringen",
"skip_sponsors": "Gesponsorte Videoabschnitte überspringen",
"enable_sponsorblock": "SponsorBlock verwenden",
"uses_api_from": "Verwendet die API von ",
"back": "Zurück",
"channel_name_desc": "Kanalname (Z-A)",
@ -30,18 +30,18 @@
"least_recent": "Am wenigsten neu",
"most_recent": "Am Neuesten",
"sort_by": "Sortieren nach:",
"view_subscriptions": "Abonnements anzeigen",
"view_subscriptions": "Abos anzeigen",
"unsubscribe": "Deabonnieren - {count}",
"subscribe": "Abonnieren - {count}",
"enabled_codecs": "Aktivierte Codecs (mehrere)",
"enabled_codecs": "Aktivierte Codecs (Auswahl mehrerer Codecs möglich)",
"enable_lbry_proxy": "Proxy für LBRY einschalten",
"disable_lbry": "LBRY für Streaming deaktivieren",
"instance_selection": "Instanzauswahl",
"instance_selection": "Instanz auswählen",
"show_description": "Beschreibung anzeigen",
"minimize_description": "Beschreibung minimieren",
"show_recommendations": "Empfehlungen anzeigen",
"minimize_recommendations": "Empfehlungen minimieren",
"donations": "Spenden für die Entwickler",
"donations": "Spenden",
"auto_play_next_video": "Nächstes Video automatisch abspielen",
"loop_this_video": "Dieses Video wiederholen",
"import_from_json": "Aus JSON/CSV importieren",
@ -51,32 +51,32 @@
"yes": "Ja",
"loading": "Wird geladen…",
"filter": "Filtern",
"search": "Suchen",
"search": "Suchen (Strg+K)",
"view_ssl_score": "SSL-Bewertung anzeigen",
"clear_history": "Verlauf löschen",
"hide_replies": "Antworten ausblenden",
"load_more_replies": "Mehr Antworten laden",
"skip_highlight": "Höhepunkt überspringen",
"skip_filler_tangent": "Lückenfüller überspringen",
"delete_playlist_confirm": "Diese Wiedergabeliste löschen?",
"remove_from_playlist": "Aus Wiedergabeliste entfernen",
"add_to_playlist": "Zur Wiedergabeliste hinzufügen",
"create_playlist": "Wiedergabeliste erstellen",
"delete_playlist_video_confirm": "Video aus Wiedergabeliste entfernen?",
"delete_playlist": "Wiedergabeliste löschen",
"please_select_playlist": "Bitte wählen Sie eine Wiedergabeliste",
"select_playlist": "Wählen Sie eine Wiedergabeliste",
"delete_playlist_confirm": "Diese Playlist löschen?",
"remove_from_playlist": "Aus Playlist entfernen",
"add_to_playlist": "Zur Playlist hinzufügen",
"create_playlist": "Playlist erstellen",
"delete_playlist_video_confirm": "Video aus Playlist entfernen?",
"delete_playlist": "Playlist löschen",
"please_select_playlist": "Bitte wähle eine Playlist",
"select_playlist": "Wähle eine Playlist",
"show_markers": "Markierungen auf dem Player anzeigen",
"delete_account": "Konto löschen",
"logout": "Von diesem Gerät abmelden",
"minimize_recommendations_default": "Empfehlungen standardmäßig minimieren",
"invalidate_session": "Von allen Geräte abmelden",
"invalidate_session": "Von allen Geräten abmelden",
"different_auth_instance": "Eine andere Instanz für die Authentifizierung verwenden",
"instance_auth_selection": "Auswahl der Autentifizierungsinstanz",
"clone_playlist": "Wiedergabeliste klonen",
"clone_playlist_success": "Erfolgreich geklont!",
"rename_playlist": "Wiedergabeliste umbenennen",
"new_playlist_name": "Neuer Name der Wiedergabeliste",
"clone_playlist": "Playlist duplizieren",
"clone_playlist_success": "Erfolgreich dupliziert!",
"rename_playlist": "Playlist umbenennen",
"new_playlist_name": "Neuer Name der Playlist",
"piped_link": "Piped-Link",
"download_as_txt": "Als .txt herunterladen",
"back_to_home": "Zurück zur Startseite",
@ -84,7 +84,7 @@
"with_timecode": "Mit Zeitstempel teilen",
"follow_link": "Link öffnen",
"copy_link": "Link kopieren",
"time_code": "Zeitstempel (in sekunden)",
"time_code": "Zeitstempel (in Sekunden)",
"reset_preferences": "Einstellungen zurücksetzen",
"confirm_reset_preferences": "Bist du sicher, dass du deine Einstellungen zurücksetzen möchtest?",
"backup_preferences": "Einstellungen sichern",
@ -92,23 +92,24 @@
"show_chapters": "Kapitel",
"source_code": "Quellcode",
"store_search_history": "Suchverlauf speichern",
"hide_watched": "Gesehene Videos im Feed ausblenden",
"hide_watched": "Gesehene Videos im Abo-Feed ausblenden",
"reply_count": "{count} Antworten",
"instance_donations": "Instanz-Spenden",
"documentation": "Dokumentation",
"status_page": "Status",
"minimize_chapters_default": "Kapitel standardmäßig minimieren",
"minimize_comments_default": "Kommentare automatisch minimieren",
"minimize_comments_default": "Kommentare standardmäßig minimieren",
"minimize_comments": "Kommentare minimieren",
"no_valid_playlists": "Die Datei enthält keine gültigen Wiedergabelisten!",
"no_valid_playlists": "Die Datei enthält keine gültigen Playlists!",
"show_watch_on_youtube": "Schaltfläche „Auf YouTube ansehen“ anzeigen",
"with_playlist": "Mit Wiedergabeliste teilen",
"with_playlist": "Mit Playlist teilen",
"playlist_bookmarked": "Markiert",
"bookmark_playlist": "Lesezeichen",
"skip_segment": "Segment überspringen",
"skip_segment": "Abschnitt überspringen",
"skip_automatically": "Automatisch",
"min_segment_length": "Minimale Segmentlänge (in Sekunden)",
"skip_button_only": "Überspringen-Schaltfläche anzeigen"
"min_segment_length": "Minimale Abschnittlänge (in Sekunden)",
"skip_button_only": "Überspringen-Schaltfläche anzeigen",
"show_less": "Weniger anzeigen"
},
"player": {
"watch_on": "Auf {0} ansehen"
@ -116,12 +117,12 @@
"titles": {
"history": "Verlauf",
"preferences": "Einstellungen",
"feed": "Abonnements",
"feed": "Abos",
"register": "Registrieren",
"login": "Anmelden",
"trending": "Trends",
"subscriptions": "Abonnements",
"playlists": "Wiedergabelisten",
"subscriptions": "Abos",
"playlists": "Playlists",
"account": "Konto",
"player": "Player",
"instance": "Instanz",
@ -130,7 +131,7 @@
"bookmarks": "Lesezeichen"
},
"video": {
"sponsor_segments": "Sponsoren-Segmente",
"sponsor_segments": "Sponsoren-Abschnitte",
"watched": "Angesehen",
"views": "{views} Aufrufe",
"videos": "Videos",
@ -154,32 +155,32 @@
"pinned_by": "Angeheftet von {author}",
"user_disabled": "Kommentare wurden in den Einstellungen deaktiviert.",
"disabled": "Kommentare wurden vom Autor deaktiviert.",
"loading": "Kommentare werden geladen …"
"loading": "Kommentare werden geladen…"
},
"login": {
"password": "Passwort",
"username": "Anmeldename"
"username": "Benutzername"
},
"search": {
"did_you_mean": "Hast du gemeint: {0}?",
"all": "YouTube: Alle",
"videos": "YouTube: Videos",
"channels": "YouTube: Kanäle",
"playlists": "YouTube: Wiedergabelisten",
"playlists": "YouTube: Playlists",
"music_songs": "YT Music: Lieder",
"music_videos": "YT Music: Videos",
"music_albums": "YT Music: Alben",
"music_playlists": "YT Music: Wiedergabelisten"
"music_playlists": "YT Music: Playlists"
},
"subscriptions": {
"subscribed_channels_count": "Aboniert bei: {0}"
"subscribed_channels_count": "Anzahl Abos: {0}"
},
"info": {
"preferences_note": "Achtung: Einstellung werden lokal in deinem Browser gespeichert. Wenn du deine Browserdaten löschst werden sie auch gelöscht.",
"preferences_note": "Achtung: Die Einstellung werden lokal in deinem Browser gespeichert. Wenn du deine Browserdaten löschst, werden auch deine Einstellungen zurückgesetzt.",
"page_not_found": "Seite nicht gefunden",
"copied": "Kopiert!",
"cannot_copy": "Kopieren nicht möglich!",
"local_storage": "Diese Aktion erfordert „localStorage“, sind Cookies aktiviert?",
"register_no_email_note": "Es wird nicht empfohlen, eine E-Mail als Benutzernamen zu verwenden. Trotzdem weitermachen?"
"register_no_email_note": "Es wird nicht empfohlen, eine E-Mail als Benutzernamen zu verwenden. Trotzdem fortfahren?"
}
}

View file

@ -79,7 +79,7 @@
"disable_lbry": "Disable LBRY for Streaming",
"enable_lbry_proxy": "Enable Proxy for LBRY",
"view_ssl_score": "View SSL Score",
"search": "Search",
"search": "Search (Ctrl+K)",
"filter": "Filter",
"loading": "Loading...",
"clear_history": "Clear History",

View file

@ -45,12 +45,12 @@
"show_comments": "Montri Komentojn",
"language_selection": "Lingva Elekto",
"donations": "Donacoj por programado",
"show_more": "Montri Pli",
"show_more": "Montri pli",
"yes": "Jes",
"no": "Ne",
"show_chapters": "Sekcioj",
"filter": "Filtri",
"search": "Serĉi",
"search": "Serĉi (Ctrl+K)",
"hide_replies": "Kaŝi Respondojn",
"add_to_playlist": "Aldoni al ludlisto",
"delete_playlist": "Forigi Ludliston",
@ -127,7 +127,8 @@
"skip_automatically": "Aŭtomate",
"skip_button_only": "Montri preterpasi-butonon",
"min_segment_length": "Minimuma Segmenta Daŭro (en sekundoj)",
"skip_segment": "Preterpasi Segmenton"
"skip_segment": "Preterpasi Segmenton",
"show_less": "Montri malpli"
},
"video": {
"chapters": "Sekcioj",

View file

@ -76,7 +76,7 @@
"subscribe": "Suscribirme - {count}",
"loading": "Cargando…",
"filter": "Filtrar",
"search": "Buscar",
"search": "Buscar (Ctrl+K)",
"view_ssl_score": "Ver la puntuación SSL",
"minimize_recommendations": "Minimizar recomendaciones",
"show_recommendations": "Mostrar recomendaciones",
@ -135,7 +135,8 @@
"skip_button_only": "Muestra botón de saltar",
"skip_automatically": "Automáticamente",
"min_segment_length": "Mínima Duración de Segmento (en segundos)",
"skip_segment": "Saltar Segmento"
"skip_segment": "Saltar Segmento",
"show_less": "Mostrar menos"
},
"titles": {
"feed": "Fuente web",

View file

@ -124,7 +124,8 @@
"skip_button_only": "Afficher le bouton de saut",
"skip_automatically": "Automatiquement",
"min_segment_length": "Longueur minimale du segment (en secondes)",
"skip_segment": "Sauter le segment"
"skip_segment": "Sauter le segment",
"show_less": "Afficher moins"
},
"player": {
"watch_on": "Regarder sur {0}"

View file

@ -100,7 +100,7 @@
"disable_lbry": "השבתת הזרמה עם LBRY",
"enable_lbry_proxy": "הפעלת מתווך ל־LBRY",
"view_ssl_score": "הצגת דירוג SSL",
"search": "חיפוש",
"search": "חיפוש (Ctrl+K)",
"loop_this_video": "ניגון הסרטון בלולאה",
"minimize_recommendations": "מזעור המלצות",
"rename_playlist": "שינוי שם רשימת נגינה",

View file

@ -78,7 +78,7 @@
"enable_sponsorblock": "Uključi blok sponsora",
"loading": "Učitavanje…",
"filter": "Filtar",
"search": "Pretraga",
"search": "Pretraga (Ctrl+K)",
"view_ssl_score": "Pogledaj SSL ocjenu",
"hide_replies": "Sakrij odgovore",
"load_more_replies": "Prikaži više odgovora",
@ -135,7 +135,8 @@
"skip_button_only": "Prikaži gumb za preskakanje",
"skip_automatically": "Automatski",
"skip_segment": "Preskoči segment",
"min_segment_length": "Najmanja duljina segmenta (u sekundama)"
"min_segment_length": "Najmanja duljina segmenta (u sekundama)",
"show_less": "Prikaži manje"
},
"player": {
"watch_on": "Gledaj na {0}"

View file

@ -50,7 +50,7 @@
"instances_list": "Daftar Instansi",
"enabled_codecs": "Kodek yang Diaktifkan (Beberapa)",
"instance_selection": "Pemilihan Instansi",
"show_more": "Tampilkan Lebih Banyak",
"show_more": "Tampilkan lebih banyak",
"yes": "Iya",
"no": "Tidak",
"import_from_json": "Impor dari JSON/CSV",
@ -64,7 +64,7 @@
"disable_lbry": "Nonaktifkan LBRY untuk Streaming",
"enable_lbry_proxy": "Aktifkan Proksi untuk LBRY",
"view_ssl_score": "Tampilkan Skor SSL",
"search": "Telusuri",
"search": "Telusuri (Ctrl+K)",
"filter": "Saring",
"loading": "Memuat...",
"clear_history": "Hapus Riwayat",
@ -127,7 +127,8 @@
"skip_button_only": "Tampilkan tombol lewati",
"skip_automatically": "Secara otomatis",
"min_segment_length": "Panjang Segmen Minimum (dalam detik)",
"skip_segment": "Lewati Segmen"
"skip_segment": "Lewati Segmen",
"show_less": "Tampilkan lebih sedikit"
},
"comment": {
"pinned_by": "Dipasangi pin oleh {author}",

View file

@ -51,7 +51,7 @@
"instance_selection": "Selezione dell'istanza",
"loading": "Caricamento…",
"filter": "Filtra",
"search": "Cerca",
"search": "Cerca (Ctrl+K)",
"view_ssl_score": "Visualizza il punteggio SSL",
"clear_history": "Cancella la cronologia",
"load_more_replies": "Carica più risposte",
@ -108,7 +108,8 @@
"min_segment_length": "Lunghezza minima del segmento (in secondi)",
"skip_automatically": "Automaticamente",
"skip_button_only": "Mostra pulsante di salto",
"skip_segment": "Salta segmento"
"skip_segment": "Salta segmento",
"show_less": "Mostra meno"
},
"player": {
"watch_on": "Guarda su {0}"

View file

@ -69,7 +69,7 @@
"disable_lbry": "ストリーミングのLBRYを無効化",
"enable_lbry_proxy": "LBRYプロキシをオン",
"view_ssl_score": "SSLの評価を表示",
"search": "検索",
"search": "検索 (Ctrl+K)",
"filter": "フィルター",
"loading": "読み込み中…",
"clear_history": "再生履歴を削除",
@ -127,7 +127,8 @@
"skip_automatically": "自動",
"skip_button_only": "スキップボタン表示",
"skip_segment": "ここをスキップ",
"min_segment_length": "最小の区切りの長さ (秒)"
"min_segment_length": "最小の区切りの長さ (秒)",
"show_less": "少なく見る"
},
"comment": {
"pinned_by": "{author} によって固定",

View file

@ -20,7 +20,7 @@
"skip_self_promo": "Onbetaalde/Zelf-promotie Overslaan",
"skip_highlight": "Markering Overslaan",
"skip_interaction": "Interactieherinnering Overslaan (Abonneren)",
"show_more": "Toon Meer",
"show_more": "Toon meer",
"unsubscribe": "Afmelden - {count}",
"view_subscriptions": "Abonnementen Bekijken",
"enable_sponsorblock": "Sponsorblok Inschakelen",
@ -108,7 +108,8 @@
"skip_automatically": "Automatisch",
"skip_button_only": "toon de overslaan knop",
"min_segment_length": "Minimale segmentlengte (in seconden)",
"skip_segment": "segment overslaan"
"skip_segment": "segment overslaan",
"show_less": "Toon minder"
},
"titles": {
"register": "Registreren",

View file

@ -41,7 +41,7 @@
"minimize_recommendations": "Minimizar las recomandacions",
"enable_lbry_proxy": "Activar lo servidor mandatari per LBRY",
"view_ssl_score": "Mostrar lavaloracion SSL",
"search": "Recercar",
"search": "Recercar (Ctrl+K)",
"filter": "Filtrar",
"disable_lbry": "Desactivar LBRY per la difusion en dirècte",
"loading": "Cargament…",
@ -127,7 +127,8 @@
"skip_button_only": "Afichar lo boton per sautar",
"skip_automatically": "Automaticament",
"min_segment_length": "Durada minimum de segment (en segondas)",
"skip_segment": "Sautar lo segment"
"skip_segment": "Sautar lo segment",
"show_less": "Ne mostrar mens"
},
"preferences": {
"instance_locations": "Localizacion de linstància",

View file

@ -33,7 +33,7 @@
"minimize_recommendations": "ସୁପାରିଶକୁ କମ୍ କରନ୍ତୁ",
"show_recommendations": "ସୁପାରିଶଗୁଡିକ ଦେଖାନ୍ତୁ",
"disable_lbry": "ଷ୍ଟ୍ରିମିଂ ପାଇଁ LBRY ଅକ୍ଷମ କରନ୍ତୁ",
"search": "ସନ୍ଧାନ କରନ୍ତୁ",
"search": "ସନ୍ଧାନ କରନ୍ତୁ (Ctrl+K)",
"rename_playlist": "ପ୍ଲେ ଲିଷ୍ଟର ନାମ ପରିବର୍ତ୍ତନ କରନ୍ତୁ",
"new_playlist_name": "ନୂତନ ପ୍ଲେଲିଷ୍ଟ ନାମ",
"channel_name_asc": "ସ୍ରୋତ ର ନାମ (A-Z)",
@ -127,7 +127,8 @@
"min_segment_length": "ସର୍ବନିମ୍ନ ସେଗମେଣ୍ଟ ଲମ୍ବ (ସେକେଣ୍ଡରେ)",
"skip_button_only": "ସ୍କିପ୍ ବଟନ୍ ଦେଖାନ୍ତୁ",
"skip_automatically": "ସ୍ୱୟଂଚାଳିତ ଭାବରେ",
"skip_segment": "ସେଗମେଣ୍ଟକୁ ଏଡ଼ାଇଦିଅ"
"skip_segment": "ସେଗମେଣ୍ଟକୁ ଏଡ଼ାଇଦିଅ",
"show_less": "କମ୍ ଦେଖାନ୍ତୁ"
},
"comment": {
"loading": "ମନ୍ତବ୍ୟ ଲୋଡ୍ ହେଉଛି ...",

View file

@ -68,10 +68,10 @@
"show_description": "Pokaż opis",
"minimize_recommendations": "Ukryj proponowane",
"show_recommendations": "Pokaż proponowane",
"disable_lbry": "Wyłącz LBRY dla streaming-u",
"disable_lbry": "Wyłącz LBRY dla przesyłania strumieniowego",
"enable_lbry_proxy": "Włącz proxy dla LBRY",
"view_ssl_score": "Pokaż ocenę SSL",
"search": "Szukaj",
"search": "Szukaj (Ctrl+K)",
"filter": "Filtruj",
"loading": "Ładowanie...",
"clear_history": "Wyczyść historię",
@ -127,7 +127,8 @@
"skip_button_only": "Pokaż przycisk pomijania",
"skip_automatically": "Automatycznie",
"min_segment_length": "Minimalna długość segmentu (w sekundach)",
"skip_segment": "Pomiń segment"
"skip_segment": "Pomiń segment",
"show_less": "Pokaż mniej"
},
"comment": {
"pinned_by": "Przypięty przez {author}",
@ -155,7 +156,7 @@
"sponsor_segments": "Segmenty sponsorowane",
"ratings_disabled": "Ocenianie wyłączone",
"chapters": "Rozdziały",
"live": "{0} Na żywo",
"live": "{0} na żywo",
"shorts": "Krótkie wideo",
"all": "Wszystkie",
"category": "Kategoria"

View file

@ -39,7 +39,7 @@
"instances_list": "Lista de Instâncias",
"enabled_codecs": "\"Codecs\" Activados (Vários)",
"instance_selection": "Seleção de Instância",
"show_more": "Mostrar Mais",
"show_more": "Mostrar mais",
"import_from_json": "Importar de JSON/CSV",
"export_to_json": "Exportar para JSON",
"loop_this_video": "Repetir este Vídeo",
@ -51,7 +51,7 @@
"disable_lbry": "Desactivar \"LBRY\" para Transmissão",
"enable_lbry_proxy": "Activar \"Proxy\" para \"LBRY\"",
"view_ssl_score": "Ver Pontuação \"SSL\"",
"search": "Procurar",
"search": "Pesquisa (Ctrl+K)",
"filter": "Filtrar",
"loading": "A Carregar...",
"clear_history": "Limpar Histórico",
@ -124,7 +124,8 @@
"skip_button_only": "Mostrar botão saltar",
"skip_automatically": "Automaticamente",
"min_segment_length": "Comprimento Mínimo do Segmento (em segundos)",
"skip_segment": "Saltar Segmento"
"skip_segment": "Saltar Segmento",
"show_less": "Mostrar menos"
},
"preferences": {
"instance_name": "Nome da Instância",

View file

@ -36,7 +36,7 @@
"enabled_codecs": "Codecs Ativados (Múltiplos)",
"language_selection": "Seleção de Idioma",
"yes": "Sim",
"show_more": "Mostrar Mais",
"show_more": "Mostrar mais",
"export_to_json": "Exportar para JSON",
"donations": "Doações de desenvolvimento",
"minimize_recommendations": "Minimizar Recomendações",
@ -59,7 +59,7 @@
"loop_this_video": "Repetir este Vídeo",
"instances_list": "Lista de Instâncias",
"clear_history": "Limpar Histórico",
"search": "Pesquisar",
"search": "Pesquisar (Ctrl+K)",
"no": "Não",
"show_description": "Exibir Descrição",
"instance_selection": "Seleção de Instância",
@ -108,7 +108,8 @@
"skip_automatically": "Automaticamente",
"skip_segment": "Ignorar Segmento",
"min_segment_length": "Comprimento Mínimo do Segmento (em segundos)",
"skip_button_only": "Mostrar botão pular"
"skip_button_only": "Mostrar botão pular",
"show_less": "Mostrar menos"
},
"titles": {
"history": "Histórico",

View file

@ -46,7 +46,7 @@
"language_selection": "Seleção de Idioma",
"enabled_codecs": "\"Codecs\" Activados (Vários)",
"instance_selection": "Seleção de Instância",
"show_more": "Mostrar Mais",
"show_more": "Mostrar mais",
"import_from_json": "Importar de JSON/CSV",
"loop_this_video": "Repetir este Vídeo",
"auto_play_next_video": "Reproduzir Automaticamente o próximo Vídeo",
@ -56,7 +56,7 @@
"minimize_recommendations": "Minimizar Recomendações",
"show_recommendations": "Mostrar Recomendações",
"view_ssl_score": "Ver Pontuação \"SSL\"",
"search": "Procurar",
"search": "Pesquisa (Ctrl+K)",
"hide_replies": "Ocultar Respostas",
"load_more_replies": "Carregar mais Respostas",
"unsubscribe": "Anular subscrição - {count}",
@ -124,7 +124,8 @@
"skip_button_only": "Mostrar botão saltar",
"skip_automatically": "Automaticamente",
"min_segment_length": "Comprimento Mínimo do Segmento (em segundos)",
"skip_segment": "Saltar Segmento"
"skip_segment": "Saltar Segmento",
"show_less": "Mostrar menos"
},
"comment": {
"pinned_by": "Afixado por {author}",

View file

@ -1,163 +1,164 @@
{
"actions": {
"back_to_home": "Înapoi acasă",
"store_search_history": "Salveaza Istoric de Cautări",
"with_timecode": "Distribuie cu cod de timp",
"store_search_history": "Rețineți istoricul de căutări",
"with_timecode": "Distribuiți cu timpul de cod",
"piped_link": "Link Piped",
"time_code": "Cod de timp (secunde)",
"show_chapters": "Capitole",
"search": "Caută",
"logout": "Scoate contul de pe acest dispozitiv",
"add_to_playlist": "Adaugă în Playlist",
"remove_from_playlist": "Șterge din Playlist",
"create_playlist": "Creează Playlist",
"delete_playlist": "Șterge Playlist",
"delete_playlist_confirm": "Ștergi acest playlist?",
"please_select_playlist": "Te rog să alegi un playlist",
"minimize_recommendations_default": "Ascunde Recomandări ca default",
"subscribe": "Abonează-te - {count}",
"least_recent": "Mai puțin recente",
"channel_name_asc": "Nume Canal (A-Z)",
"channel_name_desc": "Nume Canal (Z-A)",
"search": "Căutare (Ctrl+K)",
"logout": "Deconectați-vă de pe acest dispozitiv",
"add_to_playlist": "Adăugare în playlist",
"remove_from_playlist": "Ștergere din playlist",
"create_playlist": "Creați playlist",
"delete_playlist": "Ștergeți playlist",
"delete_playlist_confirm": "Ștergi acest playlist?",
"please_select_playlist": "Vă rugăm să alegeți un playlist",
"minimize_recommendations_default": "Minimizați recomandările în mod implicit",
"subscribe": "Abonare - {count}",
"least_recent": "Cele mai vechi",
"channel_name_asc": "Numele canalului (A-Z)",
"channel_name_desc": "Nume canalului (Z-A)",
"back": "Înapoi",
"uses_api_from": "Folosește API de la ",
"enable_sponsorblock": "Activează Sponsorblock",
"skip_intro": "Sari animația de Intermisie / Intro",
"skip_preview": "Sari Preview / Recapitulare",
"skip_self_promo": "Sari Promoția Neplătita / Proprie",
"skip_non_music": "Sari Muzica: Secțiunea de Non-Muzică",
"skip_highlight": "Sari Highlight",
"show_markers": "Arată Marcaje in Player",
"uses_api_from": "Se folosește API-ul de la ",
"enable_sponsorblock": "Activați Sponsorblock",
"skip_intro": "Omitere pauze/animații de intro",
"skip_preview": "Omitere previzualizare/recapitulare",
"skip_self_promo": "Omitere promoție neplătită/autopromovare",
"skip_non_music": "Omitere muzică: Secțiune non-muzicală",
"skip_highlight": "Omitere evidențiere",
"show_markers": "Se afișează marcatori în player",
"dark": "Întunecat",
"auto": "Auto",
"audio_only": "Doar Audio",
"default_quality": "Calitate Default",
"country_selection": "Selecție Țară",
"default_homepage": "Pagina de Acasă",
"minimize_comments_default": "Ascunde Comentariile",
"minimize_description_default": "Ascunde Descrierea",
"language_selection": "Selecție Limbă",
"audio_only": "Doar audio",
"default_quality": "Calitate implicită",
"country_selection": "Selecție țară",
"default_homepage": "Pagina principală implicită",
"minimize_comments_default": "Minimizați comentariile în mod implicit",
"minimize_description_default": "Minimizați descrierea în mod implicit",
"language_selection": "Selecție limbă",
"instances_list": "Listă de Instanțe",
"enabled_codecs": "Activează Codecuri (Multiple)",
"loop_this_video": "Repornește Video-ul",
"donations": "Donații",
"show_recommendations": "Arată Recomandări",
"disable_lbry": "Oprește LBRY pentru Streaming",
"enable_lbry_proxy": "Activează Proxy pentru LBRY",
"view_ssl_score": "Vezi Scor SSL",
"enabled_codecs": "Codecuri activate (multiple)",
"loop_this_video": "Repetare video",
"donations": "Donații pentru dezvoltare",
"show_recommendations": "Afișați recomandările",
"disable_lbry": "Dezactivați LBRY pentru streaming",
"enable_lbry_proxy": "Activați proxy pentru LBRY",
"view_ssl_score": "Vedeți scorul SSL",
"filter": "Filtru",
"loading": "Se încarcă...",
"clear_history": "Șterge Istoric",
"hide_replies": "Ascunde răspunsuri",
"load_more_replies": "Mai multe Răspunsuri",
"delete_playlist_video_confirm": "Ștergi video-ul din playlist?",
"select_playlist": "Alege un Playlist",
"delete_account": "Șterge Contul",
"show_watch_on_youtube": "Arata buton de Vezi pe YouTube",
"invalidate_session": "Deconectează-te peste tot",
"instance_auth_selection": "Selecție Instanță de Autentificare",
"clone_playlist_success": "Clonat cu succes!",
"reset_preferences": "Resetează preferințele",
"confirm_reset_preferences": "Sigur vrei să îți resetezi preferințele?",
"rename_playlist": "Redenumește playlist",
"new_playlist_name": "Nume playlist nou",
"share": "Distribuie",
"follow_link": "Deschide link",
"copy_link": "Copiază link",
"hide_watched": "Ascunde video-urile vizionate",
"clear_history": "Ștergeți istoricul",
"hide_replies": "Ascundeți răspunsurile",
"load_more_replies": "Mai multe răspunsuri",
"delete_playlist_video_confirm": "Ștergeți videoclipul din playlist?",
"select_playlist": "Selectați un playlist",
"delete_account": "Ștergeți-vă contul",
"show_watch_on_youtube": "Afișați butonul „Vizionați pe YouTube”",
"invalidate_session": "Deconectați toate dispozitivele",
"instance_auth_selection": "Selecție instanță de autentificare",
"clone_playlist_success": "Clonată cu succes!",
"reset_preferences": "Resetați preferințele",
"confirm_reset_preferences": "Sunteți sigur că doriți să vă resetați preferințele?",
"rename_playlist": "Redenumiți playlist-ul",
"new_playlist_name": "Numele playlist-ului nou",
"share": "Distribuiți",
"follow_link": "Urmați link-ul",
"copy_link": "Copiați link-ul",
"hide_watched": "Ascundeți videoclipurile vizionate din flux",
"documentation": "Documentație",
"status_page": "Status",
"source_code": "Cod sursă",
"instance_donations": "Donații instanță",
"reply_count": "{count} răspunsuri",
"minimize_chapters_default": "Ascunde Capitole ca default",
"skip_sponsors": "Sari Sponsori",
"different_auth_instance": "Folosește altă instanță pentru autentificare",
"clone_playlist": "Clonează Playlist",
"backup_preferences": "Backup preferințe",
"unsubscribe": "Dezabonează-te - {count}",
"view_subscriptions": "Vezi Subscripții",
"sort_by": "Sortează după:",
"download_as_txt": "Descarcă ca .txt",
"most_recent": "Cele mai Recente",
"skip_outro": "Sari Endcards / Credite",
"skip_interaction": "Sari Reminder de interacțiune (Subscribe)",
"minimize_chapters_default": "Minimizați capitolele în mod implicit",
"skip_sponsors": "Omitere sponsori",
"different_auth_instance": "Folosiți o instanță diferită pentru autentificare",
"clone_playlist": "Clonați lista de redare",
"backup_preferences": "Faceți backup la preferințe",
"unsubscribe": "Dezabonare - {count}",
"view_subscriptions": "Vedeți abonamentele",
"sort_by": "Sortare după:",
"download_as_txt": "Descărcați ca .txt",
"most_recent": "Cele mai recente",
"skip_outro": "Omitere carduri de sfârșit/mulțumiri",
"skip_interaction": "Omitere reamintiri de interacțiune (abonare)",
"light": "Luminat",
"restore_preferences": "Restore preferințe",
"skip_filler_tangent": "Sari Tangenta Filler",
"restore_preferences": "Restaurați preferințele",
"skip_filler_tangent": "Omitere tangentă de umplere",
"theme": "Temă",
"autoplay_video": "Autopornește Video",
"buffering_goal": "Buffering Goal (secunde)",
"instance_selection": "Selecție Instanță",
"store_watch_history": "Salvează Istoricul de Vizionare",
"minimize_comments": "Ascunde Comentarii",
"minimize_description": "Ascunde Descriere",
"show_more": "Mai Mult",
"autoplay_video": "Redare automată video",
"buffering_goal": "Obiectiv de tamponare (în secunde)",
"instance_selection": "Selecție instanță",
"store_watch_history": "Rețineți istoricul de vizionări",
"minimize_comments": "Minimizați comentariile",
"minimize_description": "Minimizați descrierea",
"show_more": "Mai mult",
"no": "Nu",
"export_to_json": "Exportă ca JSON",
"import_from_json": "Importă din JSON/CSV",
"auto_play_next_video": "Autopornește următorul Video",
"minimize_recommendations": "Ascunde Recomandări",
"export_to_json": "Exportați ca JSON",
"import_from_json": "Importați din JSON/CSV",
"auto_play_next_video": "Redați automat următorul video",
"minimize_recommendations": "Minimizați recomandările",
"yes": "Da",
"show_comments": "Arată Comentarii",
"show_description": "Arată Descriere",
"bookmark_playlist": "Marcaj",
"show_comments": "Afișați comentariile",
"show_description": "Afișați descrierea",
"bookmark_playlist": "Marcați",
"no_valid_playlists": "Fișierul nu conține playlist-uri valide!",
"skip_automatically": "Automat",
"min_segment_length": "Lungimea minimă a segmentului (în secunde)",
"skip_segment": "Sări segmentul",
"skip_button_only": "Afișează butonul de săritură",
"with_playlist": "Distribuie cu playlist",
"playlist_bookmarked": "Marcat"
"skip_segment": "Omitere segment",
"skip_button_only": "Afișați butonul de omitere",
"with_playlist": "Distribuiți cu playlist",
"playlist_bookmarked": "Marcat",
"show_less": "Mai puțin"
},
"preferences": {
"ssl_score": "Scor SSL",
"version": "Versiune",
"up_to_date": "Actualizat?",
"instance_name": "Nume Instanță",
"instance_locations": "Locațiile Instanței",
"instance_name": "Nume instanță",
"instance_locations": "Locațiile instanței",
"has_cdn": "Are CDN?",
"registered_users": "Useri Înregistrați"
"registered_users": "Utilizatori înregistrați"
},
"comment": {
"user_disabled": "Comentariile sunt dezactivate în setări.",
"pinned_by": "Pomovat de {author}",
"disabled": "Comentariile sunt dezactivate de creator.",
"loading": "Se incarcă comentariile..."
"pinned_by": "Fixat de {author}",
"disabled": "Comentariile sunt dezactivate de către autor.",
"loading": "Se încarcă comentariile..."
},
"video": {
"views": "{views} vizionări",
"chapters": "Capitole",
"shorts": "Shorts",
"watched": "Văzut",
"sponsor_segments": "Segmente Sponsori",
"ratings_disabled": "Like-uri dezactivate",
"live": "{0} Live",
"videos": "Video-uri",
"watched": "Vizionat",
"sponsor_segments": "Segmente sponsori",
"ratings_disabled": "Evaluări dezactivate",
"live": "{0} în direct",
"videos": "Videoclipuri",
"category": "Categorie",
"all": "Tot"
},
"login": {
"username": "Nume User",
"username": "Nume de utilizator",
"password": "Parolă"
},
"search": {
"videos": "YouTube: Video-uri",
"music_playlists": "YT Music: Playlisturi",
"did_you_mean": "Voiai să scrii: {0}?",
"videos": "YouTube: Videoclipuri",
"music_playlists": "YT Music: Liste de redare",
"did_you_mean": "Vă refereați la: {0}?",
"all": "YouTube: Toate",
"channels": "YouTube: Canale",
"playlists": "YouTube: Playlisturi",
"music_songs": "YT Music: Cântece",
"music_videos": "YT Music: Video-uri",
"playlists": "YouTube: Liste de redare",
"music_songs": "YT Music: Muzică",
"music_videos": "YT Music: Videoclipuri",
"music_albums": "YT Music: Albume"
},
"info": {
"cannot_copy": "Nu se poate copia!",
"preferences_note": "Sfat: preferințele sunt salvate in memoria locala a browserului tău. Ștergând datele browserului le ștergi si pe ele.",
"page_not_found": "Pagină negăsită",
"copied": "S-a copiat!",
"register_no_email_note": "Utilizarea unui e-mail ca nume de utilizator nu este recomandată. Continui oricum?",
"cannot_copy": "Nu s-a putut copia!",
"preferences_note": "Notă: preferințele sunt salvate în memoria locală a browserului dvs. Ștergerea datelor din browserul dvs. le va reseta.",
"page_not_found": "Pagina nu a fost găsită",
"copied": "Copiat!",
"register_no_email_note": "Utilizarea unui e-mail ca nume de utilizator nu este recomandată. Continui oricum?",
"local_storage": "Această acțiune necesită localStorage, sunt activate cookie-urile?"
},
"subscriptions": {
@ -166,20 +167,20 @@
"titles": {
"register": "Înregistrare",
"history": "Istoric",
"subscriptions": "Abonări",
"playlists": "Playlisturi",
"subscriptions": "Abonamente",
"playlists": "Liste de redare",
"account": "Cont",
"instance": "Instanță",
"login": "Logare",
"feed": "Abonări",
"trending": "Trending",
"livestreams": "Live-uri",
"login": "Autentificare",
"feed": "Flux",
"trending": "Tendințe",
"livestreams": "Fluxuri live",
"channels": "Canale",
"preferences": "Preferințe",
"player": "Player",
"bookmarks": "Marcaje"
},
"player": {
"watch_on": "Vezi pe {0}"
"watch_on": "Vizionați pe {0}"
}
}

View file

@ -69,7 +69,7 @@
"disable_lbry": "Отключить LBRY для стриминга",
"enable_lbry_proxy": "Проксировать видео для LBRY",
"view_ssl_score": "Посмотреть настройки SSL",
"search": "Поиск",
"search": "Поиск (Ctrl+K)",
"filter": "Фильтр",
"loading": "Загрузка...",
"clear_history": "Очистить историю",
@ -127,7 +127,8 @@
"skip_automatically": "Автоматически",
"min_segment_length": "Минимальная длина сегмента (в секундах)",
"skip_button_only": "Показать кнопку \"Пропустить\"",
"skip_segment": "Пропустить сегмент"
"skip_segment": "Пропустить сегмент",
"show_less": "Показать меньше"
},
"comment": {
"pinned_by": "Закреплено пользователем {author}",

View file

@ -61,7 +61,7 @@
"instances_list": "සේවාදායක ලැයිස්තුව",
"instance_selection": "සේවාදායකය තේරීම",
"view_ssl_score": "SSL ලකුණු බලන්න",
"search": "සොයන්න",
"search": "සොයන්න (Ctrl+K)",
"loading": "පූරණය වෙමින්...",
"hide_replies": "පිළිතුරු සඟවන්න",
"load_more_replies": "තවත් පිළිතුරු පූරණය කරන්න",
@ -124,7 +124,8 @@
"skip_button_only": "මඟ හරින්න බොත්තම පෙන්වන්න",
"skip_automatically": "ස්වයංක්‍රීයව",
"skip_segment": "කොටස මඟ හරින්න",
"min_segment_length": "අවම කොටස් දිග (තත්පර වලින්)"
"min_segment_length": "අවම කොටස් දිග (තත්පර වලින්)",
"show_less": "අඩුවෙන් පෙන්වන්න"
},
"player": {
"watch_on": "{0} එකේ නරඹන්න"

View file

@ -7,7 +7,9 @@
"ratings_disabled": "Оцене су онемогућене",
"chapters": "Поглавља",
"live": "{0} Уживо",
"shorts": "Кратки видео снимци"
"shorts": "Кратки видео снимци",
"all": "Све",
"category": "Категорија"
},
"actions": {
"view_ssl_score": "Погледај SSL скор/оцену",
@ -114,7 +116,12 @@
"no_valid_playlists": "Датотека не садржи важеће пописе снимака!",
"with_playlist": "Делите са пописом снимака",
"playlist_bookmarked": "Обиљежено",
"bookmark_playlist": "Биљежак"
"bookmark_playlist": "Биљежак",
"show_less": "Прикажи мање",
"skip_button_only": "Прикажи дугме за прескакање",
"skip_automatically": "Аутоматски",
"min_segment_length": "Најмања дужина сегмента (у секундама)",
"skip_segment": "Прескочи сегмент"
},
"preferences": {
"instance_locations": "Локација инстанце",

View file

@ -142,5 +142,8 @@
},
"information": {
"preferences_note": "Observera: inställningar sparas i webbläsarens lokala lagring. Om du raderar dina webbläsardata återställs de."
},
"info": {
"register_no_email_note": "Det rekommenderas inte att använda e-post som användarnamn. Fortsätt ändå?"
}
}

View file

@ -49,7 +49,7 @@
"instance_selection": "Örnek Seçimi",
"loading": "Yükleniyor...",
"filter": "Filtrele",
"search": "Ara",
"search": "Ara (Ctrl+K)",
"view_ssl_score": "SSL Puanını Görüntüle",
"minimize_recommendations": "Önerileri Küçült",
"show_recommendations": "Önerileri Göster",

View file

@ -115,7 +115,8 @@
"skip_button_only": "Показати кнопку пропуску",
"skip_segment": "Пропустити сегмент",
"skip_automatically": "Автоматично",
"min_segment_length": "Мінімальна довжина сегмента (у секундах)"
"min_segment_length": "Мінімальна довжина сегмента (у секундах)",
"show_less": "Показати менше"
},
"titles": {
"register": "Реєстрація",

View file

@ -49,7 +49,7 @@
"subscribe": "订阅 - {count}",
"loading": "正在加载...",
"filter": "筛选",
"search": "搜索",
"search": "搜索 (Ctrl+K)",
"view_ssl_score": "查看 SSL 得分",
"minimize_recommendations": "最小化建议",
"show_recommendations": "显示推荐",

View file

@ -159,7 +159,8 @@ const mixin = {
(value = new URLSearchParams(window.location.search).get(key)) !== null ||
(this.testLocalStorage && (value = localStorage.getItem(key)) !== null)
) {
return Number(value);
const num = Number(value);
return isNaN(num) ? defaultVal : num;
} else return defaultVal;
},
getPreferenceJSON(key, defaultVal) {