mirror of https://github.com/FreeTubeApp/FreeTube
Merge branch 'development' into add-command-line-arg-to-search
This commit is contained in:
commit
39e6936b7b
|
@ -36,7 +36,7 @@ jobs:
|
|||
- name: Install xmlstarlet
|
||||
run: sudo apt -y install xmlstarlet
|
||||
- name: Create Version Variable
|
||||
uses: bluwy/substitute-string-action@v2
|
||||
uses: bluwy/substitute-string-action@v3
|
||||
id: sub
|
||||
with:
|
||||
_input-text: ${{ fromJson(steps.api_results.outputs.result).tag_name }}
|
||||
|
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
if: github.event.pull_request.merged
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: mondeja/remove-labels-gh-action@v1.1.1
|
||||
- uses: mondeja/remove-labels-gh-action@v2.0.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
labels: |
|
||||
|
@ -27,7 +27,7 @@ jobs:
|
|||
if: github.event_name == 'pull_request_target' && (! github.event.pull_request.merged) && (github.event.action != 'converted_to_draft') && (github.event.action != 'ready_for_review')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: mondeja/remove-labels-gh-action@v1.1.1
|
||||
- uses: mondeja/remove-labels-gh-action@v2.0.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
labels: |
|
||||
|
@ -43,7 +43,7 @@ jobs:
|
|||
if: github.event_name == 'pull_request_target' && github.event.action == 'converted_to_draft'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: mondeja/remove-labels-gh-action@v1.1.1
|
||||
- uses: mondeja/remove-labels-gh-action@v2.0.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
labels: |
|
||||
|
@ -54,7 +54,7 @@ jobs:
|
|||
if: github.event_name == 'pull_request_target' && github.event.action == 'ready_for_review'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: mondeja/remove-labels-gh-action@v1.1.1
|
||||
- uses: mondeja/remove-labels-gh-action@v2.0.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
labels: |
|
||||
|
|
30
package.json
30
package.json
|
@ -62,7 +62,7 @@
|
|||
"autolinker": "^4.0.0",
|
||||
"electron-context-menu": "^3.6.1",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"marked": "^12.0.0",
|
||||
"marked": "^12.0.1",
|
||||
"path-browserify": "^1.0.1",
|
||||
"process": "^0.11.10",
|
||||
"swiper": "^11.0.7",
|
||||
|
@ -80,43 +80,43 @@
|
|||
"youtubei.js": "^9.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.24.0",
|
||||
"@babel/eslint-parser": "^7.23.10",
|
||||
"@babel/core": "^7.24.3",
|
||||
"@babel/eslint-parser": "^7.24.1",
|
||||
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
||||
"@babel/preset-env": "^7.24.0",
|
||||
"@babel/preset-env": "^7.24.3",
|
||||
"@double-great/stylelint-a11y": "^3.0.2",
|
||||
"babel-loader": "^9.1.3",
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"css-loader": "^6.10.0",
|
||||
"css-minimizer-webpack-plugin": "^6.0.0",
|
||||
"electron": "^29.1.0",
|
||||
"electron": "^29.1.5",
|
||||
"electron-builder": "^24.13.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-jsonc": "^2.13.0",
|
||||
"eslint-plugin-jsonc": "^2.14.1",
|
||||
"eslint-plugin-n": "^16.6.2",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-unicorn": "^51.0.1",
|
||||
"eslint-plugin-vue": "^9.22.0",
|
||||
"eslint-plugin-vue": "^9.23.0",
|
||||
"eslint-plugin-vuejs-accessibility": "^2.2.1",
|
||||
"eslint-plugin-yml": "^1.12.2",
|
||||
"eslint-plugin-yml": "^1.13.2",
|
||||
"html-webpack-plugin": "^5.6.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-minimizer-webpack-plugin": "^5.0.0",
|
||||
"lefthook": "^1.6.4",
|
||||
"lefthook": "^1.6.7",
|
||||
"mini-css-extract-plugin": "^2.8.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss": "^8.4.35",
|
||||
"postcss": "^8.4.38",
|
||||
"postcss-scss": "^4.0.9",
|
||||
"prettier": "^2.8.8",
|
||||
"rimraf": "^5.0.5",
|
||||
"sass": "^1.71.1",
|
||||
"sass": "^1.72.0",
|
||||
"sass-loader": "^14.1.1",
|
||||
"stylelint": "^16.2.1",
|
||||
"stylelint-config-sass-guidelines": "^11.0.0",
|
||||
"stylelint": "^16.3.0",
|
||||
"stylelint-config-sass-guidelines": "^11.1.0",
|
||||
"stylelint-config-standard": "^36.0.0",
|
||||
"stylelint-high-performance-animation": "^1.10.0",
|
||||
"stylelint-use-logical-spec": "^5.0.1",
|
||||
|
@ -124,9 +124,9 @@
|
|||
"vue-devtools": "^5.1.4",
|
||||
"vue-eslint-parser": "^9.4.2",
|
||||
"vue-loader": "^15.10.0",
|
||||
"webpack": "^5.90.3",
|
||||
"webpack": "^5.91.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "^5.0.2",
|
||||
"webpack-dev-server": "^5.0.4",
|
||||
"webpack-watch-external-files-plugin": "^3.0.0",
|
||||
"yaml-eslint-parser": "^1.2.2"
|
||||
}
|
||||
|
|
|
@ -174,10 +174,6 @@ function runApp() {
|
|||
app.commandLine.appendSwitch('enable-features', 'VaapiVideoDecodeLinuxGL')
|
||||
}
|
||||
|
||||
// Work around for context menus in the devtools being displayed behind the window
|
||||
// https://github.com/electron/electron/issues/38790
|
||||
app.commandLine.appendSwitch('disable-features', 'WidgetLayering')
|
||||
|
||||
// command line switches need to be added before the app ready event first
|
||||
// that means we can't use the normal settings system as that is asynchronous,
|
||||
// doing it synchronously ensures that we add it before the event fires
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<template>
|
||||
<div
|
||||
class="ft-card"
|
||||
@focusout="$emit('focusout')"
|
||||
>
|
||||
<slot />
|
||||
</div>
|
||||
|
|
|
@ -33,7 +33,12 @@ export default defineComponent({
|
|||
hideForbiddenTitles: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
searchQueryText: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
listType: function () {
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
:show-video-with-last-viewed-playlist="showVideoWithLastViewedPlaylist"
|
||||
:use-channels-hidden-preference="useChannelsHiddenPreference"
|
||||
:hide-forbidden-titles="hideForbiddenTitles"
|
||||
:search-query-text="searchQueryText"
|
||||
/>
|
||||
</ft-auto-grid>
|
||||
</template>
|
||||
|
|
|
@ -116,6 +116,11 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
handleDropdownEscape: function () {
|
||||
this.$refs.iconButton.focus()
|
||||
// handleDropdownFocusOut will hide the dropdown for us
|
||||
},
|
||||
|
||||
handleDropdownClick: function ({ url, index }) {
|
||||
if (this.returnIndex) {
|
||||
this.$emit('click', index)
|
||||
|
|
|
@ -66,6 +66,7 @@
|
|||
top: dropdownPositionY === 'top'
|
||||
}"
|
||||
@focusout="handleDropdownFocusOut"
|
||||
@keydown.esc.stop="handleDropdownEscape"
|
||||
>
|
||||
<slot>
|
||||
<ul
|
||||
|
|
|
@ -47,6 +47,11 @@ export default defineComponent({
|
|||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
searchQueryText: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
v-else-if="finalDataType === 'playlist'"
|
||||
:appearance="appearance"
|
||||
:data="data"
|
||||
:search-query-text="searchQueryText"
|
||||
/>
|
||||
<ft-community-post
|
||||
v-else-if="finalDataType === 'community'"
|
||||
|
|
|
@ -15,7 +15,12 @@ export default defineComponent({
|
|||
appearance: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
searchQueryText: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
|
@ -79,6 +84,7 @@ export default defineComponent({
|
|||
path: `/playlist/${this.playlistId}`,
|
||||
query: {
|
||||
playlistType: this.isUserPlaylist ? 'user' : '',
|
||||
searchQueryText: this.searchQueryText,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
|
|
@ -7,7 +7,6 @@ import {
|
|||
formatNumber,
|
||||
openExternalLink,
|
||||
showToast,
|
||||
toLocalePublicationString,
|
||||
toDistractionFreeTitle,
|
||||
deepCopy
|
||||
} from '../../helpers/utils'
|
||||
|
@ -98,7 +97,7 @@ export default defineComponent({
|
|||
duration: '',
|
||||
description: '',
|
||||
watchProgress: 0,
|
||||
publishedText: '',
|
||||
published: undefined,
|
||||
isLive: false,
|
||||
isUpcoming: false,
|
||||
isPremium: false,
|
||||
|
@ -657,60 +656,60 @@ export default defineComponent({
|
|||
if (typeof premiereDate === 'string') {
|
||||
premiereDate = new Date(premiereDate)
|
||||
}
|
||||
this.publishedText = premiereDate.toLocaleString()
|
||||
this.uploadedTime = premiereDate.toLocaleString([this.currentLocale, 'en'])
|
||||
this.published = premiereDate.getTime()
|
||||
} else if (typeof (this.data.premiereTimestamp) !== 'undefined') {
|
||||
this.publishedText = new Date(this.data.premiereTimestamp * 1000).toLocaleString()
|
||||
} else {
|
||||
this.publishedText = this.data.publishedText
|
||||
}
|
||||
this.uploadedTime = new Date(this.data.premiereTimestamp * 1000).toLocaleString([this.currentLocale, 'en'])
|
||||
this.published = this.data.premiereTimestamp * 1000
|
||||
} else if (typeof this.data.published === 'number' && !this.isLive) {
|
||||
this.published = this.data.published
|
||||
|
||||
if (this.data.isRSS && this.data.publishedDate != null && !this.isLive) {
|
||||
const now = new Date()
|
||||
// Convert from ms to second
|
||||
// For easier code interpretation the value is made to be positive
|
||||
// `publishedDate` is sometimes a string, e.g. when switched back from another view
|
||||
const publishedDate = Date.parse(this.data.publishedDate)
|
||||
let timeDiffFromNow = ((now - publishedDate) / 1000)
|
||||
let timeUnit = 'second'
|
||||
if (this.inHistory) {
|
||||
this.uploadedTime = new Date(this.data.published).toLocaleDateString([this.currentLocale, 'en'])
|
||||
} else {
|
||||
const now = new Date().getTime()
|
||||
// Convert from ms to second
|
||||
// For easier code interpretation the value is made to be positive
|
||||
let timeDiffFromNow = ((now - this.data.published) / 1000)
|
||||
let timeUnit = 'second'
|
||||
|
||||
if (timeDiffFromNow > 60) {
|
||||
timeDiffFromNow /= 60
|
||||
timeUnit = 'minute'
|
||||
if (timeDiffFromNow >= 60) {
|
||||
timeDiffFromNow /= 60
|
||||
timeUnit = 'minute'
|
||||
}
|
||||
|
||||
if (timeUnit === 'minute' && timeDiffFromNow >= 60) {
|
||||
timeDiffFromNow /= 60
|
||||
timeUnit = 'hour'
|
||||
}
|
||||
|
||||
if (timeUnit === 'hour' && timeDiffFromNow >= 24) {
|
||||
timeDiffFromNow /= 24
|
||||
timeUnit = 'day'
|
||||
}
|
||||
|
||||
const timeDiffFromNowDays = timeDiffFromNow
|
||||
|
||||
if (timeUnit === 'day' && timeDiffFromNow >= 7) {
|
||||
timeDiffFromNow /= 7
|
||||
timeUnit = 'week'
|
||||
}
|
||||
|
||||
// Use 30 days per month, just like calculatePublishedDate
|
||||
if (timeUnit === 'week' && timeDiffFromNowDays >= 30) {
|
||||
timeDiffFromNow = timeDiffFromNowDays / 30
|
||||
timeUnit = 'month'
|
||||
}
|
||||
|
||||
if (timeUnit === 'month' && timeDiffFromNow >= 12) {
|
||||
timeDiffFromNow /= 12
|
||||
timeUnit = 'year'
|
||||
}
|
||||
|
||||
// Using `Math.ceil` so that -1.x days ago displayed as 1 day ago
|
||||
// Notice that the value is turned to negative to be displayed as "ago"
|
||||
this.uploadedTime = new Intl.RelativeTimeFormat([this.currentLocale, 'en']).format(Math.ceil(-timeDiffFromNow), timeUnit)
|
||||
}
|
||||
|
||||
if (timeUnit === 'minute' && timeDiffFromNow > 60) {
|
||||
timeDiffFromNow /= 60
|
||||
timeUnit = 'hour'
|
||||
}
|
||||
|
||||
if (timeUnit === 'hour' && timeDiffFromNow > 24) {
|
||||
timeDiffFromNow /= 24
|
||||
timeUnit = 'day'
|
||||
}
|
||||
|
||||
// Diff month might have diff no. of days
|
||||
// To ensure the display is fine we use 31
|
||||
if (timeUnit === 'day' && timeDiffFromNow > 31) {
|
||||
timeDiffFromNow /= 24
|
||||
timeUnit = 'month'
|
||||
}
|
||||
|
||||
if (timeUnit === 'month' && timeDiffFromNow > 12) {
|
||||
timeDiffFromNow /= 12
|
||||
timeUnit = 'year'
|
||||
}
|
||||
|
||||
// Using `Math.ceil` so that -1.x days ago displayed as 1 day ago
|
||||
// Notice that the value is turned to negative to be displayed as "ago"
|
||||
this.uploadedTime = new Intl.RelativeTimeFormat(this.currentLocale).format(Math.ceil(-timeDiffFromNow), timeUnit)
|
||||
} else if (this.publishedText && !this.isLive) {
|
||||
// produces a string according to the template in the locales string
|
||||
this.uploadedTime = toLocalePublicationString({
|
||||
publishText: this.publishedText,
|
||||
isLive: this.isLive,
|
||||
isUpcoming: this.isUpcoming,
|
||||
isRSS: this.data.isRSS
|
||||
})
|
||||
}
|
||||
|
||||
if (this.hideVideoViews) {
|
||||
|
@ -732,14 +731,6 @@ export default defineComponent({
|
|||
// For UX consistency, no progress reading if writing disabled
|
||||
this.watchProgress = historyEntry.watchProgress
|
||||
}
|
||||
|
||||
if (historyEntry.published !== '') {
|
||||
const videoPublished = historyEntry.published
|
||||
const videoPublishedDate = new Date(videoPublished)
|
||||
this.publishedText = videoPublishedDate.toLocaleDateString()
|
||||
} else {
|
||||
this.publishedText = ''
|
||||
}
|
||||
} else {
|
||||
this.watchProgress = 0
|
||||
}
|
||||
|
@ -751,7 +742,7 @@ export default defineComponent({
|
|||
title: this.title,
|
||||
author: this.channelName,
|
||||
authorId: this.channelId,
|
||||
published: this.publishedText ? this.publishedText.split(',')[0] : this.publishedText,
|
||||
published: this.published,
|
||||
description: this.description,
|
||||
viewCount: this.viewCount,
|
||||
lengthSeconds: this.data.lengthSeconds,
|
||||
|
|
|
@ -137,13 +137,9 @@
|
|||
{{ $tc('Global.Counts.View Count', viewCount, {count: parsedViewCount}) }}
|
||||
</span>
|
||||
<span
|
||||
v-if="uploadedTime !== '' && !isLive && !inHistory"
|
||||
v-if="uploadedTime !== '' && !isLive"
|
||||
class="uploadedTime"
|
||||
> • {{ uploadedTime }}</span>
|
||||
<span
|
||||
v-if="inHistory"
|
||||
class="uploadedTime"
|
||||
> • {{ publishedText }}</span>
|
||||
<span
|
||||
v-if="isLive && !hideViews"
|
||||
class="viewCount"
|
||||
|
|
|
@ -16,6 +16,36 @@
|
|||
flex-direction: column;
|
||||
}
|
||||
|
||||
.searchInputsRow {
|
||||
display: grid;
|
||||
|
||||
/* 2 columns */
|
||||
grid-template-columns: 1fr auto;
|
||||
column-gap: 16px;
|
||||
}
|
||||
@media only screen and (max-width: 800px) {
|
||||
.searchInputsRow {
|
||||
/* Switch to 2 rows from 2 columns */
|
||||
grid-template-columns: auto;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
}
|
||||
|
||||
.optionsRow {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: 1fr;
|
||||
align-items: center;
|
||||
}
|
||||
@media only screen and (max-width: 800px) {
|
||||
.optionsRow {
|
||||
/* Switch to 2 rows from 2 columns */
|
||||
grid-template-columns: auto;
|
||||
grid-template-rows: auto auto;
|
||||
align-items: stretch;
|
||||
}
|
||||
}
|
||||
|
||||
.sortSelect {
|
||||
/* Put it on the right */
|
||||
margin-inline-start: auto;
|
||||
|
|
|
@ -7,6 +7,7 @@ import FtButton from '../ft-button/ft-button.vue'
|
|||
import FtPlaylistSelector from '../ft-playlist-selector/ft-playlist-selector.vue'
|
||||
import FtInput from '../../components/ft-input/ft-input.vue'
|
||||
import FtSelect from '../../components/ft-select/ft-select.vue'
|
||||
import FtToggleSwitch from '../../components/ft-toggle-switch/ft-toggle-switch.vue'
|
||||
import {
|
||||
showToast,
|
||||
} from '../../helpers/utils'
|
||||
|
@ -31,12 +32,14 @@ export default defineComponent({
|
|||
'ft-playlist-selector': FtPlaylistSelector,
|
||||
'ft-input': FtInput,
|
||||
'ft-select': FtSelect,
|
||||
'ft-toggle-switch': FtToggleSwitch,
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
selectedPlaylistIdList: [],
|
||||
createdSincePromptShownPlaylistIdList: [],
|
||||
query: '',
|
||||
doSearchPlaylistsWithMatchingVideos: false,
|
||||
updateQueryDebounce: function() {},
|
||||
lastShownAt: Date.now(),
|
||||
lastActiveElement: null,
|
||||
|
@ -115,6 +118,12 @@ export default defineComponent({
|
|||
return this.allPlaylists.filter((playlist) => {
|
||||
if (typeof (playlist.playlistName) !== 'string') { return false }
|
||||
|
||||
if (this.doSearchPlaylistsWithMatchingVideos) {
|
||||
if (playlist.videos.some((v) => v.title.toLowerCase().includes(this.processedQuery))) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return playlist.playlistName.toLowerCase().includes(this.processedQuery)
|
||||
})
|
||||
},
|
||||
|
|
|
@ -12,23 +12,37 @@
|
|||
playlistCount: selectedPlaylistCount,
|
||||
}) }}
|
||||
</p>
|
||||
<ft-input
|
||||
ref="searchBar"
|
||||
:placeholder="$t('User Playlists.AddVideoPrompt.Search in Playlists')"
|
||||
:show-clear-text-button="true"
|
||||
:show-action-button="false"
|
||||
@input="(input) => updateQueryDebounce(input)"
|
||||
@clear="updateQueryDebounce('')"
|
||||
/>
|
||||
<ft-select
|
||||
v-if="allPlaylists.length > 1"
|
||||
class="sortSelect"
|
||||
:value="sortBy"
|
||||
:select-names="sortBySelectNames"
|
||||
:select-values="sortBySelectValues"
|
||||
:placeholder="$t('User Playlists.Sort By.Sort By')"
|
||||
@change="sortBy = $event"
|
||||
/>
|
||||
<div
|
||||
class="searchInputsRow"
|
||||
>
|
||||
<ft-input
|
||||
ref="searchBar"
|
||||
:placeholder="$t('User Playlists.AddVideoPrompt.Search in Playlists')"
|
||||
:show-clear-text-button="true"
|
||||
:show-action-button="false"
|
||||
@input="(input) => updateQueryDebounce(input)"
|
||||
@clear="updateQueryDebounce('')"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="optionsRow"
|
||||
>
|
||||
<ft-toggle-switch
|
||||
:label="$t('User Playlists.Playlists with Matching Videos')"
|
||||
:compact="true"
|
||||
:default-value="doSearchPlaylistsWithMatchingVideos"
|
||||
@change="doSearchPlaylistsWithMatchingVideos = !doSearchPlaylistsWithMatchingVideos"
|
||||
/>
|
||||
<ft-select
|
||||
v-if="allPlaylists.length > 1"
|
||||
class="sortSelect"
|
||||
:value="sortBy"
|
||||
:select-names="sortBySelectNames"
|
||||
:select-values="sortBySelectValues"
|
||||
:placeholder="$t('User Playlists.Sort By.Sort By')"
|
||||
@change="sortBy = $event"
|
||||
/>
|
||||
</div>
|
||||
<div class="playlists-container">
|
||||
<ft-flex-box>
|
||||
<div
|
||||
|
|
|
@ -73,6 +73,11 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
handleProfileListEscape: function () {
|
||||
this.$refs.iconButton.focus()
|
||||
// handleProfileListFocusOut will hide the dropdown for us
|
||||
},
|
||||
|
||||
setActiveProfile: function (profile) {
|
||||
if (this.activeProfile._id !== profile._id) {
|
||||
const targetProfile = this.profileList.find((x) => {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<div
|
||||
ref="iconButton"
|
||||
class="colorOption"
|
||||
:title="$t('Profile.Toggle Profile List')"
|
||||
:style="{ background: activeProfile.bgColor, color: activeProfile.textColor }"
|
||||
|
@ -25,7 +26,8 @@
|
|||
ref="profileList"
|
||||
class="profileList"
|
||||
tabindex="-1"
|
||||
@focusout="handleProfileListFocusOut"
|
||||
@focusout.native="handleProfileListFocusOut"
|
||||
@keydown.native.esc.stop="handleProfileListEscape"
|
||||
>
|
||||
<h3
|
||||
id="profileListTitle"
|
||||
|
|
|
@ -29,3 +29,9 @@
|
|||
background-color: #000;
|
||||
}
|
||||
/* stylelint-enable liberty/use-logical-spec */
|
||||
|
||||
@media only screen and (max-width: 460px) {
|
||||
:deep(.dash-selector .vjs-menu) {
|
||||
max-block-size: 14em;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1817,6 +1817,34 @@ export default defineComponent({
|
|||
|
||||
// For default auto, it may select a resolution before generating the quality buttons
|
||||
button.querySelector('#vjs-current-quality').innerText = defaultIsAuto ? autoQualityLabel : currentQualityLabel
|
||||
const vjsMenu = button.querySelector('.vjs-menu')
|
||||
let isTapping = false
|
||||
button.addEventListener('touchstart', () => {
|
||||
isTapping = true
|
||||
})
|
||||
button.addEventListener('touchmove', () => {
|
||||
// if they are moving, they cannot be tapping
|
||||
isTapping = false
|
||||
})
|
||||
button.addEventListener('touchend', (e) => {
|
||||
if (isTapping) {
|
||||
button.focus()
|
||||
// make it easier to toggle the vjs-menu on touch (hover css is inconsistent w/ touch)
|
||||
if (!e.target.classList.contains('quality-item') && !e.target.classList.contains('vjs-menu-item-text')) {
|
||||
vjsMenu.classList.toggle('vjs-lock-showing')
|
||||
} else {
|
||||
// hide the quality selector on select (just like the other quality selectors do on mobile)
|
||||
vjsMenu.classList.remove('vjs-lock-showing')
|
||||
}
|
||||
this.handleClick(e)
|
||||
isTapping = false
|
||||
}
|
||||
})
|
||||
button.addEventListener('focusout', () => {
|
||||
// remove class which shows the selector
|
||||
vjsMenu.classList.remove('vjs-lock-showing')
|
||||
})
|
||||
button.classList.add('dash-selector')
|
||||
|
||||
return button.children[0]
|
||||
}
|
||||
|
|
|
@ -83,6 +83,18 @@ export default defineComponent({
|
|||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
searchVideoModeAllowed: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
searchVideoModeEnabled: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
searchQueryText: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
|
@ -239,6 +251,12 @@ export default defineComponent({
|
|||
this.newTitle = this.title
|
||||
this.newDescription = this.description
|
||||
|
||||
if (this.videoCount > 0) {
|
||||
// Only enable search video mode when viewing non empty playlists
|
||||
this.searchVideoMode = this.searchVideoModeEnabled
|
||||
this.query = this.searchQueryText
|
||||
}
|
||||
|
||||
this.updateQueryDebounce = debounce(this.updateQuery, 500)
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -108,7 +108,7 @@
|
|||
|
||||
<div class="playlistOptions">
|
||||
<ft-icon-button
|
||||
v-if="isUserPlaylist && videoCount > 0 && !editMode"
|
||||
v-if="searchVideoModeAllowed && videoCount > 0 && !editMode"
|
||||
ref="enableSearchModeButton"
|
||||
:title="$t('User Playlists.SinglePlaylistView.Search for Videos')"
|
||||
:icon="['fas', 'search']"
|
||||
|
@ -198,7 +198,7 @@
|
|||
</div>
|
||||
|
||||
<div
|
||||
v-if="isUserPlaylist && searchVideoMode"
|
||||
v-if="searchVideoModeAllowed && searchVideoMode"
|
||||
class="searchInputsRow"
|
||||
>
|
||||
<ft-input
|
||||
|
@ -207,11 +207,11 @@
|
|||
:placeholder="$t('User Playlists.SinglePlaylistView.Search for Videos')"
|
||||
:show-clear-text-button="true"
|
||||
:show-action-button="false"
|
||||
:value="query"
|
||||
@input="(input) => updateQueryDebounce(input)"
|
||||
@clear="updateQueryDebounce('')"
|
||||
/>
|
||||
<ft-icon-button
|
||||
v-if="isUserPlaylist && searchVideoMode"
|
||||
:title="$t('User Playlists.Cancel')"
|
||||
:icon="['fas', 'times']"
|
||||
theme="secondary"
|
||||
|
|
|
@ -2,10 +2,10 @@ import { defineComponent } from 'vue'
|
|||
import { mapActions, mapMutations } from 'vuex'
|
||||
import SubscriptionsTabUI from '../subscriptions-tab-ui/subscriptions-tab-ui.vue'
|
||||
|
||||
import { copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { setPublishedTimestampsInvidious, copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { invidiousAPICall } from '../../helpers/api/invidious'
|
||||
import { getLocalChannelLiveStreams } from '../../helpers/api/local'
|
||||
import { addPublishedDatesInvidious, addPublishedDatesLocal, parseYouTubeRSSFeed, updateVideoListAfterProcessing } from '../../helpers/subscriptions'
|
||||
import { parseYouTubeRSSFeed, updateVideoListAfterProcessing } from '../../helpers/subscriptions'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'SubscriptionsLive',
|
||||
|
@ -198,8 +198,6 @@ export default defineComponent({
|
|||
}
|
||||
}
|
||||
|
||||
addPublishedDatesLocal(result.videos)
|
||||
|
||||
return result
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
|
@ -294,7 +292,7 @@ export default defineComponent({
|
|||
invidiousAPICall(subscriptionsPayload).then((result) => {
|
||||
const videos = result.videos.filter(e => e.type === 'video')
|
||||
|
||||
addPublishedDatesInvidious(videos)
|
||||
setPublishedTimestampsInvidious(videos)
|
||||
|
||||
let name
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@ import { defineComponent } from 'vue'
|
|||
import { mapActions, mapMutations } from 'vuex'
|
||||
import SubscriptionsTabUI from '../subscriptions-tab-ui/subscriptions-tab-ui.vue'
|
||||
|
||||
import { copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { setPublishedTimestampsInvidious, copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { invidiousAPICall } from '../../helpers/api/invidious'
|
||||
import { getLocalChannelVideos } from '../../helpers/api/local'
|
||||
import { addPublishedDatesInvidious, addPublishedDatesLocal, parseYouTubeRSSFeed, updateVideoListAfterProcessing } from '../../helpers/subscriptions'
|
||||
import { parseYouTubeRSSFeed, updateVideoListAfterProcessing } from '../../helpers/subscriptions'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'SubscriptionsVideos',
|
||||
|
@ -198,8 +198,6 @@ export default defineComponent({
|
|||
}
|
||||
}
|
||||
|
||||
addPublishedDatesLocal(result.videos)
|
||||
|
||||
return result
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
|
@ -291,7 +289,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
invidiousAPICall(subscriptionsPayload).then((result) => {
|
||||
addPublishedDatesInvidious(result.videos)
|
||||
setPublishedTimestampsInvidious(result.videos)
|
||||
|
||||
let name
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ import { mapMutations } from 'vuex'
|
|||
import FtLoader from '../ft-loader/ft-loader.vue'
|
||||
import FtCard from '../ft-card/ft-card.vue'
|
||||
import FtListVideoNumbered from '../ft-list-video-numbered/ft-list-video-numbered.vue'
|
||||
import { copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { copyToClipboard, setPublishedTimestampsInvidious, showToast } from '../../helpers/utils'
|
||||
import {
|
||||
getLocalPlaylist,
|
||||
parseLocalPlaylistVideo,
|
||||
|
@ -451,6 +451,8 @@ export default defineComponent({
|
|||
this.playlistTitle = result.title
|
||||
this.channelName = result.author
|
||||
this.channelId = result.authorId
|
||||
|
||||
setPublishedTimestampsInvidious(result.videos)
|
||||
this.playlistItems = this.playlistItems.concat(result.videos)
|
||||
|
||||
this.isLoading = false
|
||||
|
|
|
@ -5,6 +5,7 @@ import { join } from 'path'
|
|||
import { PlayerCache } from './PlayerCache'
|
||||
import {
|
||||
CHANNEL_HANDLE_REGEX,
|
||||
calculatePublishedDate,
|
||||
escapeHTML,
|
||||
extractNumberFromString,
|
||||
getUserDataPath,
|
||||
|
@ -681,8 +682,7 @@ export function parseLocalPlaylistVideo(video) {
|
|||
}
|
||||
}
|
||||
|
||||
let publishedText = null
|
||||
|
||||
let publishedText
|
||||
// normal videos have 3 text runs with the last one containing the published date
|
||||
// live videos have 2 text runs with the number of people watching
|
||||
// upcoming either videos don't have any info text or the number of people waiting,
|
||||
|
@ -691,13 +691,20 @@ export function parseLocalPlaylistVideo(video) {
|
|||
publishedText = video_.video_info.runs[2].text
|
||||
}
|
||||
|
||||
const published = calculatePublishedDate(
|
||||
publishedText,
|
||||
video_.is_live,
|
||||
video_.is_upcoming,
|
||||
video_.upcoming
|
||||
)
|
||||
|
||||
return {
|
||||
videoId: video_.id,
|
||||
title: video_.title.text,
|
||||
author: video_.author.name,
|
||||
authorId: video_.author.id,
|
||||
viewCount,
|
||||
publishedText,
|
||||
published,
|
||||
lengthSeconds: isNaN(video_.duration.seconds) ? '' : video_.duration.seconds,
|
||||
liveNow: video_.is_live,
|
||||
isUpcoming: video_.is_upcoming,
|
||||
|
@ -728,6 +735,20 @@ export function parseLocalListVideo(item) {
|
|||
} else {
|
||||
/** @type {import('youtubei.js').YTNodes.Video} */
|
||||
const video = item
|
||||
|
||||
let publishedText
|
||||
|
||||
if (!video.published?.isEmpty()) {
|
||||
publishedText = video.published.text
|
||||
}
|
||||
|
||||
const published = calculatePublishedDate(
|
||||
publishedText,
|
||||
video.is_live,
|
||||
video.is_upcoming || video.is_premiere,
|
||||
video.upcoming
|
||||
)
|
||||
|
||||
return {
|
||||
type: 'video',
|
||||
videoId: video.id,
|
||||
|
@ -736,7 +757,7 @@ export function parseLocalListVideo(item) {
|
|||
authorId: video.author.id,
|
||||
description: video.description,
|
||||
viewCount: video.view_count == null ? null : extractNumberFromString(video.view_count.text),
|
||||
publishedText: (video.published == null || video.published.isEmpty()) ? null : video.published.text,
|
||||
published,
|
||||
lengthSeconds: isNaN(video.duration.seconds) ? '' : video.duration.seconds,
|
||||
liveNow: video.is_live,
|
||||
isUpcoming: video.is_upcoming || video.is_premiere,
|
||||
|
@ -811,6 +832,14 @@ function parseListItem(item) {
|
|||
* @param {import('youtubei.js').YTNodes.CompactVideo} video
|
||||
*/
|
||||
export function parseLocalWatchNextVideo(video) {
|
||||
let publishedText
|
||||
|
||||
if (!video.published?.isEmpty()) {
|
||||
publishedText = video.published.text
|
||||
}
|
||||
|
||||
const published = calculatePublishedDate(publishedText, video.is_live, video.is_premiere)
|
||||
|
||||
return {
|
||||
type: 'video',
|
||||
videoId: video.id,
|
||||
|
@ -818,7 +847,7 @@ export function parseLocalWatchNextVideo(video) {
|
|||
author: video.author.name,
|
||||
authorId: video.author.id,
|
||||
viewCount: video.view_count == null ? null : extractNumberFromString(video.view_count.text),
|
||||
publishedText: (video.published == null || video.published.isEmpty()) ? null : video.published.text,
|
||||
published,
|
||||
lengthSeconds: isNaN(video.duration.seconds) ? '' : video.duration.seconds,
|
||||
liveNow: video.is_live,
|
||||
isUpcoming: video.is_premiere
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import store from '../store/index'
|
||||
import { calculatePublishedDate } from './utils'
|
||||
|
||||
/**
|
||||
* Filtering and sort based on user preferences
|
||||
|
@ -57,7 +56,7 @@ export function updateVideoListAfterProcessing(videos) {
|
|||
}
|
||||
|
||||
videoList.sort((a, b) => {
|
||||
return b.publishedDate - a.publishedDate
|
||||
return b.published - a.published
|
||||
})
|
||||
|
||||
return videoList
|
||||
|
@ -106,57 +105,10 @@ async function parseRSSEntry(entry, channelId, channelName) {
|
|||
// querySelector doesn't support xml namespaces so we have to use getElementsByTagName here
|
||||
videoId: entry.getElementsByTagName('yt:videoId')[0].textContent,
|
||||
title: entry.querySelector('title').textContent,
|
||||
publishedDate: published,
|
||||
publishedText: published.toLocaleString(),
|
||||
published: published.getTime(),
|
||||
viewCount: entry.getElementsByTagName('media:statistics')[0]?.getAttribute('views') || null,
|
||||
type: 'video',
|
||||
lengthSeconds: '0:00',
|
||||
isRSS: true
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {{
|
||||
* liveNow: boolean,
|
||||
* isUpcoming: boolean,
|
||||
* premiereDate: Date,
|
||||
* publishedText: string,
|
||||
* publishedDate: number
|
||||
* }[]} videos publishedDate is added by this function,
|
||||
* but adding it to the type definition stops vscode warning that the property doesn't exist
|
||||
*/
|
||||
export function addPublishedDatesLocal(videos) {
|
||||
videos.forEach(video => {
|
||||
if (video.liveNow) {
|
||||
video.publishedDate = new Date().getTime()
|
||||
} else if (video.isUpcoming) {
|
||||
video.publishedDate = video.premiereDate
|
||||
} else {
|
||||
video.publishedDate = calculatePublishedDate(video.publishedText)
|
||||
}
|
||||
return video
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {{
|
||||
* liveNow: boolean,
|
||||
* isUpcoming: boolean,
|
||||
* premiereTimestamp: number,
|
||||
* published: number,
|
||||
* publishedDate: number
|
||||
* }[]} videos publishedDate is added by this function,
|
||||
* but adding it to the type definition stops vscode warning that the property doesn't exist
|
||||
*/
|
||||
export function addPublishedDatesInvidious(videos) {
|
||||
videos.forEach(video => {
|
||||
if (video.liveNow) {
|
||||
video.publishedDate = new Date().getTime()
|
||||
} else if (video.isUpcoming) {
|
||||
video.publishedDate = new Date(video.premiereTimestamp * 1000)
|
||||
} else {
|
||||
video.publishedDate = new Date(video.published * 1000)
|
||||
}
|
||||
return video
|
||||
})
|
||||
}
|
||||
|
|
|
@ -12,11 +12,27 @@ export const CHANNEL_HANDLE_REGEX = /^@[\w.-]{3,30}$/
|
|||
const PUBLISHED_TEXT_REGEX = /(\d+)\s?([a-z]+)/i
|
||||
/**
|
||||
* @param {string} publishedText
|
||||
* @param {boolean} isLive
|
||||
* @param {boolean} isUpcoming
|
||||
* @param {Date|undefined} premiereDate
|
||||
*/
|
||||
export function calculatePublishedDate(publishedText) {
|
||||
export function calculatePublishedDate(publishedText, isLive = false, isUpcoming = false, premiereDate = undefined) {
|
||||
const date = new Date()
|
||||
if (publishedText === 'Live') {
|
||||
return publishedText
|
||||
|
||||
if (isLive) {
|
||||
return date.getTime()
|
||||
} else if (isUpcoming) {
|
||||
if (premiereDate) {
|
||||
return premiereDate.getTime()
|
||||
} else {
|
||||
// should never happen but just to be sure that we always return a number
|
||||
return date.getTime()
|
||||
}
|
||||
}
|
||||
|
||||
if (!publishedText) {
|
||||
console.error("publishedText is missing but the video isn't live or upcoming")
|
||||
return undefined
|
||||
}
|
||||
|
||||
const match = publishedText.match(PUBLISHED_TEXT_REGEX)
|
||||
|
@ -44,6 +60,26 @@ export function calculatePublishedDate(publishedText) {
|
|||
return date.getTime() - timeSpan
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {{
|
||||
* liveNow: boolean,
|
||||
* isUpcoming: boolean,
|
||||
* premiereTimestamp: number,
|
||||
* published: number
|
||||
* }[]} videos
|
||||
*/
|
||||
export function setPublishedTimestampsInvidious(videos) {
|
||||
videos.forEach(video => {
|
||||
if (video.liveNow) {
|
||||
video.published = new Date().getTime()
|
||||
} else if (video.isUpcoming) {
|
||||
video.published = video.premiereTimestamp * 1000
|
||||
} else if (typeof video.published === 'number') {
|
||||
video.published *= 1000
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function toLocalePublicationString ({ publishText, isLive = false, isUpcoming = false, isRSS = false }) {
|
||||
if (isLive) {
|
||||
return i18n.tc('Global.Counts.Watching Count', 0, { count: 0 })
|
||||
|
|
|
@ -370,7 +370,9 @@ $watched-transition-duration: 0.5s;
|
|||
}
|
||||
|
||||
&:hover .optionsButton,
|
||||
&:has(:focus-visible) .optionsButton {
|
||||
&:has(:focus-visible) .optionsButton,
|
||||
// Keep visible when the drop down is open
|
||||
:deep(.optionsButton:has(> .iconDropdown:focus-within)) {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,13 @@ import FtSubscribeButton from '../../components/ft-subscribe-button/ft-subscribe
|
|||
import ChannelAbout from '../../components/channel-about/channel-about.vue'
|
||||
|
||||
import autolinker from 'autolinker'
|
||||
import { copyToClipboard, extractNumberFromString, formatNumber, showToast } from '../../helpers/utils'
|
||||
import {
|
||||
setPublishedTimestampsInvidious,
|
||||
copyToClipboard,
|
||||
extractNumberFromString,
|
||||
formatNumber,
|
||||
showToast
|
||||
} from '../../helpers/utils'
|
||||
import { isNullOrEmpty } from '../../helpers/strings'
|
||||
import packageDetails from '../../../../package.json'
|
||||
import {
|
||||
|
@ -33,10 +39,6 @@ import {
|
|||
parseLocalListVideo,
|
||||
parseLocalSubscriberCount
|
||||
} from '../../helpers/api/local'
|
||||
import {
|
||||
addPublishedDatesInvidious,
|
||||
addPublishedDatesLocal
|
||||
} from '../../helpers/subscriptions'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Channel',
|
||||
|
@ -780,7 +782,6 @@ export default defineComponent({
|
|||
this.isElementListLoading = false
|
||||
|
||||
if (this.isSubscribedInAnyProfile && this.latestVideos.length > 0 && this.videoSortBy === 'newest') {
|
||||
addPublishedDatesLocal(this.latestVideos)
|
||||
this.updateSubscriptionVideosCacheByChannel({
|
||||
channelId: this.id,
|
||||
// create a copy so that we only cache the first page
|
||||
|
@ -917,7 +918,6 @@ export default defineComponent({
|
|||
this.isElementListLoading = false
|
||||
|
||||
if (this.isSubscribedInAnyProfile && this.latestLive.length > 0 && this.liveSortBy === 'newest') {
|
||||
addPublishedDatesLocal(this.latestLive)
|
||||
this.updateSubscriptionLiveCacheByChannel({
|
||||
channelId: this.id,
|
||||
// create a copy so that we only cache the first page
|
||||
|
@ -992,7 +992,6 @@ export default defineComponent({
|
|||
thumbnailUrl: youtubeImageUrlToInvidious(thumbnailUrl, this.currentInvidiousInstance)
|
||||
}
|
||||
})
|
||||
this.latestVideos = response.latestVideos
|
||||
|
||||
if (response.authorBanners instanceof Array && response.authorBanners.length > 0) {
|
||||
this.bannerUrl = youtubeImageUrlToInvidious(response.authorBanners[0].url, this.currentInvidiousInstance)
|
||||
|
@ -1088,6 +1087,8 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
invidiousAPICall(payload).then((response) => {
|
||||
setPublishedTimestampsInvidious(response.videos)
|
||||
|
||||
if (more) {
|
||||
this.latestVideos = this.latestVideos.concat(response.videos)
|
||||
} else {
|
||||
|
@ -1097,7 +1098,6 @@ export default defineComponent({
|
|||
this.isElementListLoading = false
|
||||
|
||||
if (this.isSubscribedInAnyProfile && !more && this.latestVideos.length > 0 && this.videoSortBy === 'newest') {
|
||||
addPublishedDatesInvidious(this.latestVideos)
|
||||
this.updateSubscriptionVideosCacheByChannel({
|
||||
channelId: this.id,
|
||||
// create a copy so that we only cache the first page
|
||||
|
@ -1143,7 +1143,7 @@ export default defineComponent({
|
|||
// https://github.com/iv-org/invidious/issues/3801
|
||||
response.videos.forEach(video => {
|
||||
video.isUpcoming = false
|
||||
delete video.publishedText
|
||||
delete video.published
|
||||
delete video.premiereTimestamp
|
||||
})
|
||||
|
||||
|
@ -1199,6 +1199,8 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
invidiousAPICall(payload).then((response) => {
|
||||
setPublishedTimestampsInvidious(response.videos)
|
||||
|
||||
if (more) {
|
||||
this.latestLive.push(...response.videos)
|
||||
} else {
|
||||
|
@ -1208,7 +1210,6 @@ export default defineComponent({
|
|||
this.isElementListLoading = false
|
||||
|
||||
if (this.isSubscribedInAnyProfile && !more && this.latestLive.length > 0 && this.liveSortBy === 'newest') {
|
||||
addPublishedDatesInvidious(this.latestLive)
|
||||
this.updateSubscriptionLiveCacheByChannel({
|
||||
channelId: this.id,
|
||||
// create a copy so that we only cache the first page
|
||||
|
|
|
@ -5,7 +5,7 @@ import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue'
|
|||
import FtLoader from '../../components/ft-loader/ft-loader.vue'
|
||||
import packageDetails from '../../../../package.json'
|
||||
import { getHashtagLocal, parseLocalListVideo } from '../../helpers/api/local'
|
||||
import { copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { copyToClipboard, setPublishedTimestampsInvidious, showToast } from '../../helpers/utils'
|
||||
import { isNullOrEmpty } from '../../helpers/strings'
|
||||
import { getHashtagInvidious } from '../../helpers/api/invidious'
|
||||
|
||||
|
@ -73,6 +73,7 @@ export default defineComponent({
|
|||
getInvidiousHashtag: async function(hashtag, page) {
|
||||
try {
|
||||
const videos = await getHashtagInvidious(hashtag, page)
|
||||
setPublishedTimestampsInvidious(videos)
|
||||
this.hashtag = '#' + hashtag
|
||||
this.isLoading = false
|
||||
this.apiUsed = 'invidious'
|
||||
|
|
|
@ -12,7 +12,7 @@ import {
|
|||
getLocalPlaylistContinuation,
|
||||
parseLocalPlaylistVideo,
|
||||
} from '../../helpers/api/local'
|
||||
import { extractNumberFromString, showToast } from '../../helpers/utils'
|
||||
import { extractNumberFromString, setPublishedTimestampsInvidious, showToast } from '../../helpers/utils'
|
||||
import { invidiousGetPlaylistInfo, youtubeImageUrlToInvidious } from '../../helpers/api/invidious'
|
||||
|
||||
export default defineComponent({
|
||||
|
@ -113,6 +113,17 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
searchVideoModeAllowed() {
|
||||
return this.isUserPlaylistRequested
|
||||
},
|
||||
searchQueryTextRequested() {
|
||||
return this.$route.query.searchQueryText
|
||||
},
|
||||
searchQueryTextPresent() {
|
||||
const searchQueryText = this.searchQueryTextRequested
|
||||
return typeof searchQueryText === 'string' && searchQueryText !== ''
|
||||
},
|
||||
|
||||
isUserPlaylistRequested: function () {
|
||||
return this.$route.query.playlistType === 'user'
|
||||
},
|
||||
|
@ -181,6 +192,11 @@ export default defineComponent({
|
|||
},
|
||||
created: function () {
|
||||
this.getPlaylistInfoDebounce = debounce(this.getPlaylistInfo, 100)
|
||||
|
||||
if (this.searchVideoModeAllowed && this.searchQueryTextPresent) {
|
||||
this.playlistInVideoSearchMode = true
|
||||
this.videoSearchQuery = this.searchQueryTextRequested
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
this.getPlaylistInfoDebounce()
|
||||
|
@ -284,6 +300,8 @@ export default defineComponent({
|
|||
const dateString = new Date(result.updated * 1000)
|
||||
this.lastUpdated = dateString.toLocaleDateString(this.currentLocale, { year: 'numeric', month: 'short', day: 'numeric' })
|
||||
|
||||
setPublishedTimestampsInvidious(result.videos)
|
||||
|
||||
this.playlistItems = result.videos
|
||||
|
||||
this.isLoading = false
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
:view-count="viewCount"
|
||||
:info-source="infoSource"
|
||||
:more-video-data-available="moreVideoDataAvailable"
|
||||
:search-video-mode-allowed="searchVideoModeAllowed"
|
||||
:search-video-mode-enabled="playlistInVideoSearchMode"
|
||||
:search-query-text="searchQueryTextRequested"
|
||||
class="playlistInfo"
|
||||
:class="{
|
||||
promptOpen,
|
||||
|
|
|
@ -5,7 +5,7 @@ import FtElementList from '../../components/ft-element-list/ft-element-list.vue'
|
|||
import FtIconButton from '../../components/ft-icon-button/ft-icon-button.vue'
|
||||
|
||||
import { invidiousAPICall } from '../../helpers/api/invidious'
|
||||
import { copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { copyToClipboard, setPublishedTimestampsInvidious, showToast } from '../../helpers/utils'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Popular',
|
||||
|
@ -60,11 +60,15 @@ export default defineComponent({
|
|||
return
|
||||
}
|
||||
|
||||
this.shownResults = result.filter((item) => {
|
||||
const items = result.filter((item) => {
|
||||
return item.type === 'video' || item.type === 'shortVideo' || item.type === 'channel' || item.type === 'playlist'
|
||||
})
|
||||
setPublishedTimestampsInvidious(items.filter(item => item.type === 'video' || item.type === 'shortVideo'))
|
||||
|
||||
this.shownResults = items
|
||||
|
||||
this.isLoading = false
|
||||
this.$store.commit('setPopularCache', this.shownResults)
|
||||
this.$store.commit('setPopularCache', items)
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -2,7 +2,12 @@ import { defineComponent } from 'vue'
|
|||
import FtLoader from '../../components/ft-loader/ft-loader.vue'
|
||||
import FtCard from '../../components/ft-card/ft-card.vue'
|
||||
import FtElementList from '../../components/ft-element-list/ft-element-list.vue'
|
||||
import { copyToClipboard, searchFiltersMatch, showToast } from '../../helpers/utils'
|
||||
import {
|
||||
copyToClipboard,
|
||||
searchFiltersMatch,
|
||||
setPublishedTimestampsInvidious,
|
||||
showToast
|
||||
} from '../../helpers/utils'
|
||||
import { getLocalSearchContinuation, getLocalSearchResults } from '../../helpers/api/local'
|
||||
import { invidiousAPICall } from '../../helpers/api/invidious'
|
||||
import TopNavEvents from '../../components/top-nav/top-nav-events'
|
||||
|
@ -219,6 +224,8 @@ export default defineComponent({
|
|||
return item.type === 'video' || item.type === 'channel' || item.type === 'playlist' || item.type === 'hashtag'
|
||||
})
|
||||
|
||||
setPublishedTimestampsInvidious(returnData.filter(item => item.type === 'video'))
|
||||
|
||||
if (this.searchPage !== 1) {
|
||||
this.shownResults = this.shownResults.concat(returnData)
|
||||
} else {
|
||||
|
|
|
@ -6,7 +6,7 @@ import FtElementList from '../../components/ft-element-list/ft-element-list.vue'
|
|||
import FtIconButton from '../../components/ft-icon-button/ft-icon-button.vue'
|
||||
import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue'
|
||||
|
||||
import { copyToClipboard, showToast } from '../../helpers/utils'
|
||||
import { copyToClipboard, setPublishedTimestampsInvidious, showToast } from '../../helpers/utils'
|
||||
import { getLocalTrending } from '../../helpers/api/local'
|
||||
import { invidiousAPICall } from '../../helpers/api/invidious'
|
||||
|
||||
|
@ -146,6 +146,8 @@ export default defineComponent({
|
|||
return item.type === 'video' || item.type === 'channel' || item.type === 'playlist'
|
||||
})
|
||||
|
||||
setPublishedTimestampsInvidious(returnData.filter(item => item.type === 'video'))
|
||||
|
||||
this.shownResults = returnData
|
||||
this.isLoading = false
|
||||
this.$store.commit('setTrendingCache', { value: returnData, page: this.currentTab })
|
||||
|
|
|
@ -16,6 +16,36 @@
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.searchInputsRow {
|
||||
display: grid;
|
||||
|
||||
/* 2 columns */
|
||||
grid-template-columns: 1fr auto;
|
||||
column-gap: 16px;
|
||||
}
|
||||
@media only screen and (max-width: 800px) {
|
||||
.searchInputsRow {
|
||||
/* Switch to 2 rows from 2 columns */
|
||||
grid-template-columns: auto;
|
||||
grid-template-rows: auto auto;
|
||||
}
|
||||
}
|
||||
|
||||
.optionsRow {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: 1fr;
|
||||
align-items: center;
|
||||
}
|
||||
@media only screen and (max-width: 800px) {
|
||||
.optionsRow {
|
||||
/* Switch to 2 rows from 2 columns */
|
||||
grid-template-columns: auto;
|
||||
grid-template-rows: auto auto;
|
||||
align-items: stretch;
|
||||
}
|
||||
}
|
||||
|
||||
.sortSelect {
|
||||
/* Put it on the right */
|
||||
margin-inline-start: auto;
|
||||
|
|
|
@ -10,6 +10,7 @@ import FtSelect from '../../components/ft-select/ft-select.vue'
|
|||
import FtElementList from '../../components/ft-element-list/ft-element-list.vue'
|
||||
import FtInput from '../../components/ft-input/ft-input.vue'
|
||||
import FtIconButton from '../../components/ft-icon-button/ft-icon-button.vue'
|
||||
import FtToggleSwitch from '../../components/ft-toggle-switch/ft-toggle-switch.vue'
|
||||
|
||||
const SORT_BY_VALUES = {
|
||||
NameAscending: 'name_ascending',
|
||||
|
@ -37,6 +38,7 @@ export default defineComponent({
|
|||
'ft-element-list': FtElementList,
|
||||
'ft-icon-button': FtIconButton,
|
||||
'ft-input': FtInput,
|
||||
'ft-toggle-switch': FtToggleSwitch,
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
|
@ -45,6 +47,7 @@ export default defineComponent({
|
|||
searchDataLimit: 100,
|
||||
showLoadMoreButton: false,
|
||||
query: '',
|
||||
doSearchPlaylistsWithMatchingVideos: false,
|
||||
activeData: [],
|
||||
sortBy: SORT_BY_VALUES.LatestPlayedFirst,
|
||||
}
|
||||
|
@ -165,6 +168,10 @@ export default defineComponent({
|
|||
this.searchDataLimit = 100
|
||||
this.filterPlaylistAsync()
|
||||
},
|
||||
doSearchPlaylistsWithMatchingVideos() {
|
||||
this.searchDataLimit = 100
|
||||
this.filterPlaylistAsync()
|
||||
},
|
||||
fullData() {
|
||||
this.activeData = this.fullData
|
||||
this.filterPlaylist()
|
||||
|
@ -209,15 +216,22 @@ export default defineComponent({
|
|||
if (this.lowerCaseQuery === '') {
|
||||
this.activeData = this.fullData
|
||||
this.showLoadMoreButton = this.allPlaylists.length > this.activeData.length
|
||||
} else {
|
||||
const filteredPlaylists = this.allPlaylists.filter((playlist) => {
|
||||
if (typeof (playlist.playlistName) !== 'string') { return false }
|
||||
|
||||
return playlist.playlistName.toLowerCase().includes(this.lowerCaseQuery)
|
||||
})
|
||||
this.showLoadMoreButton = filteredPlaylists.length > this.searchDataLimit
|
||||
this.activeData = filteredPlaylists.length < this.searchDataLimit ? filteredPlaylists : filteredPlaylists.slice(0, this.searchDataLimit)
|
||||
return
|
||||
}
|
||||
|
||||
const filteredPlaylists = this.allPlaylists.filter((playlist) => {
|
||||
if (typeof (playlist.playlistName) !== 'string') { return false }
|
||||
|
||||
if (this.doSearchPlaylistsWithMatchingVideos) {
|
||||
if (playlist.videos.some((v) => v.title.toLowerCase().includes(this.lowerCaseQuery))) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return playlist.playlistName.toLowerCase().includes(this.lowerCaseQuery)
|
||||
})
|
||||
this.showLoadMoreButton = filteredPlaylists.length > this.searchDataLimit
|
||||
this.activeData = filteredPlaylists.length < this.searchDataLimit ? filteredPlaylists : filteredPlaylists.slice(0, this.searchDataLimit)
|
||||
},
|
||||
|
||||
createNewPlaylist: function () {
|
||||
|
|
|
@ -19,24 +19,39 @@
|
|||
class="newPlaylistButton"
|
||||
@click="createNewPlaylist"
|
||||
/>
|
||||
<ft-input
|
||||
<div
|
||||
v-if="fullData.length > 1"
|
||||
ref="searchBar"
|
||||
:placeholder="$t('User Playlists.Search bar placeholder')"
|
||||
:show-clear-text-button="true"
|
||||
:show-action-button="false"
|
||||
@input="(input) => query = input"
|
||||
@clear="query = ''"
|
||||
/>
|
||||
<ft-select
|
||||
v-if="fullData.length > 1"
|
||||
class="sortSelect"
|
||||
:value="sortBy"
|
||||
:select-names="sortBySelectNames"
|
||||
:select-values="sortBySelectValues"
|
||||
:placeholder="$t('User Playlists.Sort By.Sort By')"
|
||||
@change="sortBy = $event"
|
||||
/>
|
||||
class="searchInputsRow"
|
||||
>
|
||||
<ft-input
|
||||
ref="searchBar"
|
||||
:placeholder="$t('User Playlists.Search bar placeholder')"
|
||||
:show-clear-text-button="true"
|
||||
:show-action-button="false"
|
||||
@input="(input) => query = input"
|
||||
@clear="query = ''"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="optionsRow"
|
||||
>
|
||||
<ft-toggle-switch
|
||||
v-if="fullData.length > 1"
|
||||
:label="$t('User Playlists.Playlists with Matching Videos')"
|
||||
:compact="true"
|
||||
:default-value="doSearchPlaylistsWithMatchingVideos"
|
||||
@change="doSearchPlaylistsWithMatchingVideos = !doSearchPlaylistsWithMatchingVideos"
|
||||
/>
|
||||
<ft-select
|
||||
v-if="fullData.length > 1"
|
||||
class="sortSelect"
|
||||
:value="sortBy"
|
||||
:select-names="sortBySelectNames"
|
||||
:select-values="sortBySelectValues"
|
||||
:placeholder="$t('User Playlists.Sort By.Sort By')"
|
||||
@change="sortBy = $event"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<ft-flex-box
|
||||
v-if="fullData.length === 0"
|
||||
|
@ -56,6 +71,7 @@
|
|||
v-else-if="activeData.length > 0 && !isLoading"
|
||||
:data="activeData"
|
||||
:data-type="'playlist'"
|
||||
:search-query-text="doSearchPlaylistsWithMatchingVideos ? lowerCaseQuery : ''"
|
||||
:use-channels-hidden-preference="false"
|
||||
:hide-forbidden-titles="false"
|
||||
/>
|
||||
|
|
|
@ -11,6 +11,7 @@ import WatchVideoLiveChat from '../../components/watch-video-live-chat/watch-vid
|
|||
import WatchVideoPlaylist from '../../components/watch-video-playlist/watch-video-playlist.vue'
|
||||
import WatchVideoRecommendations from '../../components/watch-video-recommendations/watch-video-recommendations.vue'
|
||||
import FtAgeRestricted from '../../components/ft-age-restricted/ft-age-restricted.vue'
|
||||
import packageDetails from '../../../../package.json'
|
||||
import { pathExists } from '../../helpers/filesystem'
|
||||
import {
|
||||
buildVTTFileLocally,
|
||||
|
@ -1774,7 +1775,7 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
updateTitle: function () {
|
||||
document.title = `${this.videoTitle} - FreeTube`
|
||||
document.title = `${this.videoTitle} - ${packageDetails.productName}`
|
||||
},
|
||||
|
||||
isHiddenVideo: function (forbiddenTitles, channelsHidden, video) {
|
||||
|
|
|
@ -119,7 +119,7 @@ User Playlists:
|
|||
Playlist Message: هذه الصفحة لا تظهر قائمات التشغيل بشكل كامل, وإنما تظهر فيديوات
|
||||
إحتفضت عليها أو فضّلتها. عندما يكمل العمل بالكامل على هذه الصفحة, سترى كل فيديواتك
|
||||
هنا تنتقل إلى قائمة تشغيل تسمى "المفضلة".
|
||||
Search bar placeholder: بحث في قائمة التشغيل
|
||||
Search bar placeholder: بحث عن قوائم التشغيل
|
||||
Empty Search Message: لا توجد مقاطع فيديو في قائمة التشغيل هذه تتطابق مع بحثك
|
||||
This playlist currently has no videos.: لا تحتوي قائمة التشغيل هذه حاليًا على مقاطع
|
||||
فيديو.
|
||||
|
@ -211,6 +211,7 @@ User Playlists:
|
|||
Enable Quick Bookmark With This Playlist: تمكين الإشارة المرجعية السريعة مع قائمة
|
||||
التشغيل هذه
|
||||
Disable Quick Bookmark: تعطيل الإشارة المرجعية السريعة
|
||||
Playlists with Matching Videos: قوائم التشغيل مع مقاطع الفيديو المطابقة
|
||||
History:
|
||||
# On History Page
|
||||
History: 'السجلّ'
|
||||
|
|
|
@ -128,7 +128,7 @@ User Playlists:
|
|||
Playlist Message: Tato stránka neodráží plně funkční playlisty. Uvádí pouze videa,
|
||||
která jste si uložili nebo zařadili mezi oblíbená. Po dokončení práce budou všechna
|
||||
aktuálně zde umístěná videa přenesena do seznamu „Oblíbené“.
|
||||
Search bar placeholder: Hledat v playlistu
|
||||
Search bar placeholder: Hledat playlisty
|
||||
Empty Search Message: V tomto playlistu nejsou žádná videa, která by odpovídala
|
||||
vašemu vyhledávání
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Opravdu
|
||||
|
@ -220,6 +220,7 @@ User Playlists:
|
|||
Remove from Favorites: Odebrat z playlistu {playlistName}
|
||||
Disable Quick Bookmark: Vypnout rychlé uložení
|
||||
Enable Quick Bookmark With This Playlist: Zapnout u tohoto playlistu rychlé uložení
|
||||
Playlists with Matching Videos: Playlisty s odpovídajícími videi
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Historie'
|
||||
|
|
|
@ -34,22 +34,29 @@ Forward: 'Fremad'
|
|||
Global:
|
||||
Videos: Videoer
|
||||
|
||||
Counts:
|
||||
Watching Count: 1 ser | {count} ser
|
||||
Subscriber Count: 1 abonnent | {count} abonnenter
|
||||
View Count: 1 visning | {count} visninger
|
||||
Video Count: 1 video | {count} videoer
|
||||
Channel Count: 1 kanal | {count} kanaler
|
||||
Community: Fællesskab
|
||||
Version {versionNumber} is now available! Click for more details: 'Version {versionNumber}
|
||||
er nu tilgængelig! Klik for flere detaljer'
|
||||
Download From Site: 'Hent Fra Netsted'
|
||||
A new blog is now available, {blogTitle}. Click to view more: 'En ny blog er nu tilgængelig,
|
||||
{blogTitle}. Klik for at vise mere'
|
||||
{blogTitle}. Klik for at se mere'
|
||||
|
||||
# Search Bar
|
||||
Search / Go to URL: 'Søg / Gå til URL'
|
||||
Search / Go to URL: 'Søg/gå til URL'
|
||||
# In Filter Button
|
||||
Search Filters:
|
||||
Search Filters: 'Søgefiltre'
|
||||
Sort By:
|
||||
Sort By: 'Sortér Efter'
|
||||
Sort By: 'Sortér efter'
|
||||
Most Relevant: 'Mest Relevante'
|
||||
Rating: 'Bedømmelse'
|
||||
Upload Date: 'Indsendelsesdato'
|
||||
Upload Date: 'Dato for Upload'
|
||||
View Count: 'Visningstal'
|
||||
Time:
|
||||
Time: 'Tid'
|
||||
|
@ -67,34 +74,36 @@ Search Filters:
|
|||
#& Playlists
|
||||
Movies: Film
|
||||
Duration:
|
||||
Duration: 'Længde'
|
||||
All Durations: 'Alle Længder'
|
||||
Duration: 'Varighed'
|
||||
All Durations: 'Alle Varigheder'
|
||||
Short (< 4 minutes): 'Kort (< 4 minutter)'
|
||||
Long (> 20 minutes): 'Lang (> 20 minutter)'
|
||||
# On Search Page
|
||||
Medium (4 - 20 minutes): Medium (4-20 minutter)
|
||||
Medium (4 - 20 minutes): Mellemlang (4-20 minutter)
|
||||
Search Results: 'Søgeresultater'
|
||||
Fetching results. Please wait: 'Skaffer resultater. Vent venligst'
|
||||
Fetch more results: 'Skaf flere resultater'
|
||||
Fetching results. Please wait: 'Henter resultater. Vent venligst'
|
||||
Fetch more results: 'Hent flere resultater'
|
||||
# Sidebar
|
||||
There are no more results for this search: Der er ikke flere resultater for denne
|
||||
søgning
|
||||
Subscriptions:
|
||||
# On Subscriptions Page
|
||||
Subscriptions: 'Abonnementer'
|
||||
Latest Subscriptions: 'Seneste Abonnementer'
|
||||
Subscriptions: 'Abonnenter'
|
||||
Latest Subscriptions: 'Seneste Abonnenter'
|
||||
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Din
|
||||
abonnementsliste er i øjeblikket tom. Begynd at tilføje abonnementer, for at se
|
||||
dem her.'
|
||||
'Getting Subscriptions. Please wait.': 'Henter Abonnementer. Vent venligst.'
|
||||
Refresh Subscriptions: 'Genopfrisk Abonnementer'
|
||||
abonnentliste er i øjeblikket tom. Begynd at tilføje abonnenter for at se dem
|
||||
her.'
|
||||
'Getting Subscriptions. Please wait.': 'Henter Abonnenter. Vent venligst.'
|
||||
Refresh Subscriptions: 'Opdatér Abonnenter'
|
||||
Load More Videos: Indlæs Flere Videoer
|
||||
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Denne
|
||||
profil har et stort antal abonnementer. Gennemtvinger RSS for at undgå adgangsbegrænsning
|
||||
profil har et stort antal abonnenter. Gennemtvinger RSS for at undgå adgangsbegrænsning
|
||||
Error Channels: Kanaler med Fejl
|
||||
Empty Channels: De kanaler, du abonnerer på, har i øjeblikket ingen videoer.
|
||||
Disabled Automatic Fetching: Du har deaktiveret automatisk hentning af abonnementer.
|
||||
Opdater abonnementer for at se dem her.
|
||||
Disabled Automatic Fetching: Du har deaktiveret automatisk hentning af abonnenter.
|
||||
Opdatér abonnenter for at se dem her.
|
||||
Empty Posts: Dine abonnerede kanaler har i øjeblikket ingen opslag.
|
||||
Load More Posts: Indlæs Flere Opslag
|
||||
Trending:
|
||||
Trending: 'Trender'
|
||||
Music: Musik
|
||||
|
@ -110,18 +119,94 @@ User Playlists:
|
|||
liste over gemte videoer er tom. Klik på gem-knappen i hjørnet af en video, for
|
||||
at få den optegnet her
|
||||
Playlist Message: Denne side afspejler ikke fuldt funktionelle playlister. Den optegner
|
||||
blot videoer som du har gemt eller favoriseret. Når arbejdet er færdigt, vil alle
|
||||
videoer her blive flyttet til en 'Favoritter'-playliste.
|
||||
blot videoer, som du har gemt eller favoriseret. Når arbejdet er færdigt, vil
|
||||
alle videoer her blive flyttet til en 'Favoritter'-playliste.
|
||||
Search bar placeholder: Søg i Playliste
|
||||
Empty Search Message: Der er ingen videoer i denne playliste, der passer til din
|
||||
søgning
|
||||
This playlist currently has no videos.: Denne playliste har i øjeblikket ingen videoer.
|
||||
Create New Playlist: Opret Ny Playliste
|
||||
Add to Playlist: Føj til Playliste
|
||||
You have no playlists. Click on the create new playlist button to create a new one.: Du
|
||||
har ingen playlister. Klik på 'Opret Ny Playliste'-knappen for at oprette en ny.
|
||||
Remove from Favorites: Fjern fra {playlistName}
|
||||
Move Video Up: Flyt Video Op
|
||||
Copy Playlist: Kopiér Playliste
|
||||
Remove Watched Videos: Fjern Sete Videoer
|
||||
Delete Playlist: Slet Playliste
|
||||
Sort By:
|
||||
EarliestCreatedFirst: Tidligst Oprettet
|
||||
EarliestUpdatedFirst: Tidligst Opdateret
|
||||
LatestPlayedFirst: Afspillet For Nyligt
|
||||
LatestCreatedFirst: Oprettet For Nyligt
|
||||
Sort By: Sortér efter
|
||||
LatestUpdatedFirst: Opdateret For Nyligt
|
||||
EarliestPlayedFirst: Tidligst Afspillet
|
||||
Are you sure you want to delete this playlist? This cannot be undone: Er du sikker
|
||||
på, at du vil slette denne playliste? Dette kan ikke fortrydes.
|
||||
SinglePlaylistView:
|
||||
Search for Videos: Søg efter Videoer
|
||||
Toast:
|
||||
This video cannot be moved up.: Denne video kan ikke flyttes op.
|
||||
This video cannot be moved down.: Denne video kan ikke flyttes ned.
|
||||
Video has been removed: Video er blevet fjernet
|
||||
There was a problem with removing this video: Der opstod et problem med at fjerne
|
||||
denne video
|
||||
Some videos in the playlist are not loaded yet. Click here to copy anyway.: Nogle
|
||||
videoer i denne playliste er ikke indlæst endnu. Klik her for at kopiere alligevel.
|
||||
Playlist name cannot be empty. Please input a name.: Playliste navn kan ikke
|
||||
være tomt. Indtast venligst et navn.
|
||||
This playlist is protected and cannot be removed.: Denne playliste er beskyttet
|
||||
og kan ikke fjernes.
|
||||
There was an issue with updating this playlist.: Der opstod et problem med at
|
||||
opdatere denne playliste.
|
||||
This playlist does not exist: Denne playliste eksisterer ikke
|
||||
Playlist has been updated.: Playliste er blevet opdateret.
|
||||
"{videoCount} video(s) have been removed": 1 video er blevet fjernet | {videoCount}
|
||||
videoer er blevet fjernet
|
||||
There were no videos to remove.: Der var ingen videoer at fjerne.
|
||||
Playlist {playlistName} has been deleted.: Playliste {playlistName} er blevet
|
||||
slettet.
|
||||
AddVideoPrompt:
|
||||
Select a playlist to add your N videos to: Vælg en playliste, du vil føje din
|
||||
video til | Vælg en playliste, du vil føje dine {videoCount} videoer til
|
||||
N playlists selected: '{playlistCount} Valgt'
|
||||
Search in Playlists: Søg i Playlister
|
||||
Toast:
|
||||
"{videoCount} video(s) added to {playlistCount} playlists": 1 video tilføjet
|
||||
til {playlistCount} playlister | {videoCount} videoer tilføjet til {playlistCount}
|
||||
playlister
|
||||
You haven't selected any playlist yet.: Du har ikke valgt nogen playliste endnu.
|
||||
"{videoCount} video(s) added to 1 playlist": 1 video tilføjet til 1 playliste
|
||||
| {videoCount} videoer tilføjet til 1 playliste
|
||||
Added {count} Times: Tilføjet {count} Gang | Tilføjet {count} Gange
|
||||
Save: Gem
|
||||
CreatePlaylistPrompt:
|
||||
Toast:
|
||||
There was an issue with creating the playlist.: Der opstod et problem med at
|
||||
oprette denne playliste.
|
||||
There is already a playlist with this name. Please pick a different name.: En
|
||||
playliste med dette navn eksisterer allerede. Vælg venligst et andet navn.
|
||||
New Playlist Name: Ny Playliste Navn
|
||||
Create: Opret
|
||||
Move Video Down: Flyt Video Ned
|
||||
Playlist Description: Playliste Beskrivelse
|
||||
Save Changes: Gem Ændringer
|
||||
Cancel: Annullér
|
||||
Edit Playlist Info: Redigér Playliste Info
|
||||
Add to Favorites: Føj til {playlistName}
|
||||
Remove from Playlist: Fjern fra Playliste
|
||||
Playlist Name: Playliste Navn
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Er
|
||||
du sikker på, at du vil fjerne alle sete videoer fra denne playliste? Dette kan
|
||||
ikke fortrydes.
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Historik'
|
||||
Watch History: 'Set Historik'
|
||||
Your history list is currently empty.: 'Din historikliste er i øjeblikket tom.'
|
||||
Empty Search Message: Der er ingen videoer i din historie som passer til din søgning
|
||||
Search bar placeholder: Søg i Historie
|
||||
Empty Search Message: Der er ingen videoer i din historik som passer til din søgning
|
||||
Search bar placeholder: Søg i Historik
|
||||
Settings:
|
||||
# On Settings Page
|
||||
Settings: 'Indstillinger'
|
||||
|
@ -143,14 +228,16 @@ Settings:
|
|||
Grid: 'Gitter'
|
||||
List: 'Liste'
|
||||
Thumbnail Preference:
|
||||
Thumbnail Preference: 'Indstilling for Forhåndsvisning'
|
||||
Thumbnail Preference: 'Præference for Miniaturebillede'
|
||||
Default: 'Standard'
|
||||
Beginning: 'Begyndelsen'
|
||||
Beginning: 'Begyndelse'
|
||||
Middle: 'Midten'
|
||||
End: 'Slutningen'
|
||||
End: 'Slutning'
|
||||
Blur: Slør
|
||||
Hidden: Skjult
|
||||
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious-Instans
|
||||
(Standard er https://invidious.snopyta.org)'
|
||||
Region for Trending: 'Område for Mode'
|
||||
Region for Trending: 'Område for Trending'
|
||||
#! List countries
|
||||
View all Invidious instance information: Vis al Invidious-instans-information
|
||||
Clear Default Instance: Ryd Standard Instans
|
||||
|
@ -173,59 +260,62 @@ Settings:
|
|||
Base Theme:
|
||||
Base Theme: 'Grundtema'
|
||||
Black: 'Sort'
|
||||
Dark: 'Mørkt'
|
||||
Light: 'Lyst'
|
||||
Dark: 'Mørk'
|
||||
Light: 'Lys'
|
||||
Dracula: 'Dracula'
|
||||
System Default: Systemstandard
|
||||
Catppuccin Mocha: Catppuccin Mokka
|
||||
Pastel Pink: Pastel Lyserød
|
||||
Nordic: Nordisk
|
||||
Main Color Theme:
|
||||
Main Color Theme: 'Primært Farvetema'
|
||||
Red: 'Rødt'
|
||||
Pink: 'Lyserødt'
|
||||
Main Color Theme: 'Primær Farvetema'
|
||||
Red: 'Rød'
|
||||
Pink: 'Lyserød'
|
||||
Purple: 'Lilla'
|
||||
Deep Purple: 'Mørkelilla'
|
||||
Indigo: 'Indigoblå'
|
||||
Blue: 'Blåt'
|
||||
Light Blue: 'Lyseblåt'
|
||||
Blue: 'Blå'
|
||||
Light Blue: 'Lyseblå'
|
||||
Cyan: 'Cyan'
|
||||
Teal: 'Turkisfarvet'
|
||||
Green: 'Grønt'
|
||||
Light Green: 'Lysegrønt'
|
||||
Lime: 'Limegrønt'
|
||||
Yellow: 'Gult'
|
||||
Teal: 'Turkis'
|
||||
Green: 'Grøn'
|
||||
Light Green: 'Lysegrøn'
|
||||
Lime: 'Limegrøn'
|
||||
Yellow: 'Gul'
|
||||
Amber: 'Rav'
|
||||
Orange: 'Orange'
|
||||
Deep Orange: 'Dybt Orange'
|
||||
Deep Orange: 'Dyb Orange'
|
||||
Dracula Cyan: 'Dracula Cyan'
|
||||
Dracula Green: 'Dracula Grønt'
|
||||
Dracula Green: 'Dracula Grøn'
|
||||
Dracula Orange: 'Dracula Orange'
|
||||
Dracula Pink: 'Dracula Lyserødt'
|
||||
Dracula Pink: 'Dracula Lyserød'
|
||||
Dracula Purple: 'Dracula Lilla'
|
||||
Dracula Red: 'Dracula Rødt'
|
||||
Dracula Yellow: 'Dracula Gult'
|
||||
Catppuccin Mocha Green: Catppuccin Mokka Grønt
|
||||
Dracula Red: 'Dracula Rød'
|
||||
Dracula Yellow: 'Dracula Gul'
|
||||
Catppuccin Mocha Green: Catppuccin Mokka Grøn
|
||||
Catppuccin Mocha Rosewater: Catppuccin Mokka Rosenvand
|
||||
Catppuccin Mocha Flamingo: Catppuccin Mokka Flamingo
|
||||
Catppuccin Mocha Mauve: Capttuccin Mokka Lysviolet
|
||||
Catppuccin Mocha Peach: Catppuccin Mokka Ferskenfarvet
|
||||
Catppuccin Mocha Yellow: Catppuccin Mokka Gult
|
||||
Catppuccin Mocha Pink: Catppuccin Mokka Lyserødt
|
||||
Catppuccin Mocha Red: Catppuccin Mokka Rødt
|
||||
Catppuccin Mocha Maroon: Catppuccin Mokka Rødbrunt
|
||||
Catppuccin Mocha Teal: Catppuccin Mokka Turkisfarvet
|
||||
Catppuccin Mocha Peach: Catppuccin Mokka Fersken
|
||||
Catppuccin Mocha Yellow: Catppuccin Mokka Gul
|
||||
Catppuccin Mocha Pink: Catppuccin Mokka Lyserød
|
||||
Catppuccin Mocha Red: Catppuccin Mokka Rød
|
||||
Catppuccin Mocha Maroon: Catppuccin Mokka Rødbrun
|
||||
Catppuccin Mocha Teal: Catppuccin Mokka Turkis
|
||||
Catppuccin Mocha Sky: Catppuccin Mokka Himmel
|
||||
Catppuccin Mocha Sapphire: Catppuccin Mokka Safir
|
||||
Catppuccin Mocha Blue: Catppuccin Mokka Blåt
|
||||
Catppuccin Mocha Lavender: Catppuccin Mokka Lavendelblå
|
||||
Secondary Color Theme: 'Sekundært Farvetema'
|
||||
Catppuccin Mocha Blue: Catppuccin Mokka Blå
|
||||
Catppuccin Mocha Lavender: Catppuccin Mokka Lavendel
|
||||
Secondary Color Theme: 'Sekundær Farvetema'
|
||||
#* Main Color Theme
|
||||
UI Scale: Skalering af Brugerflade
|
||||
Disable Smooth Scrolling: Deaktivér Jævn Rulning
|
||||
Expand Side Bar by Default: Udvid Sidebar som Standard
|
||||
Hide Side Bar Labels: Skjul Sidebarens Etiketter
|
||||
Hide FreeTube Header Logo: Skjul FreeTube Overskriftslogo
|
||||
Player Settings:
|
||||
Player Settings: 'Afspilningsindstillinger'
|
||||
Force Local Backend for Legacy Formats: 'Tving Lokal Server for Gamle Formater'
|
||||
Force Local Backend for Legacy Formats: 'Tving Lokal Backend til Ældre Formater'
|
||||
Play Next Video: 'Afspil Næste Video'
|
||||
Turn on Subtitles by Default: 'Slå Undertekster til som Standard'
|
||||
Autoplay Videos: 'Autospil Videoer'
|
||||
|
@ -237,7 +327,7 @@ Settings:
|
|||
Default Video Format:
|
||||
Default Video Format: 'Standard Videoformat'
|
||||
Dash Formats: 'DASH-Formater'
|
||||
Legacy Formats: 'Gamle Formater'
|
||||
Legacy Formats: 'Ældre Formater'
|
||||
Audio Formats: 'Lydformater'
|
||||
Default Quality:
|
||||
Default Quality: 'Standardkvalitet'
|
||||
|
@ -267,35 +357,46 @@ Settings:
|
|||
Ask Path: Spørg efter Mappe til at Gemme
|
||||
Folder Label: Mappe til Skærmbilleder
|
||||
Next Video Interval: Næste Videointerval
|
||||
Max Video Playback Rate: Maks Videoafspilningshastighed
|
||||
Display Play Button In Video Player: Vis Afspilningsknap I Videoafspiller
|
||||
Max Video Playback Rate: Maks. Videoafspilningshastighed
|
||||
Display Play Button In Video Player: Vis Afspilningsknap i Videoafspiller
|
||||
Fast-Forward / Rewind Interval: Spol fremad / Spol tilbage Interval
|
||||
Video Playback Rate Interval: Videoafspilningshastighed Interval
|
||||
Scroll Playback Rate Over Video Player: Scroll-afspilningshastighed i Videoafspiller
|
||||
Scroll Volume Over Video Player: Scroll-lydstyrke i Videoafspiller
|
||||
Skip by Scrolling Over Video Player: Spring over ved at scrolle over videoafspilleren
|
||||
Scroll Playback Rate Over Video Player: Scroll Afspilningshastighed i Videoafspiller
|
||||
Scroll Volume Over Video Player: Scroll Lydstyrke i Videoafspiller
|
||||
Skip by Scrolling Over Video Player: Spring Over ved at Scrolle Over Videoafspilleren
|
||||
Comment Auto Load:
|
||||
Comment Auto Load: Kommentar Auto-Indlæs
|
||||
Allow DASH AV1 formats: Tillad DASH AV1-formater
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Privatlivsindstillinger'
|
||||
Remember History: 'Husk Historik'
|
||||
Save Watched Progress: 'Gem Set Fremskridt'
|
||||
Clear Search Cache: 'Ryd Lokalt Søgelager'
|
||||
Clear Search Cache: 'Ryd Søgecache'
|
||||
Are you sure you want to clear out your search cache?: 'Er du sikker på, at du
|
||||
vil udrydde dit lokale søgelager?'
|
||||
Search cache has been cleared: 'Lokalt søgelager er blevet ryddet'
|
||||
vil rydde din søgecache?'
|
||||
Search cache has been cleared: 'Søgecache blev ryddet'
|
||||
Remove Watch History: 'Fjern Set Historik'
|
||||
Are you sure you want to remove your entire watch history?: 'Er du sikker på,
|
||||
at du vil fjerne hele din sete historik?'
|
||||
Watch history has been cleared: 'Set historik er blevet ryddet'
|
||||
Watch history has been cleared: 'Set historik blev ryddet'
|
||||
Remove All Subscriptions / Profiles: 'Fjern Alle Abonnementer / Profiler'
|
||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Er
|
||||
du sikker på, at du vil fjerne alle abonnementer og profiler? Dette kan ikke
|
||||
du sikker på, at du vil fjerne alle abonnementer og profiler? Dette kan ikke
|
||||
fortrydes.'
|
||||
Automatically Remove Video Meta Files: Fjern Automatisk Video Metafiler
|
||||
All playlists have been removed: Alle playlister blev fjernet
|
||||
Are you sure you want to remove all your playlists?: Er du sikker på, at du vil
|
||||
fjerne alle dine playlister?
|
||||
Save Watched Videos With Last Viewed Playlist: Gem Sete Videoer med Sidst Sete
|
||||
Playliste
|
||||
Remove All Playlists: Fjern Alle Playlister
|
||||
Subscription Settings:
|
||||
Subscription Settings: 'Abonnementsindstillinger'
|
||||
Hide Videos on Watch: 'Skjul Videoer på Se'
|
||||
Fetch Feeds from RSS: 'Skaf Strømme fra RSS'
|
||||
Fetch Feeds from RSS: 'Hent Feeds fra RSS'
|
||||
Manage Subscriptions: 'Abonnementshåndtering'
|
||||
Only Show Latest Video for Each Channel: Vis Kun Seneste Video for Hver Kanal
|
||||
Fetch Automatically: Hent Feed Automatisk
|
||||
Data Settings:
|
||||
Data Settings: 'Dataindstillinger'
|
||||
Select Import Type: 'Vælg Importtype'
|
||||
|
@ -335,13 +436,15 @@ Settings:
|
|||
Manage Subscriptions: Abonnementshåndtering
|
||||
Check for Legacy Subscriptions: Søg efter Gamle Abonnementer
|
||||
Export Playlists: Eksportér Playlister
|
||||
Playlist insufficient data: Utilstrækkeligt data for "{playlist}" playlist, springer
|
||||
Playlist insufficient data: Utilstrækkelig data for "{playlist}" playliste, springer
|
||||
objektet over
|
||||
Import Playlists: Importér Playlister
|
||||
All playlists has been successfully imported: Alle playlister er blevet importeret
|
||||
succesfuldt
|
||||
All playlists has been successfully exported: Alle playlister er blevet eksporteret
|
||||
succesfuldt
|
||||
History File: Historik-fil
|
||||
Playlist File: Playliste-fil
|
||||
Advanced Settings:
|
||||
Advanced Settings: 'Avancerede indstillinger'
|
||||
Enable Debug Mode (Prints data to the console): 'Aktivér fejlretningstilstand
|
||||
|
@ -387,13 +490,13 @@ Settings:
|
|||
Proxy Settings: Indstillinger for Proxy
|
||||
Distraction Free Settings:
|
||||
Hide Active Subscriptions: Skjul Aktive Abonnementer
|
||||
Hide Live Chat: Skjul Direkte Chat
|
||||
Hide Live Chat: Skjul Live Chat
|
||||
Hide Popular Videos: Skjul Populære Videoer
|
||||
Hide Trending Videos: Skjul Videoer På Mode
|
||||
Hide Trending Videos: Skjul Trending Videoer
|
||||
Hide Recommended Videos: Skjul Anbefalede Videoer
|
||||
Hide Comment Likes: Skjul Kommentar-Tilkendegivelser
|
||||
Hide Comment Likes: Skjul Kommentar-Likes
|
||||
Hide Channel Subscribers: Skjul Kanal-Abonnenter
|
||||
Hide Video Likes And Dislikes: Skjul Video-Tilkendegivelser
|
||||
Hide Video Likes And Dislikes: Skjul Video-Likes og -Dislikes
|
||||
Hide Video Views: Skjul Videovisninger
|
||||
Distraction Free Settings: Distraktionsfri Indstillinger
|
||||
Hide Live Streams: Skjul Livestreams
|
||||
|
@ -401,6 +504,25 @@ Settings:
|
|||
Hide Sharing Actions: Skjul Delingshandlinger
|
||||
Hide Video Description: Skjul Videobeskrivelse
|
||||
Hide Playlists: Skjul Playlister
|
||||
Hide Upcoming Premieres: Skjul Kommende Premierer
|
||||
Hide Channels: Skjul Videoer Fra Kanaler
|
||||
Hide Chapters: Skjul Kapitler
|
||||
Hide Channels Already Exists: Kanal-ID eksisterer allerede
|
||||
Hide Featured Channels: Skjul Fremhævede Kanaler
|
||||
Hide Videos and Playlists Containing Text: Skjul Videoer og Playlister med Tekst
|
||||
Hide Profile Pictures in Comments: Skjul Profilbilleder i Kommentarer
|
||||
Display Titles Without Excessive Capitalisation: Vis Titler Uden Overdrevne Store
|
||||
Bogstaver og Tegnsætning
|
||||
Sections:
|
||||
General: Generelt
|
||||
Side Bar: Sidebjælke
|
||||
Hide Channels Placeholder: Kanal-ID
|
||||
Hide Channels API Error: Fejl ved hentning af bruger med det angivne ID. Tjek
|
||||
venligst igen, om ID'et er korrekt.
|
||||
Hide Channel Playlists: Skjul Kanal-playlister
|
||||
Hide Channel Community: Skjul Kanal-fællesskab
|
||||
Hide Channel Podcasts: Skjul Kanal-podcasts
|
||||
Hide Channels Invalid: Det angivne kanal-ID var ugyldigt
|
||||
The app needs to restart for changes to take effect. Restart and apply change?: App'en
|
||||
er nødt til at genstarte, for at ændringer kan træde i kraft. Genstart og anvend
|
||||
ændringer?
|
||||
|
@ -435,8 +557,28 @@ Settings:
|
|||
Fil
|
||||
Custom External Player Arguments: Brugerdefineret Ekstern Afspiller Argumenter
|
||||
External Player: Ekstern Afspiller
|
||||
Ignore Unsupported Action Warnings: Ignorér Advarsler Om Ikke-understøttede Handlinger
|
||||
Ignore Unsupported Action Warnings: Ignorér Advarsler om Ikke-understøttede Handlinger
|
||||
External Player Settings: Indstillinger for Ekstern Afspiller
|
||||
Players:
|
||||
None:
|
||||
Name: Ingen
|
||||
Password Settings:
|
||||
Set Password: Indstil Adgangskode
|
||||
Password Settings: Adgangskode-indstillinger
|
||||
Remove Password: Fjern Adgangskode
|
||||
Set Password To Prevent Access: Indstil en adgangskode for at forhindre adgang
|
||||
til indstillinger
|
||||
Password Dialog:
|
||||
Password: Adgangskode
|
||||
Enter Password To Unlock: Indtast adgangskode for at låse indstillinger op
|
||||
Unlock: Lås op
|
||||
Password Incorrect: Forkert Adgangskode
|
||||
Experimental Settings:
|
||||
Experimental Settings: Eksperimentelle Indstillinger
|
||||
Warning: Disse indstillinger er eksperimentelle og kan forårsage nedbrud, mens
|
||||
de er aktiveret. Det anbefales stærkt at lave sikkerhedskopier. Brug på eget
|
||||
ansvar!
|
||||
Replace HTTP Cache: Erstat HTTP-cache
|
||||
About:
|
||||
#On About page
|
||||
About: 'Om'
|
||||
|
@ -537,6 +679,9 @@ Profile:
|
|||
#On Channel Page
|
||||
Profile Filter: Profilfilter
|
||||
Profile Settings: Profilindstillinger
|
||||
Create Profile Name: Opret Profilnavn
|
||||
Profile Name: Profilnavn
|
||||
Edit Profile Name: Redigér Profilnavn
|
||||
Channel:
|
||||
Subscribe: 'Abonnér'
|
||||
Unsubscribe: 'Afmeld'
|
||||
|
@ -568,6 +713,23 @@ Channel:
|
|||
About: 'Om'
|
||||
Channel Description: 'Kanalbeskrivelse'
|
||||
Featured Channels: 'Fremhævede Kanaler'
|
||||
Details: Detaljer
|
||||
Community:
|
||||
Hide Answers: Skjul Svar
|
||||
This channel currently does not have any posts: Denne kanal har i øjeblikket ingen
|
||||
opslag
|
||||
Video hidden by FreeTube: Video skjult af FreeTube
|
||||
votes: '{votes} stemmer'
|
||||
This channel does not allow searching: Denne kanal tillader ikke søgninger
|
||||
This channel is age-restricted and currently cannot be viewed in FreeTube.: Denne
|
||||
kanal er aldersbegrænset og kan i øjeblikket ikke ses på FreeTube.
|
||||
Live:
|
||||
This channel does not currently have any live streams: Denne kanal har i øjeblikket
|
||||
ingen livestreams
|
||||
Podcasts:
|
||||
This channel does not currently have any podcasts: Denne kanal har i øjeblikket
|
||||
ingen podcasts
|
||||
This channel does not exist: Denne kanal eksisterer ikke
|
||||
Video:
|
||||
Mark As Watched: 'Markér Som Set'
|
||||
Remove From History: 'Fjern Fra Historik'
|
||||
|
@ -692,6 +854,15 @@ Video:
|
|||
playlist: playliste
|
||||
UnsupportedActionTemplate: '{externalPlayer} understøtter ikke: {action}'
|
||||
Skipped segment: Sprunget over segment
|
||||
Hide Channel: Skjul Kanal
|
||||
Unhide Channel: Vis Kanal
|
||||
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live
|
||||
Chat er ikke tilgængelig for denne stream. Den er muligvis blevet deaktiveret
|
||||
af uploaderen.
|
||||
Premieres: Premierer
|
||||
Upcoming: Kommende
|
||||
Scroll to Bottom: Rul til Bunden
|
||||
Pause on Current Video: Pause på Nuværende Video
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
@ -737,6 +908,7 @@ Share:
|
|||
YouTube Embed URL copied to clipboard: 'YouTube Indlejrings-URL kopieret til udklipsholder'
|
||||
YouTube Channel URL copied to clipboard: YouTube Kanal-URL kopieret til udklipsholder
|
||||
Invidious Channel URL copied to clipboard: Invidious Kanal-URL kopieret til udklipsholder
|
||||
Share Channel: Del Kanal
|
||||
Mini Player: 'Miniafspiller'
|
||||
Comments:
|
||||
Comments: 'Kommentarer'
|
||||
|
@ -763,6 +935,8 @@ Comments:
|
|||
And others: og andre
|
||||
Show More Replies: Vis Flere Svar
|
||||
Member: Medlem
|
||||
Subscribed: Abonneret
|
||||
View {replyCount} replies: Vis {replyCount} svar
|
||||
Up Next: 'Næste'
|
||||
|
||||
# Toast Messages
|
||||
|
@ -839,6 +1013,11 @@ Tooltips:
|
|||
Privacy Settings:
|
||||
Remove Video Meta Files: Når det er aktiveret, sletter FreeTube automatisk metafiler
|
||||
oprettet under videoafspilning, når siden lukkes.
|
||||
Distraction Free Settings:
|
||||
Hide Channels: Indtast et kanal-ID for at skjule alle videoer, playlister og selve
|
||||
kanalen fra at blive vist i søgning, trending, mest populære og anbefalet. Det
|
||||
indtastede kanal-ID skal være et komplet match, og der skelnes mellem store
|
||||
og små bogstaver.
|
||||
New Window: Nyt Vindue
|
||||
More: Mere
|
||||
Open New Window: Åbn Nyt Vindue
|
||||
|
@ -855,7 +1034,7 @@ Default Invidious instance has been set to {instance}: Standard Invidious-instan
|
|||
er blevet sat til {instance}
|
||||
Default Invidious instance has been cleared: Standard Invidious-instans er blevet
|
||||
ryddet
|
||||
Are you sure you want to open this link?: Er du sikker på at du vil åbne dette link?
|
||||
Are you sure you want to open this link?: Er du sikker på, at du vil åbne dette link?
|
||||
Search Bar:
|
||||
Clear Input: Ryd Input
|
||||
Downloading failed: Der var et problem med at downloade "{videoTitle}"
|
||||
|
@ -873,3 +1052,18 @@ Playing Next Video Interval: Afspiller næste video om lidt. Klik for at afbryde
|
|||
Afspiller næste video om {nextVideoInterval} sekund. Klik for at afbryde. | Afspiller
|
||||
næste video om {nextVideoInterval} sekunder. Klik for at afbryde.
|
||||
Preferences: Præferencer
|
||||
Go to page: Gå til {page}
|
||||
Close Banner: Luk Banner
|
||||
Playlist will not pause when current video is finished: Playliste sættes ikke på pause,
|
||||
når nuværende video er færdig
|
||||
Playlist will pause when current video is finished: Playliste vil sættes på pause,
|
||||
når nuværende video er færdig
|
||||
Clipboard:
|
||||
Cannot access clipboard without a secure connection: Kan ikke tilgå udklipsholder
|
||||
uden en sikker forbindelse
|
||||
Copy failed: Kopiering til udklipsholder mislykkedes
|
||||
Chapters:
|
||||
Chapters: Kapitler
|
||||
Age Restricted:
|
||||
This video is age restricted: Denne video er aldersbegrænset
|
||||
This channel is age restricted: Denne kanal er aldersbegrænset
|
||||
|
|
|
@ -125,7 +125,7 @@ User Playlists:
|
|||
wider. Sie listet nur Videos auf, die du gespeichert oder favorisiert hast. Wenn
|
||||
die Arbeiten abgeschlossen sind, werden alle Videos, die sich derzeit hier befinden,
|
||||
in eine Wiedergabeliste „Favoriten“ migriert.
|
||||
Search bar placeholder: In Wiedergabeliste suchen
|
||||
Search bar placeholder: Nach Wiedergabelisten suchen
|
||||
Empty Search Message: Es gibt keine Videos in dieser Wiedergabeliste, die deiner
|
||||
Suche entsprechen
|
||||
This playlist currently has no videos.: Diese Wiedergabeliste enthält derzeit keine
|
||||
|
@ -190,6 +190,7 @@ User Playlists:
|
|||
Klicke hier zum zurücksetzen
|
||||
Reverted to use {oldPlaylistName} for quick bookmark: '{oldPlaylistName} wird
|
||||
wieder für Schnelles Merken genutzt'
|
||||
Search for Videos: Nach Videos suchen
|
||||
AddVideoPrompt:
|
||||
N playlists selected: '{playlistCount} ausgewählt'
|
||||
Search in Playlists: In Wiedergabelisten suchen
|
||||
|
@ -204,6 +205,7 @@ User Playlists:
|
|||
Select a playlist to add your N videos to: Wähle eine Wiedergabeliste, der du
|
||||
dein Video hinzufügen möchtest | Wähle eine Wiedergabeliste, der du deine {videoCount}
|
||||
Videos hinzufügen möchtest
|
||||
Added {count} Times: '{count} Mal hinzugefügt | {count} Mal hinzugefügt'
|
||||
CreatePlaylistPrompt:
|
||||
New Playlist Name: Neuer Name der Wiedergabeliste
|
||||
Create: Erstellen
|
||||
|
@ -225,6 +227,7 @@ User Playlists:
|
|||
Enable Quick Bookmark With This Playlist: Schnelles Merken für diese Wiedergabeliste
|
||||
aktivieren
|
||||
Disable Quick Bookmark: Schnelles Merken deaktivieren
|
||||
Playlists with Matching Videos: Wiedergabelisten mit passenden Videos
|
||||
History:
|
||||
# On History Page
|
||||
History: Verlauf
|
||||
|
@ -544,7 +547,7 @@ Settings:
|
|||
Hide Channels: Videos aus Kanälen ausblenden
|
||||
Hide Channels Placeholder: Kanal-ID
|
||||
Display Titles Without Excessive Capitalisation: Titel ohne übermäßige Großschreibung
|
||||
anzeigen
|
||||
und Zeichensetzung anzeigen
|
||||
Hide Channel Playlists: Kanal-Wiedergabelisten ausblenden
|
||||
Hide Channel Community: Kanal-Gemeinschaft ausblenden
|
||||
Hide Channel Shorts: Kanal-Kurzvideos ausblenden
|
||||
|
@ -930,6 +933,7 @@ Video:
|
|||
Pause on Current Video: Pause für aktuelles Video
|
||||
Unhide Channel: Kanal anzeigen
|
||||
Hide Channel: Kanal ausblenden
|
||||
More Options: Weitere Optionen
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
@ -1241,3 +1245,7 @@ Trimmed input must be at least N characters long: Gekürzte Eingaben müssen min
|
|||
1 Zeichen lang sein | Gekürzte Eingaben müssen mindestens {length} Zeichen lang
|
||||
sein
|
||||
Tag already exists: Die Markierung „{tagName}“ existiert bereits
|
||||
Close Banner: Banner schließen
|
||||
Age Restricted:
|
||||
This channel is age restricted: Dieser Kanal ist altersbeschränkt
|
||||
This video is age restricted: Dieses Video ist altersbeschränkt
|
||||
|
|
|
@ -143,7 +143,8 @@ User Playlists:
|
|||
it listed here
|
||||
You have no playlists. Click on the create new playlist button to create a new one.: You have no playlists. Click on the create new playlist button to create a new one.
|
||||
Empty Search Message: There are no videos in this playlist that matches your search
|
||||
Search bar placeholder: Search in Playlist
|
||||
Search bar placeholder: Search for Playlists
|
||||
Playlists with Matching Videos: Playlists with Matching Videos
|
||||
|
||||
This playlist currently has no videos.: This playlist currently has no videos.
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ User Playlists:
|
|||
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Your
|
||||
saved videos are empty. Click on the save button on the corner of a video to have
|
||||
it listed here
|
||||
Search bar placeholder: Search in playlist
|
||||
Search bar placeholder: Search for playlists
|
||||
Empty Search Message: There are no videos in this playlist that match your search
|
||||
Create New Playlist: Create new Playlist
|
||||
Add to Playlist: Add to playlist
|
||||
|
@ -177,6 +177,7 @@ User Playlists:
|
|||
playlist is now used for quick bookmark instead of {oldPlaylistName}. Click
|
||||
here to undo
|
||||
Quick bookmark disabled: Quick bookmark disabled
|
||||
Search for Videos: Search for videos
|
||||
AddVideoPrompt:
|
||||
N playlists selected: '{playlistCount} selected'
|
||||
Search in Playlists: Search in playlists
|
||||
|
@ -190,6 +191,7 @@ User Playlists:
|
|||
playlists
|
||||
Select a playlist to add your N videos to: Select a playlist to add your video
|
||||
to | Select a playlist to add your {videoCount} videos to
|
||||
Added {count} Times: Added {count} time | Added {count} times
|
||||
CreatePlaylistPrompt:
|
||||
New Playlist Name: New Playlist name
|
||||
Create: Create
|
||||
|
@ -216,6 +218,7 @@ User Playlists:
|
|||
Remove from Favorites: Remove from {playlistName}
|
||||
Enable Quick Bookmark With This Playlist: Enable quick bookmark with this playlist
|
||||
Disable Quick Bookmark: Disable quick bookmark
|
||||
Playlists with Matching Videos: Playlists with matching videos
|
||||
History:
|
||||
# On History Page
|
||||
History: 'History'
|
||||
|
@ -417,12 +420,17 @@ Settings:
|
|||
Automatically Remove Video Meta Files: Automatically Remove Video Meta Files
|
||||
Save Watched Videos With Last Viewed Playlist: Save Watched Videos With Last Viewed
|
||||
Playlist
|
||||
Remove All Playlists: Remove all playlists
|
||||
All playlists have been removed: All playlists have been removed
|
||||
Are you sure you want to remove all your playlists?: Are you sure you want to
|
||||
remove all your playlists?
|
||||
Subscription Settings:
|
||||
Subscription Settings: 'Subscription Settings'
|
||||
Hide Videos on Watch: 'Hide Videos on Watch'
|
||||
Fetch Feeds from RSS: 'Fetch feeds from RSS'
|
||||
Manage Subscriptions: 'Manage subscriptions'
|
||||
Fetch Automatically: Fetch feed automatically
|
||||
Only Show Latest Video for Each Channel: Only show latest video for each channel
|
||||
Data Settings:
|
||||
Data Settings: 'Data settings'
|
||||
Select Import Type: 'Select import type'
|
||||
|
@ -473,6 +481,14 @@ Settings:
|
|||
Playlist File: Playlist file
|
||||
Subscription File: Subscription file
|
||||
History File: History file
|
||||
Export Playlists For Older FreeTube Versions:
|
||||
Label: Export playlists for older FreeTube versions
|
||||
Tooltip: "This option exports videos from all playlists into one playlist named
|
||||
‘Favourites’.\nHow to export and import videos in playlists for an older version
|
||||
of FreeTube:\n1. Export your playlists with this option enabled.\n2. Delete
|
||||
all of your existing playlists using the Remove All playlists option under
|
||||
Privacy settings.\n3. Launch the older version of FreeTube and import the
|
||||
exported playlists.’"
|
||||
Advanced Settings:
|
||||
Advanced Settings: 'Advanced Settings'
|
||||
Enable Debug Mode (Prints data to the console): 'Enable Debug Mode (Prints data
|
||||
|
@ -520,8 +536,8 @@ Settings:
|
|||
Hide Chapters: Hide chapters
|
||||
Hide Channels: Hide videos from channels
|
||||
Hide Channels Placeholder: Channel ID
|
||||
Display Titles Without Excessive Capitalisation: Display Titles Without Excessive
|
||||
Capitalisation
|
||||
Display Titles Without Excessive Capitalisation: Display titles without excessive
|
||||
capitalisation and punctuation
|
||||
Hide Featured Channels: Hide featured channels
|
||||
Hide Channel Playlists: Hide channel playlists
|
||||
Hide Channel Community: Hide channel community
|
||||
|
@ -545,6 +561,10 @@ Settings:
|
|||
Hide Channels Already Exists: Channel ID already exists
|
||||
Hide Channels API Error: Error retrieving user with the ID provided. Please check
|
||||
again if the ID is correct.
|
||||
Hide Videos and Playlists Containing Text Placeholder: Word, word Fragment or
|
||||
phrase
|
||||
Hide Videos and Playlists Containing Text: Hide videos and playlists containing
|
||||
text
|
||||
The app needs to restart for changes to take effect. Restart and apply change?: The
|
||||
app needs to restart for changes to take effect. Do you want to restart and apply
|
||||
the changes?
|
||||
|
@ -578,6 +598,9 @@ Settings:
|
|||
Do Nothing: Do nothing
|
||||
Category Color: Category colour
|
||||
UseDeArrowTitles: Use DeArrow video titles
|
||||
'DeArrow Thumbnail Generator API Url (Default is https://dearrow-thumb.ajay.app)': DeArrow
|
||||
Thumbnail Generator API URL (Default is https://dearrow-thumb.ajay.app)
|
||||
UseDeArrowThumbnails: Use DeArrow for thumbnails
|
||||
Download Settings:
|
||||
Download Settings: Download Settings
|
||||
Ask Download Path: Ask for download path
|
||||
|
@ -690,6 +713,11 @@ Profile:
|
|||
Profile Filter: Profile Filter
|
||||
'{number} selected': '{number} selected'
|
||||
Toggle Profile List: Toggle profile list
|
||||
Create Profile Name: Create profile name
|
||||
Profile Name: Profile name
|
||||
Edit Profile Name: Edit profile name
|
||||
Open Profile Dropdown: Open profile dropdown
|
||||
Close Profile Dropdown: Close profile dropdown
|
||||
Channel:
|
||||
Subscribe: 'Subscribe'
|
||||
Unsubscribe: 'Unsubscribe'
|
||||
|
@ -739,6 +767,7 @@ Channel:
|
|||
Reveal Answers: Reveal answers
|
||||
Hide Answers: Hide answers
|
||||
votes: '{votes} votes'
|
||||
Video hidden by FreeTube: Video hidden by FreeTube
|
||||
Live:
|
||||
This channel does not currently have any live streams: This channel does not currently
|
||||
have any live streams
|
||||
|
@ -896,6 +925,9 @@ Video:
|
|||
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live
|
||||
Chat is unavailable for this stream. It may have been disabled by the uploader.
|
||||
Pause on Current Video: Pause on current video
|
||||
Hide Channel: Hide channel
|
||||
Unhide Channel: Show channel
|
||||
More Options: More options
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
@ -1064,8 +1096,13 @@ Tooltips:
|
|||
channel ID entered must be a complete match and is case sensitive.
|
||||
Hide Subscriptions Live: This setting is overridden by the app-wide ‘{appWideSetting}’
|
||||
setting, in the ‘{subsection}’ section of the ‘{settingsSection}’
|
||||
Hide Videos and Playlists Containing Text: Enter a word, word fragment, or phrase
|
||||
(case insensitive) to hide all videos and playlists whose original titles contain
|
||||
it throughout all of FreeTube, excluding only History, Your playlists, and videos
|
||||
inside of playlists.
|
||||
SponsorBlock Settings:
|
||||
UseDeArrowTitles: Replace video titles with user-submitted titles from DeArrow.
|
||||
UseDeArrowThumbnails: Replace video thumbnails with thumbnails from DeArrow.
|
||||
Playing Next Video Interval: Playing next video in no time. Click to cancel. | Playing
|
||||
next video in {nextVideoInterval} second. Click to cancel. | Playing next video
|
||||
in {nextVideoInterval} seconds. Click to cancel.
|
||||
|
@ -1124,3 +1161,7 @@ Playlist will not pause when current video is finished: Playlist will not pause
|
|||
Go to page: Go to {page}
|
||||
Tag already exists: ‘{tagName}’ tag already exists
|
||||
Close Banner: Close Banner
|
||||
Channel Hidden: '{channel} added to channel filter'
|
||||
Channel Unhidden: '{channel} removed from channel filter'
|
||||
Trimmed input must be at least N characters long: Trimmed input must be at least 1
|
||||
character long | Trimmed input must be at least {length} characters long
|
||||
|
|
|
@ -121,7 +121,7 @@ User Playlists:
|
|||
Playlist Message: Esta página no refleja el estado final de las listas de reproducción,
|
||||
solo muestra los vídeos guardados. En futuras actualizaciones, estos vídeos migrarán
|
||||
a la lista de reproducción «Favoritos».
|
||||
Search bar placeholder: Buscar en la lista de reproducción
|
||||
Search bar placeholder: Buscar listas de reproducción
|
||||
Empty Search Message: No hay vídeos en esta lista de reproducción que coincidan
|
||||
con tu búsqueda
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: ¿Estás
|
||||
|
@ -174,6 +174,7 @@ User Playlists:
|
|||
Haga clic aquí para deshacer
|
||||
Reverted to use {oldPlaylistName} for quick bookmark: Revertido para usar {oldPlaylistName}
|
||||
para un marcador rápido
|
||||
Search for Videos: Buscar vídeos
|
||||
Are you sure you want to delete this playlist? This cannot be undone: ¿Estás seguro
|
||||
de que quieres borrar esta lista de reproducción? Esto no se puede deshacer.
|
||||
Sort By:
|
||||
|
@ -219,6 +220,7 @@ User Playlists:
|
|||
Enable Quick Bookmark With This Playlist: Activar marcadores rápidos con esta lista
|
||||
de reproducción
|
||||
Disable Quick Bookmark: Desactivar el marcador rápido
|
||||
Playlists with Matching Videos: Listas de reproducción con vídeos relacionados
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Historial'
|
||||
|
|
|
@ -127,7 +127,7 @@ User Playlists:
|
|||
Playlist Message: See leht ei kirjelda terviklikke ja toimivad esitusloendeid. Siin
|
||||
on kirjas vaid videod, mida oled salvestanud või mille oled märkinud lemmikuks.
|
||||
Kui kõik on valmis, siis siin nähtavad videod on leitavad esitusloendist „Lemmikud“.
|
||||
Search bar placeholder: Otsi esindusloendist
|
||||
Search bar placeholder: Otsi esindusloendeid
|
||||
Empty Search Message: Selles esitusloendis pole sinu otsingule vastavaid videosid
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Kas
|
||||
sa oled kindel, et soovid kõik vaadatud videod sellest esitusloendist eemaldada?
|
||||
|
@ -191,6 +191,7 @@ User Playlists:
|
|||
Quick bookmark disabled: Kiirjärjehoidjad ei ole kasutusel
|
||||
Reverted to use {oldPlaylistName} for quick bookmark: Võtsime {oldPlaylistName}
|
||||
uuesti kasutusele kiirjärjehoidjate jaoks
|
||||
Search for Videos: Otsi videoid
|
||||
Are you sure you want to delete this playlist? This cannot be undone: Kas sa oled
|
||||
kindel, et soovid selle esitusloendi kustutada? Seda tegevust ei saa tagasi pöörata.
|
||||
Sort By:
|
||||
|
@ -218,6 +219,7 @@ User Playlists:
|
|||
Remove from Favorites: Eemalda esitusloendist {playlistName}
|
||||
Enable Quick Bookmark With This Playlist: Võimalda kiirjärjehoidjate kasutamist
|
||||
selle esitusloendiga
|
||||
Playlists with Matching Videos: Sobivate videotega esitusloendid
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Ajalugu'
|
||||
|
@ -876,7 +878,7 @@ Video:
|
|||
Video statistics are not available for legacy videos: Vana tüüpi videote puhul
|
||||
pole statistika saataval
|
||||
Resolution: Resolutsioon
|
||||
Premieres: Esilinastused
|
||||
Premieres: Esilinastus
|
||||
Show Super Chat Comment: Näita Super Chat'i kommentaare
|
||||
Scroll to Bottom: Keri alla
|
||||
Upcoming: Tulemas
|
||||
|
|
|
@ -117,7 +117,7 @@ User Playlists:
|
|||
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Et
|
||||
ole tallentanut videoita. Paina "Tallenna" painiketta videon kulmassa tallentaaksesi
|
||||
sen tänne
|
||||
Search bar placeholder: Etsi soittolistalta
|
||||
Search bar placeholder: Etsi soittolistoja
|
||||
Empty Search Message: Tällä soittolistalla ei ole videoita, jotka vastaavat hakuasi
|
||||
Sort By:
|
||||
NameAscending: A-Ö
|
||||
|
@ -144,6 +144,7 @@ User Playlists:
|
|||
ja sitä ei voi poistaa.
|
||||
Playlist {playlistName} has been deleted.: Soittolista {playlistName} on poistettu.
|
||||
This playlist does not exist: Soittolistaa ei ole olemassa
|
||||
Search for Videos: Etsi videot
|
||||
Move Video Down: Siirrä video alas
|
||||
Remove from Playlist: Poista soittolistalta
|
||||
Playlist Name: Soittolistan nimi
|
||||
|
@ -1040,7 +1041,7 @@ Tooltips:
|
|||
Hide Subscriptions Live: Tämä asetus ohitetaan koko sovelluksen laajuisella ”{appWideSetting}”-asetuksella,
|
||||
joka on ”{settingsSection}”-osion ”{subsection}”-osiossa.
|
||||
SponsorBlock Settings:
|
||||
UseDeArrowTitles: Korvaa videon otsikot käyttäjien lähettämillä DeArrow'n otsikoilla.
|
||||
UseDeArrowTitles: Korvaa videon otsikot käyttäjien lähettämillä DeArrow’n otsikoilla.
|
||||
More: Lisää
|
||||
Playing Next Video Interval: Seuraava video alkaa. Klikkaa peruuttaaksesi. |Seuraava
|
||||
video alkaa {nextVideoInterval} sekunnin kuluttua. Klikkaa peruuttaaksesi. | Seuraava
|
||||
|
@ -1097,3 +1098,6 @@ Playlist will not pause when current video is finished: Soittolistaa ei keskeyte
|
|||
Channel Hidden: '{channel} lisätty kanavasuodattimeen'
|
||||
Go to page: Siirry sivulle {page}
|
||||
Channel Unhidden: '{channel} poistettu kanavasuodattimesta'
|
||||
Age Restricted:
|
||||
This video is age restricted: Tämä video on ikärajoitettu
|
||||
This channel is age restricted: Tämä kanava on ikärajoitettu
|
||||
|
|
|
@ -127,7 +127,7 @@ User Playlists:
|
|||
Elle ne répertorie que les vidéos que vous avez enregistrées ou mises en favoris.
|
||||
Une fois le travail terminé, toutes les vidéos actuellement présentes ici seront
|
||||
migrées vers une liste de lecture « Favoris ».
|
||||
Search bar placeholder: Recherche dans la liste de lecture
|
||||
Search bar placeholder: Recherche de listes de lecture
|
||||
Empty Search Message: Il n'y a pas de vidéos dans cette liste de lecture qui correspondent
|
||||
à votre recherche
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Êtes-vous
|
||||
|
@ -182,6 +182,7 @@ User Playlists:
|
|||
de {oldPlaylistName}. Cliquez ici pour annuler
|
||||
Reverted to use {oldPlaylistName} for quick bookmark: Reprise de {oldPlaylistName}
|
||||
pour un marque-page rapide
|
||||
Search for Videos: Rechercher des vidéos
|
||||
Are you sure you want to delete this playlist? This cannot be undone: Êtes-vous
|
||||
sûr(e) de vouloir supprimer cette liste de lecture ? Cette opération ne peut être
|
||||
annulée.
|
||||
|
@ -229,6 +230,7 @@ User Playlists:
|
|||
Enable Quick Bookmark With This Playlist: Activer le marque-page rapide avec cette
|
||||
liste de lecture
|
||||
Disable Quick Bookmark: Désactiver le marque-page rapide
|
||||
Playlists with Matching Videos: Listes de lecture avec des vidéos correspondantes
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Historique'
|
||||
|
|
|
@ -123,7 +123,7 @@ User Playlists:
|
|||
‚מועדפים’.
|
||||
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: לא
|
||||
שמרת סרטונים. יש ללחוץ על כפתור השמירה בפינת הסרטון כדי שיופיע כאן
|
||||
Search bar placeholder: חיפוש ברשימת הנגינה
|
||||
Search bar placeholder: חיפוש רשימות נגינה
|
||||
Empty Search Message: אין סרטונים ברשימת הנגינה הזו שעונים לחיפוש שלך
|
||||
History:
|
||||
# On History Page
|
||||
|
|
|
@ -122,7 +122,7 @@ User Playlists:
|
|||
Playlist Message: Ova stranica ne odražava potpuno funkcionalne zbirke. Prikazuje
|
||||
samo spremljena ili označena videa. Kad posao završi, sva trenutačno ovdje prisutna
|
||||
videa premjestit će se u zbirku „Favoriti”.
|
||||
Search bar placeholder: Pretraži zbirku
|
||||
Search bar placeholder: Traži zbirke
|
||||
Empty Search Message: U ovoj zbirci nema videa koji odgovaraju tvojem pretraživanju
|
||||
This playlist currently has no videos.: Ova zbirka trenutačno nema nijedan video.
|
||||
Create New Playlist: Stvori novu zbirku
|
||||
|
@ -183,6 +183,7 @@ User Playlists:
|
|||
This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: Ova
|
||||
se zbirka sada koristi za brze zabilješke umjesto zbirke {oldPlaylistName}.
|
||||
Pritisni ovdje za poništavanje
|
||||
Search for Videos: Traži videa
|
||||
AddVideoPrompt:
|
||||
N playlists selected: 'Odabrano: {playlistCount}'
|
||||
Search in Playlists: Traži u zbirkama
|
||||
|
@ -210,6 +211,7 @@ User Playlists:
|
|||
Remove from Favorites: Ukloni iz zbirke {playlistName}
|
||||
Enable Quick Bookmark With This Playlist: Aktiviraj brze zabilješke s ovom zbirkom
|
||||
Disable Quick Bookmark: Deaktiviraj brze zabilješke
|
||||
Playlists with Matching Videos: Zbirke s poklapajućim videima
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Povijest'
|
||||
|
|
|
@ -109,7 +109,7 @@ Subscriptions:
|
|||
Frissítse a feliratkozásokat, hogy itt láthassa őket.
|
||||
Empty Channels: A feliratkozott csatornák jelenleg nem tartalmaznak videókat.
|
||||
All Subscription Tabs Hidden: Az összes feliratkozási lap el van rejtve. Az itteni
|
||||
tartalom megtekintéséhez, kérjük, jelenítse meg néhány lap elrejtését a(z) „{settingsSection}”
|
||||
tartalom megtekintéséhez, jelenítse meg néhány lap elrejtését a(z) „{settingsSection}”
|
||||
„{subsection}” szakaszában.
|
||||
Subscriptions Tabs: Feliratkozások lapok
|
||||
Load More Posts: További bejegyzések betöltése
|
||||
|
@ -129,10 +129,10 @@ User Playlists:
|
|||
mentett videók üresek. Kattintson a videó sarkában található mentés gombra, hogy
|
||||
itt szerepeljen
|
||||
Playlist Message: Ez az oldal nem tükrözi a teljesen működő lejátszási listákat.
|
||||
Csak azokat a videókat sorolja fel, amelyeket Ön elmentett vagy a kedvencek közé
|
||||
Csak azokat a videókat sorolja fel, amelyeket ön elmentett vagy a kedvencek közé
|
||||
helyezett. A munka befejezése után az összes itt található videó átkerül a „Kedvencek”
|
||||
lejátszási listára.
|
||||
Search bar placeholder: Keresés a lejátszási listában
|
||||
Search bar placeholder: Keresés a lejátszási listákban
|
||||
Empty Search Message: Ebben a lejátszási listában nincsenek olyan videók, amelyek
|
||||
megfelelnek a keresésnek
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Biztos,
|
||||
|
@ -171,17 +171,17 @@ User Playlists:
|
|||
ennek ellenére.
|
||||
This playlist does not exist: Ez a lejátszási lista nem létezik
|
||||
Playlist name cannot be empty. Please input a name.: A lejátszási lista neve
|
||||
nem lehet üres. Kérjük, adjon meg egy nevet.
|
||||
nem lehet üres. Adjon meg egy nevet.
|
||||
There was a problem with removing this video: Probléma adódott a videó eltávolításával
|
||||
"{videoCount} video(s) have been removed": 1 videó eltávolításra került | {videoCount}
|
||||
videó eltávolításra került
|
||||
This video cannot be moved down.: Ez a videó nem mozgatható lejjebb.
|
||||
This playlist is now used for quick bookmark: Ezt a lejátszási listát most gyors
|
||||
könyvjelzőként használjuk
|
||||
This playlist is now used for quick bookmark: Ez a lejátszási lista most gyors
|
||||
könyvjelzőként van használva
|
||||
Quick bookmark disabled: Gyors könyvjelző letiltva
|
||||
This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: A(z)
|
||||
{oldPlaylistName} helyett mostantól ez a lejátszási lista szolgál gyors könyvjelzőként.
|
||||
Kattints ide a visszavonáshoz
|
||||
Kattintson ide a visszavonáshoz
|
||||
Reverted to use {oldPlaylistName} for quick bookmark: Visszaállítva a(z) {oldPlaylistName}
|
||||
használatára a gyors könyvjelzőhöz
|
||||
Search for Videos: Videók keresése
|
||||
|
@ -198,7 +198,7 @@ User Playlists:
|
|||
LatestUpdatedFirst: Nemrég frissítve
|
||||
NameAscending: A-Z
|
||||
You have no playlists. Click on the create new playlist button to create a new one.: Nincsenek
|
||||
lejátszási listáid. Kattints az új lejátszási lista létrehozása gombra egy új
|
||||
lejátszási listái. Kattintson az új lejátszási lista létrehozása gombra egy új
|
||||
lejátszási lista létrehozásához.
|
||||
Remove from Playlist: Eltávolítás a lejátszási listáról
|
||||
Save Changes: Változtatások mentése
|
||||
|
@ -210,7 +210,7 @@ User Playlists:
|
|||
Playlist {playlistName} has been successfully created.: A lejátszási lista {playlistName}
|
||||
sikeresen létrehozva.
|
||||
There is already a playlist with this name. Please pick a different name.: Már
|
||||
van egy lejátszási lista ezzel a névvel. Kérjük, válasszon egy másik nevet.
|
||||
van egy lejátszási lista ezzel a névvel. Válasszon egy másik nevet.
|
||||
New Playlist Name: Új lejátszási lista neve
|
||||
This playlist currently has no videos.: Ez a lejátszási lista jelenleg nem tartalmaz
|
||||
videókat.
|
||||
|
@ -230,6 +230,7 @@ User Playlists:
|
|||
Remove from Favorites: Törlés a(z) {playlistName} lejátszási listából
|
||||
Enable Quick Bookmark With This Playlist: Gyors Könyvjelző Engedélyezése Ezzel A
|
||||
Lejátszási Listával
|
||||
Playlists with Matching Videos: Lejátszási listák a kapcsolódó videókkal
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Előzmények'
|
||||
|
@ -434,7 +435,7 @@ Settings:
|
|||
Fetch Feeds from RSS: 'RSS-hírcsatornák beolvasása'
|
||||
Manage Subscriptions: 'Feliratkozások kezelése'
|
||||
Fetch Automatically: Hírcsatorna automatikus lekérdezése
|
||||
Only Show Latest Video for Each Channel: Csak a legújabb videókat megjelenítése
|
||||
Only Show Latest Video for Each Channel: Csak a legújabb videókat jelenítse meg
|
||||
a csatornáktól
|
||||
Data Settings:
|
||||
Data Settings: 'Adatbeállítások'
|
||||
|
@ -568,7 +569,7 @@ Settings:
|
|||
közben
|
||||
Hide Channels Already Exists: Már létezik a csatornaazonosító
|
||||
Hide Channels API Error: Hiba történt a megadott azonosítóval rendelkező felhasználó
|
||||
lekérésekor. Kérjük, ellenőrizze még egyszer, hogy helyes-e az azonosító.
|
||||
lekérésekor. Ellenőrizze még egyszer, hogy helyes-e az azonosító.
|
||||
Hide Videos and Playlists Containing Text Placeholder: Szó, szótöredék, vagy kifejezés
|
||||
Hide Videos and Playlists Containing Text: Szöveget tartalmazó videók és lejátszási
|
||||
listák elrejtése
|
||||
|
@ -687,7 +688,7 @@ About:
|
|||
Credits: Közreműködők
|
||||
Translate: Fordítás
|
||||
room rules: szobaszabályok
|
||||
Please read the: Kérjük, olvassa el a(z)
|
||||
Please read the: Olvassa el a(z)
|
||||
Chat on Matrix: Matrix csevegése
|
||||
Mastodon: Mastodon
|
||||
Blog: Napló
|
||||
|
@ -839,8 +840,8 @@ Video:
|
|||
Play Previous Video: 'Előző videó lejátszása'
|
||||
Watched: 'Megtekintett'
|
||||
Autoplay: 'Automatikus lejátszás'
|
||||
Starting soon, please refresh the page to check again: 'Hamarosan kezdődik, kérjük,
|
||||
frissítse a lapot az ellenőrzéshez'
|
||||
Starting soon, please refresh the page to check again: 'Hamarosan kezdődik, frissítse
|
||||
a lapot az ellenőrzéshez'
|
||||
# As in a Live Video
|
||||
Live: 'Élő'
|
||||
Live Now: 'Élő most'
|
||||
|
|
|
@ -124,7 +124,7 @@ User Playlists:
|
|||
Playlist Message: Questa pagina non è rappresentativa di una playlist completa.
|
||||
Mostra solo i video che hai salvato o aggiunto ai preferiti. A lavoro finito,
|
||||
tutti i video che si trovano qui saranno spostati in una playlist preferiti.
|
||||
Search bar placeholder: Cerca nella playlist
|
||||
Search bar placeholder: Cerca nelle playlist
|
||||
Empty Search Message: Non ci sono video in questa playlist che corrispondono alla
|
||||
tua ricerca
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Sei
|
||||
|
@ -220,6 +220,7 @@ User Playlists:
|
|||
Remove from Favorites: Rimuovi da {playlistName}
|
||||
Enable Quick Bookmark With This Playlist: Abilita segnalibro rapido con questa playlist
|
||||
Disable Quick Bookmark: Disabilita segnalibro rapido
|
||||
Playlists with Matching Videos: Playlist con video corrispondenti
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Cronologia'
|
||||
|
|
|
@ -44,18 +44,18 @@ Global:
|
|||
View Count: 1 weergave | {count} weergaven
|
||||
Watching Count: 1 aan het kijken | {count} aan het kijken
|
||||
Channel Count: 1 kanaal | {count} kanalen
|
||||
Community: Gemeenschap
|
||||
Community: Gemeenschap
|
||||
Input Tags:
|
||||
Length Requirement: Tag moet minstens {number} tekens lang zijn
|
||||
Search / Go to URL: 'Zoeken / Ga naar URL'
|
||||
# In Filter Button
|
||||
Search Filters:
|
||||
Search Filters: 'Zoekfilters'
|
||||
Search Filters: 'Zoekfilters'
|
||||
Sort By:
|
||||
Sort By: 'Sorteren op'
|
||||
Most Relevant: 'Meest relevant'
|
||||
Rating: 'Beoordeling'
|
||||
Upload Date: 'Uploaddatum'
|
||||
Upload Date: 'Uploaddatum'
|
||||
View Count: 'Aantal weergaven'
|
||||
Time:
|
||||
Time: 'Tijd'
|
||||
|
@ -73,36 +73,36 @@ Search Filters:
|
|||
#& Playlists
|
||||
Movies: Films
|
||||
Duration:
|
||||
Duration: 'Tijdsduur'
|
||||
All Durations: 'Alle tijdsduren'
|
||||
Duration: 'Tijdsduur'
|
||||
All Durations: 'Alle tijdsduren'
|
||||
Short (< 4 minutes): 'Kort (< 4 minuten)'
|
||||
Long (> 20 minutes): 'Lang (> 20 minuten)'
|
||||
# On Search Page
|
||||
Medium (4 - 20 minutes): Gemiddeld (4 - 20 minuten)
|
||||
Search Results: 'Zoekresultaten'
|
||||
Fetching results. Please wait: 'Resultaten verzamelen. Even geduld aub'
|
||||
Fetch more results: 'Meer resultaten laden'
|
||||
Search Results: 'Zoekresultaten'
|
||||
Fetching results. Please wait: 'Resultaten ophalen, even geduld'
|
||||
Fetch more results: 'Meer resultaten ophalen'
|
||||
# Sidebar
|
||||
There are no more results for this search: Er zijn geen verdere resultaten voor
|
||||
deze zoekopdracht
|
||||
deze zoekopdracht
|
||||
Subscriptions:
|
||||
# On Subscriptions Page
|
||||
Subscriptions: 'Abonnementen'
|
||||
Latest Subscriptions: 'Nieuwste abonnementen'
|
||||
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'U
|
||||
heeft nog geen Abonnementen. Voeg abonnementen toe om ze hier te zien'
|
||||
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Uw
|
||||
abonnementenlijst is momenteel leeg. Voeg abonnementen toe om ze hier te zien.'
|
||||
Refresh Subscriptions: Abonnementen vernieuwen
|
||||
Getting Subscriptions. Please wait.: Abonnementen verzamelen. Even geduld aub.
|
||||
Getting Subscriptions. Please wait.: Abonnementen ophalen, even geduld.
|
||||
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Dit
|
||||
profiel heeft een groot aantal abonnementen. RSS wordt geforceerd om tariefbeperkingen
|
||||
profiel heeft een groot aantal abonnementen. RSS wordt geforceerd om rate-limiting
|
||||
te vermijden
|
||||
Load More Videos: Meer video's laden
|
||||
Error Channels: Kanalen met storingen
|
||||
Disabled Automatic Fetching: U hebt het automatisch ophalen van abonnementen uitgeschakeld.
|
||||
Error Channels: Kanalen met fouten
|
||||
Disabled Automatic Fetching: U heeft het automatisch ophalen van abonnementen uitgeschakeld.
|
||||
Vernieuw abonnementen om ze hier te zien.
|
||||
Empty Channels: Je geabonneerde kanalen hebben momenteel geen video's.
|
||||
Empty Channels: De kanalen waarop u geabonneerd bent hebben momenteel geen video's.
|
||||
Subscriptions Tabs: Abonnementtabbladen
|
||||
All Subscription Tabs Hidden: Alle abonnementstabbladen zijn verborgen. Om de inhoud
|
||||
All Subscription Tabs Hidden: Alle abonnementtabbladen zijn verborgen. Om de inhoud
|
||||
hier te zien moet u enkele tabbladen zichtbaar maken in de sectie ‘{subsection}’
|
||||
onder ‘{settingsSection}’.
|
||||
Load More Posts: Meer berichten laden
|
||||
|
@ -115,9 +115,9 @@ Trending:
|
|||
Music: Muziek
|
||||
Default: Standaard
|
||||
Most Popular: 'Populairst'
|
||||
Playlists: 'Afspeellijsten'
|
||||
Playlists: 'Afspeellijsten'
|
||||
User Playlists:
|
||||
Your Playlists: 'Uw afspeellijsten'
|
||||
Your Playlists: 'Uw afspeellijsten'
|
||||
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Je
|
||||
opgeslagen video's is leeg. Klik op de opslaan knop in de hoek van een video om
|
||||
het hier in de lijst te plaatsen
|
||||
|
@ -125,7 +125,7 @@ User Playlists:
|
|||
Er worden alleen video's weergegeven die jij hebt opgeslagen of gefavoriet. Wanneer
|
||||
we klaar zijn met de ontwikkeling van deze feature zullen al deze video's worden
|
||||
gemigreerd naar de 'favorieten' afspeellijst.
|
||||
Search bar placeholder: In afspeellijst zoeken
|
||||
Search bar placeholder: Zoeken naar afspeellijsten
|
||||
Empty Search Message: Deze afspeellijst bevat geen video's die overeenkomen met
|
||||
de zoekopdracht
|
||||
Cancel: Annuleren
|
||||
|
@ -209,6 +209,7 @@ User Playlists:
|
|||
mag niet leeg zijn. Voer een naam in.
|
||||
There was an issue with updating this playlist.: Er is een probleem opgetreden
|
||||
bij het bijwerken van deze afspeellijst.
|
||||
Search for Videos: Zoeken naar video's
|
||||
You have no playlists. Click on the create new playlist button to create a new one.: U
|
||||
heeft geen afspeellijsten. Druk op de knop om er één aan te maken.
|
||||
This playlist currently has no videos.: Deze afspeellijst bevat geen video's.
|
||||
|
@ -219,6 +220,7 @@ User Playlists:
|
|||
kan niet ongedaan gemaakt worden.
|
||||
Are you sure you want to delete this playlist? This cannot be undone: Weet u zeker
|
||||
dat u deze afspeellijst wilt verwijderen? Dit kan niet ongedaan gemaakt worden.
|
||||
Playlists with Matching Videos: Afspeellijsten met overeenkomende video's
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Geschiedenis'
|
||||
|
@ -256,17 +258,16 @@ Settings:
|
|||
(Standaard is https://invidious.snopyta.org)'
|
||||
Region for Trending: 'Regio voor trending'
|
||||
#! List countries
|
||||
Check for Latest Blog Posts: Controleer op nieuwe blogposts
|
||||
Check for Latest Blog Posts: Op nieuwe blogposts controleren
|
||||
Check for Updates: Op updates controleren
|
||||
View all Invidious instance information: Bekijk alle Invidious-instantiegegevens
|
||||
System Default: Systeemstandaard
|
||||
Current Invidious Instance: Huidige Invidious-instantie
|
||||
Clear Default Instance: Standaardinstantie wissen
|
||||
Set Current Instance as Default: Stel momenteel geselecteerde instantie in als
|
||||
standaard
|
||||
Clear Default Instance: Standaardinstantie wissen
|
||||
Set Current Instance as Default: Huidige instantie instellen als standaard
|
||||
Current instance will be randomized on startup: Momenteel gebruikte instantie
|
||||
zal willekeurig worden gekozen bij het starten
|
||||
No default instance has been set: Er is geen standaard instantie ingesteld
|
||||
No default instance has been set: Er is geen standaardinstantie ingesteld
|
||||
The currently set default instance is {instance}: De momenteel als standaard ingestelde
|
||||
instantie is {instance}
|
||||
External Link Handling:
|
||||
|
@ -332,8 +333,8 @@ Settings:
|
|||
UI Scale: Interfaceschaal
|
||||
Expand Side Bar by Default: Zijbalk standaard uitklappen
|
||||
Disable Smooth Scrolling: Vloeiend scrollen uitschakelen
|
||||
Hide Side Bar Labels: Labels op zijbalk verbergen
|
||||
Hide FreeTube Header Logo: Verberg het FreeTube-koplogo
|
||||
Hide Side Bar Labels: Labels in zijbalk verbergen
|
||||
Hide FreeTube Header Logo: FreeTube-koplogo verbergen
|
||||
Player Settings:
|
||||
Player Settings: 'Videospelerinstellingen'
|
||||
Force Local Backend for Legacy Formats: 'Lokale backend voor oudere formaten forceren'
|
||||
|
@ -342,7 +343,7 @@ Settings:
|
|||
Autoplay Videos: 'Video''s automatisch afspelen'
|
||||
Proxy Videos Through Invidious: 'Video''s via Invidious-proxy afspelen'
|
||||
Autoplay Playlists: 'Afspeellijsten automatisch afspelen'
|
||||
Enable Theatre Mode by Default: 'Theatermodus standaard inschakelen'
|
||||
Enable Theatre Mode by Default: 'Theatermodus standaard inschakelen'
|
||||
Default Volume: 'Standaardvolume'
|
||||
Default Playback Rate: 'Standaardafspeelsnelheid'
|
||||
Default Video Format:
|
||||
|
@ -420,8 +421,8 @@ Settings:
|
|||
Subscription Settings: 'Abonnementinstellingen'
|
||||
Hide Videos on Watch: 'Bekeken video''s verbergen'
|
||||
Manage Subscriptions: 'Abonnementen beheren'
|
||||
Fetch Feeds from RSS: Verzamel feeds via RSS
|
||||
Fetch Automatically: Haal feed automatisch op
|
||||
Fetch Feeds from RSS: Feeds ophalen via RSS
|
||||
Fetch Automatically: Feed automatisch ophalen
|
||||
Only Show Latest Video for Each Channel: Alleen nieuwste video voor elk kanaal
|
||||
tonen
|
||||
Advanced Settings:
|
||||
|
@ -487,7 +488,7 @@ Settings:
|
|||
met succes geëxporteerd
|
||||
All watched history has been successfully imported: De bekeken geschiedenis is
|
||||
met succes geïmporteerd
|
||||
Check for Legacy Subscriptions: Controleer op Legacy Abonnementen
|
||||
Check for Legacy Subscriptions: Op legacy-abonnementen controleren
|
||||
Manage Subscriptions: Abonnementen beheren
|
||||
Export Playlists: Afspeellijsten exporteren
|
||||
All playlists has been successfully imported: Alle speellijsten zijn met succes
|
||||
|
@ -509,21 +510,21 @@ Settings:
|
|||
de optie ‘Alle afspeellijsten verwijderen’ onder ‘Privacyinstellingen’.\n
|
||||
3. Start de oudere versie van FreeTube en importeer de geëxporteerde afspeellijsten."
|
||||
Distraction Free Settings:
|
||||
Hide Live Chat: Livechat verbergen
|
||||
Hide Live Chat: Livechat verbergen
|
||||
Hide Popular Videos: Populaire video's verbergen
|
||||
Hide Trending Videos: Trending video's verbergen
|
||||
Hide Recommended Videos: Aanbevolen video's verbergen
|
||||
Hide Comment Likes: Likes op opmerkingen verbergen
|
||||
Hide Channel Subscribers: Aantal abonnees verbergen
|
||||
Hide Video Likes And Dislikes: Likes en dislikes verbergen
|
||||
Hide Video Views: Aantal videoweergaven verbergen
|
||||
Hide Video Views: Aantal videoweergaven verbergen
|
||||
Distraction Free Settings: Instellingen voor afleidingsvrij kijken
|
||||
Hide Active Subscriptions: Actieve abonnementen verbergen
|
||||
Hide Playlists: Afspeellijsten verbergen
|
||||
Hide Sharing Actions: Verberg knoppen om te delen
|
||||
Hide Playlists: Afspeellijsten verbergen
|
||||
Hide Sharing Actions: Deelacties verbergen
|
||||
Hide Video Description: Video-omschrijving verbergen
|
||||
Hide Comments: Opmerkingen verbergen
|
||||
Hide Live Streams: Verberg rechtstreekse uitzendingen
|
||||
Hide Live Streams: Livestreams verbergen
|
||||
Display Titles Without Excessive Capitalisation: Titels tonen zonder overmatig
|
||||
hoofdlettergebruik en interpunctie
|
||||
Sections:
|
||||
|
@ -612,14 +613,14 @@ Settings:
|
|||
Choose Path: Pad kiezen
|
||||
Download Settings: Downloadinstellingen
|
||||
Ask Download Path: Om downloadpad vragen
|
||||
Download in app: Opslaan in programma
|
||||
Open in web browser: Openen in webstruiner
|
||||
Download in app: Downloaden in app
|
||||
Open in web browser: Openen in webbrowser
|
||||
Download Behavior: Gedrag downloaden
|
||||
Parental Control Settings:
|
||||
Hide Unsubscribe Button: Verberg knop "Afmelden"
|
||||
Hide Unsubscribe Button: Deabonneerknop verbergen
|
||||
Parental Control Settings: Instellingen voor ouderlijk toezicht
|
||||
Show Family Friendly Only: Enkel familievriendelijke inhoud tonen
|
||||
Hide Search Bar: Zoekbalk verbergen
|
||||
Hide Search Bar: Zoekbalk verbergen
|
||||
Experimental Settings:
|
||||
Warning: Dit zijn experimentele instellingen, die een crash kunnen veroorzaken.
|
||||
Het is raadzaam backups te maken. Gebruiken op eigen risico!
|
||||
|
@ -681,8 +682,8 @@ About:
|
|||
Email: E-mail
|
||||
Blog: Blog
|
||||
Website: Website
|
||||
Please check for duplicates before posting: Controleer a.u.b. eerst of een probleem
|
||||
al gerapporteerd is
|
||||
Please check for duplicates before posting: Controleer eerst of een probleem al
|
||||
gerapporteerd is
|
||||
GitHub issues: GitHub-issues
|
||||
Report a problem: Probleem melden
|
||||
FAQ: Veelgestelde vragen
|
||||
|
@ -1017,7 +1018,7 @@ Profile:
|
|||
Are you sure you want to delete this profile?: Weet u zeker dat u dit profiel wilt
|
||||
verwijderen?
|
||||
Delete Profile: Profiel verwijderen
|
||||
Make Default Profile: Als standaardprofiel instellen
|
||||
Make Default Profile: Als standaardprofiel instellen
|
||||
Update Profile: Profiel bijwerken
|
||||
Create Profile: Profiel aanmaken
|
||||
Profile Preview: Profielvoorbeeld
|
||||
|
@ -1051,8 +1052,8 @@ Profile:
|
|||
Create Profile Name: Profielnaam aanmaken
|
||||
Close Profile Dropdown: Profielmenu sluiten
|
||||
Open Profile Dropdown: Profielmenu openen
|
||||
A new blog is now available, {blogTitle}. Click to view more: Een nieuwe blogpost
|
||||
is beschikbaar, {blogTitle}. Klik voor meer informatie
|
||||
A new blog is now available, {blogTitle}. Click to view more: 'Een nieuwe blogpost
|
||||
is beschikbaar: {blogTitle}. Druk voor meer informatie'
|
||||
Download From Site: Van website downloaden
|
||||
Version {versionNumber} is now available! Click for more details: Versie {versionNumber}
|
||||
is nu beschikbaar! Klik voor meer informatie
|
||||
|
@ -1086,16 +1087,16 @@ Tooltips:
|
|||
te spoelen, zoals bij MPV.
|
||||
Subscription Settings:
|
||||
Fetch Feeds from RSS: Wanneer ingeschakeld zal FreeTube RSS gebruiken in plaats
|
||||
van de standaard methode om de videolijsten van je abonnementen te verzamelen.
|
||||
RSS is sneller en voorkomt dat je IP wordt geblokkeerd maar geeft geen toegang
|
||||
tot sommige informatie zoals de videoduur en live-status
|
||||
van de standaardmethode om uw abonnementenfeed op te halen. RSS is sneller
|
||||
en voorkomt IP-blokkering, maar geeft geen toegang tot sommige informatie zoals
|
||||
de videoduur en live-status
|
||||
Fetch Automatically: Indien ingeschakeld, haalt FreeTube automatisch uw abonnementenfeed
|
||||
op wanneer een nieuw venster wordt geopend en wanneer u van profiel verandert.
|
||||
General Settings:
|
||||
Invidious Instance: Dit is de Invidious-instantie waar FreeTube mee zal verbinden
|
||||
om API calls te maken.
|
||||
Thumbnail Preference: Alle thumbnails in FreeTube zullen worden vervangen met
|
||||
een momentopname uit de video in plaats van de standaard thumbnail.
|
||||
Thumbnail Preference: Alle miniaturen in FreeTube zullen worden vervangen met
|
||||
een momentopname uit de video in plaats van de standaardminiatuur.
|
||||
Fallback to Non-Preferred Backend on Failure: Wanneer het API met voorkeur problemen
|
||||
geeft dan zal FreeTube automatisch terugvallen op het alternatieve niet-voorkeur
|
||||
API wanneer deze instelling is ingeschakeld.
|
||||
|
@ -1157,7 +1158,7 @@ Open New Window: Nieuw venster openen
|
|||
Default Invidious instance has been cleared: Standaard Invidious-instantie is verwijderd
|
||||
Default Invidious instance has been set to {instance}: Standaard Invidious-instantie
|
||||
is ingesteld op {instance}
|
||||
Are you sure you want to open this link?: Weet je zeker dat je deze link wilt openen?
|
||||
Are you sure you want to open this link?: Weet u zeker dat u deze link wilt openen?
|
||||
Search Bar:
|
||||
Clear Input: Invoer wissen
|
||||
External link opening has been disabled in the general settings: Het openen van externe
|
||||
|
@ -1175,9 +1176,9 @@ Channels:
|
|||
Search bar placeholder: Kanalen zoeken
|
||||
Count: '{number} kanaal/kanalen gevonden'
|
||||
Channels: Kanalen
|
||||
Empty: Uw lijst van kanalen is thans leeg.
|
||||
Empty: Uw lijst van kanalen is momenteel leeg.
|
||||
Unsubscribe: Deabonneren
|
||||
Unsubscribed: '{channelName} is verwijderd uit uw lijst van abonnees'
|
||||
Unsubscribed: '{channelName} is verwijderd uit uw lijst van abonnementen'
|
||||
Unsubscribe Prompt: Weet u zeker dat u zich wilt deabonneren van ‘{channelName}’?
|
||||
Screenshot Error: Schermafbeelding kon niet worden opgeslagen. {error}
|
||||
Preferences: Voorkeuren
|
||||
|
@ -1200,7 +1201,7 @@ Playlist will pause when current video is finished: Afspeellijst zal pauzeren wa
|
|||
de huidige video is afgelopen
|
||||
Playlist will not pause when current video is finished: Afspeellijst zal niet pauzeren
|
||||
wanneer de huidige video is afgelopen
|
||||
Go to page: Ga naar {page}
|
||||
Go to page: Pagina {page}
|
||||
Tag already exists: Tag ‘{tagName}’ bestaat al
|
||||
Channel Unhidden: ‘{channel}’ verwijderd uit kanaalfilter
|
||||
Channel Hidden: ‘{channel}’ toegevoegd aan kanaalfilter
|
||||
|
|
|
@ -7,7 +7,7 @@ FreeTube: 'FreeTube'
|
|||
# Webkit Menu Bar
|
||||
File: 'Plik'
|
||||
Quit: 'Wyjdź'
|
||||
Edit: 'Edycja'
|
||||
Edit: 'Edytuj'
|
||||
Undo: 'Cofnij'
|
||||
Redo: 'Ponów'
|
||||
Cut: 'Wytnij'
|
||||
|
@ -123,7 +123,7 @@ User Playlists:
|
|||
tu jedynie wymienione filmy, które zapisałeś lub oznaczyłeś jako ulubione. Kiedy
|
||||
prace nad tą stroną zostaną zakończone, wszystkie filmy tu obecne zostaną przeniesione
|
||||
do playlisty „Ulubione”.
|
||||
Search bar placeholder: Przeszukaj playlisty
|
||||
Search bar placeholder: Szukaj playlist
|
||||
Empty Search Message: Na tej playliście nie ma filmów, które pasowałyby do Twojego
|
||||
zapytania
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Czy
|
||||
|
@ -175,6 +175,7 @@ User Playlists:
|
|||
ta playlista, zamiast „{oldPlaylistName}”, będzie używana dla funkcji Szybkiej
|
||||
Zakładki . Kliknij tutaj, by cofnąć zmianę
|
||||
Quick bookmark disabled: Wyłączono Szybką Zakładkę
|
||||
Search for Videos: Szukaj filmów
|
||||
Are you sure you want to delete this playlist? This cannot be undone: Czy na pewno
|
||||
chcesz usunąć tę playlistę? Nie można cofnąć tej czynności.
|
||||
Sort By:
|
||||
|
@ -217,6 +218,7 @@ User Playlists:
|
|||
Remove from Favorites: Usuń z „{playlistName}”
|
||||
Disable Quick Bookmark: Wyłącz Szybką Zakładkę
|
||||
Enable Quick Bookmark With This Playlist: Włącz Szybką Zakładkę z tą playlistą
|
||||
Playlists with Matching Videos: Playlisty z pasującymi filmami
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Historia'
|
||||
|
|
|
@ -38,14 +38,14 @@ Global:
|
|||
|
||||
# Search Bar
|
||||
Counts:
|
||||
Video Count: Contagem de videos
|
||||
Channel Count: Contagem de Canais
|
||||
Video Count: 1 vídeo | {count} vídeos
|
||||
Channel Count: 1 canal | {count} canais
|
||||
Subscriber Count: 1 inscrito | {count} inscritos
|
||||
View Count: 1 visualização | {count} visualizações
|
||||
Watching Count: 1 assistindo | {count} assistindo
|
||||
Input Tags:
|
||||
Length Requirement: A tag deve ter pelo menos {number} caracteres
|
||||
Search / Go to URL: 'Buscar/Ir ao URL'
|
||||
Search / Go to URL: 'Pesquisar ou digitar URL'
|
||||
# In Filter Button
|
||||
Search Filters:
|
||||
Search Filters: 'Filtros de busca'
|
||||
|
@ -58,7 +58,7 @@ Search Filters:
|
|||
Time:
|
||||
Time: 'Tempo'
|
||||
Any Time: 'Qualquer momento'
|
||||
Last Hour: 'Última hora'
|
||||
Last Hour: 'Últimas horas'
|
||||
Today: 'Hoje'
|
||||
This Week: 'Esta semana'
|
||||
This Month: 'Este mês'
|
||||
|
@ -122,7 +122,7 @@ User Playlists:
|
|||
apenas os vídeos que você salvou ou adicionou aos favoritos. Quando o trabalho
|
||||
terminar, todos os vídeos atualmente aqui serão migrados para uma playlist chamada
|
||||
"Favoritos".
|
||||
Search bar placeholder: Pesquisar na playlist
|
||||
Search bar placeholder: Pesquisar playlists
|
||||
Empty Search Message: Não há vídeos nesta playlist que correspondam à sua pesquisa
|
||||
You have no playlists. Click on the create new playlist button to create a new one.: Você
|
||||
não tem playlists. Clique no botão "Criar playlist" para criar uma.
|
||||
|
@ -207,7 +207,7 @@ User Playlists:
|
|||
You haven't selected any playlist yet.: Você ainda não selecionou nenhuma playlist.
|
||||
Select a playlist to add your N videos to: Selecione uma playlist para adicionar
|
||||
seu vídeo | Selecione uma playlist para adicionar seus {videoCount} vídeos
|
||||
N playlists selected: '{playlistCount} selecionadas'
|
||||
N playlists selected: '{playlistCount} selecionada(s)'
|
||||
Search in Playlists: Pesquisar nas playlists
|
||||
Save: Salvar
|
||||
Added {count} Times: Adicionado {count} vez | Adicionado {count} vezes
|
||||
|
@ -215,6 +215,7 @@ User Playlists:
|
|||
certeza de que deseja remover todos os vídeos assistidos desta playlist? Isto
|
||||
não pode ser desfeito.
|
||||
Remove Watched Videos: Remove vídeos assistidos
|
||||
Playlists with Matching Videos: Playlists com vídeos correspondentes
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Histórico'
|
||||
|
@ -387,7 +388,7 @@ Settings:
|
|||
criar subpastas.
|
||||
Enter Fullscreen on Display Rotate: Entrar em tela cheia ao girar a tela para
|
||||
o modo paisagem
|
||||
Skip by Scrolling Over Video Player: Ignorar ao rolar sobre o player
|
||||
Skip by Scrolling Over Video Player: Pular vídeo ao rolar sobre o player
|
||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
||||
Comment Auto Load:
|
||||
Comment Auto Load: Carregar automaticamente os comentários
|
||||
|
@ -522,7 +523,7 @@ Settings:
|
|||
Hide Trending Videos: Ocultar vídeos em alta
|
||||
Hide Recommended Videos: Ocultar vídeos recomendados
|
||||
Hide Comment Likes: Ocultar "curtidas" em comentários
|
||||
Distraction Free Settings: Configurações de Modo sem Distração
|
||||
Distraction Free Settings: Configurações de distrações
|
||||
Hide Channel Subscribers: Ocultar número de inscritos
|
||||
Hide Video Likes And Dislikes: Ocultar "curtidas" em vídeo
|
||||
Hide Video Views: Ocultar visualizações de vídeo
|
||||
|
@ -621,7 +622,7 @@ Settings:
|
|||
Download in app: Baixar no aplicativo
|
||||
Download Behavior: Comportamento de download
|
||||
Parental Control Settings:
|
||||
Show Family Friendly Only: Mostrar Apenas Amigável à Família
|
||||
Show Family Friendly Only: Mostrar apenas conteúdo adequado para toda a família
|
||||
Hide Search Bar: Ocultar barra de pesquisa
|
||||
Parental Control Settings: Configurações de Controle Parental
|
||||
Hide Unsubscribe Button: Ocultar botão de cancelamento de inscrição
|
||||
|
@ -837,7 +838,7 @@ Video:
|
|||
Download Video: Baixar vídeo
|
||||
Starting soon, please refresh the page to check again: Vai começar em breve, atualize
|
||||
a página para verificar novamente
|
||||
Autoplay: Reprodução Automática
|
||||
Autoplay: Reprodução automática
|
||||
Play Previous Video: Reproduzir vídeo anterior
|
||||
Play Next Video: Reproduzir próximo vídeo
|
||||
Reverse Playlist: Inverter ordem da playlist
|
||||
|
@ -957,7 +958,7 @@ Share:
|
|||
área de transferência
|
||||
Invidious Channel URL copied to clipboard: URL do canal Invidious copiado para a
|
||||
área de transferência
|
||||
Include Timestamp: Incluir marcação de tempo
|
||||
Include Timestamp: Incluir momento atual
|
||||
Share Channel: Compartilhar canal
|
||||
Mini Player: 'Mini Player'
|
||||
Comments:
|
||||
|
@ -1060,7 +1061,7 @@ Profile:
|
|||
Version {versionNumber} is now available! Click for more details: A versão {versionNumber}
|
||||
já está disponível! Clique para mais detalhes
|
||||
A new blog is now available, {blogTitle}. Click to view more: 'Um novo blog está disponível,
|
||||
{blogTitle}. Clique para ver mais'
|
||||
{blogTitle}. Clique aqui para saber mais'
|
||||
Download From Site: Baixar do site
|
||||
The playlist has been reversed: A playlist foi invertida
|
||||
This video is unavailable because of missing formats. This can happen due to country unavailability.: Este
|
||||
|
@ -1153,9 +1154,10 @@ Tooltips:
|
|||
a partir do DeArrow.
|
||||
UseDeArrowThumbnails: Substitua as miniaturas de vídeo pelas miniaturas do DeArrow.
|
||||
More: Mais
|
||||
Playing Next Video Interval: Reproduzir próximo vídeo imediatamente. Clique para cancelar.
|
||||
| Reproduzindo o próximo vídeo em {nextVideoInterval} segundo(s). Clique para cancelar.
|
||||
| Reproduzir próximo vídeo em {nextVideoInterval} segundos. Clique para cancelar.
|
||||
Playing Next Video Interval: A reproduzir o próximo vídeo imediatamente. Clique para
|
||||
cancelar. | A reproduzir o próximo vídeo em {nextVideoInterval} segundo(s). Clique
|
||||
para cancelar. | A reproduzir o próximo vídeo em {nextVideoInterval} segundos. Clique
|
||||
para cancelar.
|
||||
Hashtags have not yet been implemented, try again later: Hashtags ainda não foram
|
||||
implementadas, tente novamente mais tarde
|
||||
Unknown YouTube url type, cannot be opened in app: Tipo de URL do YouTube desconhecida,
|
||||
|
|
|
@ -180,6 +180,7 @@ User Playlists:
|
|||
This playlist is now used for quick bookmark: Esta lista de reprodução é agora
|
||||
usada como marcador rápido
|
||||
Quick bookmark disabled: Marcador rápido desativado
|
||||
Search for Videos: Pesquisar vídeos
|
||||
AddVideoPrompt:
|
||||
Search in Playlists: Pesquisar nas listas de reprodução
|
||||
Save: Guardar
|
||||
|
@ -954,6 +955,7 @@ Video:
|
|||
Pause on Current Video: Pausa no vídeo atual
|
||||
Unhide Channel: Mostrar canal
|
||||
Hide Channel: Ocultar canal
|
||||
More Options: Mais opções
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
@ -1187,3 +1189,4 @@ Channel Hidden: '{channel} adicionado ao filtro do canal'
|
|||
Go to page: Ir para {page}
|
||||
Channel Unhidden: '{channel} removido do filtro do canal'
|
||||
Tag already exists: '"{tagName}" já existe'
|
||||
Close Banner: Fechar banner
|
||||
|
|
|
@ -721,8 +721,8 @@ The playlist has been reversed: 'Sezam predvajanja je bil obrnjen'
|
|||
Playing Next Video: 'Predvaja se naslednji videoposnetek'
|
||||
Playing Previous Video: 'Predvaja se prejšnji videoposnetek'
|
||||
Canceled next video autoplay: 'Samodejno predvajanje preklicano'
|
||||
'The playlist has ended. Enable loop to continue playing': "Seznama predvajanja je\
|
||||
\ konec. Vklopite ponovno predvajanje, če želite nadaljevati"
|
||||
'The playlist has ended. Enable loop to continue playing': "Seznama predvajanja je
|
||||
konec. Vklopite ponovno predvajanje, če želite nadaljevati"
|
||||
|
||||
Yes: 'Da'
|
||||
No: 'Ne'
|
||||
|
|
|
@ -131,7 +131,7 @@ User Playlists:
|
|||
га додали на ову листу'
|
||||
Empty Search Message: На овој плејлисти нема видео снимака који одговарају вашој
|
||||
претрази
|
||||
Search bar placeholder: Претрага у плејлисти
|
||||
Search bar placeholder: Претрага плејлиста
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Желите
|
||||
ли заиста да уклоните све одгледане видео снимке са ове плејлисте? Ово се не може
|
||||
поништити.
|
||||
|
@ -180,6 +180,7 @@ User Playlists:
|
|||
Кликните овде да поништите
|
||||
Reverted to use {oldPlaylistName} for quick bookmark: Враћено на коришћење „{oldPlaylistName}“
|
||||
за брзо обележавање
|
||||
Search for Videos: Претрага видео снимака
|
||||
Are you sure you want to delete this playlist? This cannot be undone: Желите ли
|
||||
заиста да избришете ову плејлисту? Ово се не може поништити.
|
||||
Sort By:
|
||||
|
@ -223,6 +224,7 @@ User Playlists:
|
|||
Disable Quick Bookmark: Онемогући брзо обележавање
|
||||
Add to Favorites: Додај на плејлисту „{playlistName}“
|
||||
Remove from Favorites: Уклони са плејлисте „{playlistName}“
|
||||
Playlists with Matching Videos: Плејлисте с подударајућим видео снимцима
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Историја'
|
||||
|
|
|
@ -128,7 +128,7 @@ User Playlists:
|
|||
Yalnızca kaydettiğiniz veya favorilerinize eklediğiniz videoları listeler. İş
|
||||
bittiğinde, şu anda burada bulunan tüm videolar bir 'Favoriler' oynatma listesine
|
||||
taşınacaktır.
|
||||
Search bar placeholder: Oynatma Listesinde Ara
|
||||
Search bar placeholder: Oynatma Listesi Ara
|
||||
Empty Search Message: Bu oynatma listesinde aramanızla eşleşen video yok
|
||||
This playlist currently has no videos.: Bu oynatma listesinde şu anda hiç video
|
||||
yok.
|
||||
|
@ -223,6 +223,7 @@ User Playlists:
|
|||
Enable Quick Bookmark With This Playlist: Bu Oynatma Listesiyle Hızlı Yer İşaretini
|
||||
Etkinleştir
|
||||
Disable Quick Bookmark: Hızlı Yer İşaretini Devre Dışı Bırak
|
||||
Playlists with Matching Videos: Eşleşen Videoları İçeren Oynatma Listeleri
|
||||
History:
|
||||
# On History Page
|
||||
History: 'Geçmiş'
|
||||
|
|
|
@ -113,7 +113,7 @@ User Playlists:
|
|||
Your Playlists: '您的播放列表'
|
||||
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 您未保存视频。点击视频角落的“保存”按钮保存视频
|
||||
Playlist Message: 本页面不代表功能完备的播放列表。它只列举您保存或喜爱的播放列表。当项目完成时,本页面的所有视频将会迁移到“最喜爱”播放列表。
|
||||
Search bar placeholder: 在播放列表中搜索
|
||||
Search bar placeholder: 搜索播放列表
|
||||
Empty Search Message: 这个与你的搜索匹配的播放列表中没有视频
|
||||
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: 你确定要从此播放列表删除所有已观看的视频吗?此操作无法撤销。
|
||||
AddVideoPrompt:
|
||||
|
@ -150,6 +150,7 @@ User Playlists:
|
|||
进行快速添加书签操作
|
||||
This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: 此播放列表现用于快速添加书签,而非
|
||||
{oldPlaylistName}。单击此处撤销
|
||||
Search for Videos: 搜索视频
|
||||
Are you sure you want to delete this playlist? This cannot be undone: 你确定要删除此播放列表吗?此操作无法撤销。
|
||||
Sort By:
|
||||
LatestPlayedFirst: 最近播放的
|
||||
|
@ -187,6 +188,7 @@ User Playlists:
|
|||
Enable Quick Bookmark With This Playlist: 开启使用此播放列表来快速添加书签
|
||||
Remove from Favorites: 从播放列表 {playlistName} 删除
|
||||
Disable Quick Bookmark: 停用快速添加书签
|
||||
Playlists with Matching Videos: 有匹配视频的播放列表
|
||||
History:
|
||||
# On History Page
|
||||
History: '历史记录'
|
||||
|
|
|
@ -112,7 +112,7 @@ User Playlists:
|
|||
Your Playlists: '您的播放清單'
|
||||
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 您播放清單的影片是空的。點擊影片角落的星星按鈕以將其列在此處
|
||||
Playlist Message: 此頁面無法列出完整的播放清單。其僅列出您已儲存或加入最愛的影片。工作完成後,所有目前在此的影片都會轉移到「最愛」播放清單。
|
||||
Search bar placeholder: 在播放清單搜尋
|
||||
Search bar placeholder: 搜尋播放清單
|
||||
Empty Search Message: 此播放清單中沒有與您的搜尋相符的影片
|
||||
This playlist currently has no videos.: 此播放清單目前沒有影片。
|
||||
Create New Playlist: 建立新播放清單
|
||||
|
@ -188,6 +188,7 @@ User Playlists:
|
|||
Remove from Favorites: 從 {playlistName} 移除
|
||||
Enable Quick Bookmark With This Playlist: 啟用此播放清單的快速書籤
|
||||
Disable Quick Bookmark: 停用快速書籤
|
||||
Playlists with Matching Videos: 包含相符影片的播放清單
|
||||
History:
|
||||
# On History Page
|
||||
History: '觀看紀錄'
|
||||
|
|
Loading…
Reference in New Issue