diff --git a/client/e2e/src/po/login.po.ts b/client/e2e/src/po/login.po.ts index 67cd8e5e5..d989dd861 100644 --- a/client/e2e/src/po/login.po.ts +++ b/client/e2e/src/po/login.po.ts @@ -87,7 +87,7 @@ export class LoginPage { await logout.click() await browser.waitUntil(() => { - return $('.login-buttons-block, my-error-page a[href="/login"]').isDisplayed() + return $$('.login-buttons-block, my-error-page a[href="/login"]').some(e => e.isDisplayed()) }) } diff --git a/client/e2e/src/po/my-account.po.ts b/client/e2e/src/po/my-account.po.ts index 73eb6162c..743e3094f 100644 --- a/client/e2e/src/po/my-account.po.ts +++ b/client/e2e/src/po/my-account.po.ts @@ -128,7 +128,8 @@ export class MyAccountPage { await selectCustomSelect('privacy', privacy) const submit = await $('form input[type=submit]') - submit.waitForClickable() + await submit.waitForClickable() + await submit.scrollIntoView() await submit.click() return browser.waitUntil(async () => { diff --git a/client/e2e/src/po/player.po.ts b/client/e2e/src/po/player.po.ts index e41422359..fdbaa3fb8 100644 --- a/client/e2e/src/po/player.po.ts +++ b/client/e2e/src/po/player.po.ts @@ -40,7 +40,7 @@ export class PlayerPage { await browser.waitUntil(async () => { return (await this.getWatchVideoPlayerCurrentTime()) >= waitUntilSec - }) + }, { timeout: waitUntilSec * 2 * 1000 }) // Pause video await $('div.video-js').click() diff --git a/client/e2e/src/po/video-search.po.ts b/client/e2e/src/po/video-search.po.ts index 5446718d1..5bad2fa6c 100644 --- a/client/e2e/src/po/video-search.po.ts +++ b/client/e2e/src/po/video-search.po.ts @@ -2,7 +2,7 @@ export class VideoSearchPage { async search (search: string) { await $('#search-video').setValue(search) - await $('my-header .icon-search').click() + await $('.search-button').click() await browser.waitUntil(() => { return $('my-video-miniature').isDisplayed() diff --git a/client/e2e/src/po/video-upload.po.ts b/client/e2e/src/po/video-upload.po.ts index ff3841a02..2ea692ec9 100644 --- a/client/e2e/src/po/video-upload.po.ts +++ b/client/e2e/src/po/video-upload.po.ts @@ -68,6 +68,7 @@ export class VideoUploadPage { selectCustomSelect('privacy', 'Password protected') const videoPasswordInput = $('input#videoPassword') + await videoPasswordInput.waitForClickable() await videoPasswordInput.clearValue() return videoPasswordInput.setValue(videoPassword) diff --git a/client/e2e/src/po/video-watch.po.ts b/client/e2e/src/po/video-watch.po.ts index 76ac58e48..67081fe4a 100644 --- a/client/e2e/src/po/video-watch.po.ts +++ b/client/e2e/src/po/video-watch.po.ts @@ -151,13 +151,13 @@ export class VideoWatchPage { } async fillVideoPassword (videoPassword: string) { - const videoPasswordInput = $('input#confirmInput') - const confirmButton = await $('input[value="Confirm"]') - + const videoPasswordInput = await $('input#confirmInput') + await videoPasswordInput.waitForClickable() await videoPasswordInput.clearValue() await videoPasswordInput.setValue(videoPassword) - await confirmButton.waitForClickable() + const confirmButton = await $('input[value="Confirm"]') + await confirmButton.waitForClickable() return confirmButton.click() } @@ -188,6 +188,7 @@ export class VideoWatchPage { async createThread (comment: string) { const textarea = await $('my-video-comment-add textarea') + await textarea.waitForClickable() await textarea.setValue(comment) @@ -202,10 +203,12 @@ export class VideoWatchPage { async createReply (comment: string) { const replyButton = await $('button.comment-action-reply') - + await replyButton.waitForClickable() + await replyButton.scrollIntoView() await replyButton.click() - const textarea = await $('my-video-comment my-video-comment-add textarea') + const textarea = await $('my-video-comment my-video-comment-add textarea') + await textarea.waitForClickable() await textarea.setValue(comment) const confirmButton = await $('my-video-comment .comment-buttons .orange-button') diff --git a/client/e2e/src/suites-local/custom-server-defaults.e2e-spec.ts b/client/e2e/src/suites-local/custom-server-defaults.e2e-spec.ts index 71840d707..4d5f44001 100644 --- a/client/e2e/src/suites-local/custom-server-defaults.e2e-spec.ts +++ b/client/e2e/src/suites-local/custom-server-defaults.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginPage } from '../po/login.po' import { VideoUploadPage } from '../po/video-upload.po' import { VideoWatchPage } from '../po/video-watch.po' -import { go, isMobileDevice, isSafari, waitServerUp } from '../utils' +import { getScreenshotPath, go, isMobileDevice, isSafari, waitServerUp } from '../utils' describe('Custom server defaults', () => { let videoUploadPage: VideoUploadPage @@ -83,4 +83,8 @@ describe('Custom server defaults', () => { await checkP2P(false) }) }) + + after(async () => { + await browser.saveScreenshot(getScreenshotPath('after-test.png')) + }) }) diff --git a/client/e2e/src/suites-local/video-password.e2e-spec.ts b/client/e2e/src/suites-local/video-password.e2e-spec.ts index cd1b1d48e..3683b387a 100644 --- a/client/e2e/src/suites-local/video-password.e2e-spec.ts +++ b/client/e2e/src/suites-local/video-password.e2e-spec.ts @@ -3,7 +3,7 @@ import { SignupPage } from '../po/signup.po' import { PlayerPage } from '../po/player.po' import { VideoUploadPage } from '../po/video-upload.po' import { VideoWatchPage } from '../po/video-watch.po' -import { go, isMobileDevice, isSafari, waitServerUp } from '../utils' +import { getScreenshotPath, go, isMobileDevice, isSafari, waitServerUp } from '../utils' import { MyAccountPage } from '../po/my-account.po' describe('Password protected videos', () => { @@ -153,6 +153,7 @@ describe('Password protected videos', () => { }) describe('Regular users', function () { + before(async () => { await signupPage.fullSignup({ accountInfo: { @@ -221,4 +222,8 @@ describe('Password protected videos', () => { await videoWatchPage.waitUntilVideoName(publicVideoName2, 40 * 1000) }) }) + + after(async () => { + await browser.saveScreenshot(getScreenshotPath('after-test.png')) + }) }) diff --git a/client/e2e/src/utils/hooks.ts b/client/e2e/src/utils/hooks.ts index 1daff5fcc..05a32916c 100644 --- a/client/e2e/src/utils/hooks.ts +++ b/client/e2e/src/utils/hooks.ts @@ -93,5 +93,14 @@ function buildConfig (suiteFile: string = undefined) { } } + if (filename === 'video-password.e2e-spec.ts') { + return { + signup: { + enabled: true, + limit: -1 + } + } + } + return {} } diff --git a/client/e2e/src/utils/server.ts b/client/e2e/src/utils/server.ts index 227f4aea6..dede32e9a 100644 --- a/client/e2e/src/utils/server.ts +++ b/client/e2e/src/utils/server.ts @@ -3,6 +3,8 @@ import { join, resolve } from 'path' function runServer (appInstance: number, config: any = {}) { const env = Object.create(process.env) + + env['NODE_OPTIONS'] = '' env['NODE_ENV'] = 'test' env['NODE_APP_INSTANCE'] = appInstance + '' @@ -43,7 +45,10 @@ function runServer (appInstance: number, config: any = {}) { function runCommand (command: string) { return new Promise((res, rej) => { - const p = exec(command, { cwd: getRootCWD() }) + // Reset NODE_OPTIONS env set by webdriverio + const env = { ...process.env, NODE_OPTIONS: '' } + + const p = exec(command, { env, cwd: getRootCWD() }) p.stderr.on('data', data => console.error(data.toString())) p.on('error', err => rej(err)) diff --git a/client/e2e/wdio.local-test.conf.ts b/client/e2e/wdio.local-test.conf.ts index a691147ca..2037017ce 100644 --- a/client/e2e/wdio.local-test.conf.ts +++ b/client/e2e/wdio.local-test.conf.ts @@ -43,7 +43,7 @@ module.exports = { } ], - services: [ 'chromedriver', 'geckodriver', 'shared-store' ], + services: [ 'shared-store' ], beforeSession: beforeLocalSession, beforeSuite: beforeLocalSuite, diff --git a/client/e2e/wdio.local.conf.ts b/client/e2e/wdio.local.conf.ts index 5cdd69290..b6807cb77 100644 --- a/client/e2e/wdio.local.conf.ts +++ b/client/e2e/wdio.local.conf.ts @@ -22,6 +22,7 @@ module.exports = { { 'browserName': 'chrome', 'goog:chromeOptions': { + binary: '/usr/bin/google-chrome-stable', args: [ '--headless', '--disable-gpu', windowSizeArg ], prefs } @@ -37,7 +38,7 @@ module.exports = { } ], - services: [ 'chromedriver', 'geckodriver', 'shared-store' ], + services: [ 'shared-store' ], beforeSession: beforeLocalSession, beforeSuite: beforeLocalSuite, diff --git a/client/package.json b/client/package.json index 46ea58bd3..b733b4fe3 100644 --- a/client/package.json +++ b/client/package.json @@ -90,7 +90,6 @@ "buffer": "^6.0.3", "chart.js": "^4.3.0", "chartjs-plugin-zoom": "~2.0.1", - "chromedriver": "^117.0.3", "core-js": "^3.22.8", "css-loader": "^6.2.0", "debug": "^4.3.1", @@ -100,7 +99,6 @@ "eslint-plugin-prefer-arrow": "latest", "expect-webdriverio": "^4.2.3", "focus-visible": "^5.0.2", - "geckodriver": "^4.0.0", "hls.js": "~1.3", "html-loader": "^4.1.0", "html-webpack-plugin": "^5.3.1", @@ -130,8 +128,6 @@ "tslib": "^2.4.0", "typescript": "~5.1.0", "video.js": "^7.19.2", - "wdio-chromedriver-service": "^8.1.1", - "wdio-geckodriver-service": "^5.0.1", "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.4.2", "webpack-cli": "^5.0.1", diff --git a/client/src/app/+stats/video/video-stats.component.ts b/client/src/app/+stats/video/video-stats.component.ts index 5bde5b01d..8bd1ac1f2 100644 --- a/client/src/app/+stats/video/video-stats.component.ts +++ b/client/src/app/+stats/video/video-stats.component.ts @@ -527,7 +527,7 @@ export class VideoStatsComponent implements OnInit { const date = new Date(label) - if (data.groupInterval.match(/ month?$/)) { + if (data.groupInterval.match(/ months?$/)) { return date.toLocaleDateString([], { year: '2-digit', month: 'numeric' }) } diff --git a/client/src/app/+videos/+video-watch/shared/recommendations/recent-videos-recommendation.service.ts b/client/src/app/+videos/+video-watch/shared/recommendations/recent-videos-recommendation.service.ts index 174fd6610..5ef9fd19f 100644 --- a/client/src/app/+videos/+video-watch/shared/recommendations/recent-videos-recommendation.service.ts +++ b/client/src/app/+videos/+video-watch/shared/recommendations/recent-videos-recommendation.service.ts @@ -48,6 +48,7 @@ export class RecentVideosRecommendationService implements RecommendationService : undefined const defaultSubscription = this.videos.getVideos({ + skipCount: true, videoPagination: pagination, sort: '-publishedAt', nsfw @@ -61,6 +62,7 @@ export class RecentVideosRecommendationService implements RecommendationService return this.searchService.searchVideos({ search: '', componentPagination: pagination, + skipCount: true, advancedSearch: new AdvancedSearch({ tagsOneOf: recommendation.tags.join(','), sort: '-publishedAt', diff --git a/client/src/app/+videos/+video-watch/video-watch.component.ts b/client/src/app/+videos/+video-watch/video-watch.component.ts index 2524d0216..5485b3ec5 100644 --- a/client/src/app/+videos/+video-watch/video-watch.component.ts +++ b/client/src/app/+videos/+video-watch/video-watch.component.ts @@ -695,6 +695,8 @@ export class VideoWatchComponent implements OnInit, OnDestroy { } const getStartTime = () => { + if (video.isLive) return undefined + const byUrl = urlOptions.startTime !== undefined const byHistory = video.userHistory && (!this.playlist || urlOptions.resume !== undefined) const byLocalStorage = getStoredVideoWatchHistory(video.uuid) diff --git a/client/src/app/shared/shared-main/custom-page/custom-page.service.ts b/client/src/app/shared/shared-main/custom-page/custom-page.service.ts index 6a2d3a1f5..b0af379d2 100644 --- a/client/src/app/shared/shared-main/custom-page/custom-page.service.ts +++ b/client/src/app/shared/shared-main/custom-page/custom-page.service.ts @@ -23,7 +23,7 @@ export class CustomPageService { return of({ content: '' }) } - this.restExtractor.handleError(err) + return this.restExtractor.handleError(err) }) ) } diff --git a/client/src/app/shared/shared-main/video/video.service.ts b/client/src/app/shared/shared-main/video/video.service.ts index 9b2bc5dee..7d7bd3643 100644 --- a/client/src/app/shared/shared-main/video/video.service.ts +++ b/client/src/app/shared/shared-main/video/video.service.ts @@ -395,7 +395,7 @@ export class VideoService { return of([]) } - this.restExtractor.handleError(err) + return this.restExtractor.handleError(err) }) ) } @@ -411,7 +411,7 @@ export class VideoService { return of(undefined) } - this.restExtractor.handleError(err) + return this.restExtractor.handleError(err) }) ) } diff --git a/client/src/app/shared/shared-search/search.service.ts b/client/src/app/shared/shared-search/search.service.ts index 281e0b4bd..301e857cc 100644 --- a/client/src/app/shared/shared-search/search.service.ts +++ b/client/src/app/shared/shared-search/search.service.ts @@ -31,8 +31,9 @@ export class SearchService { componentPagination?: ComponentPaginationLight advancedSearch?: AdvancedSearch uuids?: string[] + skipCount?: boolean }): Observable> { - const { search, uuids, componentPagination, advancedSearch } = parameters + const { search, uuids, componentPagination, advancedSearch, skipCount } = parameters if (advancedSearch?.resultType !== undefined && advancedSearch.resultType !== 'videos') { return of({ total: 0, data: [] }) @@ -49,6 +50,7 @@ export class SearchService { params = this.restService.addRestGetParams(params, pagination) if (search) params = params.append('search', search) + if (skipCount === true) params = params.append('skipCount', true) if (uuids) params = this.restService.addArrayParams(params, 'uuids', uuids) if (advancedSearch) { diff --git a/client/src/app/shared/shared-video-live/live-stream-information.component.ts b/client/src/app/shared/shared-video-live/live-stream-information.component.ts index 4089c88fb..eb0d84b0a 100644 --- a/client/src/app/shared/shared-video-live/live-stream-information.component.ts +++ b/client/src/app/shared/shared-video-live/live-stream-information.component.ts @@ -45,7 +45,9 @@ export class LiveStreamInformationComponent { [LiveVideoError.FFMPEG_ERROR]: $localize`Server error`, [LiveVideoError.QUOTA_EXCEEDED]: $localize`Quota exceeded`, [LiveVideoError.RUNNER_JOB_CANCEL]: $localize`Runner job cancelled`, - [LiveVideoError.RUNNER_JOB_ERROR]: $localize`Error in runner job` + [LiveVideoError.RUNNER_JOB_ERROR]: $localize`Error in runner job`, + [LiveVideoError.UNKNOWN_ERROR]: $localize`Unknown error`, + [LiveVideoError.INVALID_INPUT_VIDEO_STREAM]: $localize`Invalid input video stream` } return errors[session.error] diff --git a/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.scss b/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.scss index fb3018b49..acb3f33b3 100644 --- a/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.scss +++ b/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.scss @@ -37,6 +37,9 @@ my-video-thumbnail, @include disable-default-a-behaviour; color: pvar(--mainForegroundColor); + } + + > a { display: flex; min-width: 0; align-items: center; @@ -125,11 +128,11 @@ my-video-thumbnail, a { width: auto; - padding-right: 5px; } .pt-badge { - @include margin-right(5px); + margin: 0 5px; + white-space: nowrap; } } diff --git a/client/src/assets/player/peertube-player.ts b/client/src/assets/player/peertube-player.ts index 192b2e124..857b9bd62 100644 --- a/client/src/assets/player/peertube-player.ts +++ b/client/src/assets/player/peertube-player.ts @@ -168,8 +168,7 @@ export class PeerTubePlayer { const webVideoOptionsBuilder = new WebVideoOptionsBuilder(pick(this.currentLoadOptions, [ 'videoFileToken', 'webVideo', - 'hls', - 'startTime' + 'hls' ])) this.player.webVideo(webVideoOptionsBuilder.getPluginOptions()) diff --git a/client/src/assets/player/shared/control-bar/time-tooltip.ts b/client/src/assets/player/shared/control-bar/time-tooltip.ts index 2ed4f9acd..44ad5106b 100644 --- a/client/src/assets/player/shared/control-bar/time-tooltip.ts +++ b/client/src/assets/player/shared/control-bar/time-tooltip.ts @@ -4,13 +4,19 @@ import videojs, { VideoJsPlayer } from 'video.js' const TimeToolTip = videojs.getComponent('TimeTooltip') as any // FIXME: typings don't have write method class TimeTooltip extends TimeToolTip { + private currentTimecode: string + private currentChapterTitle: string write (timecode: string) { const player: VideoJsPlayer = this.player() if (player.usingPlugin('chapters')) { - const chapterTitle = player.chapters().getChapter(timeToInt(timecode)) - if (chapterTitle) return super.write(chapterTitle + '\r\n' + timecode) + if (timecode === this.currentTimecode) return + + this.currentTimecode = timecode + this.currentChapterTitle = player.chapters().getChapter(timeToInt(this.currentTimecode)) + + if (this.currentChapterTitle) return super.write(this.currentChapterTitle + '\r\n' + this.currentTimecode) } return super.write(timecode) diff --git a/client/src/assets/player/shared/p2p-media-loader/p2p-media-loader-plugin.ts b/client/src/assets/player/shared/p2p-media-loader/p2p-media-loader-plugin.ts index ee617ce8a..7a8824274 100644 --- a/client/src/assets/player/shared/p2p-media-loader/p2p-media-loader-plugin.ts +++ b/client/src/assets/player/shared/p2p-media-loader/p2p-media-loader-plugin.ts @@ -87,16 +87,26 @@ class P2pMediaLoaderPlugin extends Plugin { super.dispose() } + // --------------------------------------------------------------------------- + getCurrentLevel () { if (!this.hlsjs) return undefined return this.hlsjs.levels[this.hlsjs.currentLevel] } + // --------------------------------------------------------------------------- + getLiveLatency () { return Math.round(this.hlsjs.latency) } + getLiveLatencyFromEdge () { + return Math.round(this.hlsjs.latency - this.hlsjs.targetLatency) + } + + // --------------------------------------------------------------------------- + getHLSJS () { return this.hlsjs } diff --git a/client/src/assets/player/shared/peertube/peertube-plugin.ts b/client/src/assets/player/shared/peertube/peertube-plugin.ts index 7aeae2670..0ca5a500a 100644 --- a/client/src/assets/player/shared/peertube/peertube-plugin.ts +++ b/client/src/assets/player/shared/peertube/peertube-plugin.ts @@ -409,10 +409,12 @@ class PeerTubePlugin extends Plugin { // Prefer canplaythrough instead of canplay because Chrome has issues with the second one this.player.one('canplaythrough', () => { - if (this.options.startTime()) { - debugLogger('Start the video at ' + this.options.startTime()) + const startTime = this.options.startTime() - this.player.currentTime(timeToInt(this.options.startTime())) + if (startTime !== null && startTime !== undefined) { + debugLogger('Start the video at ' + startTime) + + this.player.currentTime(timeToInt(startTime)) } if (this.options.stopTime()) { diff --git a/client/src/assets/player/shared/player-options-builder/web-video-options-builder.ts b/client/src/assets/player/shared/player-options-builder/web-video-options-builder.ts index a3c3c3f27..9cf74d8ed 100644 --- a/client/src/assets/player/shared/player-options-builder/web-video-options-builder.ts +++ b/client/src/assets/player/shared/player-options-builder/web-video-options-builder.ts @@ -1,6 +1,6 @@ import { PeerTubePlayerLoadOptions, WebVideoPluginOptions } from '../../types' -type ConstructorOptions = Pick +type ConstructorOptions = Pick export class WebVideoOptionsBuilder { @@ -14,9 +14,7 @@ export class WebVideoOptionsBuilder { videoFiles: this.options.webVideo.videoFiles.length !== 0 ? this.options.webVideo.videoFiles - : this.options?.hls.videoFiles || [], - - startTime: this.options.startTime + : this.options?.hls.videoFiles || [] } } } diff --git a/client/src/assets/player/shared/stats/stats-card.ts b/client/src/assets/player/shared/stats/stats-card.ts index fefe8483e..b04e91f99 100644 --- a/client/src/assets/player/shared/stats/stats-card.ts +++ b/client/src/assets/player/shared/stats/stats-card.ts @@ -163,9 +163,11 @@ class StatsCard extends Component { let progress: number let latency: string + let latencyFromEdge: string if (this.options_.videoIsLive) { latency = secondsToTime(p2pMediaLoader.getLiveLatency()) + latencyFromEdge = secondsToTime(p2pMediaLoader.getLiveLatencyFromEdge()) } else { progress = this.player().bufferedPercent() } @@ -176,6 +178,7 @@ class StatsCard extends Component { codecs, buffer, latency, + latencyFromEdge, progress } } @@ -261,9 +264,10 @@ class StatsCard extends Component { buffer: string latency?: string + latencyFromEdge?: string colorSpace?: string }) { - const { playerNetworkInfo, progress, colorSpace, codecs, resolution, buffer, latency } = options + const { playerNetworkInfo, progress, colorSpace, codecs, resolution, buffer, latency, latencyFromEdge } = options const { downloadedFromServer, downloadedFromPeers } = playerNetworkInfo const player = this.player() @@ -311,16 +315,18 @@ class StatsCard extends Component { this.setInfoValue(this.volume, volume) this.setInfoValue(this.codecs, codecs) this.setInfoValue(this.color, colorSpace) + this.setInfoValue(this.transferred, totalTransferred) this.setInfoValue(this.connection, playerNetworkInfo.averageBandwidth) this.setInfoValue(this.network, networkActivity) - this.setInfoValue(this.transferred, totalTransferred) this.setInfoValue(this.download, downloadBreakdown) this.setInfoValue(this.bufferProgress, bufferProgress) this.setInfoValue(this.bufferState, buffer) - this.setInfoValue(this.liveLatency, latency) + if (latency && latencyFromEdge) { + this.setInfoValue(this.liveLatency, player.localize('{1} (from edge: {2})', [ latency, latencyFromEdge ])) + } } private setInfoValue (el: InfoElement, value: string) { diff --git a/client/src/assets/player/types/peertube-videojs-typings.ts b/client/src/assets/player/types/peertube-videojs-typings.ts index 6293404ab..108a1035d 100644 --- a/client/src/assets/player/types/peertube-videojs-typings.ts +++ b/client/src/assets/player/types/peertube-videojs-typings.ts @@ -191,7 +191,6 @@ type TheaterButtonOptions = { type WebVideoPluginOptions = { videoFiles: VideoFile[] - startTime: number | string videoFileToken: () => string } diff --git a/client/src/locale/angular.ar.xlf b/client/src/locale/angular.ar.xlf index c6ccad143..039f04c83 100644 --- a/client/src/locale/angular.ar.xlf +++ b/client/src/locale/angular.ar.xlf @@ -9,7 +9,7 @@ Slide of - الشريحة من + الشريحة تبع Currently selected slide number read by screen reader node_modules/src/ngb-config.ts13 @@ -54,12 +54,12 @@ « - « + « node_modules/src/ngb-config.ts13 » - » + » node_modules/src/ngb-config.ts13 @@ -3759,7 +3759,7 @@ {VAR_PLURAL, plural, =1 {cached image} other {cached images}} - {VAR_PLURAL, plural, =1 {cached image} other {cached images}} + {VAR_PLURAL, plural, =1 {صورة مخزنة مؤقتا} other {صور مخزنة مؤقتا}} src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html 22 @@ -3772,7 +3772,7 @@ {VAR_PLURAL, plural, =1 {cached caption} other {cached captions}} - {VAR_PLURAL, plural, =1 {cached caption} other {cached captions}} + {VAR_PLURAL, plural, =1 {تسمية توضيحية مخزنة مؤقتا} other {تسميات توضيحية مخزنة مؤقتا}} src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html 36 @@ -3788,7 +3788,7 @@ {VAR_PLURAL, plural, =1 {cached torrent} other {cached torrents}} - {VAR_PLURAL, plural, =1 {cached torrent} other {cached torrents}} + {VAR_PLURAL, plural, =1 {تورنت مخزنة مؤقتا} other {تورنتات مخزنة مؤقتا}} src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html 50 @@ -7492,12 +7492,12 @@ The link will expire within 1 hour. View from - View from + View من src/app/+videos/+video-watch/shared/comment/video-comments.component.html79 View - View + عرض src/app/+videos/+video-watch/shared/comment/video-comments.component.html84 @@ -7527,7 +7527,7 @@ The link will expire within 1 hour. Friendly Reminder: - Friendly Reminder: + تذكير ودي: src/app/+videos/+video-watch/shared/information/privacy-concerns.component.html 4 @@ -7596,7 +7596,7 @@ The link will expire within 1 hour. You can comment using an account on any ActivityPub-compatible instance (PeerTube/Mastodon/Pleroma account for example). - You can comment using an account on any ActivityPub-compatible instance (PeerTube/Mastodon/Pleroma account for example). + يمكنك التعليق باستخدام حساب على أي نُسْخَة متوافق مع ActivityPub (حساب بييرتيوب/Mastodon/Pleroma على سبيل المثال). src/app/+videos/+video-watch/shared/comment/video-comment-add.component.html69 @@ -7845,18 +7845,18 @@ The link will expire within 1 hour. x264, targeting maximum device compatibility - x264, targeting maximum device compatibility + x264، يستهدف الحد الأقصى من توافق الأجهزة src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts54 src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts49 Estimating a server's capacity to transcode and stream videos isn't easy and we can't tune PeerTube automatically. - Estimating a server's capacity to transcode and stream videos isn't easy and we can't tune PeerTube automatically. + إن تقدير قدرة الخادم على تحويل ترميز مقاطع الفيديو ودفقها ليس بالأمر السهل، ولا يمكننا ضبط بييرتيوب تلقائيًا. src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html8 However, you may want to read our guidelines before tweaking the following values. - However, you may want to read our guidelines before tweaking the following values. + ومع ذلك، قد ترغب في قراءة إرشاداتنا قبل تعديل القيم التالية. src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html 12,14 @@ -7864,7 +7864,7 @@ The link will expire within 1 hour. Process uploaded videos so that they are in a streamable form that any device can play. Though costly in resources, this is a critical part of PeerTube, so tread carefully. - Process uploaded videos so that they are in a streamable form that any device can play. Though costly in resources, this is a critical part of PeerTube, so tread carefully. + قم بمعالجة مقاطع الفيديو التي تم تحميلها بحيث تكون في شكل قابل للبث ويمكن لأي جهاز تشغيله. على الرغم من أنه مكلف من حيث الموارد، إلا أنه يعد جزءًا مهمًا من بييرتيوب، لذا تعامل معه بحذر. src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html22 @@ -7907,7 +7907,7 @@ The link will expire within 1 hour. You enabled signup: we automatically enabled the "Block new videos automatically" checkbox of the "Videos" section just below. - You enabled signup: we automatically enabled the "Block new videos automatically" checkbox of the "Videos" section just below. + لقد قمت بتفعيل الاشتراك: لقد قمنا تلقائيًا بتمكين مربع الاختيار "حظر مقاطع الفيديو الجديدة تلقائيًا" في قسم "مقاطع الفيديو" الموجود أدناه مباشرةً. src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts136 @@ -8070,7 +8070,7 @@ The link will expire within 1 hour. Deleted followers will be able to send again a follow request. - Deleted followers will be able to send again a follow request. + سيتمكن المتابعين المحذوفين من إرسال طلب متابعة مرة أخرى. src/app/+admin/follows/followers-list/followers-list.component.ts109 @@ -8092,12 +8092,12 @@ The link will expire within 1 hour. 1 host (without "http://"), account handle or channel handle per line - 1 host (without "http://"), account handle or channel handle per line + مضيف واحد (بدون "http://")، مقبض حساب أو مقبض قناة في كل سطر src/app/+admin/follows/following-list/follow-modal.component.html13 Subscriptions of your instance - Subscriptions of your instance + اشتراكات نُسْخَتك src/app/+admin/follows/following-list/following-list.component.html 3 @@ -8115,7 +8115,7 @@ The link will expire within 1 hour. Redundancy - Redundancy + تكرارية src/app/+admin/follows/follows.routes.ts 48 @@ -8247,7 +8247,7 @@ The link will expire within 1 hour. The live stream will be automatically terminated and replays won't be saved. - The live stream will be automatically terminated and replays won't be saved. + سيتم إنهاء البث المباشر تلقائيًا ولن يتم حفظ الإعادات. src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts 233 @@ -8477,7 +8477,7 @@ The link will expire within 1 hour. Proceed upgrade - Proceed upgrade + متابعة الترقية src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.ts152 @@ -8549,7 +8549,7 @@ The link will expire within 1 hour. If this is not your correct public IP, please consider fixing it because: - If this is not your correct public IP, please consider fixing it because: + إذا لم يكن هذا هو عنوان IP العام الصحيح الخاص بك، فيرجى التفكير في إصلاحه للأسباب التالية: src/app/+admin/system/debug/debug.component.html 6 @@ -8565,7 +8565,7 @@ The link will expire within 1 hour. Anti brute force system could be overzealous - Anti brute force system could be overzealous + قد يكون نظام مكافحة القوة الغاشمة (force system) مفرطًا في الحماس src/app/+admin/system/debug/debug.component.html 9 @@ -8573,7 +8573,7 @@ The link will expire within 1 hour. P2P system could not work correctly - P2P system could not work correctly + نظام P2P لا يمكن أن يعمل بشكل صحيح src/app/+admin/system/debug/debug.component.html 10 @@ -8589,7 +8589,7 @@ The link will expire within 1 hour. Check the trust_proxy configuration key - Check the trust_proxy configuration key + تحقق من trust_proxy مفتاح التضبيط src/app/+admin/system/debug/debug.component.html 15 @@ -8597,7 +8597,7 @@ The link will expire within 1 hour. If you run PeerTube using Docker, check you run the reverse-proxy with network_mode: "host" (see issue 1643) - If you run PeerTube using Docker, check you run the reverse-proxy with network_mode: "host" (see issue 1643) + إذا قمت بتشغيل بييرتيوب باستخدام Docker، فتأكد من تشغيل الوكيل العكسي مع وضع الشبكة: "المضيف" (راجع الإصدار 1643) src/app/+admin/system/debug/debug.component.html 16,17 @@ -8620,24 +8620,24 @@ The link will expire within 1 hour. debug - debug + تنقيح src/app/+admin/system/logs/logs.component.ts118 info - info + معلومات src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html123 src/app/+admin/system/logs/logs.component.ts122 warning - warning + تحذير src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html124 src/app/+admin/system/logs/logs.component.ts126 error - error + خطأ src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html125 src/app/+admin/system/logs/logs.component.ts130 @@ -8655,12 +8655,12 @@ The link will expire within 1 hour. Files - Files + ملفات src/app/+admin/overview/videos/video-list.component.html45 Published - Published + نُشر src/app/+admin/overview/videos/video-list.component.html46 @@ -8670,7 +8670,7 @@ The link will expire within 1 hour. Light/Orange or Dark - Light/Orange or Dark + فاتح/برتقالي أو داكن src/app/core/theme/theme.service.ts47 @@ -8696,37 +8696,37 @@ The link will expire within 1 hour. Priority - Priority + أولوية src/app/+admin/system/runners/runner-job-list/runner-job-list.component.html34 Progress - Progress + تقدم src/app/+admin/system/runners/runner-job-list/runner-job-list.component.html35 Runner - Runner + العدّاء src/app/+admin/system/runners/runner-job-list/runner-job-list.component.html36 Payload: - Payload: + الحمولة: src/app/+admin/system/runners/runner-job-list/runner-job-list.component.html103 Private payload: - Private payload: + الحمولة الخاصة: src/app/+admin/system/runners/runner-job-list/runner-job-list.component.html108 No runner jobs found. - No runner jobs found. + لم يتم العثور على وظائف عداء. src/app/+admin/system/runners/runner-job-list/runner-job-list.component.html121 Completed jobs - Completed jobs + وظائف مكتملة src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts 30 @@ -8734,7 +8734,7 @@ The link will expire within 1 hour. Pending jobs - Pending jobs + وظائف في انتظار src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts 34 @@ -8742,7 +8742,7 @@ The link will expire within 1 hour. Jobs that are being processed - Jobs that are being processed + الوظائف التي تتم معالجتها src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts 38 @@ -8750,7 +8750,7 @@ The link will expire within 1 hour. Failed jobs - Failed jobs + وظائف فشلت src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts 42 @@ -8758,12 +8758,12 @@ The link will expire within 1 hour. Cancel this job - Cancel this job + إلغاء هذه الوظيفة src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts60 Delete this job - Delete this job + حذف هذه الوظيفة src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts 67 @@ -8776,7 +8776,7 @@ The link will expire within 1 hour. Job(s) cancelled. - Job(s) cancelled. + وظيفة (الوظائف) أُلغيت. src/app/+admin/system/runners/runner-job-list/runner-job-list.component.ts110 @@ -8789,7 +8789,7 @@ The link will expire within 1 hour. Runner registration tokens - Runner registration tokens + رموز تسجيل العدّاء src/app/+admin/system/runners/runner-list/runner-list.component.html 9 @@ -8806,12 +8806,12 @@ The link will expire within 1 hour. Last contact - Last contact + آخر اتصال src/app/+admin/system/runners/runner-list/runner-list.component.html27 No remote runners found. - No remote runners found. + لم يتم العثور على عدّائين عن بُعد. src/app/+admin/system/runners/runner-list/runner-list.component.html57 @@ -8827,12 +8827,12 @@ The link will expire within 1 hour. Blocked videos - Blocked videos + مقاطع الفيديو المحظورة src/app/+admin/moderation/moderation.routes.ts67 User registrations - User registrations + تسجيلات المستخدم src/app/+admin/moderation/moderation.routes.ts 79 @@ -8845,7 +8845,7 @@ The link will expire within 1 hour. Accept registrationReject registration - Accept registrationReject registration + قبول التسجيلرفض التسجيل src/app/+admin/moderation/registration-list/process-registration-modal.component.html 4,5 @@ -8853,67 +8853,67 @@ The link will expire within 1 hour. Registration email has not been verified. Email delivery has been disabled by default. - Registration email has not been verified. Email delivery has been disabled by default. + لم يتم التحقق من البريد الإلكتروني للتسجيل. تسليم البريد الإلكتروني مُعطَّل بشكل افتراضي. src/app/+admin/moderation/registration-list/process-registration-modal.component.html16 Accepting  registration will create the account and channel. - Accepting  registration will create the account and channel. + قبول  سيؤدي التسجيل إلى إنشاء الحساب والقناة. src/app/+admin/moderation/registration-list/process-registration-modal.component.html23 An email will be sent to explaining its account has been created with the moderation response you'll write below. - An email will be sent to explaining its account has been created with the moderation response you'll write below. + سيتم إرسال بريد إلكتروني إلى موضحًا أنه تم إنشاء حسابه باستخدام استجابة الإشراف التي ستكتبها أدناه. src/app/+admin/moderation/registration-list/process-registration-modal.component.html26 Emails are not enabled on this instance so PeerTube won't be able to send an email to explaining its account has been created. - Emails are not enabled on this instance so PeerTube won't be able to send an email to explaining its account has been created. + لم يتم تمكين رسائل البريد الإلكتروني في هذه الحالة، لذا لن يتمكن بييرتيوب من إرسال بريد إلكتروني إلى موضحًا أنه تم إنشاء حسابه. src/app/+admin/moderation/registration-list/process-registration-modal.component.html30 An email will be sent to explaining its registration request has been rejected with the moderation response you'll write below. - An email will be sent to explaining its registration request has been rejected with the moderation response you'll write below. + سيتم إرسال بريد إلكتروني إلى موضحًا أن طلب التسجيل الخاص به كان تم الرفض مع استجابة الإشراف الذي ستكتبه أدناه. src/app/+admin/moderation/registration-list/process-registration-modal.component.html36 Emails are not enabled on this instance so PeerTube won't be able to send an email to explaining its registration request has been rejected. - Emails are not enabled on this instance so PeerTube won't be able to send an email to explaining its registration request has been rejected. + لم يتم تمكين رسائل البريد الإلكتروني في هذه الحالة، لذا لن يتمكن بييرتيوب من إرسال بريد إلكتروني إلى موضحًا أنه تم طلب التسجيل الخاص به مرفوض. src/app/+admin/moderation/registration-list/process-registration-modal.component.html40 Send a message to the user - Send a message to the user + إرسال رسالة إلى المستخدم src/app/+admin/moderation/registration-list/process-registration-modal.component.html47 Prevent email from being sent to the user - Prevent email from being sent to the user + منع إرسال البريد الإلكتروني إلى المستخدم src/app/+admin/moderation/registration-list/process-registration-modal.component.html62 Accept registration - Accept registration + قبول التسجيل src/app/+admin/moderation/registration-list/process-registration-modal.component.ts68 Reject registration - Reject registration + رفض التسجيل src/app/+admin/moderation/registration-list/process-registration-modal.component.ts71 account created - account created + أُنشئت حساب src/app/+admin/moderation/registration-list/process-registration-modal.component.ts95 registration rejected - registration rejected + رُفض تسجيل src/app/+admin/moderation/registration-list/process-registration-modal.component.ts112 Moderation response is required. - Moderation response is required. + مطلوب استجابة الإشراف. src/app/+admin/moderation/registration-list/process-registration-validators.ts 7 @@ -8921,7 +8921,7 @@ The link will expire within 1 hour. Moderation response must be at least 2 characters long. - Moderation response must be at least 2 characters long. + يجب أن تتكون استجابة الإشراف من حرفين على الأقل. src/app/+admin/moderation/registration-list/process-registration-validators.ts 8 @@ -8929,7 +8929,7 @@ The link will expire within 1 hour. Moderation response cannot be more than 3000 characters long. - Moderation response cannot be more than 3000 characters long. + لا يمكن أن يزيد طول استجابة الإشراف عن 3000 حرف. src/app/+admin/moderation/registration-list/process-registration-validators.ts 9 @@ -8937,7 +8937,7 @@ The link will expire within 1 hour. Registration requests - Registration requests + طلبات التسجيل src/app/+admin/moderation/registration-list/registration-list.component.html 3 @@ -8970,7 +8970,7 @@ The link will expire within 1 hour. Two factor authentication of disabled. - Two factor authentication of disabled. + الاستيثاق الثنائي لـ معطّل. src/app/+admin/overview/users/user-edit/user-update.component.ts 134 @@ -8993,7 +8993,7 @@ The link will expire within 1 hour. Video type - Video type + نوع الفيديو src/app/+admin/overview/videos/video-admin.service.ts45 @@ -9003,18 +9003,18 @@ The link will expire within 1 hour. Live - Live + مباشر src/app/+admin/overview/videos/video-admin.service.ts53 src/app/+admin/overview/videos/video-list.component.html91 Video files - Video files + ملفات الفيديو src/app/+admin/overview/videos/video-admin.service.ts59 With Web Videos - With Web Videos + مع أشرطة فيديو الويب src/app/+admin/overview/videos/video-admin.service.ts 63 @@ -9022,7 +9022,7 @@ The link will expire within 1 hour. Without Web Videos - Without Web Videos + بدون أشرطة فيديو الويب src/app/+admin/overview/videos/video-admin.service.ts 67 @@ -9030,22 +9030,22 @@ The link will expire within 1 hour. With HLS - With HLS + مع HLS src/app/+admin/overview/videos/video-admin.service.ts71 Without HLS - Without HLS + بدون HLS src/app/+admin/overview/videos/video-admin.service.ts75 Videos scope - Videos scope + نطاق الفيديوهات src/app/+admin/overview/videos/video-admin.service.ts81 Remote videos - Remote videos + فيديوهات عن بُعد src/app/+admin/overview/videos/video-admin.service.ts85 @@ -9086,17 +9086,17 @@ The link will expire within 1 hour. Created - Created + أُنشئ src/app/+admin/overview/users/user-list/user-list.component.ts134 Daily quota - Daily quota + الحصة اليومية src/app/+admin/overview/users/user-list/user-list.component.ts137 Last login - Last login + آخر تسجيل دخول src/app/+admin/overview/users/user-list/user-list.component.ts135 @@ -9123,12 +9123,12 @@ The link will expire within 1 hour. <p>You can't create users or channels with a username that already used by a deleted user/channel.</p> - <p>You can't create users or channels with a username that already used by a deleted user/channel.</p> + <p>لا يمكنك إنشاء مستخدمين أو قنوات باسم مستخدم تم استخدامه بالفعل بواسطة مستخدم/قناة محذوفة.</p> src/app/+admin/overview/users/user-list/user-list.component.ts244 It means the following usernames will be permanently deleted and cannot be recovered: - It means the following usernames will be permanently deleted and cannot be recovered: + وهذا يعني أنه سيتم حذف أسماء المستخدمين التالية نهائيًا ولا يمكن استعادتها: src/app/+admin/overview/users/user-list/user-list.component.ts245 @@ -9153,12 +9153,12 @@ The link will expire within 1 hour. This account is awaiting approval by moderators. - This account is awaiting approval by moderators. + هذا الحساب في انتظار موافقة المشرفين. src/app/+login/login.component.ts223 Registration approval has been rejected for this account. - Registration approval has been rejected for this account. + تم رفض الموافقة على التسجيل لهذا الحساب. src/app/+login/login.component.ts228 @@ -9178,17 +9178,17 @@ The link will expire within 1 hour. Banner changed. - Banner changed. + تم تغيير الشعار. src/app/+manage/video-channel-edit/video-channel-update.component.ts155 banner - banner + الشعار src/app/+manage/video-channel-edit/video-channel-update.component.ts162 Banner deleted. - Banner deleted. + حذفت الشعار. src/app/+manage/video-channel-edit/video-channel-update.component.ts172 @@ -9199,13 +9199,13 @@ The link will expire within 1 hour. avatar - avatar + الصورة الرمزية src/app/+manage/video-channel-edit/video-channel-update.component.ts129 src/app/+my-account/my-account-settings/my-account-settings.component.ts55 Avatar deleted. - Avatar deleted. + حذفت الصورة الرمزية. src/app/+manage/video-channel-edit/video-channel-update.component.ts139 src/app/+my-account/my-account-settings/my-account-settings.component.ts65 @@ -9221,13 +9221,13 @@ The link will expire within 1 hour. My followers - My followers + متابعيني src/app/+my-library/my-follows/my-followers.component.html4 src/app/+my-library/my-library-routing.module.ts110 No follower found. - No follower found. + لم يتم العثور على أي متابع. src/app/+my-library/my-follows/my-followers.component.html 13 @@ -9235,7 +9235,7 @@ The link will expire within 1 hour. Follower page - Follower page + صفحة المتابعين src/app/+my-library/my-follows/my-followers.component.html 20 @@ -9243,7 +9243,7 @@ The link will expire within 1 hour. Is following all your channels - Is following all your channels + يتابع كل قنواتك src/app/+my-library/my-follows/my-followers.component.html 26 @@ -9251,7 +9251,7 @@ The link will expire within 1 hour. Is following your channel - Is following your channel + يتابع قناتك src/app/+my-library/my-follows/my-followers.component.html 27 @@ -9259,7 +9259,7 @@ The link will expire within 1 hour. Channel filters - Channel filters + مرشحات القناة src/app/+my-library/my-follows/my-followers.component.ts49 src/app/+my-library/my-videos/my-videos.component.ts129 @@ -9275,12 +9275,12 @@ The link will expire within 1 hour. URL parameter is missing in URL parameters - URL parameter is missing in URL parameters + معلمة URL مفقودة في معلمات URL src/app/+remote-interaction/remote-interaction.component.ts24 Cannot access to the remote resource - Cannot access to the remote resource + لا يمكن الوصول إلى المورد البعيد src/app/+remote-interaction/remote-interaction.component.ts47 @@ -9293,7 +9293,7 @@ The link will expire within 1 hour. Remote interaction - Remote interaction + التفاعل عن بُعد src/app/+remote-interaction/remote-interaction-routing.module.ts 13 @@ -9355,7 +9355,7 @@ The link will expire within 1 hour. Are you sure you want to delete your account? - Are you sure you want to delete your account? + هل انت متأكد انك تريد حذف حسابك؟ src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.ts 22 @@ -9363,7 +9363,7 @@ The link will expire within 1 hour. This will delete all your data, including channels, videos, comments and you won't be able to create another user on this instance with "" username. - This will delete all your data, including channels, videos, comments and you won't be able to create another user on this instance with "" username. + سيؤدي هذا إلى حذف جميع بياناتك، بما في ذلك القنوات ومقاطع الفيديو والتعليقات ولن تتمكن من إنشاء مستخدم آخر غلى هذه النُسْخَة باستخدام "" اسم المستخدم. src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.ts 25 @@ -9371,7 +9371,7 @@ The link will expire within 1 hour. Content cached by other servers and other third-parties might make longer to be deleted. - Content cached by other servers and other third-parties might make longer to be deleted. + قد يؤدي المحتوى الذي تم تخزينه مؤقتًا بواسطة خوادم أخرى والجهات الخارجية الأخرى إلى إطالة وقت حذفه. src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.ts 27 @@ -9389,7 +9389,7 @@ The link will expire within 1 hour. Allow email to be publicly displayed - Allow email to be publicly displayed + السماح بعرض البريد الإلكتروني للعامة src/app/+my-account/my-account-settings/my-account-email-preferences/my-account-email-preferences.component.html 6 @@ -9397,7 +9397,7 @@ The link will expire within 1 hour. Necessary to claim podcast RSS feeds. - Necessary to claim podcast RSS feeds. + من الضروري المطالبة بخلاصات RSS للبودكاست. src/app/+my-account/my-account-settings/my-account-email-preferences/my-account-email-preferences.component.html 9 @@ -9445,7 +9445,7 @@ The link will expire within 1 hour. You or one of your channels has a new follower - You or one of your channels has a new follower + لديك أنت أو إحدى قنواتك متابع جديد src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts41 @@ -9485,7 +9485,7 @@ The link will expire within 1 hour. Video studio edition has finished - Video studio edition has finished + انتهت نسخة استوديو الفيديو src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts49 @@ -9549,7 +9549,7 @@ The link will expire within 1 hour. Notification preferences - Notification preferences + تفضيلات الإشعارات src/app/+my-account/my-account-notifications/my-account-notifications.component.html 6 @@ -9685,8 +9685,7 @@ The link will expire within 1 hour. is awaiting email verification - is awaiting email verification - + في انتظار التحقق من البريد الإلكتروني src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.html 5,6 @@ -9694,7 +9693,7 @@ The link will expire within 1 hour. Change your email - Change your email + غيّر بريدك الإلكتروني src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.html 11 @@ -9702,7 +9701,7 @@ The link will expire within 1 hour. Your current email is . It is never shown to the public. - Your current email is . It is never shown to the public. + بريدك الإلكتروني الحالي هو . لم يتم عرضه للعامة أبدًا. src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.html 13,16 @@ -9828,12 +9827,12 @@ The link will expire within 1 hour. Search - Search + بحث src/app/+search/search.component.ts257 PeerTube instance host filter is invalid - PeerTube instance host filter is invalid + عامل تصفية مضيف نُسْخَة بييرتيوب غير صالح src/app/+search/search.component.ts332 @@ -9857,7 +9856,7 @@ The link will expire within 1 hour. Plugins - Plugins + المُلحقات src/app/+admin/plugins/shared/plugin-navigation.component.html 8 @@ -9865,7 +9864,7 @@ The link will expire within 1 hour. Themes - Themes + السمات src/app/+admin/plugins/shared/plugin-navigation.component.html 9 @@ -9873,7 +9872,7 @@ The link will expire within 1 hour. User email has been verified - User email has been verified + تم التحقق من البريد الإلكتروني للمستخدم src/app/+admin/shared/user-email-info.component.ts 15 @@ -9881,7 +9880,7 @@ The link will expire within 1 hour. User email hasn't been verified - User email hasn't been verified + لم يتم التحقق من البريد الإلكتروني للمستخدم src/app/+admin/shared/user-email-info.component.ts 18 @@ -9889,8 +9888,7 @@ The link will expire within 1 hour. The video quota only takes into account original video size. Since transcoding is enabled, videos size can be at most ~ . - The video quota only takes into account original video size. Since transcoding is enabled, videos size can be at most ~ . - + حصة الفيديو تأخذ في الاعتبار فقط الأصلي حجم الفيديو. نظرًا لتقعيل تحويل الترميز، يمكن أن يكون حجم مقاطع الفيديو على الأكثر ~ . src/app/+admin/shared/user-real-quota-info.component.html 1,4 @@ -9911,7 +9909,7 @@ The link will expire within 1 hour. Verify email - Verify email + التحقق من البريد الإلكتروني src/app/+signup/+verify-account/verify-account-email/verify-account-email.component.html 2 @@ -9920,9 +9918,9 @@ The link will expire within 1 hour. Subscribe to the account الاشتراك في الحساب - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS قوائم التشغيل @@ -9963,7 +9961,7 @@ The link will expire within 1 hour. Concatenate a file at the beginning of the video. - Concatenate a file at the beginning of the video. + قم بتسلسل ملف في بداية الفيديو. src/app/+video-studio/edit/video-studio-edit.component.html26 @@ -9973,17 +9971,17 @@ The link will expire within 1 hour. ADD OUTRO - ADD OUTRO + أضِف أخرى src/app/+video-studio/edit/video-studio-edit.component.html38 Concatenate a file at the end of the video. - Concatenate a file at the end of the video. + قم بتسلسل ملف في نهاية الفيديو. src/app/+video-studio/edit/video-studio-edit.component.html40 Select the outro video file - Select the outro video file + حدد ملف الفيديو الخاتمة src/app/+video-studio/edit/video-studio-edit.component.html44 @@ -10003,17 +10001,17 @@ The link will expire within 1 hour. Run video edition - Run video edition + تشغيل إصدار الفيديو src/app/+video-studio/edit/video-studio-edit.component.html66 Video before edition - Video before edition + الفيديو قبل الاصدار src/app/+video-studio/edit/video-studio-edit.component.html75 Edition tasks: - Edition tasks: + مهام الإصدار: src/app/+video-studio/edit/video-studio-edit.component.html80 @@ -10023,17 +10021,17 @@ The link will expire within 1 hour. The current video will be overwritten by this edited video and <strong>you won't be able to recover it</strong>.<br /><br /> - The current video will be overwritten by this edited video and <strong>you won't be able to recover it</strong>.<br /><br /> + سيتم استبدال الفيديو الحالي بهذا الفيديو المعدل <strong>لن تتمكن من استعادته</strong>.<br /><br /> src/app/+video-studio/edit/video-studio-edit.component.ts79 As a reminder, the following tasks will be executed: <ol></ol> - As a reminder, the following tasks will be executed: <ol></ol> + وللتذكير سيتم تنفيذ المهام التالية: <ol></ol> src/app/+video-studio/edit/video-studio-edit.component.ts80 Edition tasks created. - Edition tasks created. + أُنشئت مهام الإصدار. src/app/+video-studio/edit/video-studio-edit.component.ts93 @@ -10466,22 +10464,22 @@ The link will expire within 1 hour. Your video will also be automatically blocked since video publication requires manual validation by moderators. - Your video will also be automatically blocked since video publication requires manual validation by moderators. + سيتم أيضًا حظر الفيديو الخاص بك تلقائيًا نظرًا لأن نشر الفيديو يتطلب التحقق اليدوي من قبل المشرفين. src/app/+videos/+video-edit/video-update.component.ts279 Uploading a new version of your video will completely erase the current version. - Uploading a new version of your video will completely erase the current version. + سيؤدي تحميل نسخة جديدة من الفيديو إلى مسح النسخة الحالية بالكامل. src/app/+videos/+video-edit/video-update.component.ts282 <br /><br />Do you still want to replace your video file? - <br /><br />Do you still want to replace your video file? + <br /><br />هل مازلت تريد استبدال ملف الفيديو الخاص بك؟ src/app/+videos/+video-edit/video-update.component.ts285 Replace file warning - Replace file warning + استبدال تحذير الملف src/app/+videos/+video-edit/video-update.component.ts287 @@ -10502,22 +10500,22 @@ The link will expire within 1 hour. "" image watermark will be added to the video - "" image watermark will be added to the video + ستتم إضافة العلامة المائية "" إلى الفيديو src/app/+video-studio/edit/video-studio-edit.component.ts133 Video will begin at and stop at - Video will begin at and stop at + سيبدأ الفيديو عند ويتوقف عند src/app/+video-studio/edit/video-studio-edit.component.ts140 Video will begin at - Video will begin at + سيبدأ الفيديو عند src/app/+video-studio/edit/video-studio-edit.component.ts144 Video will stop at - Video will stop at + سيتوقف الفيديو عند src/app/+video-studio/edit/video-studio-edit.component.ts148 @@ -10562,12 +10560,12 @@ The link will expire within 1 hour. Abuse reports - Abuse reports + تقارير إساءة الاستخدام src/app/+my-account/my-account.component.ts41 Settings - Settings + الإعدادات src/app/+admin/plugins/plugin-list-installed/plugin-list-installed.component.html12 src/app/+admin/plugins/plugin-search/plugin-search.component.html45 src/app/+my-account/my-account-settings/my-account-settings.component.html1 @@ -10595,7 +10593,7 @@ The link will expire within 1 hour. Other videos - Other videos + فيديوهات اخرى src/app/+videos/+video-watch/shared/recommendations/recommended-videos.component.html 4,6 @@ -10681,69 +10679,69 @@ The link will expire within 1 hour. Enter/exit fullscreen - Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 - + الدخول/الخروج في وضع ملء الشاشة + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video - Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 - + تشغيل/إيقاف الفيديو مؤقتًا + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video - Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 - + كتم/إلغاء كتم صوت الفيديو + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% - Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 - + انتقل إلى نسبة مئوية من الفيديو: 0 يمثل 0% و9 يمثل 90% + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume - Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 - + رفع مستوى الصوت + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume - Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 - + خفض مستوى الصوت + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward - Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 - + تسعى الفيديو إلى الأمام + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward - Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 - + تسعى عن الفيديو للخلف + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate - Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 - + زيادة معدل التشغيل + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate - Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 - + تقليل معدل التشغيل + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame - Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 - + انتقل في الفيديو إلى الإطار السابق + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame - Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 - + انتقل في الفيديو إلى الإطار التالي + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode - Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 - + تبديل وضع المسرح + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video أعجبني الفيديو @@ -10756,7 +10754,7 @@ The link will expire within 1 hour. You need to be logged in to rate this video. - You need to be logged in to rate this video. + يجب عليك تسجيل الدخول لتقييم هذا الفيديو. src/app/+videos/+video-watch/shared/action-buttons/video-rate.component.ts85 @@ -10786,7 +10784,7 @@ The link will expire within 1 hour. Open actions - Open actions + الإجراءات المفتوحة src/app/shared/shared-main/buttons/action-dropdown.component.html 4 @@ -10794,7 +10792,7 @@ The link will expire within 1 hour. Toggle this date format to "" - Toggle this date format to "" + تبديل تنسيق التاريخ هذا إلى "" src/app/shared/shared-main/date/date-toggle.component.ts 31 @@ -10810,17 +10808,17 @@ The link will expire within 1 hour. Exclude - Exclude + استبعاد src/app/+admin/overview/videos/video-admin.service.ts95 Exclude muted accounts - Exclude muted accounts + استبعاد الحسابات الصامتة src/app/+admin/overview/videos/video-admin.service.ts99 Exclude public videos - Exclude public videos + استبعاد مقاطع الفيديو العامة src/app/+admin/overview/videos/video-admin.service.ts 103 @@ -10828,7 +10826,7 @@ The link will expire within 1 hour. Only videos uploaded on this instance are displayed - Only videos uploaded on this instance are displayed + يتم عرض مقاطع الفيديو التي تم تحميلها في هذه الحالة فقط src/app/+videos/video-list/videos-list-common-page.component.ts194 @@ -10859,7 +10857,7 @@ The link will expire within 1 hour. Skip to main content - Skip to main content + انتقل إلى المحتوى الرئيسي src/app/app.component.html 3 @@ -10923,7 +10921,7 @@ The link will expire within 1 hour. Cannot retrieve OAuth Client credentials: . Ensure you have correctly configured PeerTube (config/ directory), in particular the "webserver" section. - Cannot retrieve OAuth Client credentials: . Ensure you have correctly configured PeerTube (config/ directory), in particular the "webserver" section. + لا يمكن استرداد بيانات اعتماد عميل OAuth: . تأكد من أنك قمت بتكوين بييرتيوب (الدليل/التكوين) بشكل صحيح، وخاصة قسم "خادم الويب". src/app/core/auth/auth.service.ts104 @@ -10933,7 +10931,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Show / hide this help menu - Show / hide this help menu + إظهار/إخفاء قائمة المساعدة هذه src/app/core/hotkeys/hotkeys.service.ts 33 @@ -10941,7 +10939,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hide this help menu - Hide this help menu + إخفاء قائمة المساعدة هذه src/app/core/hotkeys/hotkeys.service.ts39 @@ -10951,7 +10949,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular In my library - In my library + في مكتبتي src/app/core/menu/menu.service.ts113 @@ -10962,12 +10960,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular ON - ON + على src/app/core/menu/menu.service.ts159 Home - Home + الشاشة الرئيسية src/app/core/menu/menu.service.ts124 src/app/core/menu/menu.service.ts125 @@ -10994,17 +10992,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Server is unavailable. Please retry later. - Server is unavailable. Please retry later. + الخادم غير متوفر. يُرجى إعادة المحاولة لاحقًا. src/app/core/rest/rest-extractor.service.ts141 Unknown server error - Unknown server error + خطأ غير معروف في الخادم src/app/core/rest/rest-extractor.service.ts144 Sort by this column - Sort by this column + الترتيب حسب هذا العمود src/app/core/rest/rest-table.ts 25 @@ -11012,7 +11010,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular {first} - {last} of {totalRecords} - {first} - {last} of {totalRecords} + {first} - {last} من {totalRecords} src/app/core/rest/rest-table.ts88 @@ -11062,7 +11060,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Scan this QR code into a TOTP app on your phone. This app will generate tokens that you will have to enter when logging in. - Scan this QR code into a TOTP app on your phone. This app will generate tokens that you will have to enter when logging in. + قم بمسح رمز QR هذا ضوئيًا في تطبيق TOTP على هاتفك. سيقوم هذا التطبيق بإنشاء الرموز المميزة التي سيتعين عليك إدخالها عند تسجيل الدخول. src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.html 28,30 @@ -11070,7 +11068,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular If you can't scan the QR code and need to enter it manually, here is the plain-text secret: - If you can't scan the QR code and need to enter it manually, here is the plain-text secret: + إذا لم تتمكن من مسح رمز QR ضوئيًا وتحتاج إلى إدخاله يدويًا، فإليك سر النص العادي: src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.html 34,36 @@ -11078,7 +11076,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Two-factor code - Two-factor code + كود ثنائي src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.html 42 @@ -11086,7 +11084,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter the code generated by your authenticator app to confirm - Enter the code generated by your authenticator app to confirm + أدخل الرمز الذي أنشأه تطبيق الاستيثاق الخاص بك للتأكيد src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.html 43 @@ -11094,7 +11092,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Two factor authentication has been enabled. - Two factor authentication has been enabled. + فُعّلت الاستيثاق الثنائي. src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor.component.ts 77 @@ -11108,7 +11106,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hosts entered are invalid. - Hosts entered are invalid. + المضيفون الذين تم إدخالهم غير صالحين. src/app/shared/form-validators/host-validators.ts 93 @@ -11116,7 +11114,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hosts entered contain duplicates. - Hosts entered contain duplicates. + تحتوي المضيفات التي تم إدخالها على نسخ مكررة. src/app/shared/form-validators/host-validators.ts 94 @@ -11124,7 +11122,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hosts or handles are invalid. - Hosts or handles are invalid. + المضيفين أو المقابض غير صالحة. src/app/shared/form-validators/host-validators.ts 102 @@ -11132,7 +11130,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hosts or handles contain duplicates. - Hosts or handles contain duplicates. + تحتوي المضيفات أو المقابض على نسخ مكررة. src/app/shared/form-validators/host-validators.ts 103 @@ -11161,7 +11159,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Cache size is required. - Cache size is required. + حجم ذاكرة التخزين المؤقت مطلوب. src/app/shared/form-validators/custom-config-validators.ts 28 @@ -11169,7 +11167,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Cache size must be greater than 1. - Cache size must be greater than 1. + يجب أن يكون حجم ذاكرة التخزين المؤقت أكبر من 1. src/app/shared/form-validators/custom-config-validators.ts 29 @@ -11177,7 +11175,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Cache size must be a number. - Cache size must be a number. + يجب أن يكون حجم ذاكرة التخزين المؤقت رقمًا. src/app/shared/form-validators/custom-config-validators.ts 30 @@ -11190,7 +11188,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Signup limit must be greater than 1. Use -1 to disable it. - Signup limit must be greater than 1. Use -1 to disable it. + يجب أن يكون حد الاشتراك أكبر من 1. استخدم -1 لتعطيله. src/app/shared/form-validators/custom-config-validators.ts38 @@ -11200,17 +11198,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Signup minimum age is required. - Signup minimum age is required. + مطلوب الحد الأدنى لسن الاشتراك. src/app/shared/form-validators/custom-config-validators.ts46 Signup minimum age must be greater than 1. - Signup minimum age must be greater than 1. + يجب أن يكون الحد الأدنى لسن الاشتراك أكبر من 1. src/app/shared/form-validators/custom-config-validators.ts47 Signup minimum age must be a number. - Signup minimum age must be a number. + الحد الأدنى لسن الاشتراك يجب أن يكون رقمًا. src/app/shared/form-validators/custom-config-validators.ts48 @@ -11235,27 +11233,27 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Max live duration is required. - Max live duration is required. + مطلوب أقصى مدة البث مباشر. src/app/shared/form-validators/custom-config-validators.ts71 Max live duration should be greater or equal to -1. - Max live duration should be greater or equal to -1. + يجب أن تكون المدة القصوى للبث المباشر أكبر أو تساوي -1. src/app/shared/form-validators/custom-config-validators.ts72 Max instance lives is required. - Max instance lives is required. + الحد الأقصى للبث المباشر النُسْخَة مطلوب. src/app/shared/form-validators/custom-config-validators.ts79 Max instance lives should be greater or equal to -1. - Max instance lives should be greater or equal to -1. + يجب أن يكون الحد الأقصى للبث المباشر النُسْخَة أكبر أو يساوي -1. src/app/shared/form-validators/custom-config-validators.ts80 Max user lives is required. - Max user lives is required. + مطلوب الحد الأقصى للبث المباشر المستخدم. src/app/shared/form-validators/custom-config-validators.ts87 @@ -11280,12 +11278,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Concurrency is required. - Concurrency is required. + التزامن مطلوب. src/app/shared/form-validators/custom-config-validators.ts104 Concurrency should be greater or equal to 1. - Concurrency should be greater or equal to 1. + يجب أن يكون التزامن أكبر أو يساوي 1. src/app/shared/form-validators/custom-config-validators.ts105 @@ -11322,7 +11320,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular OTP token is required. - OTP token is required. + مطلوب رمز OTP. src/app/shared/form-validators/user-validators.ts 69 @@ -11489,7 +11487,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Registration reason is required. - Registration reason is required. + سبب التسجيل مطلوب src/app/+signup/+register/shared/register-validators.ts 14 @@ -11497,7 +11495,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Registration reason must be at least 2 characters long. - Registration reason must be at least 2 characters long. + يجب أن يتكون سبب التسجيل من حرفين على الأقل. src/app/+signup/+register/shared/register-validators.ts 15 @@ -11505,7 +11503,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Registration reason cannot be more than 3000 characters long. - Registration reason cannot be more than 3000 characters long. + لا يمكن أن يزيد طول سبب التسجيل عن 3000 حرف. src/app/+signup/+register/shared/register-validators.ts 16 @@ -11656,7 +11654,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Support text cannot be more than 1000 characters long. - Support text cannot be more than 1000 characters long. + لا يمكن أن يزيد طول نص الدعم عن 1000 حرف. src/app/shared/form-validators/video-channel-validators.ts 48 @@ -11664,7 +11662,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Remote channel url is required. - Remote channel url is required. + مطلوب عنوان URL للقناة البعيدة. src/app/shared/form-validators/video-channel-validators.ts 59 @@ -11672,7 +11670,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular External channel URL must begin with "https://" or "http://" - External channel URL must begin with "https://" or "http://" + يجب أن يبدأ عنوان URL للقناة الخارجية بـ "https://" أو "http://" src/app/shared/form-validators/video-channel-validators.ts 60 @@ -11680,7 +11678,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular External channel URL cannot be more than 1000 characters long - External channel URL cannot be more than 1000 characters long + لا يمكن أن يزيد طول عنوان URL للقناة الخارجية عن 1000 حرف src/app/shared/form-validators/video-channel-validators.ts 61 @@ -11688,7 +11686,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A chapter title is required. - A chapter title is required. + مطلوب عنوان الفصل. src/app/shared/form-validators/video-chapter-validators.ts 7 @@ -11696,7 +11694,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A chapter title should be more than 2 characters long. - A chapter title should be more than 2 characters long. + يجب أن يكون طول عنوان الفصل أكثر من حرفين. src/app/shared/form-validators/video-chapter-validators.ts 8 @@ -11704,7 +11702,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A chapter title should be less than 100 characters long. - A chapter title should be less than 100 characters long. + يجب أن يكون طول عنوان الفصل أقل من 100 حرف. src/app/shared/form-validators/video-chapter-validators.ts 9 @@ -11712,7 +11710,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Multiple chapters have the same timecode - Multiple chapters have the same timecode + فصول متعددة لها نفس الرمز الزمني src/app/shared/form-validators/video-chapter-validators.ts 26 @@ -11760,7 +11758,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Permanent/Recurring live - Permanent/Recurring live + البث المباشر الدائم/المتكرر src/app/shared/shared-video-live/live-stream-information.component.html12 @@ -11794,17 +11792,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular You can stream only once in a normal live. If you enable replay, it will be saved under the same URL as your live - You can stream only once in a normal live. If you enable replay, it will be saved under the same URL as your live + يمكنك البث مرة واحدة فقط في الحياة العادية. إذا قمت بتمكين إعادة التشغيل، فسيتم حفظه تحت نفس عنوان URL الخاص ببثك المباشر src/app/+videos/+video-edit/shared/video-edit.component.html316 This is a permanent/recurring live - This is a permanent/recurring live + هذا البث المباشر دائم/متكرر src/app/+videos/+video-edit/shared/video-edit.component.html323 You can stream multiple times in a permanent/recurring live. If you enable replays, they will be saved as separate videos - You can stream multiple times in a permanent/recurring live. If you enable replays, they will be saved as separate videos + يمكنك البث عدة مرات في بث مباشر دائم/متكرر. إذا قمت بتمكين عمليات الإعادة، فسيتم حفظها كمقاطع فيديو منفصلة src/app/+videos/+video-edit/shared/video-edit.component.html325 @@ -11814,27 +11812,27 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Latest live sessions - Latest live sessions + أحدث الجلسات المباشرة src/app/shared/shared-video-live/live-stream-information.component.html38 Started on - Started on + بدأت في src/app/shared/shared-video-live/live-stream-information.component.html44 Ended on - Ended on + انتهت في src/app/shared/shared-video-live/live-stream-information.component.html45 Go to replay - Go to replay + انتقل إلى إعادة التشغيل src/app/shared/shared-video-live/live-stream-information.component.html46 Replay is being processed... - Replay is being processed... + جارِ معالجة الإعادة... src/app/shared/shared-video-live/live-stream-information.component.html47 @@ -11936,7 +11934,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular COPY - COPY + نسخ src/app/shared/shared-forms/input-text.component.html 17,19 @@ -11965,7 +11963,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular PeerTube cannot handle this kind of file. Accepted extensions are . - PeerTube cannot handle this kind of file. Accepted extensions are . + لا يستطيع بييرتيوب التعامل مع هذا النوع من الملفات. الامتدادات المقبولة هي . src/app/shared/shared-forms/reactive-file.component.ts76 @@ -12006,17 +12004,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Disabled - Disabled + مُعطَّل src/app/shared/shared-instance/instance-features-table.component.ts60 Requires approval by moderators - Requires approval by moderators + يتطلب موافقة المشرفين src/app/shared/shared-instance/instance-features-table.component.ts61 Enabled - Enabled + مفعّل src/app/shared/shared-instance/instance-features-table.component.ts63 @@ -12046,17 +12044,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Accepted follows - Accepted follows + المتابعات المقبولة src/app/shared/shared-instance/instance-follow.service.ts146 Rejected follows - Rejected follows + المتابعات المرفوضة src/app/shared/shared-instance/instance-follow.service.ts150 Pending follows - Pending follows + المتابعات قيد الانتظار src/app/shared/shared-instance/instance-follow.service.ts154 @@ -12223,7 +12221,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular If you remove this user, you won't be able to create another user or channel with <strong></strong> username! - If you remove this user, you won't be able to create another user or channel with <strong></strong> username! + إذا قمت بإزالة هذا المستخدم، فلن تتمكن من إنشاء مستخدم أو قناة أخرى باستخدام <strong></strong> اسم المستخدم! src/app/shared/shared-moderation/user-moderation-dropdown.component.ts 104 @@ -12289,7 +12287,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular My account moderation - My account moderation + الإشراف في حسابي src/app/shared/shared-moderation/user-moderation-dropdown.component.ts291 @@ -12325,7 +12323,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hide any content from that user from you. - Hide any content from that user from you. + إخفاء أي محتوى من هذا المستخدم منك. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts297 @@ -12367,22 +12365,22 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Remove comments made by this account on your videos. - Remove comments made by this account on your videos. + أزِل التعليقات التي نشرها هذا الحساب على مقاطع الفيديو الخاصة بك. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts321 Hide any content from that user from you, your instance and its users. - Hide any content from that user from you, your instance and its users. + أخفي أي محتوى خاص بهذا المستخدم منك ومن نُسْخَتك ومستخدميه. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts375 Show this user's content to the users of this instance again. - Show this user's content to the users of this instance again. + اعرض محتوى هذا المستخدم لمستخدمي هذه النُسْخَة مرة أخرى. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts381 Hide any content from that instance from you, your instance and its users. - Hide any content from that instance from you, your instance and its users. + أخفي أي محتوى من هذه النُسْخَة عنك وعن نُسْخَتك ومستخدميه. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts393 @@ -12402,17 +12400,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Remove comments made by this account from your instance. - Remove comments made by this account from your instance. + أزِل التعليقات التي أدلى بها هذا الحساب من نُسْخَتك. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts410 Instance moderation - Instance moderation + إشراف النُسْخَة src/app/shared/shared-moderation/user-moderation-dropdown.component.ts419 Block videos - Block videos + حظر مقاطع الفيديو src/app/shared/shared-moderation/video-block.component.html 4 @@ -12507,7 +12505,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular default theme () - default theme () + السمة الافتراضية () src/app/shared/shared-user-settings/user-interface-settings.component.html 8 @@ -12515,12 +12513,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Light/Orange - Light/Orange + برتقالي/فاتح src/app/core/theme/theme.service.ts50 LIVE ENDED - LIVE ENDED + انتهى البث المباشر src/app/shared/shared-thumbnail/video-thumbnail.component.html32 @@ -12581,12 +12579,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Multiple ways to subscribe to the current channel - Multiple ways to subscribe to the current channel + طرق متعددة للاشتراك في القناة الحالية src/app/shared/shared-user-subscription/subscribe-button.component.html39 Open subscription dropdown - Open subscription dropdown + افتح القائمة المنسدلة للاشتراك src/app/shared/shared-user-subscription/subscribe-button.component.html41 @@ -12598,7 +12596,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Display live information - Display live information + عرض معلومات البث المباشر src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts335 @@ -12624,13 +12622,13 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Run HLS transcoding - Run HLS transcoding + تشغيل تحويل ترميز HLS src/app/+admin/overview/videos/video-list.component.ts96 src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts391 Run Web Video transcoding - Run Web Video transcoding + تشغيل تحويل ترميز فيديو الويب src/app/+admin/overview/videos/video-list.component.ts 102 @@ -12642,13 +12640,13 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Delete HLS files - Delete HLS files + حذف ملفات HLS src/app/+admin/overview/videos/video-list.component.ts108 src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts403 Delete Web Video files - Delete Web Video files + حذف ملفات فيديو الويب src/app/+admin/overview/videos/video-list.component.ts 114 @@ -12660,17 +12658,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Are you sure you want to delete this file? - Are you sure you want to delete this file? + هل أنت متأكد من أنك تريد حذف هذا الملف ؟ src/app/+admin/overview/videos/video-list.component.ts187 Delete file - Delete file + احذف ملف src/app/+admin/overview/videos/video-list.component.ts188 File removed. - File removed. + تمت إزالة الملف. src/app/+admin/overview/videos/video-list.component.ts194 @@ -12685,7 +12683,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Subtitles - Subtitles + ترجمات src/app/shared/shared-video-miniature/video-download.component.html 9 diff --git a/client/src/locale/angular.ca-ES.xlf b/client/src/locale/angular.ca-ES.xlf index 6f63fea34..27a153acb 100644 --- a/client/src/locale/angular.ca-ES.xlf +++ b/client/src/locale/angular.ca-ES.xlf @@ -9862,7 +9862,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -12927,67 +12927,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Like the video diff --git a/client/src/locale/angular.cs-CZ.xlf b/client/src/locale/angular.cs-CZ.xlf index 5ed6af840..22bd8e520 100644 --- a/client/src/locale/angular.cs-CZ.xlf +++ b/client/src/locale/angular.cs-CZ.xlf @@ -9792,7 +9792,7 @@ The link will expire within 1 hour. Odebírat účet - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTY @@ -12912,67 +12912,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Vstup/výstup na celoobrazovkový režim - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Přehrát / Zastavit video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Ztišit / zrušit ztišení videa - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Přeskočení na určitou část videa: 0 je 0 % a 9 je 90 % - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Zvýšit hlasitost - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Snížit hlasitost - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Procházení videa dopředu - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Procházení videa dozadu - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Zvýšení rychlosti přehrávání - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Snížení rychlosti přehrávání - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Přejít ve videu na předchozí snímek - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Přejít ve videu na další snímek - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Přepnutí režimu kina - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video To se mi líbí diff --git a/client/src/locale/angular.da-DK.xlf b/client/src/locale/angular.da-DK.xlf index ce37a90b9..98c1b0ca0 100644 --- a/client/src/locale/angular.da-DK.xlf +++ b/client/src/locale/angular.da-DK.xlf @@ -9228,7 +9228,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -12072,43 +12072,43 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreenEnter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the videoPlay/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the videoMute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90%Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volumeIncrease the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volumeDecrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forwardSeek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backwardSeek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rateIncrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rateDecrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frameNavigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frameNavigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater modeToggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 diff --git a/client/src/locale/angular.de-DE.xlf b/client/src/locale/angular.de-DE.xlf index 3cc4ab8c6..f2b85d6c6 100644 --- a/client/src/locale/angular.de-DE.xlf +++ b/client/src/locale/angular.de-DE.xlf @@ -9842,7 +9842,7 @@ Hilf mit PeerTube zu übersetzen! Diesen Account abonnieren - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS WIEDERGABELISTEN @@ -12950,67 +12950,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Vollbildmodus aufrufen/verlassen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Abspielen/Pausieren des Videos - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Video stummschalten/auf laut schalten - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Springe zu einem bestimmten Prozentsatz des Videos: 0 entspricht 0% und 9 entspricht 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Erhöhen der Lautstärke - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Verringern der Lautstärke - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Das Video vorwärts spulen - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Das Video rückwärts spulen - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Wiedergaberate erhöhen - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Wiedergaberate verringern - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Im Video zum vorherigen Frame navigieren - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Im Video zum nächsten Frame navigieren - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Kinomodus umschalten - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Das Video gefällt mir diff --git a/client/src/locale/angular.el-GR.xlf b/client/src/locale/angular.el-GR.xlf index 9157fb42f..8ebf22faf 100644 --- a/client/src/locale/angular.el-GR.xlf +++ b/client/src/locale/angular.el-GR.xlf @@ -10075,7 +10075,7 @@ The link will expire within 1 hour. Συνδρομή στον λογαριασμό - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -13217,67 +13217,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Σας αρέσει το βίντεο diff --git a/client/src/locale/angular.en-GB.xlf b/client/src/locale/angular.en-GB.xlf index e9bf35e05..f894bc3bb 100644 --- a/client/src/locale/angular.en-GB.xlf +++ b/client/src/locale/angular.en-GB.xlf @@ -8676,7 +8676,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTSPLAYLISTS src/app/+video-channels/video-channels.component.ts90 @@ -11365,43 +11365,43 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreenEnter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the videoPlay/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the videoMute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90%Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volumeIncrease the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volumeDecrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forwardSeek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backwardSeek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rateIncrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rateDecrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frameNavigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frameNavigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater modeToggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 diff --git a/client/src/locale/angular.en-US.xlf b/client/src/locale/angular.en-US.xlf index b9c08fa9f..57226e2aa 100644 --- a/client/src/locale/angular.en-US.xlf +++ b/client/src/locale/angular.en-US.xlf @@ -8339,7 +8339,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTSPLAYLISTS src/app/+video-channels/video-channels.component.ts90 @@ -10995,43 +10995,43 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreenEnter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the videoPlay/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the videoMute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90%Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volumeIncrease the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volumeDecrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forwardSeek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backwardSeek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rateIncrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rateDecrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frameNavigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frameNavigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater modeToggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 diff --git a/client/src/locale/angular.eo.xlf b/client/src/locale/angular.eo.xlf index c08b66a2a..309108bbd 100644 --- a/client/src/locale/angular.eo.xlf +++ b/client/src/locale/angular.eo.xlf @@ -9831,7 +9831,7 @@ The link will expire within 1 hour. Aboni la konton - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -12921,67 +12921,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Ŝati la filmon diff --git a/client/src/locale/angular.es-ES.xlf b/client/src/locale/angular.es-ES.xlf index 1dc234df9..774c1229b 100644 --- a/client/src/locale/angular.es-ES.xlf +++ b/client/src/locale/angular.es-ES.xlf @@ -9807,7 +9807,7 @@ The link will expire within 1 hour. Suscribirse a la cuenta - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS LISTAS DE REPRODUCCIÓN @@ -12896,67 +12896,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Entrar/salir de pantalla completa - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Reproducir/Pausar el video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Silenciar/activar sonido del video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Saltar a un porcentaje del video: 0 es 0% y 9 es 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Aumentar el volumen - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Disminuir el volumen - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Buscar el video adelante - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Buscar el video hacia atrás - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Aumentar la tasa de reproducción - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Disminuir la velocidad de reproducción - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navegar en el video al cuadro anterior - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navegar en el video al siguiente cuadro - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Alternar el modo teatro - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Colocar Me gusta a este vídeo diff --git a/client/src/locale/angular.eu-ES.xlf b/client/src/locale/angular.eu-ES.xlf index 5aa3d6418..9f9dd4fc5 100644 --- a/client/src/locale/angular.eu-ES.xlf +++ b/client/src/locale/angular.eu-ES.xlf @@ -184,7 +184,7 @@ published a new video: - (e)k bideo berria argitaratu du: + erabiltzaileak bideo berria argitaratu du: src/app/shared/shared-main/users/user-notifications.component.html16 @@ -194,12 +194,12 @@ Your video has been unblocked - Zure bideoa desblokeatua izan da + bideoa desblokeatua izan da src/app/shared/shared-main/users/user-notifications.component.html33 Your video has been blocked - Zure bideoa blokeatua izan da + bideoa blokeatua izan da src/app/shared/shared-main/users/user-notifications.component.html41 @@ -234,19 +234,12 @@ The recently added video has been automatically blocked - Berriki gehitutako bideoa automatikoki blokeatua izan da + Berriki gehitutako bideoa automatikoki blokeatua izan da src/app/shared/shared-main/users/user-notifications.component.html88 commented your video - - - - (e)k zure - - - bideoa iruzkindu du - + erabiltzaileak bideoan iruzkindu du src/app/shared/shared-main/users/user-notifications.component.html100 @@ -257,73 +250,42 @@ Your video has been published - Zure bideoa argitaratu da + bideoa argitaratu da src/app/shared/shared-main/users/user-notifications.component.html116 Your video import succeeded - - Zure bideoaren inportazioa - - ongi burutu da - + Bideoaren inportazioa osatu da src/app/shared/shared-main/users/user-notifications.component.html125 Your video import failed - - Zure bideoren inportazioak - - huts egin du - + Bideoaren inportazioak huts egin du src/app/shared/shared-main/users/user-notifications.component.html133 User registered on your instance - - - - erabiltzaileak izena eman du zure zerbitzarian - + erabiltzaileak izena eman du instantzian src/app/shared/shared-main/users/user-notifications.component.html140 is following your channel your account - - - - erabiltzaileak - zure kanala - - - zure kontua - jarraitzen ditu - + erabiltzailea honakoa jarraitzen du: zure kanala zure kontua src/app/shared/shared-main/users/user-notifications.component.html151 mentioned you on video - -k aipatu zaitu bideo honetan + erabiltzaileak aipatu zaitu bideo honetan: src/app/shared/shared-main/users/user-notifications.component.html165 Your instance has a new follower () awaiting your approval - Zure zerbitzariak - jarratzaile berria du - ( - ) - zure onartzearen zain - - + Instantziak jarraitzaile berri bat du () onarpenaren zain dagoena src/app/shared/shared-main/users/user-notifications.component.html181 Your instance automatically followed - Zure instantziak automatikoki jarraitu zuen - - - - + Instantziak automatikoki jarraitu du src/app/shared/shared-main/users/user-notifications.component.html190 @@ -383,7 +345,7 @@ Remove avatar - Ezabatu irudia + Kendu abatarra src/app/shared/shared-actor-image-edit/actor-avatar-edit.component.html26 @@ -424,7 +386,7 @@ Your report will be sent to moderators of and will be forwarded to the video origin () too. - Zure salaketa instantziako moderatzaileei bidaliko zaie, baita bideoaren jatorrira () ere. + Salaketa instantziako moderatzaileei bidaliko da eta bideoaren jatorrira ere birbideratuko da () ere. src/app/shared/shared-moderation/report-modals/video-report.component.html68 @@ -446,7 +408,7 @@ Display name - Pantaila-izena + Bistaratzeko izena src/app/+manage/video-channel-edit/video-channel-edit.component.html40 src/app/+manage/video-channel-edit/video-channel-edit.component.html40 src/app/+my-account/my-account-settings/my-account-profile/my-account-profile.component.html17 @@ -550,7 +512,7 @@ Report video "" - Salatu " " bideoa + Salatu "" bideoa src/app/shared/shared-moderation/report-modals/video-report.component.html3 @@ -581,7 +543,7 @@ {VAR_PLURAL, plural, =1 {1 view} other { views}} - {VAR_PLURAL, plural, =1 {ikustaldi bat} other { ikustaldi}} + {VAR_PLURAL, plural, =1 {Ikustaldi bat} other { ikustaldi}} src/app/shared/shared-video/video-views-counter.component.html3 @@ -639,7 +601,7 @@ Files were removed. - Fitxategiak ezabatuak izan dira. + Fitxategiak kendu dira. src/app/+admin/overview/videos/video-list.component.ts288 @@ -801,17 +763,17 @@ Do you really want to remove "" files? - Ziur zaude ""-ko fitxategiak ezabatu nahi dituzula? + Ziur zaude "" bideoaren fitxategiak kendu nahi dituzula? src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts277 Remove "" files - ""-ko fitxategiak ezabatu + Kendu "" bideoaren fitxategiak src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts279 Removed files of . - -ko ezabatutako fitxategiak. + bideoaren kendutako fitxategiak. src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts285 @@ -839,12 +801,7 @@ Remote subscribeRemote interact - - Urruneko harpidetza - - Urruneko interakzioa - - + Urruneko harpidetzaUrruneko elkarreragina src/app/shared/shared-user-subscription/remote-subscribe.component.html11 @@ -937,12 +894,7 @@ Unlimited ( per day) - - Unlimited - ( - eguneko) - - + Mugagabeko ( eguneko) src/app/shared/shared-instance/instance-features-table.component.html59 @@ -1073,7 +1025,7 @@ (max. size: ) - (max. size: ) + (gehieneko tamaina: ) src/app/helpers/utils/upload.ts43 @@ -1157,15 +1109,12 @@ Sorry but there was an issue with the external login process. Please contact an administrator. - Sentitzen dugu, baina arazo bat egon da kanpoko sarbidearekin. Mesedez - jarri harremanetan administradorearekin - . - + Barkatu, baina arazoren bat izan da kanpoko saio-hasieraren prozesuarekin. Jarri harremanetan administratzaile batekin. src/app/+login/login.component.html26 Request new verification email - Egiaztapen eposta berria eskatu + Eskatu baieztatze-mezua src/app/+login/login.component.html 33,35 @@ -1404,7 +1353,7 @@ The link will expire within 1 hour. You want to publish videos on ? Then you need to create your first channel. - -en bideoak argitaratu nahi dituzu? Orduan, zure lehen kanala sortu beharko duzu. + Bideoak argitaratu nahi dituzu instantzian? Orduan, zure lehen kanala sortu behar duzu lehenik. src/app/+signup/+register/steps/register-step-channel.component.html 2,4 @@ -1428,13 +1377,7 @@ The link will expire within 1 hour. Filters - - Iragazkiak - - - - - + Iragazkiak src/app/+search/search.component.html18 @@ -1461,7 +1404,7 @@ The link will expire within 1 hour. Administer documentation - Administer documentation + Kudeatu dokumentazioa src/app/modal/admin-welcome-modal.component.html21 @@ -1486,18 +1429,12 @@ The link will expire within 1 hour. Official PeerTube website (news, support, contribute...): https://joinpeertube.org - PeerTube-ren webgunea (berriak, laguntza, ekarpenak...): - https://joinpeertube.org - - + PeerTube-ren webgune ofiziala (albisteak, laguntza, lankidetza...): https://joinpeertube.org src/app/modal/admin-welcome-modal.component.html44 Put your instance on the public PeerTube index: https://instances.joinpeertube.org/instances - Jarri zure instantzia PeerTube -ren indize publikoan: - https://instances.joinpeertube.org/instances - - + Jarri zure instantzia PeerTube-ren aurkibide publikoan: https://instances.joinpeertube.org/instances src/app/modal/admin-welcome-modal.component.html47 @@ -1787,7 +1724,7 @@ The link will expire within 1 hour. allows to import multiple videos in parallel. ⚠️ Requires a PeerTube restart. - Hainbat bideo paraleloan inportatzea onartzen du. ⚠️ PeerTube berrabiarazi behar da. + hainbat bideo paraleloan inportatzea onartzen du. ⚠️ PeerTube berrabiarazi behar da. src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html278 @@ -2109,7 +2046,7 @@ The link will expire within 1 hour. Published date - Argitaratze data + Argitaratze-data src/app/+search/search-filters.component.html59 @@ -2544,9 +2481,7 @@ The link will expire within 1 hour. Schedule publication () - Programatutako argitaratzea ( - ) - + Programatu argitalpena () src/app/+videos/+video-edit/shared/video-edit.component.html129 @@ -2751,7 +2686,7 @@ The link will expire within 1 hour. Original publication date - Argitalpen data + Jatorrizko argitaratze-data src/app/+videos/+video-edit/shared/video-edit.component.html419 @@ -2849,11 +2784,7 @@ The link will expire within 1 hour. Congratulations, the video behind will be imported! You can already add information about this video. - - Zorionak, - helbideko bideoa inportatuko da! Bideoaren informazioa gehitzen hasi zaitezke jada. - - + Zorionak, helbideko bideoa inportatuko da. Bideo honen informazioa gehi dezakezu. src/app/+videos/+video-edit/video-add-components/video-import-url.component.html52 @@ -2896,9 +2827,7 @@ The link will expire within 1 hour. Image that will be merged with your audio file. The chosen image will be definitive and cannot be modified. - Audio-fitxategiarekin bat egingo duen irudia. - Aukeratutako irudia behin betikoa izango da, eta ezingo da aldatu. - + Audio-fitxategiarekin konbinatuko den irudia. Aukeratutako irudia erabatekoa izango da eta ezin da aldatu. src/app/+videos/+video-edit/video-add-components/video-upload.component.html36 @@ -3073,16 +3002,12 @@ The link will expire within 1 hour. Import - Inportatu - - + Inportatu src/app/+videos/+video-edit/video-add.component.html44 Upload - Igo - - + Igo src/app/+videos/+video-edit/video-add.component.html45 @@ -3345,9 +3270,7 @@ The link will expire within 1 hour. By - Nork - - + Honen eskutik: src/app/+videos/+video-watch/video-watch.component.html70 @@ -3408,7 +3331,7 @@ The link will expire within 1 hour. the sharing system used for this video implies that some technical information about your system (such as a public IP address) can be sent to other peers. - Bideo honetarako erabiltzen den partekatze-sistemak berekin dakar bere sistemari buruzko informazio tekniko jakin bat (IP helbide publiko bat, adibidez) beste kide batzuei bidali ahal izatea. + bideo honetarako erabiltzen den partekatze-sistemak berekin dakar bere sistemari buruzko informazio tekniko jakin bat (IP helbide publiko bat, adibidez) beste kide batzuei bidali ahal izatea. src/app/+videos/+video-watch/shared/information/privacy-concerns.component.html5 @@ -3537,7 +3460,7 @@ The link will expire within 1 hour. {VAR_PLURAL, plural, =1 {1 reply} other { replies}} - {VAR_PLURAL, plural, =1 {erantzun bat} other { erantzun}} + {VAR_PLURAL, plural, =1 {Erantzun bat} other { erantzun}} src/app/+videos/+video-watch/shared/comment/video-comments.component.html77 src/app/+videos/+video-watch/shared/comment/video-comments.component.html80 src/app/+videos/+video-watch/shared/comment/video-comments.component.html84 @@ -3685,7 +3608,7 @@ The link will expire within 1 hour. Your report will be sent to moderators of and will be forwarded to the comment origin () too. - Txostena instantziako moderatzaileei bidaliko zaie eta iruzkinaren jatorrira birbideratuko da ( ) ere . + Salaketa instantziako moderatzaileei bidaliko zaie iruzkinaren jatorrira birbideratuko da () ere. src/app/shared/shared-moderation/report-modals/report.component.html37 src/app/shared/shared-moderation/report-modals/report.component.html37 @@ -3759,10 +3682,7 @@ The link will expire within 1 hour. Created - - - (e)an sortuta - + sortu da src/app/+admin/follows/followers-list/followers-list.component.html38 src/app/+admin/follows/following-list/following-list.component.html42 src/app/+admin/system/jobs/jobs.component.html50 @@ -3821,7 +3741,7 @@ The link will expire within 1 hour. Redundancy allowed - Erredundantzia onartuta + Erredundantzia onartu da src/app/+admin/follows/following-list/following-list.component.html43 @@ -3838,7 +3758,7 @@ The link will expire within 1 hour. Your instance is not following anyone. - Zure instantziak ez du besterik jarraitzen + Instantziak ez dio inori jarraitzen. src/app/+admin/follows/following-list/following-list.component.html84 @@ -4082,7 +4002,7 @@ The link will expire within 1 hour. Video - Bideoa + Bideoa src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.html32 src/app/+admin/moderation/video-block-list/video-block-list.component.html29 @@ -4139,10 +4059,7 @@ The link will expire within 1 hour. Date - Data - - - + Data src/app/+admin/moderation/video-block-list/video-block-list.component.html32 src/app/+admin/overview/comments/video-comment-list.component.html49 @@ -4229,12 +4146,12 @@ The link will expire within 1 hour. No abuses found matching current filters. - Ez da aurkitu uneko iragazkiekin bat datorren abusurik. + Ez da aurkitu uneko iragazkiekin bat datorren irainik. src/app/shared/shared-abuse-list/abuse-list-table.component.html157 No abuses found. - Ez da aurkitu abusurik. + Ez da aurkitu irainik. src/app/shared/shared-abuse-list/abuse-list-table.component.html158 @@ -4357,7 +4274,7 @@ The link will expire within 1 hour. by on - Izena: Non: + honen eskutik: data honetan: src/app/shared/shared-abuse-list/abuse-list-table.component.html89 @@ -4382,10 +4299,7 @@ The link will expire within 1 hour. State - State - - - + Egoera src/app/+admin/follows/followers-list/followers-list.component.html36 src/app/+admin/follows/following-list/following-list.component.html41 src/app/+admin/moderation/registration-list/registration-list.component.html44 @@ -4415,7 +4329,7 @@ The link will expire within 1 hour. {VAR_PLURAL, plural, =1 {1 report} other { reports}} - {VAR_PLURAL, plural, =1 {txosten bat} other { txosten}} + {VAR_PLURAL, plural, =1 {Txosten bat} other { txosten}} src/app/shared/shared-abuse-list/abuse-details.component.html22 src/app/shared/shared-abuse-list/abuse-details.component.html43 @@ -4440,7 +4354,7 @@ The link will expire within 1 hour. Muted at - Mutututa hemen: + Mutututa hemen: src/app/shared/shared-moderation/account-blocklist.component.html24 src/app/shared/shared-moderation/account-blocklist.component.html24 src/app/shared/shared-moderation/server-blocklist.component.html32 @@ -4639,7 +4553,7 @@ The link will expire within 1 hour. This does not have settings. - osagarriak ez du ezarpenik. + osagarriak ez du ezarpenik. src/app/+admin/plugins/plugin-show-installed/plugin-show-installed.component.html16 @@ -4788,17 +4702,17 @@ The link will expire within 1 hour. No jobs found. - Ez da aurkitu lanik. + Ez da aurkitu lanik. src/app/+admin/system/jobs/jobs.component.html106 No jobs found. - Ez da aurkitu lanik. + Ez da aurkitu lanik. src/app/+admin/system/jobs/jobs.component.html110 No jobs found that are . - Ez da aurkitu den lanik. + Ez da aurkitu den lanik. src/app/+admin/system/jobs/jobs.component.html111 @@ -4925,7 +4839,7 @@ The link will expire within 1 hour. Enabling it will allow other administrators to know that you are mainly federating sensitive content. Moreover, the NSFW checkbox on video upload will be automatically checked by default. - Enabling it will allow other administrators to know that you are mainly federating sensitive content. Moreover, the NSFW checkbox on video upload will be automatically checked by default. + Gaitzean, beste administratzalieek nagusiki eduki hunkigarria federatzen duzula jakingo dute. Gainera, bideoaren kargatze-orriko NSFW kontrol-laukia automatikoki markatuko da lehenespenez. src/app/+admin/config/edit-custom-config/edit-instance-information.component.html 93,96 @@ -5060,7 +4974,7 @@ The link will expire within 1 hour. Default trending page - Pil-pilean dauden bideoen orri lehenetsia + Joeran atalaren orri lehenetsia src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html43 @@ -5070,12 +4984,12 @@ The link will expire within 1 hour. Recent views - Berriki ikusitakoak + Azken ikustaldiak src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html48 Most liked videos - Gehien atsegin diren bideoak + Bideo gustokoenak src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html49 @@ -5145,7 +5059,7 @@ The link will expire within 1 hour. Signup requires email verification - Izena emateko eposta helbidea baieztatu behar da + Izena emateko helbide elektronikoa baieztatu behar da src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html181 @@ -5480,7 +5394,7 @@ The link will expire within 1 hour. If your instance is explicitly allowed by Twitter/X, a video player will be embedded in the Twitter feed on PeerTube video share. If the instance is not, we use an image link card that will redirect to your PeerTube instance. Check this checkbox, save the configuration and test with a video URL of your instance (https://example.com/w/blabla) on https://cards-dev.twitter.com/validator to see if you instance is allowed. - If your instance is explicitly allowed by Twitter/X, a video player will be embedded in the Twitter feed on PeerTube video share. If the instance is not, we use an image link card that will redirect to your PeerTube instance. Check this checkbox, save the configuration and test with a video URL of your instance (https://example.com/w/blabla) on https://cards-dev.twitter.com/validator to see if you instance is allowed. + Instantzia Twitter/X sare sozialak esplizituki onartzen badu, bideo-erreproduzitzaile bat txertatuko da Twitter-eko jarioan PeerTube-ko bideoa partekatzean. Hala ez bada, irudi baten esteka-txartel bat erabiltzen dugu PeerTube-ko instantziara birbideratuko duena. Markatu kontrol-lauki hau, gorde konfigurazioa eta probatu instanziako bideo baten URLarekin (https://adibidea.eus/w/blabla) https://cards-dev.twitter.com/validator helbidean, instantzia onartzen den ikusteko. src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html 614,623 @@ -5499,7 +5413,7 @@ The link will expire within 1 hour. ⚠️ Enabling live streaming requires trust in your users and extra moderation work - ⚠️ Zuzeneko igorpenak erabiltzaileengan konfidantza eta moderazio-lan gehigarria behar ditu. + ⚠️ Zuzeneko igorpenak erabiltzaileengan konfidantza eta moderazio-lan gehigarria behar ditu src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html22 @@ -5553,12 +5467,12 @@ The link will expire within 1 hour. will claim at most with VOD transcoding - will claim at most with VOD transcoding + gehienez eskatuko ditu VOD-ren transkodetzearekin src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html166 will claim at least with VOD transcoding - will claim at least with VOD transcoding + gutxienez eskatuko ditu VOD-ren transkodetzearekin src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html170 @@ -5606,7 +5520,7 @@ The link will expire within 1 hour. Use remote runners to process live transcoding. Remote runners has to register on your instance first. - Use remote runners to process live transcoding. Remote runners has to register on your instance first. + Erabili urruneko exekutatzaileak zuzeneko transkodetzea prozesatzeko. Urruneko exekutatzaileak instantzian erregistratu behar dira lehenik. src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html154 @@ -5628,7 +5542,7 @@ The link will expire within 1 hour. Same as VOD transcoding, transcoding live streams so that they are in a streamable form that any device can play. Requires a beefy CPU, and then some. - Same as VOD transcoding, transcoding live streams so that they are in a streamable form that any device can play. Requires a beefy CPU, and then some. + VOD-ren transkodetzearen antzera, zuzeneko transkodetzeen igorpenek edozein gailuk erreproduzi dezakeen igortzeko moduko moduan daude. CPU boteretsu bat behar du eta zerbait gehiago. src/app/+admin/config/edit-custom-config/edit-live-configuration.component.html93 @@ -5653,7 +5567,7 @@ The link will expire within 1 hour. Allows users to upload videos with additional extensions than .mp4, .ogv and .webm (for example: .avi, .mov, .mkv etc). - Baimendu erabiltzaileei .mp4, .ogv eta .webm bezalakoak diren luzapen gehigarriekin bideoak igotzea (adibidez: .avi, .mov, .mkv etab.) + Baimendu erabiltzaileei .mp4, .ogv eta .webm bezalakoak diren luzapen gehigarriekin bideoak igotzea (adibidez: .avi, .mov, .mkv etab.). src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html49 @@ -5687,7 +5601,7 @@ The link will expire within 1 hour. If you also enabled HLS support, it will multiply videos storage by 2 - HLS-ren bateragarritasuna ere gaitu baduzu, bideoen biltegiratzea bitan bidertuko da. + HLS-ren bateragarritasuna ere gaitu baduzu, bideoen biltegiratzea bitan bidertuko da src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html78 @@ -5733,12 +5647,12 @@ The link will expire within 1 hour. will claim at most with live transcoding - will claim at most with live transcoding + gehienez eskatuko ditu zuzeneko transkodetzearekin src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html162 will claim at least with live transcoding - will claim at least with live transcoding + gutxienez eskatuko ditu zuzeneko transkodetzearekin src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html166 @@ -5748,7 +5662,7 @@ The link will expire within 1 hour. allows to transcode multiple files in parallel. ⚠️ Requires a PeerTube restart - allows to transcode multiple files in parallel. ⚠️ Requires a PeerTube restart + hainbat fitxategi paraleloan transkodetzea onartzen du. ⚠️ PeerTube berrabiarazi behar da src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html183 @@ -5758,7 +5672,7 @@ The link will expire within 1 hour. new transcoding profiles can be added by PeerTube plugins - new transcoding profiles can be added by PeerTube plugins + transkodetze-profil berriak PeerTube-ren osagarriek gehi ditzakete src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html195 @@ -5851,7 +5765,7 @@ The link will expire within 1 hour. Number of video storyboard images to keep in cache - Number of video storyboard images to keep in cache + Cachean mantenduko den bideoaren gidoi grafikoaren irudien kopurua src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html 57 @@ -5859,7 +5773,7 @@ The link will expire within 1 hour. {VAR_PLURAL, plural, =1 {cached storyboard} other {cached storyboards}} - {VAR_PLURAL, plural, =1 {cached storyboard} other {cached storyboards}} + {VAR_PLURAL, plural, =1 {gidoi grafiko cachean} other {gidoi grafiko cachean}} src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html 64 @@ -5872,7 +5786,7 @@ The link will expire within 1 hour. Slight modifications to your PeerTube instance for when creating a plugin or theme is overkill. - Slight modifications to your PeerTube instance for when creating a plugin or theme is overkill. + PeerTube instantzian eginiko aldaketa txikiak plugin bat sortzean edo gaia gehiegizkoa denean. src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html78 @@ -5882,7 +5796,7 @@ The link will expire within 1 hour. Write JavaScript code directly. Example:console.log('my instance is amazing'); - Write JavaScript code directly. Example:console.log('my instance is amazing'); + Idatzi JavaScript kodea zuzenean. Adibidea:console.log('nire instantzia liluragarria da'); src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html 91,92 @@ -5896,13 +5810,7 @@ The link will expire within 1 hour. color: red; - Write CSS code directly. Example:#custom-css - color: red; - -Prepend with #custom-css to override styles. Example:#custom-css .logged-in-email - color: red; - - + Idatzi CSS kodea zuzenean. Adibidea:#custom-css color: red; Hasi honekin: #custom-css estiloak gainidazteko. Adibidea:#custom-css .logged-in-email color: red; src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.html 111,122 @@ -5966,7 +5874,7 @@ The link will expire within 1 hour. Two factor authentication adds an additional layer of security to your account by requiring a numeric code from another device (most commonly mobile phones) when you log in. - Two factor authentication adds an additional layer of security to your account by requiring a numeric code from another device (most commonly mobile phones) when you log in. + Bi faktoreko autentifikazioak segurtasun-geruza gehigarri bat gehitzen dio kontuari, beste gailuko zenbakizko kode bat eskatuaz (askotan, telefono mugikorrak) saioa hastean. src/app/+my-account/my-account-settings/my-account-two-factor/my-account-two-factor-button.component.html 3,5 @@ -6060,27 +5968,27 @@ The link will expire within 1 hour. Average frame rate - Average frame rate + Batezbesteko fotograma-abiadura src/app/shared/shared-video-miniature/video-download.component.ts259 Pixel format - Pixel format + Pixel formatua src/app/shared/shared-video-miniature/video-download.component.ts260 Sample rate - Sample rate + Laginketaren maiztasuna src/app/shared/shared-video-miniature/video-download.component.ts264 Channel Layout - Channel Layout + Kanalaren diseinua src/app/shared/shared-video-miniature/video-download.component.ts265 Update your settings - Update your settings + Eguneratu ezarpenak src/app/shared/shared-video-miniature/video-filters-header.component.html 2,7 @@ -6088,7 +5996,7 @@ The link will expire within 1 hour. More filters - More filters + Iragazki gehiago src/app/shared/shared-video-miniature/video-filters-header.component.html 20 @@ -6096,7 +6004,7 @@ The link will expire within 1 hour. Hide filters - Hide filters + Ezkutatu iragazkiak src/app/shared/shared-video-miniature/video-filters-header.component.html 21 @@ -6104,52 +6012,52 @@ The link will expire within 1 hour. Sort by "Recently Added" - Sort by "Recently Added" + Ordenatu "Berriki gehituak" atalaren arabera src/app/shared/shared-video-miniature/video-filters-header.component.html47 Sort by "Original Publication Date" - Sort by "Original Publication Date" + Ordenatu "Jatorrizko argitaratze-data" irizpidearen arabera src/app/shared/shared-video-miniature/video-filters-header.component.html48 Sort by "Name" - Sort by "Name" + Ordenatu "Izena" irizpidearen arabera src/app/shared/shared-video-miniature/video-filters-header.component.html50 Sort by "Recent Views" - Sort by "Recent Views" + Ordenatu "Azken ikustaldiak" irizpidearen arabera src/app/shared/shared-video-miniature/video-filters-header.component.html51 Sort by "Hot" - Sort by "Hot" + Ordenatu "Pil-pilean" irizpidearen arabera src/app/shared/shared-video-miniature/video-filters-header.component.html52 Sort by "Likes" - Sort by "Likes" + Ordenatu "Datsegiteak" irizpidearen arabera src/app/shared/shared-video-miniature/video-filters-header.component.html53 Sort by "Global Views" - Sort by "Global Views" + Ordenatu "Ikustaldi orokorrak" irizpidearen arabera src/app/shared/shared-video-miniature/video-filters-header.component.html54 Languages: - Languages: + Hizkuntzak: src/app/shared/shared-video-miniature/video-filters-header.component.html62 Sensitive content: - Sensitive content: + Eduki hunkigarria: src/app/shared/shared-video-miniature/video-filters-header.component.html69 Scope: - Scope: + Irismena: src/app/shared/shared-video-miniature/video-filters-header.component.html84 @@ -6159,32 +6067,32 @@ The link will expire within 1 hour. Federated videos (this instance + followed instances) - Federated videos (this instance + followed instances) + Federatutako bideoak (instantzia hau + jarraitutako instantziak) src/app/shared/shared-video-miniature/video-filters-header.component.html93 Type: - Type: + Mota: src/app/shared/shared-video-miniature/video-filters-header.component.html98 VOD & Live videos - VOD & Live videos + VOD & zuzeneko bideoak src/app/shared/shared-video-miniature/video-filters-header.component.html102 Categories: - Categories: + Kategoriak: src/app/shared/shared-video-miniature/video-filters-header.component.html117 Moderation: - Moderation: + Moderazioa: src/app/shared/shared-video-miniature/video-filters-header.component.html123 Display all videos (private, unlisted, password protected or not yet published) - Display all videos (private, unlisted, password protected or not yet published) + Bistaratu bideo guztiak (pribatuak, zerrendatu gabeak, pasahitzaz babestutakoak edo oraindik argitaratu gabeak) src/app/shared/shared-video-miniature/video-filters-header.component.html 128 @@ -6220,45 +6128,45 @@ The link will expire within 1 hour. With Hide or Blur thumbnails, a confirmation will be requested to watch the video. - With Hide or Blur thumbnails, a confirmation will be requested to watch the video. + Ezkutatu or Lausotu miniaturak aukerekin, berresteko eskatuko da bideoa ikusteko. src/app/+admin/config/edit-custom-config/edit-instance-information.component.html106 src/app/shared/shared-user-settings/user-video-settings.component.html7 Policy for sensitive videos - Policy for sensitive videos + Bideo hunkigarrien gidalerroa src/app/+admin/config/edit-custom-config/edit-instance-information.component.html114 src/app/shared/shared-user-settings/user-video-settings.component.html15 Only display videos in the following languages/subtitles - Only display videos in the following languages/subtitles + Bistaratu bideoak soilik hurrengo hizkuntzatan edo azpitituluekin src/app/shared/shared-user-settings/user-video-settings.component.html25 In Recently added, Trending, Local, Most liked and Search pages - In Recently added, Trending, Local, Most liked and Search pages + Berriki gehitutakoak, Joeran, Lokala, Bideo gustokoenak eta Bilatu orrietan src/app/shared/shared-user-settings/user-video-settings.component.html28 Add a new language - Add a new language + Gehitu hizkuntza berri bat src/app/+admin/config/edit-custom-config/edit-instance-information.component.html68 src/app/shared/shared-forms/select/select-languages.component.html6 New email - New email + Helbide elektroniko berria src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.html19 Change email - Change email + Aldatu helbide elektronikoa src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.html34 Theme - Theme + Gaia src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html14 src/app/shared/shared-user-settings/user-interface-settings.component.html4 @@ -6269,27 +6177,27 @@ The link will expire within 1 hour. Last published first - Last published first + Azkenekoz argitaratutakoa lehenik src/app/+my-library/my-videos/my-videos.component.html27 Last created first - Last created first + Azkenekoz sortutakoa lehenik src/app/+my-library/my-videos/my-videos.component.html28 Most viewed first - Most viewed first + Gehien ikusitakoa lehenik src/app/+my-library/my-videos/my-videos.component.html29 Most liked first - Most liked first + Gustokoena lehenik src/app/+my-library/my-videos/my-videos.component.html30 Longest first - Longest first + Luzeena lehenik src/app/+my-library/my-videos/my-videos.component.html31 @@ -6299,7 +6207,7 @@ The link will expire within 1 hour. Select a channel to receive the video - Select a channel to receive the video + Hautatu kanal bat bideoa jasotzeko src/app/+my-library/my-ownership/my-accept-ownership/my-accept-ownership.component.html12 @@ -6314,11 +6222,7 @@ The link will expire within 1 hour. Created - - - sortua - - + sortu da src/app/+my-library/my-ownership/my-ownership.component.html15 @@ -6339,7 +6243,7 @@ The link will expire within 1 hour. ⚠️ The instance doesn't allow channel synchronization - ⚠️ The instance doesn't allow channel synchronization + ⚠️ Instantziak ez du onartzen kanalen sinkronizazioa src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.html 9 @@ -6347,52 +6251,52 @@ The link will expire within 1 hour. Add synchronization - Add synchronization + Gehitu sinkronizazioa src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.html24 External Channel - External Channel + Kanpoko kanala src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.html35 Channel - Channel + Kanala src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.html36 Last synchronization at - Last synchronization at + Azken sinkronizazioa: src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.html39 List imports - List imports + Zerrendatu inportazioak src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts48 Fully synchronize the channel - Fully synchronize the channel + Sinkronizatu guztiz kanala src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts61 This fetches any missing videos on the local channel - This fetches any missing videos on the local channel + Honek falta den edozein bideo lortzen du kanal lokalean src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts62 Synchronization removed successfully for . - Synchronization removed successfully for . + Sinkronizazioa kendu da kanalerako. src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts101 Full synchronization requested successfully for . - Full synchronization requested successfully for . + Guztizko sinkronizazioa eskatu da kanalerako. src/app/+my-library/my-video-channel-syncs/my-video-channel-syncs.component.ts114 NEW SYNCHRONIZATION - NEW SYNCHRONIZATION + SINKRONIZAZIO BERRIA src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html 8 @@ -6400,7 +6304,7 @@ The link will expire within 1 hour. Remote channel URL - Remote channel URL + Urruneko kanalaren URLa src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html 13 @@ -6408,7 +6312,7 @@ The link will expire within 1 hour. Example: https://youtube.com/channel/UC_fancy_channel - Example: https://youtube.com/channel/UC_fancy_channel + Adibidea: https://youtube.com/channel/kanal_dotorearen_izena src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html 20 @@ -6416,7 +6320,7 @@ The link will expire within 1 hour. Video Channel - Video Channel + Bideo-kanala src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html 33 @@ -6424,7 +6328,7 @@ The link will expire within 1 hour. Options for existing videos on remote channel: - Options for existing videos on remote channel: + Urruneko kanalean dauden bideoen aukerak: src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html 42 @@ -6432,7 +6336,7 @@ The link will expire within 1 hour. Import all and watch for new publications - Import all and watch for new publications + Inportatu denak eta argitaratze berrien jakinaren gainean egon src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html 46 @@ -6440,7 +6344,7 @@ The link will expire within 1 hour. Only watch for new publications - Only watch for new publications + Soilik argitaratze berrien jakinaren gainean egon src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.html 51 @@ -6448,7 +6352,7 @@ The link will expire within 1 hour. Synchronization created successfully. - Synchronization created successfully. + Sinkronizazioa sortu da. src/app/+my-library/my-video-channel-syncs/video-channel-sync-edit/video-channel-sync-edit.component.ts 67 @@ -6461,7 +6365,7 @@ The link will expire within 1 hour. Two factor authentication - Two factor authentication + Bi faktoreko autentifikazioa src/app/+my-account/my-account-routing.module.ts 39 @@ -6478,18 +6382,18 @@ The link will expire within 1 hour. My imports - My imports + Nire inportazioak src/app/+my-library/my-video-imports/my-video-imports.component.html4 src/app/+my-library/my-videos/my-videos.component.html11 Create video channel - Create video channel + Sortu bideo-kanala src/app/+my-library/+my-video-channels/my-video-channels.component.html23 No channel found. - No channel found. + Ez da aurkitu kanalik. src/app/+my-library/+my-video-channels/my-video-channels.component.html27 @@ -6500,13 +6404,13 @@ The link will expire within 1 hour. CHANNEL - CHANNEL + KANALA src/app/+manage/video-channel-edit/video-channel-edit.component.html9 src/app/+manage/video-channel-edit/video-channel-edit.component.html9 Overwrite support field of all videos of this channel - Overwrite support field of all videos of this channel + Gainidatzi kanal honetako bideo guztien laguntza-eremua src/app/+manage/video-channel-edit/video-channel-edit.component.html77 src/app/+manage/video-channel-edit/video-channel-edit.component.html77 @@ -6521,7 +6425,7 @@ The link will expire within 1 hour. Upload a new avatar - Upload a new avatar + Igo abatar berria src/app/shared/shared-actor-image-edit/actor-avatar-edit.component.html7 src/app/shared/shared-actor-image-edit/actor-avatar-edit.component.html20 @@ -6532,12 +6436,12 @@ The link will expire within 1 hour. This video was deleted - This video was deleted + Bideo hau ezabatu da src/app/+my-library/my-video-imports/my-video-imports.component.html60 Once you delete your account, there is no going back. You will be asked to confirm this action. - Once you delete your account, there is no going back. You will be asked to confirm this action. + Behin kontua ezabatuta, ezin da atzera egin. Ekintza hau berresteko eskatuko zaizu. src/app/+my-account/my-account-settings/my-account-danger-zone/my-account-danger-zone.component.html2 @@ -6550,14 +6454,12 @@ The link will expire within 1 hour. {VAR_PLURAL, plural, =0 {No views} =1 {1 view} other { views}} - {VAR_PLURAL, plural, =0 {No views} =1 {1 view} other { views}} + {VAR_PLURAL, plural, =0 {Ikustaldirik ez} =1 {Ikustaldi bat} other { ikustaldi}} src/app/+my-library/+my-video-channels/my-video-channels.component.html49 Created by - - (e)k sortuta - + Honek sortua: src/app/+my-library/my-follows/my-subscriptions.component.html28 @@ -6572,12 +6474,12 @@ The link will expire within 1 hour. Delete from history - Delete from history + Ezabatu historiatik src/app/+my-library/my-history/my-history.component.html37 Video history is enabled - Video history is enabled + Bideoen historia gaituta dago src/app/+my-library/my-history/my-history.component.ts 96,95 @@ -6585,7 +6487,7 @@ The link will expire within 1 hour. Video history is disabled - Video history is disabled + Bideoen historia desgaituta dago src/app/+my-library/my-history/my-history.component.ts 97,95 @@ -6593,7 +6495,7 @@ The link will expire within 1 hour. Delete video history - Delete video history + Ezabatu bideoen historia src/app/+my-library/my-history/my-history.component.ts 120 @@ -6601,7 +6503,7 @@ The link will expire within 1 hour. Are you sure you want to delete all your video history? - Are you sure you want to delete all your video history? + Ziur bideoen historia osoa ezabatu nahi duzula? src/app/+my-library/my-history/my-history.component.ts 121 @@ -6609,7 +6511,7 @@ The link will expire within 1 hour. Video history deleted - Video history deleted + Bideoen historia ezabatu da src/app/+my-library/my-history/my-history.component.ts 129 @@ -6617,7 +6519,7 @@ The link will expire within 1 hour. No videos found for "". - No videos found for "". + Ez aurkitu bideorik "" bilaketarako. src/app/+my-library/my-history/my-history.component.ts 140 @@ -6625,12 +6527,12 @@ The link will expire within 1 hour. Open syndication dropdown - Open syndication dropdown + Ireki sindikatze-goitibeherako menua src/app/shared/shared-main/feeds/feed.component.html5 Some of your channels are not fully set up. Make them welcoming and explicit about what you publish by adding a banner, an avatar and a description. - Some of your channels are not fully set up. Make them welcoming and explicit about what you publish by adding a banner, an avatar and a description. + Kanaletako batzuk guztiz konfiguratu gabe daude. Egin itzazu abegitsu eta esplizitu argitaratuko duzunaren inguruan, honakoa hauek gehituz: bannerra, abatarra eta azalpena. src/app/shared/shared-main/misc/channels-setup-message.component.html 5 @@ -6638,7 +6540,7 @@ The link will expire within 1 hour. Set up my channels - Set up my channels + Konfiguratu nire kanalak src/app/shared/shared-main/misc/channels-setup-message.component.html 6 @@ -6646,22 +6548,22 @@ The link will expire within 1 hour. Newest first - Newest first + Berrienak lehenik src/app/+my-account/my-account-notifications/my-account-notifications.component.html12 Unread first - Unread first + Irakurri gabekoak lehenik src/app/+my-account/my-account-notifications/my-account-notifications.component.html13 All read - All read + Denak irakurrita src/app/+my-account/my-account-notifications/my-account-notifications.component.html27 Web - Web + Web src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.html5 @@ -6689,12 +6591,12 @@ The link will expire within 1 hour. My video channels - My video channels + Nire bideo-kanalak src/app/+my-library/+my-video-channels/my-video-channels-routing.module.ts11 Create a new video channel - Create a new video channel + Sortu bideo-kanal berri bat src/app/+manage/manage-routing.module.ts12 @@ -6715,26 +6617,18 @@ The link will expire within 1 hour. See the documentation for more information. - - See the - documentation - for more information. - - + Ikusi dokumentazioa informazio gehiagorako. src/app/+my-library/my-video-playlists/my-video-playlist-elements.component.html31 If you need help to use PeerTube, you can have a look at the documentation. - If you need help to use PeerTube, you can have a look at the - documentation - . - + PeerTube erabiltzeko laguntza behar baduzu, dokumentazioa ikus dezakezu. src/app/+signup/shared/signup-success-after-email.component.html17 src/app/+signup/shared/signup-success-before-email.component.html31 Account request sent - Account request sent + Kontuaren eskaera bidali da src/app/+signup/shared/signup-success-before-email.component.html 3 @@ -6742,22 +6636,22 @@ The link will expire within 1 hour. Video stats - Video stats + Bideo-estatistikak src/app/+stats/stats-routing.module.ts14 You can select a part of the graph to zoom in - You can select a part of the graph to zoom in + Grafikoaren zati bat hauta dezakezu handiagotzeko src/app/+stats/video/video-stats.component.html58 Reset zoom - Reset zoom + Leheneratu zoom-a src/app/+stats/video/video-stats.component.html60 Since the video publication - Since the video publication + Bideoaren argitaratzetik src/app/+stats/video/video-stats.component.ts 63 @@ -6765,7 +6659,7 @@ The link will expire within 1 hour. Viewers - Viewers + Ikusleak src/app/+stats/video/video-stats.component.ts88 src/app/+stats/video/video-stats.component.ts500 @@ -6776,22 +6670,22 @@ The link will expire within 1 hour. Retention - Retention + Atxikitzea src/app/+stats/video/video-stats.component.ts106 Viewers stats between and - Viewers stats between and + Ikusleen estatistikak eta daten artean src/app/+stats/video/video-stats.component.ts153 Viewers stats - Viewers stats + Ikusleen estatistikak src/app/+stats/video/video-stats.component.ts156 Live as of - Live as of + Zuzenean data honetatik aurrera: src/app/+stats/video/video-stats.component.ts 227 @@ -6799,7 +6693,7 @@ The link will expire within 1 hour. Custom dates - Custom dates + Data pertsonalizatuak src/app/+stats/video/video-stats.component.ts238 @@ -6809,13 +6703,13 @@ The link will expire within 1 hour. Countries - Countries + Herrialdeak src/app/+stats/video/video-stats.component.ts98 src/app/+stats/video/video-stats.component.ts289 Likes - Likes + Datsegiteak src/app/+stats/video/video-stats.component.ts260 @@ -6830,17 +6724,17 @@ The link will expire within 1 hour. Peak viewers - Peak viewers + Gehieneko ikusleak src/app/+stats/video/video-stats.component.ts275 at - at + data honetan: src/app/+stats/video/video-stats.component.ts278 Unique viewers - Unique viewers + Ikusle bakarrak src/app/+stats/video/video-stats.component.ts 282 @@ -6853,7 +6747,7 @@ The link will expire within 1 hour. {VAR_PLURAL, plural, =1 {1 playlist} other { playlists}} - {VAR_PLURAL, plural, =1 {zerrenda bat} other { zerrenda}} + {VAR_PLURAL, plural, =1 {Zerrenda bat} other { zerrenda}} src/app/+video-channels/video-channel-playlists/video-channel-playlists.component.html 3 @@ -6861,12 +6755,12 @@ The link will expire within 1 hour. An error occurred. - An error occurred. + Errore bat gertatu da. src/app/+signup/+verify-account/verify-account-email/verify-account-email.component.html13 Request a new verification email - Request a new verification email + Eskatu baieztatze-mezu berria src/app/+signup/+verify-account/verify-account-email/verify-account-email.component.html 15,17 @@ -6874,7 +6768,7 @@ The link will expire within 1 hour. Unable to find verification string in URL query. - Unable to find verification string in URL query. + Ezin da aurkitu baieztaze-katea URLaren kontsultan. src/app/+signup/+verify-account/verify-account-email/verify-account-email.component.ts 53 @@ -6882,7 +6776,7 @@ The link will expire within 1 hour. Unable to find user id or registration id in URL query. - Unable to find user id or registration id in URL query. + Ezin da aurkitu erabiltzailearen IDa edo izen-ematearen IDa URLaren kontsultan. src/app/+signup/+verify-account/verify-account-email/verify-account-email.component.ts 58 @@ -6890,7 +6784,7 @@ The link will expire within 1 hour. Video channel videos - Video channel videos + Bideo-kanaleko bideoak src/app/+video-channels/video-channels-routing.module.ts22 @@ -6900,27 +6794,27 @@ The link will expire within 1 hour. Manage channel - Manage channel + Kudeatu kanala src/app/+video-channels/video-channels.component.html9 Send verification email - Bidali eposta egiaztaketa + Bidali baieztatze-mezua src/app/+signup/+verify-account/verify-account-ask-send-email/verify-account-ask-send-email.component.html16 This instance does not require email verification. - Instantzia honek ez du eposta egiaztaketa eskatzen + Instantzia honek ez du posta elektroniko bidezko baieztapena eskatzen. src/app/+signup/+verify-account/verify-account-ask-send-email/verify-account-ask-send-email.component.html20 Verify account via email - Verify account via email + Baieztatu kontua posta elektroniko bidez src/app/+signup/+verify-account/verify-account-routing.module.ts15 Ask to send an email to verify your account - Ask to send an email to verify your account + Eskatu kontua baieztatzeko mezu elektroniko bat bidaltzea src/app/+signup/+verify-account/verify-account-routing.module.ts 24 @@ -6928,7 +6822,7 @@ The link will expire within 1 hour. Email verified! - Email verified! + Helbide elektronikoa baieztatu da. src/app/+signup/shared/signup-success-after-email.component.html 2 @@ -6936,7 +6830,7 @@ The link will expire within 1 hour. Your email has been verified and your account request has been sent! - Your email has been verified and your account request has been sent! + Helbide elektronikoa baieztatu da eta kontuaren eskaera bidali da. src/app/+signup/shared/signup-success-after-email.component.html 7 @@ -6944,7 +6838,7 @@ The link will expire within 1 hour. A moderator will check your registration request soon and you'll receive an email when it will be accepted or rejected. - A moderator will check your registration request soon and you'll receive an email when it will be accepted or rejected. + Moderatzaile batek izen-ematearen eskaera egiaztatuko du laster eta mezu elektroniko bat jasoko duzu onartzen edo ukatzen denean. src/app/+signup/shared/signup-success-after-email.component.html 9,11 @@ -6956,7 +6850,7 @@ The link will expire within 1 hour. Your email has been verified and your account has been created! - Your email has been verified and your account has been created! + Helbide elektronikoa baieztatu da eta kontua sortu da. src/app/+signup/shared/signup-success-after-email.component.html 15 @@ -6964,12 +6858,12 @@ The link will expire within 1 hour. Welcomeon - Welcomeon + Ongi etorri instantziara src/app/+signup/shared/signup-success-before-email.component.html7 Your account request has been sent! - Your account request has been sent! + Kontuaren eskaera bidali da. src/app/+signup/shared/signup-success-before-email.component.html 13 @@ -6982,7 +6876,7 @@ The link will expire within 1 hour. Check your emails to validate your account and complete your registration request. - Check your emails to validate your account and complete your registration request. + Begiratu zure mezu elektronikoak kontua baieztatzeko eta izen-ematearen eskaera osatzeko. src/app/+signup/shared/signup-success-before-email.component.html 18,19 @@ -6990,7 +6884,7 @@ The link will expire within 1 hour. Check your emails to validate your account and complete your registration. - Check your emails to validate your account and complete your registration. + Egiaztatu zure mezu elektronikoak kontua baieztatzeko eta izen-ematearen eskaera osatzeko. src/app/+signup/shared/signup-success-before-email.component.html 22,23 @@ -7024,13 +6918,13 @@ The link will expire within 1 hour. Show the complete description - Show the complete description + Erakutsi azalpen osoa src/app/+accounts/accounts.component.html53 src/app/+video-channels/video-channels.component.html96 Show more... - Show more... + Erakutsi gehiago... src/app/+accounts/accounts.component.html54 src/app/+video-channels/video-channels.component.html97 @@ -7056,19 +6950,17 @@ The link will expire within 1 hour. {VAR_PLURAL, plural, =1 {1 subscriber} other { subscribers}} - {VAR_PLURAL, plural, =1 {1 subscriber} other { - subscribers} } - + {VAR_PLURAL, plural, =1 {Harpidedun bat} other { harpidedun}} src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.html13 {VAR_PLURAL, plural, =1 {1 videos} other { videos}} - {VAR_PLURAL, plural, =1 {1 videos} other { videos}} + {VAR_PLURAL, plural, =1 {Bideo bat} other { bideo}} src/app/shared/shared-custom-markup/peertube-custom-tags/channel-miniature-markup.component.html16 - + src/app/+accounts/account-video-channels/account-video-channels.component.html28 src/app/+accounts/accounts.component.html38 src/app/+my-library/+my-video-channels/my-video-channels.component.html42 @@ -7079,14 +6971,12 @@ The link will expire within 1 hour. Show this channel - Show this channel + Erakutsi kanal hau src/app/+accounts/account-video-channels/account-video-channels.component.html38 {VAR_PLURAL, plural, =0 {No videos} =1 {1 video} other { videos}} - {VAR_PLURAL, plural, =0 {No videos} =1 {1 video} other { - videos} } - + {VAR_PLURAL, plural, =0 {Bideorik ez} =1 {Bideo bat} other { bideo}} src/app/+accounts/account-video-channels/account-video-channels.component.html29 src/app/+accounts/accounts.component.html39 src/app/+my-library/+my-video-channels/my-video-channels.component.html47 @@ -7095,12 +6985,12 @@ The link will expire within 1 hour. Please type the name of the video channel () to confirm - Please type the name of the video channel () to confirm + Idatzi bideo-kanalaren izena () berresteko src/app/+my-library/+my-video-channels/my-video-channels.component.ts64 NEW CHANNEL - NEW CHANNEL + KANAL BERRIA src/app/+manage/video-channel-edit/video-channel-edit.component.html8 src/app/+manage/video-channel-edit/video-channel-edit.component.html8 @@ -7114,7 +7004,7 @@ The link will expire within 1 hour. {VAR_PLURAL, plural, =0 {No subscribers} =1 {1 subscriber} other { subscribers}} - {VAR_PLURAL, plural, =0 {No subscribers} =1 {1 subscriber} other { subscribers}} + {VAR_PLURAL, plural, =0 {Harpidedunik ez} =1 {Harpidedun bat} other { harpidedun}} src/app/+accounts/account-video-channels/account-video-channels.component.html26 src/app/+accounts/accounts.component.html36 src/app/+my-library/+my-video-channels/my-video-channels.component.html43 @@ -7122,12 +7012,12 @@ The link will expire within 1 hour. This channel doesn't have any videos. - This channel doesn't have any videos. + Kanal honek ez du bideorik. src/app/+accounts/account-video-channels/account-video-channels.component.html42 SHOW THIS CHANNEL > - SHOW THIS CHANNEL > + ERAKUTSI KANAL HAU > src/app/+accounts/account-video-channels/account-video-channels.component.html50 @@ -7148,18 +7038,18 @@ The link will expire within 1 hour. Network - Network + Sarea src/app/+about/about.component.html7 Follows - Follows + Jarraipenak src/app/+about/about-follows/about-follows.component.html2 src/app/+my-library/my-library.component.ts64 Followers of () - Followers of () + instantziaren jarraitzaileak () src/app/+about/about-follows/about-follows.component.html 5 @@ -7167,7 +7057,7 @@ The link will expire within 1 hour. does not have followers. - does not have followers. + instantziak ez du jarraitzailerik. src/app/+about/about-follows/about-follows.component.html 7 @@ -7175,34 +7065,32 @@ The link will expire within 1 hour. Your name - Your name + Izena src/app/+about/about-instance/contact-admin-modal.component.html14 Your email - Your email + Helbide elektronikoa src/app/+about/about-instance/contact-admin-modal.component.html24 Subject - Subject + Gaia src/app/+about/about-instance/contact-admin-modal.component.html34 Your message - Your message + Mezua src/app/+about/about-instance/contact-admin-modal.component.html43 About - About - - + Honi buruz: src/app/+about/about-instance/about-instance.component.html5 Contact us - Contact us + Jarri harremanetan gurekin src/app/+about/about-instance/about-instance.component.html 7 @@ -7214,34 +7102,32 @@ The link will expire within 1 hour. This instance is dedicated to sensitive/NSFW content. - This instance is dedicated to sensitive/NSFW content. + Instantzia hau hunkigarria/NSFW den edukia du ardatz. src/app/+about/about-instance/about-instance.component.html19 ADMINISTRATORS & SUSTAINABILITY - - ADMINISTRATORS & SUSTAINABILITY - + ADMINISTRATZAILEAK & JASANGARRITASUNA src/app/+about/about-instance/about-instance.component.html31 Who we are - Who we are + Nor gara src/app/+about/about-instance/about-instance.component.html44 Why we created this instance - Why we created this instance + Instantzia hau sortzearen arrazoia src/app/+about/about-instance/about-instance.component.html58 How long we plan to maintain this instance - How long we plan to maintain this instance + Zenbat denboran zehar mantendu nahi dugun instantzia hau src/app/+about/about-instance/about-instance.component.html72 How we will pay for keeping our instance running - How we will pay for keeping our instance running + Nola ordainduko dugun instantzia hau martxan segi dezan src/app/+about/about-instance/about-instance.component.html 86 @@ -7249,33 +7135,27 @@ The link will expire within 1 hour. INFORMATION - - INFORMATION - + INFORMAZIOA src/app/+about/about-instance/about-instance.component.html100 MODERATION - - MODERATION - + MODERAZIOA src/app/+about/about-instance/about-instance.component.html128 OTHER INFORMATION - - OTHER INFORMATION - + BESTELAKO INFORMAZIOA src/app/+about/about-instance/about-instance.component.html185 Hardware information - Hardware information + Hardwarearen informazioa src/app/+about/about-instance/about-instance.component.html198 FEATURES - FEATURES + EZAUGARRIAK src/app/+about/about-instance/about-instance.component.html207 @@ -7286,35 +7166,27 @@ The link will expire within 1 hour. STATISTICS - STATISTICS + ESTATISTIKAK src/app/+about/about-instance/about-instance.component.html220 PeerTube is a self-hosted ActivityPub-federated video streaming platform using P2P directly in your web browser. - - PeerTube is a self-hosted ActivityPub-federated video streaming platform using P2P directly in your web browser. - + PeerTube norberak ostatatu dezakeen ActivityPub-ekin federatutako P2P zuzenean web-arakatzailean erabiltzen duen igorpen-plataforma bat da. src/app/+about/about-peertube/about-peertube.component.html9 It is free and open-source software, under AGPLv3 licence. - It is free and open-source software, under AGPLv3 licence. + Doainik eta kode irekiko softwarea da, AGPLv3 lizentziapean. src/app/+about/about-peertube/about-peertube.component.html13 For more information, please visit joinpeertube.org. - - For more information, please visit - joinpeertube.org - . - - + Informazio gehiagorako, bisitatu joinpeertube.org. src/app/+about/about-peertube/about-peertube.component.html18 Use PeerTube documentation - Use PeerTube - documentation + Erabili PeerTube-ren dokumentazioa src/app/+about/about-peertube/about-peertube.component.html28 @@ -7324,28 +7196,22 @@ The link will expire within 1 hour. PeerTube Applications - PeerTube - Applications + PeerTube-ren aplikazioak src/app/+about/about-peertube/about-peertube.component.html40 Discover unofficial Android applications or browser addons! - - Discover unofficial Android applications or browser addons! - + Ezagutu ofizialak ez diren Android-erako aplikazioak edo arakatu gehigarriak. src/app/+about/about-peertube/about-peertube.component.html43 Contribute on PeerTube - Contribute on - PeerTube + Lagundu PeerTube-ri src/app/+about/about-peertube/about-peertube.component.html52 Want to help to improve PeerTube? You can translate the web interface, give your feedback or directly contribute to the code! - - Want to help to improve PeerTube? You can translate the web interface, give your feedback or directly contribute to the code! - + PeerTube hobetzen lagundu nahi duzu? Web-interfazea itzul dezakezu, zure iritzia eman edo lagundu zuzenean kodearekin. src/app/+about/about-peertube/about-peertube.component.html55 @@ -7355,16 +7221,12 @@ The link will expire within 1 hour. PeerTube uses the BitTorrent protocol to share bandwidth between users by default to help lower the load on the server, but ultimately leaves you the choice to switch back to regular streaming exclusively from the server of the video. What follows applies only if you want to keep using the P2P mode of PeerTube. - - PeerTube uses the BitTorrent protocol to share bandwidth between users by default to help lower the load on the server, - but ultimately leaves you the choice to switch back to regular streaming exclusively from the server of the video. What - follows applies only if you want to keep using the P2P mode of PeerTube. - + PeerTube-k BitTorrent protokoloa darabil banda zabalera erabiltzaileen artean partekatzeko lehenespenez, horrela, zerbitzariko karga gutxiagotzen laguntzen du. Hala ere, azkenaldian, bideoa dagoen zerbitzaritik igortzeko aukera ohikora itzultzea eskaintzen du. Hurrengoa soilik PeerTube-ren P2P modua jarraitzen erabili nahi baduzu aplikatzen da. src/app/+about/about-peertube/about-peertube.component.html68 The main threat to your privacy induced by BitTorrent lies in your IP address being stored in the instance's BitTorrent tracker as long as you download or watch the video. - The main threat to your privacy induced by BitTorrent lies in your IP address being stored in the instance's BitTorrent tracker as long as you download or watch the video. + BitTorrent-ek zure pribatutasunari eragin diezaiokeen mehatxua instantziako BitTorrent aztarnian bideoa deskargatzen edo ikusten duzun bitartean zure IP helbidea bertan gordetzean oinarritzen da. src/app/+about/about-peertube/about-peertube.component.html74 @@ -7374,62 +7236,42 @@ The link will expire within 1 hour. In theory, someone with enough technical skills could create a script that tracks which IP is downloading which video. In practice, this is much more difficult because: - - In theory, someone with enough technical skills could create a script that tracks which IP is downloading which video. - In practice, this is much more difficult because: - + Teorian, gaitasun tekniko nahikoa duen norbaitek zein IP helbidek zein bideo deskargatzen ari den kontrolatzen duen script bat sor lezake. Praktikan, hau zailagoa da hau dela eta: src/app/+about/about-peertube/about-peertube.component.html81 An HTTP request has to be sent on each tracker for each video to spy. If we want to spy all PeerTube's videos, we have to send as many requests as there are videos (so potentially a lot) - - An HTTP request has to be sent on each tracker for each video to spy. - If we want to spy all PeerTube's videos, we have to send as many requests as there are videos (so potentially a lot) - + HTTP eskaera bat aztarnari bakoitzari bidali behar zaio bideko bakoitzeko, hura zelata dadin. PeerTube-ko bideo guztiak zelatatu nahi baditugu, bideo adina eskaera bidali beharko genituzke (kopuru oso handia, alegia) src/app/+about/about-peertube/about-peertube.component.html87 For each request sent, the tracker returns random peers at a limited number. For instance, if there are 1000 peers in the swarm and the tracker sends only 20 peers for each request, there must be at least 50 requests sent to know every peer in the swarm - - For each request sent, the tracker returns random peers at a limited number. - For instance, if there are 1000 peers in the swarm and the tracker sends only 20 peers for each request, there must be at least 50 - requests sent to know every peer in the swarm - + Bidalitako eskaera bakoitzeko, aztarnariak ausazko hainbat pareko itzultzen ditu kopuru mugatu batean. Adibidez, 1000 pareko badaude erlauntzan eta aztarnariak soilik 20 pareko bidaltzen baditu eskaera bakoitzeko, gutxienez, 50 eskaera bidali beharko lirateke erlauntzako pareko bakoitza ezagutzeko. src/app/+about/about-peertube/about-peertube.component.html92 Those requests have to be sent regularly to know who starts/stops watching a video. It is easy to detect that kind of behaviour - - Those requests have to be sent regularly to know who starts/stops watching a video. It is easy to detect that kind of behaviour - + Eskaera horiek aldiro bidali behar dira nork hasten den edo amaitzen duen bideo bat ikusten jakiteko. Erraza da portaera hauek hautematea. src/app/+about/about-peertube/about-peertube.component.html98 If an IP address is stored in the tracker, it doesn't mean that the person behind the IP (if this person exists) has watched the video - - If an IP address is stored in the tracker, it doesn't mean that the person behind the IP (if this person exists) has watched the - video - + IP helbide bat aztarnarian gordetzen bada, ez du esan nahi IP helbidearen atzean dagoen pertsonak (benetan existitzen bada) bideoa ikusi duela src/app/+about/about-peertube/about-peertube.component.html102 The IP address is a vague information: usually, it regularly changes and can represent many persons or entities - - The IP address is a vague information: usually, it regularly changes and can represent many persons or entities - + IP helbidea zehaztu gabeko informazioa da: normalean, aldiro aldatzen da eta hainbat pertsona edo entitate ordeztu ditzake src/app/+about/about-peertube/about-peertube.component.html107 Web peers are not publicly accessible: because we use the websocket transport, the protocol is different from classic BitTorrent tracker. When you are in a web browser, you send a signal containing your IP address to the tracker that will randomly choose other peers to forward the information to. See this document for more information - Web peers are not publicly accessible: because we use the websocket transport, the protocol is different from classic BitTorrent tracker. When you are in a web browser, you send a signal containing your IP address to the tracker that will randomly choose other peers to forward the information to. See this document for more information + Sareko parekoak ez dira publikoki atzigarriak: websocket-garraioa erabiltzen dugunez, protokoloa BitTorrent aztarnari klasikoaren ezberdina da. Web-arakatzaile batean zaudenean, zure IP helbidea duen seinale bat bidaltzen duzu aztarnarira, honek ausaz aukeratuko ditu parekoak, haiei informazioa birbideratu ahal izateko. Ikusi dokumentu hau informazio gehiagorako src/app/+about/about-peertube/about-peertube.component.html111 The worst-case scenario of an average person spying on their friends is quite unlikely. There are much more effective ways to get that kind of information. - - The worst-case scenario of an average person spying on their friends is quite unlikely. - There are much more effective ways to get that kind of information. - + Lagunak zelatatzen dituen ohiko pertsona baten kasua nahiko ezohikoa da. Informazio mota hori lortzeko eraginkorragoak diren moduak daude. src/app/+about/about-peertube/about-peertube.component.html119 @@ -7439,11 +7281,7 @@ The link will expire within 1 hour. The threats to privacy with YouTube are different from PeerTube's. In YouTube's case, the platform gathers a huge amount of your personal information (not only your IP) to analyze them and track you. Moreover, YouTube is owned by Google/Alphabet, a company that tracks you across many websites (via AdSense or Google Analytics). - - The threats to privacy with YouTube are different from PeerTube's. - In YouTube's case, the platform gathers a huge amount of your personal information (not only your IP) to analyze them and track you. - Moreover, YouTube is owned by Google/Alphabet, a company that tracks you across many websites (via AdSense or Google Analytics). - + YouTube-rekin gerta litezkeen pribatutasunaren mehatxuak ezberdinak dira PeerTube-rekin. YouTube-ren kasuan, plataformak zure informazio pertsonalaren kopuru handi bat biltzen du (ez soilk zure IP helbidea) analizatzeko eta zure jarraipen bat egiteko. Gainera, YouTube-ren jabea Google/Alphabet da, hainbat webguneren bitartez zure jarraipena egiten duen enpresa bat (AdSense edo Google Analytics bitartez). src/app/+about/about-peertube/about-peertube.component.html126 @@ -7486,7 +7324,7 @@ The link will expire within 1 hour. Allow instance admins to disable P2P from the administration interface - Allow instance admins to disable P2P from the administration interface + Baimendu instantziako administratzaileei administrazio-interfazeko P2P desgaitzeko src/app/+about/about-peertube/about-peertube.component.html151 @@ -7499,13 +7337,13 @@ The link will expire within 1 hour. Show full list - Show full list + Erakutsi zerrenda osoa src/app/+about/about-follows/about-follows.component.html13 src/app/+about/about-follows/about-follows.component.html25 Subscriptions of () - Subscriptions of () + instantziaren harpidetzak () src/app/+about/about-follows/about-follows.component.html 17 @@ -7513,7 +7351,7 @@ The link will expire within 1 hour. does not have subscriptions. - does not have subscriptions. + instantziak ez du harpidetzik. src/app/+about/about-follows/about-follows.component.html 19 @@ -7521,27 +7359,27 @@ The link will expire within 1 hour. About this instance - About this instance + Instantzia honi buruz src/app/+about/about-routing.module.ts24 About PeerTube - About PeerTube + PeerTube-ri buruz src/app/+about/about-routing.module.ts49 About this instance's network - About this instance's network + Instantzia honen sareari buruz src/app/+about/about-routing.module.ts58 Link copied - Link copied + Esteka kopiatu da src/app/+about/about-instance/about-instance.component.ts91 Contact the administrator(s) - Contact the administrator(s) + Jarri harremanetan administratzaileekin src/app/+about/about-instance/contact-admin-modal.component.html 3 @@ -7549,7 +7387,7 @@ The link will expire within 1 hour. Close this modal - Close this modal + Itxi laster-leiho hau src/app/+about/about-instance/contact-admin-modal.component.html 5 @@ -7665,12 +7503,12 @@ The link will expire within 1 hour. Get help - Get help + Lortu laguntza src/app/shared/shared-main/misc/help.component.ts16 Done! - Done! + Kitto! src/app/+signup/+register/register.component.html109 @@ -7680,52 +7518,52 @@ The link will expire within 1 hour. Go to the previous step - Go to the previous step + Joan aurreko urratsera src/app/+signup/+register/register.component.ts42 Go to the next step - Go to the next step + Joan hurrengo urratsera src/app/+signup/+register/register.component.ts43 Who are we? - Who are we? + Nor gara? src/app/shared/shared-instance/instance-about-accordion.component.html38 How long do we plan to maintain this instance? - How long do we plan to maintain this instance? + Zenbat denboran zehar mantendu nahi dugu instantzia hau? src/app/shared/shared-instance/instance-about-accordion.component.html43 How will we finance this instance? - How will we finance this instance? + Nola finantzatuko dugu instantzia hau? src/app/shared/shared-instance/instance-about-accordion.component.html48 Terms of - Terms of + instantziaren baldintzak src/app/shared/shared-instance/instance-about-accordion.component.ts80 Administrators & Sustainability - Administrators & Sustainability + Administratzaileak & Jasangarritasuna src/app/shared/shared-instance/instance-about-accordion.component.html30 Step - Step + Urratsa src/app/+signup/+register/custom-stepper.component.html11 Channel display name - Channel display name + Kanalaren bistaratzeko izena src/app/+signup/+register/steps/register-step-channel.component.html21 This is the name that will be publicly visible by other users. - This is the name that will be publicly visible by other users. + Izen hau beste erabiltzaileek publikoki ikusi ahal izango dute. src/app/+signup/+register/steps/register-step-channel.component.html 23 @@ -7733,7 +7571,7 @@ The link will expire within 1 hour. Example: Sweet Melodies - Example: Sweet Melodies + Adibidea: Doinu xamurrak src/app/+signup/+register/steps/register-step-channel.component.html 27 @@ -7741,7 +7579,7 @@ The link will expire within 1 hour. Channel identifier - Channel identifier + Kanalaren identifikatzailea src/app/+signup/+register/steps/register-step-channel.component.html 36 @@ -7749,7 +7587,7 @@ The link will expire within 1 hour. This is the name that will be displayed in your profile URL. - This is the name that will be displayed in your profile URL. + Izen hau profilaren URLan bistaratuko da. src/app/+signup/+register/steps/register-step-channel.component.html 38 @@ -7757,7 +7595,7 @@ The link will expire within 1 hour. Example: sweetmelodies24 - Example: sweetmelodies24 + Adibidea: doinuxamurrak7 src/app/+signup/+register/steps/register-step-channel.component.html 42 @@ -7765,7 +7603,7 @@ The link will expire within 1 hour. Channel identifier cannot be the same as your account name. You can click on the first step to update your account name. - Channel identifier cannot be the same as your account name. You can click on the first step to update your account name. + Kanalaren identifikatzailea eta kontuaren izena ezin dira berdinak izan. Lehen urratsean klik egin dezakezu kontuaren izena eguneratzeko. src/app/+signup/+register/steps/register-step-channel.component.html 50,52 @@ -7789,20 +7627,19 @@ The link will expire within 1 hour. Channel name - Channel name + Kanalaren izena src/app/+admin/overview/users/user-edit/user-edit.component.html94 src/app/+admin/overview/users/user-edit/user-edit.component.html94 john_channel - john_channel + aneren_kanala src/app/+admin/overview/users/user-edit/user-edit.component.html96 src/app/+admin/overview/users/user-edit/user-edit.component.html96 Video uploads are disabled on this instance, hence your account won't be able to upload videos. - Video uploads are disabled on this instance, hence your account won't be able to upload videos. - + Bideoak igotzea desgaituta dago instantzia honetan, hortaz, kontuak ezingo ditu igo bideoak. src/app/+signup/+register/steps/register-step-user.component.html 1,3 @@ -7810,7 +7647,7 @@ The link will expire within 1 hour. Public name - Public name + Izen publikoa src/app/+signup/+register/steps/register-step-user.component.html 9 @@ -7818,7 +7655,7 @@ The link will expire within 1 hour. This is the name that will be publicly visible by other users. - This is the name that will be publicly visible by other users. + Izen hau beste erabiltzaileek publikoki ikusi ahal izango dute. src/app/+signup/+register/steps/register-step-user.component.html 11,13 @@ -7826,7 +7663,7 @@ The link will expire within 1 hour. Example: John Doe - Example: John Doe + Adibidea: Ane Etxeberria src/app/+signup/+register/steps/register-step-user.component.html 17 @@ -7834,22 +7671,22 @@ The link will expire within 1 hour. This is the name that will be displayed in your profile URL. - This is the name that will be displayed in your profile URL. + Izen hau profilaren URLan bistaratuko da. src/app/+signup/+register/steps/register-step-user.component.html29 Example: john_doe58 - Example: john_doe58 + Adibidea: ane_etxeb99 src/app/+signup/+register/steps/register-step-user.component.html35 This email address will be used to validate your account. - This email address will be used to validate your account. + Helbide elektroniko hau kontua baieztatzeko erabiliko da. src/app/+signup/+register/steps/register-step-user.component.html50 Request email for account verification - Request email for account verification + Eskatu kontua baieztatzeko mezu elektronikoa src/app/+signup/+verify-account/verify-account-ask-send-email/verify-account-ask-send-email.component.html 2 @@ -7857,7 +7694,7 @@ The link will expire within 1 hour. Signup is not enabled on this instance. - Signup is not enabled on this instance. + Izen-ematea ez dago gaituta instantzia honetan. src/app/+signup/+register/register.component.html 4 @@ -7865,22 +7702,22 @@ The link will expire within 1 hour. Register - Register + Izena eman src/app/+signup/+register/register-routing.module.ts13 Your message has been sent. - Your message has been sent. + Mezua bidali da. src/app/+about/about-instance/contact-admin-modal.component.ts88 You already sent this form recently - You already sent this form recently + Jada bidali duzu inprimaki hau duela gutxi src/app/+about/about-instance/contact-admin-modal.component.ts94 This website is powered by PeerTube - This website is powered by PeerTube + Webgune hau PeerTube-rekin dabil src/app/+about/about-peertube/about-peertube.component.html 2,4 @@ -7901,105 +7738,105 @@ The link will expire within 1 hour. Account video channels - Account video channels + Kontuaren bideo-kanalak src/app/+accounts/accounts-routing.module.ts26 Remove this filter - Remove this filter + Kendu iragazki hau src/app/shared/shared-video-miniature/video-filters-header.component.ts90 Sensitive content - Sensitive content + Eduki hunkigarria src/app/shared/shared-video-miniature/video-filters.model.ts131 Scope - Scope + Irismena src/app/shared/shared-video-miniature/video-filters.model.ts138 Federated - Federated + Federatua src/app/shared/shared-video-miniature/video-filters.model.ts140 Languages - Languages + Hizkuntzak src/app/shared/shared-video-miniature/video-filters.model.ts148 Categories - Categories + Kategoriak src/app/shared/shared-video-miniature/video-filters.model.ts157 All videos - All videos + Bideo guztiak src/app/shared/shared-video-miniature/video-filters.model.ts166 Blurred - Blurred + Lausotua src/app/shared/shared-video-miniature/video-filters.model.ts246 hidden - hidden + ezkutatuta src/app/shared/shared-video-miniature/video-filters.model.ts252 blurred - blurred + lausotua src/app/shared/shared-video-miniature/video-filters.model.ts253 displayed - displayed + bistaratua src/app/shared/shared-video-miniature/video-filters.model.ts255 Password protected - Password protected + Pasahitzaz babestua src/app/shared/shared-video-miniature/video-miniature.component.html9 src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.html25 Report this account - Report this account + Salatu kontu hau src/app/+accounts/accounts.component.ts192 Overview - Overview + Informazio orokorra src/app/+admin/admin.component.ts44 VIDEOS - VIDEOS + BIDEOAK src/app/+accounts/accounts.component.ts81 src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html267 src/app/+video-channels/video-channels.component.ts89 Username copied - Username copied + Erabiltzaile-izena kopiatu da src/app/+accounts/accounts.component.html30 Audio-only - Audio-only + Audioa soilik src/app/+admin/config/edit-custom-config/edit-configuration.service.ts18 A <code>.mp4</code> that keeps the original audio track, with no video - A <code>.mp4</code> that keeps the original audio track, with no video + Jatorrizko audio-pista mantentzen duen <code>.mp4</code> fitxaegi bat, bideorik gabea src/app/+admin/config/edit-custom-config/edit-configuration.service.ts19 144p - 144p + 144p src/app/+admin/config/edit-custom-config/edit-configuration.service.ts23 @@ -8029,17 +7866,17 @@ The link will expire within 1 hour. 1440p - 1440p + 1440p src/app/+admin/config/edit-custom-config/edit-configuration.service.ts47 2160p - 2160p + 2160p src/app/+admin/config/edit-custom-config/edit-configuration.service.ts51 {value, plural, =1 {thread} other {threads}} - {value, plural, =1 {thread} other {threads}} + {value, plural, =1 {hari} other {hari}} src/app/+admin/config/edit-custom-config/edit-configuration.service.ts102 @@ -8049,7 +7886,7 @@ The link will expire within 1 hour. Followers of your instance - Followers of your instance + Instantziako jarraitzaileak src/app/+admin/follows/followers-list/followers-list.component.html 3 @@ -8057,43 +7894,43 @@ The link will expire within 1 hour. No limit - No limit + Mugarik gabe src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts33 1 hour - 1 hour + Ordu bat src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts34 3 hours - 3 hours + 3 ordu src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts35 5 hours - 5 hours + 5 ordu src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts36 10 hours - 10 hours + 10 ordu src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts37 x264, targeting maximum device compatibility - x264, targeting maximum device compatibility + x264, gehieneko gailuen bateragarritasuna helburu gisa src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts54 src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts49 Estimating a server's capacity to transcode and stream videos isn't easy and we can't tune PeerTube automatically. - Estimating a server's capacity to transcode and stream videos isn't easy and we can't tune PeerTube automatically. + Zerbitzari baten bideoak ranskodetzeko eta igortzeko gaitasuna kalkulatzea ez da erraza eta ezin dugu doitu PeerTube automatikoki. src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html8 However, you may want to read our guidelines before tweaking the following values. - However, you may want to read our guidelines before tweaking the following values. + Halere, gure jarraibideak irakur ditzakezu hurrengo balioak pertsonalizatu aurretik. src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.html 12,14 @@ -8172,18 +8009,18 @@ The link will expire within 1 hour. Comment reported. - Comment reported. + Iruzkina salatu da. src/app/shared/shared-moderation/report-modals/comment-report.component.ts82 Domain is required. - Domain is required. + Domeinua beharrezkoa da. src/app/shared/form-validators/host-validators.ts92 src/app/shared/form-validators/host-validators.ts101 Hosts entered are invalid. - Hosts entered are invalid. + Sartutako ostalariak baliogabeak dira. src/app/shared/form-validators/host-validators.ts 93 @@ -8191,7 +8028,7 @@ The link will expire within 1 hour. Hosts entered contain duplicates. - Hosts entered contain duplicates. + Sartutako ostalariek bikoiztuak dituzte. src/app/shared/form-validators/host-validators.ts 94 @@ -8225,7 +8062,7 @@ The link will expire within 1 hour. None - no upload possible - None - no upload possible + Bat ere ez - ezin da igo src/app/+admin/config/shared/config.service.ts23 src/app/+admin/config/shared/config.service.ts37 @@ -8266,7 +8103,7 @@ The link will expire within 1 hour. 100GB - 100GB + 100GB src/app/+admin/config/shared/config.service.ts 30 @@ -8274,7 +8111,7 @@ The link will expire within 1 hour. 200GB - 200GB + 200GB src/app/+admin/config/shared/config.service.ts 31 @@ -8282,7 +8119,7 @@ The link will expire within 1 hour. 500GB - 500GB + 500GB src/app/+admin/config/shared/config.service.ts 32 @@ -8305,7 +8142,7 @@ The link will expire within 1 hour. 10GB - 10GB + 10GB src/app/+admin/config/shared/config.service.ts 44 @@ -8313,14 +8150,14 @@ The link will expire within 1 hour. Reject - Reject + Baztertu src/app/+admin/follows/followers-list/followers-list.component.html50 src/app/+admin/follows/followers-list/followers-list.component.ts40 src/app/+admin/follows/followers-list/followers-list.component.ts86 Delete - Delete + Ezabatu src/app/+admin/follows/followers-list/followers-list.component.ts50 src/app/+admin/follows/followers-list/followers-list.component.ts118 src/app/+admin/follows/following-list/following-list.component.ts42 @@ -8353,7 +8190,7 @@ The link will expire within 1 hour. Accepted {count, plural, =1 { follow request} other { follow requests}} - Accepted {count, plural, =1 { follow request} other { follow requests}} + {count, plural, =1 { erabiltzailearen jarraipen-eskaera onartu da} other { jarraipen eskaera onartu dira}} src/app/+admin/follows/followers-list/followers-list.component.ts67 @@ -8462,16 +8299,12 @@ The link will expire within 1 hour. Account unmuted by your instance. - - kontua zure instantziak desmutututa. - + kontua zure instantziak desmutututa. src/app/shared/shared-moderation/account-blocklist.component.ts43 Instance unmuted by your instance. - - instantzia zure instantziak demutututa. - + instantzia zure instantziak demutututa. src/app/shared/shared-moderation/server-blocklist.component.ts46 @@ -8590,12 +8423,12 @@ The link will expire within 1 hour. Do you really want to delete this abuse report? - Ziur gehiegikeria salaketa hau ezabatu nahi duzula? + Ziur salaketa hau ezabatu nahi duzula? src/app/shared/shared-abuse-list/abuse-list-table.component.ts132 Abuse deleted. - Gehiegikeria ezabatu da. + Iraina ezabatu da. src/app/shared/shared-abuse-list/abuse-list-table.component.ts138 @@ -9057,9 +8890,7 @@ The link will expire within 1 hour. User created. - - erabiltzailea sortuta. - + erabiltzailea sortuta. src/app/+admin/overview/users/user-edit/user-create.component.ts78 @@ -9350,7 +9181,7 @@ The link will expire within 1 hour. You cannot ban root. - Ezin duzu root debekatu + Ezin duzu debekatu erroa. src/app/+admin/overview/users/user-list/user-list.component.ts199 src/app/shared/shared-moderation/user-moderation-dropdown.component.ts71 @@ -9392,17 +9223,13 @@ The link will expire within 1 hour. Account unmuted. - - kontua desmutututa. - + kontua desmutututa. src/app/shared/shared-moderation/account-blocklist.component.ts42 src/app/shared/shared-moderation/user-moderation-dropdown.component.ts149 Instance unmuted. - - instantzia desmutututa. - + instantzia desmutututa. src/app/shared/shared-moderation/server-blocklist.component.ts45 src/app/shared/shared-moderation/user-moderation-dropdown.component.ts177 @@ -9528,7 +9355,7 @@ The link will expire within 1 hour. New abuse - New abuse + Irain berria src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts35 @@ -9578,7 +9405,7 @@ The link will expire within 1 hour. An abuse report received a new message - An abuse report received a new message + Salaketa batek mezu berri bat jaso du src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts45 @@ -9669,43 +9496,37 @@ The link will expire within 1 hour. Video channel created. - - bideo kanala sortuta. - + bideo-kanala sortuta. src/app/+manage/video-channel-edit/video-channel-create.component.ts71 This name already exists on this instance. - Izen hau hartuta dago instantzia honetan + Izen hau hartuta dago instantzia honetan. src/app/+manage/video-channel-edit/video-channel-create.component.ts77 Video channel updated. - - bideo kanala eguneratuta. - + bideo-kanala eguneratuta. src/app/+manage/video-channel-edit/video-channel-update.component.ts104 Banner changed. - Banner changed. + Bannerra aldatu da. src/app/+manage/video-channel-edit/video-channel-update.component.ts155 banner - banner + bannerra src/app/+manage/video-channel-edit/video-channel-update.component.ts162 Banner deleted. - Banner deleted. + Bannerra ezabatu da. src/app/+manage/video-channel-edit/video-channel-update.component.ts172 Video channel deleted. - - bideo kanala ezabatuta. - + bideo-kanala ezabatuta. src/app/+my-library/+my-video-channels/my-video-channels.component.ts76 @@ -9787,7 +9608,7 @@ The link will expire within 1 hour. Remote interaction - Remote interaction + Urruneko elkarreragina src/app/+remote-interaction/remote-interaction-routing.module.ts 13 @@ -9902,9 +9723,7 @@ The link will expire within 1 hour. Video deleted. - - bideoa ezabatuta. - + bideoa ezabatuta. src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts242 @@ -9976,8 +9795,7 @@ The link will expire within 1 hour. is awaiting email verification - is awaiting email verification - + erabiltzailea helbide elektronikoaren baieztatzearen zain dago src/app/+my-account/my-account-settings/my-account-change-email/my-account-change-email.component.html 5,6 @@ -10062,7 +9880,7 @@ The link will expire within 1 hour. An email with verification link will be sent to . - Egiaztaketa esteka duen mezu bat bidaliko da helbidera. + Baieztatzearen esteka duen mezu bat bidaliko da helbidera. src/app/+signup/+verify-account/verify-account-ask-send-email/verify-account-ask-send-email.component.ts40 @@ -10075,15 +9893,15 @@ The link will expire within 1 hour. Unable to find user id or verification string. - Ezin izan da erabiltzailearen id-a edo berreste katea aurkitu. + Ezin da aurkitu erabiltzailearen IDa edo baieztatze-katea. src/app/+reset-password/reset-password.component.ts38 Subscribe to the account Harpidetu kontura - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS ZERRENDAK @@ -10214,12 +10032,12 @@ The link will expire within 1 hour. Go to the trending videos page - Joan pil-pilean dauden bideoen orrira + Joan joeran dauden bideoen orrira src/app/app.component.ts335 Go to the recently added videos page - Joan gehitutako azken bideoen orrialdera + Joan berriki gehitutako bideoen orrira src/app/app.component.ts340 @@ -10255,8 +10073,7 @@ The link will expire within 1 hour. Cannot retrieve OAuth Client credentials: . Ensure you have correctly configured PeerTube (config/ directory), in particular the "webserver" section. - Cannot retrieve OAuth Client credentials: . -Ensure you have correctly configured PeerTube (config/ directory), in particular the "webserver" section. + Ezin da eskuratu OAuth bezeroaren kredentzialak: . Ziurtatu PeerTube zuzen konfiguratu duzula (/config direktorioa), bereziki, "web-zerbitzaria" atala. src/app/core/auth/auth.service.ts104 @@ -10289,7 +10106,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Trending - Pil-pilean + Joeran src/app/+videos/video-list/videos-list-common-page.component.ts205 src/app/core/menu/menu.service.ts140 @@ -10540,7 +10357,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular - + src/app/+search/search.component.html 5 @@ -10791,27 +10608,27 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Max video channels per user must be a number. - Max video channels per user must be a number. + Erabiltzaile bakoitzeko gehieneko bideo-kanal kopurua zenbaki bat izan behar du. src/app/shared/form-validators/custom-config-validators.ts97 Concurrency is required. - Concurrency is required. + Aldiberekotasuna beharrezkoa da. src/app/shared/form-validators/custom-config-validators.ts104 Concurrency should be greater or equal to 1. - Concurrency should be greater or equal to 1. + Aldiberekotasunak 1 edo handiagoa izan behar du. src/app/shared/form-validators/custom-config-validators.ts105 Index URL should be a URL - Index URL should be a URL + Aurkibidearen URLak URL bat izan behar du src/app/shared/form-validators/custom-config-validators.ts112 Search index URL should be a URL - Search index URL should be a URL + Bilaketaren aurkibidearen URLak URL bat izan behar du src/app/shared/form-validators/custom-config-validators.ts119 @@ -10838,7 +10655,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular OTP token is required. - OTP token is required. + OTP tokena beharrezkoa da. src/app/shared/form-validators/user-validators.ts 69 @@ -10846,47 +10663,47 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Your name is required. - Your name is required. + Izena beharrezkoa da. src/app/shared/form-validators/instance-validators.ts19 Your name must be at least 1 character long. - Your name must be at least 1 character long. + Izenak, gutxienez, karaktere bat izan behar du. src/app/shared/form-validators/instance-validators.ts20 Your name cannot be more than 120 characters long. - Your name cannot be more than 120 characters long. + Izenak 120 karaktere baino gutxiago izan behar ditu. src/app/shared/form-validators/instance-validators.ts21 A subject is required. - A subject is required. + Gaia beharrezkoa da. src/app/shared/form-validators/instance-validators.ts32 The subject must be at least 1 character long. - The subject must be at least 1 character long. + Gaiak, gutxienez, karaktere bat baino gehiago izan behar du. src/app/shared/form-validators/instance-validators.ts33 The subject cannot be more than 120 characters long. - The subject cannot be more than 120 characters long. + Gaiak ezin ditu 120 karaktere baino gehiago izan. src/app/shared/form-validators/instance-validators.ts34 A message is required. - A message is required. + Mezua beharrezkoa da. src/app/shared/form-validators/instance-validators.ts45 The message must be at least 3 characters long. - The message must be at least 3 characters long. + Mezuak, gutxienez, 3 karaktere baino gehiago izan behar ditu. src/app/shared/form-validators/instance-validators.ts46 The message cannot be more than 5000 characters long. - The message cannot be more than 5000 characters long. + Mezuak ezin ditu 5000 karaktere baino gehiago izan. src/app/shared/form-validators/instance-validators.ts47 @@ -10909,37 +10726,37 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Username must be at least 1 character long. - Username must be at least 1 character long. + Erabiltzaile-izenak, gutxienez, karaktere bat izan behar du. src/app/shared/form-validators/user-validators.ts15 Username cannot be more than 50 characters long. - Username cannot be more than 50 characters long. + Erabiltzaile-izenak ezin ditu 50 karaktere baino gehiago izan. src/app/shared/form-validators/user-validators.ts16 Username should be lowercase alphanumeric; dots and underscores are allowed. - Username should be lowercase alphanumeric; dots and underscores are allowed. + Erabiltzaile-izena letra xeheak eta alfazenbakizko karaktereak izan behar ditu; puntuak eta azpimarrak onartzen dira. src/app/shared/form-validators/user-validators.ts17 Channel name is required. - Channel name is required. + Kanalaren izena beharrezkoa da. src/app/shared/form-validators/user-validators.ts29 Channel name must be at least 1 character long. - Channel name must be at least 1 character long. + Kanalaren izenak, gutxienez, karaktere bat izan behar du. src/app/shared/form-validators/user-validators.ts30 Channel name cannot be more than 50 characters long. - Channel name cannot be more than 50 characters long. + Kanalaren izenak ezin ditu 50 karaktere baino gehiago izan. src/app/shared/form-validators/user-validators.ts31 Channel name should be lowercase, and can contain only alphanumeric characters, dots and underscores. - Channel name should be lowercase, and can contain only alphanumeric characters, dots and underscores. + Kanalaren izenak letra xeheak izan behar ditu eta soilik alfazenbakizko karaktereak, puntuak eta azpimarrak eduki ditzake. src/app/shared/form-validators/user-validators.ts32 @@ -10971,7 +10788,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Daily upload limit is required. - Eguneko igoera muga derrigorrezkoa da + Eguneko igoera muga derrigorrezkoa da. src/app/shared/form-validators/user-validators.ts114 @@ -11000,12 +10817,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular You must agree with the instance terms in order to register on it. - You must agree with the instance terms in order to register on it. + Instantziako baldintzak onartu behar dituzu bertan izena emateko. src/app/+signup/+register/shared/register-validators.ts7 Registration reason is required. - Registration reason is required. + Izen-ematearen arrazoia beharrezkoa da. src/app/+signup/+register/shared/register-validators.ts 14 @@ -11013,7 +10830,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Registration reason must be at least 2 characters long. - Registration reason must be at least 2 characters long. + Izen-ematearen arrazoiak, gutxienez, 2 karaktere izan behar ditu. src/app/+signup/+register/shared/register-validators.ts 15 @@ -11021,7 +10838,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Registration reason cannot be more than 3000 characters long. - Registration reason cannot be more than 3000 characters long. + Izen-ematearen arrazoiak ezin ditu 3000 karaktere baino gehiago izan. src/app/+signup/+register/shared/register-validators.ts 16 @@ -11039,21 +10856,21 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Display name is required. - Pantaila-izena behar da. + Bistaratzeko izena behar da. src/app/shared/form-validators/user-validators.ts157 src/app/shared/form-validators/video-channel-validators.ts24 src/app/shared/form-validators/video-playlist-validators.ts12 Display name must be at least 1 character long. - Display name must be at least 1 character long. + Bistaratzeko izenak, gutxienez, karaktere bat izan behar du. src/app/shared/form-validators/user-validators.ts158 src/app/shared/form-validators/video-channel-validators.ts25 src/app/shared/form-validators/video-playlist-validators.ts13 Display name cannot be more than 50 characters long. - Display name cannot be more than 50 characters long. + Bistaratzeko izenak ezin ditu 50 karaktere baino gehiago izan. src/app/shared/form-validators/user-validators.ts159 src/app/shared/form-validators/video-channel-validators.ts26 @@ -11069,7 +10886,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Report reason cannot be more than 3000 characters long. - Report reason cannot be more than 3000 characters long. + Salaketaren arrazoiak ezin ditu 3000 karaktere baino gehiago izan. src/app/shared/form-validators/abuse-validators.ts9 @@ -11084,22 +10901,22 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Moderation comment cannot be more than 3000 characters long. - Moderation comment cannot be more than 3000 characters long. + Moderazioaren iruzkinak ezin ditu 3000 karaktere baino gehiago izan. src/app/shared/form-validators/abuse-validators.ts18 Abuse message is required. - Abuse message is required. + Irainaren mezua beharrezkoa da. src/app/shared/form-validators/abuse-validators.ts25 Abuse message must be at least 2 characters long. - Abuse message must be at least 2 characters long. + Irainaren mezuak, gutxienez, 2 karaktere izan behar ditu. src/app/shared/form-validators/abuse-validators.ts26 Abuse message cannot be more than 3000 characters long. - Abuse message cannot be more than 3000 characters long. + Irainaren mezuak ezin ditu 3000 karaktere baino gehiago izan. src/app/shared/form-validators/abuse-validators.ts27 @@ -11109,12 +10926,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Block reason must be at least 2 characters long. - Block reason must be at least 2 characters long. + Blokeatzearen arrazoiak, gutxienez, 2 karaktere izan behar ditu. src/app/shared/form-validators/video-block-validators.ts7 Block reason cannot be more than 300 characters long. - Block reason cannot be more than 300 characters long. + Blokeatzearen arrazoiak ezin ditu 300 karaktere baino gehiago izan. src/app/shared/form-validators/video-block-validators.ts8 @@ -11129,7 +10946,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Caption content is required. - Caption content is required. + Azpitituluen edukia beharrezkoa da. src/app/shared/form-validators/video-captions-validators.ts 21 @@ -11152,27 +10969,27 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Name must be at least 1 character long. - Name must be at least 1 character long. + Izenak, gutxienez, karaktere bat izan behar du. src/app/shared/form-validators/video-channel-validators.ts11 Name cannot be more than 50 characters long. - Name cannot be more than 50 characters long. + Izenak ezin ditu 50 karaktere baino gehiago izan. src/app/shared/form-validators/video-channel-validators.ts12 Name should be lowercase alphanumeric; dots and underscores are allowed. - Name should be lowercase alphanumeric; dots and underscores are allowed. + Izenak letra xeheak izan behar ditu eta alfazenbakizkoa izan. Puntuak eta azpimarrak onartzen dira. src/app/shared/form-validators/video-channel-validators.ts13 Support text must be at least 3 characters long. - Babes testua gutxienez 3 karaktere luze izan behar da + Laguntza-testua gutxienez 3 karaktere luze izan behar da. src/app/shared/form-validators/video-channel-validators.ts47 Support text cannot be more than 1000 characters long. - Support text cannot be more than 1000 characters long. + Laguntza-testuak ezin ditu 1000 karaktere baino gehiago izan. src/app/shared/form-validators/video-channel-validators.ts 48 @@ -11180,7 +10997,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Remote channel url is required. - Remote channel url is required. + Urruneko kanalaren URLa beharrezkoa da. src/app/shared/form-validators/video-channel-validators.ts 59 @@ -11188,7 +11005,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular External channel URL must begin with "https://" or "http://" - External channel URL must begin with "https://" or "http://" + Kanpoko kanalaren URLa "https://" edo "http://" protokoloarekin hasi behar da src/app/shared/form-validators/video-channel-validators.ts 60 @@ -11196,7 +11013,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular External channel URL cannot be more than 1000 characters long - External channel URL cannot be more than 1000 characters long + Kanpoko kanalaren URLak ezin ditu 1000 karaktere baino gehiago izan src/app/shared/form-validators/video-channel-validators.ts 61 @@ -11204,7 +11021,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A chapter title is required. - A chapter title is required. + Atalaren izenburua beharrezkoa da. src/app/shared/form-validators/video-chapter-validators.ts 7 @@ -11212,7 +11029,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A chapter title should be more than 2 characters long. - A chapter title should be more than 2 characters long. + Atalaren izenburuak 2 karaktere baino gehiago izan behar ditu. src/app/shared/form-validators/video-chapter-validators.ts 8 @@ -11220,7 +11037,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A chapter title should be less than 100 characters long. - A chapter title should be less than 100 characters long. + Atalaren izenburuak 100 karaktere baino gutxiago izan behar ditu. src/app/shared/form-validators/video-chapter-validators.ts 9 @@ -11228,7 +11045,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Multiple chapters have the same timecode - Multiple chapters have the same timecode + Hainbat atalek denbora-kode bera dute src/app/shared/form-validators/video-chapter-validators.ts 26 @@ -11236,8 +11053,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular See the documentation to learn how to use the PeerTube live streaming feature. - See the documentation to learn how to use the PeerTube live streaming feature. - + Ikusi dokumentazioa PeerTube-ren zuzenekoaren igorpenaren eginbidea nola erabili ikasteko. src/app/shared/shared-video-live/live-documentation-link.component.html1 @@ -11257,12 +11073,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Display name cannot be more than 120 characters long. - Pantaila-izena ezin da 120 karaktere baino luzeagoa izan. + Bistaratzeko izena ezin da 120 karaktere baino luzeagoa izan. src/app/shared/form-validators/video-playlist-validators.ts14 Privacy is required. - Privacy is required. + Pribatutasuna beharrezkoa da. src/app/shared/form-validators/video-playlist-validators.ts23 @@ -11272,23 +11088,23 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Live information - Live information + Zuzenekoaren informazioa src/app/shared/shared-video-live/live-stream-information.component.html3 Permanent/Recurring live - Permanent/Recurring live + Zuzeneko iraunkorra/errepikakorra src/app/shared/shared-video-live/live-stream-information.component.html12 Live RTMP Url - Live RTMP Url + Zuzenekoaren RTMP URLa src/app/+videos/+video-edit/shared/video-edit.component.html295 src/app/shared/shared-video-live/live-stream-information.component.html21 Live RTMPS Url - Live RTMPS Url + Zuzenekoaren RTMPS URLa src/app/+videos/+video-edit/shared/video-edit.component.html300 src/app/shared/shared-video-live/live-stream-information.component.html26 @@ -11300,58 +11116,58 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular ⚠️ Never share your stream key with anyone. - ⚠️ Never share your stream key with anyone. + ⚠️Ez partekatu inoiz igorpenaren gakoa inorekin. src/app/+videos/+video-edit/shared/video-edit.component.html308 src/app/shared/shared-video-live/live-stream-information.component.html34 This is a normal live - This is a normal live + Hau zuzeneko arrunt bat da src/app/+videos/+video-edit/shared/video-edit.component.html314 You can stream only once in a normal live. If you enable replay, it will be saved under the same URL as your live - You can stream only once in a normal live. If you enable replay, it will be saved under the same URL as your live + Behin soilik igor dezakezu zuzeneko arrunt batean. Errepikapena gaitzen baduzu, zuzenekoaren URL berean gordeko da src/app/+videos/+video-edit/shared/video-edit.component.html316 This is a permanent/recurring live - This is a permanent/recurring live + Hau zuzeneko iraunkorra/errepikakorra da src/app/+videos/+video-edit/shared/video-edit.component.html323 You can stream multiple times in a permanent/recurring live. If you enable replays, they will be saved as separate videos - You can stream multiple times in a permanent/recurring live. If you enable replays, they will be saved as separate videos + Hainbatetan igor dezakezu zuzeneko iraunkorrean/errepikakorrean. Errepikapenak gaitzen badituzu, aparteko bideo gisa gordeko dira. src/app/+videos/+video-edit/shared/video-edit.component.html325 Replay will be saved - Replay will be saved + Erreprodukzioa gordeko da src/app/shared/shared-video-live/live-stream-information.component.html13 Latest live sessions - Latest live sessions + Azken zuzeneko saioak src/app/shared/shared-video-live/live-stream-information.component.html38 Started on - Started on + Data honetan hasi da: src/app/shared/shared-video-live/live-stream-information.component.html44 Ended on - Ended on + Data honetan amaitu da: src/app/shared/shared-video-live/live-stream-information.component.html45 Go to replay - Go to replay + Joan errepikapenera src/app/shared/shared-video-live/live-stream-information.component.html46 Replay is being processed... - Replay is being processed... + Errepikapena prozesatzen ari da... src/app/shared/shared-video-live/live-stream-information.component.html47 @@ -11371,7 +11187,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Video name has leading or trailing whitespace. - Video name has leading or trailing whitespace. + Bideoaren izenak zuriunea du hasieran eta amaieran. src/app/shared/form-validators/video-validators.ts 18 @@ -11379,12 +11195,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Video privacy is required. - Bideoaren pribatutasuna behar da + Bideoaren pribatutasuna behar da. src/app/shared/form-validators/video-validators.ts25 A password should be at least 2 characters long. - A password should be at least 2 characters long. + Pasahitzak, gutxienez, 2 karaktere izan behar ditu. src/app/shared/form-validators/video-validators.ts 32 @@ -11392,7 +11208,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A password should be shorter than 100 characters long. - A password should be shorter than 100 characters long. + Pasahitz batek 100 karaktere baino gutxiago izan behar ditu. src/app/shared/form-validators/video-validators.ts 33 @@ -11400,7 +11216,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A password is required for password protected video. - A password is required for password protected video. + Pasahitz bat behar da pasahitzaz babestutako bideo baterako. src/app/shared/form-validators/video-validators.ts 34 @@ -11423,12 +11239,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular A maximum of 5 tags can be used on a video. - A maximum of 5 tags can be used on a video. + Gehienez, 5 etiketa erabil daitezke bideo batean. src/app/shared/form-validators/video-validators.ts76 A tag should be more than 1 and less than 30 characters long. - A tag should be more than 1 and less than 30 characters long. + Etiketa batek karaktere bat baino gehiago eta 30 karaktere baino gutxiago izan behar ditu. src/app/shared/form-validators/video-validators.ts77 @@ -11438,7 +11254,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Video support cannot be more than 1000 characters long. - Bideoaren laguntza ezin da 1000 karaktere baino luzeagoa izan + Bideoaren laguntza ezin da 1000 karaktere baino luzeagoa izan. src/app/shared/form-validators/video-validators.ts85 @@ -11458,22 +11274,22 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular All categories - All categories + Kategoria guztiak src/app/shared/shared-forms/select/select-categories.component.ts23 You can't select more than {maxItems, plural, =1 {1 item} other { items}} - You can't select more than {maxItems, plural, =1 {1 item} other { items}} + Ezin duzu hautatu {maxItems, plural, =1 {elementu bat} other { elementu}} baino gehiago src/app/shared/shared-forms/select/select-checkbox-all.component.ts84 Add a new option - Add a new option + Gehitu aukera berria src/app/shared/shared-forms/select/select-checkbox.component.ts29 Custom value... - Custom value... + Balio pertsonalizatua... src/app/shared/shared-forms/select/select-custom-value.component.ts70 @@ -11518,7 +11334,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Sun - Sun + Ig. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 20 @@ -11528,7 +11344,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Mon - Mon + Al. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 21 @@ -11538,7 +11354,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Tue - Tue + Ar. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 22 @@ -11548,7 +11364,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Wed - Wed + Az. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 23 @@ -11558,7 +11374,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Thu - Thu + Og. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 24 @@ -11568,7 +11384,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Fri - Fri + Or. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 25 @@ -11578,7 +11394,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Sat - Sat + Lr. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 26 @@ -11588,7 +11404,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Su - Su + Ig. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 30 @@ -11598,7 +11414,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Mo - Mo + Al. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 31 @@ -11608,7 +11424,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Tu - Tu + Ar. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 32 @@ -11618,7 +11434,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular We - We + Az. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 33 @@ -11628,7 +11444,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Th - Th + Og. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 34 @@ -11638,7 +11454,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Fr - Fr + Or. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 35 @@ -11648,7 +11464,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Sa - Sa + Lr. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 36 @@ -11718,7 +11534,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Jan - Jan + Urt. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 55 @@ -11728,7 +11544,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Feb - Feb + Ots. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 56 @@ -11738,7 +11554,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Mar - Mar + Mar. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 57 @@ -11748,7 +11564,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Apr - Apr + Api. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 58 @@ -11758,7 +11574,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular May - May + Mai. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 59 @@ -11768,7 +11584,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Jun - Jun + Eka. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 60 @@ -11778,7 +11594,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Jul - Jul + Uzt. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 61 @@ -11788,7 +11604,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Aug - Aug + Abu. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 62 @@ -11798,7 +11614,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Sep - Sep + Ira. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 63 @@ -11808,7 +11624,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Oct - Oct + Urr. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 64 @@ -11818,7 +11634,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Nov - Nov + Aza. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 65 @@ -11828,7 +11644,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Dec - Dec + Abe. src/app/+videos/+video-edit/shared/i18n-primeng-calendar.service.ts 66 @@ -11849,44 +11665,44 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Instance languages - Instance languages + Instantziako hizkuntzak src/app/+videos/+video-edit/shared/video-edit.component.ts231 All languages - All languages + Hizkuntza guztiak src/app/+videos/+video-edit/shared/video-edit.component.ts232 src/app/shared/shared-forms/select/select-languages.component.ts25 Hidden - Hidden + Ezkutatuta src/app/shared/shared-instance/instance-features-table.component.ts52 Blurred with confirmation request - Blurred with confirmation request + Lausotuta onarpen-eskaerarekin src/app/shared/shared-instance/instance-features-table.component.ts53 Displayed - Displayed + Bistaratuta src/app/shared/shared-instance/instance-features-table.component.ts54 src/app/shared/shared-video-miniature/video-filters.model.ts248 Disabled - Disabled + Desgaituta src/app/shared/shared-instance/instance-features-table.component.ts60 Requires approval by moderators - Requires approval by moderators + Moderatzaileen onarpena behar da src/app/shared/shared-instance/instance-features-table.component.ts61 Enabled - Enabled + Gaituta src/app/shared/shared-instance/instance-features-table.component.ts63 @@ -11922,17 +11738,17 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Accepted follows - Accepted follows + Onartutako jarraitzaileak src/app/shared/shared-instance/instance-follow.service.ts146 Rejected follows - Rejected follows + Baztertutako jarraitzaileak src/app/shared/shared-instance/instance-follow.service.ts150 Pending follows - Pending follows + Zain dauden jarraitzaileak src/app/shared/shared-instance/instance-follow.service.ts154 @@ -11977,14 +11793,12 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Close search - Close search + Itxi bilaketa src/app/shared/shared-main/misc/simple-search-input.component.html17 User banned. - - erabiltzailea debekatuta. - + erabiltzailea debekatuta. src/app/shared/shared-moderation/user-ban-modal.component.ts75 @@ -11994,26 +11808,22 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Ban "" - Ban "" + Debekatu "" src/app/shared/shared-moderation/user-ban-modal.component.ts97 Do you really want to unban ? - Ziur zaude - erabiltzaileari debekua kendu nahi diozula? - + Ziur zaude erabiltzaileari debekua kendu nahi diozula? src/app/shared/shared-moderation/user-moderation-dropdown.component.ts83 User unbanned. - - erabiltzaileari debekua kendu zaio. - + erabiltzaileari debekua kendu zaio. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts89 If you remove this user, you won't be able to create another user or channel with <strong></strong> username! - If you remove this user, you won't be able to create another user or channel with <strong></strong> username! + Erabiltzaile hau kentzen baduzu, ezin izango duzu sortu <strong></strong> erabiltzailea duen erabiltzaile edo kanal bat. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts 104 @@ -12021,15 +11831,13 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Delete - Delete + Ezabatu src/app/shared/shared-moderation/user-moderation-dropdown.component.ts105 src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts236 User deleted. - - erabiltzailea ezabatuta. - + erabiltzailea ezabatuta. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts111 @@ -12039,9 +11847,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Account muted. - - kontua mutututa. - + kontua mutututa. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts135 src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts268 @@ -12055,98 +11861,88 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Account muted by the instance. - - kontua instantziak mutututa. - + kontua instantziak mutututa. src/app/shared/shared-abuse-list/abuse-list-table.component.ts431 src/app/shared/shared-moderation/user-moderation-dropdown.component.ts191 Mute server - Mute server + Mututu zerbitzaria src/app/shared/shared-abuse-list/abuse-list-table.component.ts319 Server muted by the instance. - Server - muted by the instance. - + zerbitzaria mututu du instantziak. src/app/shared/shared-abuse-list/abuse-list-table.component.ts443 Add a message to communicate with the reporter - Add a message to communicate with the reporter + Gehitu mezu bat salatzailearekin harremanetan jartzeko src/app/shared/shared-abuse-list/abuse-message-modal.component.ts101 Add a message to communicate with the moderation team - Add a message to communicate with the moderation team + Gehitu mezu bat moderazio-taldearekin harremanetan jartzeko src/app/shared/shared-abuse-list/abuse-message-modal.component.ts104 Account unmuted by the instance. - - kontua instantziak desmutututa. - + kontua instantziak desmutututa. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts205 Instance muted by the instance. - - instantzia instantziak mutututa. - + instantzia instantziak mutututa. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts219 Instance unmuted by the instance. - - kontua instantziak desmutututa. - + instantzia instantziak desmutututa. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts233 Are you sure you want to remove all the comments of this account? - Are you sure you want to remove all the comments of this account? + Ziur kontu honen iruzkin guztiak kendu nahi dituzula? src/app/shared/shared-moderation/user-moderation-dropdown.component.ts244 Delete account comments - Delete account comments + Ezabatu kontuaren iruzkinak src/app/shared/shared-moderation/user-moderation-dropdown.component.ts245 Will remove comments of this account (may take several minutes). - Will remove comments of this account (may take several minutes). + Kontu honen iruzkinak kenduko dira (minutu batzuk har ditzake). src/app/shared/shared-moderation/user-moderation-dropdown.component.ts251 My account moderation - My account moderation + Nire kontuaren moderazioa src/app/shared/shared-moderation/user-moderation-dropdown.component.ts291 Edit user - Edit user + Editatu erabiltzailea src/app/shared/shared-moderation/user-moderation-dropdown.component.ts340 Change quota, role, and more. - Change quota, role, and more. + Aldatu kuota, funtzioa eta gehiago. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts341 Delete user - Delete user + Ezabatu erabiltzailea src/app/shared/shared-moderation/user-moderation-dropdown.component.ts345 Unban user - Unban user + Kendu debekua erabiltzaileari src/app/shared/shared-moderation/user-moderation-dropdown.component.ts357 Allow the user to login and create videos/comments again - Allow the user to login and create videos/comments again + Onartu erabiltzaileari saioa hastea eta bideoak/iruzkinak sortzea berriz src/app/shared/shared-moderation/user-moderation-dropdown.component.ts358 @@ -12157,7 +11953,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hide any content from that user from you. - Hide any content from that user from you. + Ezkutatu erabiltzaile horren edozein eduki zuri. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts297 @@ -12168,7 +11964,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Show back content from that user for you. - Show back content from that user for you. + Erakutsi erabiltzaile horren edukia zuri. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts303 @@ -12179,7 +11975,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Hide any content from that instance for you. - Hide any content from that instance for you. + Ezkutatu instantzia horretako edozein eduki zuri. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts309 @@ -12189,32 +11985,32 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Show back content from that instance for you. - Show back content from that instance for you. + Erakutsi instantzia horren edukia zuri. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts315 Remove comments from your videos - Remove comments from your videos + Kendu bideoen iruzkinak src/app/shared/shared-moderation/user-moderation-dropdown.component.ts320 Remove comments made by this account on your videos. - Remove comments made by this account on your videos. + Kendu kontu honen iruzkinak bideoetatik. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts321 Hide any content from that user from you, your instance and its users. - Hide any content from that user from you, your instance and its users. + Ezkutatu erabiltzaile horren edozein eduki zure instantziari, bere erabiltzaileei eta zuri. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts375 Show this user's content to the users of this instance again. - Show this user's content to the users of this instance again. + Erakutsi erabiltzaile honen edukia instantzia honetako erabiltzaileei berriz. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts381 Hide any content from that instance from you, your instance and its users. - Hide any content from that instance from you, your instance and its users. + Ezkutatu instantzia horretako edozein eduki zure instantziari, bere erabiltzaileei eta zuri. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts393 @@ -12224,27 +12020,27 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Show back content from that instance for you, your instance and its users. - Show back content from that instance for you, your instance and its users. + Erakutsi instantzia horretako edukia zure instantziari, bere erabiltzaileei eta zuri. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts399 Remove comments from your instance - Remove comments from your instance + Kendu instantziako iruzkinak src/app/shared/shared-moderation/user-moderation-dropdown.component.ts409 Remove comments made by this account from your instance. - Remove comments made by this account from your instance. + Kendu kontu honek eginiko iruzkinak instantziatik. src/app/shared/shared-moderation/user-moderation-dropdown.component.ts410 Instance moderation - Instance moderation + Instantziaren moderazioa src/app/shared/shared-moderation/user-moderation-dropdown.component.ts419 Block videos - Block videos + Blokeatu bideo src/app/shared/shared-moderation/video-block.component.html 4 @@ -12252,47 +12048,47 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Violent or repulsive - Violent or repulsive + Mingarria edo nazkagarria src/app/shared/shared-moderation/abuse.service.ts124 Contains offensive, violent, or coarse language or iconography. - Contains offensive, violent, or coarse language or iconography. + Hizkuntza edo ikonografia mingarria, zakarra edo lizuna du. src/app/shared/shared-moderation/abuse.service.ts125 Hateful or abusive - Hateful or abusive + Iguingarria edo iraingarria src/app/shared/shared-moderation/abuse.service.ts129 Contains abusive, racist or sexist language or iconography. - Contains abusive, racist or sexist language or iconography. + Hizkuntza edo ikonografia iraingarri, arrazista edo sexista du. src/app/shared/shared-moderation/abuse.service.ts130 Spam, ad or false news - Spam, ad or false news + Spam, iragarki edo albiste faltsuak src/app/shared/shared-moderation/abuse.service.ts134 Contains marketing, spam, purposefully deceitful news, or otherwise misleading thumbnail/text/tags. Please provide reputable sources to report hoaxes. - Contains marketing, spam, purposefully deceitful news, or otherwise misleading thumbnail/text/tags. Please provide reputable sources to report hoaxes. + Marketin, spam, apropos eginiko albiste faltsuak edo, bestela, miniatura/testu/etiketa okerrak ditu. Eman iturburu fidagarriak iruzurrak salatzeko. src/app/shared/shared-moderation/abuse.service.ts136 Privacy breach or doxxing - Privacy breach or doxxing + Pribatutasunaren urraketa edo doxxing src/app/shared/shared-moderation/abuse.service.ts140 Contains personal information that could be used to track, identify, contact or impersonate someone (e.g. name, address, phone number, email, or credit card details). - Contains personal information that could be used to track, identify, contact or impersonate someone (e.g. name, address, phone number, email, or credit card details). + Jarraipena egiteko, identifikatzeko, harremanetan jartzeko edo norbaiten identitatea lapurtzeko erabil daitekeen informazio pertsonala du (adibidez: izena, helbidea, telefono-zenbakia edo kreditu-txartelaren xehetasunak). src/app/shared/shared-moderation/abuse.service.ts142 Infringes your copyright wrt. the regional laws with which the server must comply. - Infringes your copyright wrt. the regional laws with which the server must comply. + Zerbitzariak bete behar dituen eskualdeko legeen egile-eskubideak hausten ditu. src/app/shared/shared-moderation/abuse.service.ts147 @@ -12302,7 +12098,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Anything not included in the above that breaks the terms of service, code of conduct, or general rules in place on the server. - Anything not included in the above that breaks the terms of service, code of conduct, or general rules in place on the server. + Aurrekoak barne hartu ez duen eta zerbitzarian indarrean dauden zerbitzu-baldintzak, jokabide-kodea edo arau orokorrak hausten duen edozerk. src/app/shared/shared-moderation/abuse.service.ts153 @@ -12324,9 +12120,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Too many attempts, please try again after minutes. - Saiakera gehiegi, saiatu berriro geroago, - minutu igarotakoan. - + Saiakera gehiegi, saiatu berriro minutu igarotakoan. src/app/core/rest/rest-extractor.service.ts130 @@ -12369,9 +12163,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Subscribed to . You will be notified of all their new videos. - Subscribed to - . You will be notified of all their new videos. - + kontura harpidetu zara. Bideo berri guztien jakinarazpenak jasoko dituzu. src/app/shared/shared-user-subscription/subscribe-button.component.ts113 @@ -12381,9 +12173,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Unsubscribed from all channels of - Unsubscribed from all channels of - - + kontuaren kanal guztietatik harpidetza kendu duzu src/app/shared/shared-user-subscription/subscribe-button.component.ts142 @@ -12424,10 +12214,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Video added in at timestamps - Video added in - at timestamps - - + Bideo hemen gehitu da: . Denbora-zigilu hauetan: . src/app/shared/shared-video-playlist/video-add-to-playlist.component.ts379 @@ -12443,18 +12230,18 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Starts at - Starts at + Hemen hasten da: src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts152 src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts155 Stops at - Stops at + Hemen gelditzen da: src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts153 and stops at - and stops at + eta hemen gelditzen da: src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts155 @@ -12840,7 +12627,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Reported part - Reported part + Salatutako alderdia src/app/shared/shared-abuse-list/abuse-details.component.html74 @@ -13218,68 +13005,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Ireki/Itxi pantaila osoa - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Erreproduzitu/Gelditu bideoa - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mututu/desmututu bideoa - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Saltatu bideoaren portzentaje batera: 0 %0 da eta 9 %90 da - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Igo bolumena - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Jaitsi bolumena - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Atzeratu bideoa - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Aurreratu bideoa - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Handiagotu erreproduzitze-abiadura - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Murriztu erreproduzitze-abiadura - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Nabigatu bideoan aurreko koadroraino - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Nabigatu bideoan hurrengo koadroraino - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Txandakatu antzoki modua - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Gehitu bideoa gogokoetara @@ -13380,7 +13167,7 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Trending videos - Pil-pilean dauden bideoak + Joeran dauden bideoak src/app/core/menu/menu.service.ts139 diff --git a/client/src/locale/angular.fa-IR.xlf b/client/src/locale/angular.fa-IR.xlf index 9fe1168da..f62ad8ee2 100644 --- a/client/src/locale/angular.fa-IR.xlf +++ b/client/src/locale/angular.fa-IR.xlf @@ -9772,7 +9772,7 @@ The link will expire within 1 hour. مشترک‌شدن حساب‌کاربری - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS لیست‌های پخش @@ -12882,67 +12882,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen ورود / خروج از حالت تمام صفحه - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video پخش / مکث ویدئو - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video بی صدا / با صدا کردن ویدیو - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% پرش به جلو به صورت درصدی : عدد 0 همان 0% و 9 همان 90% است - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume افزایش حجم صدا - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume کاهش حجم صدا - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward جستجوی ویدئو به سمت جلو - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward جستجوی ویدئو به سمت عقب - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate افزایش سرعت پخش - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate کاهش سرعت پخش - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame حرکت در ویدئو به فریم قبلی - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame حرکت در ویدئو به فریم بعدی - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode تغییر حالت پخش - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video پسندیدن ویدئو diff --git a/client/src/locale/angular.fi-FI.xlf b/client/src/locale/angular.fi-FI.xlf index 3d59cffa0..9f5d2d7de 100644 --- a/client/src/locale/angular.fi-FI.xlf +++ b/client/src/locale/angular.fi-FI.xlf @@ -9782,7 +9782,7 @@ The link will expire within 1 hour. Tilaa käyttäjä - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS SOITTOLISTAT @@ -12881,67 +12881,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Siirry tai poistu koko ruudun tilasta - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Toista tai pysäytä video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mykistä tai poista mykistys - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Hyppää prosenttiin videosta: 0 on 0% ja 9 on 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Lisää äänenvoimakkuutta - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Alenna äänenvoimakkuutta - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Kelaa videota eteenpäin - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Kelaa videota taaksepäin - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Nopeuta videontoistoa - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Hidasta videontoistoa - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Siirry aikaisempaan kehykseen - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Siirry seuraavaan kehykseen - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Teatteritila - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Tykkää videosta diff --git a/client/src/locale/angular.fr-FR.xlf b/client/src/locale/angular.fr-FR.xlf index 18b424073..579e02beb 100644 --- a/client/src/locale/angular.fr-FR.xlf +++ b/client/src/locale/angular.fr-FR.xlf @@ -9839,7 +9839,7 @@ The link will expire within 1 hour. S'abonner à ce compte - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS LISTES DE LECTURE @@ -12947,67 +12947,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Entrer/sortir du plein écran - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Lecture/Pause de la vidéo - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Sourdine/reprise du son de la vidéo - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Passer à un pourcentage de la vidéo : 0 est 0% et 9 est 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Augmenter le volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Diminuer le volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Faire avancer la vidéo - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Faire reculer la vidéo - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Augmenter la vitesse de lecture - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Diminuer la vitesse de lecture - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Naviguer dans la vidéo jusqu'à l'image précédente - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Naviguer dans la vidéo jusqu'à l'image suivante - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Basculer le mode théâtre - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video J’aime cette vidéo diff --git a/client/src/locale/angular.gd.xlf b/client/src/locale/angular.gd.xlf index 6095471d9..faa8f9dd1 100644 --- a/client/src/locale/angular.gd.xlf +++ b/client/src/locale/angular.gd.xlf @@ -9774,7 +9774,7 @@ The link will expire within 1 hour. Fo-sgrìobh air a’ chunntas - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS LIOSTAICHEAN-CLUICH @@ -12884,67 +12884,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Tòisich air/Fàg an làn-sgrìn - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Cluich/Cuir ’na stad a’ video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mùch/Dì-mhùch a’ video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Geàrr leum gu ceudad a’ video: Thèid 0 gu 0% ’s 9 gu 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Cuir an àirde an fhuaim - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Lùghdaich àirde na fuaime - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Sir air adhart sa video - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Sir air ais sa video - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Dèan a’ chluich nas luaithe - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Cuir maille air a’ chluich - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Seòl sa video dhan fhrèam roimhe - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Seòl sa video dhan ath-fhrèam - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toglaich modh an taighe-chluich - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Comharraich gur toigh leat a’ video diff --git a/client/src/locale/angular.gl-ES.xlf b/client/src/locale/angular.gl-ES.xlf index b85da08d5..b446b8b98 100644 --- a/client/src/locale/angular.gl-ES.xlf +++ b/client/src/locale/angular.gl-ES.xlf @@ -3282,12 +3282,12 @@ The link will expire within 1 hour. Subscribe to all channels - Subscríbete ós canais + Subscríbete ás canles src/app/shared/shared-user-subscription/subscribe-button.component.html11 channels subscribed - subscrita ós canais + subscrita ás canles src/app/shared/shared-user-subscription/subscribe-button.component.html13 @@ -9850,9 +9850,9 @@ The link will expire within 1 hour. Subscribe to the account Subscribirse á conta - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS LISTAXES @@ -12941,68 +12941,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Activar/desactivar pantalla completa - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Activar/Pausar o vídeo - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Activar/Desactivar audio - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Ir a unha porcentaxe do vídeo: 0 é 0% e 9 é 90% - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Aumentar volume - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Diminuír volume - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Avanzar o vídeo - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Retroceder no vídeo - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Aumentar taxa de reprodución - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Diminuír taxa de reprodución - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Ir ao fotograma anterior no vídeo - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Ir ao seguinte fotograma no vídeo - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Activar modo teatro - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Gústame o vídeo diff --git a/client/src/locale/angular.hr.xlf b/client/src/locale/angular.hr.xlf index 13e748ec8..59cbe4995 100644 --- a/client/src/locale/angular.hr.xlf +++ b/client/src/locale/angular.hr.xlf @@ -6920,7 +6920,7 @@ The link will expire within 1 hour. Pretplatiti se na račun - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTE @@ -8951,67 +8951,67 @@ The link will expire within 1 hour. Enter/exit fullscreen Pokreni/Prekini cjeloekranski prikaz - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Pokreni/Zaustavi video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Isključi/Uključi zvuk videa - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Preskoči na postotak videa: 0 je 0 %, 9 je 90 % - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Povećaj glasnoću - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Smanji glasnoću - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Premotaj video prema naprijed - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Premotaj video prema natrag - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Povećaj brzinu reprodukcije - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Smanji brzinu reprodukcije - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Prijeđi na prethodni kadar videa - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Prijeđi na sljedeći kadar videa - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Uključi/Isključi kazališni modus - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Označi video da ti se sviđa diff --git a/client/src/locale/angular.hu-HU.xlf b/client/src/locale/angular.hu-HU.xlf index 8fc12bcb4..891497586 100644 --- a/client/src/locale/angular.hu-HU.xlf +++ b/client/src/locale/angular.hu-HU.xlf @@ -9824,7 +9824,7 @@ The link will expire within 1 hour. Feliratkozás a fiókra - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS LEJÁTSZÁSI LISTÁK @@ -12931,67 +12931,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video A videó kedvelése diff --git a/client/src/locale/angular.id.xlf b/client/src/locale/angular.id.xlf index d1f578bec..2b3844697 100644 --- a/client/src/locale/angular.id.xlf +++ b/client/src/locale/angular.id.xlf @@ -10549,7 +10549,7 @@ Cancel - Batal + Batalkan src/app/+videos/+video-watch/video-watch.component.ts 628 @@ -16444,7 +16444,7 @@ - + src/app/shared/shared-video/video-views-counter.component.html 7,8 diff --git a/client/src/locale/angular.is.xlf b/client/src/locale/angular.is.xlf index c015f2980..82de6746c 100644 --- a/client/src/locale/angular.is.xlf +++ b/client/src/locale/angular.is.xlf @@ -8378,7 +8378,7 @@ The link will expire within 1 hour. Gerast áskrifandi að aðgangnum - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS SPILUNARLISTAR @@ -10504,67 +10504,67 @@ The link will expire within 1 hour. Enter/exit fullscreen Fara í/Hætta í skjáfylli - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Spila/Setja myndskeið í bið - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Þagga/Kveikja á hljóði - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Hoppa yfir á prósentu myndskeiðsins: 0 er 0% og 9 er 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Auka hljóðstyrk - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Minnka hljóðstyrk - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Leita áfram í myndskeiðinu - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Leita afturábak í myndskeiðinu - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Auka afspilunarhraða - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Minnka afspilunarhraða - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Fara á fyrri ramma í myndskeiðinu - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Fara á næsta ramma í myndskeiðinu - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Víxla bíóham af/á - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Discover Uppgötva diff --git a/client/src/locale/angular.it-IT.xlf b/client/src/locale/angular.it-IT.xlf index dc8dae152..50bb55f30 100644 --- a/client/src/locale/angular.it-IT.xlf +++ b/client/src/locale/angular.it-IT.xlf @@ -9815,7 +9815,7 @@ The link will expire within 1 hour. Iscriversi all'account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -12891,67 +12891,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Mi piace diff --git a/client/src/locale/angular.ja-JP.xlf b/client/src/locale/angular.ja-JP.xlf index e6e980d63..ce88950b5 100644 --- a/client/src/locale/angular.ja-JP.xlf +++ b/client/src/locale/angular.ja-JP.xlf @@ -9814,9 +9814,9 @@ The link will expire within 1 hour. Subscribe to the account アカウントを購読 - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS プレイリスト @@ -12939,68 +12939,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen 全画面モードを切り替える - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video 動画の再生・停止 - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video 動画のミュート・ミュート解除 - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% パーセンテージを指定してスキップします。0 は 0%、9 は 90% のことを指します - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume 音量を上げる - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume 音量を下げる - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward 動画を早送りする - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward 動画を巻き戻す - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate 再生速度を速くする - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate 再生速度を遅くする - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame 動画の前のフレームへ移動する - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame 動画の次のフレームへ移動する - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode シアターモードにする - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video 動画を高評価 diff --git a/client/src/locale/angular.jbo.xlf b/client/src/locale/angular.jbo.xlf index 2f782c023..101411361 100644 --- a/client/src/locale/angular.jbo.xlf +++ b/client/src/locale/angular.jbo.xlf @@ -8728,7 +8728,7 @@ The link will expire within 1 hour. jersi pe'a le pilno - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTSPLAYLISTS src/app/+video-channels/video-channels.component.ts90 @@ -11421,43 +11421,43 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreenEnter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the videoPlay/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the videoMute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90%Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volumeIncrease the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volumeDecrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forwardSeek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backwardSeek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rateIncrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rateDecrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frameNavigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frameNavigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater modeToggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 diff --git a/client/src/locale/angular.kab.xlf b/client/src/locale/angular.kab.xlf index 49c92cb84..105e0cf1a 100644 --- a/client/src/locale/angular.kab.xlf +++ b/client/src/locale/angular.kab.xlf @@ -9190,7 +9190,7 @@ The link will expire within 1 hour. Multeɣ ɣer umiḍan - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS TIBDARIN N TΓURI @@ -12083,67 +12083,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Teεǧeb-iyi tavidyut diff --git a/client/src/locale/angular.ko-KR.xlf b/client/src/locale/angular.ko-KR.xlf index b0dff7db8..0a6d57ede 100644 --- a/client/src/locale/angular.ko-KR.xlf +++ b/client/src/locale/angular.ko-KR.xlf @@ -10153,7 +10153,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -13296,67 +13296,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Like the video diff --git a/client/src/locale/angular.lt-LT.xlf b/client/src/locale/angular.lt-LT.xlf index 94294a797..acb22bc7e 100644 --- a/client/src/locale/angular.lt-LT.xlf +++ b/client/src/locale/angular.lt-LT.xlf @@ -8660,7 +8660,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTSPLAYLISTS src/app/+video-channels/video-channels.component.ts90 @@ -11349,43 +11349,43 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreenEnter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the videoPlay/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the videoMute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90%Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volumeIncrease the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volumeDecrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forwardSeek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backwardSeek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rateIncrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rateDecrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frameNavigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frameNavigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater modeToggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 diff --git a/client/src/locale/angular.nb-NO.xlf b/client/src/locale/angular.nb-NO.xlf index 8cf09a335..684e46635 100644 --- a/client/src/locale/angular.nb-NO.xlf +++ b/client/src/locale/angular.nb-NO.xlf @@ -9750,7 +9750,7 @@ The link will expire within 1 hour. Abonner på kontoen - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS SPILLELISTER @@ -12877,67 +12877,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Spill av/pause videoen - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Slå av/på lyden for videoen - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Øk volumet - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Reduser volumet - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Øk avspillingshastigheten - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Reduser avspillingshastigheten - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Veksle kinomodus - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Like the video diff --git a/client/src/locale/angular.nl-NL.xlf b/client/src/locale/angular.nl-NL.xlf index 28d99486a..328d6eaaf 100644 --- a/client/src/locale/angular.nl-NL.xlf +++ b/client/src/locale/angular.nl-NL.xlf @@ -9822,7 +9822,7 @@ Je kan nu al informatie toevoegen over deze video. Abonneren op account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS AFSPEELLIJSTEN @@ -12900,67 +12900,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Volledig scherm openen/verlaten - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video De video afspelen/pauzeren - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Dempen/uitzetten van de video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Ga naar een percentage van de video: 0 is 0% en 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Verhoog het volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Verminder het volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Spoel de video vooruit - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Spoel de video terug - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Afspeelsnelheid verhogen - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Verminder afspeelsnelheid - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigeer in de video naar het vorige frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigeer in de video naar het volgende frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Theatermodus aan- of uitzetten - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video De video leuk vinden diff --git a/client/src/locale/angular.nn.xlf b/client/src/locale/angular.nn.xlf index 92d3ce2d4..adca412dc 100644 --- a/client/src/locale/angular.nn.xlf +++ b/client/src/locale/angular.nn.xlf @@ -6087,7 +6087,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS SPELELISTER @@ -7761,67 +7761,67 @@ The link will expire within 1 hour. Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video diff --git a/client/src/locale/angular.oc.xlf b/client/src/locale/angular.oc.xlf index 539a3fa29..07af4deb3 100644 --- a/client/src/locale/angular.oc.xlf +++ b/client/src/locale/angular.oc.xlf @@ -9978,7 +9978,7 @@ The link will expire within 1 hour. S’abonar al compte - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -13043,67 +13043,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Aimar la vidèo diff --git a/client/src/locale/angular.pl-PL.xlf b/client/src/locale/angular.pl-PL.xlf index 5642fc9d5..279fa7e6f 100644 --- a/client/src/locale/angular.pl-PL.xlf +++ b/client/src/locale/angular.pl-PL.xlf @@ -9725,7 +9725,7 @@ The link will expire within 1 hour. Subskrybuj to konto - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTY @@ -12800,67 +12800,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Odtwarzanie/Pauza filmu - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Zwiększanie głośności - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Zmniejszanie głośności - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Zaznacz "Lubię to" diff --git a/client/src/locale/angular.pt-BR.xlf b/client/src/locale/angular.pt-BR.xlf index 9bfcab09d..e3190a56e 100644 --- a/client/src/locale/angular.pt-BR.xlf +++ b/client/src/locale/angular.pt-BR.xlf @@ -10017,7 +10017,7 @@ The link will expire within 1 hour. Inscreva-se na conta - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -13150,67 +13150,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Aumentar o volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Diminuir o volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Gostar do vídeo diff --git a/client/src/locale/angular.pt-PT.xlf b/client/src/locale/angular.pt-PT.xlf index e1bd450d1..64eb0ad4d 100644 --- a/client/src/locale/angular.pt-PT.xlf +++ b/client/src/locale/angular.pt-PT.xlf @@ -9347,7 +9347,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -12233,67 +12233,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Like the video diff --git a/client/src/locale/angular.ru-RU.xlf b/client/src/locale/angular.ru-RU.xlf index e3884808a..d4e04f1fa 100644 --- a/client/src/locale/angular.ru-RU.xlf +++ b/client/src/locale/angular.ru-RU.xlf @@ -529,7 +529,7 @@ Unlisted - Скрытый + Скрытое src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.html9 src/app/shared/shared-video-miniature/video-miniature.component.html7 @@ -3211,7 +3211,7 @@ The link will expire within 1 hour. Public - Общедоступный + Общедоступное src/app/+videos/+video-watch/shared/playlist/video-watch-playlist.component.html11 @@ -3419,7 +3419,7 @@ The link will expire within 1 hour. This live has not started yet. - Трансляция еще не началась. + Трансляция ещё не началась. src/app/+videos/+video-watch/shared/information/video-alert.component.html29 @@ -7789,7 +7789,7 @@ The link will expire within 1 hour. Password protected - Защищен паролем + Защищено паролем src/app/shared/shared-video-miniature/video-miniature.component.html9 src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.html25 @@ -9868,9 +9868,9 @@ The link will expire within 1 hour. Subscribe to the account Подписаться на аккаунт - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS ПЛЕЙЛИСТЫ @@ -12969,68 +12969,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Вход/выход из полноэкранного режима - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Воспроизвести/Приостановить видео - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Отключить/включить звук видео - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Перейти к проценту видео: 0 – 0%, 9 – 90% - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Увеличить громкость - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Уменьшить громкость - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Перемотать видео вперед - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Перемотать видео назад - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Увеличить скорость воспроизведения - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Уменьшить скорость воспроизведения - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Перейти к предыдущему кадру - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Перейти к следующему кадру - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Переключить режим театра - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Мне понравилось diff --git a/client/src/locale/angular.sk-SK.xlf b/client/src/locale/angular.sk-SK.xlf index ce46fb70f..d8903a51c 100644 --- a/client/src/locale/angular.sk-SK.xlf +++ b/client/src/locale/angular.sk-SK.xlf @@ -9808,9 +9808,9 @@ The link will expire within 1 hour. Subscribe to the account Odoberať účet - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS ZOZNAMY @@ -12927,68 +12927,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Zap/Vyp celoobrazovkový režim - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Spustí/Zastaví video - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Stíši/zapne zvuk - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Preskočí na percento videa: 0 je 0% a 9 je 90% - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Zvýši hlasitosť - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Zníži hlasitosť - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Prejsť dopredu vo videu - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Prejsť dozadu vo videu - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Zvýšiť rýchlosť prehrávania - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Znížiť rýchlosť prehrávania - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Prejsť vo videu na predošlý snímok - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Prejsť vo videu na ďalší snímok - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Prepnúť režim kina - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Video sa mi páči diff --git a/client/src/locale/angular.sl-SI.xlf b/client/src/locale/angular.sl-SI.xlf index 4302ecefb..ea927a496 100644 --- a/client/src/locale/angular.sl-SI.xlf +++ b/client/src/locale/angular.sl-SI.xlf @@ -9719,7 +9719,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -12731,67 +12731,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Like the video diff --git a/client/src/locale/angular.sv-SE.xlf b/client/src/locale/angular.sv-SE.xlf index f97715e54..c600ca410 100644 --- a/client/src/locale/angular.sv-SE.xlf +++ b/client/src/locale/angular.sv-SE.xlf @@ -9743,7 +9743,7 @@ The link will expire within 1 hour. Prenumerera på kontot - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS SPELLISTOR @@ -12796,67 +12796,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Öppna/stäng fullskärm - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Spela/Pausa videon - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Slå av eller på videons ljud - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Hoppa till en procentandel av videon: 0 är 0% och 9 är 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Höj volymen - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Sänk volymen - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Hoppa framåt i videon - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Hoppa bakåt i videon - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Öka uppspelningshastigheten - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Minska uppspelningshastigheten - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Gå till videons föregående bildruta - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Gå till videons nästa bildruta - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Växla teaterläge - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Gilla videon diff --git a/client/src/locale/angular.ta.xlf b/client/src/locale/angular.ta.xlf index 727a2f5a9..a30202069 100644 --- a/client/src/locale/angular.ta.xlf +++ b/client/src/locale/angular.ta.xlf @@ -8730,7 +8730,7 @@ The link will expire within 1 hour. Subscribe to the account - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTSPLAYLISTS src/app/+video-channels/video-channels.component.ts90 @@ -11423,43 +11423,43 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreenEnter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the videoPlay/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the videoMute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90%Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volumeIncrease the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volumeDecrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forwardSeek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backwardSeek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rateIncrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rateDecrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frameNavigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frameNavigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater modeToggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 diff --git a/client/src/locale/angular.th-TH.xlf b/client/src/locale/angular.th-TH.xlf index 0df404855..2fe3e156a 100644 --- a/client/src/locale/angular.th-TH.xlf +++ b/client/src/locale/angular.th-TH.xlf @@ -9965,7 +9965,7 @@ The link will expire within 1 hour. ติดตามบัญชี - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS เพลย์ลิสต์ @@ -13069,67 +13069,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen เข้าหรือออกจากโหมดเต็มหน้าจอ - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video เล่นหรือหยุดพักวิดีโอ - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video ปิดหรือเปิดเสียงวิดีโอ - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume เพิ่มระดับเสียง - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume ลดระดับเสียง - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate เพิ่มความเร็วการเล่น - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate ลดความเร็วการเล่น - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode เปิด-ปิดโหมดโรงภาพยนตร์ - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video ชอบวิดีโอ diff --git a/client/src/locale/angular.tok.xlf b/client/src/locale/angular.tok.xlf index 9a2e33a45..e4d0c8c7a 100644 --- a/client/src/locale/angular.tok.xlf +++ b/client/src/locale/angular.tok.xlf @@ -7383,7 +7383,7 @@ The link will expire within 1 hour. mi wile lukin e sitelen sin tan lipu ni - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS KULUPU SITELEN @@ -9409,67 +9409,67 @@ The link will expire within 1 hour. Enter/exit fullscreen o pana e sitelen lon ale/lili pi ilo mi - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video o open/pini e tawa - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video o open/pini e kalama - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% o tawa kipisi sitelen. 0 la mi tawa open. 9 la mi tawa kipisi nanpa 9 pi kipisi 10 - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume o suli e kalama - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume o lili e kalama - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward o tawa tenpo kama - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward o tawa tenpo pini - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate o suli e wawa tawa - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate o lili e wawa tawa - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame o tawa sitelen pini pi tawa ala - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame o tawa sitelen kama pi tawa ala - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode o suli e sitelen - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Discover kulupu diff --git a/client/src/locale/angular.tr-TR.xlf b/client/src/locale/angular.tr-TR.xlf index f15a13485..8e223f1bf 100644 --- a/client/src/locale/angular.tr-TR.xlf +++ b/client/src/locale/angular.tr-TR.xlf @@ -9989,7 +9989,7 @@ The link will expire within 1 hour. Hesaba abone olundu - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS PLAYLISTS @@ -13105,67 +13105,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Enter/exit fullscreen - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Play/Pause the video - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Mute/unmute the video - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Skip to a percentage of the video: 0 is 0% and 9 is 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Increase the volume - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Decrease the volume - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Seek the video forward - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Seek the video backward - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Increase playback rate - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Decrease playback rate - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Navigate in the video to the previous frame - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Navigate in the video to the next frame - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Toggle theater mode - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Videoyu beğen diff --git a/client/src/locale/angular.uk-UA.xlf b/client/src/locale/angular.uk-UA.xlf index 4f2df0884..4d1726244 100644 --- a/client/src/locale/angular.uk-UA.xlf +++ b/client/src/locale/angular.uk-UA.xlf @@ -9838,9 +9838,9 @@ The link will expire within 1 hour. Subscribe to the account Підписатися на обліковий запис - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS ДОБІРКИ @@ -12929,68 +12929,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Вхід/вихід у повноекранний режим - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Відтворити/призупинити відео - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Вимкнути/увімкнути звук відео - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Перейти до відсотка відео: 0 — це 0%, а 9 — це 90% - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Підвищити гучність - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Понизити гучність - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Перемотати відео вперед - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Перемотати відео назад - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Підвищити швидкість відтворення - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Знизити швидкість відтворення - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Перехід до попереднього кадру відео - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Перехід до наступного кадру відео - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Перемкнути режим театру - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Вподобати відео diff --git a/client/src/locale/angular.vi-VN.xlf b/client/src/locale/angular.vi-VN.xlf index 41d04cf6a..e6255124c 100644 --- a/client/src/locale/angular.vi-VN.xlf +++ b/client/src/locale/angular.vi-VN.xlf @@ -9822,9 +9822,9 @@ The link will expire within 1 hour. Subscribe to the account Theo dõi tài khoản này - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS DANH SÁCH PHÁT @@ -12949,68 +12949,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen Vào/thoát toàn màn hình - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video Phát/Ngừng video - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video Ẩn/Bỏ ẩn video - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% Tua nhanh thời lượng video: 0 là 0% và 9 là 90% - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume Tăng âm lượng - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume Giảm âm lượng - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward Tua tới video - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward Tua lùi video - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate Tăng tốc độ video - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate Giảm tốc độ video - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame Điều hướng video tới khung trước đó - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame Điều hướng video tới khung kế tiếp - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode Chế độ rạp chiếu - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video Thích video diff --git a/client/src/locale/angular.xlf b/client/src/locale/angular.xlf index e4e306bad..1c02d9f5b 100644 --- a/client/src/locale/angular.xlf +++ b/client/src/locale/angular.xlf @@ -10553,7 +10553,7 @@ The link will expire within 1 hour. src/app/+videos/+video-watch/video-watch.component.ts - 907 + 909 @@ -12922,91 +12922,91 @@ The link will expire within 1 hour. Enter/exit fullscreen src/app/+videos/+video-watch/video-watch.component.ts - 870 + 872 Play/Pause the video src/app/+videos/+video-watch/video-watch.component.ts - 871 + 873 Mute/unmute the video src/app/+videos/+video-watch/video-watch.component.ts - 872 + 874 Increase the volume src/app/+videos/+video-watch/video-watch.component.ts - 874 + 876 Decrease the volume src/app/+videos/+video-watch/video-watch.component.ts - 875 + 877 Toggle theater mode src/app/+videos/+video-watch/video-watch.component.ts - 880 + 882 Skip to a percentage of the video: 0 is 0% and 9 is 90% src/app/+videos/+video-watch/video-watch.component.ts - 887 + 889 Seek the video forward src/app/+videos/+video-watch/video-watch.component.ts - 889 + 891 Seek the video backward src/app/+videos/+video-watch/video-watch.component.ts - 890 + 892 Increase playback rate src/app/+videos/+video-watch/video-watch.component.ts - 892 + 894 Decrease playback rate src/app/+videos/+video-watch/video-watch.component.ts - 893 + 895 Navigate in the video to the previous frame src/app/+videos/+video-watch/video-watch.component.ts - 895 + 897 Navigate in the video to the next frame src/app/+videos/+video-watch/video-watch.component.ts - 896 + 898 diff --git a/client/src/locale/angular.zh-Hans-CN.xlf b/client/src/locale/angular.zh-Hans-CN.xlf index def2163ea..cebf3fa54 100644 --- a/client/src/locale/angular.zh-Hans-CN.xlf +++ b/client/src/locale/angular.zh-Hans-CN.xlf @@ -9795,7 +9795,7 @@ The link will expire within 1 hour. 订阅此帐户 - src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts907 + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS 播放列表 @@ -12920,67 +12920,67 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen 进入/退出全屏 - src/app/+videos/+video-watch/video-watch.component.ts870 + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video 播放/暂停视频 - src/app/+videos/+video-watch/video-watch.component.ts871 + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video 静音/取消静音视频 - src/app/+videos/+video-watch/video-watch.component.ts872 + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% 跳到视频的百分比处:0 为 0%,9 为 90% - src/app/+videos/+video-watch/video-watch.component.ts887 + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume 增加音量 - src/app/+videos/+video-watch/video-watch.component.ts874 + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume 降低音量 - src/app/+videos/+video-watch/video-watch.component.ts875 + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward 快进视频 - src/app/+videos/+video-watch/video-watch.component.ts889 + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward 快退视频 - src/app/+videos/+video-watch/video-watch.component.ts890 + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate 提高播放速度 - src/app/+videos/+video-watch/video-watch.component.ts892 + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate 降低播放速度 - src/app/+videos/+video-watch/video-watch.component.ts893 + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame 转到视频的上一帧 - src/app/+videos/+video-watch/video-watch.component.ts895 + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame 转到视频的下一帧 - src/app/+videos/+video-watch/video-watch.component.ts896 + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode 切换影院模式 - src/app/+videos/+video-watch/video-watch.component.ts880 + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video 喜欢此视频 diff --git a/client/src/locale/angular.zh-Hant-TW.xlf b/client/src/locale/angular.zh-Hant-TW.xlf index 6d8d16ab8..b8d05061e 100644 --- a/client/src/locale/angular.zh-Hant-TW.xlf +++ b/client/src/locale/angular.zh-Hant-TW.xlf @@ -4993,7 +4993,7 @@ The link will expire within 1 hour. Prefer author display name in video miniature - 偏好影片縮途中的作者顯示名稱 + 偏好影片縮圖中的作者顯示名稱 src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html66 @@ -5325,7 +5325,7 @@ The link will expire within 1 hour. Signup requires approval by moderators - 註冊需要調解員核准 + 註冊需要審查員核准 src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html174 @@ -9868,9 +9868,9 @@ The link will expire within 1 hour. Subscribe to the account 訂閱帳號 - src/app/+video-channels/video-channels.component.ts84 - src/app/+videos/+video-watch/video-watch.component.ts907 - + + + src/app/+video-channels/video-channels.component.ts84src/app/+videos/+video-watch/video-watch.component.ts909 PLAYLISTS 播放清單 @@ -12971,68 +12971,68 @@ Ensure you have correctly configured PeerTube (config/ directory), in particular Enter/exit fullscreen 進入/離開全螢幕 - src/app/+videos/+video-watch/video-watch.component.ts870 - + + src/app/+videos/+video-watch/video-watch.component.ts872 Play/Pause the video 播放/暫停影片 - src/app/+videos/+video-watch/video-watch.component.ts871 - + + src/app/+videos/+video-watch/video-watch.component.ts873 Mute/unmute the video 靜音/取消靜音影片 - src/app/+videos/+video-watch/video-watch.component.ts872 - + + src/app/+videos/+video-watch/video-watch.component.ts874 Skip to a percentage of the video: 0 is 0% and 9 is 90% 跳至影片的百分比:0 為 0%,9 為 90% - src/app/+videos/+video-watch/video-watch.component.ts887 - + + src/app/+videos/+video-watch/video-watch.component.ts889 Increase the volume 增加音量 - src/app/+videos/+video-watch/video-watch.component.ts874 - + + src/app/+videos/+video-watch/video-watch.component.ts876 Decrease the volume 降低音量 - src/app/+videos/+video-watch/video-watch.component.ts875 - + + src/app/+videos/+video-watch/video-watch.component.ts877 Seek the video forward 向前快轉 - src/app/+videos/+video-watch/video-watch.component.ts889 - + + src/app/+videos/+video-watch/video-watch.component.ts891 Seek the video backward 向後快轉 - src/app/+videos/+video-watch/video-watch.component.ts890 - + + src/app/+videos/+video-watch/video-watch.component.ts892 Increase playback rate 提高播放速度 - src/app/+videos/+video-watch/video-watch.component.ts892 - + + src/app/+videos/+video-watch/video-watch.component.ts894 Decrease playback rate 降低播放速度 - src/app/+videos/+video-watch/video-watch.component.ts893 - + + src/app/+videos/+video-watch/video-watch.component.ts895 Navigate in the video to the previous frame 在影片中跳至上一個畫面 - src/app/+videos/+video-watch/video-watch.component.ts895 - + + src/app/+videos/+video-watch/video-watch.component.ts897 Navigate in the video to the next frame 在影片中跳至下一個畫面 - src/app/+videos/+video-watch/video-watch.component.ts896 - + + src/app/+videos/+video-watch/video-watch.component.ts898 Toggle theater mode 切換劇院模式 - src/app/+videos/+video-watch/video-watch.component.ts880 - + + src/app/+videos/+video-watch/video-watch.component.ts882 Like the video 喜歡此影片 diff --git a/client/src/locale/player.ar.json b/client/src/locale/player.ar.json index ee676176f..c2a0a9a83 100644 --- a/client/src/locale/player.ar.json +++ b/client/src/locale/player.ar.json @@ -56,6 +56,7 @@ "Cancel": "إلغاء", "Up Next": "Up Next", "Autoplay is suspended": "التشغيل التلقائي معلق", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "مشغل الصوت", "Video Player": "مشغل الفيديو", "Play": "شغل", diff --git a/client/src/locale/player.ca-ES.json b/client/src/locale/player.ca-ES.json index 3b83ff8b0..2465b247b 100644 --- a/client/src/locale/player.ca-ES.json +++ b/client/src/locale/player.ca-ES.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Reproductor d'àudio", "Video Player": "Reproductor de vídeo", "Play": "Reproduir", diff --git a/client/src/locale/player.cs-CZ.json b/client/src/locale/player.cs-CZ.json index a1514ab40..23852fb06 100644 --- a/client/src/locale/player.cs-CZ.json +++ b/client/src/locale/player.cs-CZ.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Hudební přehrávač", "Video Player": "Videopřehrávač", "Play": "Přehrát", diff --git a/client/src/locale/player.de-DE.json b/client/src/locale/player.de-DE.json index 0962722e3..916829881 100644 --- a/client/src/locale/player.de-DE.json +++ b/client/src/locale/player.de-DE.json @@ -56,6 +56,7 @@ "Cancel": "Abbrechen", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay ist unterbrochen", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Audio-Player", "Video Player": "Video-Player", "Play": "Wiedergeben", diff --git a/client/src/locale/player.el-GR.json b/client/src/locale/player.el-GR.json index 83a577826..1cd171f46 100644 --- a/client/src/locale/player.el-GR.json +++ b/client/src/locale/player.el-GR.json @@ -56,6 +56,7 @@ "Cancel": "Ακύρωση", "Up Next": "Up Next", "Autoplay is suspended": "Η αυτόματη αναπαραγωγή έχει ανασταλεί", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Αναπαραγωγή Ήχου", "Video Player": "Αναπαραγωγή Βίντεο", "Play": "Αναπαραγωγή", diff --git a/client/src/locale/player.en-US.json b/client/src/locale/player.en-US.json index 9ee76eeeb..05563d69a 100644 --- a/client/src/locale/player.en-US.json +++ b/client/src/locale/player.en-US.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Audio Player", "Video Player": "Video Player", "Play": "Play", diff --git a/client/src/locale/player.eo.json b/client/src/locale/player.eo.json index 426c9b2ea..57cf58df3 100644 --- a/client/src/locale/player.eo.json +++ b/client/src/locale/player.eo.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Sonludilo", "Video Player": "Filmludilo", "Play": "Ludi", diff --git a/client/src/locale/player.es-ES.json b/client/src/locale/player.es-ES.json index 48f035c76..a266ecad9 100644 --- a/client/src/locale/player.es-ES.json +++ b/client/src/locale/player.es-ES.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Reproductor de audio", "Video Player": "Reproductor de vídeo", "Play": "Reproducir", diff --git a/client/src/locale/player.eu-ES.json b/client/src/locale/player.eu-ES.json index 10d231d98..7287ecb81 100644 --- a/client/src/locale/player.eu-ES.json +++ b/client/src/locale/player.eu-ES.json @@ -56,6 +56,7 @@ "Cancel": "Utzi", "Up Next": "Up Next", "Autoplay is suspended": "Erreprodukzio automatikoa desgaituta dago", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Audio erreproduzigailua", "Video Player": "Bideo erreproduzigailua", "Play": "Erreproduzitu", diff --git a/client/src/locale/player.fa-IR.json b/client/src/locale/player.fa-IR.json index 2d1e7927d..8b3f4c169 100644 --- a/client/src/locale/player.fa-IR.json +++ b/client/src/locale/player.fa-IR.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "پخش‌کننده‌ی صدا", "Video Player": "پخش‌کننده‌ی ویدئو", "Play": "پخش", diff --git a/client/src/locale/player.fi-FI.json b/client/src/locale/player.fi-FI.json index 604dea0ea..f203b12a7 100644 --- a/client/src/locale/player.fi-FI.json +++ b/client/src/locale/player.fi-FI.json @@ -56,6 +56,7 @@ "Cancel": "Peruuta", "Up Next": "Seuraavaksi", "Autoplay is suspended": "Autoplay keskeytetty", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Audiosoitin", "Video Player": "Videosoitin", "Play": "Toista", diff --git a/client/src/locale/player.fr-FR.json b/client/src/locale/player.fr-FR.json index b1f821766..85e4466aa 100644 --- a/client/src/locale/player.fr-FR.json +++ b/client/src/locale/player.fr-FR.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Lecteur audio", "Video Player": "Lecteur vidéo", "Play": "Lecture", diff --git a/client/src/locale/player.gd.json b/client/src/locale/player.gd.json index e10265459..e42610408 100644 --- a/client/src/locale/player.gd.json +++ b/client/src/locale/player.gd.json @@ -56,6 +56,7 @@ "Cancel": "Sguir dheth", "Up Next": "Up Next", "Autoplay is suspended": "Chaidh a’ chluiche fhèin-obrachail a chur à rèim", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Cluicheadair fuaime", "Video Player": "Cluicheadair video", "Play": "Cluich", diff --git a/client/src/locale/player.gl-ES.json b/client/src/locale/player.gl-ES.json index 25aacdb34..3a8d656e1 100644 --- a/client/src/locale/player.gl-ES.json +++ b/client/src/locale/player.gl-ES.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Reprodutor de audio", "Video Player": "Reprodutor de vídeo", "Play": "Reproducir", diff --git a/client/src/locale/player.hr.json b/client/src/locale/player.hr.json index 1e7d0ace2..32b5b58c2 100644 --- a/client/src/locale/player.hr.json +++ b/client/src/locale/player.hr.json @@ -56,6 +56,7 @@ "Cancel": "Odustani", "Up Next": "Sljedeći", "Autoplay is suspended": "Automatska reprodukcija je obustavljena", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Audio player", "Video Player": "Video player", "Play": "Pokreni", diff --git a/client/src/locale/player.hu-HU.json b/client/src/locale/player.hu-HU.json index 352b64084..ed7796094 100644 --- a/client/src/locale/player.hu-HU.json +++ b/client/src/locale/player.hu-HU.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Hanglejátszó", "Video Player": "Videólejátszó", "Play": "Lejátszás", diff --git a/client/src/locale/player.id.json b/client/src/locale/player.id.json index 430b66233..0239d6f15 100644 --- a/client/src/locale/player.id.json +++ b/client/src/locale/player.id.json @@ -26,7 +26,7 @@ "Current Time": "Waktu Saat Ini", "Duration": "Durasi", "Remaining Time": "Waktu yang Tersisa", - "Stream Type": "Tipe Pemutaran", + "Stream Type": "Tipe Pemutar", "LIVE": "LANGSUNG", "Loaded": "Dimuat", "Progress": "Progres", @@ -100,5 +100,5 @@ "Caption Settings Dialog": "Dialog Pengaturan Keterangan", "Beginning of dialog window. Escape will cancel and close the window.": "Awal bilah. Escape akan membatalkan dan menutup jendela.", "End of dialog window.": "Akhir bilah.", - "{1} is loading.": "{1} sedang dimuat." + "{1} is loading.": "{1} sedang loading" } diff --git a/client/src/locale/player.is.json b/client/src/locale/player.is.json index 3b1a60b4a..cf40d8260 100644 --- a/client/src/locale/player.is.json +++ b/client/src/locale/player.is.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Tónlistarspilari", "Video Player": "Myndbandsspilari", "Play": "Afspilun", diff --git a/client/src/locale/player.it-IT.json b/client/src/locale/player.it-IT.json index 5e75ac98a..43ca167ea 100644 --- a/client/src/locale/player.it-IT.json +++ b/client/src/locale/player.it-IT.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Riproduttore Audio", "Video Player": "Riproduttore Video", "Play": "Riproduci", diff --git a/client/src/locale/player.ja-JP.json b/client/src/locale/player.ja-JP.json index 229a54025..3d40805f3 100644 --- a/client/src/locale/player.ja-JP.json +++ b/client/src/locale/player.ja-JP.json @@ -56,6 +56,7 @@ "Cancel": "キャンセル", "Up Next": "Up Next", "Autoplay is suspended": "自動再生は停止中です", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "音楽プレーヤー", "Video Player": "動画プレーヤー", "Play": "再生", diff --git a/client/src/locale/player.kab.json b/client/src/locale/player.kab.json index 20c28feb3..6bb5ea8c4 100644 --- a/client/src/locale/player.kab.json +++ b/client/src/locale/player.kab.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Imeɣri n imesli", "Video Player": "Imeɣri n uvidyu", "Play": "Urar", diff --git a/client/src/locale/player.nb-NO.json b/client/src/locale/player.nb-NO.json index 5923cfd4f..55d06e73c 100644 --- a/client/src/locale/player.nb-NO.json +++ b/client/src/locale/player.nb-NO.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Lydspiller", "Video Player": "Videospiller", "Play": "Spill av", diff --git a/client/src/locale/player.nl-NL.json b/client/src/locale/player.nl-NL.json index 79b75e05f..ff9064946 100644 --- a/client/src/locale/player.nl-NL.json +++ b/client/src/locale/player.nl-NL.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Audiospeler", "Video Player": "Videospeler", "Play": "Afspelen", diff --git a/client/src/locale/player.nn.json b/client/src/locale/player.nn.json index 03d912bf4..194fefcee 100644 --- a/client/src/locale/player.nn.json +++ b/client/src/locale/player.nn.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Lydspelar", "Video Player": "Videospelar", "Play": "Spel av", diff --git a/client/src/locale/player.oc.json b/client/src/locale/player.oc.json index f0bee0fd0..9cae04498 100644 --- a/client/src/locale/player.oc.json +++ b/client/src/locale/player.oc.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Lector àudio", "Video Player": "Lector vidèo", "Play": "Lectura", diff --git a/client/src/locale/player.pl-PL.json b/client/src/locale/player.pl-PL.json index 76e9b6dcd..41b2f6da0 100644 --- a/client/src/locale/player.pl-PL.json +++ b/client/src/locale/player.pl-PL.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Odtwarzacz audio", "Video Player": "Odtwarzacz wideo", "Play": "Odtwórz", diff --git a/client/src/locale/player.pt-BR.json b/client/src/locale/player.pt-BR.json index 05ae0aa48..63cff5bae 100644 --- a/client/src/locale/player.pt-BR.json +++ b/client/src/locale/player.pt-BR.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Reprodutor de áudio", "Video Player": "Reprodutor de vídeo", "Play": "Reproduzir", diff --git a/client/src/locale/player.pt-PT.json b/client/src/locale/player.pt-PT.json index 268179929..f507b8914 100644 --- a/client/src/locale/player.pt-PT.json +++ b/client/src/locale/player.pt-PT.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Reprodutor de áudio", "Video Player": "Reprodutor de vídeo", "Play": "Reproduzir", diff --git a/client/src/locale/player.ru-RU.json b/client/src/locale/player.ru-RU.json index 8b80a25bd..54fe7ed64 100644 --- a/client/src/locale/player.ru-RU.json +++ b/client/src/locale/player.ru-RU.json @@ -36,13 +36,13 @@ "P2P": "P2P", "{1} seconds": "{1} секунд", "enabled": "включено", - "Playlist: {1}": "Подборка: {1}", + "Playlist: {1}": "Плейлист: {1}", "disabled": "отключено", " off": " выключить", "Player mode": "Режим проигрывателя", "Play in loop": "Воспроизведение в цикле", - "This live has not started yet.": "Видеотрансляция не началась.", - "This live has ended.": "Видеотрансляция закончилась.", + "This live has not started yet.": "Трансляция ещё не началась.", + "This live has ended.": "Трансляция закончилась.", "The video failed to play, will try to fast forward.": "Не удалось воспроизвести видео, постараюсь перемотать вперед.", "{1} / {2} dropped of {3}": "{1} / {2} dropped of {3}", " (muted)": " (заглушено)", @@ -50,12 +50,13 @@ "Previous video": "Предыдущее видео", "Video page (new window)": "Страница видео (новое окно)", "Next video": "Next video", - "This video is password protected": "This video is password protected", - "You need a password to watch this video.": "You need a password to watch this video.", - "Incorrect password, please enter a correct password": "Incorrect password, please enter a correct password", - "Cancel": "Cancel", - "Up Next": "Up Next", - "Autoplay is suspended": "Autoplay is suspended", + "This video is password protected": "Это видео защищено паролем", + "You need a password to watch this video.": "Для просмотра этого видео вам необходим пароль.", + "Incorrect password, please enter a correct password": "Неверный пароль, пожалуйста, введите правильный пароль", + "Cancel": "Отмена", + "Up Next": "Следующее", + "Autoplay is suspended": "Автовоспроизведение приостановлено", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Звуковой проигрыватель", "Video Player": "Видеопроигрыватель", "Play": "Воспроизвести", @@ -65,7 +66,7 @@ "Duration": "Продолжительность", "Remaining Time": "Оставшееся время", "Stream Type": "Тип потока", - "LIVE": "ПРЯМОЙ ЭФИР", + "LIVE": "В ЭФИРЕ", "Loaded": "Загружено", "Progress": "Ход выполнения", "Progress Bar": "Индикатор выполнения", @@ -133,11 +134,11 @@ "Script": "Рукописный", "Small Caps": "Уменьшенные заглавные буквы", "Reset": "Сбросить", - "restore all settings to the default values": "сбросить все настройки по умолчанию", + "restore all settings to the default values": "сбросить все настройки на значения по умолчанию", "Done": "Готово", "Caption Settings Dialog": "Окно настроек заголовок", "Beginning of dialog window. Escape will cancel and close the window.": "Начало диалогового окна. Клавиша «Escape» отменит действие и закроет окно.", "End of dialog window.": "Конец диалогового окна.", - "{1} is loading.": "{1} загружается.", - "Uses P2P, others may know you are watching this video.": "Использует P2P, другие могут знать, что вы просматриваете это видео." + "{1} is loading.": "Загрузка {1}.", + "Uses P2P, others may know you are watching this video.": "Использует P2P, позволяя другим узнать, что вы просматриваете это видео." } diff --git a/client/src/locale/player.sq.json b/client/src/locale/player.sq.json index 3bb198366..a8777e003 100644 --- a/client/src/locale/player.sq.json +++ b/client/src/locale/player.sq.json @@ -56,6 +56,7 @@ "Cancel": "Anuloje", "Up Next": "Up Next", "Autoplay is suspended": "Vetëluajtja është pezulluar", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Lojtës Audiosh", "Video Player": "Lojtës Videosh", "Play": "Luaje", diff --git a/client/src/locale/player.sv-SE.json b/client/src/locale/player.sv-SE.json index 91c94ff44..d6e4c379c 100644 --- a/client/src/locale/player.sv-SE.json +++ b/client/src/locale/player.sv-SE.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Ljudspelare", "Video Player": "Videospelare", "Play": "Spela", diff --git a/client/src/locale/player.th-TH.json b/client/src/locale/player.th-TH.json index 2e4d9717e..a21a692ab 100644 --- a/client/src/locale/player.th-TH.json +++ b/client/src/locale/player.th-TH.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "โปรแกรมเล่นเสียง", "Video Player": "โปรแกรมเล่นวิดีโอ", "Play": "เล่น", diff --git a/client/src/locale/player.tok.json b/client/src/locale/player.tok.json index 62072b2ad..6d77ebc09 100644 --- a/client/src/locale/player.tok.json +++ b/client/src/locale/player.tok.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "ilo pi pana kalama", "Video Player": "ilo pi pana sitelen", "Play": "o tawa", diff --git a/client/src/locale/player.uk-UA.json b/client/src/locale/player.uk-UA.json index 563cdcf23..1420b600f 100644 --- a/client/src/locale/player.uk-UA.json +++ b/client/src/locale/player.uk-UA.json @@ -56,6 +56,7 @@ "Cancel": "Скасувати", "Up Next": "Up Next", "Autoplay is suspended": "Автовідтворення призупинено", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Аудіопрогравач", "Video Player": "Відеопрогравач", "Play": "Відтворити", diff --git a/client/src/locale/player.vi-VN.json b/client/src/locale/player.vi-VN.json index b74e21624..66c04523a 100644 --- a/client/src/locale/player.vi-VN.json +++ b/client/src/locale/player.vi-VN.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "Trình phát Âm thanh", "Video Player": "Trình phát Video", "Play": "Phát", diff --git a/client/src/locale/player.zh-Hans-CN.json b/client/src/locale/player.zh-Hans-CN.json index b8e7518df..8483ffdbc 100644 --- a/client/src/locale/player.zh-Hans-CN.json +++ b/client/src/locale/player.zh-Hans-CN.json @@ -56,6 +56,7 @@ "Cancel": "Cancel", "Up Next": "Up Next", "Autoplay is suspended": "Autoplay is suspended", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "音频播放器", "Video Player": "视频播放器", "Play": "播放", diff --git a/client/src/locale/player.zh-Hant-TW.json b/client/src/locale/player.zh-Hant-TW.json index 50b9466b0..46375e074 100644 --- a/client/src/locale/player.zh-Hant-TW.json +++ b/client/src/locale/player.zh-Hant-TW.json @@ -47,15 +47,16 @@ "{1} / {2} dropped of {3}": "{1} / {2} dropped of {3}", " (muted)": " (已靜音)", "{1} from servers · {2} from peers": "{1} 來自伺服器 · {2} 來自用戶", - "Previous video": "Previous video", + "Previous video": "上一個影片", "Video page (new window)": "Video page (new window)", "Next video": "Next video", - "This video is password protected": "This video is password protected", - "You need a password to watch this video.": "You need a password to watch this video.", - "Incorrect password, please enter a correct password": "Incorrect password, please enter a correct password", - "Cancel": "Cancel", + "This video is password protected": "該影片受密碼保護", + "You need a password to watch this video.": "您需要密碼才能觀看該影片。", + "Incorrect password, please enter a correct password": "密碼錯誤,請輸入正確的密碼", + "Cancel": "取消", "Up Next": "Up Next", - "Autoplay is suspended": "Autoplay is suspended", + "Autoplay is suspended": "自動播放已暫停", + "{1} (from edge: {2})": "{1} (from edge: {2})", "Audio Player": "音頻播放器", "Video Player": "影片播放器", "Play": "播放", diff --git a/client/src/locale/server.id.json b/client/src/locale/server.id.json index 133810453..310061957 100644 --- a/client/src/locale/server.id.json +++ b/client/src/locale/server.id.json @@ -50,23 +50,23 @@ "Unavailable video": "Video tidak tersedia", "Misc": "Lain-lain", "Unknown": "Tidak diketahui", - "Afar": "", - "Abkhazian": "", - "Afrikaans": "", - "Akan": "", - "Amharic": "", - "Arabic": "", - "Aragonese": "", + "Afar": "Afar", + "Abkhazian": "Abkhazian", + "Afrikaans": "Afrikaans", + "Akan": "Akan", + "Amharic": "Amharic", + "Arabic": "Arab", + "Aragonese": "Aragonese", "American Sign Language": "Bahasa Isyarat Amerika", - "Assamese": "", - "Avaric": "", - "Kotava": "", - "Aymara": "", - "Azerbaijani": "", - "Bashkir": "", - "Bambara": "", - "Belarusian": "", - "Bengali": "", + "Assamese": "Assamese", + "Avaric": "Avaric", + "Kotava": "Kotava", + "Aymara": "Aymara", + "Azerbaijani": "Azerbaijani", + "Bashkir": "Bashkir", + "Bambara": "Bambara", + "Belarusian": "Belarusian", + "Bengali": "Bengali", "British Sign Language": "Bahasa Isyarat Inggris", "Bislama": "", "Tibetan": "", diff --git a/client/src/locale/server.ru-RU.json b/client/src/locale/server.ru-RU.json index 09693d58a..83c423ccb 100644 --- a/client/src/locale/server.ru-RU.json +++ b/client/src/locale/server.ru-RU.json @@ -18,18 +18,18 @@ "Kids": "Дети", "Food": "Еда", "Attribution": "Атрибуция", - "Attribution - Share Alike": "Атрибуция - Сохранение Условии", - "Attribution - No Derivatives": "Атрибуция - Без Производных", - "Attribution - Non Commercial": "Атрибуция - Некоммерческая", - "Attribution - Non Commercial - Share Alike": "Атрибуция - Некоммерческая - Сохранение Условии", - "Attribution - Non Commercial - No Derivatives": "Атрибуция - Некоммерческая - Без Производных", - "Public Domain Dedication": "Посвящено общественному достоянию", - "Public": "Открытый доступ", - "Unlisted": "Доступ по ссылке", + "Attribution - Share Alike": "Указание автора - Сохраняя условия", + "Attribution - No Derivatives": "Указание автора - Без Производных", + "Attribution - Non Commercial": "Указание автора - Некоммерческая", + "Attribution - Non Commercial - Share Alike": "Указание автора - Некоммерческая - Сохраняя условия", + "Attribution - Non Commercial - No Derivatives": "Указание автора - Некоммерческая - Без Производных", + "Public Domain Dedication": "Общественное достояние", + "Public": "Общедоступное", + "Unlisted": "Скрытое", "Private": "Ограниченный доступ", "Internal": "Внутренний", - "Password protected": "Password protected", - "Published": "Размещённый", + "Password protected": "Защищено паролем", + "Published": "Опубликовано", "To transcode": "Перекодировать", "To import": "Импортировать", "Waiting for livestream": "В ожидании прямой трансляции", @@ -64,7 +64,7 @@ "This video is not available because the remote instance is not responding.": "Это видео недоступно, поскольку удалённый сервер не отвечает.", "This playlist does not exist": "Эта подборка не существует", "We cannot fetch the playlist. Please try again later.": "Мы не можем получить подборку. Попробуйте позже.", - "Playlist: {1}": "Подборка: {1}", + "Playlist: {1}": "Плейлист: {1}", "By {1}": "От {1}", "Unavailable video": "Видео недоступно", "Unknown": "Неизвестно", diff --git a/client/src/locale/server.zh-Hant-TW.json b/client/src/locale/server.zh-Hant-TW.json index 9896c3904..b8913b11a 100644 --- a/client/src/locale/server.zh-Hant-TW.json +++ b/client/src/locale/server.zh-Hant-TW.json @@ -47,17 +47,17 @@ "Regular": "一般", "Watch later": "稍後觀看", "Administrator": "Administrator", - "Moderator": "Moderator", + "Moderator": "審查員", "User": "User", - "Waiting first run": "Waiting first run", - "Synchronized": "Synchronized", - "Accepted": "Accepted", - "Completed": "Completed", + "Waiting first run": "等待第一次運行", + "Synchronized": "已同步", + "Accepted": "已同意", + "Completed": "已完成", "Errored": "Errored", "Waiting for parent job to finish": "Waiting for parent job to finish", "Parent job failed": "Parent job failed", "Parent job cancelled": "Parent job cancelled", - "Completing": "Completing", + "Completing": "正在完成", "This video does not exist.": "此影片不存在。", "We cannot fetch the video. Please try again later.": "我們無法擷取影片。請稍後再試一次。", "Sorry": "抱歉", @@ -77,7 +77,7 @@ "Aragonese": "亞拉岡語", "American Sign Language": "美國手語", "Assamese": "阿薩姆語", - "Austrian Sign Language": "Austrian Sign Language", + "Austrian Sign Language": "奧地利手語", "Avaric": "阿瓦爾語", "Kotava": "Kotava 語", "Aymara": "艾馬拉語", diff --git a/client/yarn.lock b/client/yarn.lock index e49f27787..fe5198758 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -2301,11 +2301,6 @@ dependencies: defer-to-connect "^2.0.1" -"@testim/chrome-version@^1.1.3": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@testim/chrome-version/-/chrome-version-1.1.4.tgz#86e04e677cd6c05fa230dd15ac223fa72d1d7090" - integrity sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g== - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2986,7 +2981,7 @@ split2 "^4.1.0" stream-buffers "^3.0.2" -"@wdio/logger@8.16.17", "@wdio/logger@^8.1.0", "@wdio/logger@^8.11.0": +"@wdio/logger@8.16.17", "@wdio/logger@^8.11.0": version "8.16.17" resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-8.16.17.tgz#c2055857ed3e3cf12cfad843140fa79264c6a632" integrity sha512-zeQ41z3T+b4IsrriZZipayXxLNDuGsm7TdExaviNGojPVrIsQUCSd/FvlLHM32b7ZrMyInHenu/zx1cjAZO71g== @@ -3708,7 +3703,7 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^1.0.0, axios@^1.4.0: +axios@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.1.tgz#11fbaa11fc35f431193a9564109c88c1f27b585f" integrity sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A== @@ -4242,19 +4237,6 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -chromedriver@^117.0.3: - version "117.0.3" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-117.0.3.tgz#4a14cc992d572367b99b53c772adcc4c19078e1e" - integrity sha512-c2rk2eGK5zZFBJMdviUlAJfQEBuPNIKfal4+rTFVYAmrWbMPYAqPozB+rIkc1lDP/Ryw44lPiqKglrI01ILhTQ== - dependencies: - "@testim/chrome-version" "^1.1.3" - axios "^1.4.0" - compare-versions "^6.0.0" - extract-zip "^2.0.1" - https-proxy-agent "^5.0.1" - proxy-from-env "^1.1.0" - tcp-port-used "^1.0.1" - chromium-bidi@0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.4.16.tgz#8a67bfdf6bb8804efc22765a82859d20724b46ab" @@ -4440,11 +4422,6 @@ compact2string@^1.4.1: dependencies: ipaddr.js ">= 0.1.5" -compare-versions@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" - integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg== - compress-commons@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-5.0.1.tgz#e46723ebbab41b50309b27a0e0f6f3baed2d6590" @@ -4752,13 +4729,6 @@ debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, de dependencies: ms "2.1.2" -debug@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -5734,7 +5704,7 @@ external-editor@^3.0.3, external-editor@^3.1.0: iconv-lite "^0.4.24" tmp "^0.0.33" -extract-zip@2.0.1, extract-zip@^2.0.1: +extract-zip@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== @@ -6030,7 +6000,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.1.0, fs-extra@^11.1.1: +fs-extra@^11.1.0: version "11.1.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== @@ -6128,7 +6098,7 @@ gaze@^1.1.2: dependencies: globule "^1.0.0" -geckodriver@^4.0.0, geckodriver@^4.0.5, geckodriver@^4.2.0: +geckodriver@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-4.2.1.tgz#03ad628241417737b962966aa8f8b13fa0f8bf75" integrity sha512-4m/CRk0OI8MaANRuFIahvOxYTSjlNAO2p9JmE14zxueknq6cdtB5M9UGRQ8R9aMV0bLGNVHHDnDXmoXdOwJfWg== @@ -6990,11 +6960,6 @@ intl-messageformat@^10.1.0: "@formatjs/icu-messageformat-parser" "2.6.2" tslib "^2.4.0" -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - ip@^1.1.5, ip@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" @@ -7239,11 +7204,6 @@ is-unicode-supported@^1.2.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -7268,15 +7228,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -is2@^2.0.6: - version "2.0.9" - resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.9.tgz#ff63b441f90de343fa8fac2125ee170da8e8240d" - integrity sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g== - dependencies: - deep-is "^0.1.3" - ip-regex "^4.1.0" - is-url "^1.2.4" - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -10830,14 +10781,6 @@ tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -tcp-port-used@^1.0.1, tcp-port-used@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea" - integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== - dependencies: - debug "4.3.1" - is2 "^2.0.6" - temp-fs@^0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7" @@ -11475,27 +11418,6 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -wdio-chromedriver-service@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/wdio-chromedriver-service/-/wdio-chromedriver-service-8.1.1.tgz#bdd3776b9a6ccfcec30ec425f906e0fb1c41f966" - integrity sha512-pN3GiOkTIMnalfq4PJAHdX95pDp1orHnTY8W1fIbd6ok81ba97UjerTgS7lUDRUh1p0MAm35Ww0uc0/9wzB7SA== - dependencies: - "@wdio/logger" "^8.1.0" - fs-extra "^11.1.0" - split2 "^4.1.0" - tcp-port-used "^1.0.2" - -wdio-geckodriver-service@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/wdio-geckodriver-service/-/wdio-geckodriver-service-5.0.2.tgz#0ca5be4465891e71c654a801d281091562cd0099" - integrity sha512-D/ht+Vb/Tk4a7rbqbpajsAofXIUVzJaO5tN/gX8l1T5TOfu8ezGU1gtWd1jEDjbo1Omp3v/eBnxByuWwX6rWXw== - dependencies: - "@wdio/logger" "^8.11.0" - fs-extra "^11.1.1" - geckodriver "^4.0.5" - get-port "^7.0.0" - wait-port "^1.0.4" - web-streams-polyfill@^3.0.3: version "3.2.1" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" diff --git a/config/default.yaml b/config/default.yaml index f4c850911..8d60a87d0 100644 --- a/config/default.yaml +++ b/config/default.yaml @@ -240,6 +240,9 @@ log: log_ping_requests: true log_tracker_unknown_infohash: true + # If you have many concurrent requests, you can disable HTTP requests logging to reduce PeerTube CPU load + log_http_requests: true + prettify_sql: false # Accept warn/error logs coming from the client diff --git a/config/production.yaml.example b/config/production.yaml.example index ed0385542..3b2b029ab 100644 --- a/config/production.yaml.example +++ b/config/production.yaml.example @@ -238,6 +238,9 @@ log: log_ping_requests: true log_tracker_unknown_infohash: true + # If you have many concurrent requests, you can disable HTTP requests logging to reduce PeerTube CPU load + log_http_requests: true + prettify_sql: false # Accept warn/error logs coming from the client @@ -470,7 +473,6 @@ user: video_quota_daily: -1 default_channel_name: 'Main $1 channel' # The placeholder $1 is used to represent the user's username - video_channels: max_per_user: 20 # Allows each user to create up to 20 video channels. diff --git a/packages/core-utils/src/common/date.ts b/packages/core-utils/src/common/date.ts index 4cabeb93c..9f106945a 100644 --- a/packages/core-utils/src/common/date.ts +++ b/packages/core-utils/src/common/date.ts @@ -45,21 +45,42 @@ function isLastWeek (d: Date) { // --------------------------------------------------------------------------- -export const timecodeRegexString = `((\\d+)[h:])?((\\d+)[m:])?((\\d+)s?)` +export const timecodeRegexString = `(\\d+[h:])?(\\d+[m:])?\\d+s?` function timeToInt (time: number | string) { if (!time) return 0 if (typeof time === 'number') return time - const reg = new RegExp(`^${timecodeRegexString}$`) + // Try with 00h00m00s format first + const reg = new RegExp(`^(\\d+h)?(\\d+m)?(\\d+)s?$`) const matches = time.match(reg) - if (!matches) return 0 - const hours = parseInt(matches[2] || '0', 10) - const minutes = parseInt(matches[4] || '0', 10) - const seconds = parseInt(matches[6] || '0', 10) + if (matches) { + const hours = parseInt(matches[1] || '0', 10) + const minutes = parseInt(matches[2] || '0', 10) + const seconds = parseInt(matches[3] || '0', 10) - return hours * 3600 + minutes * 60 + seconds + return hours * 3600 + minutes * 60 + seconds + } + + // ':' format fallback + const parts = time.split(':').reverse() + + const iMultiplier = { + 0: 1, + 1: 60, + 2: 3600 + } + + let result = 0 + for (let i = 0; i < parts.length; i++) { + const partInt = parseInt(parts[i], 10) + if (isNaN(partInt)) return 0 + + result += iMultiplier[i] * partInt + } + + return result } function secondsToTime (seconds: number, full = false, symbol?: string) { diff --git a/packages/models/src/videos/live/live-video-error.enum.ts b/packages/models/src/videos/live/live-video-error.enum.ts index cd92a1cff..5836da66e 100644 --- a/packages/models/src/videos/live/live-video-error.enum.ts +++ b/packages/models/src/videos/live/live-video-error.enum.ts @@ -5,7 +5,9 @@ export const LiveVideoError = { FFMPEG_ERROR: 4, BLACKLISTED: 5, RUNNER_JOB_ERROR: 6, - RUNNER_JOB_CANCEL: 7 + RUNNER_JOB_CANCEL: 7, + UNKNOWN_ERROR: 8, + INVALID_INPUT_VIDEO_STREAM: 9 } as const export type LiveVideoErrorType = typeof LiveVideoError[keyof typeof LiveVideoError] diff --git a/packages/tests/src/api/activitypub/security.ts b/packages/tests/src/api/activitypub/security.ts index c26be99da..85f255039 100644 --- a/packages/tests/src/api/activitypub/security.ts +++ b/packages/tests/src/api/activitypub/security.ts @@ -9,13 +9,21 @@ import { buildGlobalHTTPHeaders, signAndContextify } from '@peertube/peertube-server/core/helpers/activity-pub-utils.js' -import { buildDigest } from '@peertube/peertube-server/core/helpers/peertube-crypto.js' +import { buildDigest, signJsonLDObject } from '@peertube/peertube-server/core/helpers/peertube-crypto.js' import { ACTIVITY_PUB, HTTP_SIGNATURE } from '@peertube/peertube-server/core/initializers/constants.js' import { makePOSTAPRequest } from '@tests/shared/requests.js' import { SQLCommand } from '@tests/shared/sql-command.js' import { expect } from 'chai' import { readJsonSync } from 'fs-extra/esm' +function signJsonLDObjectWithoutAssertion (options: Parameters[0]) { + return signJsonLDObject({ + ...options, + + disableWorkerThreadAssertion: true + }) +} + function fakeFilter () { return (data: any) => Promise.resolve(data) } @@ -132,7 +140,7 @@ describe('Test ActivityPub security', function () { it('Should fail with an invalid date', async function () { const body = await activityPubContextify(getAnnounceWithoutContext(servers[1]), 'Announce', fakeFilter()) - const headers = buildGlobalHTTPHeaders(body) + const headers = buildGlobalHTTPHeaders(body, buildDigest) headers['date'] = 'Wed, 21 Oct 2015 07:28:00 GMT' try { @@ -148,7 +156,7 @@ describe('Test ActivityPub security', function () { await setKeysOfServer(sqlCommands[1], servers[1].url, invalidKeys.publicKey, invalidKeys.privateKey) const body = await activityPubContextify(getAnnounceWithoutContext(servers[1]), 'Announce', fakeFilter()) - const headers = buildGlobalHTTPHeaders(body) + const headers = buildGlobalHTTPHeaders(body, buildDigest) try { await makePOSTAPRequest(url, body, baseHttpSignature(), headers) @@ -163,7 +171,7 @@ describe('Test ActivityPub security', function () { await setKeysOfServer(sqlCommands[1], servers[1].url, keys.publicKey, keys.privateKey) const body = await activityPubContextify(getAnnounceWithoutContext(servers[1]), 'Announce', fakeFilter()) - const headers = buildGlobalHTTPHeaders(body) + const headers = buildGlobalHTTPHeaders(body, buildDigest) const signatureOptions = baseHttpSignature() const badHeadersMatrix = [ @@ -186,7 +194,7 @@ describe('Test ActivityPub security', function () { it('Should succeed with a valid HTTP signature draft 11 (without date but with (created))', async function () { const body = await activityPubContextify(getAnnounceWithoutContext(servers[1]), 'Announce', fakeFilter()) - const headers = buildGlobalHTTPHeaders(body) + const headers = buildGlobalHTTPHeaders(body, buildDigest) const signatureOptions = baseHttpSignature() signatureOptions.headers = [ '(request-target)', '(created)', 'host', 'digest' ] @@ -197,7 +205,7 @@ describe('Test ActivityPub security', function () { it('Should succeed with a valid HTTP signature', async function () { const body = await activityPubContextify(getAnnounceWithoutContext(servers[1]), 'Announce', fakeFilter()) - const headers = buildGlobalHTTPHeaders(body) + const headers = buildGlobalHTTPHeaders(body, buildDigest) const { statusCode } = await makePOSTAPRequest(url, body, baseHttpSignature(), headers) expect(statusCode).to.equal(HttpStatusCode.NO_CONTENT_204) @@ -216,7 +224,7 @@ describe('Test ActivityPub security', function () { await servers[1].run() const body = await activityPubContextify(getAnnounceWithoutContext(servers[1]), 'Announce', fakeFilter()) - const headers = buildGlobalHTTPHeaders(body) + const headers = buildGlobalHTTPHeaders(body, buildDigest) try { await makePOSTAPRequest(url, body, baseHttpSignature(), headers) @@ -247,9 +255,15 @@ describe('Test ActivityPub security', function () { body.actor = servers[2].url + '/accounts/peertube' const signer: any = { privateKey: invalidKeys.privateKey, url: servers[2].url + '/accounts/peertube' } - const signedBody = await signAndContextify(signer, body, 'Announce', fakeFilter()) + const signedBody = await signAndContextify({ + byActor: signer, + data: body, + contextType: 'Announce', + contextFilter: fakeFilter(), + signerFunction: signJsonLDObjectWithoutAssertion + }) - const headers = buildGlobalHTTPHeaders(signedBody) + const headers = buildGlobalHTTPHeaders(signedBody, buildDigest) try { await makePOSTAPRequest(url, signedBody, baseHttpSignature(), headers) @@ -267,11 +281,17 @@ describe('Test ActivityPub security', function () { body.actor = servers[2].url + '/accounts/peertube' const signer: any = { privateKey: keys.privateKey, url: servers[2].url + '/accounts/peertube' } - const signedBody = await signAndContextify(signer, body, 'Announce', fakeFilter()) + const signedBody: any = await signAndContextify({ + byActor: signer, + data: body, + contextType: 'Announce', + contextFilter: fakeFilter(), + signerFunction: signJsonLDObjectWithoutAssertion + }) signedBody.actor = servers[2].url + '/account/peertube' - const headers = buildGlobalHTTPHeaders(signedBody) + const headers = buildGlobalHTTPHeaders(signedBody, buildDigest) try { await makePOSTAPRequest(url, signedBody, baseHttpSignature(), headers) @@ -286,9 +306,15 @@ describe('Test ActivityPub security', function () { body.actor = servers[2].url + '/accounts/peertube' const signer: any = { privateKey: keys.privateKey, url: servers[2].url + '/accounts/peertube' } - const signedBody = await signAndContextify(signer, body, 'Announce', fakeFilter()) + const signedBody = await signAndContextify({ + byActor: signer, + data: body, + contextType: 'Announce', + contextFilter: fakeFilter(), + signerFunction: signJsonLDObjectWithoutAssertion + }) - const headers = buildGlobalHTTPHeaders(signedBody) + const headers = buildGlobalHTTPHeaders(signedBody, buildDigest) const { statusCode } = await makePOSTAPRequest(url, signedBody, baseHttpSignature(), headers) expect(statusCode).to.equal(HttpStatusCode.NO_CONTENT_204) @@ -308,9 +334,15 @@ describe('Test ActivityPub security', function () { body.actor = servers[2].url + '/accounts/peertube' const signer: any = { privateKey: keys.privateKey, url: servers[2].url + '/accounts/peertube' } - const signedBody = await signAndContextify(signer, body, 'Announce', fakeFilter()) + const signedBody = await signAndContextify({ + byActor: signer, + data: body, + contextType: 'Announce', + contextFilter: fakeFilter(), + signerFunction: signJsonLDObjectWithoutAssertion + }) - const headers = buildGlobalHTTPHeaders(signedBody) + const headers = buildGlobalHTTPHeaders(signedBody, buildDigest) try { await makePOSTAPRequest(url, signedBody, baseHttpSignature(), headers) diff --git a/packages/tests/src/api/notifications/user-notifications.ts b/packages/tests/src/api/notifications/user-notifications.ts index 87913b2c1..57fddf353 100644 --- a/packages/tests/src/api/notifications/user-notifications.ts +++ b/packages/tests/src/api/notifications/user-notifications.ts @@ -281,7 +281,7 @@ describe('Test user notifications', function () { }) it('Should send a notification when the scheduled update has been proceeded', async function () { - this.timeout(70000) + this.timeout(140000) // In 2 seconds const updateAt = new Date(new Date().getTime() + 2000) diff --git a/packages/tests/src/api/server/auto-follows.ts b/packages/tests/src/api/server/auto-follows.ts index aa272ebcc..678a142bd 100644 --- a/packages/tests/src/api/server/auto-follows.ts +++ b/packages/tests/src/api/server/auto-follows.ts @@ -57,7 +57,7 @@ describe('Test auto follows', function () { describe('Auto follow back', function () { it('Should not auto follow back if the option is not enabled', async function () { - this.timeout(15000) + this.timeout(30000) await server1Follows2(servers) diff --git a/packages/tests/src/api/server/follows.ts b/packages/tests/src/api/server/follows.ts index fbe2e87da..667a665e8 100644 --- a/packages/tests/src/api/server/follows.ts +++ b/packages/tests/src/api/server/follows.ts @@ -42,7 +42,7 @@ describe('Test follows', function () { }) it('Should have server 1 following root account of server 2 and server 3', async function () { - this.timeout(30000) + this.timeout(60000) await servers[0].follows.follow({ hosts: [ servers[2].url ], diff --git a/packages/tests/src/api/server/handle-down.ts b/packages/tests/src/api/server/handle-down.ts index 604df129f..4ac4dacb6 100644 --- a/packages/tests/src/api/server/handle-down.ts +++ b/packages/tests/src/api/server/handle-down.ts @@ -254,8 +254,6 @@ describe('Test handle downs', function () { }) it('Should correctly reply to the comment', async function () { - this.timeout(15000) - await servers[2].comments.addReply({ videoId: missedVideo2.uuid, toCommentId: commentIdServer2, text: 'comment 1-4' }) await waitJobs(servers) diff --git a/packages/tests/src/api/server/logs.ts b/packages/tests/src/api/server/logs.ts index 11c86d694..29cd5ea38 100644 --- a/packages/tests/src/api/server/logs.ts +++ b/packages/tests/src/api/server/logs.ts @@ -113,7 +113,7 @@ describe('Test logs', function () { } }) - it('Should log ping requests', async function () { + it('Should log ping/HTTP requests', async function () { const now = new Date() await server.servers.ping() @@ -122,23 +122,26 @@ describe('Test logs', function () { const logsString = JSON.stringify(body) expect(logsString.includes('/api/v1/ping')).to.be.true + expect(logsString.includes(' HTTP/1.1')).to.be.true }) - it('Should not log ping requests', async function () { + it('Should not log ping/HTTP requests', async function () { this.timeout(60000) await killallServers([ server ]) - await server.run({ log: { log_ping_requests: false } }) + await server.run({ log: { log_ping_requests: false, log_http_requests: false } }) const now = new Date() await server.servers.ping() + await server.videos.list() const body = await logsCommand.getLogs({ startDate: now, level: 'info' }) const logsString = JSON.stringify(body) expect(logsString.includes('/api/v1/ping')).to.be.false + expect(logsString.includes(' HTTP/1.1"')).to.be.false }) }) diff --git a/packages/tests/src/api/videos/multiple-servers.ts b/packages/tests/src/api/videos/multiple-servers.ts index d6e09236c..239767790 100644 --- a/packages/tests/src/api/videos/multiple-servers.ts +++ b/packages/tests/src/api/videos/multiple-servers.ts @@ -1025,7 +1025,7 @@ describe('Test multiple servers', function () { describe('With minimum parameters', function () { it('Should upload and propagate the video', async function () { - this.timeout(120000) + this.timeout(240000) const path = '/api/v1/videos/upload' diff --git a/packages/tests/src/api/videos/video-schedule-update.ts b/packages/tests/src/api/videos/video-schedule-update.ts index ed0aa5583..37c437327 100644 --- a/packages/tests/src/api/videos/video-schedule-update.ts +++ b/packages/tests/src/api/videos/video-schedule-update.ts @@ -12,9 +12,9 @@ import { waitJobs } from '@peertube/peertube-server-commands' -function in10Seconds () { +function in15Seconds () { const now = new Date() - now.setSeconds(now.getSeconds() + 10) + now.setSeconds(now.getSeconds() + 15) return now } @@ -39,7 +39,7 @@ describe('Test video update scheduler', function () { name: 'video 1', privacy: VideoPrivacy.PRIVATE, scheduleUpdate: { - updateAt: in10Seconds().toISOString(), + updateAt: in15Seconds().toISOString(), privacy: VideoPrivacy.PUBLIC } } @@ -102,7 +102,7 @@ describe('Test video update scheduler', function () { const attributes = { name: 'video 2 updated', scheduleUpdate: { - updateAt: in10Seconds().toISOString(), + updateAt: in15Seconds().toISOString(), privacy: VideoPrivacy.PUBLIC } } @@ -134,9 +134,16 @@ describe('Test video update scheduler', function () { }) it('Should wait some seconds and have the updated video in public privacy', async function () { - this.timeout(20000) + this.timeout(45000) + + let total = 0 + do { + const res = await servers[0].videos.list() + total = res.total + + await wait(500) + } while (total !== 2) - await wait(15000) await waitJobs(servers) for (const server of servers) { diff --git a/packages/tests/src/server-helpers/activitypub.ts b/packages/tests/src/server-helpers/activitypub.ts index a498412f3..1ee1d8196 100644 --- a/packages/tests/src/server-helpers/activitypub.ts +++ b/packages/tests/src/server-helpers/activitypub.ts @@ -5,13 +5,22 @@ import { signAndContextify } from '@peertube/peertube-server/core/helpers/activi import { isHTTPSignatureVerified, isJsonLDSignatureVerified, - parseHTTPSignature + parseHTTPSignature, + signJsonLDObject } from '@peertube/peertube-server/core/helpers/peertube-crypto.js' import { buildRequestStub } from '@tests/shared/tests.js' import { expect } from 'chai' import { readJsonSync } from 'fs-extra/esm' import cloneDeep from 'lodash-es/cloneDeep.js' +function signJsonLDObjectWithoutAssertion (options: Parameters[0]) { + return signJsonLDObject({ + ...options, + + disableWorkerThreadAssertion: true + }) +} + function fakeFilter () { return (data: any) => Promise.resolve(data) } @@ -55,7 +64,13 @@ describe('Test activity pub helpers', function () { const body = readJsonSync(buildAbsoluteFixturePath('./ap-json/peertube/announce-without-context.json')) const actorSignature = { url: 'http://localhost:9002/accounts/peertube', privateKey: keys.privateKey } - const signedBody = await signAndContextify(actorSignature as any, body, 'Announce', fakeFilter()) + const signedBody = await signAndContextify({ + byActor: actorSignature as any, + data: body, + contextType: 'Announce', + contextFilter: fakeFilter(), + signerFunction: signJsonLDObjectWithoutAssertion + }) const fromActor = { publicKey: keys.publicKey, url: 'http://localhost:9002/accounts/peertube' } const result = await isJsonLDSignatureVerified(fromActor as any, signedBody) @@ -68,7 +83,13 @@ describe('Test activity pub helpers', function () { const body = readJsonSync(buildAbsoluteFixturePath('./ap-json/peertube/announce-without-context.json')) const actorSignature = { url: 'http://localhost:9002/accounts/peertube', privateKey: keys.privateKey } - const signedBody = await signAndContextify(actorSignature as any, body, 'Announce', fakeFilter()) + const signedBody = await signAndContextify({ + byActor: actorSignature as any, + data: body, + contextType: 'Announce', + contextFilter: fakeFilter(), + signerFunction: signJsonLDObjectWithoutAssertion + }) const fromActor = { publicKey: keys.publicKey, url: 'http://localhost:9002/accounts/peertube' } const result = await isJsonLDSignatureVerified(fromActor as any, signedBody) diff --git a/packages/tests/src/server-helpers/core-utils.ts b/packages/tests/src/server-helpers/core-utils.ts index 909d4caa4..d2b5b0512 100644 --- a/packages/tests/src/server-helpers/core-utils.ts +++ b/packages/tests/src/server-helpers/core-utils.ts @@ -3,13 +3,13 @@ import { expect } from 'chai' import snakeCase from 'lodash-es/snakeCase.js' import validator from 'validator' -import { getAverageTheoreticalBitrate, getMaxTheoreticalBitrate, parseChapters } from '@peertube/peertube-core-utils' +import { getAverageTheoreticalBitrate, getMaxTheoreticalBitrate, parseChapters, timeToInt } from '@peertube/peertube-core-utils' import { VideoResolution } from '@peertube/peertube-models' import { objectConverter, parseBytes, parseDurationToMs, parseSemVersion } from '@peertube/peertube-server/core/helpers/core-utils.js' describe('Parse Bytes', function () { - it('Should pass on valid value', async function () { + it('Should pass on valid value', function () { // just return it expect(parseBytes(-1024)).to.equal(-1024) expect(parseBytes(1024)).to.equal(1024) @@ -43,14 +43,14 @@ describe('Parse Bytes', function () { expect(parseBytes('1024TB 1024GB 1024MB')).to.equal(1127000492212224) }) - it('Should be invalid when given invalid value', async function () { + it('Should be invalid when given invalid value', function () { expect(parseBytes('6GB 1GB')).to.equal(6) }) }) describe('Parse duration', function () { - it('Should pass when given valid value', async function () { + it('Should pass when given valid value', function () { expect(parseDurationToMs(35)).to.equal(35) expect(parseDurationToMs(-35)).to.equal(-35) expect(parseDurationToMs('35 seconds')).to.equal(35 * 1000) @@ -59,14 +59,32 @@ describe('Parse duration', function () { expect(parseDurationToMs('35 hours')).to.equal(3600 * 35 * 1000) }) - it('Should be invalid when given invalid value', async function () { + it('Should be invalid when given invalid value', function () { expect(parseBytes('35m 5s')).to.equal(35) }) }) +describe('Time to int', function () { + + it('Should correctly parse time to int', function () { + expect(timeToInt(undefined)).to.equal(0) + expect(timeToInt('')).to.equal(0) + + expect(timeToInt('1h02')).to.equal(3602) + + expect(timeToInt('1:02')).to.equal(62) + expect(timeToInt('01:2')).to.equal(62) + + expect(timeToInt('02h02m03s')).to.equal(7323) + expect(timeToInt('2:02:3')).to.equal(7323) + + expect(timeToInt(3500)).to.equal(3500) + }) +}) + describe('Object', function () { - it('Should convert an object', async function () { + it('Should convert an object', function () { function keyConverter (k: string) { return snakeCase(k) } diff --git a/scripts/i18n/create-custom-files.ts b/scripts/i18n/create-custom-files.ts index a0b659ec8..c1451113f 100755 --- a/scripts/i18n/create-custom-files.ts +++ b/scripts/i18n/create-custom-files.ts @@ -75,7 +75,8 @@ const playerKeys = { 'Incorrect password, please enter a correct password': 'Incorrect password, please enter a correct password', 'Cancel': 'Cancel', 'Up Next': 'Up Next', - 'Autoplay is suspended': 'Autoplay is suspended' + 'Autoplay is suspended': 'Autoplay is suspended', + '{1} (from edge: {2})': '{1} (from edge: {2})' } Object.assign(playerKeys, videojs) diff --git a/scripts/simulate-many-viewers.ts b/scripts/simulate-many-viewers.ts index d6d9fd69e..5d12bba28 100644 --- a/scripts/simulate-many-viewers.ts +++ b/scripts/simulate-many-viewers.ts @@ -31,7 +31,8 @@ async function prepare () { const config = { log: { - level: 'info' + level: 'info', + log_http_requests: false }, rates_limit: { api: { diff --git a/server/core/controllers/api/search/search-videos.ts b/server/core/controllers/api/search/search-videos.ts index a6700ed7d..e3be237af 100644 --- a/server/core/controllers/api/search/search-videos.ts +++ b/server/core/controllers/api/search/search-videos.ts @@ -10,7 +10,7 @@ import { Hooks } from '@server/lib/plugins/hooks.js' import { buildMutedForSearchIndex, isSearchIndexSearch, isURISearch } from '@server/lib/search.js' import { getServerActor } from '@server/models/application/application.js' import { HttpStatusCode, ResultList, Video, VideosSearchQueryAfterSanitize } from '@peertube/peertube-models' -import { buildNSFWFilter, isUserAbleToSearchRemoteURI } from '../../../helpers/express-utils.js' +import { buildNSFWFilter, getCountVideos, isUserAbleToSearchRemoteURI } from '../../../helpers/express-utils.js' import { logger } from '../../../helpers/logger.js' import { getFormattedObjects } from '../../../helpers/utils.js' import { @@ -61,7 +61,7 @@ function searchVideos (req: express.Request, res: express.Response) { return searchVideosIndex(query, res) } - return searchVideosDB(query, res) + return searchVideosDB(query, req, res) } async function searchVideosIndex (query: VideosSearchQueryAfterSanitize, res: express.Response) { @@ -101,7 +101,7 @@ async function searchVideosIndex (query: VideosSearchQueryAfterSanitize, res: ex } } -async function searchVideosDB (query: VideosSearchQueryAfterSanitize, res: express.Response) { +async function searchVideosDB (query: VideosSearchQueryAfterSanitize, req: express.Request, res: express.Response) { const serverActor = await getServerActor() const apiOptions = await Hooks.wrapObject({ @@ -112,6 +112,8 @@ async function searchVideosDB (query: VideosSearchQueryAfterSanitize, res: expre orLocalVideos: true }, + countVideos: getCountVideos(req), + nsfw: buildNSFWFilter(res, query.nsfw), user: res.locals.oauth ? res.locals.oauth.token.User diff --git a/server/core/helpers/activity-pub-utils.ts b/server/core/helpers/activity-pub-utils.ts index cda40fdaa..5bee8ca8e 100644 --- a/server/core/helpers/activity-pub-utils.ts +++ b/server/core/helpers/activity-pub-utils.ts @@ -2,11 +2,14 @@ import { ContextType } from '@peertube/peertube-models' import { ACTIVITY_PUB } from '@server/initializers/constants.js' import { buildDigest, signJsonLDObject } from './peertube-crypto.js' -type ContextFilter = (arg: T) => Promise +export type ContextFilter = (arg: T) => Promise -export function buildGlobalHTTPHeaders (body: any) { +export function buildGlobalHTTPHeaders ( + body: any, + digestBuilder: typeof buildDigest +) { return { - 'digest': buildDigest(body), + 'digest': digestBuilder(body), 'content-type': 'application/activity+json', 'accept': ACTIVITY_PUB.ACCEPT_HEADER } @@ -16,17 +19,20 @@ export async function activityPubContextify (data: T, type: ContextType, con return { ...await getContextData(type, contextFilter), ...data } } -export async function signAndContextify ( - byActor: { url: string, privateKey: string }, - data: T, - contextType: ContextType | null, +export async function signAndContextify (options: { + byActor: { url: string, privateKey: string } + data: T + contextType: ContextType | null contextFilter: ContextFilter -) { + signerFunction: typeof signJsonLDObject +}) { + const { byActor, data, contextType, contextFilter, signerFunction } = options + const activity = contextType ? await activityPubContextify(data, contextType, contextFilter) : data - return signJsonLDObject(byActor, activity) + return signerFunction({ byActor, data: activity }) } // --------------------------------------------------------------------------- diff --git a/server/core/helpers/peertube-crypto.ts b/server/core/helpers/peertube-crypto.ts index 45f2da6bf..fca635a63 100644 --- a/server/core/helpers/peertube-crypto.ts +++ b/server/core/helpers/peertube-crypto.ts @@ -7,6 +7,7 @@ import { BCRYPT_SALT_SIZE, ENCRYPTION, HTTP_SIGNATURE, PRIVATE_RSA_KEY_SIZE } fr import { MActor } from '../types/models/index.js' import { generateRSAKeyPairPromise, randomBytesPromise, scryptPromise } from './core-utils.js' import { logger } from './logger.js' +import { assertIsInWorkerThread } from './threads.js' function createPrivateAndPublicKeys () { logger.info('Generating a RSA key...') @@ -94,7 +95,15 @@ async function isJsonLDRSA2017Verified (fromActor: MActor, signedDocument: any) return verify.verify(fromActor.publicKey, signedDocument.signature.signatureValue, 'base64') } -async function signJsonLDObject (byActor: { url: string, privateKey: string }, data: T) { +async function signJsonLDObject (options: { + byActor: { url: string, privateKey: string } + data: T + disableWorkerThreadAssertion?: boolean +}) { + const { byActor, data, disableWorkerThreadAssertion = false } = options + + if (!disableWorkerThreadAssertion) assertIsInWorkerThread() + const signature = { type: 'RsaSignature2017', creator: byActor.url, diff --git a/server/core/helpers/threads.ts b/server/core/helpers/threads.ts new file mode 100644 index 000000000..15d974171 --- /dev/null +++ b/server/core/helpers/threads.ts @@ -0,0 +1,8 @@ +import { isMainThread } from 'node:worker_threads' +import { logger } from './logger.js' + +export function assertIsInWorkerThread () { + if (!isMainThread) return + + logger.error('Caller is not in worker thread', { stack: new Error().stack }) +} diff --git a/server/core/initializers/config.ts b/server/core/initializers/config.ts index 7d0c990a3..a96c7eba9 100644 --- a/server/core/initializers/config.ts +++ b/server/core/initializers/config.ts @@ -220,6 +220,7 @@ const CONFIG = { ANONYMIZE_IP: config.get('log.anonymize_ip'), LOG_PING_REQUESTS: config.get('log.log_ping_requests'), LOG_TRACKER_UNKNOWN_INFOHASH: config.get('log.log_tracker_unknown_infohash'), + LOG_HTTP_REQUESTS: config.get('log.log_http_requests'), PRETTIFY_SQL: config.get('log.prettify_sql'), ACCEPT_CLIENT_LOG: config.get('log.accept_client_log') }, diff --git a/server/core/initializers/constants.ts b/server/core/initializers/constants.ts index ccb65692d..7e3a86401 100644 --- a/server/core/initializers/constants.ts +++ b/server/core/initializers/constants.ts @@ -976,6 +976,14 @@ const WORKER_THREADS = { GET_IMAGE_SIZE: { CONCURRENCY: 1, MAX_THREADS: 5 + }, + SIGN_JSON_LD_OBJECT: { + CONCURRENCY: 1, + MAX_THREADS: 2 + }, + BUILD_DIGEST: { + CONCURRENCY: 1, + MAX_THREADS: 2 } } diff --git a/server/core/lib/activitypub/send/http.ts b/server/core/lib/activitypub/send/http.ts index 8d15b970d..09e1c8eef 100644 --- a/server/core/lib/activitypub/send/http.ts +++ b/server/core/lib/activitypub/send/http.ts @@ -1,10 +1,11 @@ import { ContextType } from '@peertube/peertube-models' -import { signAndContextify } from '@server/helpers/activity-pub-utils.js' -import { HTTP_SIGNATURE } from '@server/initializers/constants.js' +import { ACTIVITY_PUB, HTTP_SIGNATURE } from '@server/initializers/constants.js' import { ActorModel } from '@server/models/actor/actor.js' import { getServerActor } from '@server/models/application/application.js' import { MActor } from '@server/types/models/index.js' import { getContextFilter } from '../context.js' +import { buildDigestFromWorker, signJsonLDObjectFromWorker } from '@server/lib/worker/parent-process.js' +import { signAndContextify } from '@server/helpers/activity-pub-utils.js' type Payload = { body: T, contextType: ContextType, signatureActorId?: number } @@ -17,12 +18,26 @@ export async function computeBody ( const actorSignature = await ActorModel.load(payload.signatureActorId) if (!actorSignature) throw new Error('Unknown signature actor id.') - body = await signAndContextify(actorSignature, payload.body, payload.contextType, getContextFilter()) + body = await signAndContextify({ + byActor: { url: actorSignature.url, privateKey: actorSignature.privateKey }, + data: payload.body, + contextType: payload.contextType, + contextFilter: getContextFilter(), + signerFunction: signJsonLDObjectFromWorker + }) } return body } +export async function buildGlobalHTTPHeaders (body: any) { + return { + 'digest': await buildDigestFromWorker(body), + 'content-type': 'application/activity+json', + 'accept': ACTIVITY_PUB.ACCEPT_HEADER + } +} + export async function buildSignedRequestOptions (options: { signatureActorId?: number hasPayload: boolean diff --git a/server/core/lib/job-queue/handlers/activitypub-http-broadcast.ts b/server/core/lib/job-queue/handlers/activitypub-http-broadcast.ts index f7307c97d..06f62722d 100644 --- a/server/core/lib/job-queue/handlers/activitypub-http-broadcast.ts +++ b/server/core/lib/job-queue/handlers/activitypub-http-broadcast.ts @@ -1,7 +1,6 @@ import { Job } from 'bullmq' import { ActivitypubHttpBroadcastPayload } from '@peertube/peertube-models' -import { buildGlobalHTTPHeaders } from '@server/helpers/activity-pub-utils.js' -import { buildSignedRequestOptions, computeBody } from '@server/lib/activitypub/send/index.js' +import { buildGlobalHTTPHeaders, buildSignedRequestOptions, computeBody } from '@server/lib/activitypub/send/http.js' import { ActorFollowHealthCache } from '@server/lib/actor-follow-health-cache.js' import { parallelHTTPBroadcastFromWorker, sequentialHTTPBroadcastFromWorker } from '@server/lib/worker/parent-process.js' import { logger } from '../../../helpers/logger.js' @@ -45,6 +44,6 @@ async function buildRequestOptions (payload: ActivitypubHttpBroadcastPayload) { method: 'POST' as 'POST', json: body, httpSignature: httpSignatureOptions, - headers: buildGlobalHTTPHeaders(body) + headers: await buildGlobalHTTPHeaders(body) } } diff --git a/server/core/lib/job-queue/handlers/activitypub-http-unicast.ts b/server/core/lib/job-queue/handlers/activitypub-http-unicast.ts index 9b2f542f0..aa7ba1f7e 100644 --- a/server/core/lib/job-queue/handlers/activitypub-http-unicast.ts +++ b/server/core/lib/job-queue/handlers/activitypub-http-unicast.ts @@ -1,10 +1,9 @@ import { Job } from 'bullmq' import { ActivitypubHttpUnicastPayload } from '@peertube/peertube-models' -import { buildGlobalHTTPHeaders } from '@server/helpers/activity-pub-utils.js' -import { buildSignedRequestOptions, computeBody } from '@server/lib/activitypub/send/index.js' +import { buildGlobalHTTPHeaders, buildSignedRequestOptions, computeBody } from '@server/lib/activitypub/send/http.js' import { logger } from '../../../helpers/logger.js' -import { doRequest } from '../../../helpers/requests.js' import { ActorFollowHealthCache } from '../../actor-follow-health-cache.js' +import { httpUnicastFromWorker } from '@server/lib/worker/parent-process.js' async function processActivityPubHttpUnicast (job: Job) { logger.info('Processing ActivityPub unicast in job %s.', job.id) @@ -19,11 +18,11 @@ async function processActivityPubHttpUnicast (job: Job) { method: 'POST' as 'POST', json: body, httpSignature: httpSignatureOptions, - headers: buildGlobalHTTPHeaders(body) + headers: await buildGlobalHTTPHeaders(body) } try { - await doRequest(uri, options) + await httpUnicastFromWorker({ uri, requestOptions: options }) ActorFollowHealthCache.Instance.updateActorFollowsHealth([ uri ], []) } catch (err) { ActorFollowHealthCache.Instance.updateActorFollowsHealth([], [ uri ]) diff --git a/server/core/lib/live/live-manager.ts b/server/core/lib/live/live-manager.ts index d003379c9..de035ed9f 100644 --- a/server/core/lib/live/live-manager.ts +++ b/server/core/lib/live/live-manager.ts @@ -187,7 +187,13 @@ class LiveManager { return this.getContext().sessions.has(sessionId) } - stopSessionOf (videoUUID: string, error: LiveVideoErrorType | null) { + stopSessionOf (options: { + videoUUID: string + error: LiveVideoErrorType | null + errorOnReplay?: boolean + }) { + const { videoUUID, error } = options + const sessionId = this.videoSessions.get(videoUUID) if (!sessionId) { logger.debug('No live session to stop for video %s', videoUUID, lTags(sessionId, videoUUID)) @@ -196,7 +202,7 @@ class LiveManager { logger.info('Stopping live session of video %s', videoUUID, { error, ...lTags(sessionId, videoUUID) }) - this.saveEndingSession(videoUUID, error) + this.saveEndingSession(options) .catch(err => logger.error('Cannot save ending session.', { err, ...lTags(sessionId, videoUUID) })) this.videoSessions.delete(videoUUID) @@ -338,23 +344,23 @@ class LiveManager { localLTags ) - this.stopSessionOf(videoUUID, LiveVideoError.BAD_SOCKET_HEALTH) + this.stopSessionOf({ videoUUID, error: LiveVideoError.BAD_SOCKET_HEALTH }) }) muxingSession.on('duration-exceeded', ({ videoUUID }) => { logger.info('Stopping session of %s: max duration exceeded.', videoUUID, localLTags) - this.stopSessionOf(videoUUID, LiveVideoError.DURATION_EXCEEDED) + this.stopSessionOf({ videoUUID, error: LiveVideoError.DURATION_EXCEEDED }) }) muxingSession.on('quota-exceeded', ({ videoUUID }) => { logger.info('Stopping session of %s: user quota exceeded.', videoUUID, localLTags) - this.stopSessionOf(videoUUID, LiveVideoError.QUOTA_EXCEEDED) + this.stopSessionOf({ videoUUID, error: LiveVideoError.QUOTA_EXCEEDED }) }) muxingSession.on('transcoding-error', ({ videoUUID }) => { - this.stopSessionOf(videoUUID, LiveVideoError.FFMPEG_ERROR) + this.stopSessionOf({ videoUUID, error: LiveVideoError.FFMPEG_ERROR }) }) muxingSession.on('transcoding-end', ({ videoUUID }) => { @@ -377,7 +383,15 @@ class LiveManager { muxingSession.runMuxing() .catch(err => { logger.error('Cannot run muxing.', { err, ...localLTags }) - this.abortSession(sessionId) + + this.muxingSessions.delete(sessionId) + muxingSession.destroy() + + this.stopSessionOf({ + videoUUID, + error: err.liveVideoErrorCode || LiveVideoError.UNKNOWN_ERROR, + errorOnReplay: true // Replay cannot be processed as muxing session failed directly + }) }) } @@ -417,7 +431,7 @@ class LiveManager { this.videoSessions.delete(videoUUID) - this.saveEndingSession(videoUUID, null) + this.saveEndingSession({ videoUUID, error: null }) .catch(err => logger.error('Cannot save ending session.', { err, ...lTags(sessionId) })) } @@ -535,13 +549,23 @@ class LiveManager { }) } - private async saveEndingSession (videoUUID: string, error: LiveVideoErrorType | null) { + private async saveEndingSession (options: { + videoUUID: string + error: LiveVideoErrorType | null + errorOnReplay?: boolean + }) { + const { videoUUID, error, errorOnReplay } = options + const liveSession = await VideoLiveSessionModel.findCurrentSessionOf(videoUUID) if (!liveSession) return liveSession.endDate = new Date() liveSession.error = error + if (errorOnReplay === true) { + liveSession.endingProcessed = true + } + return liveSession.save() } diff --git a/server/core/lib/live/shared/muxing-session.ts b/server/core/lib/live/shared/muxing-session.ts index 1a71a04d7..f5343b98f 100644 --- a/server/core/lib/live/shared/muxing-session.ts +++ b/server/core/lib/live/shared/muxing-session.ts @@ -14,7 +14,7 @@ import { removeHLSFileObjectStorageByPath, storeHLSFileFromContent, storeHLSFile import { VideoFileModel } from '@server/models/video/video-file.js' import { VideoStreamingPlaylistModel } from '@server/models/video/video-streaming-playlist.js' import { MStreamingPlaylistVideo, MUserId, MVideoLiveVideo } from '@server/types/models/index.js' -import { VideoStorage, VideoStreamingPlaylistType } from '@peertube/peertube-models' +import { LiveVideoError, VideoStorage, VideoStreamingPlaylistType } from '@peertube/peertube-models' import { generateHLSMasterPlaylistFilename, generateHlsSha256SegmentsFilename, @@ -26,6 +26,7 @@ import { LiveQuotaStore } from '../live-quota-store.js' import { LiveSegmentShaStore } from '../live-segment-sha-store.js' import { buildConcatenatedName, getLiveSegmentTime } from '../live-utils.js' import { AbstractTranscodingWrapper, FFmpegTranscodingWrapper, RemoteTranscodingWrapper } from './transcoding-wrapper/index.js' +import { wait } from '@peertube/peertube-core-utils' interface MuxingSessionEvents { 'live-ready': (options: { videoUUID: string }) => void @@ -186,7 +187,16 @@ class MuxingSession extends EventEmitter { try { if (this.streamingPlaylist.storage === VideoStorage.OBJECT_STORAGE) { - const masterContent = await readFile(path, 'utf-8') + let masterContent = await readFile(path, 'utf-8') + + // If the disk sync is slow, don't upload an empty master playlist on object storage + // Wait for ffmpeg to correctly fill it + while (!masterContent) { + await wait(100) + + masterContent = await readFile(path, 'utf-8') + } + logger.debug('Uploading live master playlist on object storage for %s', this.videoUUID, { masterContent, ...this.lTags() }) const url = await storeHLSFileFromContent(this.streamingPlaylist, this.streamingPlaylist.playlistFilename, masterContent) @@ -480,10 +490,21 @@ class MuxingSession extends EventEmitter { inputLocalUrl: this.inputLocalUrl, inputPublicUrl: this.inputPublicUrl, - toTranscode: this.allResolutions.map(resolution => ({ - resolution, - fps: computeOutputFPS({ inputFPS: this.fps, resolution }) - })), + toTranscode: this.allResolutions.map(resolution => { + let toTranscodeFPS: number + + try { + toTranscodeFPS = computeOutputFPS({ inputFPS: this.fps, resolution }) + } catch (err) { + err.liveVideoErrorCode = LiveVideoError.INVALID_INPUT_VIDEO_STREAM + throw err + } + + return { + resolution, + fps: toTranscodeFPS + } + }), fps: this.fps, bitrate: this.bitrate, diff --git a/server/core/lib/opentelemetry/metric-helpers/worker-threads-observers.ts b/server/core/lib/opentelemetry/metric-helpers/worker-threads-observers.ts new file mode 100644 index 000000000..3761b8aa0 --- /dev/null +++ b/server/core/lib/opentelemetry/metric-helpers/worker-threads-observers.ts @@ -0,0 +1,32 @@ +import { Meter } from '@opentelemetry/api' +import { getWorkersStats } from '@server/lib/worker/parent-process.js' + +export class WorkerThreadsObserversBuilder { + + constructor (private readonly meter: Meter) { + + } + + buildObservers () { + this.meter.createObservableGauge('peertube_worker_thread_queue_total', { + description: 'Total tasks waiting for a PeerTube worker thread' + }).addCallback(observableResult => { + const stats = getWorkersStats() + + for (const stat of stats) { + observableResult.observe(stat.queueSize, { state: 'waiting', workerThread: stat.label }) + } + }) + + this.meter.createObservableGauge('peertube_worker_thread_completed_total', { + description: 'Total tasks completed in PeerTube worker threads' + }).addCallback(observableResult => { + const stats = getWorkersStats() + + for (const stat of stats) { + observableResult.observe(stat.completed, { workerThread: stat.label }) + } + }) + } + +} diff --git a/server/core/lib/opentelemetry/metrics.ts b/server/core/lib/opentelemetry/metrics.ts index 7276182ef..9d70fbe19 100644 --- a/server/core/lib/opentelemetry/metrics.ts +++ b/server/core/lib/opentelemetry/metrics.ts @@ -15,6 +15,7 @@ import { StatsObserversBuilder, ViewersObserversBuilder } from './metric-helpers/index.js' +import { WorkerThreadsObserversBuilder } from './metric-helpers/worker-threads-observers.js' class OpenTelemetryMetrics { @@ -69,23 +70,13 @@ class OpenTelemetryMetrics { this.playbackMetrics = new PlaybackMetrics(this.meter) this.playbackMetrics.buildCounters() - const nodeJSObserversBuilder = new NodeJSObserversBuilder(this.meter) - nodeJSObserversBuilder.buildObservers() - - const jobQueueObserversBuilder = new JobQueueObserversBuilder(this.meter) - jobQueueObserversBuilder.buildObservers() - - const statsObserversBuilder = new StatsObserversBuilder(this.meter) - statsObserversBuilder.buildObservers() - - const livesObserversBuilder = new LivesObserversBuilder(this.meter) - livesObserversBuilder.buildObservers() - - const viewersObserversBuilder = new ViewersObserversBuilder(this.meter) - viewersObserversBuilder.buildObservers() - - const bittorrentTrackerObserversBuilder = new BittorrentTrackerObserversBuilder(this.meter, options.trackerServer) - bittorrentTrackerObserversBuilder.buildObservers() + new NodeJSObserversBuilder(this.meter).buildObservers() + new JobQueueObserversBuilder(this.meter).buildObservers() + new StatsObserversBuilder(this.meter).buildObservers() + new LivesObserversBuilder(this.meter).buildObservers() + new ViewersObserversBuilder(this.meter).buildObservers() + new WorkerThreadsObserversBuilder(this.meter).buildObservers() + new BittorrentTrackerObserversBuilder(this.meter, options.trackerServer).buildObservers() } observePlaybackMetric (video: MVideoImmutable, metrics: PlaybackMetricCreate) { diff --git a/server/core/lib/redis.ts b/server/core/lib/redis.ts index 7c87bf2e3..d06e18fb2 100644 --- a/server/core/lib/redis.ts +++ b/server/core/lib/redis.ts @@ -352,9 +352,9 @@ class Redis { return { setKey: `local-video-views-buffer`, videoKey: `local-video-views-buffer-${videoId}` } } - private generateLocalVideoViewerKeys (ip: string, videoId: number): { setKey: string, viewerKey: string } - private generateLocalVideoViewerKeys (): { setKey: string } - private generateLocalVideoViewerKeys (ip?: string, videoId?: number) { + generateLocalVideoViewerKeys (ip: string, videoId: number): { setKey: string, viewerKey: string } + generateLocalVideoViewerKeys (): { setKey: string } + generateLocalVideoViewerKeys (ip?: string, videoId?: number) { return { setKey: `local-video-viewer-stats-keys`, viewerKey: `local-video-viewer-stats-${ip}-${videoId}` } } @@ -382,7 +382,7 @@ class Redis { return 'verify-email-registration-' + registrationId } - private generateIPViewKey (ip: string, videoUUID: string) { + generateIPViewKey (ip: string, videoUUID: string) { return `views-${videoUUID}-${ip}` } diff --git a/server/core/lib/runners/job-handlers/live-rtmp-hls-transcoding-job-handler.ts b/server/core/lib/runners/job-handlers/live-rtmp-hls-transcoding-job-handler.ts index 1cbd6d302..f35d2f586 100644 --- a/server/core/lib/runners/job-handlers/live-rtmp-hls-transcoding-job-handler.ts +++ b/server/core/lib/runners/job-handlers/live-rtmp-hls-transcoding-job-handler.ts @@ -165,7 +165,7 @@ export class LiveRTMPHLSTranscodingJobHandler extends AbstractJobHandler() + constructor () { setInterval(() => this.processViewerStats(), VIEW_LIFETIME.VIEWER_STATS) } @@ -56,7 +58,7 @@ export class VideoViewerStats { // --------------------------------------------------------------------------- async getWatchTime (videoId: number, ip: string) { - const stats: LocalViewerStats = await Redis.Instance.getLocalVideoViewer({ ip, videoId }) + const stats: LocalViewerStats = await this.getLocalVideoViewerByIP({ ip, videoId }) return stats?.watchTime || 0 } @@ -72,7 +74,7 @@ export class VideoViewerStats { const { video, ip, viewEvent, currentTime } = options const nowMs = new Date().getTime() - let stats: LocalViewerStats = await Redis.Instance.getLocalVideoViewer({ ip, videoId: video.id }) + let stats: LocalViewerStats = await this.getLocalVideoViewerByIP({ ip, videoId: video.id }) if (stats && stats.watchSections.length >= MAX_LOCAL_VIEWER_WATCH_SECTIONS) { logger.warn('Too much watch section to store for a viewer, skipping this one', { currentTime, viewEvent, ...lTags(video.uuid) }) @@ -121,7 +123,7 @@ export class VideoViewerStats { logger.debug('Set local video viewer stats for video %s.', video.uuid, { stats, ...lTags(video.uuid) }) - await Redis.Instance.setLocalVideoViewer(ip, video.id, stats) + await this.setLocalVideoViewer(ip, video.id, stats) } async processViewerStats () { @@ -136,7 +138,7 @@ export class VideoViewerStats { const allKeys = await Redis.Instance.listLocalVideoViewerKeys() for (const key of allKeys) { - const stats: LocalViewerStats = await Redis.Instance.getLocalVideoViewer({ key }) + const stats: LocalViewerStats = await this.getLocalVideoViewerByKey(key) // Process expired stats if (stats.lastUpdated > now - VIEW_LIFETIME.VIEWER_STATS) { @@ -155,7 +157,7 @@ export class VideoViewerStats { } }) - await Redis.Instance.deleteLocalVideoViewersKeys(key) + await this.deleteLocalVideoViewersKeys(key) } catch (err) { logger.error('Cannot process viewer stats for Redis key %s.', key, { err, ...lTags() }) } @@ -193,4 +195,39 @@ export class VideoViewerStats { private buildWatchTimeFromSections (sections: { start: number, end: number }[]) { return sections.reduce((p, current) => p + (current.end - current.start), 0) } + + /** + * + * Redis calls can be expensive so try to cache things in front of it + * + */ + + private getLocalVideoViewerByIP (options: { + ip: string + videoId: number + }): Promise { + const { viewerKey } = Redis.Instance.generateLocalVideoViewerKeys(options.ip, options.videoId) + + return this.getLocalVideoViewerByKey(viewerKey) + } + + private getLocalVideoViewerByKey (key: string): Promise { + const viewer = this.viewerCache.get(key) + if (viewer) return Promise.resolve(viewer) + + return Redis.Instance.getLocalVideoViewer({ key }) + } + + private setLocalVideoViewer (ip: string, videoId: number, stats: LocalViewerStats) { + const { viewerKey } = Redis.Instance.generateLocalVideoViewerKeys(ip, videoId) + this.viewerCache.set(viewerKey, stats) + + return Redis.Instance.setLocalVideoViewer(ip, videoId, stats) + } + + private deleteLocalVideoViewersKeys (key: string) { + this.viewerCache.delete(key) + + return Redis.Instance.deleteLocalVideoViewersKeys(key) + } } diff --git a/server/core/lib/views/shared/video-views.ts b/server/core/lib/views/shared/video-views.ts index ee56e30bc..3ce415dbe 100644 --- a/server/core/lib/views/shared/video-views.ts +++ b/server/core/lib/views/shared/video-views.ts @@ -5,11 +5,18 @@ import { getServerActor } from '@server/models/application/application.js' import { MVideo, MVideoImmutable } from '@server/types/models/index.js' import { buildUUID } from '@peertube/peertube-node-utils' import { Redis } from '../../redis.js' +import { LRUCache } from 'lru-cache' +import { VIEW_LIFETIME } from '@server/initializers/constants.js' const lTags = loggerTagsFactory('views') export class VideoViews { + private readonly viewsCache = new LRUCache({ + max: 10_000, + ttl: VIEW_LIFETIME.VIEW + }) + async addLocalView (options: { video: MVideoImmutable ip: string @@ -21,10 +28,10 @@ export class VideoViews { if (!await this.hasEnoughWatchTime(video, watchTime)) return false - const viewExists = await Redis.Instance.doesVideoIPViewExist(ip, video.uuid) + const viewExists = await this.doesVideoIPViewExist(ip, video.uuid) if (viewExists) return false - await Redis.Instance.setIPVideoView(ip, video.uuid) + await this.setIPVideoView(ip, video.uuid) await this.addView(video) @@ -67,4 +74,19 @@ export class VideoViews { // Check more than 50% of the video is watched return duration / watchTime < 2 } + + private doesVideoIPViewExist (ip: string, videoUUID: string) { + const key = Redis.Instance.generateIPViewKey(ip, videoUUID) + const value = this.viewsCache.has(key) + if (value === true) return Promise.resolve(true) + + return Redis.Instance.doesVideoIPViewExist(ip, videoUUID) + } + + private setIPVideoView (ip: string, videoUUID: string) { + const key = Redis.Instance.generateIPViewKey(ip, videoUUID) + this.viewsCache.set(key, true) + + return Redis.Instance.setIPVideoView(ip, videoUUID) + } } diff --git a/server/core/lib/worker/parent-process.ts b/server/core/lib/worker/parent-process.ts index d59726905..7aa003fe9 100644 --- a/server/core/lib/worker/parent-process.ts +++ b/server/core/lib/worker/parent-process.ts @@ -5,10 +5,13 @@ import type httpBroadcast from './workers/http-broadcast.js' import type downloadImage from './workers/image-downloader.js' import type processImage from './workers/image-processor.js' import type getImageSize from './workers/get-image-size.js' +import type signJsonLDObject from './workers/sign-json-ld-object.js' +import type buildDigest from './workers/build-digest.js' +import type httpUnicast from './workers/http-unicast.js' let downloadImageWorker: Piscina -function downloadImageFromWorker (options: Parameters[0]): Promise> { +export function downloadImageFromWorker (options: Parameters[0]): Promise> { if (!downloadImageWorker) { downloadImageWorker = new Piscina({ filename: new URL(join('workers', 'image-downloader.js'), import.meta.url).href, @@ -24,7 +27,7 @@ function downloadImageFromWorker (options: Parameters[0]): let processImageWorker: Piscina -function processImageFromWorker (options: Parameters[0]): Promise> { +export function processImageFromWorker (options: Parameters[0]): Promise> { if (!processImageWorker) { processImageWorker = new Piscina({ filename: new URL(join('workers', 'image-processor.js'), import.meta.url).href, @@ -40,7 +43,7 @@ function processImageFromWorker (options: Parameters[0]): P let getImageSizeWorker: Piscina -function getImageSizeFromWorker (options: Parameters[0]): Promise> { +export function getImageSizeFromWorker (options: Parameters[0]): Promise> { if (!getImageSizeWorker) { getImageSizeWorker = new Piscina({ filename: new URL(join('workers', 'get-image-size.js'), import.meta.url).href, @@ -56,7 +59,7 @@ function getImageSizeFromWorker (options: Parameters[0]): P let parallelHTTPBroadcastWorker: Piscina -function parallelHTTPBroadcastFromWorker (options: Parameters[0]): Promise> { +export function parallelHTTPBroadcastFromWorker (options: Parameters[0]): Promise> { if (!parallelHTTPBroadcastWorker) { parallelHTTPBroadcastWorker = new Piscina({ filename: new URL(join('workers', 'http-broadcast.js'), import.meta.url).href, @@ -73,7 +76,9 @@ function parallelHTTPBroadcastFromWorker (options: Parameters[0]): Promise> { +export function sequentialHTTPBroadcastFromWorker ( + options: Parameters[0] +): Promise> { if (!sequentialHTTPBroadcastWorker) { sequentialHTTPBroadcastWorker = new Piscina({ filename: new URL(join('workers', 'http-broadcast.js'), import.meta.url).href, @@ -86,10 +91,105 @@ function sequentialHTTPBroadcastFromWorker (options: Parameters[0] +): Promise> { + if (!httpUnicastWorker) { + httpUnicastWorker = new Piscina({ + filename: new URL(join('workers', 'http-unicast.js'), import.meta.url).href, + // Keep it sync with job concurrency so the worker will accept all the requests sent by the parallelized jobs + concurrentTasksPerWorker: JOB_CONCURRENCY['activitypub-http-unicast'], + maxThreads: 1 + }) + } + + return httpUnicastWorker.run(options) +} + +// --------------------------------------------------------------------------- + +let signJsonLDObjectWorker: Piscina + +export function signJsonLDObjectFromWorker ( + options: Parameters>[0] +): ReturnType> { + if (!signJsonLDObjectWorker) { + signJsonLDObjectWorker = new Piscina({ + filename: new URL(join('workers', 'sign-json-ld-object.js'), import.meta.url).href, + concurrentTasksPerWorker: WORKER_THREADS.SIGN_JSON_LD_OBJECT.CONCURRENCY, + maxThreads: WORKER_THREADS.SIGN_JSON_LD_OBJECT.MAX_THREADS + }) + } + + return signJsonLDObjectWorker.run(options) +} + +// --------------------------------------------------------------------------- + +let buildDigestWorker: Piscina + +export function buildDigestFromWorker ( + options: Parameters[0] +): Promise> { + if (!buildDigestWorker) { + buildDigestWorker = new Piscina({ + filename: new URL(join('workers', 'build-digest.js'), import.meta.url).href, + // Keep it sync with job concurrency so the worker will accept all the requests sent by the parallelized jobs + concurrentTasksPerWorker: WORKER_THREADS.BUILD_DIGEST.CONCURRENCY, + maxThreads: WORKER_THREADS.BUILD_DIGEST.MAX_THREADS + }) + } + + return buildDigestWorker.run(options) +} + +// --------------------------------------------------------------------------- + +export function getWorkersStats () { + return [ + { + label: 'downloadImage', + queueSize: downloadImageWorker?.queueSize || 0, + completed: downloadImageWorker?.completed || 0 + }, + { + label: 'processImageWorker', + queueSize: processImageWorker?.queueSize || 0, + completed: processImageWorker?.completed || 0 + }, + { + label: 'getImageSizeWorker', + queueSize: getImageSizeWorker?.queueSize || 0, + completed: getImageSizeWorker?.completed || 0 + }, + { + label: 'parallelHTTPBroadcastWorker', + queueSize: parallelHTTPBroadcastWorker?.queueSize || 0, + completed: parallelHTTPBroadcastWorker?.completed || 0 + }, + { + label: 'sequentialHTTPBroadcastWorker', + queueSize: sequentialHTTPBroadcastWorker?.queueSize || 0, + completed: sequentialHTTPBroadcastWorker?.completed || 0 + }, + { + label: 'httpUnicastWorker', + queueSize: httpUnicastWorker?.queueSize || 0, + completed: httpUnicastWorker?.completed || 0 + }, + { + label: 'signJsonLDObjectWorker', + queueSize: signJsonLDObjectWorker?.queueSize || 0, + completed: signJsonLDObjectWorker?.completed || 0 + }, + { + label: 'buildDigestWorker', + queueSize: buildDigestWorker?.queueSize || 0, + completed: buildDigestWorker?.completed || 0 + } + ] } diff --git a/server/core/lib/worker/workers/build-digest.ts b/server/core/lib/worker/workers/build-digest.ts new file mode 100644 index 000000000..7a7c812d6 --- /dev/null +++ b/server/core/lib/worker/workers/build-digest.ts @@ -0,0 +1,3 @@ +import { buildDigest } from '@server/helpers/peertube-crypto.js' + +export default buildDigest diff --git a/server/core/lib/worker/workers/http-unicast.ts b/server/core/lib/worker/workers/http-unicast.ts new file mode 100644 index 000000000..5c8e4793e --- /dev/null +++ b/server/core/lib/worker/workers/http-unicast.ts @@ -0,0 +1,10 @@ +import { doRequest, PeerTubeRequestOptions } from '@server/helpers/requests.js' + +async function httpUnicast (payload: { + uri: string + requestOptions: PeerTubeRequestOptions +}) { + await doRequest(payload.uri, payload.requestOptions) +} + +export default httpUnicast diff --git a/server/core/lib/worker/workers/sign-json-ld-object.ts b/server/core/lib/worker/workers/sign-json-ld-object.ts new file mode 100644 index 000000000..9baf7c7b0 --- /dev/null +++ b/server/core/lib/worker/workers/sign-json-ld-object.ts @@ -0,0 +1,3 @@ +import { signJsonLDObject } from '@server/helpers/peertube-crypto.js' + +export default signJsonLDObject diff --git a/server/core/models/video/sql/video/videos-id-list-query-builder.ts b/server/core/models/video/sql/video/videos-id-list-query-builder.ts index 090eaddbc..01a877c57 100644 --- a/server/core/models/video/sql/video/videos-id-list-query-builder.ts +++ b/server/core/models/video/sql/video/videos-id-list-query-builder.ts @@ -434,28 +434,30 @@ export class VideosIdListQueryBuilder extends AbstractRunQuery { private whereTagsOneOf (tagsOneOf: string[]) { const tagsOneOfLower = tagsOneOf.map(t => t.toLowerCase()) - this.and.push( - 'EXISTS (' + - ' SELECT 1 FROM "videoTag" ' + + this.cte.push( + '"tagsOneOf" AS (' + + ' SELECT "videoTag"."videoId" AS "videoId" FROM "videoTag" ' + ' INNER JOIN "tag" ON "tag"."id" = "videoTag"."tagId" ' + ' WHERE lower("tag"."name") IN (' + createSafeIn(this.sequelize, tagsOneOfLower) + ') ' + - ' AND "video"."id" = "videoTag"."videoId"' + ')' ) + + this.joins.push('INNER JOIN "tagsOneOf" ON "video"."id" = "tagsOneOf"."videoId"') } private whereTagsAllOf (tagsAllOf: string[]) { const tagsAllOfLower = tagsAllOf.map(t => t.toLowerCase()) - this.and.push( - 'EXISTS (' + - ' SELECT 1 FROM "videoTag" ' + + this.cte.push( + '"tagsAllOf" AS (' + + ' SELECT "videoTag"."videoId" AS "videoId" FROM "videoTag" ' + ' INNER JOIN "tag" ON "tag"."id" = "videoTag"."tagId" ' + ' WHERE lower("tag"."name") IN (' + createSafeIn(this.sequelize, tagsAllOfLower) + ') ' + - ' AND "video"."id" = "videoTag"."videoId" ' + ' GROUP BY "videoTag"."videoId" HAVING COUNT(*) = ' + tagsAllOfLower.length + ')' ) + + this.joins.push('INNER JOIN "tagsAllOf" ON "video"."id" = "tagsAllOf"."videoId"') } private wherePrivacyOneOf (privacyOneOf: VideoPrivacyType[]) { diff --git a/server/core/models/video/video-streaming-playlist.ts b/server/core/models/video/video-streaming-playlist.ts index 0c4043c44..ef6437513 100644 --- a/server/core/models/video/video-streaming-playlist.ts +++ b/server/core/models/video/video-streaming-playlist.ts @@ -139,9 +139,10 @@ export class VideoStreamingPlaylistModel extends Model>> { logger.info('Stopping live of video %s after video deletion.', instance.uuid) - LiveManager.Instance.stopSessionOf(instance.uuid, null) + LiveManager.Instance.stopSessionOf({ videoUUID: instance.uuid, error: null }) } @BeforeDestroy @@ -1241,6 +1247,8 @@ export class VideoModel extends Model>> { uuids?: string[] excludeAlreadyWatched?: boolean + + countVideos?: boolean }) { VideoModel.throwIfPrivateIncludeWithoutUser(options.include, options.user) VideoModel.throwIfPrivacyOneOfWithoutUser(options.privacyOneOf, options.user) @@ -1281,7 +1289,7 @@ export class VideoModel extends Model>> { serverAccountIdForBlock: serverActor.Account.id } - return VideoModel.getAvailableForApi(queryOptions) + return VideoModel.getAvailableForApi(queryOptions, options.countVideos) } static countLives (options: { diff --git a/server/server.ts b/server/server.ts index 3dc81f22e..643521281 100644 --- a/server/server.ts +++ b/server/server.ts @@ -167,27 +167,31 @@ if (isTestOrDevInstance()) { })) } -// For the logger -token('remote-addr', (req: express.Request) => { - if (CONFIG.LOG.ANONYMIZE_IP === true || req.get('DNT') === '1') { - return anonymize(req.ip, 16, 16) - } +// HTTP logging +if (CONFIG.LOG.LOG_HTTP_REQUESTS) { + token('remote-addr', (req: express.Request) => { + if (CONFIG.LOG.ANONYMIZE_IP === true || req.get('DNT') === '1') { + return anonymize(req.ip, 16, 16) + } - return req.ip -}) -token('user-agent', (req: express.Request) => { - if (req.get('DNT') === '1') { - return parse(req.get('user-agent')).family - } + return req.ip + }) - return req.get('user-agent') -}) -app.use(morgan('combined', { - stream: { - write: (str: string) => logger.info(str.trim(), { tags: [ 'http' ] }) - }, - skip: req => CONFIG.LOG.LOG_PING_REQUESTS === false && req.originalUrl === '/api/v1/ping' -})) + token('user-agent', (req: express.Request) => { + if (req.get('DNT') === '1') { + return parse(req.get('user-agent')).family + } + + return req.get('user-agent') + }) + + app.use(morgan('combined', { + stream: { + write: (str: string) => logger.info(str.trim(), { tags: [ 'http' ] }) + }, + skip: req => CONFIG.LOG.LOG_PING_REQUESTS === false && req.originalUrl === '/api/v1/ping' + })) +} // Add .fail() helper to response app.use(apiFailMiddleware)