Update Piped & EFY, Fix Glitches, Add "No Background" option for comments

This commit is contained in:
dragos-efy 2024-03-01 15:02:54 +02:00
commit a77575b55a
39 changed files with 1062 additions and 933 deletions

View file

@ -23,21 +23,21 @@ jobs:
- run: pnpm install - run: pnpm install
- run: pnpm build && ./localizefonts.sh && mv dist/ dist-ci/ - run: pnpm build && ./localizefonts.sh && mv dist/ dist-ci/
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@v3
with: with:
platforms: all platforms: all
- name: Set up Docker Buildx - name: Set up Docker Buildx
id: buildx id: buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v3
with: with:
version: latest version: latest
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v2 uses: docker/login-action@v3
with: with:
username: ${{ secrets.DOCKER_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }} password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push - name: Build and push
uses: docker/build-push-action@v4 uses: docker/build-push-action@v5
with: with:
context: . context: .
file: ./Dockerfile.ci file: ./Dockerfile.ci

View file

@ -16,43 +16,45 @@
"@fortawesome/vue-fontawesome": "3.0.3", "@fortawesome/vue-fontawesome": "3.0.3",
"buffer": "6.0.3", "buffer": "6.0.3",
"dompurify": "3.0.5", "dompurify": "3.0.5",
"efy": "24.2.25",
"hotkeys-js": "3.12.0", "hotkeys-js": "3.12.0",
"javascript-time-ago": "2.5.9", "javascript-time-ago": "2.5.9",
"linkify-html": "4.1.1", "linkify-html": "4.1.1",
"linkifyjs": "4.1.1", "linkifyjs": "4.1.1",
"mux.js": "6.3.0", "mux.js": "6.3.0",
"qrcode": "^1.5.3", "qrcode": "^1.5.3",
"shaka-player": "4.4.0", "shaka-player": "4.4.1",
"stream-browserify": "3.0.0", "stream-browserify": "3.0.0",
"vue": "3.3.4", "vue": "3.3.4",
"vue-i18n": "9.2.2", "vue-i18n": "9.4.0",
"vue-router": "4.2.4", "vue-router": "4.2.4",
"xml-js": "1.6.11" "xml-js": "1.6.11"
}, },
"devDependencies": { "devDependencies": {
"@iconify-json/fa6-brands": "1.1.13", "@iconify-json/fa6-brands": "1.1.13",
"@iconify-json/fa6-solid": "1.1.15", "@iconify-json/fa6-solid": "1.1.15",
"@intlify/unplugin-vue-i18n": "0.13.0", "@intlify/unplugin-vue-i18n": "1.2.0",
"@unocss/eslint-config": "0.55.6", "@unocss/eslint-config": "0.55.7",
"@unocss/preset-icons": "0.55.6", "@unocss/preset-icons": "0.55.7",
"@unocss/preset-uno": "0.55.6", "@unocss/preset-uno": "0.55.7",
"@unocss/preset-web-fonts": "0.55.6", "@unocss/preset-web-fonts": "0.55.7",
"@unocss/reset": "0.55.6", "@unocss/reset": "0.55.7",
"@unocss/transformer-directives": "0.55.6", "@unocss/transformer-directives": "0.55.7",
"@unocss/transformer-variant-group": "0.55.6", "@unocss/transformer-variant-group": "0.55.7",
"@vitejs/plugin-legacy": "4.1.1", "@vitejs/plugin-legacy": "4.1.1",
"@vitejs/plugin-vue": "4.3.4", "@vitejs/plugin-vue": "4.3.4",
"@vue/compiler-sfc": "3.3.4", "@vue/compiler-sfc": "3.3.4",
"eslint": "8.48.0", "efy": "24.2.25",
"eslint": "8.49.0",
"eslint-config-prettier": "9.0.0", "eslint-config-prettier": "9.0.0",
"eslint-plugin-prettier": "5.0.0", "eslint-plugin-prettier": "5.0.0",
"eslint-plugin-vue": "9.17.0", "eslint-plugin-vue": "9.17.0",
"lightningcss": "1.21.7", "lightningcss": "1.21.8",
"prettier": "3.0.3", "prettier": "3.0.3",
"unocss": "0.55.6", "unocss": "0.55.7",
"vite": "4.4.9", "vite": "4.4.9",
"vite-plugin-eslint": "1.8.1", "vite-plugin-eslint": "1.8.1",
"vite-plugin-pwa": "0.16.4", "vite-plugin-pwa": "0.16.5",
"workbox-window": "7.0.0" "workbox-window": "7.0.0"
}, },
"browserslist": [ "browserslist": [

File diff suppressed because it is too large Load diff

@ -1 +0,0 @@
Subproject commit 3a0d7c4eded28167fc29173407889db62f8ebce4

View file

@ -49,6 +49,12 @@ video {
.pp-full-width :is(.comment, .comment-content) { .pp-full-width :is(.comment, .comment-content) {
width: 100%; width: 100%;
} }
.pp-no-bg :is(.comment, .comment-content) {
background: none;
backdrop-filter: none !important;
padding: 0;
border: 0;
}
:is(.pp-trans, .pp-solid).shaka-text-container, :is(.pp-trans, .pp-solid).shaka-text-container,
:is(.pp-trans, .pp-solid).shaka-text-container * { :is(.pp-trans, .pp-solid).shaka-text-container * {
background: transparent !important; background: transparent !important;

View file

@ -4,14 +4,14 @@
<span v-if="showFullText" v-html="fullText()" /> <span v-if="showFullText" v-html="fullText()" />
<!-- eslint-disable-next-line vue/no-v-html --> <!-- eslint-disable-next-line vue/no-v-html -->
<span v-else v-html="colapsedText()" /> <span v-else v-html="colapsedText()" />
<span v-if="text.length > 100 && !showFullText">...</span> <span v-if="text.length > visibleLimit && !showFullText">...</span>
<button <button
v-if="text.length > 100" v-if="text.length > visibleLimit"
style=" style="
margin: 0 0 0 10rem; margin: 0 0 0 10rem;
background: var(--efy_bg1); background: var(--efy_bg1);
-webkit-text-fill-color: var(--efy_text); -webkit-text-fill-color: var(--efy_text);
padding: 5rem 8reml; padding: 5rem 8rem;
" "
class="efy_shadow_trans efy_shadow_button_off efy_button_text_off" class="efy_shadow_trans efy_shadow_button_off efy_button_text_off"
@click="showFullText = !showFullText" @click="showFullText = !showFullText"
@ -30,6 +30,10 @@ export default {
type: String, type: String,
default: null, default: null,
}, },
visibleLimit: {
type: Number,
default: 100,
},
}, },
data() { data() {
return { return {
@ -41,7 +45,7 @@ export default {
return purifyHTML(rewriteDescription(this.text)); return purifyHTML(rewriteDescription(this.text));
}, },
colapsedText() { colapsedText() {
return purifyHTML(rewriteDescription(this.text.slice(0, 100))); return purifyHTML(rewriteDescription(this.text.slice(0, this.visibleLimit)));
}, },
}, },
}; };

View file

@ -29,7 +29,7 @@
</div> </div>
</div> </div>
<!-- eslint-disable-next-line vue/no-v-html --> <!-- eslint-disable-next-line vue/no-v-html -->
<div class="whitespace-pre-wrap" v-html="purifiedText" /> <CollapsableText :text="comment.commentText" :visible-limit="500" />
<template v-if="comment.repliesPage && (!loadingReplies || !showingReplies)"> <template v-if="comment.repliesPage && (!loadingReplies || !showingReplies)">
<div class="cursor-pointer" @click="loadReplies"> <div class="cursor-pointer" @click="loadReplies">
<a v-text="`${$t('actions.reply_count', comment.replyCount)}`" /> <a v-text="`${$t('actions.reply_count', comment.replyCount)}`" />
@ -56,9 +56,10 @@
</template> </template>
<script> <script>
import { purifyHTML } from "@/utils/HtmlUtils"; import CollapsableText from "./CollapsableText.vue";
export default { export default {
components: { CollapsableText },
props: { props: {
comment: { comment: {
type: Object, type: Object,
@ -77,18 +78,12 @@ export default {
nextpage: null, nextpage: null,
}; };
}, },
computed: {
purifiedText() {
return purifyHTML(this.comment.commentText);
},
},
methods: { methods: {
async loadReplies() { async loadReplies() {
if (!this.showingReplies && this.loadingReplies) { if (!this.showingReplies && this.loadingReplies) {
this.showingReplies = true; this.showingReplies = true;
return; return;
} }
this.loadingReplies = true; this.loadingReplies = true;
this.showingReplies = true; this.showingReplies = true;
this.fetchJson(this.apiUrl() + "/nextpage/comments/" + this.videoId, { this.fetchJson(this.apiUrl() + "/nextpage/comments/" + this.videoId, {

View file

@ -20,6 +20,10 @@
<font-awesome-icon :icon="['fa', 'donate']" /> <font-awesome-icon :icon="['fa', 'donate']" />
<span v-t="'actions.instance_donations'" /> <span v-t="'actions.instance_donations'" />
</a> </a>
<a v-if="privacyPolicyHref" :href="privacyPolicyHref" target="_blank">
<font-awesome-icon :icon="['fa', 'eye']" />
<span v-t="'actions.instance_privacy_policy'" class="ml-2" />
</a>
</footer> </footer>
</template> </template>
@ -29,6 +33,7 @@ export default {
return { return {
donationHref: null, donationHref: null,
statusPageHref: null, statusPageHref: null,
privacyPolicyHref: null,
}; };
}, },
mounted() { mounted() {
@ -39,6 +44,7 @@ export default {
this.fetchJson(this.apiUrl() + "/config").then(config => { this.fetchJson(this.apiUrl() + "/config").then(config => {
this.donationHref = config?.donationUrl; this.donationHref = config?.donationUrl;
this.statusPageHref = config?.statusPageUrl; this.statusPageHref = config?.statusPageUrl;
this.privacyPolicyHref = config?.privacyPolicyUrl;
}); });
}, },
}, },

View file

@ -12,12 +12,12 @@
> >
<linearGradient id="P" gradientUnits="userSpaceOnUse" /> <linearGradient id="P" gradientUnits="userSpaceOnUse" />
<linearGradient id="g1" x1="-169.7" y1="426.7" x2="214.5" y2="352" href="#P"> <linearGradient id="g1" x1="-169.7" y1="426.7" x2="214.5" y2="352" href="#P">
<stop stop-color="hsl(var(--efy_color1_var))" /> <stop stop-color="oklch(var(--efy_color1_var))" />
<stop offset="1" stop-color="hsl(var(--efy_color2_var))" /> <stop offset="1" stop-color="oklch(var(--efy_color2_var))" />
</linearGradient> </linearGradient>
<linearGradient id="g2" x1="-7.8" y1="303.4" x2="553.4" y2="194.3" href="#P"> <linearGradient id="g2" x1="-7.8" y1="303.4" x2="553.4" y2="194.3" href="#P">
<stop stop-color="hsl(var(--efy_color1_var))" /> <stop stop-color="oklch(var(--efy_color1_var))" />
<stop offset="1" stop-color="hsl(var(--efy_color2_var))" /> <stop offset="1" stop-color="oklch(var(--efy_color2_var))" />
</linearGradient> </linearGradient>
<linearGradient id="g3" x1="45.4" y1="706.9" x2="13.5" y2="857.1" href="#P"> <linearGradient id="g3" x1="45.4" y1="706.9" x2="13.5" y2="857.1" href="#P">
<stop offset=".2" stop-color="#493b32" /> <stop offset=".2" stop-color="#493b32" />

View file

@ -82,8 +82,11 @@
</div> </div>
<div class="mb-2 mt-3 flex flex-col overflow-y-scroll" style="height: 300rem"> <div class="mb-2 mt-3 flex flex-col overflow-y-scroll" style="height: 300rem">
<div v-for="subscription in subscriptions" :key="subscription.name"> <div v-for="subscription in subscriptions" :key="subscription.name">
<div class="mr-3 flex justify-between"> <div class="mr-3 flex items-center justify-between">
<span>{{ subscription.name }}</span> <a :href="subscription.url" target="_blank" class="flex items-center overflow-hidden">
<img :src="subscription.avatar" class="h-8 w-8 rounded-full" />
<span class="ml-2">{{ subscription.name }}</span>
</a>
<input <input
type="checkbox" type="checkbox"
class="checkbox" class="checkbox"

View file

@ -499,7 +499,7 @@ export default {
seekBarColors: { seekBarColors: {
base: "rgba(255, 255, 255, 0.3)", base: "rgba(255, 255, 255, 0.3)",
buffered: "rgba(255, 255, 255, 0.54)", buffered: "rgba(255, 255, 255, 0.54)",
played: `hsl(var(--efy_color1_var))`, played: `oklch(var(--efy_color1_var))`,
}, },
}; };

View file

@ -158,7 +158,7 @@
<br /> <br />
</div> </div>
<div efy_select> <div efy_select class="pp-watch-toggles">
<input id="showDesc" v-model="showDesc" type="checkbox" /> <input id="showDesc" v-model="showDesc" type="checkbox" />
<label v-t="'actions.show_description'" for="showDesc" /> <label v-t="'actions.show_description'" for="showDesc" />
<input id="showComments" v-model="showComments" type="checkbox" @click="toggleComments" /> <input id="showComments" v-model="showComments" type="checkbox" @click="toggleComments" />
@ -711,6 +711,14 @@ export default {
text-decoration: underline; text-decoration: underline;
filter: brightness(0.75); filter: brightness(0.75);
} }
.pp-watch-toggles {
display: flex;
flex-wrap: wrap;
gap: var(--efy_gap0);
& label {
margin: 0;
}
}
@media (width <= 768px) { @media (width <= 768px) {
.share-btn { .share-btn {
aspect-ratio: 1; aspect-ratio: 1;

View file

@ -18,7 +18,7 @@
"dearrow": "دي ارو" "dearrow": "دي ارو"
}, },
"player": { "player": {
"watch_on": "شاهد عبر", "watch_on": "مشاهدة على {0}",
"failed": "فشل مع رمز الخطأ {0}، راجع السجلات لمزيد من المعلومات" "failed": "فشل مع رمز الخطأ {0}، راجع السجلات لمزيد من المعلومات"
}, },
"actions": { "actions": {
@ -146,7 +146,8 @@
"enable_dearrow": "تمكين دي ارو", "enable_dearrow": "تمكين دي ارو",
"generate_qrcode": "إنشاء رمز الاستجابة السريعة", "generate_qrcode": "إنشاء رمز الاستجابة السريعة",
"import_from_json_csv": "استيراد من JSON/CSV", "import_from_json_csv": "استيراد من JSON/CSV",
"download_frame": "إطار التحميل" "download_frame": "إطار التحميل",
"instance_privacy_policy": "سياسة الخصوصية"
}, },
"video": { "video": {
"sponsor_segments": "المقاطع الإعلانية", "sponsor_segments": "المقاطع الإعلانية",

View file

@ -1,174 +1,201 @@
{ {
"titles": { "titles": {
"login": "Iniciar Sessió", "login": "Inicia la sessió",
"preferences": "Preferències", "preferences": "Preferències",
"feed": "Continguts", "feed": "Continguts",
"history": "Historial", "history": "Historial",
"subscriptions": "Subscripcions", "subscriptions": "Subscripcions",
"trending": "Tendències", "trending": "Tendències",
"register": "Registrar-se", "register": "Registra'm",
"playlists": "Llistes de reproducció", "playlists": "Llistes de reproducció",
"account": "Compte", "account": "Compte",
"instance": "Instància", "instance": "Instància",
"player": "Reproductor", "player": "Reproductor",
"livestreams": "Retransmissió en directe", "livestreams": "Directes",
"channels": "Canals", "channels": "Canals",
"bookmarks": "Marcadors" "bookmarks": "Marcadors",
"channel_groups": "Grups de canals",
"dearrow": "DeArrow"
}, },
"actions": { "actions": {
"channel_name_desc": "Nom del Canal (Z-A)", "channel_name_desc": "Nom del canal (Z-A)",
"back": "Enrere", "back": "Enrere",
"skip_intro": "Omet l'Animació d'Entreacte/Introducció", "skip_intro": "Omet l'animació d'interludi/introducció",
"skip_outro": "Omet les Targetes/Crèdits", "skip_outro": "Omet els crèdits finals",
"skip_preview": "Omet la Previsualització/Recapitulació", "skip_preview": "Omet la previsualització/recapitulació",
"skip_interaction": "Omet el Recordatori d'Interacció (Subscriu-te)", "skip_interaction": "Omet el recordatori d'interacció (Subscriviu-vos)",
"skip_self_promo": "Omet la Promoció no Remunerada/Autopromoció", "skip_self_promo": "Omet la promoció no remunerada/autopromoció",
"skip_non_music": "Omet la Música: Secció No-Músical", "skip_non_music": "Omet la música: Secció no musical",
"skip_highlight": "Omet els Destacats", "skip_highlight": "Omet els destacats",
"skip_filler_tangent": "Omet les Tangents de Farciment", "skip_filler_tangent": "Omet les tangents de farciment",
"theme": "Tema", "theme": "Tema",
"auto": "Automàtic", "auto": "Automàtic",
"dark": "Fosc", "dark": "Fosc",
"light": "Clar", "light": "Clar",
"autoplay_video": "Reprodueix Automàticament el Vídeo", "autoplay_video": "Reprodueix automàticament el vídeo",
"audio_only": "Només Àudio", "audio_only": "Només àudio",
"default_quality": "Qualitat Per Defecte", "default_quality": "Qualitat predefinida",
"buffering_goal": "Objectiu de la Memòria Intermèdia (en segons)", "buffering_goal": "Objectiu de la memòria intermèdia (en segons)",
"country_selection": "Selecciona el País", "country_selection": "País",
"default_homepage": "Pàgina Inicial Per Defecte", "default_homepage": "Pàgina d'inici predefinida",
"show_comments": "Mostra els Comentaris", "show_comments": "Mostra els comentaris",
"minimize_description_default": "Minimitza la Descripció Per Defecte", "minimize_description_default": "Minimitza la descripció per defecte",
"store_watch_history": "Desa l'Historial de Reproducció", "store_watch_history": "Desa l'historial de visualitzacions",
"language_selection": "Selecciona l'Idioma", "language_selection": "Llengua",
"enabled_codecs": "Còdecs Habilitats (Múltiple)", "enabled_codecs": "Còdecs habilitats (múltiples)",
"instances_list": "Llista d'Instàncies", "instances_list": "Llista d'instàncies",
"instance_selection": "Selecció d'Instàncies", "instance_selection": "Instància",
"show_more": "Mostrar més", "show_more": "Mostra'n més",
"yes": "Sí", "yes": "Sí",
"no": "No", "no": "No",
"export_to_json": "Exportar a JSON", "export_to_json": "Exporta a JSON",
"import_from_json": "Importar de JSON/CSV", "import_from_json": "Importa des d'un JSON",
"loop_this_video": "Reprodueix aquest Vídeo en bucle", "loop_this_video": "Reprodueix el vídeo en bucle",
"donations": "Donacions de desenvolupament", "donations": "Donacions al desenvolupament",
"minimize_description": "Minimitza la Descripció", "minimize_description": "Minimitza la descripció",
"show_description": "Mostra la Descripció", "show_description": "Mostra la descripció",
"disable_lbry": "Deshabilita LBRY per Streaming", "disable_lbry": "Desactiva el LBRY per a les transmissions en temps real",
"enable_lbry_proxy": "Habilita servidor intermediari per LBRY", "enable_lbry_proxy": "Activa un servidor intermediari per al LBRY",
"view_ssl_score": "Visualitza la Puntuació SSL", "view_ssl_score": "Mostra la puntuació SSL",
"search": "Cercar", "search": "Cerca (Ctrl+K)",
"filter": "Filtre", "filter": "Filtre",
"loading": "Carregant...", "loading": "S'està carregant...",
"clear_history": "Netejar Historial", "clear_history": "Esborra l'historial",
"hide_replies": "Oculta Respostes", "hide_replies": "Amaga les respostes",
"load_more_replies": "Carrega més Respostes", "load_more_replies": "Carrega més respostes",
"view_subscriptions": "Veure Subscripcions", "view_subscriptions": "Mostra les subscripcions",
"subscribe": "Subscriure - {count}", "subscribe": "Subscriu-me - {count}",
"unsubscribe": "Anul·lar subscripció - {count}", "unsubscribe": "Anul·la la subscripció - {count}",
"sort_by": "Ordenar per:", "sort_by": "Ordena per:",
"most_recent": "Més Recents", "most_recent": "Més recents",
"least_recent": "Menys Recents", "least_recent": "Menys recents",
"skip_sponsors": "Omet Promocions", "skip_sponsors": "Omet els patrocinadors",
"channel_name_asc": "Nom del Canal (A-Z)", "channel_name_asc": "Nom del canal (A-Z)",
"enable_sponsorblock": "Habilita Sponsorblock", "enable_sponsorblock": "Activa l'Sponsorblock",
"uses_api_from": "Utilitza l'API de ", "uses_api_from": "Utilitza l'API de ",
"minimize_recommendations": "Minimitza Recomanacions", "minimize_recommendations": "Minimitza les recomanacions",
"show_recommendations": "Mostra Recomanacions", "show_recommendations": "Mostra les recomanacions",
"auto_play_next_video": "Reprodueix automàticament el pròxim vídeo", "auto_play_next_video": "Reprodueix automàticament el pròxim vídeo",
"add_to_playlist": "Afegir a la llista de reproducció", "add_to_playlist": "Afegeix a la llista de reproducció",
"remove_from_playlist": "Suprimeix de la llista de reproducció", "remove_from_playlist": "Suprimeix de la llista de reproducció",
"create_playlist": "Crear llista de reproducció", "create_playlist": "Crea una llista de reproducció",
"delete_playlist": "Suprimir llista de reproducció", "delete_playlist": "Suprimeix la llista de reproducció",
"please_select_playlist": "Selecciona una llista de reproducció", "please_select_playlist": "Seleccioneu una llista de reproducció",
"delete_playlist_confirm": "Eliminar aquesta llista de reproducció?", "delete_playlist_confirm": "Voleu suprimir la llista de reproducció?",
"delete_playlist_video_confirm": "Eliminar aquest vídeo de la llista de reproducció?", "delete_playlist_video_confirm": "Voleu suprimir el vídeo de la llista de reproducció?",
"select_playlist": "Selecciona una llista de reproducció", "select_playlist": "Selecciona una llista de reproducció",
"show_markers": "Mostra Marcadors al Reproductor", "show_markers": "Mostra marcadors al reproductor",
"delete_account": "Eliminar Compte", "delete_account": "Suprimeix el compte",
"logout": "Desconnectar aquest dispositiu", "logout": "Desconnecta aquest dispositiu",
"minimize_recommendations_default": "Minimitza les Recomanacions per defecte", "minimize_recommendations_default": "Minimitza les recomanacions per defecte",
"invalidate_session": "Desconnectar tots els dispositius", "invalidate_session": "Desconnecta tots els dispositius",
"different_auth_instance": "Usa una instància diferent per a l'autenticació", "different_auth_instance": "Usa una instància diferent per a l'autenticació",
"instance_auth_selection": "Selecciona la instància d'autenticació", "instance_auth_selection": "Instància d'autenticació",
"clone_playlist": "Clonar Llista de Reproducció", "clone_playlist": "Clona la llista de reproducció",
"clone_playlist_success": "Clonada correctament!", "clone_playlist_success": "S'ha clonat correctament!",
"download_as_txt": "Descarrega com a .txt", "download_as_txt": "Baixa com a .txt",
"reset_preferences": "Restablir preferències", "reset_preferences": "Restableix les preferències",
"restore_preferences": "Restaura les preferències", "restore_preferences": "Restaura les preferències",
"backup_preferences": "Preferències de la còpia de seguretat", "backup_preferences": "Exporta les preferències",
"confirm_reset_preferences": "Esteu segur que voleu restablir les vostres preferències?", "confirm_reset_preferences": "Segur que voleu restablir les vostres preferències?",
"back_to_home": "Torna a l'inici", "back_to_home": "Torna a l'inici",
"with_timecode": "Compartir moment concret", "with_timecode": "Comparteix amb marca de temps",
"piped_link": "Enllaç de Piped", "piped_link": "Enllaç de Piped",
"share": "Compartir", "share": "Comparteix",
"time_code": "Moment (en segons)", "time_code": "Marca de temps (en segons)",
"copy_link": "Copiar l'enllaç", "copy_link": "Copia l'enllaç",
"follow_link": "Vés a l'enllaç", "follow_link": "Vés a l'enllaç",
"store_search_history": "Emmagatzema l'historial de cerca", "store_search_history": "Emmagatzema l'historial de cerca",
"instance_donations": "Donacions a instàncies", "instance_donations": "Donacions a instàncies",
"hide_watched": "Amaga els vídeos vistos de Continguts", "hide_watched": "Amaga els vídeos vistos dels continguts",
"show_chapters": "Capítols", "show_chapters": "Capítols",
"status_page": "Estat", "status_page": "Estat",
"source_code": "Codi font", "source_code": "Codi font",
"documentation": "Documentació", "documentation": "Documentació",
"show_watch_on_youtube": "Mostra el botó \"Veure a Youtube\"", "show_watch_on_youtube": "Mostra el botó «Mostra'l a Youtube»",
"reply_count": "{count} respostes", "reply_count": "{count} respostes",
"minimize_comments_default": "Minimitzar els comentaris per defecte", "minimize_comments_default": "Minimitza els comentaris per defecte",
"minimize_comments": "Minimitza els comentaris", "minimize_comments": "Minimitza els comentaris",
"no_valid_playlists": "L'arxiu no conté llistes de reproducció vàlides!", "no_valid_playlists": "El fitxer no conté llistes de reproducció vàlides!",
"bookmark_playlist": "Marcador", "bookmark_playlist": "Afegeix als marcadors",
"playlist_bookmarked": "Afegit a marcadors", "playlist_bookmarked": "S'ha afegit als marcadors",
"minimize_chapters_default": "Minimitzar capítols per defecte", "minimize_chapters_default": "Minimitza els capítols per defecte",
"skip_button_only": "Mostra el botó de saltar", "skip_button_only": "Mostra el botó de saltar",
"skip_automatically": "Automàticament", "skip_automatically": "Automàticament",
"min_segment_length": "Longitud de segment mínima (en segons)", "min_segment_length": "Longitud de segment mínima (en segons)",
"skip_segment": "Saltar segment", "skip_segment": "Omet el segment",
"with_playlist": "Comparteix amb llista de reproducció", "with_playlist": "Comparteix amb la llista de reproducció",
"show_less": "Mostrar menys" "show_less": "Mostra'n menys",
"okay": "D'acord",
"edit_playlist": "Edita la llista de reproducció",
"group_name": "Nom del grup",
"import_from_json_csv": "Importa des d'un JSON/CSV",
"cancel": "Cancel·la",
"enable_dearrow": "Activa el DeArrow",
"playlist_description": "Descripció de la llista de reproducció",
"dismiss": "Descarta",
"chapters_layout_mobile": "Disposició dels capítols al mòbil",
"delete_automatically": "Suprimeix automàticament després de",
"download_frame": "Baixa el fotograma",
"create_group": "Crea un grup",
"show_search_suggestions": "Mostra suggeriments de cerca",
"auto_display_captions": "Mostra els subtítols automàticament",
"autoplay_next_countdown": "Compte enrere predefinit fins al pròxim vídeo (en segons)",
"generate_qrcode": "Genera un codi QR",
"playlist_name": "Nom de la llista de reproducció"
}, },
"comment": { "comment": {
"pinned_by": "Fixat per {author}", "pinned_by": "Fixat per {author}",
"user_disabled": "Comentaris deshabilitats en els paràmetres.", "user_disabled": "Els comentaris s'han desactivat en els paràmetres.",
"disabled": "El carregador ha desactivat els comentaris.", "disabled": "Qui va pujar el vídeo ha desactivat els comentaris.",
"loading": "Carregant comentaris..." "loading": "S'estan carregant els comentaris..."
}, },
"preferences": { "preferences": {
"instance_name": "Nom de la Instància", "instance_name": "Nom de la instància",
"instance_locations": "Ubicacións de la Instància", "instance_locations": "Ubicacions de la instància",
"has_cdn": "Té CDN?", "has_cdn": "Té CDN?",
"ssl_score": "Puntuació SSL", "ssl_score": "Puntuació SSL",
"version": "Versió", "version": "Versió",
"up_to_date": "Actualitzat?", "up_to_date": "Actualitzada?",
"registered_users": "Usuaris Registrats" "registered_users": "Usuaris registrats"
}, },
"video": { "video": {
"watched": "Vist", "watched": "Vist",
"sponsor_segments": "Segments de Patrocinadors", "sponsor_segments": "Segments de patrocinadors",
"ratings_disabled": "Puntuacions Deshabilitades", "ratings_disabled": "Puntuacions desactivades",
"chapters": "Capítols", "chapters": "Capítols",
"live": "{0} En Directe", "live": "{0} en directe",
"videos": "Vídeos", "videos": "Vídeos",
"views": "{views} visualitzacions", "views": "{views} visualitzacions",
"shorts": "Curts", "shorts": "Curts",
"all": "Tot", "all": "Tot",
"category": "Categoria" "category": "Categoria",
"visibility": "Visibilitat",
"license": "Llicència",
"chapters_vertical": "Vertical",
"chapters_horizontal": "Horitzontal"
}, },
"search": { "search": {
"did_you_mean": "Volies dir: {0}?", "did_you_mean": "Volíeu dir: {0}?",
"all": "YouTube: Tot", "all": "YouTube: Tot",
"videos": "YouTube: Vídeos", "videos": "YouTube: Vídeos",
"channels": "YouTube: Canals", "channels": "YouTube: Canals",
"playlists": "YouTube: Llistes de Reproducció", "playlists": "YouTube: Llistes de reproducció",
"music_songs": "YT Music: Cançons", "music_songs": "YT Music: Cançons",
"music_videos": "YT Music: Vídeos", "music_videos": "YT Music: Vídeos",
"music_albums": "YT Music: Àlbums", "music_albums": "YT Music: Àlbums",
"music_playlists": "YT Music: Llistes de Reproducció" "music_playlists": "YT Music: Llistes de reproducció",
"music_artists": "YT Music: Artistes"
}, },
"player": { "player": {
"watch_on": "Veure a {0}" "watch_on": "Mostra a {0}",
"failed": "Ha fallat amb codi d'error {0}, vegeu els registres per a més informació"
}, },
"login": { "login": {
"username": "Nom d'Usuari", "username": "Nom d'usuari",
"password": "Contrassenya" "password": "Contrasenya",
"password_confirm": "Confirmeu la contrasenya",
"passwords_incorrect": "Les contrasenyes no coincideixen!"
}, },
"subscriptions": { "subscriptions": {
"subscribed_channels_count": "Subscrit a: {0}" "subscribed_channels_count": "Subscrit a: {0}"
@ -179,9 +206,14 @@
"info": { "info": {
"preferences_note": "Nota: les preferències es desen a l'emmagatzematge local del navegador. Si elimineu les dades del navegador, es restabliran.", "preferences_note": "Nota: les preferències es desen a l'emmagatzematge local del navegador. Si elimineu les dades del navegador, es restabliran.",
"page_not_found": "No s'ha torbat la pàgina", "page_not_found": "No s'ha torbat la pàgina",
"copied": "Copiat!", "copied": "S'ha copiat!",
"cannot_copy": "No es pot copiar!", "cannot_copy": "No es pot copiar!",
"local_storage": "Aquesta acció requereix emmagatzematge local, estan les cookies habilitades?", "local_storage": "Aquesta acció requereix localStorage. Es troben activades les galetes?",
"register_no_email_note": "Utilitzar un correu elextrònic com a usuari no és recomanable. Continuar de totes maneres?" "register_no_email_note": "Usar una adreça electrònica com a nom d'usuari no és recomanable. Voleu continuar de totes maneres?",
"hours": "{amount} hores",
"next_video_countdown": "Pròxim vídeo en {0}s",
"months": "{amount} mesos",
"weeks": "{amount} setmanes",
"days": "{amount} dies"
} }
} }

View file

@ -142,10 +142,11 @@
"delete_automatically": "Automaticky odstranit po", "delete_automatically": "Automaticky odstranit po",
"generate_qrcode": "Vygenerovat QR kód", "generate_qrcode": "Vygenerovat QR kód",
"import_from_json_csv": "Importovat z JSON/CSV", "import_from_json_csv": "Importovat z JSON/CSV",
"download_frame": "Stáhnout snímek" "download_frame": "Stáhnout snímek",
"instance_privacy_policy": "Ochrana údajů"
}, },
"player": { "player": {
"watch_on": "Sledovat na {0}", "watch_on": "Zobrazit na {0}",
"failed": "Akce se nezdařila. Chybový kód {0}, pro více informací viz protokol" "failed": "Akce se nezdařila. Chybový kód {0}, pro více informací viz protokol"
}, },
"comment": { "comment": {

View file

@ -124,7 +124,8 @@
"enable_dearrow": "DeArrow verwenden", "enable_dearrow": "DeArrow verwenden",
"generate_qrcode": "QR-Code generieren", "generate_qrcode": "QR-Code generieren",
"import_from_json_csv": "Aus JSON/CSV importieren", "import_from_json_csv": "Aus JSON/CSV importieren",
"download_frame": "Einzelbild (Frame) downloaden" "download_frame": "Einzelbild (Frame) downloaden",
"instance_privacy_policy": "Datenschutzerklärung"
}, },
"player": { "player": {
"watch_on": "Auf {0} ansehen", "watch_on": "Auf {0} ansehen",

View file

@ -18,7 +18,7 @@
"dearrow": "DeArrow" "dearrow": "DeArrow"
}, },
"player": { "player": {
"watch_on": "Watch on {0}", "watch_on": "View on {0}",
"failed": "Failed with error code {0}, see logs for more info" "failed": "Failed with error code {0}, see logs for more info"
}, },
"actions": { "actions": {
@ -132,6 +132,7 @@
"status_page": "Status", "status_page": "Status",
"source_code": "Source code", "source_code": "Source code",
"instance_donations": "Instance donations", "instance_donations": "Instance donations",
"instance_privacy_policy": "Privacy Policy",
"reply_count": "{count} replies", "reply_count": "{count} replies",
"no_valid_playlists": "The file doesn't contain valid playlists!", "no_valid_playlists": "The file doesn't contain valid playlists!",
"with_playlist": "Share with playlist", "with_playlist": "Share with playlist",

View file

@ -146,7 +146,8 @@
"enable_dearrow": "Ebligi DeArrow", "enable_dearrow": "Ebligi DeArrow",
"generate_qrcode": "Generi QR-kodon", "generate_qrcode": "Generi QR-kodon",
"import_from_json_csv": "Importi el JSON/CSV", "import_from_json_csv": "Importi el JSON/CSV",
"download_frame": "Elŝuti bildon" "download_frame": "Elŝuti bildon",
"instance_privacy_policy": "Privateca politiko"
}, },
"video": { "video": {
"chapters": "Sekcioj", "chapters": "Sekcioj",

View file

@ -155,7 +155,8 @@
"enable_dearrow": "Activar DeArrow", "enable_dearrow": "Activar DeArrow",
"generate_qrcode": "Generar código QR", "generate_qrcode": "Generar código QR",
"import_from_json_csv": "Importar desde JSON/CSV", "import_from_json_csv": "Importar desde JSON/CSV",
"download_frame": "Descargar fotograma" "download_frame": "Descargar fotograma",
"instance_privacy_policy": "Política de privacidad"
}, },
"titles": { "titles": {
"feed": "Contenido", "feed": "Contenido",

View file

@ -42,6 +42,53 @@
"theme": "Decorado", "theme": "Decorado",
"auto": "Auto", "auto": "Auto",
"light": "Claro", "light": "Claro",
"autoplay_video": "Reprodución automática" "autoplay_video": "Reprodución automática",
"buffering_goal": "Tamaño do buffer (en segundos)",
"minimize_comments_default": "Por defecto minimizar os comentarios",
"import_from_json_csv": "Importar desde JSON/CSV",
"skip_outro": "Omitir créditos finais",
"skip_intro": "Omitir animación de entrada",
"auto_play_next_video": "Reproducir autom. seguinte vídeo",
"instance_selection": "Instancia",
"clear_history": "Limpar historial",
"loading": "A cargar...",
"minimize_description": "Minimizar descrición",
"skip_interaction": "Omitir Recordatorio para interactuar (Subscribirse)",
"filter": "Filtro",
"view_ssl_score": "Ver SSL Score",
"minimize_description_default": "Por defecto minimizar a descrición",
"language_selection": "Idioma",
"enable_lbry_proxy": "Activar Proxy para LBRY",
"donations": "Doar para o desenvolvemento",
"loop_this_video": "Poñer vídeo en bucle",
"hide_replies": "Agochar respostas",
"country_selection": "País",
"skip_self_promo": "Omitir autobombo",
"default_quality": "Calidade por defecto",
"show_more": "Mostrar máis",
"show_recommendations": "Mostrar recomendacións",
"minimize_recommendations": "Minimizar recomendacións",
"audio_only": "Só audio",
"disable_lbry": "Desactivar LBRY para Retransmisión",
"show_comments": "Mostrar comentarios",
"store_watch_history": "Gardar historial de visualizacións",
"no": "Non",
"yes": "Si",
"load_more_replies": "Cargar máis respostas",
"enabled_codecs": "Códecs activados (varios)",
"auto_display_captions": "Mostar autom. Subtítulos",
"minimize_comments": "Minimizar comentarios",
"skip_non_music": "Omitir música: Sección sen música",
"instances_list": "Lista de instancias",
"import_from_json": "Importar desde JSON",
"autoplay_next_countdown": "Conta atrás por defecto para o seguinte vídeo (en segundos)",
"default_homepage": "Inicio por defecto",
"remove_from_playlist": "Retirar da lista",
"search": "Buscar (Ctrl+K)",
"show_description": "Mostrar descrición",
"skip_preview": "Omitir vista previa/resumo",
"skip_highlight": "Omitir Destacado",
"export_to_json": "Exportar a JSON",
"add_to_playlist": "Engadir á lista"
} }
} }

View file

@ -18,7 +18,7 @@
"dearrow": "DeArrow" "dearrow": "DeArrow"
}, },
"player": { "player": {
"watch_on": "לצפות ב־{0}", "watch_on": "הצגה ב־{0}",
"failed": "חל כשל עם קוד שגיאה {0}, מידע נוסף ביומנים" "failed": "חל כשל עם קוד שגיאה {0}, מידע נוסף ביומנים"
}, },
"actions": { "actions": {
@ -146,7 +146,8 @@
"enable_dearrow": "הפעלת DeArrow", "enable_dearrow": "הפעלת DeArrow",
"generate_qrcode": "יצירת קוד QR", "generate_qrcode": "יצירת קוד QR",
"import_from_json_csv": "ייבוא מ־JSON/CSV", "import_from_json_csv": "ייבוא מ־JSON/CSV",
"download_frame": "הורדת תמונית" "download_frame": "הורדת תמונית",
"instance_privacy_policy": "מדיניות פרטיות"
}, },
"comment": { "comment": {
"pinned_by": "ננעץ על ידי {author}", "pinned_by": "ננעץ על ידי {author}",

View file

@ -41,7 +41,7 @@
"donations": "Donacije za razvoj", "donations": "Donacije za razvoj",
"auto_play_next_video": "Automatski reproduciraj idući video", "auto_play_next_video": "Automatski reproduciraj idući video",
"loop_this_video": "Ponavljaj ovaj video", "loop_this_video": "Ponavljaj ovaj video",
"import_from_json": "Uvezi iz JSON/CSV formata", "import_from_json": "Uvezi iz JSON formata",
"export_to_json": "Izvezi u JSON", "export_to_json": "Izvezi u JSON",
"no": "Ne", "no": "Ne",
"yes": "Da", "yes": "Da",
@ -153,10 +153,14 @@
"show_search_suggestions": "Prikaži prijedloge pretrage", "show_search_suggestions": "Prikaži prijedloge pretrage",
"delete_automatically": "Automatski izbriši nakon", "delete_automatically": "Automatski izbriši nakon",
"enable_dearrow": "Aktiviraj DeArrow", "enable_dearrow": "Aktiviraj DeArrow",
"generate_qrcode": "Generiraj QR kod" "generate_qrcode": "Generiraj QR kod",
"import_from_json_csv": "Uvezi iz JSON/CSV formata",
"download_frame": "Preuzmi kadar",
"instance_privacy_policy": "Politika privatnosti"
}, },
"player": { "player": {
"watch_on": "Gledaj na {0}" "watch_on": "Gledaj na {0}",
"failed": "Neuspjelo s greškom {0}. Pogledaj zapise za više informacija"
}, },
"titles": { "titles": {
"subscriptions": "Pretplate", "subscriptions": "Pretplate",

View file

@ -18,7 +18,7 @@
"dearrow": "DeArrow" "dearrow": "DeArrow"
}, },
"player": { "player": {
"watch_on": "Tonton di {0}", "watch_on": "Lihat di {0}",
"failed": "Gagal dengan kode kesalahan {0}, lihat catatan untuk info lebih lanjut" "failed": "Gagal dengan kode kesalahan {0}, lihat catatan untuk info lebih lanjut"
}, },
"actions": { "actions": {
@ -146,7 +146,8 @@
"enable_dearrow": "Aktifkan DeArrow", "enable_dearrow": "Aktifkan DeArrow",
"generate_qrcode": "Buat Kode QR", "generate_qrcode": "Buat Kode QR",
"import_from_json_csv": "Impor dari JSON/CSV", "import_from_json_csv": "Impor dari JSON/CSV",
"download_frame": "Unduh bingkai" "download_frame": "Unduh bingkai",
"instance_privacy_policy": "Kebijakan Privasi"
}, },
"comment": { "comment": {
"pinned_by": "Dipasangi pin oleh {author}", "pinned_by": "Dipasangi pin oleh {author}",

View file

@ -18,7 +18,8 @@
"dearrow": "DeArrow" "dearrow": "DeArrow"
}, },
"player": { "player": {
"watch_on": "{0}で視聴" "watch_on": "{0}で視聴",
"failed": "失敗しエラーコード {0} が返りました。詳細はログに記録"
}, },
"actions": { "actions": {
"subscribe": "チャンネル登録 - {count}", "subscribe": "チャンネル登録 - {count}",
@ -144,7 +145,9 @@
"delete_automatically": "指定時間後に自動削除", "delete_automatically": "指定時間後に自動削除",
"enable_dearrow": "DeArrow を使用", "enable_dearrow": "DeArrow を使用",
"generate_qrcode": "QRコードの生成", "generate_qrcode": "QRコードの生成",
"import_from_json_csv": "JSON/CSVから読み込む" "import_from_json_csv": "JSON/CSVから読み込む",
"download_frame": "この画像を保存",
"instance_privacy_policy": "個人情報保護方針"
}, },
"comment": { "comment": {
"pinned_by": "{author} によって固定", "pinned_by": "{author} によって固定",

View file

@ -124,7 +124,8 @@
"chapters_layout_mobile": "Mobiele lay-out voor hoofdstukken", "chapters_layout_mobile": "Mobiele lay-out voor hoofdstukken",
"auto_display_captions": "Ondertiteling automatisch tonen", "auto_display_captions": "Ondertiteling automatisch tonen",
"import_from_json_csv": "Importeren uit JSON/CSV", "import_from_json_csv": "Importeren uit JSON/CSV",
"download_frame": "Beeld downloaden" "download_frame": "Beeld downloaden",
"instance_privacy_policy": "Privacybeleid"
}, },
"titles": { "titles": {
"register": "Registreren", "register": "Registreren",
@ -145,7 +146,7 @@
"channel_groups": "Kanaal­groepen" "channel_groups": "Kanaal­groepen"
}, },
"player": { "player": {
"watch_on": "Kijken op {0}", "watch_on": "Bekijken op {0}",
"failed": "Mislukt met foutcode {0}, zie logboeken voor meer informatie" "failed": "Mislukt met foutcode {0}, zie logboeken voor meer informatie"
}, },
"search": { "search": {

View file

@ -18,7 +18,8 @@
"dearrow": "DeArrow" "dearrow": "DeArrow"
}, },
"player": { "player": {
"watch_on": "Agachar sus {0}" "watch_on": "Veire sus {0}",
"failed": "Fracàs amb lo còdi derror {0}, consultat los jornals daudit per mai dinformacions"
}, },
"actions": { "actions": {
"subscribe": "Sabonar - {count}", "subscribe": "Sabonar - {count}",
@ -142,7 +143,11 @@
"show_search_suggestions": "Mostrar las suggestions de recèrcas", "show_search_suggestions": "Mostrar las suggestions de recèrcas",
"chapters_layout_mobile": "Disposicion capítols sus mobil", "chapters_layout_mobile": "Disposicion capítols sus mobil",
"enable_dearrow": "Activar DeArrow", "enable_dearrow": "Activar DeArrow",
"import_from_json_csv": "Importar dun JSON/CSV" "import_from_json_csv": "Importar dun JSON/CSV",
"delete_automatically": "Suprimir automaticament aprèp",
"download_frame": "Telecargar fotograma",
"generate_qrcode": "Generar un còdi QR",
"instance_privacy_policy": "Politica de confidencialitat"
}, },
"preferences": { "preferences": {
"instance_locations": "Localizacion de linstància", "instance_locations": "Localizacion de linstància",
@ -155,7 +160,9 @@
}, },
"login": { "login": {
"username": "Nom dutilizaire", "username": "Nom dutilizaire",
"password": "Senhal" "password": "Senhal",
"password_confirm": "Confirmar lo senhal",
"passwords_incorrect": "Los senhals correspondon pas !"
}, },
"video": { "video": {
"views": "{views} visualizacions", "views": "{views} visualizacions",

View file

@ -18,7 +18,8 @@
"dearrow": "ଡି ତୀର" "dearrow": "ଡି ତୀର"
}, },
"player": { "player": {
"watch_on": "{0} ରେ ଦେଖନ୍ତୁ" "watch_on": "{0} ରେ ଦେଖନ୍ତୁ",
"failed": "ତ୍ରୁଟି ସଂକେତ {0} ସହିତ ବିଫଳ, ଅଧିକ ସୂଚନା ପାଇଁ ଲଗଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ"
}, },
"actions": { "actions": {
"subscribe": "ସଦସ୍ୟତା - {count}", "subscribe": "ସଦସ୍ୟତା - {count}",
@ -67,7 +68,7 @@
"instances_list": "ଉଦାହରଣ ତାଲିକା", "instances_list": "ଉଦାହରଣ ତାଲିକା",
"instance_selection": "ଇନଷ୍ଟାନ୍ସ", "instance_selection": "ଇନଷ୍ଟାନ୍ସ",
"yes": "ହଁ", "yes": "ହଁ",
"import_from_json": "JSON / CSV ରୁ ଆମଦାନୀ କରନ୍ତୁ", "import_from_json": "JSON ରୁ ଆମଦାନୀ କରନ୍ତୁ",
"no": "ନାହିଁ", "no": "ନାହିଁ",
"export_to_json": "JSON କୁ ରପ୍ତାନି କରନ୍ତୁ", "export_to_json": "JSON କୁ ରପ୍ତାନି କରନ୍ତୁ",
"loop_this_video": "ଏହି ଭିଡିଓକୁ ଲୁପ୍ କରନ୍ତୁ", "loop_this_video": "ଏହି ଭିଡିଓକୁ ଲୁପ୍ କରନ୍ତୁ",
@ -143,7 +144,10 @@
"chapters_layout_mobile": "ମୋବାଇଲରେ ଅଧ୍ୟାୟ ବିନ୍ୟାସ", "chapters_layout_mobile": "ମୋବାଇଲରେ ଅଧ୍ୟାୟ ବିନ୍ୟାସ",
"auto_display_captions": "ଶୀର୍ଷକଗୁଡ଼ିକୁ ସ୍ୱୟଂଚାଳିତ ଭାବରେ ଦର୍ଶାନ୍ତୁ", "auto_display_captions": "ଶୀର୍ଷକଗୁଡ଼ିକୁ ସ୍ୱୟଂଚାଳିତ ଭାବରେ ଦର୍ଶାନ୍ତୁ",
"playlist_description": "ପ୍ଲେଲିଷ୍ଟ ବର୍ଣ୍ଣନା", "playlist_description": "ପ୍ଲେଲିଷ୍ଟ ବର୍ଣ୍ଣନା",
"cancel": "ବାତିଲ କରନ୍ତୁ" "cancel": "ବାତିଲ କରନ୍ତୁ",
"import_from_json_csv": "JSON/CSV ରୁ ଆମଦାନୀ କରନ୍ତୁ",
"download_frame": "ଫ୍ରେମକୁ ଆହରଣ କରନ୍ତୁ",
"instance_privacy_policy": "ଗୋପନୀୟତା ନୀତି"
}, },
"comment": { "comment": {
"loading": "ମନ୍ତବ୍ୟ ଲୋଡ୍ ହେଉଛି ...", "loading": "ମନ୍ତବ୍ୟ ଲୋଡ୍ ହେଉଛି ...",

View file

@ -18,7 +18,7 @@
"dearrow": "DeArrow" "dearrow": "DeArrow"
}, },
"player": { "player": {
"watch_on": "Obejrzyj na {0}", "watch_on": "Zobacz na {0}",
"failed": "Niepowodzenie z powodu kodu błędu {0}, przejrzyj logi, aby uzyskać więcej informacji" "failed": "Niepowodzenie z powodu kodu błędu {0}, przejrzyj logi, aby uzyskać więcej informacji"
}, },
"actions": { "actions": {
@ -146,7 +146,8 @@
"enable_dearrow": "Włącz DeArrow", "enable_dearrow": "Włącz DeArrow",
"generate_qrcode": "Wygeneruj kod QR", "generate_qrcode": "Wygeneruj kod QR",
"import_from_json_csv": "Import z pliku JSON/CSV", "import_from_json_csv": "Import z pliku JSON/CSV",
"download_frame": "Pobierz klatkę" "download_frame": "Pobierz klatkę",
"instance_privacy_policy": "Polityki prywatności"
}, },
"comment": { "comment": {
"pinned_by": "Przypięty przez {author}", "pinned_by": "Przypięty przez {author}",

View file

@ -142,7 +142,8 @@
"delete_automatically": "Eliminar automaticamente após", "delete_automatically": "Eliminar automaticamente após",
"generate_qrcode": "Gerar código QR", "generate_qrcode": "Gerar código QR",
"import_from_json_csv": "Importar de JSON/CSV", "import_from_json_csv": "Importar de JSON/CSV",
"download_frame": "Quadro de transferência" "download_frame": "Quadro de transferência",
"instance_privacy_policy": "Política de privacidade"
}, },
"preferences": { "preferences": {
"instance_name": "Nome da instância", "instance_name": "Nome da instância",

View file

@ -81,6 +81,7 @@
"status_page": "Estado", "status_page": "Estado",
"source_code": "Código fonte", "source_code": "Código fonte",
"instance_donations": "Doações de instâncias", "instance_donations": "Doações de instâncias",
"instance_privacy_policy": "Política de Privacidade",
"instance_auth_selection": "Instância de Autenticação", "instance_auth_selection": "Instância de Autenticação",
"clone_playlist_success": "Clonada com sucesso!", "clone_playlist_success": "Clonada com sucesso!",
"download_as_txt": "Baixar como .txt", "download_as_txt": "Baixar como .txt",

View file

@ -18,7 +18,8 @@
"dearrow": "DeArrow" "dearrow": "DeArrow"
}, },
"player": { "player": {
"watch_on": "Смотреть на {0}" "watch_on": "Смотреть на {0}",
"failed": "Ошибка с кодом {0}, откройте логи, чтобы узнать больше"
}, },
"actions": { "actions": {
"subscribe": "Подписаться - {count}", "subscribe": "Подписаться - {count}",
@ -144,7 +145,9 @@
"delete_automatically": "Автоматическое удаление после", "delete_automatically": "Автоматическое удаление после",
"enable_dearrow": "Включить DeArrow", "enable_dearrow": "Включить DeArrow",
"generate_qrcode": "Сгенерировать QR Код", "generate_qrcode": "Сгенерировать QR Код",
"import_from_json_csv": "Импорт из JSON/CSV" "import_from_json_csv": "Импорт из JSON/CSV",
"download_frame": "Сделать скриншот видео",
"instance_privacy_policy": "Политика конфиденциальности"
}, },
"comment": { "comment": {
"pinned_by": "Закреплено пользователем {author}", "pinned_by": "Закреплено пользователем {author}",

View file

@ -142,7 +142,8 @@
"skip_button_only": "Visa hoppa över-knapp", "skip_button_only": "Visa hoppa över-knapp",
"skip_automatically": "Automatiskt", "skip_automatically": "Automatiskt",
"download_frame": "Ladda ner bildruta", "download_frame": "Ladda ner bildruta",
"import_from_json_csv": "Importera från JSON/CSV" "import_from_json_csv": "Importera från JSON/CSV",
"instance_privacy_policy": "Sekretesspolicy"
}, },
"player": { "player": {
"watch_on": "Titta på {0}", "watch_on": "Titta på {0}",

View file

@ -124,10 +124,11 @@
"enable_dearrow": "DeArrow'u Etkinleştir", "enable_dearrow": "DeArrow'u Etkinleştir",
"generate_qrcode": "QR Kodu Oluştur", "generate_qrcode": "QR Kodu Oluştur",
"import_from_json_csv": "JSON/CSV Dosyasından İçe Aktar", "import_from_json_csv": "JSON/CSV Dosyasından İçe Aktar",
"download_frame": "Kareyi indir" "download_frame": "Kareyi indir",
"instance_privacy_policy": "Gizlilik Politikası"
}, },
"player": { "player": {
"watch_on": "{0} Üzerinde İzle", "watch_on": "{0} üzerinde görüntüle",
"failed": "{0} hata kodu ile başarısız oldu, daha fazla bilgi için günlüklere bakın" "failed": "{0} hata kodu ile başarısız oldu, daha fazla bilgi için günlüklere bakın"
}, },
"titles": { "titles": {

View file

@ -1,6 +1,6 @@
{ {
"player": { "player": {
"watch_on": "Дивитися на {0}", "watch_on": "Переглянути на {0}",
"failed": "Помилка з кодом {0}, дивіться журнали для отримання додаткової інформації" "failed": "Помилка з кодом {0}, дивіться журнали для отримання додаткової інформації"
}, },
"login": { "login": {
@ -134,7 +134,8 @@
"delete_automatically": "Видаляти автоматично після", "delete_automatically": "Видаляти автоматично після",
"generate_qrcode": "Згенерувати QR-код", "generate_qrcode": "Згенерувати QR-код",
"import_from_json_csv": "Імпортувати з JSON/CSV", "import_from_json_csv": "Імпортувати з JSON/CSV",
"download_frame": "Завантажити кадр" "download_frame": "Завантажити кадр",
"instance_privacy_policy": "Політика конфіденційності"
}, },
"titles": { "titles": {
"register": "Реєстрація", "register": "Реєстрація",

View file

@ -124,7 +124,8 @@
"enable_dearrow": "启用 DeArrow", "enable_dearrow": "启用 DeArrow",
"generate_qrcode": "生成二维码", "generate_qrcode": "生成二维码",
"import_from_json_csv": "从 JSON/CSV 文件导入", "import_from_json_csv": "从 JSON/CSV 文件导入",
"download_frame": "下载视频帧" "download_frame": "下载视频帧",
"instance_privacy_policy": "隐私政策"
}, },
"video": { "video": {
"sponsor_segments": "赞助商部分", "sponsor_segments": "赞助商部分",

View file

@ -58,9 +58,10 @@ import router from "@/router/router.js";
import "uno.css"; import "uno.css";
/*EFY UI*/ /*EFY UI*/
import "../public/efy/efy.css"; // import "../node_modules/efy/efy.css";
import "efy/efy.css";
import "./piped.css"; import "./piped.css";
import "../public/efy/efy.js"; import "efy/efy.js";
import "./piped.js"; import "./piped.js";
import App from "./App.vue"; import App from "./App.vue";

View file

@ -1,6 +1,8 @@
/*Global*/ @font-face {font-family: 'nunito'; src: url('../efy/nunito.woff2') format('truetype'); font-display: swap} @font-face {font-family: 'nunito'; src: url('../efy/nunito_bold.woff2') format('truetype'); font-weight: bold; font-display: swap} /*Global*/ @font-face {font-family: 'nunito'; src: url('../node_modules/efy/nunito.woff2') format('woff2'); font-weight: normal}
@font-face {font-family: 'nunito'; src: url('../node_modules/efy/nunito_bold.woff2') format('woff2'); font-weight: bold}
:root { :root {
--efy_color: 0 84% 60%, 0 72% 51%; /*No JS Fallback*/ --efy_color1_var: 0 84% 60%; --efy_color2_var: 0 72% 51%; --efy_color: 0.64 0.2 25, 0.6 0.2 30;
/*No JS Fallback*/ --efy_color1_var: 0.64 0.2 25; --efy_color2_var: 0.6 0.2 30;
--efy_color_angle: 165deg; --efy_color_angle: 165deg;
--efy_radius: 12rem; --efy_radius: 12rem;
--efy_border_size: 1.5rem; --efy_border_size: 1.5rem;
@ -8,18 +10,20 @@
--efy_sidebar_button: right_middle, off; --efy_sidebar_button: right_middle, off;
--efy_body_width: 100%; --efy_body_width: 100%;
--efy_body_padding: 15rem; --efy_body_padding: 15rem;
--efy_font_family: 'nunito', sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji; --efy_font_family: 'nunito', sans-serif, emoji;
--efy_audio_folder: ./efy/audio; --efy_folder: ../node_modules/efy;
--efy_folder: ./efy; --efy_audio_folder: ../node_modules/efy/audio;
--efy_lang_folder: ../node_modules/efy/lang;
--efy_lang_code: en; --efy_lang_code: en;
--efy_modules: efy_quick, efy_mode, efy_filters, efy_backup, efy_accessibility, efy_audio, efy_language, efy_extra; --efy_modules: efy_quick, efy_filters, efy_backup, efy_accessibility, efy_audio, efy_language, efy_extra;
--efy_protocol: http; --efy_protocol: http;
} }
/*Default Mode*/ [efy_mode=default] { /*Default Mode*/ [efy_mode=default] {
--efy_scheme: dark; --efy_scheme: dark;
--efy_bg_var: 0 0% 100%; --efy_bg_var: 1 0 0;
--efy_bg: hsl(0 0% 6%); --efy_bg_var2: 0 0 0;
--efy_text: hsl(0 0% 86%); --efy_bg: oklch(0.15 0 0);
--efy_text: oklch(.9 0 0);
} /*Your code starts bellow*/ } /*Your code starts bellow*/
/*BG 1*/ .comment, .pp-mobile-nav a, .pp-mobile-nav p, .suggestion-selected, .pp-chapters .chapter:not(.pp-chapter-active, .chapter:hover), .pp-chapters [title=chapters] {background: var(--efy_bg1)} /*BG 1*/ .comment, .pp-mobile-nav a, .pp-mobile-nav p, .suggestion-selected, .pp-chapters .chapter:not(.pp-chapter-active, .chapter:hover), .pp-chapters [title=chapters] {background: var(--efy_bg1)}
@ -47,7 +51,7 @@
/*Bellow*/ .pp-watch-bellow-options {margin-top: 15rem} /*Bellow*/ .pp-watch-bellow-options {margin-top: 15rem}
.pp-watch-buttons {flex-wrap: wrap; gap: var(--efy_gap0)} .pp-watch-buttons {flex-wrap: wrap; gap: var(--efy_gap0)}
.pp-watch-buttons .btn {padding: 6rem 15rem; border: 0; color: var(--efy_text2); min-height: var(--efy_ratio_width); max-height: var(--efy_ratio_width); place-self: center; place-content: center} .pp-watch-buttons .btn {padding: 6rem 15rem; border: 0; color: var(--efy_text2); min-height: var(--efy_size); max-height: var(--efy_size); place-self: center; place-content: center}
.pp-bellow-video, .pp-bellow-video .flex {gap:10rem} .pp-bellow-video, .pp-bellow-video .flex {gap:10rem}
.pp-likes .flex {gap: 0rem} .pp-likes .flex {gap: 0rem}
@ -133,8 +137,8 @@ table {margin-top: 0}
border: 0; border: 0;
} }
.pp-square { .pp-square {
width: var(--efy_ratio_width)!important; width: var(--efy_size)!important;
height: var(--efy_ratio_width); height: var(--efy_size);
} }
.video-tags { .video-tags {
display: flex; display: flex;

View file

@ -1,32 +1,41 @@
import {$, $all, $add, $event, $ready} from '../public/efy/efy.js'; import {$, $all, $$, $add, $event, $ready} from '../node_modules/efy/efy.js';
$ready('#efy_sidebar', ()=>{ $ready('#efy_sidebar', ()=>{
$add('div', {id: 'piped_efy_module'}, [], $('#efy_sidebar'), 'afterbegin'); $add('div', {id: 'piped_efy_module'}, [], $('#efy_sidebar'), 'afterbegin');
/*Custom Menu*/ $add('div', {id: 'custom_sidebar_menu'}, [], $('#efy_modules')); /*Custom Menu*/ $add('div', {id: 'custom_sidebar_menu'}, [], $('#efy_modules'));
for (let a = ['preferences', 'history', 'playlists', 'feed'], b = ['Preferences', 'History', 'Playlists', 'Feed'], c = $('#custom_sidebar_menu'), i = 0; i < a.length; i++){ $add('a', {href: `./${a[i]}`}, [b[i]], c)} for (let a = ['preferences', 'history', 'playlists', 'feed'],
b = ['Preferences', 'History', 'Playlists', 'Feed'],
c = $('#custom_sidebar_menu'), i = 0; i < a.length; i++){
$add('a', {href: `./${a[i]}`}, [b[i]], c)
}
/*Custom Settings*/ $add('details', {id: 'piped_style'}, [ /*Custom Settings*/ $add('details', {id: 'piped_style'}, [
$add('summary', {}, [ $add('i', {efy_icon: 'dots'}), 'Piped Style']), ['summary', {}, [['i', {efy_icon: 'dots'}], 'Piped Style']],
$add('div', {efy_tabs: 'piped_style'}) ['div', {efy_tabs: 'piped_style'}, [['div', {class: 'efy_tabs'}]]]
], $('#efy_modules')); ], $('#efy_modules'));
$add('mark', {efy_lang: 'alpha'}, [], $('#piped_style > summary'), 'beforeend'); $add('mark', {efy_lang: 'alpha'}, [], $('#piped_style > summary'), 'beforeend');
/*Tabs*/ for (let a = ['option1', 'option2', 'option3'], b = ['Tab 1', 'Tab 2', 'Tab 3'], c = $('[efy_tabs=piped_style]'), i = 0; i < a.length; i++) { /*Tabs*/ for (let a = ['comments', 'captions'], b = ['Comments', 'Captions'],
$add('button', {efy_tab: a[i]}, [b[i]], c); c = $('[efy_tabs=piped_style]'), i = 0; i < a.length; i++) {
} const active = (a[i] === 'comments') ? {efy_active: ''} : null;
for (let a = ['option1', 'option2', 'option3'], c = $('[efy_tabs=piped_style]'), i = 0; i < a.length; i++) { $add('button', {efy_tab: a[i], ...active}, [b[i]], $$(c, '.efy_tabs'));
$add('div', {efy_content: a[i], efy_select: '', id: `efy_${a[i]}`}, [], c) $add('div', {efy_content: a[i], efy_select: '', id: `efy_${a[i]}`, ...active}, [], c);
}
/*Active*/ for (let a = ['[efy_tab=option1]', '[efy_content=option1]'], b = '[efy_tabs=piped_style] > ', i = 0; i < a.length; i++){
$(b + a[i]).setAttribute('efy_active', '')
} }
/*Tab1*/ for (let a = 'comments_full captions-trans captions-solid'.split(' '), b = ['Comments - Full Width', 'Captions - No Background', 'Captions - Black Background'], c = $('[efy_tabs=piped_style] [efy_content=option1]'), i = 0; i < a.length; i++) { /*Comments*/ for (let a = 'comments_full comments_nobg'.split(' '), b = ['Full Width', 'No Background'],
$add('input', {type: 'checkbox', name: 'piped_style_option1', id: `piped_style_${a[i]}`}, [], c); c = $('[efy_tabs=piped_style] [efy_content="comments"]'), i = 0; i < a.length; i++) {
$add('input', {type: 'checkbox', name: 'piped_style_comments', id: `piped_style_${a[i]}`}, [], c);
$add('label', {for: `piped_style_${a[i]}`}, [b[i]], c); $add('label', {for: `piped_style_${a[i]}`}, [b[i]], c);
} }
/*Comments & Captions*/ for (let a = ['comments_full', 'captions-trans', 'captions-solid'], b = ['.pp-comments', '.shaka-text-container', '.shaka-text-container'], c = ['pp-full-width', 'pp-trans', 'pp-solid'], i = 0; i < a.length; i++) { /*Captions*/ for (let a = 'captions-trans captions-solid'.split(' '), b = ['No Background', 'Black Background'],
c = $('[efy_tabs=piped_style] [efy_content="captions"]'), i = 0; i < a.length; i++) {
$add('input', {type: 'checkbox', name: 'piped_style_captions', id: `piped_style_${a[i]}`}, [], c);
$add('label', {for: `piped_style_${a[i]}`}, [b[i]], c);
}
/*Comments & Captions*/ for (let a = ['comments_full', 'comments_nobg', 'captions-trans', 'captions-solid'],
b = ['.pp-comments', '.pp-comments', '.shaka-text-container', '.shaka-text-container'],
c = ['pp-full-width', 'pp-no-bg', 'pp-trans', 'pp-solid'], i = 0; i < a.length; i++) {
$event($(`#piped_style_${a[i]}`), 'click', ()=>{ $event($(`#piped_style_${a[i]}`), 'click', ()=>{
$all(b[i]).forEach( (e)=>{ e.classList.toggle(c[i]) }) $all(b[i]).forEach( (e)=>{ e.classList.toggle(c[i]) })
}) })

View file

@ -73,6 +73,6 @@ export default defineConfig({
}, },
build: { build: {
sourcemap: true, sourcemap: true,
cssMinify: "lightningcss", // cssMinify: "lightningcss",
}, },
}); });