Merge branch 'development' into patch-1

This commit is contained in:
Luca Hohmann 2021-04-10 19:00:05 +02:00 committed by GitHub
commit dddfbb357b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 874 additions and 595 deletions

50
.github/workflows/report.yml vendored Normal file
View File

@ -0,0 +1,50 @@
# This is a basic workflow to help you get started with Actions
name: Project Board Automation
on:
issues:
types: [labeled, unlabeled, closed, deleted]
jobs:
assign-issues-to-projects:
runs-on: ubuntu-latest
steps:
# For bug reports
- name: New bug issue
uses: alex-page/github-project-automation-plus@v0.5.1
if: github.event.action == 'labeled' && contains(github.event.issue.labels.*.name, 'bug')
with:
project: Bug Reports
column: To assign
repo-token: ${{ secrets.PUSH_TOKEN }}
action: update
- name: Bug label removed
uses: alex-page/github-project-automation-plus@v0.5.1
if: github.event.action == 'unlabeled' || github.event.action == 'closed' || github.event.action == 'deleted'
with:
action: delete
project: Bug Reports
column: To assign
repo-token: ${{ secrets.PUSH_TOKEN }}
# For feature requests
- name: New feature issue
uses: alex-page/github-project-automation-plus@v0.5.1
if: github.event.action == 'labeled' && contains(github.event.issue.labels.*.name, 'enhancement')
with:
project: Feature Requests
column: To assign
repo-token: ${{ secrets.PUSH_TOKEN }}
action: update
- name: Feature request label removed
uses: alex-page/github-project-automation-plus@v0.5.1
if: github.event.action == 'unlabeled' || github.event.action == 'closed' || github.event.action == 'deleted'
with:
action: delete
project: Feature Requests
column: To assign
repo-token: ${{ secrets.PUSH_TOKEN }}

36
package-lock.json generated
View File

@ -10734,9 +10734,9 @@
} }
}, },
"y18n": { "y18n": {
"version": "4.0.0", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
"dev": true "dev": true
}, },
"yargs": { "yargs": {
@ -11499,9 +11499,9 @@
} }
}, },
"y18n": { "y18n": {
"version": "4.0.0", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
"dev": true "dev": true
}, },
"yargs": { "yargs": {
@ -18293,18 +18293,18 @@
} }
}, },
"youtube-suggest": { "youtube-suggest": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/youtube-suggest/-/youtube-suggest-1.1.1.tgz", "resolved": "https://registry.npmjs.org/youtube-suggest/-/youtube-suggest-1.1.2.tgz",
"integrity": "sha512-nMkXJV24xe0QZ67YAfEtVfdGCtuyhOMcvX4GkO824TivwQbkHMNaWlMGlUkePSXCu2vPReP6nYhknoHzmD0/Aw==", "integrity": "sha512-U1CrSIDf9q4H7lx84YiAPfGyMLIXDmSlOLrwcXBkGJFEUodzrD+ZSYMEpJK5UNVWyzE73yxvwGtqrV0dbNQ6LA==",
"requires": { "requires": {
"node-fetch": "^2.6.0", "node-fetch": "^2.6.0",
"smol-jsonp": "^1.0.0" "smol-jsonp": "^1.0.0"
} }
}, },
"yt-channel-info": { "yt-channel-info": {
"version": "1.3.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/yt-channel-info/-/yt-channel-info-1.3.0.tgz", "resolved": "https://registry.npmjs.org/yt-channel-info/-/yt-channel-info-2.0.0.tgz",
"integrity": "sha512-75ML9snDZhXSkaczR3mgcq6EyI2jjPYzjXcz5TV9C9gSRkhCv2gxVhJVPXfeUQuAa0YGySE3F1V0Yz2HyY3zfg==", "integrity": "sha512-Qrd9ONv9NbVPGGwCWPDwuQds43iXcNQHMB4iE9VqBtDt9WuMKoZd6BvoZDT10QCKisknByO1XIkM1hxbKyZNnA==",
"requires": { "requires": {
"axios": "^0.21.1", "axios": "^0.21.1",
"querystring": "^0.2.0" "querystring": "^0.2.0"
@ -18326,9 +18326,9 @@
} }
}, },
"yt-comment-scraper": { "yt-comment-scraper": {
"version": "3.0.2", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/yt-comment-scraper/-/yt-comment-scraper-3.0.2.tgz", "resolved": "https://registry.npmjs.org/yt-comment-scraper/-/yt-comment-scraper-4.0.1.tgz",
"integrity": "sha512-vWg/2D0eCJ0DTRayBmxqjZdBXSjArDFp/UAlK/r9tOq+x89hyQwuvP5r5URzLeRXGyv0g0COXsNapZGQR5aaPA==", "integrity": "sha512-5uReiiLnaBhTBBsTfxIYcoV62EATe8dXAkkUCkCG3pgLU+qty9iCjNQvSgY8tZhnCPNAPO+lJaxzbGJ3hJRm4g==",
"requires": { "requires": {
"axios": "^0.21.1", "axios": "^0.21.1",
"node-html-parser": "^2.0.2" "node-html-parser": "^2.0.2"
@ -18377,9 +18377,9 @@
} }
}, },
"yt-trending-scraper": { "yt-trending-scraper": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/yt-trending-scraper/-/yt-trending-scraper-1.1.1.tgz", "resolved": "https://registry.npmjs.org/yt-trending-scraper/-/yt-trending-scraper-1.1.2.tgz",
"integrity": "sha512-ElD3MIZ1ukjOcexYm5VIdLtY22hskrtHA9+8t/5Ox8CG7+vGlTJy2N5MUVAhh0ucoOl8cfkVrsuEUQbzXeABig==", "integrity": "sha512-kRR/bBhNBq/GAvHDSdKE9MxJcwg+CxWb/JZtr2J3xZZ5UF3txdUc3zCLxqf+RRVcdJuObxEv0MgReCwspoFoAg==",
"requires": { "requires": {
"axios": "^0.21.1" "axios": "^0.21.1"
}, },

View File

@ -46,9 +46,9 @@
"vuex": "^3.6.2", "vuex": "^3.6.2",
"xml2json": "^0.12.0", "xml2json": "^0.12.0",
"youtube-chat": "git+https://github.com/IcedCoffeee/youtube-chat.git", "youtube-chat": "git+https://github.com/IcedCoffeee/youtube-chat.git",
"youtube-suggest": "^1.1.1", "youtube-suggest": "^1.1.2",
"yt-channel-info": "^1.3.0", "yt-channel-info": "^2.0.0",
"yt-comment-scraper": "^3.0.2", "yt-comment-scraper": "^4.0.1",
"yt-dash-manifest-generator": "1.1.0", "yt-dash-manifest-generator": "1.1.0",
"yt-trending-scraper": "^1.1.1", "yt-trending-scraper": "^1.1.1",
"yt-xml2vtt": "^1.2.0", "yt-xml2vtt": "^1.2.0",

View File

@ -1,75 +1,150 @@
import { app, BrowserWindow, Menu, ipcMain, screen } from 'electron' import { app, BrowserWindow, Menu, ipcMain, screen } from 'electron'
import { productName } from '../../package.json'
import Datastore from 'nedb' import Datastore from 'nedb'
require('@electron/remote/main').initialize() if (process.argv.includes('--version')) {
console.log(`v${app.getVersion()}`)
require('electron-context-menu')({ app.exit(0)
showSearchWithGoogle: false,
showSaveImageAs: true,
showCopyImageAddress: true,
prepend: (params, browserWindow) => []
})
const localDataStorage = app.getPath('userData') // Grabs the userdata directory based on the user's OS
const settingsDb = new Datastore({
filename: localDataStorage + '/settings.db',
autoload: true
})
// set app name
app.setName(productName)
// disable electron warning
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true'
const path = require('path')
const isDev = process.env.NODE_ENV === 'development'
const isDebug = process.argv.includes('--debug')
let mainWindow
let startupUrl
// CORS somehow gets re-enabled in Electron v9.0.4
// This line disables it.
// This line can possible be removed if the issue is fixed upstream
app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors')
app.commandLine.appendSwitch('enable-accelerated-video-decode')
app.commandLine.appendSwitch('ignore-gpu-blacklist')
// See: https://stackoverflow.com/questions/45570589/electron-protocol-handler-not-working-on-windows
// remove so we can register each time as we run the app.
app.removeAsDefaultProtocolClient('freetube')
// If we are running a non-packaged version of the app && on windows
if (isDev && process.platform === 'win32') {
// Set the path of electron.exe and your app.
// These two additional parameters are only available on windows.
app.setAsDefaultProtocolClient('freetube', process.execPath, [path.resolve(process.argv[1])])
} else { } else {
app.setAsDefaultProtocolClient('freetube') runApp()
} }
// TODO: Uncomment if needed function runApp() {
// only allow single instance of application require('@electron/remote/main').initialize()
if (!isDev) {
const gotTheLock = app.requestSingleInstanceLock()
if (gotTheLock) { require('electron-context-menu')({
app.on('second-instance', (event, commandLine, workingDirectory) => { showSearchWithGoogle: false,
// Someone tried to run a second instance, we should focus our window. showSaveImageAs: true,
if (mainWindow && typeof (commandLine) !== 'undefined') { showCopyImageAddress: true,
if (mainWindow.isMinimized()) mainWindow.restore() prepend: (params, browserWindow) => []
mainWindow.focus() })
const url = getLinkUrl(commandLine) const localDataStorage = app.getPath('userData') // Grabs the userdata directory based on the user's OS
if (url) {
mainWindow.webContents.send('openUrl', url) const settingsDb = new Datastore({
filename: localDataStorage + '/settings.db',
autoload: true
})
// disable electron warning
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true'
const path = require('path')
const isDev = process.env.NODE_ENV === 'development'
const isDebug = process.argv.includes('--debug')
let mainWindow
let startupUrl
// CORS somehow gets re-enabled in Electron v9.0.4
// This line disables it.
// This line can possible be removed if the issue is fixed upstream
app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors')
app.commandLine.appendSwitch('enable-accelerated-video-decode')
app.commandLine.appendSwitch('enable-file-cookies')
app.commandLine.appendSwitch('ignore-gpu-blacklist')
// See: https://stackoverflow.com/questions/45570589/electron-protocol-handler-not-working-on-windows
// remove so we can register each time as we run the app.
app.removeAsDefaultProtocolClient('freetube')
// If we are running a non-packaged version of the app && on windows
if (isDev && process.platform === 'win32') {
// Set the path of electron.exe and your app.
// These two additional parameters are only available on windows.
app.setAsDefaultProtocolClient('freetube', process.execPath, [path.resolve(process.argv[1])])
} else {
app.setAsDefaultProtocolClient('freetube')
}
// TODO: Uncomment if needed
// only allow single instance of application
if (!isDev) {
const gotTheLock = app.requestSingleInstanceLock()
if (gotTheLock) {
app.on('second-instance', (event, commandLine, workingDirectory) => {
// Someone tried to run a second instance, we should focus our window.
if (mainWindow && typeof (commandLine) !== 'undefined') {
if (mainWindow.isMinimized()) mainWindow.restore()
mainWindow.focus()
const url = getLinkUrl(commandLine)
if (url) {
mainWindow.webContents.send('openUrl', url)
}
} }
} })
app.on('ready', (event, commandLine, workingDirectory) => {
settingsDb.find({
$or: [
{ _id: 'disableSmoothScrolling' },
{ _id: 'useProxy' },
{ _id: 'proxyProtocol' },
{ _id: 'proxyHostname' },
{ _id: 'proxyPort' }
]
}, function (err, doc) {
if (err) {
app.exit(0)
return
}
let disableSmoothScrolling = false
let useProxy = false
let proxyProtocol = 'socks5'
let proxyHostname = '127.0.0.1'
let proxyPort = '9050'
if (typeof doc === 'object' && doc.length > 0) {
doc.forEach((dbItem) => {
switch (dbItem._id) {
case 'disableSmoothScrolling':
disableSmoothScrolling = dbItem.value
break
case 'useProxy':
useProxy = dbItem.value
break
case 'proxyProtocol':
proxyProtocol = dbItem.value
break
case 'proxyHostname':
proxyHostname = dbItem.value
break
case 'proxyPort':
proxyPort = dbItem.value
break
}
})
}
if (disableSmoothScrolling) {
app.commandLine.appendSwitch('disable-smooth-scrolling')
} else {
app.commandLine.appendSwitch('enable-smooth-scrolling')
}
const proxyUrl = `${proxyProtocol}://${proxyHostname}:${proxyPort}`
createWindow(useProxy, proxyUrl)
if (isDev) {
installDevTools()
}
if (isDebug) {
mainWindow.webContents.openDevTools()
}
})
})
} else {
app.quit()
}
} else {
require('electron-debug')({
showDevTools: !(process.env.RENDERER_REMOTE_DEBUGGING === 'true')
}) })
app.on('ready', (event, commandLine, workingDirectory) => { app.on('ready', () => {
settingsDb.find({ settingsDb.find({
$or: [ $or: [
{ _id: 'disableSmoothScrolling' }, { _id: 'disableSmoothScrolling' },
@ -131,426 +206,371 @@ if (!isDev) {
} }
}) })
}) })
} else {
app.quit()
}
} else {
require('electron-debug')({
showDevTools: !(process.env.RENDERER_REMOTE_DEBUGGING === 'true')
})
app.on('ready', () => {
settingsDb.find({
$or: [
{ _id: 'disableSmoothScrolling' },
{ _id: 'useProxy' },
{ _id: 'proxyProtocol' },
{ _id: 'proxyHostname' },
{ _id: 'proxyPort' }
]
}, function (err, doc) {
if (err) {
app.exit(0)
return
}
let disableSmoothScrolling = false
let useProxy = false
let proxyProtocol = 'socks5'
let proxyHostname = '127.0.0.1'
let proxyPort = '9050'
if (typeof doc === 'object' && doc.length > 0) {
doc.forEach((dbItem) => {
switch (dbItem._id) {
case 'disableSmoothScrolling':
disableSmoothScrolling = dbItem.value
break
case 'useProxy':
useProxy = dbItem.value
break
case 'proxyProtocol':
proxyProtocol = dbItem.value
break
case 'proxyHostname':
proxyHostname = dbItem.value
break
case 'proxyPort':
proxyPort = dbItem.value
break
}
})
}
if (disableSmoothScrolling) {
app.commandLine.appendSwitch('disable-smooth-scrolling')
} else {
app.commandLine.appendSwitch('enable-smooth-scrolling')
}
const proxyUrl = `${proxyProtocol}://${proxyHostname}:${proxyPort}`
createWindow(useProxy, proxyUrl)
if (isDev) {
installDevTools()
}
if (isDebug) {
mainWindow.webContents.openDevTools()
}
})
})
}
async function installDevTools () {
try {
/* eslint-disable */
require('devtron').install()
require('vue-devtools').install()
/* eslint-enable */
} catch (err) {
console.log(err)
}
}
function createWindow (useProxy = false, proxyUrl = '') {
/**
* Initial window options
*/
mainWindow = new BrowserWindow({
backgroundColor: '#fff',
icon: isDev
? path.join(__dirname, '../../_icons/iconColor.png')
/* eslint-disable-next-line */
: `${__dirname}/_icons/iconColor.png`,
autoHideMenuBar: true,
// useContentSize: true,
webPreferences: {
nodeIntegration: true,
nodeIntegrationInWorker: false,
webSecurity: false,
backgroundThrottling: false,
enableRemoteModule: true,
contextIsolation: false
},
show: false
})
mainWindow.setBounds({
width: 1200,
height: 800
})
if (useProxy) {
mainWindow.webContents.session.setProxy({
proxyRules: proxyUrl
})
} }
settingsDb.findOne({ async function installDevTools () {
_id: 'bounds' try {
}, function (err, doc) { /* eslint-disable */
if (doc === null || err) { require('devtron').install()
return require('vue-devtools').install()
/* eslint-enable */
} catch (err) {
console.log(err)
} }
}
if (typeof doc !== 'object' || typeof doc.value !== 'object') { function createWindow (useProxy = false, proxyUrl = '') {
return /**
} * Initial window options
*/
mainWindow = new BrowserWindow({
backgroundColor: '#fff',
icon: isDev
? path.join(__dirname, '../../_icons/iconColor.png')
/* eslint-disable-next-line */
: `${__dirname}/_icons/iconColor.png`,
autoHideMenuBar: true,
// useContentSize: true,
webPreferences: {
nodeIntegration: true,
nodeIntegrationInWorker: false,
webSecurity: false,
backgroundThrottling: false,
enableRemoteModule: true,
contextIsolation: false
},
show: false
})
const { maximized, ...bounds } = doc.value mainWindow.setBounds({
const allDisplaysSummaryWidth = screen width: 1200,
.getAllDisplays() height: 800
.reduce((accumulator, { size: { width } }) => accumulator + width, 0) })
if (allDisplaysSummaryWidth >= bounds.x) { if (useProxy) {
mainWindow.setBounds({ mainWindow.webContents.session.setProxy({
x: bounds.x, proxyRules: proxyUrl
y: bounds.y,
width: bounds.width,
height: bounds.height
}) })
} }
if (maximized) {
mainWindow.maximize()
}
})
// eslint-disable-next-line // Set CONSENT cookie on reasonable domains
setMenu() [
'http://www.youtube.com',
// load root file/url 'https://www.youtube.com',
if (isDev) { 'http://youtube.com',
mainWindow.loadURL('http://localhost:9080') 'https://youtube.com'
} else { ].forEach(url => {
/* eslint-disable-next-line */ mainWindow.webContents.session.cookies.set({
mainWindow.loadFile(`${__dirname}/index.html`) url: url,
name: 'CONSENT',
global.__static = path value: 'YES+'
.join(__dirname, '/static') })
.replace(/\\/g, '\\\\') })
}
// Show when loaded
mainWindow.on('ready-to-show', () => {
mainWindow.show()
mainWindow.focus()
})
mainWindow.on('closed', () => {
console.log('closed')
})
ipcMain.on('setBounds', (_e, data) => {
const value = {
...mainWindow.getNormalBounds(),
maximized: mainWindow.isMaximized()
}
settingsDb.findOne({ settingsDb.findOne({
_id: 'bounds' _id: 'bounds'
}, function (err, doc) { }, function (err, doc) {
if (err) { if (doc === null || err) {
return return
} }
if (doc !== null) {
settingsDb.update({ if (typeof doc !== 'object' || typeof doc.value !== 'object') {
_id: 'bounds' return
}, { }
$set: {
value const { maximized, ...bounds } = doc.value
} const allDisplaysSummaryWidth = screen
}, {}) .getAllDisplays()
} else { .reduce((accumulator, { size: { width } }) => accumulator + width, 0)
settingsDb.insert({
_id: 'bounds', if (allDisplaysSummaryWidth >= bounds.x) {
value mainWindow.setBounds({
x: bounds.x,
y: bounds.y,
width: bounds.width,
height: bounds.height
}) })
} }
if (maximized) {
mainWindow.maximize()
}
}) })
})
ipcMain.on('appReady', () => { // eslint-disable-next-line
if (startupUrl) { setMenu()
mainWindow.webContents.send('openUrl', startupUrl)
// load root file/url
if (isDev) {
mainWindow.loadURL('http://localhost:9080')
} else {
/* eslint-disable-next-line */
mainWindow.loadFile(`${__dirname}/index.html`)
global.__static = path
.join(__dirname, '/static')
.replace(/\\/g, '\\\\')
} }
})
ipcMain.on('disableSmoothScrolling', () => { // Show when loaded
app.commandLine.appendSwitch('disable-smooth-scrolling') mainWindow.on('ready-to-show', () => {
mainWindow.close() mainWindow.show()
createWindow() mainWindow.focus()
})
ipcMain.on('enableSmoothScrolling', () => {
app.commandLine.appendSwitch('enable-smooth-scrolling')
mainWindow.close()
createWindow()
})
ipcMain.on('enableProxy', (event, url) => {
console.log(url)
mainWindow.webContents.session.setProxy({
proxyRules: url
}) })
})
ipcMain.on('disableProxy', () => { mainWindow.on('closed', () => {
mainWindow.webContents.session.setProxy({}) console.log('closed')
}) })
}
app.on('window-all-closed', () => { ipcMain.on('setBounds', (_e, data) => {
if (process.platform !== 'darwin') { const value = {
app.quit() ...mainWindow.getNormalBounds(),
maximized: mainWindow.isMaximized()
}
settingsDb.findOne({
_id: 'bounds'
}, function (err, doc) {
if (err) {
return
}
if (doc !== null) {
settingsDb.update({
_id: 'bounds'
}, {
$set: {
value
}
}, {})
} else {
settingsDb.insert({
_id: 'bounds',
value
})
}
})
})
ipcMain.on('appReady', () => {
if (startupUrl) {
mainWindow.webContents.send('openUrl', startupUrl)
}
})
ipcMain.on('disableSmoothScrolling', () => {
app.commandLine.appendSwitch('disable-smooth-scrolling')
mainWindow.close()
createWindow()
})
ipcMain.on('enableSmoothScrolling', () => {
app.commandLine.appendSwitch('enable-smooth-scrolling')
mainWindow.close()
createWindow()
})
ipcMain.on('enableProxy', (event, url) => {
console.log(url)
mainWindow.webContents.session.setProxy({
proxyRules: url
})
})
ipcMain.on('disableProxy', () => {
mainWindow.webContents.session.setProxy({})
})
} }
mainWindow.webContents.session.clearCache() app.on('window-all-closed', () => {
mainWindow.webContents.session.clearStorageData({ if (process.platform !== 'darwin') {
storages: [ app.quit()
'appcache',
'cookies',
'filesystem',
'indexdb',
'shadercache',
'websql',
'serviceworkers',
'cachestorage'
]
})
})
app.on('activate', () => {
if (mainWindow === null) {
createWindow()
}
})
/*
* Callback when processing a freetube:// link (macOS)
*/
app.on('open-url', (event, url) => {
event.preventDefault()
if (mainWindow && mainWindow.webContents) {
mainWindow.webContents.send('openUrl', baseUrl(url))
} else {
startupUrl = baseUrl(url)
}
})
/*
* Check if an argument was passed and send it over to the GUI (Linux / Windows).
* Remove freetube:// protocol if present
*/
const url = getLinkUrl(process.argv)
if (url) {
startupUrl = url
}
function baseUrl(arg) {
return arg.replace('freetube://', '')
}
function getLinkUrl(argv) {
if (argv.length > 1) {
return baseUrl(argv[argv.length - 1])
} else {
return null
}
}
/**
* Auto Updater
*
* Uncomment the following code below and install `electron-updater` to
* support auto updating. Code Signing with a valid certificate is required.
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-electron-builder.html#auto-updating
*/
/*
import { autoUpdater } from 'electron-updater'
autoUpdater.on('update-downloaded', () => {
autoUpdater.quitAndInstall()
})
app.on('ready', () => {
if (process.env.NODE_ENV === 'production') autoUpdater.checkForUpdates()
})
*/
/* eslint-disable-next-line */
const sendMenuEvent = async data => {
mainWindow.webContents.send('change-view', data)
}
const template = [{
label: 'File',
submenu: [
{
role: 'quit'
} }
]
},
{
label: 'Edit',
submenu: [{
role: 'cut'
},
{
role: 'copy',
accelerator: 'CmdOrCtrl+C',
selector: 'copy:'
},
{
role: 'paste',
accelerator: 'CmdOrCtrl+V',
selector: 'paste:'
},
{
role: 'pasteandmatchstyle'
},
{
role: 'delete'
},
{
role: 'selectall'
}
]
},
{
label: 'View',
submenu: [{
role: 'reload'
},
{
role: 'forcereload',
accelerator: 'CmdOrCtrl+Shift+R'
},
{
role: 'toggledevtools'
},
{
type: 'separator'
},
{
role: 'resetzoom'
},
{
role: 'zoomin'
},
{
role: 'zoomout'
},
{
type: 'separator'
},
{
role: 'togglefullscreen'
}
]
},
{
role: 'window',
submenu: [{
role: 'minimize'
},
{
role: 'close'
}
]
}
]
function setMenu () { mainWindow.webContents.session.clearCache()
if (process.platform === 'darwin') { mainWindow.webContents.session.clearStorageData({
template.unshift({ storages: [
label: app.getName(), 'appcache',
submenu: [ 'cookies',
{ role: 'about' }, 'filesystem',
{ type: 'separator' }, 'indexdb',
{ role: 'services' }, 'shadercache',
{ type: 'separator' }, 'websql',
{ role: 'hide' }, 'serviceworkers',
{ role: 'hideothers' }, 'cachestorage'
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
] ]
}) })
})
template.push({ app.on('activate', () => {
role: 'window' if (mainWindow === null) {
}) createWindow()
}
})
template.push({ /*
role: 'help' * Callback when processing a freetube:// link (macOS)
}) */
app.on('open-url', (event, url) => {
event.preventDefault()
template.push({ role: 'services' }) if (mainWindow && mainWindow.webContents) {
mainWindow.webContents.send('openUrl', baseUrl(url))
} else {
startupUrl = baseUrl(url)
}
})
/*
* Check if an argument was passed and send it over to the GUI (Linux / Windows).
* Remove freetube:// protocol if present
*/
const url = getLinkUrl(process.argv)
if (url) {
startupUrl = url
} }
const menu = Menu.buildFromTemplate(template) function baseUrl(arg) {
Menu.setApplicationMenu(menu) return arg.replace('freetube://', '')
}
function getLinkUrl(argv) {
if (argv.length > 1) {
return baseUrl(argv[argv.length - 1])
} else {
return null
}
}
/**
* Auto Updater
*
* Uncomment the following code below and install `electron-updater` to
* support auto updating. Code Signing with a valid certificate is required.
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-electron-builder.html#auto-updating
*/
/*
import { autoUpdater } from 'electron-updater'
autoUpdater.on('update-downloaded', () => {
autoUpdater.quitAndInstall()
})
app.on('ready', () => {
if (process.env.NODE_ENV === 'production') autoUpdater.checkForUpdates()
})
*/
/* eslint-disable-next-line */
const sendMenuEvent = async data => {
mainWindow.webContents.send('change-view', data)
}
const template = [{
label: 'File',
submenu: [
{
role: 'quit'
}
]
},
{
label: 'Edit',
submenu: [{
role: 'cut'
},
{
role: 'copy',
accelerator: 'CmdOrCtrl+C',
selector: 'copy:'
},
{
role: 'paste',
accelerator: 'CmdOrCtrl+V',
selector: 'paste:'
},
{
role: 'pasteandmatchstyle'
},
{
role: 'delete'
},
{
role: 'selectall'
}
]
},
{
label: 'View',
submenu: [{
role: 'reload'
},
{
role: 'forcereload',
accelerator: 'CmdOrCtrl+Shift+R'
},
{
role: 'toggledevtools'
},
{
type: 'separator'
},
{
role: 'resetzoom'
},
{
role: 'zoomin'
},
{
role: 'zoomout'
},
{
type: 'separator'
},
{
role: 'togglefullscreen'
}
]
},
{
role: 'window',
submenu: [{
role: 'minimize'
},
{
role: 'close'
}
]
}
]
function setMenu () {
if (process.platform === 'darwin') {
template.unshift({
label: app.getName(),
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideothers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
]
})
template.push({
role: 'window'
})
template.push({
role: 'help'
})
template.push({ role: 'services' })
}
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
}
} }

View File

@ -33,6 +33,10 @@ export default Vue.extend({
saveWatchedProgress: function () { saveWatchedProgress: function () {
return this.$store.getters.getSaveWatchedProgress return this.$store.getters.getSaveWatchedProgress
}, },
removeVideoMetaFiles: function () {
return this.$store.getters.getRemoveVideoMetaFiles
},
profileList: function () { profileList: function () {
return this.$store.getters.getProfileList return this.$store.getters.getProfileList
}, },
@ -66,6 +70,13 @@ export default Vue.extend({
this.updateRememberHistory(value) this.updateRememberHistory(value)
}, },
handleVideoMetaFiles: function (value) {
if (!value) {
this.updateRemoveVideoMetaFiles(false)
}
this.updateRemoveVideoMetaFiles(value)
},
handleRemoveHistory: function (option) { handleRemoveHistory: function (option) {
this.showRemoveHistoryPrompt = false this.showRemoveHistoryPrompt = false
@ -102,6 +113,7 @@ export default Vue.extend({
...mapActions([ ...mapActions([
'updateRememberHistory', 'updateRememberHistory',
'updateRemoveVideoMetaFiles',
'removeAllHistory', 'removeAllHistory',
'updateSaveWatchedProgress', 'updateSaveWatchedProgress',
'clearSessionSearchHistory', 'clearSessionSearchHistory',

View File

@ -23,6 +23,15 @@
@change="updateSaveWatchedProgress" @change="updateSaveWatchedProgress"
/> />
</div> </div>
<div class="switchColumn">
<ft-toggle-switch
:label="$t('Settings.Privacy Settings.Automatically Remove Video Meta Files')"
:compact="true"
:default-value="removeVideoMetaFiles"
:tooltip="$t('Tooltips.Privacy Settings.Remove Video Meta Files')"
@change="handleVideoMetaFiles"
/>
</div>
</div> </div>
<br> <br>
<ft-flex-box> <ft-flex-box>

View File

@ -47,8 +47,9 @@
class="commentThumbnail" class="commentThumbnail"
@click="goToChannel(comment.authorLink)" @click="goToChannel(comment.authorLink)"
> >
<p class="commentAuthor" <p
@click="goToChannel(comment.authorLink)" class="commentAuthor"
@click="goToChannel(comment.authorLink)"
> >
{{ comment.author }} {{ comment.author }}
<span class="commentDate"> <span class="commentDate">

View File

@ -27,7 +27,7 @@ Vue.component('FontAwesomeIcon', FontAwesomeIcon)
Vue.use(VueI18n) Vue.use(VueI18n)
// List of locales approved for use // List of locales approved for use
const activeLocales = ['en-US', 'en_GB', 'ar', 'bg', 'cs', 'da', 'de-DE', 'el', 'es', 'es-MX', 'fi', 'fr-FR', 'gl', 'he', 'hu', 'hr', 'id', 'it', 'ja', 'nb_NO', 'nl', 'pl', 'pt', 'pt-BR', 'pt-PT', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi', 'zh-CN', 'zh-TW'] const activeLocales = ['en-US', 'en_GB', 'ar', 'bg', 'cs', 'da', 'de-DE', 'el', 'es', 'es-MX', 'fi', 'fr-FR', 'gl', 'he', 'hu', 'hr', 'id', 'is', 'it', 'ja', 'nb_NO', 'nl', 'nn', 'pl', 'pt', 'pt-BR', 'pt-PT', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi', 'zh-CN', 'zh-TW']
const messages = {} const messages = {}
/* eslint-disable-next-line */ /* eslint-disable-next-line */
const fileLocation = isDev ? 'static/locales/' : `${__dirname}/static/locales/` const fileLocation = isDev ? 'static/locales/' : `${__dirname}/static/locales/`

View File

@ -47,6 +47,7 @@ const state = {
enableSearchSuggestions: true, enableSearchSuggestions: true,
rememberHistory: true, rememberHistory: true,
saveWatchedProgress: true, saveWatchedProgress: true,
removeVideoMetaFiles: true,
autoplayVideos: true, autoplayVideos: true,
autoplayPlaylists: true, autoplayPlaylists: true,
playNextVideo: false, playNextVideo: false,
@ -141,6 +142,10 @@ const getters = {
return state.saveWatchedProgress return state.saveWatchedProgress
}, },
getRemoveVideoMetaFiles: () => {
return state.removeVideoMetaFiles
},
getAutoplayVideos: () => { getAutoplayVideos: () => {
return state.autoplayVideos return state.autoplayVideos
}, },
@ -330,6 +335,9 @@ const actions = {
case 'saveWatchedProgress': case 'saveWatchedProgress':
commit('setSaveWatchedProgress', result.value) commit('setSaveWatchedProgress', result.value)
break break
case 'removeVideoMetaFiles':
commit('setRemoveVideoMetaFiles', result.value)
break
case 'autoplayVideos': case 'autoplayVideos':
commit('setAutoplayVideos', result.value) commit('setAutoplayVideos', result.value)
break break
@ -555,6 +563,14 @@ const actions = {
}) })
}, },
updateRemoveVideoMetaFiles ({ commit }, removeVideoMetaFiles) {
settingsDb.update({ _id: 'removeVideoMetaFiles' }, { _id: 'removeVideoMetaFiles', value: removeVideoMetaFiles }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setRemoveVideoMetaFiles', removeVideoMetaFiles)
}
})
},
updateAutoplayVideos ({ commit }, autoplayVideos) { updateAutoplayVideos ({ commit }, autoplayVideos) {
settingsDb.update({ _id: 'autoplayVideos' }, { _id: 'autoplayVideos', value: autoplayVideos }, { upsert: true }, (err, numReplaced) => { settingsDb.update({ _id: 'autoplayVideos' }, { _id: 'autoplayVideos', value: autoplayVideos }, { upsert: true }, (err, numReplaced) => {
if (!err) { if (!err) {
@ -822,6 +838,11 @@ const mutations = {
setSaveWatchedProgress (state, saveWatchedProgress) { setSaveWatchedProgress (state, saveWatchedProgress) {
state.saveWatchedProgress = saveWatchedProgress state.saveWatchedProgress = saveWatchedProgress
}, },
setRemoveVideoMetaFiles (state, removeVideoMetaFiles) {
state.removeVideoMetaFiles = removeVideoMetaFiles
},
setAutoplayVideos (state, autoplayVideos) { setAutoplayVideos (state, autoplayVideos) {
state.autoplayVideos = autoplayVideos state.autoplayVideos = autoplayVideos
}, },

View File

@ -91,6 +91,9 @@ export default Vue.extend({
rememberHistory: function () { rememberHistory: function () {
return this.$store.getters.getRememberHistory return this.$store.getters.getRememberHistory
}, },
removeVideoMetaFiles: function () {
return this.$store.getters.getRemoveVideoMetaFiles
},
saveWatchedProgress: function () { saveWatchedProgress: function () {
return this.$store.getters.getSaveWatchedProgress return this.$store.getters.getSaveWatchedProgress
}, },
@ -899,8 +902,6 @@ export default Vue.extend({
videoId: this.videoId, videoId: this.videoId,
watchProgress: currentTime watchProgress: currentTime
} }
console.log('update watch progress')
this.updateWatchProgress(payload) this.updateWatchProgress(payload)
} }
} }
@ -928,6 +929,31 @@ export default Vue.extend({
}, 200) }, 200)
} }
} }
if (this.removeVideoMetaFiles) {
const userData = remote.app.getPath('userData')
if (this.isDev) {
const dashFileLocation = `dashFiles/${this.videoId}.xml`
const vttFileLocation = `storyboards/${this.videoId}.vtt`
// only delete the file it actually exists
if (fs.existsSync('dashFiles/') && fs.existsSync(dashFileLocation)) {
fs.rmSync(dashFileLocation)
}
if (fs.existsSync('storyboards/') && fs.existsSync(vttFileLocation)) {
fs.rmSync(vttFileLocation)
}
} else {
const dashFileLocation = `${userData}/dashFiles/${this.videoId}.xml`
const vttFileLocation = `${userData}/storyboards/${this.videoId}.vtt`
if (fs.existsSync(`${userData}/dashFiles/`) && fs.existsSync(dashFileLocation)) {
fs.rmSync(dashFileLocation)
}
if (fs.existsSync(`${userData}/storyboards/`) && fs.existsSync(vttFileLocation)) {
fs.rmSync(vttFileLocation)
}
}
}
}, },
handleVideoError: function (error) { handleVideoError: function (error) {

View File

@ -18,7 +18,7 @@ Delete: 'حذف'
Select all: 'تحديد الكل' Select all: 'تحديد الكل'
Reload: 'إعادة تحميل' Reload: 'إعادة تحميل'
Force Reload: 'فرض إعادة التحميل' Force Reload: 'فرض إعادة التحميل'
Toggle Developer Tools: 'تفعيل أدوات المطوّر' Toggle Developer Tools: 'فتح أدوات المطوّر'
Actual size: 'الحجم الأصلي' Actual size: 'الحجم الأصلي'
Zoom in: 'تكبير' Zoom in: 'تكبير'
Zoom out: 'تصغير' Zoom out: 'تصغير'
@ -64,6 +64,7 @@ Search Filters:
Fetching results. Please wait: 'جاري إحضار النتائج. الرجاء الانتظار' Fetching results. Please wait: 'جاري إحضار النتائج. الرجاء الانتظار'
Fetch more results: 'إحضار المزيد من النتائج' Fetch more results: 'إحضار المزيد من النتائج'
# Sidebar # Sidebar
There are no more results for this search: لم يتبقى المزيد من النتائج لهذا البحث
Subscriptions: Subscriptions:
# On Subscriptions Page # On Subscriptions Page
Subscriptions: 'الاشتراكات' Subscriptions: 'الاشتراكات'
@ -80,6 +81,11 @@ Most Popular: 'الأكثر شعبية'
Playlists: 'قوائم التشغيل' Playlists: 'قوائم التشغيل'
User Playlists: User Playlists:
Your Playlists: 'قوائم التشغيل الخاصة بك' Your Playlists: 'قوائم التشغيل الخاصة بك'
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: ليس
لديك أي فيديو محتفظ عليه. إضغط على زر "إحفظ" في زاوية الفيديو لكي يحفظ هنا.
Playlist Message: هذه الصفحة لا تظهر قائمات التشغيل بشكل كامل, وإنما تظهر فيديوات
إحتفضت عليها أو فضّلتها. عندما يكمل العمل بالكامل على هذه الصفحة, سترى كل فيديواتك
هنا تنتقل إلى قائمة تشغيل تسمى "المفضلة".
History: History:
# On History Page # On History Page
History: 'السجلّ' History: 'السجلّ'
@ -115,6 +121,7 @@ Settings:
#! List countries #! List countries
Check for Latest Blog Posts: تحقق من أحدث منشورات المدونة Check for Latest Blog Posts: تحقق من أحدث منشورات المدونة
Check for Updates: تحقّق من وجود تحديثات Check for Updates: تحقّق من وجود تحديثات
View all Invidious instance information: عرض جميع نماذج Invidious
Theme Settings: Theme Settings:
Theme Settings: 'إعدادات السِمة' Theme Settings: 'إعدادات السِمة'
Match Top Bar with Main Color: 'طابق الشريط العلوي مع اللون الأساسي' Match Top Bar with Main Color: 'طابق الشريط العلوي مع اللون الأساسي'
@ -175,6 +182,7 @@ Settings:
1440p: '1440p' 1440p: '1440p'
4k: '4k' 4k: '4k'
8k: '8k' 8k: '8k'
Playlist Next Video Interval: الفاصل الزمني لتشغيل الفيديو التالي في قائمة التشغيل
Privacy Settings: Privacy Settings:
Privacy Settings: 'إعدادات الخصوصية' Privacy Settings: 'إعدادات الخصوصية'
Remember History: 'تذّكر سجلّ المشاهدة' Remember History: 'تذّكر سجلّ المشاهدة'
@ -191,6 +199,7 @@ Settings:
أنت متأكد أنك تريد إزالة جميع الاشتراكات والملفات الشخصية؟ لا يمكن التراجع عن أنت متأكد أنك تريد إزالة جميع الاشتراكات والملفات الشخصية؟ لا يمكن التراجع عن
هذا. هذا.
Remove All Subscriptions / Profiles: إزالة جميع الاشتراكات \ الملفات الشخصية Remove All Subscriptions / Profiles: إزالة جميع الاشتراكات \ الملفات الشخصية
Automatically Remove Video Meta Files: إزالة ملفات تعريف الفيديو تلقائيًا
Subscription Settings: Subscription Settings:
Subscription Settings: 'إعدادات الاشتراك' Subscription Settings: 'إعدادات الاشتراك'
Hide Videos on Watch: 'أخفِ الفيديوهات عند مشاهدتها' Hide Videos on Watch: 'أخفِ الفيديوهات عند مشاهدتها'
@ -265,7 +274,7 @@ Settings:
Data Settings: إعدادات البيانات Data Settings: إعدادات البيانات
One or more subscriptions were unable to be imported: تعذر استيراد واحد أو أكثر One or more subscriptions were unable to be imported: تعذر استيراد واحد أو أكثر
من الاشتراكات من الاشتراكات
Check for Legacy Subscriptions: تحقق من وجود اشتراك قديم Check for Legacy Subscriptions: تحقق من وجود اشتراكات بالصيغة القديمة
Manage Subscriptions: إدارة الإشتراكات Manage Subscriptions: إدارة الإشتراكات
Distraction Free Settings: Distraction Free Settings:
Hide Live Chat: اخفي الدردشة المباشرة Hide Live Chat: اخفي الدردشة المباشرة
@ -273,10 +282,12 @@ Settings:
Hide Trending Videos: اخفي الفيديوهات الرائجة Hide Trending Videos: اخفي الفيديوهات الرائجة
Hide Recommended Videos: اخفي الفيديوهات الموصّى بها Hide Recommended Videos: اخفي الفيديوهات الموصّى بها
Hide Comment Likes: اخفي اعجابات التعليقات Hide Comment Likes: اخفي اعجابات التعليقات
Hide Channel Subscribers: اخفي اشتراكات القنوات Hide Channel Subscribers: اخف عدد اشتراكات القناة
Hide Video Views: اخفي عدد مشاهدات الفيديوهات Hide Video Views: اخف عدد مشاهدات الفيديو
Hide Video Likes And Dislikes: إخفاء الإعجاب وعدم الإعجاب للفيديو Hide Video Likes And Dislikes: إخفاء الإعجاب وعدم الإعجاب للفيديو
Distraction Free Settings: إعدادات عدم الإزعاج Distraction Free Settings: إعدادات عدم الإزعاج
Hide Active Subscriptions: اخفي الإشتراكات الناشطة
Hide Playlists: إخفاء قوائم التشغيل
The app needs to restart for changes to take effect. Restart and apply change?: البرنامج The app needs to restart for changes to take effect. Restart and apply change?: البرنامج
يحتاج لإعادة التشغيل كي يسري مفعول التغييرات. هل تريد إعادة التشغيل و تطبيق التغييرات؟ يحتاج لإعادة التشغيل كي يسري مفعول التغييرات. هل تريد إعادة التشغيل و تطبيق التغييرات؟
Proxy Settings: Proxy Settings:
@ -291,6 +302,10 @@ Settings:
Proxy Protocol: بروتوكول البروكسي Proxy Protocol: بروتوكول البروكسي
Enable Tor / Proxy: تفعيل تور / البروكسي Enable Tor / Proxy: تفعيل تور / البروكسي
Proxy Settings: خيارات البروكسي Proxy Settings: خيارات البروكسي
Error getting network information. Is your proxy configured properly?: هنالك خطأ
في جلب معلومات الشبكة. هل ضبطت إعدادات وكيلك بصورة صحيحة؟
Clicking on Test Proxy will send a request to: النقر على اختبار البروكسي سيؤدي
إلى إرسال طلب إلى
About: About:
#On About page #On About page
About: 'حول' About: 'حول'
@ -335,6 +350,17 @@ About:
View License: اعرض الرخصة View License: اعرض الرخصة
Source code: الشفرة المصدرية Source code: الشفرة المصدرية
Beta: تجريبي Beta: تجريبي
these people and projects: هؤلاء الناس والمشاريع
FreeTube is made possible by: Freetube أصبح ممكنا بواسطة
Credits: الاعتمادات
room rules: قواعد الغرفة
Please read the: يرجى قراءة
Please check for duplicates before posting: يرجى التحقق من التكرارات قبل النشر
GitHub issues: مشاكل GitHub
FreeTube Wiki: ويكي Freetube
GitHub releases: إصدارات GitHub
Downloads / Changelog: التحميلات\التغييرات
Licensed under the AGPLv3: مرخّص تحت رخصة أفيرو جيبيإل النسخة الثالثة
Profile: Profile:
All Channels: 'جميع القنوات' All Channels: 'جميع القنوات'
Profile Manager: 'مدير الملف الشخصي' Profile Manager: 'مدير الملف الشخصي'
@ -376,6 +402,7 @@ Profile:
$ selected: $ تم اختياره $ selected: $ تم اختياره
Other Channels: قنوات أُخرى Other Channels: قنوات أُخرى
Subscription List: قائمة الاشتراكات Subscription List: قائمة الاشتراكات
Profile Filter: مرشح الملف الشخصي
Channel: Channel:
Subscriber: 'مُشترِك' Subscriber: 'مُشترِك'
Subscribers: 'مُشترِكين' Subscribers: 'مُشترِكين'
@ -465,7 +492,7 @@ Video:
Year: 'سنة' Year: 'سنة'
Years: 'سنوات' Years: 'سنوات'
Ago: 'منذ' Ago: 'منذ'
Upcoming: 'العرض الأول في' Upcoming: 'يبدأ العرض'
Published on: 'نُشر في' Published on: 'نُشر في'
# $ is replaced with the number and % with the unit (days, hours, minutes...) # $ is replaced with the number and % with the unit (days, hours, minutes...)
Publicationtemplate: 'قبل $ %' Publicationtemplate: 'قبل $ %'
@ -480,12 +507,12 @@ Video:
الصفحة للتحقق مرة أخرى الصفحة للتحقق مرة أخرى
Audio: Audio:
Best: الأفضل Best: الأفضل
High: عالٍ High: عال
Medium: متوسط Medium: متوسط
Low: منخفض Low: منخفض
audio only: صوت فقط audio only: الصوت فقط
video only: فيديو فقط video only: الفيديو فقط
Download Video: نزّل الفيديو Download Video: تحميل الفيديو
Started streaming on: بدأ البث على Started streaming on: بدأ البث على
Streamed on: تبث على Streamed on: تبث على
Copy Invidious Channel Link: انسخ رابط قناة انفيديوس Copy Invidious Channel Link: انسخ رابط قناة انفيديوس
@ -494,6 +521,7 @@ Video:
Open Channel in YouTube: افتح القناة على يوتيوب Open Channel in YouTube: افتح القناة على يوتيوب
Video has been saved: تم حفظ الفيديو Video has been saved: تم حفظ الفيديو
Save Video: احفظ الفيديو Save Video: احفظ الفيديو
Video has been removed from your saved list: تمت إزالة الفيديو من قائمتك المحفوظة
Videos: Videos:
#& Sort By #& Sort By
Sort By: Sort By:
@ -591,9 +619,9 @@ Tooltips:
General Settings: General Settings:
Thumbnail Preference: كلّ الصّور المصغّرة في FreeTube سيتمّ استبدالها بإطار من Thumbnail Preference: كلّ الصّور المصغّرة في FreeTube سيتمّ استبدالها بإطار من
الفيديو بدل من الصّورة المصغّرة الافتراضيّة الفيديو بدل من الصّورة المصغّرة الافتراضيّة
Preferred API Backend: اختر الواجهة الخلفية التي يستخدمها FreeTube لجلب البيانات Preferred API Backend: اختر الواجهة الخلفية التي يستخدمها FreeTube لجلب البيانات.
. الAPI المحلي هو مستخرج محلي . الAPI التابع لInvidious يتطلب التواصل مع خادم الواجهة البرمجية المحلية للتطبيق هي مستخرج محلي. الواجهة البرمجية للتطبيق التابعة
شبكة Invidious . لInvidious (بديل لموقع يوتيوب) يتطلب التواصل مع خادم شبكة Invidious
Invidious Instance: واجهة Invidious البرمجية المستخدمة من قبل FreeTube. امسح الواجهة Invidious Instance: واجهة Invidious البرمجية المستخدمة من قبل FreeTube. امسح الواجهة
البرمجية الحالية للاختيار من قائمة الواجهات البرمجية الحالية للاختيار من قائمة الواجهات
Fallback to Non-Preferred Backend on Failure: عند تواجد مشكلة مع الواجهة البرمجية Fallback to Non-Preferred Backend on Failure: عند تواجد مشكلة مع الواجهة البرمجية
@ -608,3 +636,18 @@ Tooltips:
باستخدام التنسيقات القديمة التي تم إرجاعها من قبلها بدلاً من أن تستخدم الصيغ باستخدام التنسيقات القديمة التي تم إرجاعها من قبلها بدلاً من أن تستخدم الصيغ
التي تم إرجاعها من قبل Invidious . يساعد هذا الخيار عندما لا تعمل الفيديوهات التي تم إرجاعها من قبل Invidious . يساعد هذا الخيار عندما لا تعمل الفيديوهات
التي تم إرجاعها من قبل Invidious بسبب قيود البلد التي تم إرجاعها من قبل Invidious بسبب قيود البلد
Default Video Format: حدّد التنسيقات المستخدمة عند تشغيل الفيديو. تنسيق داش (التدفق
الميكانيكي المتكيّف عبر بروتوكول نقل النص التشعبي) يمكنها أن تُشغِّل جودات أعلى.
التنسيقات القديمة محدودة بجودة 720p كحدّ أقصى لكنها تستخدم عرضًا أقل للنطاق.
التنسيقات الصوتية هي للتدفق الصوتي فقط
Privacy Settings:
Remove Video Meta Files: عندما يمكن، يحذف Freetube تلقائيًا ملفات التعريف التي
تم إنشاؤها أثناء تشغيل الفيديو ، عندما تكون صفحة المشاهدة مغلقة.
Subscription Settings:
Fetch Feeds from RSS: عند تفعيلها، سوف يستخدم فريتيوب طريقة RSS بدلًا من طريقته
المعتادة لجلب صفحة اشتراكاتك. طريقة RSS أسرع وتتخطى حجب الآي بي IP، لكنها لا
تقدّم معلومات معينة مثل مدّة الفيديو أو حالة البث المباشر.
This video is unavailable because of missing formats. This can happen due to country unavailability.: هذا
الفيديو غير متوفر لفقدان بعض التنسيقات. من الممكن لهذا أن يحدث بسبب الحظر في دولة
معيّنة.
More: المزيد

View File

@ -210,6 +210,7 @@ Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Сигурни Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Сигурни
ли сте, че искате да премахнете всички абонаменти и профили? Това не може да ли сте, че искате да премахнете всички абонаменти и профили? Това не може да
бъде възстановено.' бъде възстановено.'
Automatically Remove Video Meta Files: Автоматично премахване на видео метафайловете
Subscription Settings: Subscription Settings:
Subscription Settings: 'Настройки на абонаменти' Subscription Settings: 'Настройки на абонаменти'
Hide Videos on Watch: 'Скриване на видеата при гледане' Hide Videos on Watch: 'Скриване на видеата при гледане'
@ -628,10 +629,10 @@ Yes: 'Да'
No: 'Не' No: 'Не'
Tooltips: Tooltips:
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: Когато е активирано, FreeTube ще използва RSS вместо метода Fetch Feeds from RSS: FreeTube ще използва RSS вместо метода по подразбиране за
по подразбиране за получаване на абонаментите. RSS е по-бърз метод и преодолява получаване на абонаментите. RSS е по-бърз метод и преодолява блокиранията на
блокиранията на IP адреса, но не получава някои съпътстващи данни, като продължителност IP адреса, но не получава някои съпътстващи данни, като продължителност на видеото
на видеото или дали е на живо или дали е на живо
Player Settings: Player Settings:
Default Video Format: Настройка на използваните формати. Dash форматите могат Default Video Format: Настройка на използваните формати. Dash форматите могат
да показват видеа с по-високо качество. Старите формати са ограничени до макс. да показват видеа с по-високо качество. Старите формати са ограничени до макс.
@ -657,6 +658,10 @@ Tooltips:
Preferred API Backend: Избиране на начина, по който FreeTube получава данните. Preferred API Backend: Избиране на начина, по който FreeTube получава данните.
Локалният интерфейс има вградено извличане. Invidious интерфейсът изисква Invidious Локалният интерфейс има вградено извличане. Invidious интерфейсът изисква Invidious
сървър, към който да се свърже. сървър, към който да се свърже.
Privacy Settings:
Remove Video Meta Files: Когато страницата за гледане бъде затворена, FreeTube
автоматично ще изтрива метафайловете, създадени по време на възпроизвеждане
на видеото.
More: Още More: Още
Playing Next Video Interval: Пускане на следващото видео веднага. Щракнете за отказ. Playing Next Video Interval: Пускане на следващото видео веднага. Щракнете за отказ.
| Пускане на следващото видео след {nextVideoInterval} секунда. Щракнете за отказ. | Пускане на следващото видео след {nextVideoInterval} секунда. Щракнете за отказ.

View File

@ -208,6 +208,7 @@ Settings:
Remove All Subscriptions / Profiles: 'Odstranit všechna odebírání / profily' Remove All Subscriptions / Profiles: 'Odstranit všechna odebírání / profily'
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Chcete Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Chcete
opravdu odstranit všechna odebírání a profily? Toto nelze vrátit zpět.' opravdu odstranit všechna odebírání a profily? Toto nelze vrátit zpět.'
Automatically Remove Video Meta Files: Automaticky odstranit meta soubory videa
Subscription Settings: Subscription Settings:
Subscription Settings: 'Nastavení odebírání' Subscription Settings: 'Nastavení odebírání'
Hide Videos on Watch: 'Skrýt videa při přehrávání' Hide Videos on Watch: 'Skrýt videa při přehrávání'
@ -630,6 +631,9 @@ Tooltips:
IP, ale neposkytuje určité informace, jako je délka videa a podobně' IP, ale neposkytuje určité informace, jako je délka videa a podobně'
# Toast Messages # Toast Messages
Privacy Settings:
Remove Video Meta Files: Pokud je povoleno, FreeTube automaticky odstraní meta
soubory vytvořené během přehrávání videa, když se stránka sledování zavře.
Local API Error (Click to copy): 'Chyba lokálního API (kliknutím zkopírujete)' Local API Error (Click to copy): 'Chyba lokálního API (kliknutím zkopírujete)'
Invidious API Error (Click to copy): 'Chyba Invidious API (kliknutím zkopírujete)' Invidious API Error (Click to copy): 'Chyba Invidious API (kliknutím zkopírujete)'
Falling back to Invidious API: 'Přepínám na Invidious API' Falling back to Invidious API: 'Přepínám na Invidious API'

View File

@ -1,7 +1,7 @@
FreeTube: FreeTube FreeTube: FreeTube
# Currently on Subscriptions, Playlists, and History # Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >- 'This part of the app is not ready yet. Come back later when progress has been made.': >-
Dieser Teil des Programms ist noch nicht fertig. Bitte komme zu einem späteren Zeitpunkt Dieser Teil des Programms ist noch nicht fertig. Bitte komm zu einem späteren Zeitpunkt
wieder. wieder.
# Webkit Menu Bar # Webkit Menu Bar
@ -70,13 +70,13 @@ Subscriptions:
Subscriptions: Abonnements Subscriptions: Abonnements
Latest Subscriptions: Neueste Abonnements Latest Subscriptions: Neueste Abonnements
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': Deine 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': Deine
Abonnementliste ist aktuell leer. Beginne Abonnements hinzuzufügen um sie hier Abonnementliste ist aktuell leer. Beginne Abonnements hinzuzufügen, um sie hier
zu sehen. zu sehen.
'Getting Subscriptions. Please wait.': Rufe Abonnements ab. Bitte warten. 'Getting Subscriptions. Please wait.': Rufe Abonnements ab. Bitte warten.
Refresh Subscriptions: Abonnements aktualisieren Refresh Subscriptions: Abonnements aktualisieren
Getting Subscriptions. Please wait.: Lade Abonnements. Bitte warten. Getting Subscriptions. Please wait.: Lade Abonnements. Bitte warten.
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Dieses This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Dieses
Profil hat eine große Anzahl von Abonnenten. RSS zur Vermeidung von Tarifbeschränkungen Profil hat eine große Anzahl von Abonnements. RSS zur Vermeidung von Geschwindigkeitsbeschränkungen
erzwingen erzwingen
Load More Videos: Lade mehr Videos Load More Videos: Lade mehr Videos
Trending: Trends Trending: Trends
@ -85,12 +85,12 @@ Playlists: Wiedergabelisten
User Playlists: User Playlists:
Your Playlists: Deine Wiedergabelisten Your Playlists: Deine Wiedergabelisten
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Deine Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Deine
gespeicherten Videos sind leer. Klicken Sie auf die Schaltfläche „Speichern“ in gespeicherten Videos sind leer. Klicke auf die Schaltfläche „Speichern“ in der
der Ecke eines Videos, damit es hier aufgelistet wird Ecke eines Videos, damit es hier aufgelistet wird
Playlist Message: Diese Seite spiegelt nicht die vollständig funktionierenden Wiedergabelisten Playlist Message: Diese Seite spiegelt nicht die vollständig funktionierenden Wiedergabelisten
wider. Sie listet nur Videos auf, die Sie gespeichert oder favorisiert haben. wider. Sie listet nur Videos auf, die Du gespeichert oder favorisiert hast. Wenn
Wenn die Arbeiten abgeschlossen sind, werden alle Videos, die sich derzeit hier die Arbeiten abgeschlossen sind, werden alle Videos, die sich derzeit hier befinden,
befinden, in eine Wiedergabeliste „Favoriten“ migriert. in eine Wiedergabeliste „Favoriten“ migriert.
History: History:
# On History Page # On History Page
History: Verlauf History: Verlauf
@ -110,7 +110,7 @@ Settings:
Preferred API Backend: Preferred API Backend:
Preferred API Backend: Bevorzugtes API-System Preferred API Backend: Bevorzugtes API-System
Local API: Lokale API Local API: Lokale API
Invidious API: Invidious API Invidious API: Invidious-API
Video View Type: Video View Type:
Video View Type: Videoansichtstyp Video View Type: Videoansichtstyp
Grid: Gitter Grid: Gitter
@ -130,7 +130,7 @@ Settings:
View all Invidious instance information: Alle Informationen zur Invidious-Instanz View all Invidious instance information: Alle Informationen zur Invidious-Instanz
anzeigen anzeigen
Theme Settings: Theme Settings:
Theme Settings: Thema Einstellungen Theme Settings: Thema-Einstellungen
Match Top Bar with Main Color: Obere Leiste an Hauptfarbe anpassen Match Top Bar with Main Color: Obere Leiste an Hauptfarbe anpassen
Base Theme: Base Theme:
Base Theme: Grundlegendes Thema Base Theme: Grundlegendes Thema
@ -246,6 +246,7 @@ Settings:
du sicher, dass du alle Abonnements und Profile löschen möchtest? Diese Aktion du sicher, dass du alle Abonnements und Profile löschen möchtest? Diese Aktion
kann nicht rückgängig gemacht werden. kann nicht rückgängig gemacht werden.
Remove All Subscriptions / Profiles: Alle Abonnements / Profile löschen Remove All Subscriptions / Profiles: Alle Abonnements / Profile löschen
Automatically Remove Video Meta Files: Meta-Dateien von Videos automatisch löschen
Data Settings: Data Settings:
How do I import my subscriptions?: Wie importiere ich meine Abonnements? How do I import my subscriptions?: Wie importiere ich meine Abonnements?
Unknown data key: Unbekannter Datenschlüssel Unknown data key: Unbekannter Datenschlüssel
@ -669,8 +670,8 @@ Tooltips:
API nicht verfügbar sein sollte, automatisch die nicht bevorzugte Alternative API nicht verfügbar sein sollte, automatisch die nicht bevorzugte Alternative
zu nutzen. zu nutzen.
Preferred API Backend: Wähle das Backend, welches FreeTube zum Laden der Daten Preferred API Backend: Wähle das Backend, welches FreeTube zum Laden der Daten
nutzen soll. Die lokale API ist ein integrierter Extrahierer. Die Invidious nutzen soll. Die lokale API ist ein integrierter Extrahierer. Die Invidious-API
API dagegen verwendet einen externen Server. dagegen verwendet einen externen Server.
Region for Trending: Die Trendregion erlaubt es dir auszuwählen, aus welchem Land Region for Trending: Die Trendregion erlaubt es dir auszuwählen, aus welchem Land
die Trends angezeigt werden sollen. Nicht alle Optionen werden auch von YouTube die Trends angezeigt werden sollen. Nicht alle Optionen werden auch von YouTube
unterstützt unterstützt
@ -685,11 +686,14 @@ Tooltips:
dafür aber auch weniger Bandbreite. Audioformate umfassen reine Audiostreams. dafür aber auch weniger Bandbreite. Audioformate umfassen reine Audiostreams.
Proxy Videos Through Invidious: Zu Invidious verbinden, um Videos abzurufen, anstatt Proxy Videos Through Invidious: Zu Invidious verbinden, um Videos abzurufen, anstatt
eine direkten Verbindung zu YouTube aufzubauen. Überschreibt die API-Präferenz. eine direkten Verbindung zu YouTube aufzubauen. Überschreibt die API-Präferenz.
Force Local Backend for Legacy Formats: Dies funktioniert nur wenn du die Invidious Force Local Backend for Legacy Formats: Dies funktioniert nur, wenn du die Invidious-API
API als Standard ausgewählt hast. Die lokale API wird bei der Verwendung von als Standard ausgewählt hast. Die lokale API wird bei der Verwendung von Legacy
Legacy Formaten diese verwenden, anstatt auf Invidious zurückzugreifen. Dies -Formaten diese verwenden, anstatt auf Invidious zurückzugreifen. Dies hilft
hilft dann, wenn Videos von Invidious nicht abspielbar sind. Zum Beispiel aufgrund dann, wenn Videos von Invidious nicht abspielbar sind aufgrund von Landesbeschränkungen.
von Landesbeschränkungen. Privacy Settings:
Remove Video Meta Files: Bei Aktivierung löscht FreeTube alle Meta-Dateien die
während der Videowiedergabe erzeugt werden, sobald die Videoseite verlassen
wird.
Playing Next Video Interval: Nächstes Video wird sofort abgespielt. Zum Abbrechen Playing Next Video Interval: Nächstes Video wird sofort abgespielt. Zum Abbrechen
klicken. | Nächstes Video wird in {nextVideoInterval} Sekunden abgespielt. Zum Abbrechen klicken. | Nächstes Video wird in {nextVideoInterval} Sekunden abgespielt. Zum Abbrechen
klicken. | Nächstes Video wird in {nextVideoInterval} Sekunden abgespielt. Zum Abbrechen klicken. | Nächstes Video wird in {nextVideoInterval} Sekunden abgespielt. Zum Abbrechen

View File

@ -195,6 +195,7 @@ Settings:
Privacy Settings: Privacy Settings Privacy Settings: Privacy Settings
Remember History: Remember History Remember History: Remember History
Save Watched Progress: Save Watched Progress Save Watched Progress: Save Watched Progress
Automatically Remove Video Meta Files: Automatically Remove Video Meta Files
Clear Search Cache: Clear Search Cache Clear Search Cache: Clear Search Cache
Are you sure you want to clear out your search cache?: Are you sure you want to Are you sure you want to clear out your search cache?: Are you sure you want to
clear out your search cache? clear out your search cache?
@ -570,7 +571,10 @@ Tooltips:
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: When enabled, FreeTube will use RSS instead of its default Fetch Feeds from RSS: When enabled, FreeTube will use RSS instead of its default
method for grabbing your subscription feed. RSS is faster and prevents IP blocking, method for grabbing your subscription feed. RSS is faster and prevents IP blocking,
but doesn't provide certain information like video duration or live status. but doesn't provide certain information like video duration or live status
Privacy Settings:
Remove Video Meta Files: When enabled, FreeTube automatically deletes meta files created during video playback,
when the watch page is closed.
# Toast Messages # Toast Messages
Local API Error (Click to copy): Local API Error (Click to copy) Local API Error (Click to copy): Local API Error (Click to copy)

View File

@ -201,6 +201,8 @@ Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Stvarno Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Stvarno
želiš ukloniti sve pretplate i profile? Ovo je nepovratna radnja. želiš ukloniti sve pretplate i profile? Ovo je nepovratna radnja.
Remove All Subscriptions / Profiles: Ukloni sve pretplate/profile Remove All Subscriptions / Profiles: Ukloni sve pretplate/profile
Automatically Remove Video Meta Files: Automatski ukloni datoteke metapodataka
videa
Subscription Settings: Subscription Settings:
Subscription Settings: 'Postavke pretplata' Subscription Settings: 'Postavke pretplata'
Hide Videos on Watch: 'Sakrij video nakon gledanja' Hide Videos on Watch: 'Sakrij video nakon gledanja'
@ -663,6 +665,10 @@ Tooltips:
standardne metode za dohvaćanje podataka tvoje pretplate. RSS je brži i sprečava standardne metode za dohvaćanje podataka tvoje pretplate. RSS je brži i sprečava
blokiranje IP adresa, ali ne pruža određene podatke kao što su trajanje videa blokiranje IP adresa, ali ne pruža određene podatke kao što su trajanje videa
ili stanja „uživo” ili stanja „uživo”
Privacy Settings:
Remove Video Meta Files: Kad je aktivirano, FreeTube automatski uklanja datoteke
metapodataka koji su stvoreni tijekom reprodukcije videa, kad se zatvori stranica
gledanja.
Playing Next Video Interval: Trenutna reprodukcija sljedećeg videa. Pritisni za prekid. Playing Next Video Interval: Trenutna reprodukcija sljedećeg videa. Pritisni za prekid.
| Reprodukcija sljedećeg videa za {nextVideoInterval} sekunde. Pritisni za prekid. | Reprodukcija sljedećeg videa za {nextVideoInterval} sekunde. Pritisni za prekid.
| Reprodukcija sljedećeg videa za {nextVideoInterval} sekundi. Pritisni za prekid. | Reprodukcija sljedećeg videa za {nextVideoInterval} sekundi. Pritisni za prekid.

View File

@ -211,6 +211,7 @@ Settings:
Remove All Subscriptions / Profiles: 'Összes feliratkozás és profil eltávolítása' Remove All Subscriptions / Profiles: 'Összes feliratkozás és profil eltávolítása'
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Biztosan Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Biztosan
törli az összes feliratkozást és profilt? A művelet nem vonható vissza.' törli az összes feliratkozást és profilt? A művelet nem vonható vissza.'
Automatically Remove Video Meta Files: Videométafájlok önműködő eltávolítása
Subscription Settings: Subscription Settings:
Subscription Settings: 'Feliratkozás beállításai' Subscription Settings: 'Feliratkozás beállításai'
Hide Videos on Watch: 'Videók elrejtése megtekintés után' Hide Videos on Watch: 'Videók elrejtése megtekintés után'
@ -664,6 +665,9 @@ Tooltips:
visszaadott örökölt formátumokat fogja használni az Invidious által visszaadottak visszaadott örökölt formátumokat fogja használni az Invidious által visszaadottak
helyett. Segít, ha az Invidious által visszaküldött videókat nem lehet lejátszani helyett. Segít, ha az Invidious által visszaküldött videókat nem lehet lejátszani
az ország korlátozása miatt az ország korlátozása miatt
Privacy Settings:
Remove Video Meta Files: Ha engedélyezve van, a FreeTube önműködőén törli a videolejátszás
során létrehozott métafájlokat, amikor a nézési oldal bezárul.
Playing Next Video Interval: A következő videó lejátszása folyamatban van. Kattintson Playing Next Video Interval: A következő videó lejátszása folyamatban van. Kattintson
a törléshez. | A következő videó lejátszása {nextVideoInterval} másodperc múlva a törléshez. | A következő videó lejátszása {nextVideoInterval} másodperc múlva
történik. Kattintson a törléshez. | A következő videó lejátszása {nextVideoInterval} történik. Kattintson a törléshez. | A következő videó lejátszása {nextVideoInterval}

View File

@ -207,6 +207,7 @@ Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Apakah Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Apakah
Anda yakin ingin menghapus semua langganan dan profil? Tindakan ini tidak bisa Anda yakin ingin menghapus semua langganan dan profil? Tindakan ini tidak bisa
diurungkan.' diurungkan.'
Automatically Remove Video Meta Files: Secara Otomatis Hapus File Meta Video
Subscription Settings: Subscription Settings:
Subscription Settings: 'Pengaturan Langganan' Subscription Settings: 'Pengaturan Langganan'
Hide Videos on Watch: 'Sembunyikan Video saat Menonton' Hide Videos on Watch: 'Sembunyikan Video saat Menonton'
@ -654,6 +655,9 @@ Tooltips:
Preferred API Backend: Pilih layanan yang digunakan oleh FreeTube untuk mengambil Preferred API Backend: Pilih layanan yang digunakan oleh FreeTube untuk mengambil
data. API lokal adalah ekstraktor bawaan. API Invidious membutuhkan sambungan data. API lokal adalah ekstraktor bawaan. API Invidious membutuhkan sambungan
ke server Invidious. ke server Invidious.
Privacy Settings:
Remove Video Meta Files: Saat diaktifkan, FreeTube secara otomatis menghapus file
meta yang dibuat selama pemutaran video, saat halaman tonton ditutup.
Playing Next Video Interval: Langsung putar video berikutnya. Klik untuk batal. | Playing Next Video Interval: Langsung putar video berikutnya. Klik untuk batal. |
Putar video berikutnya dalam {nextVideoInterval} detik. Klik untuk batal. | Putar Putar video berikutnya dalam {nextVideoInterval} detik. Klik untuk batal. | Putar
video berikutnya dalam {nextVideoInterval} detik. Klik untuk batal. video berikutnya dalam {nextVideoInterval} detik. Klik untuk batal.

View File

@ -214,6 +214,7 @@ Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Ertu Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Ertu
viss um að þú viljir fjarlægja allar áskriftir og notkunarsnið? Ekki er hægt viss um að þú viljir fjarlægja allar áskriftir og notkunarsnið? Ekki er hægt
að afturkalla þetta.' að afturkalla þetta.'
Automatically Remove Video Meta Files: Sjálfvirkt fjarlægja lýsigögn úr myndskeiðaskrám
Subscription Settings: Subscription Settings:
Subscription Settings: 'Stillingar áskrifta' Subscription Settings: 'Stillingar áskrifta'
Hide Videos on Watch: 'Fela myndskeið eftir áhorf' Hide Videos on Watch: 'Fela myndskeið eftir áhorf'
@ -588,6 +589,9 @@ Tooltips:
á borð við tímalengd myndskeiða eða stöðu í beinni útsendingu' á borð við tímalengd myndskeiða eða stöðu í beinni útsendingu'
# Toast Messages # Toast Messages
Privacy Settings:
Remove Video Meta Files: Þegar þetta er virkt, eyðir FreeTube sjálfkrafa lýsigagnaskrám
sem útbúnar eru við afspilun, þegar skoðunarsíðunni er lokað.
Local API Error (Click to copy): 'Villa í staðværu API-kerfisviðmóti (smella til að Local API Error (Click to copy): 'Villa í staðværu API-kerfisviðmóti (smella til að
afrita)' afrita)'
Invidious API Error (Click to copy): 'Villa í Invidious API-kerfisviðmóti (smella Invidious API Error (Click to copy): 'Villa í Invidious API-kerfisviðmóti (smella

View File

@ -44,7 +44,7 @@ Search Filters:
Time: Time:
Time: 'Tijd' Time: 'Tijd'
Any Time: 'Ooit' Any Time: 'Ooit'
Last Hour: 'Laatste uur' Last Hour: 'Afgelopen uur'
Today: 'Vandaag' Today: 'Vandaag'
This Week: 'Deze week' This Week: 'Deze week'
This Month: 'Deze maand' This Month: 'Deze maand'
@ -62,7 +62,7 @@ Search Filters:
Long (> 20 minutes): 'Lang (> 20 minuten)' Long (> 20 minutes): 'Lang (> 20 minuten)'
# On Search Page # On Search Page
Search Results: 'Zoekresultaten' Search Results: 'Zoekresultaten'
Fetching results. Please wait: 'Resultaten verzamelen. Een momentje' Fetching results. Please wait: 'Resultaten verzamelen. Even geduld aub'
Fetch more results: 'Meer resultaten laden' Fetch more results: 'Meer resultaten laden'
# Sidebar # Sidebar
There are no more results for this search: Er zijn geen verdere resultaten voor There are no more results for this search: Er zijn geen verdere resultaten voor
@ -70,24 +70,24 @@ Search Filters:
Subscriptions: Subscriptions:
# On Subscriptions Page # On Subscriptions Page
Subscriptions: 'Abonnementen' Subscriptions: 'Abonnementen'
Latest Subscriptions: 'Nieuwste Van Abonnementen' Latest Subscriptions: 'Nieuwste Abonnementen'
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'U 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'U
heeft nog geen Abonnementen. Voeg abonnementen toe om ze hier te zien' heeft nog geen Abonnementen. Voeg abonnementen toe om ze hier te zien'
'Getting Subscriptions. Please wait.': '' 'Getting Subscriptions. Please wait.': ''
Refresh Subscriptions: Vernieuw abonnementen Refresh Subscriptions: Vernieuw abonnementen
Getting Subscriptions. Please wait.: Abonnementen verzamelen. Een momentje. Getting Subscriptions. Please wait.: Abonnementen verzamelen. Even geduld aub.
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Dit This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Dit
profiel heeft een groot aantal abonnementen. RSS wordt geforceerd om tariefbeperkingen profiel heeft een groot aantal abonnementen. Forceer RSS om snelheidsbeperking
te voorkomen te vermijden
Load More Videos: Laad Meer Video's Load More Videos: Meer Video's Laden
Trending: 'Trending' Trending: 'Trending'
Most Popular: 'Populair' Most Popular: 'Populair'
Playlists: 'Afspeellijsten' Playlists: 'Afspeellijsten'
User Playlists: User Playlists:
Your Playlists: 'Uw afspeellijsten' Your Playlists: 'Uw afspeellijsten'
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Je Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Je
opgeslagen video's is leeg. Klik op de video opslaan knop in de hoek van een video opgeslagen video's is leeg. Klik op de opslaan knop in de hoek van een video om
om het hier in de lijst te plaatsen het hier in de lijst te plaatsen
Playlist Message: Deze pagina is niet reflectief van volledig functionele afspeellijst. Playlist Message: Deze pagina is niet reflectief van volledig functionele afspeellijst.
Er worden alleen video's weergegeven die jij hebt opgeslagen of gefavoriet. Wanneer Er worden alleen video's weergegeven die jij hebt opgeslagen of gefavoriet. Wanneer
we klaar zijn met de ontwikkeling van deze feature zullen al deze video's worden we klaar zijn met de ontwikkeling van deze feature zullen al deze video's worden
@ -112,7 +112,7 @@ Settings:
Local API: 'Lokale API' Local API: 'Lokale API'
Invidious API: 'Invidious API' Invidious API: 'Invidious API'
Video View Type: Video View Type:
Video View Type: 'Video Toontype' Video View Type: 'Type Videoweergave'
Grid: 'Raster' Grid: 'Raster'
List: 'Lijst' List: 'Lijst'
Thumbnail Preference: Thumbnail Preference:
@ -130,14 +130,14 @@ Settings:
View all Invidious instance information: Bekijk alle Invidious-instantiegegevens View all Invidious instance information: Bekijk alle Invidious-instantiegegevens
Theme Settings: Theme Settings:
Theme Settings: 'Thema Instellingen' Theme Settings: 'Thema Instellingen'
Match Top Bar with Main Color: 'Paar Bovenste Balk met Primaire Kleur' Match Top Bar with Main Color: 'Laat de bovenste balk overeenkomen met de hoofdkleur'
Base Theme: Base Theme:
Base Theme: 'Basisthema' Base Theme: 'Basisthema'
Black: 'Zwart' Black: 'Zwart'
Dark: 'Donker' Dark: 'Donker'
Light: 'Licht' Light: 'Licht'
Main Color Theme: Main Color Theme:
Main Color Theme: 'Primaire Themakleur' Main Color Theme: 'Hoofdkleur Thema'
Red: 'Rood' Red: 'Rood'
Pink: 'Roze' Pink: 'Roze'
Purple: 'Paars' Purple: 'Paars'
@ -161,7 +161,7 @@ Settings:
Disable Smooth Scrolling: Vloeiend Scrollen Uitschakelen Disable Smooth Scrolling: Vloeiend Scrollen Uitschakelen
Player Settings: Player Settings:
Player Settings: 'Speler Instellingen' Player Settings: 'Speler Instellingen'
Force Local Backend for Legacy Formats: 'Forceer Lokale Backend Voor Legacy Indelingen' Force Local Backend for Legacy Formats: 'Lokale Backend Forceren voor Oudere Formaten'
Play Next Video: 'Volgende Video Automatisch Afspelen' Play Next Video: 'Volgende Video Automatisch Afspelen'
Turn on Subtitles by Default: 'Schakel Ondertiteling Standaard in' Turn on Subtitles by Default: 'Schakel Ondertiteling Standaard in'
Autoplay Videos: 'Video''s Automatisch Afspelen' Autoplay Videos: 'Video''s Automatisch Afspelen'
@ -171,10 +171,10 @@ Settings:
Default Volume: 'Standaard Volume' Default Volume: 'Standaard Volume'
Default Playback Rate: 'Standaard Afspeelsnelheid' Default Playback Rate: 'Standaard Afspeelsnelheid'
Default Video Format: Default Video Format:
Default Video Format: 'Standaard Video-Indeling' Default Video Format: 'Standaard Videoformaat'
Dash Formats: 'Dash Indelingen' Dash Formats: 'Dash Formaten'
Legacy Formats: 'Legacy Indelingen' Legacy Formats: 'Verouderde formaten'
Audio Formats: 'Audio Indelingen' Audio Formats: 'Audio Formaten'
Default Quality: Default Quality:
Default Quality: 'Standaard Videokwaliteit' Default Quality: 'Standaard Videokwaliteit'
Auto: 'Automatisch' Auto: 'Automatisch'
@ -190,20 +190,21 @@ Settings:
Playlist Next Video Interval: Afspeellijst Volgende Video Tussentijd Playlist Next Video Interval: Afspeellijst Volgende Video Tussentijd
Privacy Settings: Privacy Settings:
Privacy Settings: 'Privacy Instellingen' Privacy Settings: 'Privacy Instellingen'
Remember History: 'Herinner Geschiedenis' Remember History: 'Onthoud Geschiedenis'
Save Watched Progress: 'Herinner Video Voortgang' Save Watched Progress: 'Bewaar Bekeken Voortgang'
Clear Search Cache: 'Verwijder Zoek-cache' Clear Search Cache: 'Verwijder Zoek-Cache'
Are you sure you want to clear out your search cache?: 'Weet u zeker dat u de Are you sure you want to clear out your search cache?: 'Weet u zeker dat u de
zoek-cache wil verwijderen?' zoek-cache wil verwijderen?'
Search cache has been cleared: 'De zoek-cache is verwijdert' Search cache has been cleared: 'De zoek-cache is verwijderd'
Remove Watch History: 'Verwijder Kijkgeschiedenis' Remove Watch History: 'Verwijder Kijkgeschiedenis'
Are you sure you want to remove your entire watch history?: 'Weet u zeker dat Are you sure you want to remove your entire watch history?: 'Weet u zeker dat
u uw volledige kijkgeschiedenis wil verwijderen?' u uw volledige kijkgeschiedenis wil verwijderen?'
Watch history has been cleared: 'Kijkgeschiedenis is verwijdert' Watch history has been cleared: 'Kijkgeschiedenis is verwijderd'
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Weet Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Weet
u zeker dat u alle abonnementen en profielen wil verwijderen? Dit kan niet worden u zeker dat u alle abonnementen en profielen wil verwijderen? Dit kan niet worden
ontdaan. ontdaan.
Remove All Subscriptions / Profiles: Verwijder alle Abonnementen / Profielen Remove All Subscriptions / Profiles: Verwijder alle Abonnementen / Profielen
Automatically Remove Video Meta Files: Video-Metabestanden Automatisch Verwijderen
Subscription Settings: Subscription Settings:
Subscription Settings: 'Abonnement instellingen' Subscription Settings: 'Abonnement instellingen'
Hide Videos on Watch: 'Verberg Video''s Zodra Bekeken' Hide Videos on Watch: 'Verberg Video''s Zodra Bekeken'
@ -249,7 +250,7 @@ Settings:
niet genoeg data, item word overgeslagen niet genoeg data, item word overgeslagen
Subscriptions have been successfully exported: Abonnementen zijn met succes geïmporteerd Subscriptions have been successfully exported: Abonnementen zijn met succes geïmporteerd
Invalid history file: Ongeldig geschiedenisbestand Invalid history file: Ongeldig geschiedenisbestand
This might take a while, please wait: Dit kan eventjes duren, een momentje This might take a while, please wait: Dit kan eventjes duren, even geduld aub
Invalid subscriptions file: Ongeldig abonnementenbestand Invalid subscriptions file: Ongeldig abonnementenbestand
One or more subscriptions were unable to be imported: Een of meer abonnementen One or more subscriptions were unable to be imported: Een of meer abonnementen
konden niet worden geïmporteerd konden niet worden geïmporteerd
@ -296,7 +297,7 @@ Settings:
Hide Playlists: Verberg Afspeellijst Hide Playlists: Verberg Afspeellijst
The app needs to restart for changes to take effect. Restart and apply change?: De The app needs to restart for changes to take effect. Restart and apply change?: De
applicatie moet opnieuw opstarten om de veranderingen aan te brengen. Wilt u opnieuw applicatie moet opnieuw opstarten om de veranderingen aan te brengen. Wilt u opnieuw
opstarten? opstarten en verandering toepassen?
Proxy Settings: Proxy Settings:
Error getting network information. Is your proxy configured properly?: Fout bij Error getting network information. Is your proxy configured properly?: Fout bij
het opvragen van netwerk informatie. Is uw proxy correct geconfigureerd? het opvragen van netwerk informatie. Is uw proxy correct geconfigureerd?
@ -307,7 +308,7 @@ Settings:
Your Info: Uw Informatie Your Info: Uw Informatie
Test Proxy: Test Proxy Test Proxy: Test Proxy
Clicking on Test Proxy will send a request to: Door op Test Proxy te klikken zal Clicking on Test Proxy will send a request to: Door op Test Proxy te klikken zal
er een request worden verstuurd naar er een verzoek worden verstuurd naar
Proxy Port Number: Proxy Poortnummer Proxy Port Number: Proxy Poortnummer
Proxy Host: Proxy Host Proxy Host: Proxy Host
Proxy Protocol: Proxy Protocol Proxy Protocol: Proxy Protocol
@ -346,7 +347,7 @@ About:
#On Channel Page #On Channel Page
Donate: Doneer Donate: Doneer
these people and projects: deze mensen en project these people and projects: deze mensen en projecten
FreeTube is made possible by: FreeTube is mogelijk gemaakt door FreeTube is made possible by: FreeTube is mogelijk gemaakt door
Credits: Met dank aan Credits: Met dank aan
Translate: Vertalen Translate: Vertalen
@ -377,18 +378,19 @@ Channel:
Unsubscribe: 'Afmelden' Unsubscribe: 'Afmelden'
Search Channel: 'Zoek op Kanaal' Search Channel: 'Zoek op Kanaal'
Your search results have returned 0 results: 'Uw zoekactie heeft 0 resultaten opgeleverd' Your search results have returned 0 results: 'Uw zoekactie heeft 0 resultaten opgeleverd'
Sort By: 'Sorteer Bij' Sort By: 'Sorteer Op'
Videos: Videos:
Videos: 'Video''s' Videos: 'Video''s'
This channel does not currently have any videos: 'Dit kanaal heeft nog geen video''s' This channel does not currently have any videos: 'Dit kanaal heeft op dit moment
nog geen video''s'
Sort Types: Sort Types:
Newest: 'Nieuwste' Newest: 'Nieuwste'
Oldest: 'Oudste' Oldest: 'Oudste'
Most Popular: 'Meest Populair' Most Popular: 'Meest Populair'
Playlists: Playlists:
Playlists: 'Afspeellijsten' Playlists: 'Afspeellijsten'
This channel does not currently have any playlists: 'Dit kanaal heeft nog geen This channel does not currently have any playlists: 'Dit kanaal heeft momenteel
afspeellijsten' nog geen afspeellijsten'
Sort Types: Sort Types:
Last Video Added: 'Laatst Toegevoegd' Last Video Added: 'Laatst Toegevoegd'
Newest: 'Nieuwste' Newest: 'Nieuwste'
@ -466,12 +468,12 @@ Video:
#& Videos #& Videos
Autoplay: Automatisch Afspelen Autoplay: Automatisch Afspelen
Play Previous Video: Speel Vorige Video af Play Previous Video: Speel Vorige Video af
Play Next Video: Volgende Video Automatisch Afspelen Play Next Video: Volgende Video Afspelen
Reverse Playlist: Playlist Omkeren Reverse Playlist: Afspeellijst Omkeren
Shuffle Playlist: Schuifelen Playlist Shuffle Playlist: Afspeellijst in willekeurige volgorde afspelen
Loop Playlist: Herhaal Playlist Loop Playlist: Herhaal Playlist
Starting soon, please refresh the page to check again: Begint spoedig, a.u.b. herlaad Starting soon, please refresh the page to check again: Start binnenkort, vernieuw
de pagina om nog maal te checken de pagina om opnieuw te controleren
Audio: Audio:
Best: Beste Best: Beste
High: Hoog High: Hoog
@ -516,13 +518,13 @@ Playlist:
#& Views #& Views
Toggle Theatre Mode: 'Schakel Theatermodus In' Toggle Theatre Mode: 'Schakel Theatermodus In'
Change Format: Change Format:
Change Video Formats: 'Verander Video indeling' Change Video Formats: 'Verander Video Formaten'
Use Dash Formats: 'Gebruik Dash Indelingen' Use Dash Formats: 'Gebruik Dash Formaten'
Use Legacy Formats: 'Gebruik Legacy Indelingen' Use Legacy Formats: 'Gebruik Legacy Formaten'
Use Audio Formats: 'Gebruik Audio Indelingen' Use Audio Formats: 'Gebruik Audio Formaten'
Audio formats are not available for this video: Audio indelingen zijn niet beschikbaar Audio formats are not available for this video: Audio formaten zijn niet beschikbaar
voor deze video voor deze video
Dash formats are not available for this video: Dash indelingen zijn niet beschikbaar Dash formats are not available for this video: Dash formaten zijn niet beschikbaar
voor deze video voor deze video
Share: Share:
Share Video: 'Deel Video' Share Video: 'Deel Video'
@ -537,7 +539,7 @@ Share:
YouTube URL copied to clipboard: 'YouTube URL is gekopieerd naar het klembord' YouTube URL copied to clipboard: 'YouTube URL is gekopieerd naar het klembord'
YouTube Embed URL copied to clipboard: 'YouTube Insluitlink is gekopieerd naar het YouTube Embed URL copied to clipboard: 'YouTube Insluitlink is gekopieerd naar het
klemboard' klemboard'
Include Timestamp: Begrijp Tijdstempel In Include Timestamp: Inclusief Tijdstempel
YouTube Channel URL copied to clipboard: YouTube URL is gekopieerd naar het klembord YouTube Channel URL copied to clipboard: YouTube URL is gekopieerd naar het klembord
Invidious Channel URL copied to clipboard: Invidious Kanaal URL is gekopieerd naar Invidious Channel URL copied to clipboard: Invidious Kanaal URL is gekopieerd naar
het klembord het klembord
@ -545,7 +547,7 @@ Mini Player: 'Minispeler'
Comments: Comments:
Comments: 'Reacties' Comments: 'Reacties'
Click to View Comments: 'Klik om Reacties Te Tonen' Click to View Comments: 'Klik om Reacties Te Tonen'
Getting comment replies, please wait: 'Reacties worden verzameld, een momentje' Getting comment replies, please wait: 'Reacties worden verzameld, even geduld aub'
Show Comments: 'Toon Reacties' Show Comments: 'Toon Reacties'
Hide Comments: 'Verberg Reacties' Hide Comments: 'Verberg Reacties'
# Context: View 10 Replies, View 1 Reply # Context: View 10 Replies, View 1 Reply
@ -553,14 +555,15 @@ Comments:
Hide: 'Verberg' Hide: 'Verberg'
Replies: 'Reacties' Replies: 'Reacties'
Reply: 'Reactie' Reply: 'Reactie'
There are no comments available for this video: 'Er zijn geen reacties op deze video' There are no comments available for this video: 'Er zijn geen reacties beschikbaar
Load More Comments: 'Laad Meer Reacties' voor deze video'
Load More Comments: 'Meer Reacties Laden'
There are no more comments for this video: Er zijn geen verdere reacties op deze There are no more comments for this video: Er zijn geen verdere reacties op deze
video video
No more comments available: Er zijn niet meer reacties beschikbaar No more comments available: Er zijn geen reacties meer beschikbaar
Newest first: Nieuwste Eerst Newest first: Nieuwste Eerst
Top comments: Bovenste reacties Top comments: Top Reacties
Sort by: Sorteer Bij Sort by: Sorteer Op
Up Next: 'Volgende' Up Next: 'Volgende'
# Toast Messages # Toast Messages
@ -571,8 +574,8 @@ Falling back to the local API: 'Terugvallen op lokale API'
Subscriptions have not yet been implemented: 'Abonnementen zijn nog niet geïmplementeerd' Subscriptions have not yet been implemented: 'Abonnementen zijn nog niet geïmplementeerd'
Loop is now disabled: 'Herhalen is nu uitgeschakeld' Loop is now disabled: 'Herhalen is nu uitgeschakeld'
Loop is now enabled: 'Herhalen is nu ingeschakeld' Loop is now enabled: 'Herhalen is nu ingeschakeld'
Shuffle is now disabled: 'Schuifelen is nu uitgeschakeld' Shuffle is now disabled: 'Willekeurig afspelen is nu uitgeschakeld'
Shuffle is now enabled: 'Schuifelen is nu ingeschakeld' Shuffle is now enabled: 'Willekeurig afspelen is nu ingeschakeld'
Playing Next Video: 'Volgende Video Word Afgespeeld' Playing Next Video: 'Volgende Video Word Afgespeeld'
Playing Previous Video: 'Vorige Video Word Afgespeeld' Playing Previous Video: 'Vorige Video Word Afgespeeld'
Playing next video in 5 seconds. Click to cancel: 'Volgende Video Begint in 5 Seconden. Playing next video in 5 seconds. Click to cancel: 'Volgende Video Begint in 5 Seconden.
@ -588,14 +591,14 @@ Profile:
$ is now the active profile: $ is nu het actieve profiel $ is now the active profile: $ is nu het actieve profiel
Your default profile has been changed to your primary profile: Uw standaardprofiel Your default profile has been changed to your primary profile: Uw standaardprofiel
is veranderd naar uw hoofdprofiel is veranderd naar uw hoofdprofiel
Removed $ from your profiles: $ is verwijdert uit uw profielen Removed $ from your profiles: $ is verwijderd uit uw profielen
Your default profile has been set to $: Uw standaard profiel is ingesteld op $ Your default profile has been set to $: Uw standaard profiel is ingesteld op $
Profile has been updated: Profiel is geüpdate Profile has been updated: Profiel is geüpdate
Profile has been created: Profiel is aangemaakt Profile has been created: Profiel is aangemaakt
Your profile name cannot be empty: U profiel naam kan niet leeg zijn Your profile name cannot be empty: Uw profielnaam mag niet leeg zijn
Profile could not be found: Profiel kon niet worden gevonden Profile could not be found: Profiel kon niet worden gevonden
All subscriptions will also be deleted.: Alle abonnementen zullen worden verwijderd. All subscriptions will also be deleted.: Alle abonnementen zullen ook worden verwijderd.
Are you sure you want to delete this profile?: Weet u zeker dat u dit profiel wil Are you sure you want to delete this profile?: Weet u zeker dat u dit profiel wilt
verwijderen? verwijderen?
Delete Profile: Verwijder Profiel Delete Profile: Verwijder Profiel
Make Default Profile: Creëer Standaard Profiel Make Default Profile: Creëer Standaard Profiel
@ -605,7 +608,7 @@ Profile:
Custom Color: Eigen Kleur Custom Color: Eigen Kleur
Color Picker: Kleur Kiezer Color Picker: Kleur Kiezer
Edit Profile: Pas Profiel aan Edit Profile: Pas Profiel aan
Create New Profile: Creëer een Nieuw Profile Create New Profile: Creëer een Nieuw Profiel
Profile Manager: Beheer Profiel Profile Manager: Beheer Profiel
All Channels: Alle Kanalen All Channels: Alle Kanalen
Profile Select: Selecteer een Profiel Profile Select: Selecteer een Profiel
@ -631,8 +634,8 @@ Download From Site: Download van de Website
Version $ is now available! Click for more details: Versie $ is nu beschikbaar! Klik Version $ is now available! Click for more details: Versie $ is nu beschikbaar! Klik
voor meer informatie voor meer informatie
This video is unavailable because of missing formats. This can happen due to country unavailability.: Deze This video is unavailable because of missing formats. This can happen due to country unavailability.: Deze
video is niet beschikbaar vanwege ontbrekende video indelingen. Dit kan gebeuren video is niet beschikbaar vanwege ontbrekende videoformaten. Dit kan gebeuren als
als de video niet in uw land beschikbaar is. de video niet in uw land beschikbaar is.
Tooltips: Tooltips:
Player Settings: Player Settings:
Default Video Format: Selecteer de video indeling dat wordt gebruikt wanneer u Default Video Format: Selecteer de video indeling dat wordt gebruikt wanneer u
@ -667,6 +670,10 @@ Tooltips:
Region for Trending: Met trend regio kan je instellen uit welk land je trending Region for Trending: Met trend regio kan je instellen uit welk land je trending
video's je wil zien. Niet alle weergegeven landen worden ook daadwerkelijk ondersteund video's je wil zien. Niet alle weergegeven landen worden ook daadwerkelijk ondersteund
door YouTube door YouTube
Privacy Settings:
Remove Video Meta Files: Wanneer ingeschakeld zal FreeTube automatisch meta bestanden
die worden gecreëerd tijdens het afspelen van video's verwijderen zodra de pagina
wordt gesloten.
Playing Next Video Interval: Volgende video wordt afgespeeld. Klik om te onderbreken. Playing Next Video Interval: Volgende video wordt afgespeeld. Klik om te onderbreken.
| Volgende video wordt afgespeeld in {nextVideoInterval} seconde. Klik om te onderbreken. | Volgende video wordt afgespeeld in {nextVideoInterval} seconde. Klik om te onderbreken.
| Volgende video wordt afgespeeld in {nextVideoInterval} seconden. Klik om te onderbreken. | Volgende video wordt afgespeeld in {nextVideoInterval} seconden. Klik om te onderbreken.

View File

@ -244,6 +244,7 @@ Settings:
jesteś pewny/a, że chcesz usunąć wszystkie subskrypcje i profile? Nie będzie jesteś pewny/a, że chcesz usunąć wszystkie subskrypcje i profile? Nie będzie
można tego cofnąć. można tego cofnąć.
Remove All Subscriptions / Profiles: Usuń wszystkie subskrypcje / profile Remove All Subscriptions / Profiles: Usuń wszystkie subskrypcje / profile
Automatically Remove Video Meta Files: Samoczynnie usuwaj pliki metadanych filmu
Data Settings: Data Settings:
How do I import my subscriptions?: Jak mogę zaimportować swoje subskrypcje? How do I import my subscriptions?: Jak mogę zaimportować swoje subskrypcje?
Unknown data key: Nieznany klucz danych Unknown data key: Nieznany klucz danych
@ -675,6 +676,9 @@ Tooltips:
720p, ale zużywają mniej przepustowości. Formaty audio odtwarzają tylko dźwięk 720p, ale zużywają mniej przepustowości. Formaty audio odtwarzają tylko dźwięk
Proxy Videos Through Invidious: Będzie dostarczał filmy, łącząc się z Invidious, Proxy Videos Through Invidious: Będzie dostarczał filmy, łącząc się z Invidious,
a nie bezpośrednio z YouTube. Nadpisuje ustawienia API a nie bezpośrednio z YouTube. Nadpisuje ustawienia API
Privacy Settings:
Remove Video Meta Files: Po włączeniu FreeTube samoczynnie usunie pliki metadanych
utworzone podczas odtwarzania filmu, gdy tylko strona odtwarzania zostanie zamknięta.
Playing Next Video Interval: Odtwarzanie kolejnego filmu już za chwilę. Wciśnij aby Playing Next Video Interval: Odtwarzanie kolejnego filmu już za chwilę. Wciśnij aby
przerwać. | Odtwarzanie kolejnego filmu za {nextVideoInterval} sekundę. Wciśnij przerwać. | Odtwarzanie kolejnego filmu za {nextVideoInterval} sekundę. Wciśnij
aby przerwać. | Odtwarzanie kolejnego filmu za {nextVideoInterval} sekund. Wciśnij aby przerwać. | Odtwarzanie kolejnego filmu za {nextVideoInterval} sekund. Wciśnij

View File

@ -185,6 +185,7 @@ Settings:
1440p: '1440p' 1440p: '1440p'
4k: '4k' 4k: '4k'
8k: '8k' 8k: '8k'
Playlist Next Video Interval: Intervalo do próximo vídeo da lista de reprodução
Subscription Settings: Subscription Settings:
Subscription Settings: 'Configurações de inscrições' Subscription Settings: 'Configurações de inscrições'
Hide Videos on Watch: 'Esconder vídeos após assisti-los' Hide Videos on Watch: 'Esconder vídeos após assisti-los'
@ -241,6 +242,8 @@ Settings:
certeza de que quer apagar todas as inscrições e perfis? Esta ação não pode certeza de que quer apagar todas as inscrições e perfis? Esta ação não pode
ser desfeita. ser desfeita.
Remove All Subscriptions / Profiles: Remover Todas as Inscrições / Perfis Remove All Subscriptions / Profiles: Remover Todas as Inscrições / Perfis
Automatically Remove Video Meta Files: Remover automaticamente os metarquivos
de vídeo
Data Settings: Data Settings:
Subscriptions have been successfully exported: Inscrições foram exportadas com Subscriptions have been successfully exported: Inscrições foram exportadas com
sucesso sucesso
@ -291,6 +294,7 @@ Settings:
Hide Video Likes And Dislikes: Ocultar curtidas e desgostos do vídeo Hide Video Likes And Dislikes: Ocultar curtidas e desgostos do vídeo
Hide Video Views: Ocultar Visualizações de Vídeo Hide Video Views: Ocultar Visualizações de Vídeo
Hide Active Subscriptions: Ocultar Inscrições Ativas Hide Active Subscriptions: Ocultar Inscrições Ativas
Hide Playlists: Ocultar listas de reprodução
The app needs to restart for changes to take effect. Restart and apply change?: O The app needs to restart for changes to take effect. Restart and apply change?: O
aplicativo necessita reiniciar para as mudanças fazerem efeito. Reiniciar e aplicar aplicativo necessita reiniciar para as mudanças fazerem efeito. Reiniciar e aplicar
mudança? mudança?
@ -621,6 +625,7 @@ Profile:
Profile has been updated: Perfil atualizado Profile has been updated: Perfil atualizado
Profile has been created: Perfil criado Profile has been created: Perfil criado
Your profile name cannot be empty: Seu nome de perfil não pode ficar em branco Your profile name cannot be empty: Seu nome de perfil não pode ficar em branco
Profile Filter: Filtro de Perfil
Version $ is now available! Click for more details: Versão $ está disponível agora! Version $ is now available! Click for more details: Versão $ está disponível agora!
Clique para mais detalhes Clique para mais detalhes
A new blog is now available, $. Click to view more: Um novo blog está disponível, A new blog is now available, $. Click to view more: Um novo blog está disponível,
@ -633,7 +638,7 @@ This video is unavailable because of missing formats. This can happen due to cou
Tooltips: Tooltips:
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: Quando ativado, o FreeTube usará RSS em vez de seu método Fetch Feeds from RSS: Quando ativado, o FreeTube usará RSS em vez de seu método
padrão para obter o feed de sua assinatura. O RSS é mais rápido e evita o bloqueio padrão para obter o feed de sua assinatura. O RSS é mais rápido e evita bloqueio
de IP, mas não fornece certas informações como duração do vídeo ou status ao de IP, mas não fornece certas informações como duração do vídeo ou status ao
vivo vivo
Player Settings: Player Settings:
@ -663,4 +668,12 @@ Tooltips:
Preferred API Backend: Escolha o backend que o FreeTube usa para obter os dados. Preferred API Backend: Escolha o backend que o FreeTube usa para obter os dados.
A API local é um extrator integrado. A API Invidious requer um servidor Invidious A API local é um extrator integrado. A API Invidious requer um servidor Invidious
para se conectar. para se conectar.
Privacy Settings:
Remove Video Meta Files: Quando ativado, o FreeTube exclui automaticamente os
metarquivos criados durante a reprodução do vídeo quando a página de exibição
é fechada.
More: Mais More: Mais
Playing Next Video Interval: Reproduzindo o próximo vídeo imediatamente. Clique para
cancelar. | Reproduzindo o próximo vídeo em {nextVideoInterval} segundo(s). Clique
para cancelar. | Reproduzindo o próximo vídeo em {nextVideoInterval} segundos. Clique
para cancelar.

View File

@ -189,9 +189,10 @@ Settings:
Remember History: '' Remember History: ''
Save Watched Progress: '' Save Watched Progress: ''
Clear Search Cache: '' Clear Search Cache: ''
Are you sure you want to clear out your search cache?: '' Are you sure you want to clear out your search cache?: 'Sunteti siguri ca doriti
Search cache has been cleared: '' sa stergeti chache-ul cautarilor ?'
Remove Watch History: '' Search cache has been cleared: 'Cache-ul cautarilor a fost sters'
Remove Watch History: 'Sterge Istoricul Vizualizarilor'
Are you sure you want to remove your entire watch history?: '' Are you sure you want to remove your entire watch history?: ''
Watch history has been cleared: '' Watch history has been cleared: ''
Remove All Subscriptions / Profiles: '' Remove All Subscriptions / Profiles: ''

View File

@ -1,7 +1,7 @@
FreeTube: 'FreeTube' FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History # Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >- 'This part of the app is not ready yet. Come back later when progress has been made.': >-
Эта часть приложения еще не готова. Вернитесь позже, когда будет достигнут прогресс. Эта часть приложения ещё не готова. Вернитесь позже, когда будет достигнут прогресс.
# Webkit Menu Bar # Webkit Menu Bar
File: 'Файл' File: 'Файл'
@ -127,21 +127,21 @@ Settings:
View all Invidious instance information: Показать все доступные экземпляры Invidious View all Invidious instance information: Показать все доступные экземпляры Invidious
Theme Settings: Theme Settings:
Theme Settings: 'Настройки темы' Theme Settings: 'Настройки темы'
Match Top Bar with Main Color: 'Совместить верхнюю панель с основным цветом' Match Top Bar with Main Color: 'Верхняя панель основного цвета'
Base Theme: Base Theme:
Base Theme: 'Базовая тема' Base Theme: 'Базовая тема'
Black: 'Чёрная' Black: 'Чёрная'
Dark: 'Тёмная' Dark: 'Тёмная'
Light: 'Светлая' Light: 'Светлая'
Main Color Theme: Main Color Theme:
Main Color Theme: 'Основная цветовая тема' Main Color Theme: 'Тема основного цвета'
Red: 'Красная' Red: 'Красная'
Pink: 'Розовая' Pink: 'Розовая'
Purple: 'Фиолетовая' Purple: 'Фиолетовая'
Deep Purple: 'Тёмно-фиолетовая' Deep Purple: 'Тёмно-фиолетовая'
Indigo: 'Индиго' Indigo: 'Индиго'
Blue: 'Синия' Blue: 'Синяя'
Light Blue: 'Светло-синия' Light Blue: 'Светло-синяя'
Cyan: 'Голубая' Cyan: 'Голубая'
Teal: 'Бирюзовая' Teal: 'Бирюзовая'
Green: 'Зелёная' Green: 'Зелёная'
@ -242,6 +242,7 @@ Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Вы Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Вы
уверены, что хотите удалить все подписки и профили? Это нельзя отменить. уверены, что хотите удалить все подписки и профили? Это нельзя отменить.
Remove All Subscriptions / Profiles: Удалить все подписки/профили Remove All Subscriptions / Profiles: Удалить все подписки/профили
Automatically Remove Video Meta Files: Автоматическое удаление мета-файлов видео
Data Settings: Data Settings:
How do I import my subscriptions?: Как мне импортировать свои подписки? How do I import my subscriptions?: Как мне импортировать свои подписки?
Unknown data key: Неизвестный ключ данных Unknown data key: Неизвестный ключ данных
@ -466,9 +467,9 @@ Video:
Autoplay: Автовоспроизведение Autoplay: Автовоспроизведение
Play Previous Video: Воспроизвести предыдущее видео Play Previous Video: Воспроизвести предыдущее видео
Play Next Video: Воспроизводить следующее видео Play Next Video: Воспроизводить следующее видео
Reverse Playlist: Обратный плейлист Reverse Playlist: Обратный порядок плейлиста
Shuffle Playlist: Перемешанный плейлист Shuffle Playlist: Перемешать плейлист
Loop Playlist: Циклический плейлист Loop Playlist: Зациклить плейлист
Starting soon, please refresh the page to check again: Скоро начнётся, обновите Starting soon, please refresh the page to check again: Скоро начнётся, обновите
страницу, чтобы проверить ещё раз страницу, чтобы проверить ещё раз
Audio: Audio:
@ -485,9 +486,9 @@ Video:
Open Channel in YouTube: Открыть канал в YouTube Open Channel in YouTube: Открыть канал в YouTube
Streamed on: Транслировано Streamed on: Транслировано
Started streaming on: Трансляция начата на Started streaming on: Трансляция начата на
Video has been removed from your saved list: Видео было удалено из списка сохраненных Video has been removed from your saved list: Видео было удалено из списка сохранённых
Video has been saved: Видео было добавлено в сохраненные Video has been saved: Видео было добавлено в сохранённые
Save Video: Добавить видео в сохраненные Save Video: Добавить видео в сохранённые
Videos: Videos:
#& Sort By #& Sort By
Sort By: Sort By:
@ -568,8 +569,8 @@ Invidious API Error (Click to copy): 'Ошибка invidious API (Нажмите
Falling back to Invidious API: 'Возврат к Invidious API' Falling back to Invidious API: 'Возврат к Invidious API'
Falling back to the local API: 'Возврат к локальному API' Falling back to the local API: 'Возврат к локальному API'
Subscriptions have not yet been implemented: 'Подписки ещё не реализованы' Subscriptions have not yet been implemented: 'Подписки ещё не реализованы'
Loop is now disabled: 'Цикл теперь отключён' Loop is now disabled: 'Зацикливание теперь отключено'
Loop is now enabled: 'Цикл теперь включён' Loop is now enabled: 'Зацикливание теперь включено'
Shuffle is now disabled: 'Перемешивание теперь отключено' Shuffle is now disabled: 'Перемешивание теперь отключено'
Shuffle is now enabled: 'Перемешивание теперь включено' Shuffle is now enabled: 'Перемешивание теперь включено'
Playing Next Video: 'Воспроизведение следующего видео' Playing Next Video: 'Воспроизведение следующего видео'
@ -578,7 +579,7 @@ Playing next video in 5 seconds. Click to cancel: 'Воспроизведени
через 5 секунд. Нажмите, чтобы отменить.' через 5 секунд. Нажмите, чтобы отменить.'
Canceled next video autoplay: 'Отменено автовоспроизведение следующего видео' Canceled next video autoplay: 'Отменено автовоспроизведение следующего видео'
'The playlist has ended. Enable loop to continue playing': 'Плейлист закончился. 'The playlist has ended. Enable loop to continue playing': 'Плейлист закончился.
Включите цикл, чтобы продолжить воспроизведение' Включите зацикливание, чтобы продолжить воспроизведение'
Yes: 'Да' Yes: 'Да'
No: 'Нет' No: 'Нет'
@ -619,7 +620,7 @@ Profile:
No channel(s) have been selected: Канал(ы) не были выбраны No channel(s) have been selected: Канал(ы) не были выбраны
Add Selected To Profile: Добавить выбранное в профиль Add Selected To Profile: Добавить выбранное в профиль
Delete Selected: Удалить выбранное Delete Selected: Удалить выбранное
Select None: Выбрать ничего Select None: Не выбрано
Select All: Выбрать все Select All: Выбрать все
$ selected: $ выбрано $ selected: $ выбрано
Other Channels: Другие каналы Other Channels: Другие каналы
@ -632,7 +633,7 @@ Download From Site: Скачать с сайта
Version $ is now available! Click for more details: Версия $ уже доступна! Нажмите, Version $ is now available! Click for more details: Версия $ уже доступна! Нажмите,
чтобы узнать больше чтобы узнать больше
This video is unavailable because of missing formats. This can happen due to country unavailability.: Это This video is unavailable because of missing formats. This can happen due to country unavailability.: Это
видео недоступно из-за отсутствия форматов. Это может произойти из-за недоступности видео недоступно из-за отсутствия форматов. Это может произойти из-за ограничений
страны. страны.
Tooltips: Tooltips:
General Settings: General Settings:
@ -647,9 +648,8 @@ Tooltips:
Preferred API Backend: Выберите серверную часть, которую FreeTube использует для Preferred API Backend: Выберите серверную часть, которую FreeTube использует для
получения данных. Локальный API - это встроенный экстрактор. Invidious API требует получения данных. Локальный API - это встроенный экстрактор. Invidious API требует
подключения к Invidious серверу. подключения к Invidious серверу.
Region for Trending: Область тенденций позволяет вам выбрать популярные видео Region for Trending: Регион трендов позволяет вам выбрать популярные видео из
из страны, которые вы хотите отображать. Не все отображаемые страны на самом выбранной страны. Не все отображаемые страны поддерживаются YouTube
деле поддерживаются YouTube
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: Если этот параметр включен, FreeTube будет получать вашу Fetch Feeds from RSS: Если этот параметр включен, FreeTube будет получать вашу
ленту подписок с помощью RSS, а не как обычно. RSS работает быстрее и предотвращает ленту подписок с помощью RSS, а не как обычно. RSS работает быстрее и предотвращает
@ -667,6 +667,10 @@ Tooltips:
устаревшие форматы, возвращаемые им, вместо форматов, возвращаемых Invidious. устаревшие форматы, возвращаемые им, вместо форматов, возвращаемых Invidious.
Помогает, когда видео, возвращенные Invidious, не воспроизводятся из-за ограничений Помогает, когда видео, возвращенные Invidious, не воспроизводятся из-за ограничений
страны страны
Privacy Settings:
Remove Video Meta Files: Если этот параметр включен, FreeTube автоматически удаляет
метафайлы, созданные во время воспроизведения видео, когда страница просмотра
закрывается.
More: Больше More: Больше
Playing Next Video Interval: Воспроизведение следующего видео без задержки. Нажмите Playing Next Video Interval: Воспроизведение следующего видео без задержки. Нажмите
для отмены. | Воспроизведение следующего видео через {nextVideoInterval} сек. Нажмите для отмены. | Воспроизведение следующего видео через {nextVideoInterval} сек. Нажмите

View File

@ -70,6 +70,8 @@ Search Filters:
Fetching results. Please wait: 'Hämtar resultat. Snälla vänta' Fetching results. Please wait: 'Hämtar resultat. Snälla vänta'
Fetch more results: 'Hämta fler resultat' Fetch more results: 'Hämta fler resultat'
# Sidebar # Sidebar
There are no more results for this search: Det finns inte fler resultat för den
här sökningen
Subscriptions: Subscriptions:
# On Subscriptions Page # On Subscriptions Page
Subscriptions: 'Prenumerationer' Subscriptions: 'Prenumerationer'

View File

@ -206,6 +206,8 @@ Settings:
Remove All Subscriptions / Profiles: 'Tüm Abonelikler/Profilleri Temizle' Remove All Subscriptions / Profiles: 'Tüm Abonelikler/Profilleri Temizle'
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Tüm Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Tüm
abonelikler/profilleri temizlemek istediğinizden emin misiniz? Geri alınamaz.' abonelikler/profilleri temizlemek istediğinizden emin misiniz? Geri alınamaz.'
Automatically Remove Video Meta Files: Video Meta Dosyalarını Otomatik Olarak
Kaldır
Subscription Settings: Subscription Settings:
Subscription Settings: 'Abonelik Ayarları' Subscription Settings: 'Abonelik Ayarları'
Hide Videos on Watch: 'İzlenmiş Videoları Gizle' Hide Videos on Watch: 'İzlenmiş Videoları Gizle'
@ -661,6 +663,9 @@ Tooltips:
Region for Trending: Trendlerin bölgesi, hangi ülkenin trend videolarını görüntülemek Region for Trending: Trendlerin bölgesi, hangi ülkenin trend videolarını görüntülemek
istediğinizi seçmenize olanak tanır. Görüntülenen ülkelerden bazıları YouTube istediğinizi seçmenize olanak tanır. Görüntülenen ülkelerden bazıları YouTube
tarafından desteklenmemektedir tarafından desteklenmemektedir
Privacy Settings:
Remove Video Meta Files: Etkinleştirildiğinde, izleme sayfası kapatıldığında video
oynatma sırasında oluşturulan meta dosyaları otomatik olarak silinir.
Playing Next Video Interval: Sonraki video hemen oynatılıyor. İptal etmek için tıklayın. Playing Next Video Interval: Sonraki video hemen oynatılıyor. İptal etmek için tıklayın.
| Sonraki video {nextVideoInterval} saniye içinde oynatılıyor. İptal etmek için | Sonraki video {nextVideoInterval} saniye içinde oynatılıyor. İptal etmek için
tıklayın. | Sonraki video {nextVideoInterval} saniye içinde oynatılıyor. İptal etmek tıklayın. | Sonraki video {nextVideoInterval} saniye içinde oynatılıyor. İptal etmek

View File

@ -211,6 +211,7 @@ Settings:
Remove All Subscriptions / Profiles: 'Видалити всі підписки / профілі' Remove All Subscriptions / Profiles: 'Видалити всі підписки / профілі'
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Справді Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Справді
хочете вилучити всі підписки та профілі? Цю дію не можна скасувати.' хочете вилучити всі підписки та профілі? Цю дію не можна скасувати.'
Automatically Remove Video Meta Files: Автоматично вилучати метафайли відео
Subscription Settings: Subscription Settings:
Subscription Settings: 'Налаштування підписки' Subscription Settings: 'Налаштування підписки'
Hide Videos on Watch: 'Ховати відео при перегляді' Hide Videos on Watch: 'Ховати відео при перегляді'
@ -617,6 +618,9 @@ Tooltips:
ІР, але не надає дані, як-от тривалість відео або стан трансляції' ІР, але не надає дані, як-от тривалість відео або стан трансляції'
# Toast Messages # Toast Messages
Privacy Settings:
Remove Video Meta Files: Якщо увімкнено, FreeTube автоматично видаляє метафайли,
створені під час відтворення відео, коли сторінку перегляду закрито.
Local API Error (Click to copy): 'Помилка локального API (натисніть, щоб скопіювати)' Local API Error (Click to copy): 'Помилка локального API (натисніть, щоб скопіювати)'
Invidious API Error (Click to copy): 'Помилка Invidious API (натисніть, щоб скопіювати)' Invidious API Error (Click to copy): 'Помилка Invidious API (натисніть, щоб скопіювати)'
Falling back to Invidious API: 'Повернення до API Invidious' Falling back to Invidious API: 'Повернення до API Invidious'

View File

@ -175,6 +175,7 @@ Settings:
1440p: '1440p' 1440p: '1440p'
4k: '4k' 4k: '4k'
8k: '8k' 8k: '8k'
Playlist Next Video Interval: 播放列表 下一个影片时间间隔
Subscription Settings: Subscription Settings:
Subscription Settings: '订阅设置' Subscription Settings: '订阅设置'
Hide Videos on Watch: '观看时隐藏视频' Hide Videos on Watch: '观看时隐藏视频'
@ -222,6 +223,7 @@ Settings:
Clear Search Cache: 清除搜索缓存 Clear Search Cache: 清除搜索缓存
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 您确定您想移除所有订阅和配置文件吗?这无法撤销。 Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 您确定您想移除所有订阅和配置文件吗?这无法撤销。
Remove All Subscriptions / Profiles: 移除所有订阅 / 配置文件 Remove All Subscriptions / Profiles: 移除所有订阅 / 配置文件
Automatically Remove Video Meta Files: 自动删除硬盘元数据文件
Data Settings: Data Settings:
Subscriptions have been successfully exported: 订阅已成功导出 Subscriptions have been successfully exported: 订阅已成功导出
This might take a while, please wait: 这可能需要一段时间,请稍候 This might take a while, please wait: 这可能需要一段时间,请稍候
@ -264,6 +266,7 @@ Settings:
Hide Video Views: 隐藏视频观看数量 Hide Video Views: 隐藏视频观看数量
Distraction Free Settings: 零打扰设置 Distraction Free Settings: 零打扰设置
Hide Active Subscriptions: 隐藏活跃的订阅 Hide Active Subscriptions: 隐藏活跃的订阅
Hide Playlists: 隐藏播放列表
The app needs to restart for changes to take effect. Restart and apply change?: 应用需要重启让修改生效。重启以应用修改? The app needs to restart for changes to take effect. Restart and apply change?: 应用需要重启让修改生效。重启以应用修改?
Proxy Settings: Proxy Settings:
Proxy Protocol: 代理协议 Proxy Protocol: 代理协议
@ -278,6 +281,7 @@ Settings:
Test Proxy: 测试代理 Test Proxy: 测试代理
Clicking on Test Proxy will send a request to: 点击测试代理将会发送一个请求给 Clicking on Test Proxy will send a request to: 点击测试代理将会发送一个请求给
Proxy Port Number: 代理端口号 Proxy Port Number: 代理端口号
Proxy Host: 代理主机
About: About:
#On About page #On About page
About: '关于' About: '关于'
@ -308,6 +312,18 @@ About:
Website: 网站 Website: 网站
Blog: 博客 Blog: 博客
Email: 电子邮件 Email: 电子邮件
Donate: 捐款
Credits: 贡献者
Translate: 翻译
Please read the: 请阅读
Chat on Matrix: 在 Matrix 上聊天
Mastodon: Mastodon
FAQ: 常见问题
FreeTube Wiki: FreeTube维基
Help: 说明
GitHub releases: GitHub 版本
View License: 查看授权
Licensed under the AGPLv3: 以 AGPLv3 协议授权
Channel: Channel:
Subscriber: '订阅者' Subscriber: '订阅者'
Subscribers: '订阅者' Subscribers: '订阅者'
@ -417,6 +433,9 @@ Video:
Open Channel in YouTube: 在YouTube打开频道 Open Channel in YouTube: 在YouTube打开频道
Started streaming on: 开始在线直播于 Started streaming on: 开始在线直播于
Streamed on: 在线直播于 Streamed on: 在线直播于
Video has been removed from your saved list: 视频已从你的播放列表移除
Video has been saved: 视频已保存
Save Video: 保存视频到播放列表
Videos: Videos:
#& Sort By #& Sort By
Sort By: Sort By:

View File

@ -121,9 +121,9 @@ Settings:
Match Top Bar with Main Color: '頂部功能表欄對應主色彩' Match Top Bar with Main Color: '頂部功能表欄對應主色彩'
Base Theme: Base Theme:
Base Theme: '基本主題' Base Theme: '基本主題'
Black: '黑' Black: '黑'
Dark: '深' Dark: '深'
Light: '淺' Light: '淺'
Main Color Theme: Main Color Theme:
Main Color Theme: '主題色' Main Color Theme: '主題色'
Red: '紅' Red: '紅'
@ -161,7 +161,7 @@ Settings:
Default Playback Rate: '預設播放速度' Default Playback Rate: '預設播放速度'
Default Video Format: Default Video Format:
Default Video Format: '預設影片格式' Default Video Format: '預設影片格式'
Dash Formats: 'Dash格式' Dash Formats: '儀錶盤格式'
Legacy Formats: '傳統格式' Legacy Formats: '傳統格式'
Audio Formats: '音訊格式' Audio Formats: '音訊格式'
Default Quality: Default Quality:
@ -224,6 +224,7 @@ Settings:
Privacy Settings: 隱私設定 Privacy Settings: 隱私設定
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 您確定要移除所有訂閱與設定檔嗎嗎? 注意:這無法復原。 Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 您確定要移除所有訂閱與設定檔嗎嗎? 注意:這無法復原。
Remove All Subscriptions / Profiles: 移除所有訂閱/設定檔 Remove All Subscriptions / Profiles: 移除所有訂閱/設定檔
Automatically Remove Video Meta Files: 自動刪除影片元檔案
Data Settings: Data Settings:
How do I import my subscriptions?: 我要如何匯入我的訂閱? How do I import my subscriptions?: 我要如何匯入我的訂閱?
Unknown data key: 未知的資料金鑰 Unknown data key: 未知的資料金鑰
@ -479,11 +480,11 @@ Playlist:
Toggle Theatre Mode: '切換為劇院模式' Toggle Theatre Mode: '切換為劇院模式'
Change Format: Change Format:
Change Video Formats: '變更影片格式' Change Video Formats: '變更影片格式'
Use Dash Formats: '使用Dash格式' Use Dash Formats: '使用儀錶盤格式'
Use Legacy Formats: '使用傳統格式' Use Legacy Formats: '使用傳統格式'
Use Audio Formats: '使用音訊格式' Use Audio Formats: '使用音訊格式'
Audio formats are not available for this video: 這個影片沒有音訊格式 Audio formats are not available for this video: 這個影片沒有音訊格式
Dash formats are not available for this video: 這個影片沒有Dash格式 Dash formats are not available for this video: 這個影片沒有儀錶盤格式
Share: Share:
Share Video: '分享影片' Share Video: '分享影片'
Copy Link: '複製連結' Copy Link: '複製連結'
@ -584,7 +585,7 @@ Tooltips:
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: 啟用後FreeTube將使用RSS代替它的預設方法來抓取您的訂閱來源。RSS的速度較快而且可以防止IP封鎖但它可能不會提供某些資訊例如影片長度或是直播狀態。 Fetch Feeds from RSS: 啟用後FreeTube將使用RSS代替它的預設方法來抓取您的訂閱來源。RSS的速度較快而且可以防止IP封鎖但它可能不會提供某些資訊例如影片長度或是直播狀態。
Player Settings: Player Settings:
Default Video Format: 設定要用於影片播放的格式。Dash格式有更高的品質。傳統格式會限制在 720p但頻寬需求更低。音訊格式為僅有音訊的串流 Default Video Format: 設定要用於影片播放的格式。儀錶盤格式有更高的畫質。傳統格式會限制在 720p 但頻寬需求更低。音訊格式為僅有音訊的串流
Proxy Videos Through Invidious: 將連線到 Invidious而非直接連線到 YouTube 來提供影片。覆寫 API 偏好 Proxy Videos Through Invidious: 將連線到 Invidious而非直接連線到 YouTube 來提供影片。覆寫 API 偏好
Force Local Backend for Legacy Formats: 僅當 Invidious API是您預設 API 時才有效。啟用後,區域 API Force Local Backend for Legacy Formats: 僅當 Invidious API是您預設 API 時才有效。啟用後,區域 API
將會執行並使用由其回傳的的傳統格式,而非 Invidious 回傳的格式。對因為國家地區限制而無法播放 Invidious回傳的影片時有幫助 將會執行並使用由其回傳的的傳統格式,而非 Invidious 回傳的格式。對因為國家地區限制而無法播放 Invidious回傳的影片時有幫助
@ -596,6 +597,8 @@ Tooltips:
Preferred API Backend: 選擇 FreeTube 要用於取得YouTube資料的伺服器。本地 API 是內建擷取器。Invidious Preferred API Backend: 選擇 FreeTube 要用於取得YouTube資料的伺服器。本地 API 是內建擷取器。Invidious
API 需要 Invidious 伺服器才能連線。 API 需要 Invidious 伺服器才能連線。
Region for Trending: 發燒影片區域可以讓您選擇想要顯示哪個國家的發燒影片。 注意:並非所有國家都被YouTube支援 Region for Trending: 發燒影片區域可以讓您選擇想要顯示哪個國家的發燒影片。 注意:並非所有國家都被YouTube支援
Privacy Settings:
Remove Video Meta Files: 如果啟用FreeTube會在關閉觀看頁面時自動刪除影片播放過程中建立的暫存檔案。
Playing Next Video Interval: 馬上播放下一個影片。點擊取消。| 播放下一個影片的時間為{nextVideoInterval}秒。點擊取消。| Playing Next Video Interval: 馬上播放下一個影片。點擊取消。| 播放下一個影片的時間為{nextVideoInterval}秒。點擊取消。|
播放下一個影片的時間為{nextVideoInterval}秒。點擊取消。 播放下一個影片的時間為{nextVideoInterval}秒。點擊取消。
More: 更多 More: 更多