Merge branch 'development'

This commit is contained in:
Preston 2021-03-06 17:48:51 -05:00
commit 91b7570823
56 changed files with 5336 additions and 5019 deletions

View File

@ -22,7 +22,6 @@ module.exports = {
// order matters: from least important to most important in terms of overriding // order matters: from least important to most important in terms of overriding
// Prettier + Vue: https://medium.com/@gogl.alex/how-to-properly-set-up-eslint-with-prettier-for-vue-or-nuxt-in-vscode-e42532099a9c // Prettier + Vue: https://medium.com/@gogl.alex/how-to-properly-set-up-eslint-with-prettier-for-vue-or-nuxt-in-vscode-e42532099a9c
extends: [ extends: [
'prettier/vue',
'prettier', 'prettier',
'eslint:recommended', 'eslint:recommended',
'plugin:vue/recommended', 'plugin:vue/recommended',

View File

@ -156,12 +156,12 @@ jobs:
name: freetube_${{ steps.versionNumber.outputs.result }}_amd64.pacman name: freetube_${{ steps.versionNumber.outputs.result }}_amd64.pacman
path: build/freetube-${{ steps.versionNumber.outputs.result }}.pacman path: build/freetube-${{ steps.versionNumber.outputs.result }}.pacman
- name: Upload Web Build # - name: Upload Web Build
uses: actions/upload-artifact@v2 # uses: actions/upload-artifact@v2
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64') # if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with: # with:
name: freetube_${{ steps.versionNumber.outputs.result }}_static_web # name: freetube_${{ steps.versionNumber.outputs.result }}_static_web
path: dist/web # path: dist/web
- name: Upload Windows .exe Artifact - name: Upload Windows .exe Artifact
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v2

View File

@ -1,5 +1,5 @@
<p align="center"> <p align="center">
<img src="https://freetubeapp.github.io/images/logoColor.png" width=500 align="center"> <img src="https://docs.freetubeapp.io/images/logoColor.png" width=500 align="center">
</p> </p>
FreeTube is an open source desktop YouTube player built with privacy in mind. FreeTube is an open source desktop YouTube player built with privacy in mind.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 162 KiB

9
_icons/icon.svg Normal file
View File

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" version="1">
<path style="opacity:0.2" d="M 8.2,5 C 5.8732,5 4,6.8732001 4,9.2000001 V 21.8 44.2 56.8 C 4,59.1268 5.8732,61 8.2,61 H 20.8 33.960547 43.2 C 52.5072,61 60,53.5072 60,44.2 V 36.921093 21.8 9.2000001 C 60,6.8732001 58.1268,5 55.8,5 H 43.2 20.8 Z"/>
<path style="fill:#e4e4e4" d="M 8.2,4 C 5.8732,4 4,5.8732001 4,8.2000001 V 20.8 43.2 55.8 C 4,58.1268 5.8732,60 8.2,60 H 20.8 33.960547 43.2 C 52.5072,60 60,52.5072 60,43.2 V 35.921093 20.8 8.2000001 C 60,5.8732001 58.1268,4 55.8,4 H 43.2 20.8 Z"/>
<path style="opacity:0.1" d="M 14.75,13 C 13.2265,13 12,14.274565 12,15.857422 v 30 C 12,50.143136 17.5,53 20.25,53 H 23 v -2.857422 -4.285156 -30 C 23,14.274565 21.7735,13 20.25,13 Z m 14.091797,0 C 27.267271,13 26,14.2265 26,15.75 v 5.5 C 26,22.7735 27.267271,24 28.841797,24 H 45.894531 C 50.157689,24 53,18.5 53,15.75 V 13 H 50.158203 45.894531 Z M 27.320312,27 A 1.2913161,1.1414724 0 0 0 26,28.142578 v 7.359375 7.359375 a 1.2913161,1.1414724 0 0 0 1.935547,0.986328 l 7.210937,-3.679687 7.208985,-3.679688 a 1.2913161,1.1414724 0 0 0 0,-1.976562 L 35.146484,30.833984 27.935547,27.154297 A 1.2913161,1.1414724 0 0 0 27.320312,27 Z"/>
<path style="fill:#f04242" d="M 14.75,12 C 13.2265,12 12,13.274286 12,14.857143 v 30 C 12,49.142857 17.5,52 20.25,52 H 23 v -2.857143 -4.285714 -30 C 23,13.274286 21.7735,12 20.25,12 Z"/>
<path style="fill:#f04242" d="M 26,20.25 C 26,21.7735 27.267579,23 28.842105,23 H 45.894737 C 50.157895,23 53,17.5 53,14.75 V 12 H 50.157895 45.894737 28.842105 C 27.267579,12 26,13.2265 26,14.75 Z"/>
<path style="fill:#14a4df" d="m 27.321275,26.000307 a 1.2913161,1.1414724 0 0 0 -1.321274,1.142629 v 7.358815 7.358816 a 1.2913161,1.1414724 0 0 0 1.936147,0.986925 l 7.209509,-3.679407 7.209511,-3.679409 a 1.2913161,1.1414724 0 0 0 0,-1.976244 l -7.209511,-3.679408 -7.209509,-3.679407 a 1.2913161,1.1414724 0 0 0 -0.614873,-0.15331 z"/>
<path style="fill:#ffffff;opacity:0.2" d="M 8.1992188 4 C 5.8724189 4 4 5.8724189 4 8.1992188 L 4 9.1992188 C 4 6.8724189 5.8724189 5 8.1992188 5 L 55.800781 5 C 58.127581 5 60 6.8724189 60 9.1992188 L 60 8.1992188 C 60 5.8724189 58.127581 4 55.800781 4 L 8.1992188 4 z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -16,10 +16,14 @@ if (platform == 'darwin') {
} else if (platform == 'linux') { } else if (platform == 'linux') {
let arch = Arch.x64 let arch = Arch.x64
if (args[2] === 'arm') { if (args[2] === 'arm64') {
arch = Arch.arm64 arch = Arch.arm64
} }
if (args[3] === 'arm32') {
arch = Arch.armv7l
}
targets = Platform.LINUX.createTarget(['deb', 'zip', 'apk', 'rpm', 'AppImage', 'pacman'], arch) targets = Platform.LINUX.createTarget(['deb', 'zip', 'apk', 'rpm', 'AppImage', 'pacman'], arch)
} }
@ -40,7 +44,7 @@ const config = {
] ]
} }
], ],
files: ['_icons/iconColor.*', './dist/**/*', '!./dist/web/**/*'], files: ['_icons/iconColor.*', 'icon.svg', './dist/**/*', '!./dist/web/**/*'],
dmg: { dmg: {
contents: [ contents: [
{ {
@ -62,7 +66,7 @@ const config = {
}, },
linux: { linux: {
category: 'Network', category: 'Network',
icon: '_icons/icon.png', icon: '_icons/icon.svg',
target: ['deb', 'zip', 'apk', 'rpm', 'AppImage', 'pacman'], target: ['deb', 'zip', 'apk', 'rpm', 'AppImage', 'pacman'],
}, },
mac: { mac: {
@ -80,7 +84,7 @@ const config = {
} }
}, },
win: { win: {
icon: '_icons/iconColor.ico', icon: '_icons/icon.ico',
target: ['nsis', 'zip', 'portable', 'squirrel'], target: ['nsis', 'zip', 'portable', 'squirrel'],
}, },
nsis: { nsis: {

View File

@ -15,7 +15,7 @@ const whiteListedModules = []
const config = { const config = {
name: 'main', name: 'main',
mode: process.env.NODE_ENV, mode: process.env.NODE_ENV,
devtool: isDevMode ? '#cheap-module-eval-source-map' : false, devtool: isDevMode ? 'eval-cheap-module-source-map' : false,
entry: { entry: {
main: path.join(__dirname, '../src/main/index.js'), main: path.join(__dirname, '../src/main/index.js'),
}, },
@ -24,18 +24,19 @@ const config = {
rules: [ rules: [
{ {
test: /\.(j|t)s$/, test: /\.(j|t)s$/,
loader: ['babel-loader'], use: 'babel-loader',
exclude: /node_modules/, exclude: /node_modules/,
}, },
{ {
test: /\.node$/, test: /\.node$/,
use: 'node-loader', loader: 'node-loader',
}, },
], ],
}, },
node: { node: {
__dirname: isDevMode, __dirname: isDevMode,
__filename: isDevMode, __filename: isDevMode,
global: isDevMode,
}, },
plugins: [ plugins: [
new webpack.DefinePlugin({ new webpack.DefinePlugin({

View File

@ -18,7 +18,7 @@ const whiteListedModules = ['vue']
const config = { const config = {
name: 'renderer', name: 'renderer',
mode: process.env.NODE_ENV, mode: process.env.NODE_ENV,
devtool: isDevMode ? '#cheap-module-eval-source-map' : false, devtool: isDevMode ? 'eval-cheap-module-source-map' : false,
entry: { entry: {
renderer: path.join(__dirname, '../src/renderer/main.js'), renderer: path.join(__dirname, '../src/renderer/main.js'),
}, },
@ -37,7 +37,7 @@ const config = {
}, },
{ {
test: /\.node$/, test: /\.node$/,
use: 'node-loader', loader: 'node-loader',
}, },
{ {
test: /\.vue$/, test: /\.vue$/,
@ -102,6 +102,7 @@ const config = {
node: { node: {
__dirname: isDevMode, __dirname: isDevMode,
__filename: isDevMode, __filename: isDevMode,
global: isDevMode,
}, },
plugins: [ plugins: [
// new WriteFilePlugin(), // new WriteFilePlugin(),

View File

@ -13,7 +13,7 @@ const isDevMode = process.env.NODE_ENV === 'development'
const config = { const config = {
name: 'workers', name: 'workers',
mode: process.env.NODE_ENV, mode: process.env.NODE_ENV,
devtool: isDevMode ? '#cheap-module-eval-source-map' : false, devtool: isDevMode ? 'eval-cheap-module-source-map' : false,
entry: { entry: {
workerSample: path.join(__dirname, '../src/utilities/workerSample.ts'), workerSample: path.join(__dirname, '../src/utilities/workerSample.ts'),
}, },
@ -32,13 +32,14 @@ const config = {
}, },
{ {
test: /\.node$/, test: /\.node$/,
use: 'node-loader', loader: 'node-loader',
}, },
], ],
}, },
node: { node: {
__dirname: isDevMode, __dirname: isDevMode,
__filename: isDevMode, __filename: isDevMode,
global: isDevMode,
}, },
plugins: [ plugins: [
// new WriteFilePlugin(), // new WriteFilePlugin(),

7559
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -8,6 +8,7 @@
"url": "https://github.com/FreeTubeApp/FreeTube/issues" "url": "https://github.com/FreeTubeApp/FreeTube/issues"
}, },
"dependencies": { "dependencies": {
"@electron/remote": "^1.0.4",
"@fortawesome/fontawesome-svg-core": "^1.2.34", "@fortawesome/fontawesome-svg-core": "^1.2.34",
"@fortawesome/free-brands-svg-icons": "^5.15.2", "@fortawesome/free-brands-svg-icons": "^5.15.2",
"@fortawesome/free-solid-svg-icons": "^5.15.2", "@fortawesome/free-solid-svg-icons": "^5.15.2",
@ -15,11 +16,11 @@
"@silvermine/videojs-quality-selector": "^1.2.4", "@silvermine/videojs-quality-selector": "^1.2.4",
"autolinker": "^3.14.2", "autolinker": "^3.14.2",
"bulma-pro": "^0.2.0", "bulma-pro": "^0.2.0",
"dateformat": "^4.4.1", "dateformat": "^4.5.1",
"electron-context-menu": "^2.4.0", "electron-context-menu": "^2.5.0",
"http-proxy-agent": "^4.0.1", "http-proxy-agent": "^4.0.1",
"https-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0",
"jquery": "^3.5.1", "jquery": "^3.6.0",
"js-yaml": "^4.0.0", "js-yaml": "^4.0.0",
"lodash.debounce": "^4.0.8", "lodash.debounce": "^4.0.8",
"lodash.isequal": "^4.5.0", "lodash.isequal": "^4.5.0",
@ -27,8 +28,8 @@
"markdown": "^0.5.0", "markdown": "^0.5.0",
"material-design-icons": "^3.0.1", "material-design-icons": "^3.0.1",
"nedb": "^1.8.0", "nedb": "^1.8.0",
"opml-to-json": "1.0.1", "opml-to-json": "^1.0.1",
"rss-parser": "^3.10.0", "rss-parser": "^3.12.0",
"socks-proxy-agent": "^5.0.0", "socks-proxy-agent": "^5.0.0",
"video.js": "7.10.2", "video.js": "7.10.2",
"videojs-abloop": "^1.2.0", "videojs-abloop": "^1.2.0",
@ -39,73 +40,73 @@
"videojs-vtt-thumbnails-freetube": "0.0.15", "videojs-vtt-thumbnails-freetube": "0.0.15",
"vue": "^2.6.12", "vue": "^2.6.12",
"vue-electron": "^1.0.6", "vue-electron": "^1.0.6",
"vue-i18n": "^8.22.4", "vue-i18n": "^8.23.0",
"vue-observe-visibility": "^1.0.0", "vue-observe-visibility": "^1.0.0",
"vue-router": "^3.4.9", "vue-router": "^3.5.1",
"vuex": "^3.6.0", "vuex": "^3.6.2",
"xml2json": "^0.12.0", "xml2json": "^0.12.0",
"youtube-chat": "^1.1.0", "youtube-chat": "git+https://github.com/IcedCoffeee/youtube-chat.git",
"youtube-suggest": "^1.1.0", "youtube-suggest": "^1.1.0",
"yt-channel-info": "^1.2.2", "yt-channel-info": "^1.3.0",
"yt-comment-scraper": "^3.0.0", "yt-comment-scraper": "^3.0.2",
"yt-dash-manifest-generator": "1.1.0", "yt-dash-manifest-generator": "1.1.0",
"yt-trending-scraper": "1.1.0", "yt-trending-scraper": "^1.1.0",
"yt-xml2vtt": "^1.2.0", "yt-xml2vtt": "^1.2.0",
"ytdl-core": "^4.4.5", "ytdl-core": "^4.5.0",
"ytpl": "^2.0.5", "ytpl": "^2.0.5",
"ytsr": "^3.2.4" "ytsr": "^3.3.1"
}, },
"description": "A private YouTube client", "description": "A private YouTube client",
"devDependencies": { "devDependencies": {
"@babel/core": "^7.12.10", "@babel/core": "^7.13.8",
"@babel/plugin-proposal-class-properties": "^7.12.1", "@babel/plugin-proposal-class-properties": "^7.13.0",
"@babel/plugin-proposal-object-rest-spread": "^7.12.1", "@babel/plugin-proposal-object-rest-spread": "^7.13.8",
"@babel/preset-env": "^7.12.11", "@babel/preset-env": "^7.13.9",
"@babel/preset-typescript": "^7.12.7", "@babel/preset-typescript": "^7.13.0",
"@typescript-eslint/eslint-plugin": "^4.14.0", "@typescript-eslint/eslint-plugin": "^4.16.1",
"@typescript-eslint/parser": "^4.14.0", "@typescript-eslint/parser": "^4.16.1",
"acorn": "^8.0.4", "acorn": "^8.0.5",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"babel-loader": "^8.2.2", "babel-loader": "^8.2.2",
"copy-webpack-plugin": "6.4.0", "copy-webpack-plugin": "8.0.0",
"css-loader": "^5.0.1", "css-loader": "^5.1.1",
"devtron": "^1.4.0", "devtron": "^1.4.0",
"electron": "11.1.1", "electron": "^12.0.0",
"electron-builder": "^22.9.1", "electron-builder": "^22.10.5",
"electron-builder-squirrel-windows": "^22.10.4", "electron-builder-squirrel-windows": "^22.10.5",
"electron-debug": "^3.2.0", "electron-debug": "^3.2.0",
"electron-rebuild": "^2.3.4", "electron-rebuild": "^2.3.5",
"eslint": "^7.18.0", "eslint": "^7.21.0",
"eslint-config-prettier": "^7.2.0", "eslint-config-prettier": "^8.1.0",
"eslint-config-standard": "^16.0.2", "eslint-config-standard": "^16.0.2",
"eslint-plugin-import": "^2.22.1", "eslint-plugin-import": "^2.22.1",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.3.1", "eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-promise": "^4.2.1", "eslint-plugin-promise": "^4.3.1",
"eslint-plugin-standard": "^5.0.0", "eslint-plugin-standard": "^5.0.0",
"eslint-plugin-vue": "^7.4.1", "eslint-plugin-vue": "^7.7.0",
"fast-glob": "^3.2.5", "fast-glob": "^3.2.5",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"html-webpack-plugin": "^4.5.1", "html-webpack-plugin": "^5.2.0",
"jest": "^26.6.3", "jest": "^26.6.3",
"mini-css-extract-plugin": "^1.3.4", "mini-css-extract-plugin": "^1.3.9",
"node-abi": "^2.19.3", "node-abi": "^2.20.0",
"node-loader": "^1.0.2", "node-loader": "^1.0.2",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"prettier": "^2.2.1", "prettier": "^2.2.1",
"sass": "^1.32.5", "sass": "^1.32.8",
"sass-loader": "^10.1.1", "sass-loader": "^11.0.1",
"style-loader": "^2.0.0", "style-loader": "^2.0.0",
"tree-kill": "1.2.2", "tree-kill": "1.2.2",
"typescript": "^4.1.3", "typescript": "^4.2.2",
"url-loader": "^4.1.1", "url-loader": "^4.1.1",
"vue-devtools": "^5.1.4", "vue-devtools": "^5.1.4",
"vue-eslint-parser": "^7.4.1", "vue-eslint-parser": "^7.6.0",
"vue-loader": "^15.9.6", "vue-loader": "^15.9.6",
"vue-style-loader": "^4.1.2", "vue-style-loader": "^4.1.3",
"vue-template-compiler": "^2.6.12", "vue-template-compiler": "^2.6.12",
"webpack": "4.44.2", "webpack": "^5.24.3",
"webpack-cli": "3.3.12", "webpack-cli": "^4.5.0",
"webpack-dev-server": "^3.11.2" "webpack-dev-server": "^3.11.2"
}, },
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
@ -119,9 +120,11 @@
}, },
"scripts": { "scripts": {
"build": "run-s rebuild:electron pack build-release", "build": "run-s rebuild:electron pack build-release",
"build:arm": "run-s rebuild:electron pack build-release:arm", "build:arm64": "run-s rebuild:electron pack build-release:arm64",
"build:arm32": "run-s rebuild:electron pack build-release:arm32",
"build-release": "node _scripts/build.js", "build-release": "node _scripts/build.js",
"build-release:arm": "node _scripts/build.js arm", "build-release:arm64": "node _scripts/build.js arm64",
"build-release:arm32": "node _scripts/build.js arm32",
"debug": "run-s rebuild:electron debug-runner", "debug": "run-s rebuild:electron debug-runner",
"debug-runner": "node _scripts/dev-runner.js --remote-debug", "debug-runner": "node _scripts/dev-runner.js --remote-debug",
"dev": "run-s rebuild:electron dev-runner", "dev": "run-s rebuild:electron dev-runner",
@ -133,11 +136,11 @@
"jest:watch": "jest --watch", "jest:watch": "jest --watch",
"lint-fix": "eslint --fix --ext .js,.ts,.vue ./", "lint-fix": "eslint --fix --ext .js,.ts,.vue ./",
"lint": "eslint --ext .js,.ts,.vue ./", "lint": "eslint --ext .js,.ts,.vue ./",
"pack": "run-p pack:main pack:renderer pack:web pack:workers", "pack": "run-p pack:main pack:renderer pack:workers",
"pack:main": "webpack --mode=production --env.NODE_ENV=production --hide-modules --config _scripts/webpack.main.config.js", "pack:main": "webpack --mode=production --node-env=production --config _scripts/webpack.main.config.js",
"pack:renderer": "webpack --mode=production --env.NODE_ENV=production --hide-modules --config _scripts/webpack.renderer.config.js", "pack:renderer": "webpack --mode=production --node-env=production --config _scripts/webpack.renderer.config.js",
"pack:web": "webpack --mode=production --env.NODE_ENV=production --hide-modules --config _scripts/webpack.web.config.js", "pack:web": "webpack --mode=production --node-env=production --config _scripts/webpack.web.config.js",
"pack:workers": "webpack --mode=production --env.NODE_ENV=production --hide-modules --config _scripts/webpack.workers.config.js", "pack:workers": "webpack --mode=production --node-env=production --config _scripts/webpack.workers.config.js",
"postinstall": "electron-rebuild", "postinstall": "electron-rebuild",
"prettier": "prettier --write \"{src,_scripts}/**/*.{js,ts,vue}\"", "prettier": "prettier --write \"{src,_scripts}/**/*.{js,ts,vue}\"",
"rebuild:electron": "run-s electron-builder-install electron-rebuild", "rebuild:electron": "run-s electron-builder-install electron-rebuild",

View File

@ -2,6 +2,8 @@ import { app, BrowserWindow, Menu, ipcMain, screen } from 'electron'
import { productName } from '../../package.json' import { productName } from '../../package.json'
import Datastore from 'nedb' import Datastore from 'nedb'
require('@electron/remote/main').initialize()
require('electron-context-menu')({ require('electron-context-menu')({
showSearchWithGoogle: false, showSearchWithGoogle: false,
showSaveImageAs: true, showSaveImageAs: true,
@ -32,6 +34,9 @@ let startupUrl
// This line can possible be removed if the issue is fixed upstream // This line can possible be removed if the issue is fixed upstream
app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors') 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 // 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. // remove so we can register each time as we run the app.
app.removeAsDefaultProtocolClient('freetube') app.removeAsDefaultProtocolClient('freetube')
@ -226,7 +231,8 @@ function createWindow (useProxy = false, proxyUrl = '') {
nodeIntegrationInWorker: false, nodeIntegrationInWorker: false,
webSecurity: false, webSecurity: false,
backgroundThrottling: false, backgroundThrottling: false,
enableRemoteModule: true enableRemoteModule: true,
contextIsolation: false
}, },
show: false show: false
}) })

View File

@ -284,20 +284,11 @@ export default Vue.extend({
const v = this const v = this
electron.ipcRenderer.on('openUrl', function (event, url) { electron.ipcRenderer.on('openUrl', function (event, url) {
if (url) { if (url) {
v.$store.dispatch('getVideoIdFromUrl', url).then((result) => { v.$store.dispatch('getVideoParamsFromUrl', url).then(({ videoId, timestamp }) => {
if (result) { if (videoId) {
v.$router.push({ v.$router.push({
path: `/watch/${result}` path: `/watch/${videoId}`,
}) query: timestamp ? { timestamp } : {}
} else {
v.$router.push({
path: `/search/${encodeURIComponent(url)}`,
query: {
sortBy: v.searchSettings.sortBy,
time: v.searchSettings.time,
type: v.searchSettings.type,
duration: v.searchSettings.duration
}
}) })
} }
}) })

View File

@ -6,11 +6,11 @@ import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue' import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
import FtPrompt from '../ft-prompt/ft-prompt.vue' import FtPrompt from '../ft-prompt/ft-prompt.vue'
import { remote } from 'electron'
import fs from 'fs' import fs from 'fs'
import { opmlToJSON } from 'opml-to-json' import { opmlToJSON } from 'opml-to-json'
import ytch from 'yt-channel-info' import ytch from 'yt-channel-info'
const remote = require('@electron/remote')
const app = remote.app const app = remote.app
const dialog = remote.dialog const dialog = remote.dialog

View File

@ -37,6 +37,9 @@ export default Vue.extend({
hidePopularVideos: function () { hidePopularVideos: function () {
return this.$store.getters.getHidePopularVideos return this.$store.getters.getHidePopularVideos
}, },
hidePlaylists: function () {
return this.$store.getters.getHidePlaylists
},
hideLiveChat: function () { hideLiveChat: function () {
return this.$store.getters.getHideLiveChat return this.$store.getters.getHideLiveChat
}, },
@ -61,6 +64,7 @@ export default Vue.extend({
'updateHideRecommendedVideos', 'updateHideRecommendedVideos',
'updateHideTrendingVideos', 'updateHideTrendingVideos',
'updateHidePopularVideos', 'updateHidePopularVideos',
'updateHidePlaylists',
'updateHideLiveChat', 'updateHideLiveChat',
'updateHideActiveSubscriptions', 'updateHideActiveSubscriptions',
'updatePlayNextVideo', 'updatePlayNextVideo',

View File

@ -59,6 +59,12 @@
:default-value="hidePopularVideos" :default-value="hidePopularVideos"
@change="updateHidePopularVideos" @change="updateHidePopularVideos"
/> />
<ft-toggle-switch
:label="$t('Settings.Distraction Free Settings.Hide Playlists')"
:compact="true"
:default-value="hidePlaylists"
@change="updateHidePlaylists"
/>
<ft-toggle-switch <ft-toggle-switch
:label="$t('Settings.Distraction Free Settings.Hide Live Chat')" :label="$t('Settings.Distraction Free Settings.Hide Live Chat')"
:compact="true" :compact="true"

View File

@ -1,5 +0,0 @@
.card {
width: 85%;
margin: 0 auto;
margin-bottom: 30px;
}

View File

@ -0,0 +1,17 @@
.card {
width: 85%;
margin: 0 auto;
margin-bottom: 30px;
}
.selected {
text-align: center;
}
::v-deep .select-label {
width: 95%;
}
::v-deep .select {
text-align-last: center;
}

View File

@ -6,15 +6,17 @@ import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue'
import FtChannelBubble from '../../components/ft-channel-bubble/ft-channel-bubble.vue' import FtChannelBubble from '../../components/ft-channel-bubble/ft-channel-bubble.vue'
import FtButton from '../../components/ft-button/ft-button.vue' import FtButton from '../../components/ft-button/ft-button.vue'
import FtPrompt from '../../components/ft-prompt/ft-prompt.vue' import FtPrompt from '../../components/ft-prompt/ft-prompt.vue'
import FtSelect from '../ft-select/ft-select.vue'
export default Vue.extend({ export default Vue.extend({
name: 'FtProfileAllChannelsList', name: 'FtProfileFilterChannelsList',
components: { components: {
'ft-card': FtCard, 'ft-card': FtCard,
'ft-flex-box': FtFlexBox, 'ft-flex-box': FtFlexBox,
'ft-channel-bubble': FtChannelBubble, 'ft-channel-bubble': FtChannelBubble,
'ft-button': FtButton, 'ft-button': FtButton,
'ft-prompt': FtPrompt 'ft-prompt': FtPrompt,
'ft-select': FtSelect
}, },
props: { props: {
profile: { profile: {
@ -25,7 +27,8 @@ export default Vue.extend({
data: function () { data: function () {
return { return {
channels: [], channels: [],
selectedLength: 0 selectedLength: 0,
filteredProfileIndex: 0
} }
}, },
computed: { computed: {
@ -38,44 +41,21 @@ export default Vue.extend({
profileList: function () { profileList: function () {
return this.$store.getters.getProfileList return this.$store.getters.getProfileList
}, },
profileNameList: function () {
return this.profileList.flatMap((profile) => profile.name !== this.profile.name ? [profile.name] : [])
},
selectedText: function () { selectedText: function () {
const localeText = this.$t('Profile.$ selected') const localeText = this.$t('Profile.$ selected')
return localeText.replace('$', this.selectedLength) return localeText.replace('$', this.selectedLength)
},
primaryProfile: function () {
return JSON.parse(JSON.stringify(this.profileList[0]))
} }
}, },
watch: { watch: {
profile: function () { profile: 'updateChannelList',
this.channels = JSON.parse(JSON.stringify(this.primaryProfile.subscriptions)).sort((a, b) => { filteredProfileIndex: 'updateChannelList'
const nameA = a.name.toLowerCase()
const nameB = b.name.toLowerCase()
if (nameA < nameB) {
return -1
}
if (nameA > nameB) {
return 1
}
return 0
}).filter((channel) => {
const index = this.profile.subscriptions.findIndex((sub) => {
return sub.id === channel.id
})
return index === -1
}).map((channel) => {
if (this.backendPreference === 'invidious') {
channel.thumbnail = channel.thumbnail.replace('https://yt3.ggpht.com', `${this.invidiousInstance}/ggpht/`)
}
channel.selected = false
return channel
})
}
}, },
mounted: function () { mounted: function () {
if (typeof this.profile.subscriptions !== 'undefined') { if (typeof this.profile.subscriptions !== 'undefined') {
this.channels = JSON.parse(JSON.stringify(this.profileList[0].subscriptions)).sort((a, b) => { this.channels = JSON.parse(JSON.stringify(this.profileList[this.filteredProfileIndex].subscriptions)).sort((a, b) => {
const nameA = a.name.toLowerCase() const nameA = a.name.toLowerCase()
const nameB = b.name.toLowerCase() const nameB = b.name.toLowerCase()
if (nameA < nameB) { if (nameA < nameB) {
@ -101,6 +81,32 @@ export default Vue.extend({
} }
}, },
methods: { methods: {
updateChannelList () {
this.channels = JSON.parse(JSON.stringify(this.profileList[this.filteredProfileIndex].subscriptions)).sort((a, b) => {
const nameA = a.name.toLowerCase()
const nameB = b.name.toLowerCase()
if (nameA < nameB) {
return -1
}
if (nameA > nameB) {
return 1
}
return 0
}).filter((channel) => {
const index = this.profile.subscriptions.findIndex((sub) => {
return sub.id === channel.id
})
return index === -1
}).map((channel) => {
if (this.backendPreference === 'invidious') {
channel.thumbnail = channel.thumbnail.replace('https://yt3.ggpht.com', `${this.invidiousInstance}/ggpht/`)
}
channel.selected = false
return channel
})
},
handleChannelClick: function (index) { handleChannelClick: function (index) {
this.channels[index].selected = !this.channels[index].selected this.channels[index].selected = !this.channels[index].selected
this.selectedLength = this.channels.filter((channel) => { this.selectedLength = this.channels.filter((channel) => {
@ -108,6 +114,10 @@ export default Vue.extend({
}).length }).length
}, },
handleProfileFilterChange: function (change) {
this.filteredProfileIndex = this.profileList.findIndex(profile => profile.name === change)
},
addChannelToProfile: function () { addChannelToProfile: function () {
if (this.selectedLength === 0) { if (this.selectedLength === 0) {
this.showToast({ this.showToast({

View File

@ -4,7 +4,16 @@
<h2> <h2>
{{ $t("Profile.Other Channels") }} {{ $t("Profile.Other Channels") }}
</h2> </h2>
<p> <ft-flex-box>
<ft-select
:placeholder="$t('Profile.Profile Filter')"
:value="profileNameList[0]"
:select-names="profileNameList"
:select-values="profileNameList"
@change="handleProfileFilterChange"
/>
</ft-flex-box>
<p class="selected">
{{ selectedText }} {{ selectedText }}
</p> </p>
<ft-flex-box> <ft-flex-box>
@ -38,5 +47,5 @@
</div> </div>
</template> </template>
<script src="./ft-profile-all-channels-list.js" /> <script src="./ft-profile-filter-channels-list.js" />
<style scoped src="./ft-profile-all-channels-list.css" /> <style scoped src="./ft-profile-filter-channels-list.css" />

View File

@ -62,6 +62,10 @@ export default Vue.extend({
return this.$store.getters.getProxyVideos return this.$store.getters.getProxyVideos
}, },
defaultInterval: function () {
return parseInt(this.$store.getters.getDefaultInterval)
},
defaultVolume: function () { defaultVolume: function () {
return parseFloat(this.$store.getters.getDefaultVolume) * 100 return parseFloat(this.$store.getters.getDefaultVolume) * 100
}, },
@ -119,6 +123,7 @@ export default Vue.extend({
'updateForceLocalBackendForLegacy', 'updateForceLocalBackendForLegacy',
'updateProxyVideos', 'updateProxyVideos',
'updateDefaultTheatreMode', 'updateDefaultTheatreMode',
'updateDefaultInterval',
'updateDefaultVolume', 'updateDefaultVolume',
'updateDefaultPlayback', 'updateDefaultPlayback',
'updateDefaultVideoFormat', 'updateDefaultVideoFormat',

View File

@ -61,6 +61,15 @@
</div> </div>
</div> </div>
<ft-flex-box> <ft-flex-box>
<ft-slider
:label="$t('Settings.Player Settings.Playlist Next Video Interval')"
:default-value="defaultInterval"
:min-value="0"
:max-value="60"
:step="1"
value-extension="s"
@change="updateDefaultInterval"
/>
<ft-slider <ft-slider
:label="$t('Settings.Player Settings.Default Volume')" :label="$t('Settings.Player Settings.Default Volume')"
:default-value="defaultVolume" :default-value="defaultVolume"

View File

@ -9,7 +9,7 @@
class="navIcon" class="navIcon"
/> />
<p class="navLabel"> <p class="navLabel">
More {{ $t("More") }}
</p> </p>
</div> </div>
<div <div
@ -25,7 +25,7 @@
class="navIcon" class="navIcon"
/> />
<p class="navLabel"> <p class="navLabel">
Trending {{ $t("Trending") }}
</p> </p>
</div> </div>
<div <div
@ -37,7 +37,7 @@
class="navIcon" class="navIcon"
/> />
<p class="navLabel"> <p class="navLabel">
Most Popular {{ $t("Most Popular") }}
</p> </p>
</div> </div>
<div <div
@ -49,7 +49,7 @@
class="navIcon" class="navIcon"
/> />
<p class="navLabel"> <p class="navLabel">
About {{ $t("About.About") }}
</p> </p>
</div> </div>
</div> </div>
@ -62,7 +62,7 @@
class="navIcon" class="navIcon"
/> />
<p class="navLabel"> <p class="navLabel">
History {{ $t("History.History") }}
</p> </p>
</div> </div>
<hr> <hr>
@ -75,7 +75,7 @@
class="navIcon" class="navIcon"
/> />
<p class="navLabel"> <p class="navLabel">
Settings {{ $t("Settings.Settings") }}
</p> </p>
</div> </div>
<div <div
@ -87,7 +87,7 @@
class="navIcon" class="navIcon"
/> />
<p class="navLabel"> <p class="navLabel">
About {{ $t("About.About") }}
</p> </p>
</div> </div>
</div> </div>

View File

@ -48,6 +48,9 @@ export default Vue.extend({
hidePopularVideos: function () { hidePopularVideos: function () {
return this.$store.getters.getHidePopularVideos return this.$store.getters.getHidePopularVideos
}, },
hidePlaylists: function () {
return this.$store.getters.getHidePlaylists
},
hideTrendingVideos: function () { hideTrendingVideos: function () {
return this.$store.getters.getHideTrendingVideos return this.$store.getters.getHideTrendingVideos
}, },

View File

@ -44,6 +44,7 @@
</p> </p>
</div> </div>
<div <div
v-if="!hidePlaylists"
class="navOption mobileShow" class="navOption mobileShow"
@click="navigate('userplaylists')" @click="navigate('userplaylists')"
> >

View File

@ -89,14 +89,15 @@ export default Vue.extend({
searchInput.blur() searchInput.blur()
} }
const videoId = await this.$store.dispatch('getVideoIdFromUrl', query) const { videoId, timestamp } = await this.$store.dispatch('getVideoParamsFromUrl', query)
const playlistId = await this.$store.dispatch('getPlaylistIdFromUrl', query) const playlistId = await this.$store.dispatch('getPlaylistIdFromUrl', query)
console.log(playlistId) console.log(playlistId)
if (videoId) { if (videoId) {
this.$router.push({ this.$router.push({
path: `/watch/${videoId}` path: `/watch/${videoId}`,
query: timestamp ? { timestamp } : {}
}) })
} else if (playlistId) { } else if (playlistId) {
this.$router.push({ this.$router.push({

View File

@ -58,6 +58,7 @@ export default Vue.extend({
descriptionText = descriptionText.replace(/href="http(s)?:\/\/youtube\.com/g, 'href="freetube://https://youtube.com') descriptionText = descriptionText.replace(/href="http(s)?:\/\/youtube\.com/g, 'href="freetube://https://youtube.com')
descriptionText = descriptionText.replace(/href="\/watch/g, 'href="freetube://https://youtube.com') descriptionText = descriptionText.replace(/href="\/watch/g, 'href="freetube://https://youtube.com')
descriptionText = descriptionText.replace(/href="\/results\?search_query=/g, 'href="freetube://') descriptionText = descriptionText.replace(/href="\/results\?search_query=/g, 'href="freetube://')
descriptionText = descriptionText.replace(/href="\/hashtag\//g, 'href="freetube://')
descriptionText = descriptionText.replace(/yt\.www\.watch\.player\.seekTo/g, 'changeDuration') descriptionText = descriptionText.replace(/yt\.www\.watch\.player\.seekTo/g, 'changeDuration')
return descriptionText return descriptionText

View File

@ -90,6 +90,10 @@ export default Vue.extend({
lengthSeconds: { lengthSeconds: {
type: Number, type: Number,
required: true required: true
},
videoThumbnail: {
type: String,
required: true
} }
}, },
data: function () { data: function () {
@ -223,6 +227,22 @@ export default Vue.extend({
} }
} }
}, },
mounted: function () {
if ('mediaSession' in navigator) {
/* eslint-disable-next-line */
navigator.mediaSession.metadata = new MediaMetadata({
title: this.title,
artist: this.channelName,
artwork: [
{
src: this.videoThumbnail,
sizes: '128x128',
type: 'image/png'
}
]
})
}
},
methods: { methods: {
goToChannel: function () { goToChannel: function () {
this.$router.push({ path: `/channel/${this.channelId}` }) this.$router.push({ path: `/channel/${this.channelId}` })

View File

@ -11,8 +11,8 @@ if (window && window.process && window.process.type === 'renderer') {
dbLocation = electron.remote.app.getPath('userData') dbLocation = electron.remote.app.getPath('userData')
} */ } */
const electron = require('electron') const remote = require('@electron/remote')
dbLocation = electron.remote.app.getPath('userData') dbLocation = remote.app.getPath('userData')
dbLocation = dbLocation + '/history.db' dbLocation = dbLocation + '/history.db'
} else { } else {

View File

@ -13,8 +13,8 @@ if (window && window.process && window.process.type === 'renderer') {
// //
// dbLocation += '/playlists.db' // dbLocation += '/playlists.db'
const electron = require('electron') const remote = require('@electron/remote')
dbLocation = electron.remote.app.getPath('userData') dbLocation = remote.app.getPath('userData')
dbLocation = dbLocation + '/playlists.db' dbLocation = dbLocation + '/playlists.db'
} else { } else {

View File

@ -11,8 +11,8 @@ if (window && window.process && window.process.type === 'renderer') {
dbLocation = electron.remote.app.getPath('userData') dbLocation = electron.remote.app.getPath('userData')
} */ } */
const electron = require('electron') const remote = require('@electron/remote')
dbLocation = electron.remote.app.getPath('userData') dbLocation = remote.app.getPath('userData')
dbLocation = dbLocation + '/profiles.db' dbLocation = dbLocation + '/profiles.db'
} else { } else {

View File

@ -15,7 +15,8 @@ if (window && window.process && window.process.type === 'renderer') {
electron = require('electron') electron = require('electron')
webframe = electron.webFrame webframe = electron.webFrame
dbLocation = electron.remote.app.getPath('userData') const remote = require('@electron/remote')
dbLocation = remote.app.getPath('userData')
dbLocation = dbLocation + '/settings.db' dbLocation = dbLocation + '/settings.db'
} else { } else {
@ -53,6 +54,7 @@ const state = {
forceLocalBackendForLegacy: false, forceLocalBackendForLegacy: false,
proxyVideos: false, proxyVideos: false,
defaultTheatreMode: false, defaultTheatreMode: false,
defaultInterval: 5,
defaultVolume: 1, defaultVolume: 1,
defaultPlayback: 1, defaultPlayback: 1,
defaultVideoFormat: 'dash', defaultVideoFormat: 'dash',
@ -73,6 +75,7 @@ const state = {
hideRecommendedVideos: false, hideRecommendedVideos: false,
hideTrendingVideos: false, hideTrendingVideos: false,
hidePopularVideos: false, hidePopularVideos: false,
hidePlaylists: false,
hideLiveChat: false, hideLiveChat: false,
hideActiveSubscriptions: false hideActiveSubscriptions: false
} }
@ -182,6 +185,10 @@ const getters = {
return state.defaultTheatreMode return state.defaultTheatreMode
}, },
getDefaultInterval: () => {
return state.defaultInterval
},
getDefaultVolume: () => { getDefaultVolume: () => {
return state.defaultVolume return state.defaultVolume
}, },
@ -241,9 +248,15 @@ const getters = {
getHidePopularVideos: () => { getHidePopularVideos: () => {
return state.hidePopularVideos return state.hidePopularVideos
}, },
getHidePlaylists: () => {
return state.hidePlaylists
},
getHideLiveChat: () => { getHideLiveChat: () => {
return state.hideLiveChat return state.hideLiveChat
}, },
getHideActiveSubscriptions: () => { getHideActiveSubscriptions: () => {
return state.hideActiveSubscriptions return state.hideActiveSubscriptions
} }
@ -348,6 +361,9 @@ const actions = {
case 'defaultTheatreMode': case 'defaultTheatreMode':
commit('setDefaultTheatreMode', result.value) commit('setDefaultTheatreMode', result.value)
break break
case 'defaultInterval':
commit('setDefaultInterval', result.value)
break
case 'defaultVolume': case 'defaultVolume':
commit('setDefaultVolume', result.value) commit('setDefaultVolume', result.value)
sessionStorage.setItem('volume', result.value) sessionStorage.setItem('volume', result.value)
@ -382,6 +398,9 @@ const actions = {
case 'hidePopularVideos': case 'hidePopularVideos':
commit('setHidePopularVideos', result.value) commit('setHidePopularVideos', result.value)
break break
case 'hidePlaylists':
commit('setHidePlaylists', result.value)
break
case 'hideLiveChat': case 'hideLiveChat':
commit('setHideLiveChat', result.value) commit('setHideLiveChat', result.value)
break break
@ -587,6 +606,14 @@ const actions = {
}) })
}, },
updateDefaultInterval ({ commit }, defaultInterval) {
settingsDb.update({ _id: 'defaultInterval' }, { _id: 'defaultInterval', value: defaultInterval }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setDefaultInterval', defaultInterval)
}
})
},
updateDefaultVolume ({ commit }, defaultVolume) { updateDefaultVolume ({ commit }, defaultVolume) {
settingsDb.update({ _id: 'defaultVolume' }, { _id: 'defaultVolume', value: defaultVolume }, { upsert: true }, (err, numReplaced) => { settingsDb.update({ _id: 'defaultVolume' }, { _id: 'defaultVolume', value: defaultVolume }, { upsert: true }, (err, numReplaced) => {
if (!err) { if (!err) {
@ -716,6 +743,14 @@ const actions = {
}) })
}, },
updateHidePlaylists ({ commit }, hidePlaylists) {
settingsDb.update({ _id: 'hidePlaylists' }, { _id: 'hidePlaylists', value: hidePlaylists }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setHidePlaylists', hidePlaylists)
}
})
},
updateHideActiveSubscriptions ({ commit }, hideActiveSubscriptions) { updateHideActiveSubscriptions ({ commit }, hideActiveSubscriptions) {
settingsDb.update({ _id: 'hideActiveSubscriptions' }, { _id: 'hideActiveSubscriptions', value: hideActiveSubscriptions }, { upsert: true }, (err, numReplaced) => { settingsDb.update({ _id: 'hideActiveSubscriptions' }, { _id: 'hideActiveSubscriptions', value: hideActiveSubscriptions }, { upsert: true }, (err, numReplaced) => {
if (!err) { if (!err) {
@ -800,6 +835,9 @@ const mutations = {
setProxyVideos (state, proxyVideos) { setProxyVideos (state, proxyVideos) {
state.proxyVideos = proxyVideos state.proxyVideos = proxyVideos
}, },
setDefaultInterval (state, defaultInterval) {
state.defaultInterval = defaultInterval
},
setDefaultVolume (state, defaultVolume) { setDefaultVolume (state, defaultVolume) {
state.defaultVolume = defaultVolume state.defaultVolume = defaultVolume
}, },
@ -872,6 +910,9 @@ const mutations = {
setHidePopularVideos (state, hidePopularVideos) { setHidePopularVideos (state, hidePopularVideos) {
state.hidePopularVideos = hidePopularVideos state.hidePopularVideos = hidePopularVideos
}, },
setHidePlaylists (state, hidePlaylists) {
state.hidePlaylists = hidePlaylists
},
setHideLiveChat (state, hideLiveChat) { setHideLiveChat (state, hideLiveChat) {
state.hideLiveChat = hideLiveChat state.hideLiveChat = hideLiveChat
}, },

View File

@ -190,43 +190,53 @@ const actions = {
return date.getTime() - timeSpan return date.getTime() - timeSpan
}, },
getVideoIdFromUrl (_, url) { getVideoParamsFromUrl (_, url) {
/** @type {URL} */ /** @type {URL} */
let urlObject let urlObject
const paramsObject = { videoId: null, timestamp: null }
try { try {
urlObject = new URL(url) urlObject = new URL(url)
} catch (e) { } catch (e) {
return false return paramsObject
}
function extractParams(videoId) {
paramsObject.videoId = videoId
paramsObject.timestamp = urlObject.searchParams.get('t')
} }
const extractors = [ const extractors = [
// anything with /watch?v= // anything with /watch?v=
function() { function() {
if (urlObject.pathname === '/watch' && urlObject.searchParams.has('v')) { if (urlObject.pathname === '/watch' && urlObject.searchParams.has('v')) {
return urlObject.searchParams.get('v') extractParams(urlObject.searchParams.get('v'))
return paramsObject
} }
}, },
// youtu.be // youtu.be
function() { function() {
if (urlObject.host === 'youtu.be' && urlObject.pathname.match(/^\/[A-Za-z0-9_-]+$/)) { if (urlObject.host === 'youtu.be' && urlObject.pathname.match(/^\/[A-Za-z0-9_-]+$/)) {
return urlObject.pathname.slice(1) extractParams(urlObject.pathname.slice(1))
return paramsObject
} }
}, },
// youtube.com/embed // youtube.com/embed
function() { function() {
if (urlObject.pathname.match(/^\/embed\/[A-Za-z0-9_-]+$/)) { if (urlObject.pathname.match(/^\/embed\/[A-Za-z0-9_-]+$/)) {
return urlObject.pathname.replace('/embed/', '') extractParams(urlObject.pathname.replace('/embed/', ''))
return paramsObject
} }
}, },
// cloudtube // cloudtube
function() { function() {
if (urlObject.host.match(/^cadence\.(gq|moe)$/) && urlObject.pathname.match(/^\/cloudtube\/video\/[A-Za-z0-9_-]+$/)) { if (urlObject.host.match(/^cadence\.(gq|moe)$/) && urlObject.pathname.match(/^\/cloudtube\/video\/[A-Za-z0-9_-]+$/)) {
return urlObject.pathname.slice('/cloudtube/video/'.length) extractParams(urlObject.pathname.slice('/cloudtube/video/'.length))
return paramsObject
} }
} }
] ]
return extractors.reduce((a, c) => a || c(), null) || false return extractors.reduce((a, c) => a || c(), null) || paramsObject
}, },
getPlaylistIdFromUrl (_, url) { getPlaylistIdFromUrl (_, url) {

View File

@ -56,8 +56,7 @@ export default Vue.extend({
], ],
playlistSelectValues: [ playlistSelectValues: [
'last', 'last',
'newest', 'newest'
'oldest'
] ]
} }
}, },
@ -121,8 +120,7 @@ export default Vue.extend({
playlistSelectNames: function () { playlistSelectNames: function () {
return [ return [
this.$t('Channel.Playlists.Sort Types.Last Video Added'), this.$t('Channel.Playlists.Sort Types.Last Video Added'),
this.$t('Channel.Playlists.Sort Types.Newest'), this.$t('Channel.Playlists.Sort Types.Newest')
this.$t('Channel.Playlists.Sort Types.Oldest')
] ]
}, },

View File

@ -3,7 +3,7 @@ import { mapActions } from 'vuex'
import FtLoader from '../../components/ft-loader/ft-loader.vue' import FtLoader from '../../components/ft-loader/ft-loader.vue'
import FtProfileEdit from '../../components/ft-profile-edit/ft-profile-edit.vue' import FtProfileEdit from '../../components/ft-profile-edit/ft-profile-edit.vue'
import FtProfileChannelList from '../../components/ft-profile-channel-list/ft-profile-channel-list.vue' import FtProfileChannelList from '../../components/ft-profile-channel-list/ft-profile-channel-list.vue'
import FtProfileAllChannelsList from '../../components/ft-profile-all-channels-list/ft-profile-all-channels-list.vue' import FtProfileFilterChannelsList from '../../components/ft-profile-filter-channels-list/ft-profile-filter-channels-list.vue'
export default Vue.extend({ export default Vue.extend({
name: 'ProfileEdit', name: 'ProfileEdit',
@ -11,7 +11,7 @@ export default Vue.extend({
'ft-loader': FtLoader, 'ft-loader': FtLoader,
'ft-profile-edit': FtProfileEdit, 'ft-profile-edit': FtProfileEdit,
'ft-profile-channel-list': FtProfileChannelList, 'ft-profile-channel-list': FtProfileChannelList,
'ft-profile-all-channels-list': FtProfileAllChannelsList 'ft-profile-filter-channels-list': FtProfileFilterChannelsList
}, },
data: function () { data: function () {
return { return {

View File

@ -16,7 +16,7 @@
:profile="profile" :profile="profile"
:is-main-profile="isMainProfile" :is-main-profile="isMainProfile"
/> />
<ft-profile-all-channels-list <ft-profile-filter-channels-list
v-if="!isNew && !isMainProfile" v-if="!isNew && !isMainProfile"
:profile="profile" :profile="profile"
/> />

View File

@ -3,7 +3,6 @@ import { mapActions } from 'vuex'
import xml2vtt from 'yt-xml2vtt' import xml2vtt from 'yt-xml2vtt'
import $ from 'jquery' import $ from 'jquery'
import fs from 'fs' import fs from 'fs'
import electron from 'electron'
import ytDashGen from 'yt-dash-manifest-generator' import ytDashGen from 'yt-dash-manifest-generator'
import FtLoader from '../../components/ft-loader/ft-loader.vue' import FtLoader from '../../components/ft-loader/ft-loader.vue'
import FtCard from '../../components/ft-card/ft-card.vue' import FtCard from '../../components/ft-card/ft-card.vue'
@ -16,6 +15,8 @@ import WatchVideoLiveChat from '../../components/watch-video-live-chat/watch-vid
import WatchVideoPlaylist from '../../components/watch-video-playlist/watch-video-playlist.vue' import WatchVideoPlaylist from '../../components/watch-video-playlist/watch-video-playlist.vue'
import WatchVideoRecommendations from '../../components/watch-video-recommendations/watch-video-recommendations.vue' import WatchVideoRecommendations from '../../components/watch-video-recommendations/watch-video-recommendations.vue'
const remote = require('@electron/remote')
export default Vue.extend({ export default Vue.extend({
name: 'Watch', name: 'Watch',
components: { components: {
@ -73,6 +74,7 @@ export default Vue.extend({
downloadLinks: [], downloadLinks: [],
watchingPlaylist: false, watchingPlaylist: false,
playlistId: '', playlistId: '',
timestamp: null,
playNextTimeout: null playNextTimeout: null
} }
}, },
@ -104,6 +106,9 @@ export default Vue.extend({
proxyVideos: function () { proxyVideos: function () {
return this.$store.getters.getProxyVideos return this.$store.getters.getProxyVideos
}, },
defaultInterval: function () {
return this.$store.getters.getDefaultInterval
},
defaultTheatreMode: function () { defaultTheatreMode: function () {
return this.$store.getters.getDefaultTheatreMode return this.$store.getters.getDefaultTheatreMode
}, },
@ -152,6 +157,7 @@ export default Vue.extend({
this.downloadLinks = [] this.downloadLinks = []
this.checkIfPlaylist() this.checkIfPlaylist()
this.checkIfTimestamp()
switch (this.backendPreference) { switch (this.backendPreference) {
case 'local': case 'local':
@ -173,6 +179,7 @@ export default Vue.extend({
this.useTheatreMode = this.defaultTheatreMode this.useTheatreMode = this.defaultTheatreMode
this.checkIfPlaylist() this.checkIfPlaylist()
this.checkIfTimestamp()
if (!this.usingElectron) { if (!this.usingElectron) {
this.getVideoInformationInvidious() this.getVideoInformationInvidious()
@ -269,6 +276,7 @@ export default Vue.extend({
video.viewCount = video.view_count video.viewCount = video.view_count
video.lengthSeconds = video.length_seconds video.lengthSeconds = video.length_seconds
video.author = video.author.name video.author = video.author.name
video.publishedText = video.published
return video return video
}) })
if (this.hideVideoLikesAndDislikes) { if (this.hideVideoLikesAndDislikes) {
@ -677,18 +685,32 @@ export default Vue.extend({
console.log(historyIndex) console.log(historyIndex)
if (historyIndex !== -1 && !this.isLive) { if (!this.isLive) {
const watchProgress = this.historyCache[historyIndex].watchProgress if (this.timestamp) {
if (this.timestamp < 0) {
this.$refs.videoPlayer.player.currentTime(0)
} else if (this.timestamp > (this.videoLengthSeconds - 10)) {
this.$refs.videoPlayer.player.currentTime(this.videoLengthSeconds - 10)
} else {
this.$refs.videoPlayer.player.currentTime(this.timestamp)
}
} else if (historyIndex !== -1) {
const watchProgress = this.historyCache[historyIndex].watchProgress
if (watchProgress < (this.videoLengthSeconds - 10)) { if (watchProgress < (this.videoLengthSeconds - 10)) {
this.$refs.videoPlayer.player.currentTime(watchProgress) this.$refs.videoPlayer.player.currentTime(watchProgress)
}
} }
} }
if (this.rememberHistory && historyIndex !== -1) { if (this.rememberHistory) {
this.addToHistory(this.historyCache[historyIndex].watchProgress) if (this.timestamp) {
} else if (this.rememberHistory) { this.addToHistory(this.timestamp)
this.addToHistory(0) } else if (historyIndex !== -1) {
this.addToHistory(this.historyCache[historyIndex].watchProgress)
} else {
this.addToHistory(0)
}
} }
}, },
@ -706,6 +728,16 @@ export default Vue.extend({
} }
}, },
checkIfTimestamp: function () {
if (typeof (this.$route.query) !== 'undefined') {
try {
this.timestamp = parseInt(this.$route.query.timestamp)
} catch {
this.timestamp = null
}
}
},
getLegacyFormats: function () { getLegacyFormats: function () {
this.$store this.$store
.dispatch('ytGetVideoInformation', this.videoId) .dispatch('ytGetVideoInformation', this.videoId)
@ -807,14 +839,18 @@ export default Vue.extend({
}, },
handleVideoEnded: function () { handleVideoEnded: function () {
const nextVideoInterval = this.defaultInterval
if (this.watchingPlaylist) { if (this.watchingPlaylist) {
this.playNextTimeout = setTimeout(() => { this.playNextTimeout = setTimeout(() => {
this.$refs.watchVideoPlaylist.playNextVideo() const player = this.$refs.videoPlayer.player
}, 5000) if (player !== null && player.paused()) {
this.$refs.watchVideoPlaylist.playNextVideo()
}
}, nextVideoInterval * 1000)
this.showToast({ this.showToast({
message: this.$t('Playing next video in 5 seconds. Click to cancel'), message: this.$tc('Playing Next Video Interval', nextVideoInterval, { nextVideoInterval: nextVideoInterval }),
time: 5500, time: (nextVideoInterval * 1000) + 500,
action: () => { action: () => {
clearTimeout(this.playNextTimeout) clearTimeout(this.playNextTimeout)
this.showToast({ this.showToast({
@ -824,15 +860,18 @@ export default Vue.extend({
}) })
} else if (this.playNextVideo) { } else if (this.playNextVideo) {
this.playNextTimeout = setTimeout(() => { this.playNextTimeout = setTimeout(() => {
const nextVideoId = this.recommendedVideos[0].videoId const player = this.$refs.videoPlayer.player
this.$router.push( if (player !== null && player.paused()) {
{ const nextVideoId = this.recommendedVideos[0].videoId
path: `/watch/${nextVideoId}` this.$router.push(
} {
) path: `/watch/${nextVideoId}`
this.showToast({ }
message: this.$t('Playing Next Video') )
}) this.showToast({
message: this.$t('Playing Next Video')
})
}
}, 5000) }, 5000)
this.showToast({ this.showToast({
@ -911,7 +950,7 @@ export default Vue.extend({
createLocalDashManifest: function (formats) { createLocalDashManifest: function (formats) {
const xmlData = ytDashGen.generate_dash_file_from_formats(formats, this.videoLengthSeconds) const xmlData = ytDashGen.generate_dash_file_from_formats(formats, this.videoLengthSeconds)
const userData = electron.remote.app.getPath('userData') const userData = remote.app.getPath('userData')
let fileLocation let fileLocation
let uriSchema let uriSchema
if (this.isDev) { if (this.isDev) {
@ -982,7 +1021,7 @@ export default Vue.extend({
}) })
// TODO: MAKE A VARIABLE WHICH CAN CHOOSE BETWEEN STROYBOARD ARRAY ELEMENTS // TODO: MAKE A VARIABLE WHICH CAN CHOOSE BETWEEN STROYBOARD ARRAY ELEMENTS
this.buildVTTFileLocally(storyboardArray[1]).then((results) => { this.buildVTTFileLocally(storyboardArray[1]).then((results) => {
const userData = electron.remote.app.getPath('userData') const userData = remote.app.getPath('userData')
let fileLocation let fileLocation
let uriSchema let uriSchema

View File

@ -82,6 +82,7 @@
:watching-playlist="watchingPlaylist" :watching-playlist="watchingPlaylist"
:theatre-possible="theatrePossible" :theatre-possible="theatrePossible"
:length-seconds="videoLengthSeconds" :length-seconds="videoLengthSeconds"
:video-thumbnail="thumbnail"
class="watchVideo" class="watchVideo"
:class="{ theatreWatchVideo: useTheatreMode }" :class="{ theatreWatchVideo: useTheatreMode }"
@theatre-mode="toggleTheatreMode" @theatre-mode="toggleTheatreMode"

View File

@ -30,10 +30,10 @@ Close: 'Затваряне'
Back: 'Назад' Back: 'Назад'
Forward: 'Напред' Forward: 'Напред'
Version $ is now available! Click for more details: 'Версия $ е вече налична! Кликни Version $ is now available! Click for more details: 'Версия $ е вече налична! Щракнете
за повече детайли' за повече детайли'
Download From Site: 'Сваляне от сайта' Download From Site: 'Сваляне от сайта'
A new blog is now available, $. Click to view more: 'Нова публикация в блога, $. Кликни A new blog is now available, $. Click to view more: 'Нова публикация в блога, $. Щракнете
за преглед' за преглед'
# Search Bar # Search Bar
@ -90,7 +90,7 @@ 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: Няма Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Няма
запазени видеоклипове. За запазване кликни в ъгъла на видеоклипа запазени видеоклипове. За запазване щракнете в ъгъла на видеоклипа
Playlist Message: Тази страница не отразява напълно работещи плейлисти. В него са Playlist Message: Тази страница не отразява напълно работещи плейлисти. В него са
изброени само видеоклипове, които сте запазили или избрали за любими. Когато работата изброени само видеоклипове, които сте запазили или избрали за любими. Когато работата
приключи, всички видеоклипове, които в момента са тук, ще бъдат мигрирани в плейлист приключи, всички видеоклипове, които в момента са тук, ще бъдат мигрирани в плейлист
@ -114,8 +114,8 @@ Settings:
Locale Preference: 'Език' Locale Preference: 'Език'
Preferred API Backend: Preferred API Backend:
Preferred API Backend: 'Предпочитан вътрешен интерфейс' Preferred API Backend: 'Предпочитан вътрешен интерфейс'
Local API: 'Локален API' Local API: 'Локален'
Invidious API: 'Invidious Интерфейс' Invidious API: 'Invidious'
Video View Type: Video View Type:
Video View Type: 'Подредба на видеата' Video View Type: 'Подредба на видеата'
Grid: 'Решетка' Grid: 'Решетка'
@ -130,7 +130,8 @@ Settings:
(по подразбиране е https://invidious.snopyta.org)' (по подразбиране е https://invidious.snopyta.org)'
Region for Trending: 'Регион за набиращи популярност' Region for Trending: 'Регион за набиращи популярност'
#! List countries #! List countries
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: 'Съвпадане на горната лента с основната цветова
@ -192,6 +193,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: 'Запазване на историята'
@ -289,7 +291,8 @@ Settings:
Hide Video Likes And Dislikes: Скриване оценките на видеата Hide Video Likes And Dislikes: Скриване оценките на видеата
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:
@ -301,13 +304,13 @@ Settings:
Country: Държава Country: Държава
Ip: Ip Ip: Ip
Your Info: Вашата информация Your Info: Вашата информация
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: Прокси хост Proxy Host: Прокси хост
Proxy Protocol: Прокси протокол Proxy Protocol: Прокси протокол
Enable Tor / Proxy: Активирайте Tor / Proxy Enable Tor / Proxy: Активиране на Tor / Proxy
Proxy Settings: Настройки на прокси Proxy Settings: Настройки на прокси
About: About:
#On About page #On About page
@ -342,20 +345,20 @@ About:
Donate: Дарете Donate: Дарете
these people and projects: тези хора и проекти these people and projects: тези хора и проекти
FreeTube is made possible by: FreeTube е възможен чрез FreeTube is made possible by: FreeTube благодарение на
Translate: Превод Translate: Превод
room rules: правилата за стаите room rules: Правилата за общуване
Please read the: Моля, прочетете Please read the: Моля, прочетете
Chat on Matrix: Чат в Matrix Chat on Matrix: Чат в Matrix
Mastodon: мастодонт Mastodon: Mastodon
Email: Имейл Email: Електронна поща
Blog: Блог Blog: Блог
Website: Уебсайт Website: Уебсайт
Please check for duplicates before posting: Моля, проверете за дубликати преди публикуване Please check for duplicates before posting: Моля, проверете за дубликати преди публикуване
GitHub issues: GitHub проблеми GitHub issues: GitHub проблеми
Report a problem: Съобщете за проблем Report a problem: Съобщете за проблем
FAQ: ЧЗВ FAQ: ЧЗВ
FreeTube Wiki: FreeTube Уики FreeTube Wiki: FreeTube Wiki
Help: Помощ Help: Помощ
GitHub releases: GitHub издания GitHub releases: GitHub издания
Downloads / Changelog: Изтегляния / Дневник с промени Downloads / Changelog: Изтегляния / Дневник с промени
@ -392,7 +395,7 @@ Profile:
$ is now the active profile: 'Активният профил сега е $' $ is now the active profile: 'Активният профил сега е $'
Subscription List: 'Списък с абонаменти' Subscription List: 'Списък с абонаменти'
Other Channels: 'Други канали' Other Channels: 'Други канали'
$ selected: '$ избран' $ selected: '$ избран(и)'
Select All: 'Избиране на всички' Select All: 'Избиране на всички'
Select None: 'Без избиране' Select None: 'Без избиране'
Delete Selected: 'Изтриване на избраните' Delete Selected: 'Изтриване на избраните'
@ -406,6 +409,7 @@ Profile:
ли сте, че искате да изтриете избраните канали? Така каналът няма да бъде изтрит ли сте, че искате да изтриете избраните канали? Така каналът няма да бъде изтрит
от другите профили.' от другите профили.'
#On Channel Page #On Channel Page
Profile Filter: Профилен филтър
Channel: Channel:
Subscriber: 'Абонат' Subscriber: 'Абонат'
Subscribers: 'Абонати' Subscribers: 'Абонати'
@ -432,9 +436,9 @@ Channel:
This channel does not currently have any playlists: 'В този канал по настоящем This channel does not currently have any playlists: 'В този канал по настоящем
няма плейлисти' няма плейлисти'
Sort Types: Sort Types:
Last Video Added: 'Последно добавено видео' Last Video Added: 'Последно добавени'
Newest: 'Най-ново' Newest: 'Най-нови'
Oldest: 'Най-старо' Oldest: 'Най-стари'
About: About:
About: 'Относно' About: 'Относно'
Channel Description: 'Описание на канала' Channel Description: 'Описание на канала'
@ -505,7 +509,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: 'Преди $ %'
@ -522,8 +526,8 @@ Video:
Open Channel in Invidious: Отваряне на канала в Invidious Open Channel in Invidious: Отваряне на канала в Invidious
Copy YouTube Channel Link: Копиране на връзка за канала в YouTube Copy YouTube Channel Link: Копиране на връзка за канала в YouTube
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 removed from your saved list: Видеоклипът е премахнат от вашия запазен
списък списък
Video has been saved: Видеото е запазено Video has been saved: Видеото е запазено
@ -552,7 +556,7 @@ Playlist:
# On Video Watch Page # On Video Watch Page
#* Published #* Published
#& Views #& Views
Toggle Theatre Mode: 'Режим "Театър"' Toggle Theatre Mode: 'Режим "Широк екран"'
Change Format: Change Format:
Change Video Formats: 'Смяна видео формати' Change Video Formats: 'Смяна видео формати'
Use Dash Formats: 'Използване на Dash формати' Use Dash Formats: 'Използване на Dash формати'
@ -570,16 +574,16 @@ Share:
Copy Embed: 'Копиране за вграждане' Copy Embed: 'Копиране за вграждане'
Open Embed: 'Отваряне на връзка за вграждане' Open Embed: 'Отваряне на връзка за вграждане'
# On Click # On Click
Invidious URL copied to clipboard: 'Адреса за Invidious е копиран' Invidious URL copied to clipboard: 'Invidious адресът е копиран'
Invidious Embed URL copied to clipboard: 'Адреса на Invidious за вграждане е копиран' Invidious Embed URL copied to clipboard: 'Invidious адресът за вграждане е копиран'
YouTube URL copied to clipboard: 'Адреса за YouTube е копиран' YouTube URL copied to clipboard: 'YouTube адресът е копиран'
YouTube Embed URL copied to clipboard: 'Адреса на YouTube за вграждане е копиран' YouTube Embed URL copied to clipboard: 'YouTube адресът за вграждане е копиран'
YouTube Channel URL copied to clipboard: Адреса на YouTube канала е копиран YouTube Channel URL copied to clipboard: YouTube адресът на канала е копиран
Invidious Channel URL copied to clipboard: Адреса на Invidious канала е копиран Invidious Channel URL copied to clipboard: Invidious адресът на канала е копиран
Mini Player: 'Мини плейър' Mini Player: 'Мини плейър'
Comments: Comments:
Comments: 'Коментари' Comments: 'Коментари'
Click to View Comments: 'Кликни, за да видиш коментарите' Click to View Comments: 'Щракнете, за да видите коментарите'
Getting comment replies, please wait: 'Получаване на отговори на коментара, моля Getting comment replies, please wait: 'Получаване на отговори на коментара, моля
изчакайте' изчакайте'
There are no more comments for this video: 'Към това видео няма повече коментари' There are no more comments for this video: 'Към това видео няма повече коментари'
@ -599,8 +603,8 @@ Comments:
Up Next: 'Следващ' Up Next: 'Следващ'
# Toast Messages # Toast Messages
Local API Error (Click to copy): 'Грешка в локалния интерфейс (кликни за копиране)' Local API Error (Click to copy): 'Грешка в локалния интерфейс (щракнете за копиране)'
Invidious API Error (Click to copy): 'Грешка в Invidious интерфейса (кликни за копиране)' Invidious API Error (Click to copy): 'Грешка в Invidious интерфейса (щракнете за копиране)'
Falling back to Invidious API: 'Връщане към Invidious интерфейса' Falling back to Invidious API: 'Връщане към Invidious интерфейса'
Falling back to the local API: 'Връщане към локалния интерфейс' Falling back to the local API: 'Връщане към локалния интерфейс'
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.: 'Видеото
@ -615,7 +619,7 @@ The playlist has been reversed: 'Плейлистата е в обърнат р
Playing Next Video: 'Пускане на следващото видео' Playing Next Video: 'Пускане на следващото видео'
Playing Previous Video: 'Пускане на предишното видео' Playing Previous Video: 'Пускане на предишното видео'
Playing next video in 5 seconds. Click to cancel: 'Следващо видео започва след 5 Playing next video in 5 seconds. Click to cancel: 'Следващо видео започва след 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': 'Плейлиста приключи. Включете
повторението за да продължи' повторението за да продължи'
@ -653,3 +657,7 @@ Tooltips:
Preferred API Backend: Избиране на начина, по който FreeTube получава данните. Preferred API Backend: Избиране на начина, по който FreeTube получава данните.
Локалният интерфейс има вградено извличане. Invidious интерфейсът изисква Invidious Локалният интерфейс има вградено извличане. Invidious интерфейсът изисква Invidious
сървър, към който да се свърже. сървър, към който да се свърже.
More: Още
Playing Next Video Interval: Пускане на следващото видео веднага. Щракнете за отказ.
| Пускане на следващото видео след {nextVideoInterval} секунда. Щракнете за отказl.
| Пускане на следващото видео след {nextVideoInterval} секунди. Щракнете за отказ.

View File

@ -192,6 +192,7 @@ Settings:
1440p: '1440p' 1440p: '1440p'
4k: '4k' 4k: '4k'
8k: '8k' 8k: '8k'
Playlist Next Video Interval: Interval dalšího seznamu videí
Privacy Settings: Privacy Settings:
Privacy Settings: 'Nastavení soukromí' Privacy Settings: 'Nastavení soukromí'
Remember History: 'Zapamatovat historii' Remember History: 'Zapamatovat historii'
@ -223,6 +224,7 @@ Settings:
Hide Popular Videos: 'Skrýt populární videa' Hide Popular Videos: 'Skrýt populární videa'
Hide Live Chat: 'Skrýt chat' Hide Live Chat: 'Skrýt chat'
Hide Active Subscriptions: Skrýt aktivní odběry Hide Active Subscriptions: Skrýt aktivní odběry
Hide Playlists: Skrýt playlist
Data Settings: Data Settings:
Data Settings: 'Nastavení dat' Data Settings: 'Nastavení dat'
Select Import Type: 'Vybrat typ importu' Select Import Type: 'Vybrat typ importu'
@ -399,6 +401,7 @@ Profile:
chcete odstranit vybrané kanály? Tím nebude kanál odstraněn z žádného jiného chcete odstranit vybrané kanály? Tím nebude kanál odstraněn z žádného jiného
profilu.' profilu.'
#On Channel Page #On Channel Page
Profile Filter: Filtr profilu
Channel: Channel:
Subscriber: 'Odběratel' Subscriber: 'Odběratel'
Subscribers: 'Odběratelé' Subscribers: 'Odběratelé'
@ -650,3 +653,7 @@ Canceled next video autoplay: 'Automatické přehrávání dalšího videa bylo
Yes: 'Ano' Yes: 'Ano'
No: 'Ne' No: 'Ne'
Playing Next Video Interval: Přehrávání dalšího videa v žádném čase. Kliknutím zrušíte.
| Přehrávání dalšího videa za {nextVideoInterval} s. Kliknutím zrušíte. | Přehrávání
dalšího videa za {nextVideoInterval} s. Kliknutím zrušíte.
More: Více

View File

@ -63,11 +63,11 @@ Search Filters:
Fetching results. Please wait: Lade Ergebnisse. Bitte warten Fetching results. Please wait: Lade Ergebnisse. Bitte warten
Fetch more results: Lade mehr Ergebnisse Fetch more results: Lade mehr Ergebnisse
# Sidebar # Sidebar
There are no more results for this search: Es gibt keine weiteren Ergebnisse für There are no more results for this search: Keine weiteren Ergebnisse für diese Suche
diese Suche vorhanden
Subscriptions: Subscriptions:
# On Subscriptions Page # On Subscriptions Page
Subscriptions: Abonnement 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
@ -76,7 +76,7 @@ Subscriptions:
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 Abonnementen. RSS zur Vermeidung von Tarifbeschränkungen Profil hat eine große Anzahl von Abonnenten. RSS zur Vermeidung von Tarifbeschränkungen
erzwingen erzwingen
Load More Videos: Lade mehr Videos Load More Videos: Lade mehr Videos
Trending: Trends Trending: Trends
@ -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
@ -131,7 +131,7 @@ Settings:
anzeigen anzeigen
Theme Settings: Theme Settings:
Theme Settings: Thema Einstellungen Theme Settings: Thema Einstellungen
Match Top Bar with Main Color: Passe obere Leiste an Hauptfarbe an Match Top Bar with Main Color: Obere Leiste an Hauptfarbe anpassen
Base Theme: Base Theme:
Base Theme: Grundlegendes Thema Base Theme: Grundlegendes Thema
Black: Schwarz Black: Schwarz
@ -146,11 +146,11 @@ Settings:
Indigo: Indigo Indigo: Indigo
Blue: Blau Blue: Blau
Light Blue: Hellblau Light Blue: Hellblau
Cyan: Mittleres Zyan Cyan: Türkis
Teal: Dunkles Türkis Teal: Türkisblau
Green: Grün Green: Grün
Light Green: Hellgrün Light Green: Hellgrün
Lime: Lindgrün Lime: Limette
Yellow: Gelb Yellow: Gelb
Amber: Bernsteingelb Amber: Bernsteingelb
Orange: Orange Orange: Orange
@ -175,7 +175,7 @@ Settings:
Default Video Format: Default Video Format:
Default Video Format: Standard-Videoformat Default Video Format: Standard-Videoformat
Dash Formats: DASH-Formate Dash Formats: DASH-Formate
Legacy Formats: Altformate Legacy Formats: Legacy Formate
Audio Formats: Audioformate Audio Formats: Audioformate
Default Quality: Default Quality:
Default Quality: Standardqualität Default Quality: Standardqualität
@ -197,7 +197,7 @@ Settings:
#& Freetube #& Freetube
Newpipe: Newpipe Newpipe: Newpipe
OPML: OPML OPML: OPML
Manage Subscriptions: Verwalte Abonnements Manage Subscriptions: Abonnements verwalten
Import Subscriptions: Importiere Abonnements Import Subscriptions: Importiere Abonnements
Export Subscriptions: Exportiere Abonnements Export Subscriptions: Exportiere Abonnements
How do I import my subscriptions?: Wie importiere ich meine Abonnements? How do I import my subscriptions?: Wie importiere ich meine Abonnements?
@ -234,10 +234,10 @@ Settings:
Are you sure you want to remove your entire watch history?: Bist du sicher, dass Are you sure you want to remove your entire watch history?: Bist du sicher, dass
du deinen gesamten Verlauf löschen willst? du deinen gesamten Verlauf löschen willst?
Remove Watch History: Verlauf löschen Remove Watch History: Verlauf löschen
Search cache has been cleared: Suchzwischenspeicher wurde geleert Search cache has been cleared: Suchanfragen wurden gelöscht
Are you sure you want to clear out your search cache?: Bist du sicher, dass du Are you sure you want to clear out your search cache?: Bist du sicher, dass du
deinen Suchzwischenspeicher leeren möchtest? deine Suchanfragen löschen möchtest?
Clear Search Cache: Suchzwischenspeicher löschen Clear Search Cache: Suchanfragen löschen
Save Watched Progress: Videofortschritt speichern Save Watched Progress: Videofortschritt speichern
Remember History: Verlauf speichern Remember History: Verlauf speichern
Privacy Settings: Datenschutzeinstellungen Privacy Settings: Datenschutzeinstellungen
@ -274,15 +274,15 @@ Settings:
Export NewPipe: Exportiere NewPipe Export NewPipe: Exportiere NewPipe
Export YouTube: Exportiere YouTube Export YouTube: Exportiere YouTube
Export FreeTube: Exportiere FreeTube Export FreeTube: Exportiere FreeTube
Export Subscriptions: Exportiere Abonnements Export Subscriptions: Abonnements exportieren
Import NewPipe: Importiere NewPipe Import NewPipe: Importiere NewPipe
Import YouTube: Importiere YouTube Import YouTube: Importiere YouTube
Import FreeTube: Importiere FreeTube Import FreeTube: Importiere FreeTube
Import Subscriptions: Importiere Abonnements Import Subscriptions: Abonnements importieren
Select Export Type: Wähle Exporttyp Select Export Type: Wähle Exporttyp
Select Import Type: Wähle Importtyp Select Import Type: Wähle Importtyp
Data Settings: Dateneinstellungen Data Settings: Dateneinstellungen
Check for Legacy Subscriptions: Prüfung auf Altabonnements Check for Legacy Subscriptions: Auf ältere Abonnements prüfen
Manage Subscriptions: Abonnements verwalten Manage Subscriptions: Abonnements verwalten
Distraction Free Settings: Distraction Free Settings:
Hide Live Chat: Live-Chat verbergen Hide Live Chat: Live-Chat verbergen
@ -373,7 +373,7 @@ About:
Please read the: Bitte lese die Please read the: Bitte lese die
Chat on Matrix: Chatten bei Matrix Chat on Matrix: Chatten bei Matrix
Mastodon: Mastodon Mastodon: Mastodon
Please check for duplicates before posting: Bitte überprüfe vor dem absenden, ob Please check for duplicates before posting: Bitte überprüfe vor dem Absenden, ob
es Duplikate gibt es Duplikate gibt
GitHub issues: GitHub Issues GitHub issues: GitHub Issues
Report a problem: Problem melden Report a problem: Problem melden
@ -567,7 +567,7 @@ Mini Player: Mini-Abspieler
Comments: Comments:
Comments: Kommentare Comments: Kommentare
Click to View Comments: Klicke um Kommentare anzuzeigen Click to View Comments: Klicke um Kommentare anzuzeigen
Getting comment replies, please wait: Kommentare werden geledan, bitte warten Getting comment replies, please wait: Kommentare werden geladen, bitte warten
Show Comments: Zeige Kommentare Show Comments: Zeige Kommentare
Hide Comments: Verstecke Kommentare Hide Comments: Verstecke Kommentare
# Context: View 10 Replies, View 1 Reply # Context: View 10 Replies, View 1 Reply
@ -686,4 +686,4 @@ Tooltips:
API als Standard ausgewählt hast. Die lokale API wird bei der Verwendung von API als Standard ausgewählt hast. Die lokale API wird bei der Verwendung von
Legacy Formaten diese verwenden, anstatt auf Invidious zurückzugreifen. Dies Legacy Formaten diese verwenden, anstatt auf Invidious zurückzugreifen. Dies
hilft dann, wenn Videos von Invidious nicht abspielbar sind. Zum Beispiel aufgrund hilft dann, wenn Videos von Invidious nicht abspielbar sind. Zum Beispiel aufgrund
von Landesrestiktionen. von Landesbeschränkungen.

View File

@ -399,7 +399,7 @@ Profile:
Other Channels: 'Άλλα κανάλια' Other Channels: 'Άλλα κανάλια'
$ selected: '$ επιλεγμένο' $ selected: '$ επιλεγμένο'
Select All: 'Επιλογή όλων' Select All: 'Επιλογή όλων'
Select None: 'Επιλογή καμίας' Select None: 'Επιλογή κανενός'
Delete Selected: 'Διαγραφή επιλεγμένου στοιχείου' Delete Selected: 'Διαγραφή επιλεγμένου στοιχείου'
Add Selected To Profile: 'Προσθήκη επιλεγμένου στοιχείου στο προφίλ' Add Selected To Profile: 'Προσθήκη επιλεγμένου στοιχείου στο προφίλ'
No channel(s) have been selected: 'Δεν έχει γίνει επιλογή κάποιου καναλιού' No channel(s) have been selected: 'Δεν έχει γίνει επιλογή κάποιου καναλιού'

View File

@ -82,6 +82,7 @@ Subscriptions:
'Getting Subscriptions. Please wait.': Getting Subscriptions. Please wait. 'Getting Subscriptions. Please wait.': Getting Subscriptions. Please wait.
Refresh Subscriptions: Refresh Subscriptions Refresh Subscriptions: Refresh Subscriptions
Load More Videos: Load More Videos Load More Videos: Load More Videos
More: More
Trending: Trending Trending: Trending
Most Popular: Most Popular Most Popular: Most Popular
Playlists: Playlists Playlists: Playlists
@ -170,6 +171,7 @@ Settings:
Proxy Videos Through Invidious: Proxy Videos Through Invidious Proxy Videos Through Invidious: Proxy Videos Through Invidious
Autoplay Playlists: Autoplay Playlists Autoplay Playlists: Autoplay Playlists
Enable Theatre Mode by Default: Enable Theatre Mode by Default Enable Theatre Mode by Default: Enable Theatre Mode by Default
Playlist Next Video Interval: Playlist Next Video Interval
Default Volume: Default Volume Default Volume: Default Volume
Default Playback Rate: Default Playback Rate Default Playback Rate: Default Playback Rate
Default Video Format: Default Video Format:
@ -219,6 +221,7 @@ Settings:
Hide Recommended Videos: Hide Recommended Videos Hide Recommended Videos: Hide Recommended Videos
Hide Trending Videos: Hide Trending Videos Hide Trending Videos: Hide Trending Videos
Hide Popular Videos: Hide Popular Videos Hide Popular Videos: Hide Popular Videos
Hide Playlists: Hide Playlists
Hide Live Chat: Hide Live Chat Hide Live Chat: Hide Live Chat
Hide Active Subscriptions: Hide Active Subscriptions Hide Active Subscriptions: Hide Active Subscriptions
Data Settings: Data Settings:
@ -304,6 +307,7 @@ About:
Profile: Profile:
Profile Select: Profile Select Profile Select: Profile Select
Profile Filter: Profile Filter
All Channels: All Channels All Channels: All Channels
Profile Manager: Profile Manager Profile Manager: Profile Manager
Create New Profile: Create New Profile Create New Profile: Create New Profile
@ -564,7 +568,7 @@ Tooltips:
play higher qualities. Legacy formats are limited to a max of 720p but use less play higher qualities. Legacy formats are limited to a max of 720p but use less
bandwidth. Audio formats are audio only streams bandwidth. Audio formats are audio only streams
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: When enabled, FreeTube will use RSS instead of it's 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
@ -584,8 +588,7 @@ Shuffle is now enabled: Shuffle is now enabled
The playlist has been reversed: The playlist has been reversed The playlist has been reversed: The playlist has been reversed
Playing Next Video: Playing Next Video Playing Next Video: Playing Next Video
Playing Previous Video: Playing Previous Video Playing Previous Video: Playing Previous Video
Playing next video in 5 seconds. Click to cancel: Playing next video in 5 seconds. Playing Next Video Interval: Playing next video in no time. Click to cancel. | Playing next video in {nextVideoInterval} second. Click to cancel. | Playing next video in {nextVideoInterval} seconds. Click to cancel.
Click to cancel.
Canceled next video autoplay: Canceled next video autoplay Canceled next video autoplay: Canceled next video autoplay
'The playlist has ended. Enable loop to continue playing': 'The playlist has ended. Enable 'The playlist has ended. Enable loop to continue playing': 'The playlist has ended. Enable
loop to continue playing' loop to continue playing'

View File

@ -630,6 +630,7 @@ Tooltips:
באיכויות גבוהות יותר. התצורות המיושנות מוגבלות ל־720 פיקסלים לכל היותר אך משתמשות באיכויות גבוהות יותר. התצורות המיושנות מוגבלות ל־720 פיקסלים לכל היותר אך משתמשות
בפחות רוחב פס. תצורות שמע הן הזרמות של שמע בלבד בפחות רוחב פס. תצורות שמע הן הזרמות של שמע בלבד
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: כאשר אפשרות זו פעילה. FreeTube ישתמש ב־RSS במקום בשיטת בררת Fetch Feeds from RSS: כאשר אפשרות זו פעילה. FreeTube ישתמש ב־RSS במקום בשיטת ברירת
המחדל ללכידת הזנת המינויים שלך. RSS זו שיטה מהירה יותר ומונעת חסימות IP אבל המחדל לאיסוף הזנת המינויים שלך. RSS היא שיטה מהירה יותר ומונעת חסימת IP אבל
לא מספקת חלק מהמידע כמו אורך הסרטון או מצב שידור חי לא מספקת חלק מהמידע כמו אורך הסרטון או מצב שידור חי
More: עוד

View File

@ -14,74 +14,82 @@ Redo: 'फिर से करें'
Cut: 'कट' Cut: 'कट'
Copy: 'प्रतिलिपि' Copy: 'प्रतिलिपि'
Paste: 'पेस्ट करें' Paste: 'पेस्ट करें'
Delete: '' Delete: 'निकाले'
Select all: 'सबको चुनें' Select all: 'सबको चुनें'
Reload: '' Reload: 'फिरसे लोड करे'
Force Reload: '' Force Reload: 'फ़ोर्स से फिरसे लोड करे'
Toggle Developer Tools: '' Toggle Developer Tools: 'Developer tools टॉगल करे'
Actual size: '' Actual size: 'वास्तविक आकार'
Zoom in: '' Zoom in: 'Zoom in'
Zoom out: '' Zoom out: 'Zoom out'
Toggle fullscreen: '' Toggle fullscreen: 'फ़ुलस्क्रीन टॉगल करे'
Window: '' Window: 'विंडो'
Minimize: '' Minimize: 'मिनिमाइज़ (Minimize) करे'
Close: '' Close: 'बंद करे'
Back: '' Back: 'पीछे'
Forward: '' Forward: 'आगे'
Version $ is now available! Click for more details: '' Version $ is now available! Click for more details: 'Version $ आ गया है! और details
Download From Site: '' के लिए इधर click करे।'
A new blog is now available, $. Click to view more: '' Download From Site: 'साइट से डाउनलोड (download) करे'
A new blog is now available, $. Click to view more: 'एक नया ब्लॉग है, $। और जानने
के लिए इधर click करिए'
# Search Bar # Search Bar
Search / Go to URL: '' Search / Go to URL: 'Search / URL पर जाए'
# In Filter Button # In Filter Button
Search Filters: Search Filters:
Search Filters: '' Search Filters: 'Search फ़िल्टर'
Sort By: Sort By:
Sort By: '' Sort By: 'सॉर्ट करे'
Most Relevant: '' Most Relevant: 'सबसे प्रासंगिक'
Rating: '' Rating: 'रेटिंग'
Upload Date: '' Upload Date: 'अपलोड दिवस'
View Count: '' View Count: 'दृश्य गणना'
Time: Time:
Time: '' Time: 'वक्त'
Any Time: '' Any Time: 'किसी भी वक्त'
Last Hour: '' Last Hour: 'पिछले घंटे'
Today: '' Today: 'आज'
This Week: '' This Week: 'इस हफ़्ते'
This Month: '' This Month: 'इस महीने'
This Year: '' This Year: 'इस साल'
Type: Type:
Type: '' Type: 'प्रकार'
All Types: '' All Types: 'सब प्रकार'
Videos: '' Videos: 'विडीयोज'
Channels: '' Channels: 'चैनले'
#& Playlists #& Playlists
Duration: Duration:
Duration: '' Duration: 'अवधि'
All Durations: '' All Durations: 'सब अवधि'
Short (< 4 minutes): '' Short (< 4 minutes): 'छोटे (<४ मिनट)'
Long (> 20 minutes): '' Long (> 20 minutes): 'बड़े (>२० मिनट)'
# On Search Page # On Search Page
Search Results: '' Search Results: 'खोजे परिणाम'
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: 'सब्सक्रिप्शन'
Latest Subscriptions: '' Latest Subscriptions: 'सबसे नए सब्सक्रिप्शन'
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: '' This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: 'यह
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': '' प्रोफ़ाइल (profile)के पास बहुत सारे सब्सक्रिप्शने है। RSS को बल से रटे लिमिटिंग
'Getting Subscriptions. Please wait.': '' (rate limiting) से बचाए'
Refresh Subscriptions: '' 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'आपकेय
Load More Videos: '' सब्सक्रिप्शन लिस्ट अब के लिए ख़ाली है। सब्सक्रिप्शन add करने से इधर देख सक्ते
Trending: '' है।'
Most Popular: '' 'Getting Subscriptions. Please wait.': 'सब्सक्रिप्शने (subscriptions) ढूंड रहे है।
Playlists: '' कृपया रुके।'
Refresh Subscriptions: 'सब्सक्रिप्शने Refresh करे'
Load More Videos: 'ज़्यादा विडीओए लोड करे'
Trending: 'ट्रेनडिंग'
Most Popular: 'सबसे ज़्यादा देखा हुआ'
Playlists: 'प्लेलिस्टे (playlists)'
User Playlists: User Playlists:
Your Playlists: '' Your Playlists: 'आपके प्लेलिस्टे'
History: History:
# On History Page # On History Page
History: '' History: ''

View File

@ -195,6 +195,7 @@ Settings:
1440p: '1440p' 1440p: '1440p'
4k: '4k' 4k: '4k'
8k: '8k' 8k: '8k'
Playlist Next Video Interval: Lejátszási lista következő videó intervalluma
Privacy Settings: Privacy Settings:
Privacy Settings: 'Adatvédelmi beállítások' Privacy Settings: 'Adatvédelmi beállítások'
Remember History: 'Előzmények megjegyzése' Remember History: 'Előzmények megjegyzése'
@ -292,6 +293,7 @@ Settings:
Hide Video Views: Videó nézetek elrejtése Hide Video Views: Videó nézetek elrejtése
Distraction Free Settings: Zavartalan beállítások Distraction Free Settings: Zavartalan beállítások
Hide Active Subscriptions: Elérhető feliratkozások elrejtése Hide Active Subscriptions: Elérhető feliratkozások elrejtése
Hide Playlists: Lejátszási listák elrejtése
The app needs to restart for changes to take effect. Restart and apply change?: Az The app needs to restart for changes to take effect. Restart and apply change?: Az
alkalmazásnak újra kell indulnia, hogy a változtatások életbe lépjenek. Indítsa alkalmazásnak újra kell indulnia, hogy a változtatások életbe lépjenek. Indítsa
újra és alkalmazza a módosítást? újra és alkalmazza a módosítást?
@ -309,6 +311,8 @@ Settings:
Proxy Protocol: Meghatalmazás protokoll Proxy Protocol: Meghatalmazás protokoll
Enable Tor / Proxy: Tor/meghatalmazás engedélyezése Enable Tor / Proxy: Tor/meghatalmazás engedélyezése
Proxy Settings: Meghatalmazás beállításai Proxy Settings: Meghatalmazás beállításai
Error getting network information. Is your proxy configured properly?: Hiba a
hálózati adatok lekérésekor. Megfelelő a meghatalmazás beállítása?
About: About:
#On About page #On About page
About: 'Névjegy' About: 'Névjegy'
@ -341,6 +345,32 @@ About:
Latest FreeTube News: 'Legfrissebb FreeTube hírek' Latest FreeTube News: 'Legfrissebb FreeTube hírek'
these people and projects: ezek emberek és projektek
FreeTube is made possible by: 'A FreeTube engedélyezése:'
Donate: Hozzájárulás
Credits: Közreműködők
Translate: Fordítás
room rules: szobaszabályok
Please read the: Kérjük, olvassa el a(z)
Chat on Matrix: Matrix csevegése
Mastodon: Mastodon
Blog: Napló
Email: E-mail
Website: Honlap
Please check for duplicates before posting: Feladás előtt ellenőrizze, hogy vannak-e
másolatok
GitHub issues: GitHub kérdések
Help: Súgó
GitHub releases: GitHub kiadások
Downloads / Changelog: Letöltések/Változásnapló
View License: Licenc megtekintése
Licensed under the AGPLv3: Az AGPL (GNU Affero General Public License - GNU Affero
általános nyilvános licenc) 3. verziója alatt licencelt
FreeTube Wiki: FreeTube Wiki
Source code: Forráskód
Beta: Béta
FAQ: GyIK
Report a problem: Probléma jelentése
Profile: Profile:
Profile Select: 'Profil kiválasztása' Profile Select: 'Profil kiválasztása'
All Channels: 'Összes csatorna' All Channels: 'Összes csatorna'
@ -381,6 +411,7 @@ Profile:
Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: 'Biztosan Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: 'Biztosan
törli a kijelölt csatornákat? Ez nem törli a csatornát más profilokból.' törli a kijelölt csatornákat? Ez nem törli a csatornát más profilokból.'
#On Channel Page #On Channel Page
Profile Filter: Profilszűrő
Channel: Channel:
Subscriber: 'Feliratkozó' Subscriber: 'Feliratkozó'
Subscribers: 'Feliratkozók' Subscribers: 'Feliratkozók'
@ -499,6 +530,9 @@ Video:
Open Channel in Invidious: Csatorna megnyitása az Invidious oldalán Open Channel in Invidious: Csatorna megnyitása az Invidious oldalán
Started streaming on: Folyamatos átvitel indult Started streaming on: Folyamatos átvitel indult
Streamed on: Folyamatos átvitele Streamed on: Folyamatos átvitele
Video has been removed from your saved list: A videót eltávolítottuk a mentett listáról
Video has been saved: A videó mentve
Save Video: Videó mentése
Videos: Videos:
#& Sort By #& Sort By
Sort By: Sort By:
@ -630,3 +664,8 @@ 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
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
történik. Kattintson a törléshez. | A következő videó lejátszása {nextVideoInterval}
másodperc múlva történik. Kattintson a törléshez.
More: Több

View File

@ -3,14 +3,15 @@ Locale Name: 'Bahasa Indonesia'
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.': >-
Bagian aplikasi ini belum tersedia. Kembali lagi jika sudah ada kemajuan. Bagian dari aplikasi ini belum disiapkan. Kembali lagi nanti saat kemajuan telah
dibuat.
# Webkit Menu Bar # Webkit Menu Bar
File: 'Berkas' File: 'Berkas'
Quit: 'Keluar' Quit: 'Keluar'
Edit: 'Sunting' Edit: 'Sunting'
Undo: 'Urungkan' Undo: 'Urungkan'
Redo: 'Redo' Redo: 'Majukan'
Cut: 'Potong' Cut: 'Potong'
Copy: 'Salin' Copy: 'Salin'
Paste: 'Tempel' Paste: 'Tempel'
@ -189,6 +190,7 @@ Settings:
1440p: '1440p' 1440p: '1440p'
4k: '4k' 4k: '4k'
8k: '8k' 8k: '8k'
Playlist Next Video Interval: Interval Video dalam Daftar Putar
Privacy Settings: Privacy Settings:
Privacy Settings: 'Pengaturan Privasi' Privacy Settings: 'Pengaturan Privasi'
Remember History: 'Ingat Riwayat' Remember History: 'Ingat Riwayat'
@ -247,7 +249,7 @@ Settings:
Unable to write file: 'Tidak dapat menulis berkas' Unable to write file: 'Tidak dapat menulis berkas'
Unknown data key: 'Kunci data tidak diketahui' Unknown data key: 'Kunci data tidak diketahui'
How do I import my subscriptions?: 'Bagaimana saya mengimpor langganan saya?' How do I import my subscriptions?: 'Bagaimana saya mengimpor langganan saya?'
Check for Legacy Subscriptions: Periksa langganan lawas Check for Legacy Subscriptions: Periksa Langganan Lawas
Manage Subscriptions: Kelola Langganan Manage Subscriptions: Kelola Langganan
Advanced Settings: Advanced Settings:
Advanced Settings: 'Pengaturan Lanjutan' Advanced Settings: 'Pengaturan Lanjutan'
@ -287,6 +289,7 @@ Settings:
Hide Video Likes And Dislikes: Sembunyikan Suka dan Tidak Suka Video Hide Video Likes And Dislikes: Sembunyikan Suka dan Tidak Suka Video
Hide Video Views: Sembunyikan Tinjauan Video Hide Video Views: Sembunyikan Tinjauan Video
Hide Active Subscriptions: Sembunyikan Langganan Aktif Hide Active Subscriptions: Sembunyikan Langganan Aktif
Hide Playlists: Sembunyikan Daftar Putar
The app needs to restart for changes to take effect. Restart and apply change?: Aplikasi The app needs to restart for changes to take effect. Restart and apply change?: Aplikasi
butuh dimulai ulang agar perbubahan diterapkan. Mulai ulang dan terapkan perubahan? butuh dimulai ulang agar perbubahan diterapkan. Mulai ulang dan terapkan perubahan?
Proxy Settings: Proxy Settings:
@ -650,3 +653,7 @@ 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.
Playing Next Video Interval: Langsung putar video berikutnya. Klik untuk batal. |
Putar video berikutnya dalam {nextVideoInterval} detik. Klik untuk batal. | Putar
video berikutnya dalam {nextVideoInterval} detik. Klik untuk batal.
More: Lebih banyak

View File

@ -315,7 +315,7 @@ About:
Credits: クレジット Credits: クレジット
Translate: 翻訳 Translate: 翻訳
room rules: ルームの規則 room rules: ルームの規則
Please read the: ご覧ください Please read the: 確認してください
Chat on Matrix: Matrix でチャット Chat on Matrix: Matrix でチャット
Mastodon: Mastodon Mastodon: Mastodon
Email: メール アドレス Email: メール アドレス
@ -569,7 +569,7 @@ Profile:
The playlist has been reversed: 再生リストを逆順にしました The playlist has been reversed: 再生リストを逆順にしました
A new blog is now available, $. Click to view more: '新着ブログ公開、$。クリックしてブログを読む' A new blog is now available, $. Click to view more: '新着ブログ公開、$。クリックしてブログを読む'
Download From Site: サイトからダウンロード Download From Site: サイトからダウンロード
Version $ is now available! Click for more details: 最新の Ver. $ 登場! 詳細はクリックしてご覧ください Version $ is now available! Click for more details: 最新の Ver. $ 登場! 詳細はクリックして確認
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:
Subscription Settings: Subscription Settings:

View File

@ -16,7 +16,7 @@ Copy: 'Kopier'
Paste: 'Lim inn' Paste: 'Lim inn'
Delete: 'Slett' Delete: 'Slett'
Select all: 'Velg alt' Select all: 'Velg alt'
Reload: 'Gjeninnlast' Reload: 'Last inn på nytt'
Force Reload: 'Tving gjeninnlasting' Force Reload: 'Tving gjeninnlasting'
Toggle Developer Tools: 'Veksle utviklerverktøy' Toggle Developer Tools: 'Veksle utviklerverktøy'
Actual size: 'Faktisk størrelse' Actual size: 'Faktisk størrelse'
@ -43,7 +43,7 @@ Search Filters:
Time: Time:
Time: 'Tid' Time: 'Tid'
Any Time: 'Når som helst' Any Time: 'Når som helst'
Last Hour: 'Siste time' Last Hour: 'Den siste timen'
Today: 'I dag' Today: 'I dag'
This Week: 'Denne uken' This Week: 'Denne uken'
This Month: 'Denne måneden' This Month: 'Denne måneden'
@ -64,20 +64,31 @@ Search Filters:
Fetching results. Please wait: 'Henter resultater. Vent.' Fetching results. Please wait: 'Henter resultater. Vent.'
Fetch more results: 'Hent flere resultater' Fetch more results: 'Hent flere resultater'
# Sidebar # Sidebar
There are no more results for this search: Det er ikke flere resultat for dette
søket
Subscriptions: Subscriptions:
# On Subscriptions Page # On Subscriptions Page
Subscriptions: 'Abonnementer' Subscriptions: 'Abonnementer'
Latest Subscriptions: 'Siste abonnementer' Latest Subscriptions: 'Siste abonnementer'
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Din 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Din
abbonementsliste er for tiden tom. Legg til noen for å se dem her.' abonnementsliste er for tiden tom. Legg til noen for å se dem her.'
'Getting Subscriptions. Please wait.': 'Henter abonnementer. Vent.' 'Getting Subscriptions. Please wait.': 'Henter abonnementer. Vent.'
Refresh Subscriptions: Gjenoppfrisk abonnementer Refresh Subscriptions: Oppdater abonnementer
Getting Subscriptions. Please wait.: Henter abonnementer. Vent. Getting Subscriptions. Please wait.: Henter abonnementer. Vent.
Trending: 'Populært' Load More Videos: Last flere videoer
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Denne
profilen har mange abonnementer. Påtvinger RSS for å unngå adgangsbegrensning.
Trending: 'På vei opp'
Most Popular: 'Mest populært' Most Popular: 'Mest populært'
Playlists: 'Spillelister' Playlists: 'Spillelister'
User Playlists: User Playlists:
Your Playlists: 'Dine spillelister' Your Playlists: 'Dine spillelister'
Playlist Message: Denne siden reflekterer ikke fullstendig fungerende spillelister.
Den lister kun opp videoer du har lagret eller favorittmerket. Når arbeidet er
fullført, vil alle videoer som vises her bli flyttet til en «Favoritt»-spilleliste.
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Dine
lagrede videoer er tomme. klikk på "Lagre"-knappen i hjørnet av en video for å
liste den opp her.
History: History:
# On History Page # On History Page
History: 'Historikk' History: 'Historikk'
@ -90,9 +101,9 @@ Settings:
General Settings: 'Generelle innstillinger' General Settings: 'Generelle innstillinger'
Fallback to Non-Preferred Backend on Failure: 'Tilbakefall til ikke-foretrukken Fallback to Non-Preferred Backend on Failure: 'Tilbakefall til ikke-foretrukken
bakende ved feil' bakende ved feil'
Enable Search Suggestions: 'Skru på søkeforslag' Enable Search Suggestions: 'S på søkeforslag'
Default Landing Page: 'Forvalgt landingsside' Default Landing Page: 'Forvalgt landingsside'
Locale Preference: 'Lokale-innstilling' Locale Preference: 'Språkinnstilling'
Preferred API Backend: Preferred API Backend:
Preferred API Backend: 'Foretrukket API-bakende' Preferred API Backend: 'Foretrukket API-bakende'
Local API: 'Lokalt API' Local API: 'Lokalt API'
@ -109,11 +120,14 @@ Settings:
End: 'Slutten' End: 'Slutten'
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Individious-instans 'Invidious Instance (Default is https://invidious.snopyta.org)': 'Individious-instans
(forvalget er https://invidious.snopyta.org)' (forvalget er https://invidious.snopyta.org)'
Region for Trending: 'Region for populære' Region for Trending: 'Region for På vei opp'
#! List countries #! List countries
Check for Updates: Se etter oppdateringer
View all Invidious instance information: Vis info om alle Invidious-instanser
Check for Latest Blog Posts: Se etter nye bloggposter
Theme Settings: Theme Settings:
Theme Settings: 'Tema innstillinger' Theme Settings: 'Tema innstillinger'
Match Top Bar with Main Color: '' Match Top Bar with Main Color: 'Bruk hovedfarge i toppbjelke'
Base Theme: Base Theme:
Base Theme: 'Hovedtema' Base Theme: 'Hovedtema'
Black: 'Svart' Black: 'Svart'
@ -128,36 +142,39 @@ Settings:
Indigo: 'Indigo' Indigo: 'Indigo'
Blue: 'Blå' Blue: 'Blå'
Light Blue: 'Lyseblå' Light Blue: 'Lyseblå'
Cyan: '' Cyan: 'Cyanblå'
Teal: '' Teal: 'Turkis'
Green: 'Grønn' Green: 'Grønn'
Light Green: 'Lysegrønn' Light Green: 'Lysegrønn'
Lime: '' Lime: 'Limegrønn'
Yellow: 'Gul' Yellow: 'Gul'
Amber: '' Amber: 'Rav'
Orange: '' Orange: 'Oransje'
Deep Orange: '' Deep Orange: 'Dyp oransje'
Secondary Color Theme: '' Secondary Color Theme: 'Sekundær fargedrakt'
#* Main Color Theme #* Main Color Theme
UI Scale: Grensesnittskala
Disable Smooth Scrolling: Skru av myk rulling
Expand Side Bar by Default: Utvid sidestolpe som forvalg
Player Settings: Player Settings:
Player Settings: 'Spillerinnstillinger' Player Settings: 'Spillerinnstillinger'
Force Local Backend for Legacy Formats: '' Force Local Backend for Legacy Formats: 'Påtving lokal bakende for forelede formater'
Play Next Video: 'Spill neste video' Play Next Video: 'Spill av neste video'
Turn on Subtitles by Default: '' Turn on Subtitles by Default: 'Slå på undertekster som standard'
Autoplay Videos: '' Autoplay Videos: 'Auto-spill videoer'
Proxy Videos Through Invidious: '' Proxy Videos Through Invidious: 'Mellomtjen videoer gjennom Invidious'
Autoplay Playlists: '' Autoplay Playlists: 'Autospillings-spillelister'
Enable Theatre Mode by Default: '' Enable Theatre Mode by Default: 'Kinomodus som standardvalg'
Default Volume: 'Forvalgt lydstyrke' Default Volume: 'Standardvolum'
Default Playback Rate: '' Default Playback Rate: 'Forvalgt avspillingshastighet'
Default Video Format: Default Video Format:
Default Video Format: '' Default Video Format: 'Forvalgt videoformat'
Dash Formats: '' Dash Formats: 'DASH-formater'
Legacy Formats: '' Legacy Formats: 'Gamle formater'
Audio Formats: 'Lydformater' Audio Formats: 'Lydformater'
Default Quality: Default Quality:
Default Quality: 'Forvalgt kvalitet' Default Quality: 'Forvalgt kvalitet'
Auto: '' Auto: 'Auto'
144p: '144p' 144p: '144p'
240p: '240p' 240p: '240p'
360p: '360p' 360p: '360p'
@ -165,21 +182,25 @@ Settings:
720p: '720p' 720p: '720p'
1080p: '1080p' 1080p: '1080p'
1440p: '1440p' 1440p: '1440p'
4k: '' 4k: 'UHD'
8k: '' 8k: '8k UHD'
Privacy Settings: Privacy Settings:
Privacy Settings: 'Personvernsinnstillinger' Privacy Settings: 'Personvernsinnstillinger'
Remember History: 'Husk historikk' Remember History: 'Husk historikk'
Save Watched Progress: 'Lagre framdriftsposisjon' Save Watched Progress: 'Lagre framdriftsposisjon'
Clear Search Cache: '' Clear Search Cache: 'Tøm søkehurtiglager'
Are you sure you want to clear out your search cache?: '' Are you sure you want to clear out your search cache?: 'Tøm søkehurtiglager?'
Search cache has been cleared: '' Search cache has been cleared: 'Søkehurtiglager tømt'
Remove Watch History: '' Remove Watch History: 'Fjern visningshistorikk'
Are you sure you want to remove your entire watch history?: '' Are you sure you want to remove your entire watch history?: 'Fjern hele visningshistorikken?'
Watch history has been cleared: '' Watch history has been cleared: 'VIsningshistorikk fjernet'
Remove All Subscriptions / Profiles: Fjern alle abonnementer/profiler
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Er
du sikker på at du vil fjerne alle abonnementer og profiler? Dette kan ikke
angres.
Subscription Settings: Subscription Settings:
Subscription Settings: '' Subscription Settings: 'Abonnementsinnstillinger'
Hide Videos on Watch: '' Hide Videos on Watch: 'Skjul sette videoer'
Subscriptions Export Format: Subscriptions Export Format:
Subscriptions Export Format: '' Subscriptions Export Format: ''
#& Freetube #& Freetube
@ -189,6 +210,7 @@ Settings:
Import Subscriptions: 'Importer abonnementer' Import Subscriptions: 'Importer abonnementer'
Export Subscriptions: 'Eksporter abonnementer' Export Subscriptions: 'Eksporter abonnementer'
How do I import my subscriptions?: 'Hvordan importerer jeg mine abonnementer?' How do I import my subscriptions?: 'Hvordan importerer jeg mine abonnementer?'
Fetch Feeds from RSS: Hent informasjonskanaler fra RSS
Advanced Settings: Advanced Settings:
Advanced Settings: 'Avanserte innstillinger' Advanced Settings: 'Avanserte innstillinger'
Enable Debug Mode (Prints data to the console): '' Enable Debug Mode (Prints data to the console): ''
@ -219,6 +241,67 @@ Settings:
Unknown data key: Ukjent datanøkkel Unknown data key: Ukjent datanøkkel
Unable to write file: Kunne ikke skrive fil Unable to write file: Kunne ikke skrive fil
Invalid history file: Ugyldig historikkfil Invalid history file: Ugyldig historikkfil
All watched history has been successfully exported: All visningshistorikk har
blitt eksportert
All watched history has been successfully imported: All visningshistorikk importert
History object has insufficient data, skipping item: Hopper over historikkobjekt
med utilstrekkelig data
One or more subscriptions were unable to be imported: Ett eller flere abonnement
kunne ikke importeres
All subscriptions have been successfully imported: Alle abonnementer har blitt
importert
All subscriptions and profiles have been successfully imported: Importerte alle
abonnementer og profiler
Manage Subscriptions: Håndter abonnementer
Unable to read file: Kunne ikke lese fil
Invalid subscriptions file: Ugyldig abonnementsfil
Profile object has insufficient data, skipping item: Profilobjekt har utilstrekkelig
data. Hopper over element.
Check for Legacy Subscriptions: Se etter foreldede abonnementer
Subscriptions have been successfully exported: Abonnementer eksportert
This might take a while, please wait: Dette kan ta sin tid…
Export History: Historikk-eksport
Import History: Historikk-import
Export NewPipe: NewPipe-eksport
Export YouTube: YouTube-eksport
Export FreeTube: FreeTube-eksport
Export Subscriptions: Eksporter abonnementer
Import NewPipe: Importer NewPipe
Import YouTube: Importer YouTube
Import FreeTube: Importer FreeTube
Import Subscriptions: Importer abonnementer
Select Export Type: Velg eksporttype
Select Import Type: Velg importtype
Data Settings: Datainnstillinger
Proxy Settings:
Region: Region
Clicking on Test Proxy will send a request to: Klikk på «Test mellomtjener» for
å sende en forespørsel til
Error getting network information. Is your proxy configured properly?: Klarte
ikke å hente nettverksinfo. Er din mellomtjener satt opp riktig?
Test Proxy: Test mellomtjener
City: By
Country: Land
Ip: IP
Your Info: Din info
Proxy Port Number: Mellomtjener-portnummer
Proxy Host: Mellomtjenervert
Proxy Protocol: Mellomtjenerprotokoll
Enable Tor / Proxy: Skru på Tor/mellomtjener
Proxy Settings: Mellomtjenerinnstillinger
Distraction Free Settings:
Hide Trending Videos: Gjem På vei opp
Hide Video Likes And Dislikes: Skjul video-gunst
Distraction Free Settings: Distraksjonsfri-innstillinger
Hide Active Subscriptions: Skjul aktive abonnementer
Hide Recommended Videos: Skjul anbefalte videoer
Hide Comment Likes: Skjul kommentargunst
Hide Channel Subscribers: Skjul kanalabonnementer
Hide Popular Videos: Skjul populære videoer
Hide Video Views: Skjul videovisninger
Hide Live Chat: Gjem direktechat
The app needs to restart for changes to take effect. Restart and apply change?: Start
programmet på ny for å bruke de nye endringene?
About: About:
#On About page #On About page
About: 'Om' About: 'Om'
@ -243,13 +326,37 @@ About:
Latest FreeTube News: '' Latest FreeTube News: ''
#On Channel Page #On Channel Page
FAQ: Ofte stilte spørsmål
Downloads / Changelog: Nedlastninger / Endringslogg
Licensed under the AGPLv3: Lisensiert under AGPLv3
Help: Hjelp
View License: Vis lisens
Donate: Doner
Website: Nettsted
Report a problem: Rapporter et problem
Source code: Kildekode
Please read the: Vennligst les
Mastodon: Mastodon
Email: E-post
Blog: Blogg
Translate: Oversett
Please check for duplicates before posting: Se etter duplikater før innsendelse
these people and projects: disse folkene og prosjektene
FreeTube is made possible by: FreeTube er gjort mulig av
Credits: Bidragsytere
room rules: romregler
GitHub issues: GitHub-problemsporer
FreeTube Wiki: FreeTube-wiki
GitHub releases: GitHub-utgivelser
Beta: Beta
Chat on Matrix: Snakk med oss på Matrix
Channel: Channel:
Subscriber: 'Abonnent' Subscriber: 'Abonnent'
Subscribers: 'Abonnenter' Subscribers: 'Abonnenter'
Subscribe: 'Abonner' Subscribe: 'Abonner'
Unsubscribe: 'Opphev abonnement' Unsubscribe: 'Opphev abonnement'
Search Channel: 'Søk i kanal' Search Channel: 'Søk i kanal'
Your search results have returned 0 results: 'Resultatløst søk' Your search results have returned 0 results: 'Søktet ditt ga 0 resultater'
Sort By: 'Sorter etter' Sort By: 'Sorter etter'
Videos: Videos:
Videos: 'Videoer' Videos: 'Videoer'
@ -270,11 +377,16 @@ Channel:
About: 'Om' About: 'Om'
Channel Description: 'Kanalbeskrivelse' Channel Description: 'Kanalbeskrivelse'
Featured Channels: 'Framhevede kanaler' Featured Channels: 'Framhevede kanaler'
Added channel to your subscriptions: Lagt til kanal til dine abonnenter
Removed subscription from $ other channel(s): Fjernet abonnement fra $ andre kanal(er)
Channel has been removed from your subscriptions: Kanalen har blitt fjernet fra
dine abonnement
Video: Video:
Mark As Watched: 'Marker som sett' Mark As Watched: 'Marker som sett'
Remove From History: 'Fjern fra historikk' Remove From History: 'Fjern fra historikk'
Video has been marked as watched: 'Videoen har blitt markert som sett' Video has been marked as watched: 'Videoen har blitt markert som sett'
Video has been removed from your history: '' Video has been removed from your history: 'Videoen har blitt fjernet fra historikken
din'
Open in YouTube: 'Åpne i YouTube' Open in YouTube: 'Åpne i YouTube'
Copy YouTube Link: 'Kopier YouTube-lenke' Copy YouTube Link: 'Kopier YouTube-lenke'
Open YouTube Embedded Player: 'Åpne innebygd YouTube-spiller' Open YouTube Embedded Player: 'Åpne innebygd YouTube-spiller'
@ -284,17 +396,22 @@ Video:
View: 'Vis' View: 'Vis'
Views: 'Visninger' Views: 'Visninger'
# Context is "X People Watching" # Context is "X People Watching"
Watching: '' Watching: 'Ser på'
Watched: '' Watched: 'Sett'
# As in a Live Video # As in a Live Video
Live: 'Direktesendt' Live: 'Direkte'
Live Now: 'Direktesendt nå' Live Now: 'Direkte nå'
Live Chat: 'Sanntidssludring' Live Chat: 'Direktechat'
Enable Live Chat: 'Skru på sanntidssludring' Enable Live Chat: 'Slå på direktechat'
Live Chat is currently not supported in this build.: '' Live Chat is currently not supported in this build.: 'Direktechat er ikke støttet
'Chat is disabled or the Live Stream has ended.': '' i den nåværende versjonen.'
Live chat is enabled. Chat messages will appear here once sent.: '' 'Chat is disabled or the Live Stream has ended.': 'Chatten er slått av eller direktesendingen
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': '' er avsluttet.'
Live chat is enabled. Chat messages will appear here once sent.: 'Direktechat er
slått på. Chatmeldinger vil bli vist her når de er sendt.'
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'Sanntidssludring
støttes for tiden ikke med Invidious-API-et. En direkte tilkobling til YouTube
kreves.'
Published: Published:
Jan: 'Jan' Jan: 'Jan'
Feb: 'Feb' Feb: 'Feb'
@ -321,11 +438,39 @@ Video:
Year: 'År' Year: 'År'
Years: 'År' Years: 'År'
Ago: 'Siden' Ago: 'Siden'
Upcoming: '' Upcoming: 'Har premiere'
Published on: '' Minutes: Minutter
Minute: Minutt
Published on: 'Publisert'
# $ 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: '$ % siden' Publicationtemplate: '$ % siden'
#& Videos #& Videos
Audio:
High: Høy
Medium: Middels
Low: Lav
Best: Beste
audio only: Bare lyd
video only: Bare video
Download Video: Last ned video
Video has been saved: Videoen har blitt lagret
Save Video: Lagre video
Copy Invidious Channel Link: Kopier Invidious-kanallenke
Reverse Playlist: Snu spillelisten
Started streaming on: Startet strømming
Streamed on: Strømmet
Starting soon, please refresh the page to check again: Starter snart, vennligst
oppdater siden for å sjekke igjen
Autoplay: Automatisk avspilling
Shuffle Playlist: Spill av tilfeldig fra spillelisten
Loop Playlist: Gjenta spilleliste
Open Channel in Invidious: Opne kanal i Invidious
Copy YouTube Channel Link: Kopier YouTube-kanallenke
Video has been removed from your saved list: Videoen har blitt fjernet fra din liste
over lagrede videoer
Open Channel in YouTube: Åpne kanal i YouTube
Play Previous Video: Spill av forrige video
Play Next Video: Spill av neste video
Videos: Videos:
#& Sort By #& Sort By
Sort By: Sort By:
@ -350,12 +495,16 @@ Playlist:
# On Video Watch Page # On Video Watch Page
#* Published #* Published
#& Views #& Views
Toggle Theatre Mode: '' Toggle Theatre Mode: 'Veksle teatermodus'
Change Format: Change Format:
Change Video Formats: 'Endre videoformater' Change Video Formats: 'Endre videoformater'
Use Dash Formats: '' Use Dash Formats: 'Bruk DASH-formater'
Use Legacy Formats: '' Use Legacy Formats: 'Bruk foreldede formater'
Use Audio Formats: '' Use Audio Formats: 'Bruk lydformater'
Audio formats are not available for this video: Lydformater er ikke tilgjengelig
for denne videoen
Dash formats are not available for this video: DASH-formater er ikke tilgjengelig
for denne videoen
Share: Share:
Share Video: 'Del video' Share Video: 'Del video'
Copy Link: 'Kopier lenke' Copy Link: 'Kopier lenke'
@ -369,6 +518,10 @@ Share:
YouTube URL copied to clipboard: 'YouTube-nettadresse kopiert til utklippstavle' YouTube URL copied to clipboard: 'YouTube-nettadresse kopiert til utklippstavle'
YouTube Embed URL copied to clipboard: 'Innebygd YouTube-nettadresse kopiert til YouTube Embed URL copied to clipboard: 'Innebygd YouTube-nettadresse kopiert til
utklippstavle' utklippstavle'
YouTube Channel URL copied to clipboard: YouTube-kanalnettadresse kopiert til utklippstavle
Include Timestamp: Inkluder tidsstempel
Invidious Channel URL copied to clipboard: Ugyldig kanalnettadresse kopiert til
utklippstavle
Mini Player: 'Minispiller' Mini Player: 'Minispiller'
Comments: Comments:
Comments: 'Kommentarer' Comments: 'Kommentarer'
@ -381,25 +534,35 @@ Comments:
Hide: 'Skjul' Hide: 'Skjul'
Replies: 'Svar' Replies: 'Svar'
Reply: 'Svar' Reply: 'Svar'
There are no comments available for this video: '' There are no comments available for this video: 'Det finnes ingen tilgjengelige
kommentarer for denne videoen'
Load More Comments: 'Last inn flere kommentarer' Load More Comments: 'Last inn flere kommentarer'
Up Next: '' No more comments available: Ingen flere kommentarer tilgjengelig
Newest first: Nyeste først
There are no more comments for this video: Det finnes ingen flere kommentarer for
denne videoen
Sort by: Sorter etter
Top comments: Toppkommentarer
Up Next: 'Neste'
# Toast Messages # Toast Messages
Local API Error (Click to copy): '' Local API Error (Click to copy): 'Lokal API-feil (Klikk for å kopiere)'
Invidious API Error (Click to copy): '' Invidious API Error (Click to copy): 'Invidious-API-feil (Klikk for å kopiere)'
Falling back to Invidious API: '' Falling back to Invidious API: 'Faller tilbake til Invidious-API-et'
Falling back to the local API: '' Falling back to the local API: 'Faller tilbake til det lokale API-et'
Subscriptions have not yet been implemented: '' Subscriptions have not yet been implemented: 'Abonnement har ikke blitt implementert
Loop is now disabled: '' enda'
Loop is now enabled: '' Loop is now disabled: 'Gjenta er nå deaktivert'
Shuffle is now disabled: '' Loop is now enabled: 'Gjenta er nå aktivert'
Shuffle is now enabled: '' Shuffle is now disabled: 'Tilfeldig avspilling er nå deaktivert'
Playing Next Video: '' Shuffle is now enabled: 'Tilfeldig avspilling er nå aktivert'
Playing Previous Video: '' Playing Next Video: 'Spiller av neste video'
Playing next video in 5 seconds. Click to cancel: '' Playing Previous Video: 'Spiller av forrige video'
Canceled next video autoplay: '' Playing next video in 5 seconds. Click to cancel: 'Spiller av neste video om 5 sekunder.
'The playlist has ended. Enable loop to continue playing': '' Klikk for å avbryte.'
Canceled next video autoplay: 'Avbryter automatisk avspilling av neste video'
'The playlist has ended. Enable loop to continue playing': 'Spillelisten har nådd
sin ende. Klikk på «Gjenta» for å fortsette spillingen'
Yes: 'Ja' Yes: 'Ja'
No: 'Nei' No: 'Nei'
@ -420,3 +583,65 @@ Profile:
Delete Profile: Slett profil Delete Profile: Slett profil
Make Default Profile: Gjør til forvalgt profil Make Default Profile: Gjør til forvalgt profil
Update Profile: Oppdater profil Update Profile: Oppdater profil
Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: Er
du sikker på at du vil fjerne de valgte kanalene? Disse vil ikke bli slettet fra
noen andre profiler.
No channel(s) have been selected: Ingen kanal(er) har blitt valgt
Select All: Velg alle
$ selected: $ valgt
Other Channels: Andre kanaler
Color Picker: Fargevelger
Profile Select: Velg profil
Create Profile: Lag profil
Edit Profile: Rediger profil
Create New Profile: Lag ny profil
Profile Manager: Profilbehandler
All Channels: Alle kanaler
? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in.
: Dette er din hovedprofil. Er du sikker på at du ønsker å slette valgte kanaler?
De samme kanalene vil bli slettet i enhver profil de finnes i.
Select None: Fravelg alt
Delete Selected: Slett valgte
Add Selected To Profile: Legg til valgt i profil
Subscription List: Abonnementsliste
Profile Preview: Profilforhåndsvisning
Custom Color: Egendefinert farge
This video is unavailable because of missing formats. This can happen due to country unavailability.: Denne
videoen er utilgjengelig grunnet manglende formater. Dette kan skyldes tilgangbegrensninger
i ditt land.
Tooltips:
General Settings:
Invidious Instance: Invidious-forekomsten som FreeTube vil koble til for API-kall.
Fjern den gjeldene forekomsten for å se en liste over offentlige forekomster
å velge mellom
Thumbnail Preference: Alle miniatyrbilder i FreeTube vil bli erstattet av et bilde
av videoen i stedet for standardminiatyrbildet
Fallback to Non-Preferred Backend on Failure: Når ditt foretrukne API har et problem,
vil FreeTube prøve å automatisk bruke ditt ikke-foretrukne API som en tilbakefallingsmetode
dersom det er aktivert
Region for Trending: Trendregionen lar deg enkelt velge hvilkets lands populære
videoer du ønsker å vise. Ikke alle land som vises støttes for tiden av YouTube.
Preferred API Backend: Velg bakenden FreeTube bruker til å hente data. Det lokale
API-et er en innebygd utpakker. Invidious-API-et krever en Invidious-tjener
å koble til.
Subscription Settings:
Fetch Feeds from RSS: Når påskrudd, vil FreeTube bruke RSS istedenfor dens forvalgte
metode for å hente din abonnementsstrøm. RSS er raskere og forhindrer IP-blokkering,
men har ikke gitt info som videovarighet, eller sanntidsstatus.
Player Settings:
Default Video Format: Sett formater brukt når en video spilles. DASH-formater
kan spille høyere kvaliteter. Foreldede formater er begrenset til maks. 720p,
men bruker mindre båndbredde. Lydformater er kun lydstrømmer.
Force Local Backend for Legacy Formats: Fungerer kun når Invidious-API-et er satt
som forvalg. Når påslått vil det lokale API-et kjøre og bruke de foreldede formatene
som returneres derfra, istedenfor dem returnert av Invidious. Hjelper når videoer
returnert av Invidious ikke spilles som følge av regionsrestriksjoner.
Proxy Videos Through Invidious: Kobler til Invidious for å vertstjene videoer
istedenfor å gjøre direkte tilkoblinger til YouTube. (Overskriver API-preferanse.)
A new blog is now available, $. Click to view more: En ny bloggpost er nå tilgjengelig,
$. Klikk for å se den
The playlist has been reversed: Spillelisten har blitt snudd
Download From Site: Last ned fra nettsiden
Version $ is now available! Click for more details: Versjon $ er nå tilgjengelig.
Klikk for flere detaljer.

588
static/locales/nn.yaml Normal file
View File

@ -0,0 +1,588 @@
# Put the name of your locale in the same language
Locale Name: 'Norsk nynorsk'
FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >-
Denne delen av applikasjonen er ikkje klar enda. Ver venleg og kom tilbake på eit
seinare tidspunkt.
# Webkit Menu Bar
File: 'Fil'
Quit: 'Avslutt'
Edit: 'Rediger'
Undo: 'Angre'
Redo: 'Gjenta'
Cut: 'Klipp'
Copy: 'Kopier'
Paste: 'Lim'
Delete: 'Fjern'
Select all: 'Vel alle'
Reload: 'Oppdater'
Force Reload: 'Tving oppdatering'
Toggle Developer Tools: 'Veksle utviklarverktøy'
Actual size: 'Originalstorleik'
Zoom in: 'Forstørr'
Zoom out: 'Forminsk'
Toggle fullscreen: 'Veksle fullskjerm'
Window: 'Vindauge'
Minimize: 'Minimer'
Close: 'Lukk'
Back: 'Tilbake'
Forward: 'Framover'
Version $ is now available! Click for more details: 'Versjon $ er no tilgjengeleg!
Klikk for meir informasjon'
Download From Site: 'Last ned frå nettstaden'
A new blog is now available, $. Click to view more: 'Eit nytt blogginnlegg er tilgjengeleg,
$. Klikk for å opne det'
# Search Bar
Search / Go to URL: 'Søk / Gå til nettadresse'
# In Filter Button
Search Filters:
Search Filters: 'Søkfilter'
Sort By:
Sort By: 'Sorter etter'
Most Relevant: 'Mest relevant'
Rating: 'Vurdering'
Upload Date: 'Opplastingsdato'
View Count: 'Sjåartal'
Time:
Time: 'Tid'
Any Time: 'Når som helst'
Last Hour: 'Den siste timen'
Today: 'I dag'
This Week: 'Denne veka'
This Month: 'Denne månaden'
This Year: 'Dette året'
Type:
Type: 'Type'
All Types: 'Alle typar'
Videos: 'Videoar'
Channels: 'Kanalar'
#& Playlists
Duration:
Duration: 'Varigheit'
All Durations: 'Alle varigheitene'
Short (< 4 minutes): 'Kort (< 4 minutt)'
Long (> 20 minutes): 'Lang (> 20 minutt)'
# On Search Page
Search Results: 'Søkeresultat'
Fetching results. Please wait: 'Henter resultat. Ver venleg og vent'
Fetch more results: 'Hent fleire resultat'
There are no more results for this search: 'Det er inga fleire resultat for dette
søket'
# Sidebar
Subscriptions:
# On Subscriptions Page
Subscriptions: 'Abonnement'
Latest Subscriptions: 'Siste abonnement'
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: 'Denne
profilen har ei stor mengd abonnentar. Tvinger RSS til å unngå å avgrense hastigheita'
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Di
abonnementliste er tom for augeblikket. Start å legge til fleire abonnement for
å sjå dei her.'
'Getting Subscriptions. Please wait.': 'Henter abonnement. Ver venleg og vent.'
Refresh Subscriptions: 'Oppdater abonnement'
Load More Videos: 'Last inn fleire videoar'
Trending: 'På veg opp'
Most Popular: 'Mest populært'
Playlists: 'Spelelister'
User Playlists:
Your Playlists: 'Dine spelelister'
Playlist Message: 'Denne sida reflekterer ikkje ei fullt fungerande speleliste.
Den viser berre videoar som du har lagra eller lagt til favorittar. Når arbeidet
er ferdig, blir alle videoane som for augeblikket er her overført til ei "favoritt"
speleliste.'
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 'Du
har ingen lagra videoar for augeblikket. Klikk på lagringsknappen i hjørnet av
ein video slik at den bli oppført her'
History:
# On History Page
History: 'Historikk'
Watch History: 'Sjåarhistorikk'
Your history list is currently empty.: 'Historikken din er tom for augeblikket.'
Settings:
# On Settings Page
Settings: 'Innstillingar'
The app needs to restart for changes to take effect. Restart and apply change?: 'Applikasjonen
må restarte for at endringane skal tre i kraft. Start på nytt og ta i bruk endringane?'
General Settings:
General Settings: 'Generelle innstillingar'
Check for Updates: 'Sjå etter oppdateringar'
Check for Latest Blog Posts: 'Sjå etter siste blogginnlegg'
Fallback to Non-Preferred Backend on Failure: 'Tilbakefall til ikkje-føretrekte
backend ved feil'
Enable Search Suggestions: 'Slå på søkeforslag'
Default Landing Page: 'Forvalt landingsside'
Locale Preference: 'Språkinnstilling'
Preferred API Backend:
Preferred API Backend: 'Føretrekte API-backend'
Local API: 'Lokalt API'
Invidious API: 'Invidious-API'
Video View Type:
Video View Type: 'Videovisingstype'
Grid: 'Rutenett'
List: 'Liste'
Thumbnail Preference:
Thumbnail Preference: 'Miniatyrbiletepreferanse'
Default: 'Standard'
Beginning: 'Begynning'
Middle: 'Mellom'
End: 'Slutt'
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious-førekomst
(Standard er https://invidious.snopyta.org)'
View all Invidious instance information: 'Vis all Invidious-førekomstinformasjon'
Region for Trending: 'Region for På veg opp'
#! List countries
Theme Settings:
Theme Settings: 'Temainnstillingar'
Match Top Bar with Main Color: ''
Expand Side Bar by Default: ''
Disable Smooth Scrolling: 'Deaktiver jevn rulling'
UI Scale: 'Skalering av brukargrensesnitt'
Base Theme:
Base Theme: 'Hovudtema'
Black: 'Svart'
Dark: 'Mørk'
Light: 'Lys'
Main Color Theme:
Main Color Theme: 'Hovudfargetema'
Red: 'Raud'
Pink: 'Rosa'
Purple: 'Lilla'
Deep Purple: 'Djuplilla'
Indigo: 'Indigo'
Blue: 'Blå'
Light Blue: 'Lyseblå'
Cyan: ''
Teal: 'Blågrøn'
Green: 'Grøn'
Light Green: 'Lysegrøn'
Lime: 'Lime'
Yellow: 'Gul'
Amber: 'Rav'
Orange: 'Oransje'
Deep Orange: 'Djuporansje'
Secondary Color Theme: 'Sekundærfargetema'
#* Main Color Theme
Player Settings:
Player Settings: 'Videospelarinnstillingar'
Force Local Backend for Legacy Formats: ''
Play Next Video: 'Spel av neste video'
Turn on Subtitles by Default: 'Slå på undertekst som standard'
Autoplay Videos: 'Spel av videoar automatisk'
Proxy Videos Through Invidious: ''
Autoplay Playlists: 'Spel av spelelister automatisk'
Enable Theatre Mode by Default: 'Kinomodus som standardval'
Default Volume: 'Standardvolum'
Default Playback Rate: 'Standard avspelingsfrekvens'
Default Video Format:
Default Video Format: 'Standard videoformat'
Dash Formats: 'DASH-format'
Legacy Formats: 'Eldre format'
Audio Formats: 'Lydformat'
Default Quality:
Default Quality: 'Standardkvalitet'
Auto: 'Automatisk'
144p: '144p'
240p: '240p'
360p: '360p'
480p: '480p'
720p: '720p'
1080p: '1080p'
1440p: '1440p'
4k: '4k'
8k: '8k'
Privacy Settings:
Privacy Settings: 'Personvernsinnstillingar'
Remember History: 'Husk historikk'
Save Watched Progress: ''
Clear Search Cache: 'Slett søkebuffer'
Are you sure you want to clear out your search cache?: 'Er du sikker på at du
vil slette søkebufferen?'
Search cache has been cleared: 'Søkebufferen har blitt sletta'
Remove Watch History: 'Slett sjåarhistorikk'
Are you sure you want to remove your entire watch history?: 'Er du sikker på at
du vil fjerne heile sjåarhistorikken din?'
Watch history has been cleared: 'Sjåarhistorikk har blitt fjerna'
Remove All Subscriptions / Profiles: ''
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: ''
Subscription Settings:
Subscription Settings: 'Abonnementinnstillingar'
Hide Videos on Watch: ''
Fetch Feeds from RSS: 'Hent feedar frå RSS'
Manage Subscriptions: 'Behandle abonnement'
Distraction Free Settings:
Distraction Free Settings: ''
Hide Video Views: 'Gøym videovisingar'
Hide Video Likes And Dislikes: ''
Hide Channel Subscribers: 'Gøym kanalabonnement'
Hide Comment Likes: ''
Hide Recommended Videos: 'Gøym anbefalte videoar'
Hide Trending Videos: ''
Hide Popular Videos: 'Gøym populære videoar'
Hide Live Chat: 'Gøym direktechat'
Hide Active Subscriptions: 'Gøym aktive abonnement'
Data Settings:
Data Settings: 'Datainnstillingar'
Select Import Type: 'Vel importtype'
Select Export Type: 'Vel eksporttype'
Import Subscriptions: 'Importer abonnement'
Import FreeTube: 'Importer FreeTube'
Import YouTube: 'Importer YouTube'
Import NewPipe: 'Importer NewPipe'
Check for Legacy Subscriptions: ''
Export Subscriptions: 'Eksporter abonnement'
Export FreeTube: 'Eksporter FreeTube'
Export YouTube: 'Eksporter YouTube'
Export NewPipe: 'Eksporter NewPipe'
Import History: 'Importer historikk'
Export History: 'Eksporter historikk'
Profile object has insufficient data, skipping item: 'Eit profilobjekt manglar
data, hoppar over objektet'
All subscriptions and profiles have been successfully imported: 'Alle abonnement
og profila har blitt importert'
All subscriptions have been successfully imported: 'Alle abonnement har blitt
importert'
One or more subscriptions were unable to be imported: ''
Invalid subscriptions file: 'Ugyldig abonnementfil'
This might take a while, please wait: 'Dette kan ta ei stund, venleg vent'
Invalid history file: 'Ugyldig historiefil'
Subscriptions have been successfully exported: 'Abonnement har blitt importert'
History object has insufficient data, skipping item: 'Eit historieobjekt manglar
data, hoppar over objektet'
All watched history has been successfully imported: 'Visingshistorikken har blitt
importert'
All watched history has been successfully exported: 'Visingshistorikken har blitt
eksportert'
Unable to read file: 'Kan ikkje lese fil'
Unable to write file: 'Kan ikkje skrive til fil'
Unknown data key: 'Ukjent datanøkkel'
How do I import my subscriptions?: 'Korleis importerer eg abonnementa mine?'
Manage Subscriptions: 'Behandle abonnement'
Proxy Settings:
Proxy Settings: 'Proxyinnstillingar'
Enable Tor / Proxy: 'Aktiver Tor / Proxy'
Proxy Protocol: 'Proxyprotokoll'
Proxy Host: 'Proxyvert'
Proxy Port Number: 'Proxyportnummer'
Clicking on Test Proxy will send a request to: 'Klikk på testproxyen du vil sende
ein førespurnad til'
Test Proxy: 'Test proxy'
Your Info: 'Din informasjon'
Ip: 'IP-adresse'
Country: 'Land'
Region: 'Region'
City: 'By'
Error getting network information. Is your proxy configured properly?: 'Kunne
ikkje hente nettverksinformasjon. Er proxyen din konfigurert skikkeleg?'
About:
#On About page
About: 'Om'
Beta: 'Beta'
Source code: 'Kjeldekode'
Licensed under the AGPLv3: 'Lisensiert under AGPLv3'
View License: 'Vis lisens'
Downloads / Changelog: 'Nedlastingar / Endringslogg'
GitHub releases: 'GitHub-utgjevingar'
Help: 'Hjelp'
FreeTube Wiki: 'FreeTube-wiki'
FAQ: 'Ofte stilte spørsmål'
Report a problem: 'Rapporter eit problem'
GitHub issues: 'GitHub issues'
Please check for duplicates before posting: 'Sjå etter duplikat før du poster noko'
Website: 'Nettstad'
Blog: 'Blogg'
Email: 'E-post'
Mastodon: 'Mastodon'
Chat on Matrix: 'Snakk med oss på Matrix'
Please read the: 'Ver venleg og les'
room rules: 'Romreglar'
Translate: 'Omsetje'
Credits: 'Bidrag'
FreeTube is made possible by: 'FreeTube er mogleggjort av'
these people and projects: 'desse folka og prosjekta'
Donate: 'Doner'
Profile:
Profile Select: 'Profilval'
All Channels: 'Alle kanalar'
Profile Manager: 'Profilbehandlar'
Create New Profile: 'Lag ny profil'
Edit Profile: 'Rediger profil'
Color Picker: 'Fargeveljar'
Custom Color: ''
Profile Preview: 'Forhandsvising av profil'
Create Profile: 'Lag profil'
Update Profile: 'Oppdater profil'
Make Default Profile: 'Angi som standardprofil'
Delete Profile: 'Fjern profil'
Are you sure you want to delete this profile?: 'Er du sikker på at du vil fjerne
denne profilet?'
All subscriptions will also be deleted.: 'Alle abonnement vil òg bli sletta.'
Profile could not be found: 'Profil ikkje funne'
Your profile name cannot be empty: 'Profilnamnet ditt kan ikkje vere tomt'
Profile has been created: 'Profilet har blitt laga'
Profile has been updated: 'Profilet har blitt oppdatert'
Your default profile has been set to $: 'Standardprofilet ditt har blitt satt til
$'
Removed $ from your profiles: 'Fjerna $ frå profila dine'
Your default profile has been changed to your primary profile: 'Standardprofilet
ditt har blitt endra til primærprofilet ditt'
$ is now the active profile: '$ er no det aktive profilet'
Subscription List: 'Abonnementliste'
Other Channels: 'Andre kanalar'
$ selected: '$ valt'
Select All: 'Vel alle'
Select None: 'Vel ingen'
Delete Selected: 'Slett valte'
Add Selected To Profile: 'Legg til valt i profilen'
No channel(s) have been selected: 'Ingen kanal(ar) har blitt valt'
? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in.
: 'Dette er primærprofilet ditt. Er du sikker på at du vil fjerne dei valte kanalane?
Dei same kanalane vil bli sletta i profila dei er funne i.'
Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: 'Er
du sikker på at du vil fjerne dei valte kanalane? Dette vil ikkje slette kanalane
frå andre profil.'
#On Channel Page
Channel:
Subscriber: 'Abonnent'
Subscribers: 'Abonnentar'
Subscribe: 'Abonner'
Unsubscribe: 'Opphev abonnement'
Channel has been removed from your subscriptions: 'Kanalen har blitt fjerna frå
dine abonnement'
Removed subscription from $ other channel(s): ''
Added channel to your subscriptions: 'Lagt til kanal til dine abonnentar'
Search Channel: 'Søk i kanal'
Your search results have returned 0 results: 'Søket gitt gav 0 resultat'
Sort By: 'Sorter etter'
Videos:
Videos: 'Videoar'
This channel does not currently have any videos: 'Kanalen har ingen videoar enda'
Sort Types:
Newest: 'Nyaste'
Oldest: 'Eldste'
Most Popular: 'Mest populære'
Playlists:
Playlists: 'Spelelister'
This channel does not currently have any playlists: 'Denne kanalen har ingen spelelister
enda'
Sort Types:
Last Video Added: 'Siste video lagt til'
Newest: 'Nyaste'
Oldest: 'Eldste'
About:
About: 'Om'
Channel Description: 'Kanalbeskriving'
Featured Channels: 'Utvalte kanalar'
Video:
Mark As Watched: 'Marker som sett'
Remove From History: 'Fjern frå historikk'
Video has been marked as watched: 'Videoen har blitt markert som sett'
Video has been removed from your history: 'Videoen har blitt fjerna frå historikken
din'
Save Video: 'Lagre video'
Video has been saved: 'Videoen har blitt lagra'
Video has been removed from your saved list: 'Videoen har blitt fjerna frå di liste
over lagra videoar'
Open in YouTube: 'Opne i YouTube'
Copy YouTube Link: 'Kopier YouTube-lenke'
Open YouTube Embedded Player: ''
Copy YouTube Embedded Player Link: ''
Open in Invidious: 'Opne i Invidious'
Copy Invidious Link: 'Kopier Invidious-lenke'
Open Channel in YouTube: 'Opne kanal i YouTube'
Copy YouTube Channel Link: 'Kopier YouTube-kanallenke'
Open Channel in Invidious: 'Opne kanal i Invidious'
Copy Invidious Channel Link: 'Kopier Invidious-kanallenke'
View: 'Vis'
Views: 'Visingar'
Loop Playlist: 'Gjenta speleliste'
Shuffle Playlist: 'Spel av tilfeldig frå spelelista'
Reverse Playlist: ''
Play Next Video: 'Spel av neste video'
Play Previous Video: 'Spel av førre video'
# Context is "X People Watching"
Watching: 'Ser på'
Watched: 'Såg'
Autoplay: 'Automatisk avspeling'
Starting soon, please refresh the page to check again: 'Starter snart, venleg oppdater
sida for å sjekke igjen'
# As in a Live Video
Live: 'Direkte'
Live Now: 'Direkte no'
Live Chat: 'Direktechat'
Enable Live Chat: 'Slå på direktechat'
Live Chat is currently not supported in this build.: 'Direktechat er ikkje støtta
i den noverande versjonen.'
'Chat is disabled or the Live Stream has ended.': 'Chatten er slått av eller direktesendinga
er avslutta.'
Live chat is enabled. Chat messages will appear here once sent.: 'Direktechat er
slått på. Chatmeldingar vil bli vist her når dei er sendt.'
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': ''
Download Video: 'Last ned video'
video only: 'berre video'
audio only: 'berre lyd'
Audio:
Low: 'Låg'
Medium: 'Middels'
High: 'Høg'
Best: 'Beste'
Published:
Jan: 'Jan'
Feb: 'Feb'
Mar: 'Mar'
Apr: 'Apr'
May: 'Mai'
Jun: 'Jun'
Jul: 'Jul'
Aug: 'Aug'
Sep: 'Sep'
Oct: 'Okt'
Nov: 'Nov'
Dec: 'Des'
Second: 'Sekund'
Seconds: 'Sekund'
Minute: 'Minutt'
Minutes: 'Minutt'
Hour: 'Time'
Hours: 'Timar'
Day: 'Dag'
Days: 'Dagar'
Week: 'Veke'
Weeks: 'Veke'
Month: 'Månad'
Months: 'Månadar'
Year: 'År'
Years: 'År'
Ago: 'Sidan'
Upcoming: 'Har premiere på'
Published on: 'Publisert på'
Streamed on: 'Strauma på'
Started streaming on: 'Begynte å straume på'
# $ is replaced with the number and % with the unit (days, hours, minutes...)
Publicationtemplate: '$ % sidan'
#& Videos
Videos:
#& Sort By
Sort By:
Newest: 'Nyaste'
Oldest: 'Eldste'
#& Most Popular
#& Playlists
Playlist:
#& About
View Full Playlist: 'Vis heile spelelista'
Videos: 'Videoar'
View: ''
Views: 'Visingar'
Last Updated On: 'Sist oppdatert'
Share Playlist:
Share Playlist: 'Del speleliste'
Copy YouTube Link: 'Kopier YouTube-lenke'
Open in YouTube: 'Opne i YouTube'
Copy Invidious Link: 'Kopier Invidious-lenke'
Open in Invidious: 'Opne i Invidious'
# On Video Watch Page
#* Published
#& Views
Toggle Theatre Mode: 'Veksle teatermodus'
Change Format:
Change Video Formats: 'Endre videoformat'
Use Dash Formats: 'Bruk DASH-format'
Use Legacy Formats: 'Bruk gamle format'
Use Audio Formats: 'Bruk lydformat'
Dash formats are not available for this video: 'DASH-format er ikkje tilgjengeleg
for denne videoen'
Audio formats are not available for this video: 'Lydformat er ikkje tilgjengeleg
for denne videoen'
Share:
Share Video: 'Del video'
Include Timestamp: 'Inkluder tidsstempel'
Copy Link: 'Kopier lenke'
Open Link: 'Opne lenke'
Copy Embed: 'Kopier innebygd versjon'
Open Embed: 'Opne innebygde versjon'
# On Click
Invidious URL copied to clipboard: 'Invidious-URL kopiert til utklippstavle'
Invidious Embed URL copied to clipboard: 'Innebygd Invidious-nettadresse kopiert
til utklippstavle'
Invidious Channel URL copied to clipboard: 'Invidious-kanalnettadresse kopiert til
utklippstavle'
YouTube URL copied to clipboard: 'YouTube-nettadresse kopiert til utklippstavle'
YouTube Embed URL copied to clipboard: 'Innebygd YouTube-nettadresse kopiert til
utklippstavle'
YouTube Channel URL copied to clipboard: 'YouTube-kanalnettadresse kopiert til utklippstavle'
Mini Player: 'Minispelar'
Comments:
Comments: 'Kommentarar'
Click to View Comments: 'Klikk for å sjå kommentarar'
Getting comment replies, please wait: 'Laster inn kommentarar, ver venleg og vent'
There are no more comments for this video: 'Det finst ingen fleire kommentarar for
denne videoen'
Show Comments: 'Vis kommentarar'
Hide Comments: 'Gøym kommentarar'
Sort by: 'Sorter etter'
Top comments: 'Toppkommentar'
Newest first: 'Nyaste først'
# Context: View 10 Replies, View 1 Reply
View: 'Vis'
Hide: 'Gøym'
Replies: 'Svar'
Reply: 'Svar'
There are no comments available for this video: 'Det er ingen kommentarar tilgjengeleg
for denne videoen'
Load More Comments: 'Last inn fleire kommentarar'
No more comments available: 'Ingen fleire kommentarar tilgjengeleg'
Up Next: 'Neste'
#Tooltips
Tooltips:
General Settings:
Preferred API Backend: ''
Fallback to Non-Preferred Backend on Failure: 'Når ditt føretrekte API har eit
problem, vil FreeTube prøve å automatisk bruke ditt ikkje-føretrekte API som
ein tilbakefallingsmetode dersom det er aktivert'
Thumbnail Preference: 'Alle miniatyrbilete i FreeTube vil bli erstatta av eit
bilete av videoen i staden for standardminiatyrbiletet'
Invidious Instance: 'Invidious-førekomsten som FreeTube vil kople til for API-kall.
Fjern den gjeldene førekomsten for å sjå ei liste over offentlige førekomstar
å velje mellom'
Region for Trending: ''
Player Settings:
Force Local Backend for Legacy Formats: ''
Proxy Videos Through Invidious: ''
Default Video Format: ''
Subscription Settings:
Fetch Feeds from RSS: ''
# Toast Messages
Local API Error (Click to copy): 'Lokal API-feil (Klikk for å kopiere)'
Invidious API Error (Click to copy): 'Invidious-API-feil (Klikk for å kopiere)'
Falling back to Invidious API: 'Faller tilbake til Invidious-API'
Falling back to the local API: 'Faller tilbake til det lokale API-et'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Denne
videoen er utilgjengeleg grunna manglande format. Dette kan skuldast tilgangsavgrensingar
i ditt land.'
Subscriptions have not yet been implemented: 'Abonnement har ikkje blitt implementert
enda'
Loop is now disabled: 'Gjenta er no deaktivert'
Loop is now enabled: 'Gjenta er no aktivert'
Shuffle is now disabled: 'Tilfeldig avspeling er no deaktivert'
Shuffle is now enabled: 'Tilfeldig avspeling er no aktivert'
The playlist has been reversed: 'Spelelista har blitt snudd'
Playing Next Video: 'Speler av neste video'
Playing Previous Video: 'Speler av førre video'
Playing next video in 5 seconds. Click to cancel: 'Speler av neste video om 5 sekund.
Klikk for å avbryte.'
Canceled next video autoplay: 'Avbryt automatisk avspeling av neste video'
'The playlist has ended. Enable loop to continue playing': 'Spelelista har nådd si
ende. Klikk på gjenta for å fortsette spelinga'
Yes: 'Ja'
No: 'Nei'

View File

@ -85,6 +85,9 @@ User Playlists:
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Os Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Os
seus vídeos guardados estão vazios. Clique no botão salvar no canto de um vídeo seus vídeos guardados estão vazios. Clique no botão salvar no canto de um vídeo
para que ele seja listado aqui para que ele seja listado aqui
Playlist Message: Esta página não reflete listas de reprodução totalmente funcionais.
Ele só lista vídeos que você salvou ou favoritos. Quando o trabalho estiver concluído,
todos os vídeos atualmente aqui serão migrados para uma playlist 'Favoritos'.
History: History:
# On History Page # On History Page
History: 'Histórico' History: 'Histórico'
@ -303,6 +306,10 @@ Settings:
Proxy Protocol: Protocolo de Proxy Proxy Protocol: Protocolo de Proxy
Enable Tor / Proxy: Ativar Tor / Proxy Enable Tor / Proxy: Ativar Tor / Proxy
Proxy Settings: Configurações de Proxy Proxy Settings: Configurações de Proxy
Error getting network information. Is your proxy configured properly?: Erro ao
obter informações da rede. O seu proxy está configurado corretamente?
City: Cidade
Region: Região
About: About:
#On About page #On About page
About: 'Sobre' About: 'Sobre'
@ -334,6 +341,31 @@ About:
Latest FreeTube News: 'Ultimas notícias sobre o FreeTube' Latest FreeTube News: 'Ultimas notícias sobre o FreeTube'
#On Channel Page #On Channel Page
GitHub issues: Problemas com o GitHub
Report a problem: Reportar um problema
FAQ: FAQs
FreeTube Wiki: Wiki do FreeTube
Help: Ajuda
GitHub releases: Lançamentos do GitHub
Downloads / Changelog: Downloads / Modificações
View License: Ver Licença
Licensed under the AGPLv3: Licença AGPLv3
Source code: Código-fonte
Beta: Beta
Donate: Doar
these people and projects: estas pessoas e projetos
FreeTube is made possible by: O FreeTube é possível graças a
Credits: Créditos
Translate: Traduzir
room rules: regras da sala
Please read the: Favor ler o
Chat on Matrix: Bate-papo na Matrix
Mastodon: Mastodon
Email: E-mail
Blog: Blog
Website: Site web
Please check for duplicates before posting: Verifique se há duplicatas antes de
postar
Channel: Channel:
Subscriber: 'Inscrito' Subscriber: 'Inscrito'
Subscribers: 'Inscritos' Subscribers: 'Inscritos'
@ -450,6 +482,10 @@ Video:
Open Channel in Invidious: Abrir Canal no Invidious Open Channel in Invidious: Abrir Canal no Invidious
Copy YouTube Channel Link: Copiar o link do canal no YouTube Copy YouTube Channel Link: Copiar o link do canal no YouTube
Open Channel in YouTube: Abrir canal no YouTube Open Channel in YouTube: Abrir canal no YouTube
Video has been removed from your saved list: O vídeo foi removido da sua lista de
vídeos salvos
Video has been saved: O vídeo foi salvo
Save Video: Salvar vídeo
Videos: Videos:
#& Sort By #& Sort By
Sort By: Sort By:
@ -627,3 +663,4 @@ 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.
More: Mais

View File

@ -69,6 +69,7 @@ Search Filters:
Search Results: Resultados Search Results: Resultados
Fetching results. Please wait: A procurar. Por favor aguarde Fetching results. Please wait: A procurar. Por favor aguarde
Fetch more results: Procurar mais resultados Fetch more results: Procurar mais resultados
There are no more results for this search: Não existem mais resultados
# Sidebar # Sidebar
Subscriptions: Subscriptions:
# On Subscriptions Page # On Subscriptions Page
@ -87,6 +88,11 @@ Most Popular: Mais Populares
Playlists: Listas de Reprodução Playlists: Listas de Reprodução
User Playlists: User Playlists:
Your Playlists: As suas Listas de Reprodução Your Playlists: As suas Listas de Reprodução
Playlist Message: Esta página não é indicativa do resultado final. Apenas mostra
vídeos que foram guardados ou marcados como favoritos. Quando estiver pronta,
todos os vídeos que estiverem aqui serão postos numa lista chamada 'Favoritos'.
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: A sua lista está vazia. Carregue no botão com a estrela no canto de um vídeo para o
guardar aqui.
History: History:
# On History Page # On History Page
History: Histórico History: Histórico
@ -123,6 +129,7 @@ Settings:
End: Fim End: Fim
'Invidious Instance (Default is https://invidious.snopyta.org)': Instância Invidious 'Invidious Instance (Default is https://invidious.snopyta.org)': Instância Invidious
(Por omissão é https://invidious.snopyta.org) (Por omissão é https://invidious.snopyta.org)
View all Invidious instance information: Mostrar toda a informação sobre esta instância Invidious
Region for Trending: Região para as tendências Region for Trending: Região para as tendências
#! List countries #! List countries
Theme Settings: Theme Settings:
@ -222,6 +229,7 @@ Settings:
Hide Trending Videos: Esconder Tendências Hide Trending Videos: Esconder Tendências
Hide Popular Videos: Esconder Mais Populares Hide Popular Videos: Esconder Mais Populares
Hide Live Chat: Esconder Chat ao Vivo Hide Live Chat: Esconder Chat ao Vivo
Hide Active Subscriptions: Esconder Subscrições da barra lateral
Data Settings: Data Settings:
Data Settings: Definições de dados Data Settings: Definições de dados
Select Import Type: Escolher tipo de importação Select Import Type: Escolher tipo de importação
@ -260,67 +268,48 @@ Settings:
Unable to write file: Ficheiro não pôde ser escrito Unable to write file: Ficheiro não pôde ser escrito
Unknown data key: Chave dada é desconhecida Unknown data key: Chave dada é desconhecida
How do I import my subscriptions?: Como posso importar as minhas subscrições? How do I import my subscriptions?: Como posso importar as minhas subscrições?
Advanced Settings: Manage Subscriptions: Gerir Subscrições
Advanced Settings: Definições Avançadas Proxy Settings:
Enable Debug Mode (Prints data to the console): Ligar Modo de Depuração (Escreve Proxy Settings: Definições de Intermediários
dados à consola) Enable Tor / Proxy: Ligar Tor / Intermediário
'Proxy Address (Example: SOCKS5://127.0.0.1:9050 )': 'Endereço de intermediário Proxy Protocol: Protocolo do Intermediário
(Exemplo: SOCKS5://127.0.0.1:9050 )' Proxy Host: Endereço do Intermediário
'Clicking "TEST PROXY" button will send a request to https://ipinfo.io/json': >- Proxy Port Number: Porto do Intermediário
Ao Carregar "TESTAR INTERMEDIÁRIO" um pedido vai ser enviado a https://ipinfo.io/json Clicking on Test Proxy will send a request to: Carregar em Testar Intermediário irá enviar um pedido a
Use Tor / Proxy for API calls: Usar Tor / Intermediário para Chamadas API Test Proxy: Testar Intermediário
TEST PROXY: TESTAR INTERMEDIÁRIO Your Info: A sua Informação
#& Invidious Instance (Default is https://invidious.snopyta.org) Ip: Ip
See Public Instances: Ver Instâncias Públicas Country: País
Clear History: Region: Região
Clear History: Limpar Histórico City: Cidade
# On Click Error getting network information. Is your proxy configured properly?: Houve um erro a receber a informação sobre a sua rede. Verifique que o seu intermediário está configurado correctamente.
Are you sure you want to delete your history?: Tem a certeza de que quer apagar
o seu histórico?
#& Yes
#& No
Clear Subscriptions:
Clear Subscriptions: Limpar Subscrições
# On Click
Are you sure you want to remove all subscriptions?: Tem a certeza de que quer
apagar as suas subscrições?
#& Yes
#& No
About: About:
#On About page #On About page
About: Sobre About: Sobre
#& About Beta: Beta
'This software is FOSS and released under the GNU Public License v3+.': >- Source code: Código fonte
This copylefted software is freely licensed GPLv3+. Licensed under the AGPLv3: Está sobre a licensa AGPLv3
View License: Ver a Licensa
'Found a bug? Want to suggest a feature? Want to help out? Check out our GitHub page. Pull requests are welcome.': >- Downloads / Changelog: Descarregar / Mudanças
Encontraste um bug? Queres sugerir uma funcionalidade? Queres ajudar-nos? Vai GitHub releases: Lançamentos no GitHub
á nossa página de GitHub. Pull requests são bem vindos. Help: Ajuda
FreeTube Wiki: Wiki do FreeTube
Thank you very much to the People and Projects that make FreeTube possible!: >- FAQ: Perguntas Frequentes
Agradeço imenso a todas as pessoas e projetos que façam com que o FreeTube seja Report a problem: Relatar um problema
possivel! GitHub issues: Problemas no GitHub
Please check for duplicates before posting: É favor verificar se um problema já foi relatado
'Want to chat? Join our Element / Matrix Server . Please check the rules before joining.': >- Website: Site
Queres conversar? Junta-te ao nosso servidor Element / Matrix. Por favor verifica Blog: Blogue
as regras antes de te juntares. Email: Email
Mastodon: Mastodon
'Looking for help? Check out our Wiki page.': Há procura de ajuda? Vê a nossa página Chat on Matrix: Chat no Matrix
Wiki. Please read the: Por favor leia as
room rules: regras da sala de chat
Check out our Firefox extension!: Experimenta a nossa extensão Firefox! Translate: Traduzir
Credits: Créditos
'If you enjoy using FreeTube, consider donating via Liberapay or through our Bitcoin address.': >- FreeTube is made possible by: FreeTube existe graças a
Se gostas de usar FreeTube, considera doar via Liberapay ou através do nosso endereço these people and projects: estas pessoas e projectos
Bitcoin. Donate: Doar
#~ 'BTC: 1Lih7Ho5gnxb1CwPD4o59ss78pwo2T91eS'
Latest FreeTube News: Notícias recentes sobre FreeTube
This software is FOSS and released under the GNU Affero General Public License v3.0.: Este
software é licenciado livremente via AGPL-3.0.
Profile: Profile:
All Channels: Todos os Canais All Channels: Todos os Canais
Profile Manager: Gestor de Perfis Profile Manager: Gestor de Perfis
@ -399,6 +388,9 @@ Video:
Remove From History: Apagar do histórico Remove From History: Apagar do histórico
Video has been marked as watched: O vídeo foi marcado como visto Video has been marked as watched: O vídeo foi marcado como visto
Video has been removed from your history: O vídeo foi removido do seu histórico Video has been removed from your history: O vídeo foi removido do seu histórico
Save Video: Guardar Vídeo
Video has been saved: Vídeo guardado
Video has been removed from your saved list: Vídeo removido da sua lista
Open in YouTube: Abrir no Youtube Open in YouTube: Abrir no Youtube
Copy YouTube Link: Copiar Ligação para Youtube Copy YouTube Link: Copiar Ligação para Youtube
Open YouTube Embedded Player: Abrir Reprodutor Youtube Embutido Open YouTube Embedded Player: Abrir Reprodutor Youtube Embutido
@ -468,7 +460,9 @@ Video:
Years: Anos Years: Anos
Ago: Ago:
Upcoming: Estreia em breve Upcoming: Estreia em breve
Published on: Publicado em Published on: Publicado a
Streamed on: Transmitido a
Started streaming on: Transmissão iniciada a
# $ 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: Há $ % Publicationtemplate: Há $ %
#& Videos #& Videos

View File

@ -85,6 +85,10 @@ User Playlists:
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: У Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: У
вас нет сохранных видео. Нажмите на кнопку сохранения в углу видео, чтобы оно вас нет сохранных видео. Нажмите на кнопку сохранения в углу видео, чтобы оно
появилось здесь появилось здесь
Playlist Message: Эта страница не отражает полную функциональность плейлистов. Она
показывает только видео которые вы сохранили или добавили в избранное. После переработки
этой страницы все видео, которые сейчас находятся здесь, переместятся в плейлист
"Избранное".
History: History:
# On History Page # On History Page
History: 'История' History: 'История'
@ -359,6 +363,9 @@ About:
Licensed under the AGPLv3: Лицензия AGPLv3 Licensed under the AGPLv3: Лицензия AGPLv3
Source code: Исходный код Source code: Исходный код
Beta: Бета Beta: Бета
Please check for duplicates before posting: Пожалуйста, проверьте наличие дубликатов
перед публикацией
GitHub issues: Проблемы на GitHub
Channel: Channel:
Subscriber: 'Подписчик' Subscriber: 'Подписчик'
Subscribers: 'Подписчиков' Subscribers: 'Подписчиков'

View File

@ -190,6 +190,7 @@ Settings:
1440p: '1440p' 1440p: '1440p'
4k: '4k' 4k: '4k'
8k: '8k' 8k: '8k'
Playlist Next Video Interval: Oynatma Listesi Sonraki Video Aralığı
Privacy Settings: Privacy Settings:
Privacy Settings: 'Gizlilik Ayarları' Privacy Settings: 'Gizlilik Ayarları'
Remember History: 'Geçmişi Hatırla' Remember History: 'Geçmişi Hatırla'
@ -288,6 +289,7 @@ Settings:
Hide Video Views: Video Görüntülenme Sayılarını Gizle Hide Video Views: Video Görüntülenme Sayılarını Gizle
Distraction Free Settings: Dikkat Dağıtmama Ayarları Distraction Free Settings: Dikkat Dağıtmama Ayarları
Hide Active Subscriptions: Etkin Abonelikleri Gizle Hide Active Subscriptions: Etkin Abonelikleri Gizle
Hide Playlists: Oynatma Listelerini Gizle
The app needs to restart for changes to take effect. Restart and apply change?: Değişikliklerin The app needs to restart for changes to take effect. Restart and apply change?: Değişikliklerin
etkili olması için uygulamanın yeniden başlatılması gerekiyor. Yeniden başlatılsın etkili olması için uygulamanın yeniden başlatılması gerekiyor. Yeniden başlatılsın
ve değişiklikler uygulansın mı? ve değişiklikler uygulansın mı?
@ -412,6 +414,7 @@ Profile:
kanalları silmek istediğinizden emin misiniz? Bu, kanalı başka bir profilden kanalları silmek istediğinizden emin misiniz? Bu, kanalı başka bir profilden
silmez.' silmez.'
#On Channel Page #On Channel Page
Profile Filter: Profil Filtresi
Channel: Channel:
Subscriber: 'Abone' Subscriber: 'Abone'
Subscribers: 'Aboneler' Subscribers: 'Aboneler'
@ -658,3 +661,8 @@ 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
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
tıklayın. | Sonraki video {nextVideoInterval} saniye içinde oynatılıyor. İptal etmek
için tıklayın.
More: Daha Fazla

View File

@ -70,6 +70,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: 'Підписки'
@ -87,6 +88,12 @@ 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: 'Історія'
@ -126,10 +133,12 @@ Settings:
(За замовчуванням https://invidious.snopyta.org)' (За замовчуванням https://invidious.snopyta.org)'
Region for Trending: 'Регіон для Популярних' Region for Trending: 'Регіон для Популярних'
#! List countries #! List countries
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: 'Верхня панель основного кольору'
Expand Side Bar by Default: '' Expand Side Bar by Default: 'Усталено розгортати бічну панель'
Disable Smooth Scrolling: 'Відключити плавну прокрутку' Disable Smooth Scrolling: 'Відключити плавну прокрутку'
UI Scale: 'Масштаб інтерфейсу' UI Scale: 'Масштаб інтерфейсу'
Base Theme: Base Theme:
@ -159,19 +168,20 @@ Settings:
#* Main Color Theme #* Main Color Theme
Player Settings: Player Settings:
Player Settings: 'Налаштування програвача' Player Settings: 'Налаштування програвача'
Force Local Backend for Legacy Formats: '' Force Local Backend for Legacy Formats: 'Примусово використовувати локальний сервер
для застарілих форматів'
Play Next Video: 'Грати наступне відео' Play Next Video: 'Грати наступне відео'
Turn on Subtitles by Default: 'Увімкнути субтитри за замовченням' Turn on Subtitles by Default: 'Увімкнути субтитри за замовченням'
Autoplay Videos: 'Автоматичне відтворення відео' Autoplay Videos: 'Автоматичне відтворення відео'
Proxy Videos Through Invidious: '' Proxy Videos Through Invidious: 'Проксі-відео через Invidious'
Autoplay Playlists: 'Автоматичне відтворення списків' Autoplay Playlists: 'Автоматичне відтворення списків'
Enable Theatre Mode by Default: '' Enable Theatre Mode by Default: 'Усталено увімкнений режим театру'
Default Volume: 'Гучніть за замовченням' Default Volume: 'Гучніть за замовченням'
Default Playback Rate: '' Default Playback Rate: 'Усталена швидкість відтворення'
Default Video Format: Default Video Format:
Default Video Format: 'Формат відео за замовченням' Default Video Format: 'Формат відео за замовченням'
Dash Formats: '' Dash Formats: 'Формати Dash'
Legacy Formats: '' Legacy Formats: 'Застарілі формати'
Audio Formats: 'Аудіо формати' Audio Formats: 'Аудіо формати'
Default Quality: Default Quality:
Default Quality: 'Якість за замовченням' Default Quality: 'Якість за замовченням'
@ -185,33 +195,39 @@ 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: 'Збрігати історію'
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?: 'Дійсно бажаєте очистити
Search cache has been cleared: '' кеш пошуку?'
Search cache has been cleared: 'Кеш пошуку очищено'
Remove Watch History: 'Видалити історію переглядів' Remove Watch History: 'Видалити історію переглядів'
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: 'Видалити всі підписки / профілі'
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.: 'Справді
хочете вилучити всі підписки та профілі? Цю дію не можна скасувати.'
Subscription Settings: Subscription Settings:
Subscription Settings: 'Налаштування підписки' Subscription Settings: 'Налаштування підписки'
Hide Videos on Watch: 'Ховати відео при перегляді' Hide Videos on Watch: 'Ховати відео при перегляді'
Fetch Feeds from RSS: '' Fetch Feeds from RSS: 'Отримати канали з RSS'
Manage Subscriptions: 'Керування підписками' Manage Subscriptions: 'Керування підписками'
Distraction Free Settings: Distraction Free Settings:
Distraction Free Settings: '' Distraction Free Settings: 'Налаштування зосередження'
Hide Video Views: 'Сховати перегляди відео' Hide Video Views: 'Сховати перегляди відео'
Hide Video Likes And Dislikes: '' Hide Video Likes And Dislikes: 'Приховати вподобайки до відео'
Hide Channel Subscribers: 'Не показувати підписників каналу' Hide Channel Subscribers: 'Не показувати підписників каналу'
Hide Comment Likes: 'Не показувати уподобання коментарів' Hide Comment Likes: 'Не показувати уподобання коментарів'
Hide Recommended Videos: 'Не показувати рекомендовані відео' Hide Recommended Videos: 'Не показувати рекомендовані відео'
Hide Trending Videos: 'Не показувати тренди відео' Hide Trending Videos: 'Не показувати тренди відео'
Hide Popular Videos: 'Не показувати популярні відео' Hide Popular Videos: 'Не показувати популярні відео'
Hide Live Chat: 'Не показувати живий чат' Hide Live Chat: 'Не показувати живий чат'
Hide Active Subscriptions: Сховати активні підписки
Hide Playlists: Сховати списки відтворення
Data Settings: Data Settings:
Data Settings: 'Налаштування даних' Data Settings: 'Налаштування даних'
Select Import Type: 'Оберіть тип імпорту' Select Import Type: 'Оберіть тип імпорту'
@ -220,28 +236,35 @@ Settings:
Import FreeTube: 'Імпортувати FreeTube' Import FreeTube: 'Імпортувати FreeTube'
Import YouTube: 'Імпортувати YouTube' Import YouTube: 'Імпортувати YouTube'
Import NewPipe: 'Імпортувати NewPipe' Import NewPipe: 'Імпортувати NewPipe'
Check for Legacy Subscriptions: '' Check for Legacy Subscriptions: 'Перевірка наявності застарілих підписок'
Export Subscriptions: 'Експортувати підписки' Export Subscriptions: 'Експортувати підписки'
Export FreeTube: 'Експортувати FreeTube' Export FreeTube: 'Експортувати FreeTube'
Export YouTube: 'Експортувати YouTube' Export YouTube: 'Експортувати YouTube'
Export NewPipe: 'Експортувати NewPipe' Export NewPipe: 'Експортувати NewPipe'
Import History: 'Імпортувати історію' Import History: 'Імпортувати історію'
Export History: 'Експортувати історію' Export History: 'Експортувати історію'
Profile object has insufficient data, skipping item: '' Profile object has insufficient data, skipping item: 'Об’єкт профілю має недостатньо
All subscriptions and profiles have been successfully imported: '' даних, пропуск елемента'
All subscriptions have been successfully imported: '' All subscriptions and profiles have been successfully imported: 'Усі підписки
One or more subscriptions were unable to be imported: '' та профілі успішно імпортовано'
Invalid subscriptions file: '' All subscriptions have been successfully imported: 'Усі підписки успішно імпортовано'
This might take a while, please wait: '' One or more subscriptions were unable to be imported: 'Не вдалося імпортувати
Invalid history file: '' одну або кілька підписок'
Subscriptions have been successfully exported: '' Invalid subscriptions file: 'Недійсний файл підписок'
History object has insufficient data, skipping item: '' This might take a while, please wait: 'Це може тривати деякий час, зачекайте'
All watched history has been successfully imported: '' Invalid history file: 'Недійсний файл історії'
All watched history has been successfully exported: '' Subscriptions have been successfully exported: 'Підписки успішно експортовано'
Unable to read file: '' History object has insufficient data, skipping item: 'У об’єкта історії недостатньо
Unable to write file: '' даних, пропуск елемента'
Unknown data key: '' All watched history has been successfully imported: 'Всю історію переглядів успішно
How do I import my subscriptions?: '' імпортовано'
All watched history has been successfully exported: 'Всю історію переглядів успішно
експортовано'
Unable to read file: 'Не вдалося прочитати файл'
Unable to write file: 'Не вдалося записати файл'
Unknown data key: 'Невідомий ключ даних'
How do I import my subscriptions?: 'Як імпортувати свої підписки?'
Manage Subscriptions: Керування підписками
Advanced Settings: Advanced Settings:
Advanced Settings: '' Advanced Settings: ''
Enable Debug Mode (Prints data to the console): '' Enable Debug Mode (Prints data to the console): ''
@ -264,9 +287,25 @@ Settings:
#& Yes #& Yes
#& No #& No
Proxy Settings:
Error getting network information. Is your proxy configured properly?: Помилка
отримання відомостей про мережу. Чи правильно налаштовано ваш проксі?
City: Місто
Region: Регіон
Country: Країна
Ip: IP
Your Info: Ваші дані
Test Proxy: Перевірка проксі
Clicking on Test Proxy will send a request to: Натискання кнопки Перевірити проксі
надішле запит
Proxy Port Number: Номер порту проксі
Proxy Host: Проксі-вузол
Proxy Protocol: Проксі-протокол
Enable Tor / Proxy: Увімкнути Tor / Проксі
Proxy Settings: Налаштування проксі
About: About:
#On About page #On About page
About: '' About: 'Про'
#& About #& About
'This software is FOSS and released under the GNU Affero General Public License v3.0.': '' 'This software is FOSS and released under the GNU Affero General Public License v3.0.': ''
@ -286,248 +325,323 @@ About:
Latest FreeTube News: '' Latest FreeTube News: ''
Donate: Підтримати
these people and projects: цим людям та проєктам
FreeTube is made possible by: FreeTube доступний завдяки
Credits: Про авторів
Translate: Перекласти
room rules: правила кімнати
Please read the: Будь ласка, прочитайте
Chat on Matrix: Чат у Matrix
Mastodon: Mastodon
Email: Електронна пошта
Blog: Блог
Website: Вебсайт
Please check for duplicates before posting: Будь ласка, перевірте наявність повторів
перед публікацією
GitHub issues: Проблеми на GitHub
Report a problem: Повідомити про проблему
FAQ: ЧаПи
FreeTube Wiki: Вікі FreeTube
Help: Довідка
GitHub releases: Випуски GitHub
Downloads / Changelog: Завантаження / Журнал змін
View License: Переглянути ліцензію
Licensed under the AGPLv3: Ліцензовано під AGPLv3
Source code: Джерельний код
Beta: Бета
Profile: Profile:
Profile Select: '' Profile Select: 'Вибір профілю'
All Channels: '' All Channels: 'Усі канали'
Profile Manager: '' Profile Manager: 'Керування профілями'
Create New Profile: '' Create New Profile: 'Створити новий профіль'
Edit Profile: '' Edit Profile: 'Редагувати профіль'
Color Picker: '' Color Picker: 'Вибір кольору'
Custom Color: '' Custom Color: 'Власний колір'
Profile Preview: '' Profile Preview: 'Попередній перегляд профілю'
Create Profile: '' Create Profile: 'Створити профіль'
Update Profile: '' Update Profile: 'Оновити профіль'
Make Default Profile: '' Make Default Profile: 'Зробити профіль типовим'
Delete Profile: '' Delete Profile: 'Видалити профіль'
Are you sure you want to delete this profile?: '' Are you sure you want to delete this profile?: 'Справді видалити цей профіль?'
All subscriptions will also be deleted.: '' All subscriptions will also be deleted.: 'Усі підписки також буде видалено.'
Profile could not be found: '' Profile could not be found: 'Не вдалося знайти профіль'
Your profile name cannot be empty: '' Your profile name cannot be empty: 'Ім''я профілю не може бути порожнім'
Profile has been created: '' Profile has been created: 'Профіль створено'
Profile has been updated: '' Profile has been updated: 'Профіль оновлено'
Your default profile has been set to $: '' Your default profile has been set to $: 'Типовим профілем встановлено $'
Removed $ from your profiles: '' Removed $ from your profiles: '$ вилучено з профілів'
Your default profile has been changed to your primary profile: '' Your default profile has been changed to your primary profile: 'Ваш типовий профіль
$ is now the active profile: '' змінено на основний'
Subscription List: '' $ is now the active profile: '$ активний профіль зараз'
Other Channels: '' Subscription List: 'Підписки'
$ selected: '' Other Channels: 'Інші канали'
Select All: '' $ selected: '$ вибрано'
Select None: '' Select All: 'Вибрати все'
Delete Selected: '' Select None: 'Нічого не вибрано'
Add Selected To Profile: '' Delete Selected: 'Видалити вибране'
No channel(s) have been selected: '' Add Selected To Profile: 'Додати вибране до профілю'
No channel(s) have been selected: 'Не вибрано жодного каналу'
? This is your primary profile. Are you sure you want to delete the selected channels? The ? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in. same channels will be deleted in any profile they are found in.
: '' : 'Це ваш основний профіль. Ви впевнені, що хочете видалити вибрані канали? Ті ж
Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: '' канали буде видалені в будь-якому профілі, в якому вони перебувають.'
Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: 'Дійсно
бажаєте видалити вибрані канали? Канал не буде видалено з будь-якого іншого профілю.'
#On Channel Page #On Channel Page
Profile Filter: Фільтр профілю
Channel: Channel:
Subscriber: '' Subscriber: 'Підписник'
Subscribers: '' Subscribers: 'Підписники'
Subscribe: '' Subscribe: 'Підписатися'
Unsubscribe: '' Unsubscribe: 'Відписатися'
Channel has been removed from your subscriptions: '' Channel has been removed from your subscriptions: 'Канал прибрано з ваших підписок'
Removed subscription from $ other channel(s): '' Removed subscription from $ other channel(s): 'Вилучено підписку з $ інших каналів'
Added channel to your subscriptions: '' Added channel to your subscriptions: 'Додано канал до підписок'
Search Channel: '' Search Channel: 'Шукати на каналі'
Your search results have returned 0 results: '' Your search results have returned 0 results: 'Пошук дав 0 результатів'
Sort By: '' Sort By: 'Сортувати за'
Videos: Videos:
Videos: '' Videos: 'Відео'
This channel does not currently have any videos: '' This channel does not currently have any videos: 'Наразі на цьому каналі немає
жодного відео'
Sort Types: Sort Types:
Newest: '' Newest: 'Найновіші'
Oldest: '' Oldest: 'Найдавніші'
Most Popular: '' Most Popular: 'Найпопулярніші'
Playlists: Playlists:
Playlists: '' Playlists: 'Списки відтворення'
This channel does not currently have any playlists: '' This channel does not currently have any playlists: 'Цей канал наразі не має списків
відтворення'
Sort Types: Sort Types:
Last Video Added: '' Last Video Added: 'Останнє додане відео'
Newest: '' Newest: 'Найновіші'
Oldest: '' Oldest: 'Найдавніші'
About: About:
About: '' About: 'Про'
Channel Description: '' Channel Description: 'Опис каналу'
Featured Channels: '' Featured Channels: 'Рекомендовані канали'
Video: Video:
Mark As Watched: '' Mark As Watched: 'Позначити переглянутим'
Remove From History: '' Remove From History: 'Прибрати з історії'
Video has been marked as watched: '' Video has been marked as watched: 'Відео позначено переглянутим'
Video has been removed from your history: '' Video has been removed from your history: 'Відео вилучено з історії'
Open in YouTube: '' Open in YouTube: 'Відкрити в YouTube'
Copy YouTube Link: '' Copy YouTube Link: 'Копіювати посилання youTube'
Open YouTube Embedded Player: '' Open YouTube Embedded Player: 'Відкрити вбудований програвач YouTube'
Copy YouTube Embedded Player Link: '' Copy YouTube Embedded Player Link: 'Копіювати посилання вбудованого програвача YouTube'
Open in Invidious: '' Open in Invidious: 'Відкрито в Invidious'
Copy Invidious Link: '' Copy Invidious Link: 'Копіювати посилання Invidious'
Open Channel in YouTube: '' Open Channel in YouTube: 'Відкрити канал на YouTube'
Copy YouTube Channel Link: '' Copy YouTube Channel Link: 'Копіювати посилання на канал YouTube'
Open Channel in Invidious: '' Open Channel in Invidious: 'Відкрити канал у Invidious'
Copy Invidious Channel Link: '' Copy Invidious Channel Link: 'Копіювати посилання на канал Invidious'
View: '' View: 'Перегляд'
Views: '' Views: 'Перегляди'
Loop Playlist: '' Loop Playlist: 'Циклічний список відтворення'
Shuffle Playlist: '' Shuffle Playlist: 'Перемішати список відтворення'
Reverse Playlist: '' Reverse Playlist: 'Змінити напрямок списку відтворення'
Play Next Video: '' Play Next Video: 'Відтворити наступне відео'
Play Previous Video: '' Play Previous Video: 'Відтворити попереднє відео'
# Context is "X People Watching" # Context is "X People Watching"
Watching: '' Watching: 'Переглядає'
Watched: '' Watched: 'Переглянуто'
Autoplay: '' Autoplay: 'Автовідтворення'
Starting soon, please refresh the page to check again: '' Starting soon, please refresh the page to check again: 'Початок незабаром, оновіть
сторінку, щоб перевірити ще раз'
# As in a Live Video # As in a Live Video
Live: '' Live: 'Наживо'
Live Now: '' Live Now: 'Зараз в етері'
Live Chat: '' Live Chat: 'Чат в режимі реального часу'
Enable Live Chat: '' Enable Live Chat: 'Увімкнути чат у реальному часі'
Live Chat is currently not supported in this build.: '' Live Chat is currently not supported in this build.: 'Чат в режимі реального часу
'Chat is disabled or the Live Stream has ended.': '' наразі не підтримується в цій збірці.'
Live chat is enabled. Chat messages will appear here once sent.: '' 'Chat is disabled or the Live Stream has ended.': 'Чат вимкнено, а пряму трансляцію
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': '' завершено.'
Download Video: '' Live chat is enabled. Chat messages will appear here once sent.: 'Чат увімкнено. Повідомлення
video only: '' чату з''являться тут після надсилання.'
audio only: '' 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'Чат
в режимі реального часу наразі не підтримується API Invidious. Потрібне пряме
з''єднання з YouTube.'
Download Video: 'Завантажити відео'
video only: 'лише відео'
audio only: 'лише звук'
Audio: Audio:
Low: '' Low: 'Низька'
Medium: '' Medium: 'Середня'
High: '' High: 'Висока'
Best: '' Best: 'Найкраща'
Published: Published:
Jan: '' Jan: 'Ян'
Feb: '' Feb: 'Лют'
Mar: '' Mar: 'Бер'
Apr: '' Apr: 'Кві'
May: '' May: 'Тра'
Jun: '' Jun: 'Чер'
Jul: '' Jul: 'Лип'
Aug: '' Aug: 'Сер'
Sep: '' Sep: 'Вер'
Oct: '' Oct: 'Жов'
Nov: '' Nov: 'Лис'
Dec: '' Dec: 'Гру'
Second: '' Second: 'Секунда'
Seconds: '' Seconds: 'Секунд'
Minute: '' Minute: 'Хвилина'
Minutes: '' Minutes: 'Хвилин'
Hour: '' Hour: 'Година'
Hours: '' Hours: 'Годин'
Day: '' Day: 'День'
Days: '' Days: 'Днів'
Week: '' Week: 'Тиждень'
Weeks: '' Weeks: 'Тижнів'
Month: '' Month: 'Місяць'
Months: '' Months: 'Місяців'
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: '$ % тому'
#& Videos #& Videos
Started streaming 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:
Newest: '' Newest: 'Найновіші'
Oldest: '' Oldest: 'Найдавніші'
#& Most Popular #& Most Popular
#& Playlists #& Playlists
Playlist: Playlist:
#& About #& About
View Full Playlist: '' View Full Playlist: 'Переглянути повний список відтворення'
Videos: '' Videos: 'Відео'
View: '' View: 'Перегляд'
Views: '' Views: 'Переглядів'
Last Updated On: '' Last Updated On: 'Востаннє оновлено'
Share Playlist: Share Playlist:
Share Playlist: '' Share Playlist: 'Поділитися списком відтворення'
Copy YouTube Link: '' Copy YouTube Link: 'Копіювати посилання youTube'
Open in YouTube: '' Open in YouTube: 'Відкрити в YouTube'
Copy Invidious Link: '' Copy Invidious Link: 'Копіювати посилання Invidious'
Open in Invidious: '' Open in Invidious: 'Відкрити в Invidious'
# On Video Watch Page # On Video Watch Page
#* Published #* Published
#& Views #& Views
Toggle Theatre Mode: '' Toggle Theatre Mode: 'Перемкнути режим театру'
Change Format: Change Format:
Change Video Formats: '' Change Video Formats: 'Зміна форматів відео'
Use Dash Formats: '' Use Dash Formats: 'Використовувати формати Dash'
Use Legacy Formats: '' Use Legacy Formats: 'Використовувати застарілі формати'
Use Audio Formats: '' Use Audio Formats: 'Використовувати аудіоформати'
Dash formats are not available for this video: '' Dash formats are not available for this video: 'Формати Dash недоступні для цього
Audio formats are not available for this video: '' відео'
Audio formats are not available for this video: 'Аудіоформати недоступні для цього
відео'
Share: Share:
Share Video: '' Share Video: 'Поділитися відео'
Include Timestamp: '' Include Timestamp: 'Включити позначку часу'
Copy Link: '' Copy Link: 'Копіювати посилання'
Open Link: '' Open Link: 'Відкрити посилання'
Copy Embed: '' Copy Embed: 'Копіювати вбудоване'
Open Embed: '' Open Embed: 'Відкрити вбудовуване'
# On Click # On Click
Invidious URL copied to clipboard: '' Invidious URL copied to clipboard: 'URL-адресу Invidious скопійовано в буфер обміну'
Invidious Embed URL copied to clipboard: '' Invidious Embed URL copied to clipboard: 'URL-адресу вбудовування Invidious скопійовано
Invidious Channel URL copied to clipboard: '' до буфера обміну'
YouTube URL copied to clipboard: '' Invidious Channel URL copied to clipboard: 'URL-адресу каналу Invidious скопійовано
YouTube Embed URL copied to clipboard: '' в буфер обміну'
YouTube Channel URL copied to clipboard: '' YouTube URL copied to clipboard: 'URL-адресу YouTube скопійовано до буфера обміну'
YouTube Embed URL copied to clipboard: 'URL-адресу вбудовування YouTube скопійовано
до буфера обміну'
YouTube Channel URL copied to clipboard: 'URL-адресу каналу YouTube скопійовано
до буфера обміну'
Mini Player: '' Mini Player: 'Мініпрогравач'
Comments: Comments:
Comments: '' Comments: 'Коментарі'
Click to View Comments: '' Click to View Comments: 'Клацніть, щоб переглянути коментарі'
Getting comment replies, please wait: '' Getting comment replies, please wait: 'Отримання відповідей на коментарі, зачекайте'
There are no more comments for this video: '' There are no more comments for this video: 'Більше немає коментарів до цього відео'
Show Comments: '' Show Comments: 'Показати коментарі'
Hide Comments: '' Hide Comments: 'Сховати коментарі'
Sort by: '' Sort by: 'Сортувати за'
Top comments: '' Top comments: 'Найпопулярніші коментарі'
Newest first: '' Newest first: 'Спочатку новіші'
# Context: View 10 Replies, View 1 Reply # Context: View 10 Replies, View 1 Reply
View: '' View: 'Перегляд'
Hide: '' Hide: 'Сховати'
Replies: '' Replies: 'Відповіді'
Reply: '' Reply: 'Відповідь'
There are no comments available for this video: '' There are no comments available for this video: 'Немає коментарів до цього відео'
Load More Comments: '' Load More Comments: 'Завантажити більше коментарів'
No more comments available: '' No more comments available: 'Більше немає коментарів'
Up Next: '' Up Next: 'Далі вгору'
#Tooltips #Tooltips
Tooltips: Tooltips:
General Settings: General Settings:
Preferred API Backend: '' Preferred API Backend: 'Виберіть сервер, який FreeTube використовує для отримання
Fallback to Non-Preferred Backend on Failure: '' даних. Локальний API є вбудованим витягувачем. Для API Invidious потрібен сервер
Thumbnail Preference: '' Invidious для з'' єднання.'
Invidious Instance: '' Fallback to Non-Preferred Backend on Failure: 'Коли бажаний API має проблеми,
Region for Trending: '' FreeTube автоматично спробує використовувати ваш не вибраний API як запасний
метод, коли його увімкнено'
Thumbnail Preference: 'Усі ескізи у FreeTube заміняться на кадр відео, а не на
типову мініатюру'
Invidious Instance: 'Сервер Invidious, до якого FreeTube під''єднуватиметься для
викликів API. Очистьте поточний сервер, щоб побачити список загальнодоступних
серверів на вибір'
Region for Trending: 'Регіон популярного дозволяє вам вибрати популярні відео
країни, які ви хочете бачити. Не всі показані країни насправді підтримуються
YouTube'
Player Settings: Player Settings:
Force Local Backend for Legacy Formats: '' Force Local Backend for Legacy Formats: 'Працює, лише якщо API Invidious використовується
Proxy Videos Through Invidious: '' типовим. Якщо увімкнено, локальний API буде запущено і використовуватиме застарілі
Default Video Format: '' формати, які було повернуто Invidious. Допомагає, коли відео, повернуті Invidious,
не відтворюються через обмеження в країні'
Proxy Videos Through Invidious: 'Під’єднається до Invidious, щоб дивитися відео,
а не встановлювати пряме з’єднання з YouTube. Замінює налаштування API'
Default Video Format: 'Встановіть формати, що використовуються під час відтворення
відео. Формати Dash можуть відтворюватися в кращій якості. Старі формати мають
обмеження у 720p, але використовують меншу пропускну здатність. Формати аудіо
— це лише аудіопотоки'
Subscription Settings: Subscription Settings:
Fetch Feeds from RSS: '' Fetch Feeds from RSS: 'Якщо ввімкнено, FreeTube використовуватиме RSS замість
стандартного способу захоплення каналу підписки. RSS швидше і запобігає блокуванню
ІР, але не надає дані, як-от тривалість відео або стан трансляції'
# Toast Messages # Toast Messages
Local API Error (Click to copy): '' Local API Error (Click to copy): 'Помилка локального API (натисніть, щоб скопіювати)'
Invidious API Error (Click to copy): '' Invidious API Error (Click to copy): 'Помилка Invidious API (натисніть, щоб скопіювати)'
Falling back to Invidious API: '' Falling back to Invidious API: 'Повернення до API Invidious'
Falling back to the local API: '' Falling back to the local API: 'Повернення до локального API'
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.: 'Це
Subscriptions have not yet been implemented: '' відео недоступне через відсутність форматів. Це може статися через недоступність
Loop is now disabled: '' країни.'
Loop is now enabled: '' Subscriptions have not yet been implemented: 'Підписки ще не впроваджено'
Shuffle is now disabled: '' Loop is now disabled: 'Цикл вимкнено'
Shuffle is now enabled: '' Loop is now enabled: 'Цикл увімкнено'
The playlist has been reversed: '' Shuffle is now disabled: 'Випадковий порядок вимкнено'
Playing Next Video: '' Shuffle is now enabled: 'Випадковий порядок увімкнено'
Playing Previous Video: '' The playlist has been reversed: 'Список відтворення обернено'
Playing next video in 5 seconds. Click to cancel: '' Playing Next Video: 'Відтворення наступного відео'
Canceled next video autoplay: '' Playing Previous Video: 'Відтворення попереднього відео'
'The playlist has ended. Enable loop to continue playing': '' Playing next video in 5 seconds. Click to cancel: 'Відтворення наступного відео за
5 секунд. Клацніть, щоб скасувати операцію.'
Canceled next video autoplay: 'Скасовано автовідтворення наступного відео'
'The playlist has ended. Enable loop to continue playing': 'Список відтворення закінчився.
Увімкніть цикл, щоб продовжити відтворення'
Yes: '' Yes: 'Так'
No: '' No: 'Ні'
Playing Next Video Interval: Відтворення наступного відео в будь-який час. Клацніть,
щоб скасувати. | Відтворення наступного відео через {nextVideoInterval} секунду.
Клацніть, щоб скасувати. | Відтворення наступного відео через {nextVideoInterval}
секунд. Клацніть, щоб скасувати.
More: Докладніше

View File

@ -1,51 +1,51 @@
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: '檔案'
Quit: '結束' Quit: '結束'
Edit: '編輯' Edit: '編輯'
Undo: '復原' Undo: '復原'
Redo: '復' Redo: '復'
Cut: '剪下' Cut: '剪下'
Copy: '複製' Copy: '複製'
Paste: '貼' Paste: ''
Delete: '刪除' 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: '縮小'
Toggle fullscreen: '切換全屏' Toggle fullscreen: '切換至全螢幕'
Window: '視窗' Window: '視窗'
Minimize: '最小化' Minimize: '最小化'
Close: '關閉' Close: '關閉'
Back: '后退' Back: '返回'
Forward: '前進' Forward: '前進'
# Search Bar # Search Bar
Search / Go to URL: '搜索 / 前往URL' Search / Go to URL: '搜尋/ 前往網址'
# In Filter Button # In Filter Button
Search Filters: Search Filters:
Search Filters: '搜索過濾' Search Filters: '搜尋過濾器'
Sort By: Sort By:
Sort By: '排序方式' Sort By: '排序方式'
Most Relevant: '最相關' Most Relevant: '最相關'
Rating: '評分' Rating: '評分'
Upload Date: '上傳日期' Upload Date: '上傳日期'
View Count: '觀看' View Count: '觀看數'
Time: Time:
Time: '時間' Time: '時間'
Any Time: '任何時間' Any Time: '任何時間'
Last Hour: '一小時' Last Hour: '最近一小時'
Today: '今天' Today: '今天'
This Week: '本周' This Week: '本周'
This Month: '本月' This Month: '本月'
This Year: '年' This Year: '年'
Type: Type:
Type: '類別' Type: '類別'
All Types: '所有類別' All Types: '所有類別'
@ -53,13 +53,13 @@ Search Filters:
Channels: '頻道' Channels: '頻道'
#& Playlists #& Playlists
Duration: Duration:
Duration: '時長' Duration: '影片長度'
All Durations: '所有長' All Durations: '所有'
Short (< 4 minutes): '短(< 4分鐘' Short (< 4 minutes): '短(小於4分鐘'
Long (> 20 minutes): '長(> 20分鐘' Long (> 20 minutes): '長(大於20分鐘'
# On Search Page # On Search Page
Search Results: '搜結果' Search Results: '搜結果'
Fetching results. Please wait: '擷取結果中。請稍候' Fetching results. Please wait: '擷取結果中,請稍候...'
Fetch more results: '擷取更多結果' Fetch more results: '擷取更多結果'
# Sidebar # Sidebar
There are no more results for this search: 此搜尋無更多結果 There are no more results for this search: 此搜尋無更多結果
@ -69,48 +69,49 @@ Subscriptions:
Latest Subscriptions: '最新訂閱' Latest Subscriptions: '最新訂閱'
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': '您的訂閱清單目前是空的。在這裡開始添加訂閱。' 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': '您的訂閱清單目前是空的。在這裡開始添加訂閱。'
'Getting Subscriptions. Please wait.': '抓取訂閱中。請稍等。' 'Getting Subscriptions. Please wait.': '抓取訂閱中。請稍等。'
Refresh Subscriptions: 重新整理訂閱 Refresh Subscriptions: 重新整理訂閱內容的影片
Getting Subscriptions. Please wait.: 正在取得訂閱。請稍候。 Getting Subscriptions. Please wait.: 正在取得訂閱中,請稍候....
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: 這個設定檔有大量訂閱。 This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: 這個設定檔有大量訂閱。
強制RSS已防止速率限制 強制RSS已防止速率限制
Load More Videos: 載入更多影片 Load More Videos: 載入更多影片
Trending: '熱門' Trending: '發燒影片'
Most Popular: '最流行' 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: 已儲存的影片為空。點擊影片角落的儲存按鈕以將其列在此處 Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 播放清單的影片是空的。點擊影片角落的星星按鈕以將其列在此處
Playlist Message: 此頁面無法反映完整的播放清單。其僅列出您已儲存或加入最愛的影片。工作完成後,所有目前在此的影片都會轉移到「最愛」播放清單。 Playlist Message: 此頁面無法列出完整的播放清單。其僅列出您已儲存或加入最愛的影片。工作完成後,所有目前在此的影片都會轉移到「最愛」播放清單。
History: History:
# On History Page # On History Page
History: '歷史紀錄' History: '歷史紀錄'
Watch History: '觀看史紀錄' Watch History: '觀看史紀錄'
Your history list is currently empty.: 您的史紀錄清單目前是空的。 Your history list is currently empty.: 您的史紀錄清單目前是空的。
Settings: Settings:
# On Settings Page # On Settings Page
Settings: '設定' Settings: '設定'
General Settings: General Settings:
General Settings: '常規設定' General Settings: '一般設定'
Fallback to Non-Preferred Backend on Failure: '失敗時回撤到非偏好后端' Fallback to Non-Preferred Backend on Failure: '連線失敗時連線到非預設伺服器'
Enable Search Suggestions: '允許搜索建議' Enable Search Suggestions: '啟用搜尋建議'
Default Landing Page: '預設加載頁面' Default Landing Page: '預設加載頁面'
Locale Preference: '地偏好' Locale Preference: '地偏好'
Preferred API Backend: Preferred API Backend:
Preferred API Backend: '偏好API后端' Preferred API Backend: '偏好API伺服器'
Local API: '區域API' Local API: '區域API'
Invidious API: 'Invidious API' Invidious API: 'Invidious API(應用程式介面)'
Video View Type: Video View Type:
Video View Type: '影片觀看類別' Video View Type: '影片觀看類別'
Grid: '網格' Grid: '網格'
List: '清單' List: '清單'
Thumbnail Preference: Thumbnail Preference:
Thumbnail Preference: '圖偏好' Thumbnail Preference: '影片縮圖偏好'
Default: '預設' Default: '預設'
Beginning: '開始' Beginning: '片頭'
Middle: '中間' Middle: '中間'
End: '結尾' End: '結尾'
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious實例預設https://invidious.snopyta.org' 'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious實例(預設為
Region for Trending: '熱門區域' https://invidious.snopyta.org )'
Region for Trending: '發燒影片區域'
#! List countries #! List countries
Check for Latest Blog Posts: 檢查最新的部落格貼文 Check for Latest Blog Posts: 檢查最新的部落格貼文
Check for Updates: 檢查更新 Check for Updates: 檢查更新
@ -141,30 +142,30 @@ Settings:
Amber: '黃褐' Amber: '黃褐'
Orange: '橙' Orange: '橙'
Deep Orange: '深橙' Deep Orange: '深橙'
Secondary Color Theme: '次主題色' Secondary Color Theme: '次主題色'
#* Main Color Theme #* Main Color Theme
UI Scale: UI縮放 UI Scale: UI縮放
Expand Side Bar by Default: 預設展開側邊欄 Expand Side Bar by Default: 預設展開側邊欄
Disable Smooth Scrolling: 禁用平滑捲動 Disable Smooth Scrolling: 禁用平滑捲動
Player Settings: Player Settings:
Player Settings: '播放器選項' Player Settings: '播放器選項'
Force Local Backend for Legacy Formats: '強制區域后端給傳統格式' Force Local Backend for Legacy Formats: '強制使用傳統格式的區域伺服器'
Remember History: '記住曆史' Remember History: '記住曆史'
Play Next Video: '播放下一影片' Play Next Video: '播放下一影片'
Turn on Subtitles by Default: '預設開啟字幕' Turn on Subtitles by Default: '預設開啟字幕'
Autoplay Videos: '自動播放影片' Autoplay Videos: '自動播放影片'
Proxy Videos Through Invidious: '過Invidious代理影片' Proxy Videos Through Invidious: '過Invidious代理影片'
Autoplay Playlists: '自動播放清單' Autoplay Playlists: '自動播放 播放清單'
Enable Theatre Mode by Default: '預設允許劇場型態' Enable Theatre Mode by Default: '預設開啟劇場模式'
Default Volume: '預設音量' Default Volume: '預設音量'
Default Playback Rate: '預設重播速率' Default Playback Rate: '預設播放速度'
Default Video Format: Default Video Format:
Default Video Format: '預設影片格式' Default Video Format: '預設影片格式'
Dash Formats: 'Dash格式' Dash Formats: 'Dash格式'
Legacy Formats: '傳統格式' Legacy Formats: '傳統格式'
Audio Formats: '音訊格式' Audio Formats: '音訊格式'
Default Quality: Default Quality:
Default Quality: '預設質' Default Quality: '預設質'
Auto: '自動' Auto: '自動'
144p: '144p' 144p: '144p'
240p: '240p' 240p: '240p'
@ -211,28 +212,28 @@ Settings:
#& No #& No
Privacy Settings: Privacy Settings:
Watch history has been cleared: 觀看歷史紀錄已清除 Watch history has been cleared: 觀看紀錄已清除
Are you sure you want to remove your entire watch history?: 您確定您想移除您全部的觀看歷史紀錄 Are you sure you want to remove your entire watch history?: 您確定要移除全部的觀看歷史紀錄嗎
Remove Watch History: 移除觀看歷史紀錄 Remove Watch History: 移除觀看歷史紀錄
Search cache has been cleared: 搜尋快取已清除 Search cache has been cleared: 搜尋快取已清除
Are you sure you want to clear out your search cache?: 您確定您想清除您的搜尋快取 Are you sure you want to clear out your search cache?: 您確定要清除搜尋快取嗎
Clear Search Cache: 清除搜尋快取 Clear Search Cache: 清除搜尋快取
Save Watched Progress: 儲存觀看進度 Save Watched Progress: 儲存觀看進度
Remember History: 記住歷史紀錄 Remember History: 儲存歷史紀錄
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: 移除所有訂閱/設定檔
Data Settings: Data Settings:
How do I import my subscriptions?: 我要如何匯入我的訂閱? How do I import my subscriptions?: 我要如何匯入我的訂閱?
Unknown data key: 未知的資料金鑰 Unknown data key: 未知的資料金鑰
Unable to write file: 無法寫入檔案 Unable to write file: 無法寫入檔案
Unable to read file: 無法讀取檔案 Unable to read file: 無法讀取檔案
All watched history has been successfully exported: 所有觀看的曆史紀錄已成功匯出 All watched history has been successfully exported: 所有觀看紀錄已成功匯出
All watched history has been successfully imported: 所有觀看的歷史紀錄已成功匯入 All watched history has been successfully imported: 所有觀看紀錄已成功匯入
History object has insufficient data, skipping item: 歷史紀錄物件資料不足,正在跳過項目 History object has insufficient data, skipping item: 歷史紀錄物件資料不足,正在跳過項目
Subscriptions have been successfully exported: 訂閱已成功匯出 Subscriptions have been successfully exported: 訂閱已成功匯出
Invalid history file: 無效的歷史紀錄檔案 Invalid history file: 無效的歷史紀錄檔案
This might take a while, please wait: 這可能需要一段時間,請稍候 This might take a while, please wait: 這可能需要一段時間,請稍候...
Invalid subscriptions file: 無效的訂閱檔案 Invalid subscriptions file: 無效的訂閱檔案
All subscriptions have been successfully imported: 所有訂閱已成功匯入 All subscriptions have been successfully imported: 所有訂閱已成功匯入
All subscriptions and profiles have been successfully imported: 所有訂閱與設定檔已成功匯入 All subscriptions and profiles have been successfully imported: 所有訂閱與設定檔已成功匯入
@ -250,21 +251,21 @@ Settings:
Select Export Type: 選取匯出類型 Select Export Type: 選取匯出類型
Select Import Type: 選取匯入類型 Select Import Type: 選取匯入類型
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 Video Likes And Dislikes: 隱藏影片喜歡與不喜歡 Hide Video Likes And Dislikes: 隱藏影片喜歡與不喜歡
Distraction Free Settings: 零打擾設定 Distraction Free Settings: 擾設定
Hide Video Views: 隱藏影片觀看 Hide Video Views: 隱藏影片觀看
Hide Popular Videos: 隱藏流行影片 Hide Popular Videos: 隱藏流行影片
Hide Trending Videos: 隱藏熱門影片 Hide Trending Videos: 隱藏熱門影片
Hide Live Chat: 隱藏在線聊天 Hide Live Chat: 隱藏直播聊天室
Hide Comment Likes: 隱藏評論點讚 Hide Comment Likes: 隱藏留言的按讚數量
Hide Recommended Videos: 隱藏推薦影片 Hide Recommended Videos: 隱藏推薦影片
Hide Channel Subscribers: 隱藏頻道訂閱者 Hide Channel Subscribers: 隱藏頻道訂閱者
Hide Active Subscriptions: 隱藏作用中的訂閱 Hide Active Subscriptions: 隱藏作用中的訂閱
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:
Error getting network information. Is your proxy configured properly?: 取得網路資訊時發生錯誤。您的代理伺服器設定正確嗎? Error getting network information. Is your proxy configured properly?: 取得網路資訊時發生錯誤。您的代理伺服器設定正確嗎?
City: 城市 City: 城市
@ -310,7 +311,7 @@ About:
Release Notes: 版本註記 Release Notes: 版本註記
Blog: 部落格 Blog: 部落格
Credits: 貢獻者 Credits: 貢獻者
FAQ: FAQ FAQ: 常見問題
Wiki: Wiki Wiki: Wiki
Report an Issue: 回報問題 Report an Issue: 回報問題
Channel Rules: 頻道規則 Channel Rules: 頻道規則
@ -322,16 +323,16 @@ About:
Help: 說明 Help: 說明
Contact: 聯絡 Contact: 聯絡
these people and projects: 這些人與專案 these people and projects: 這些人與專案
FreeTube is made possible by: FreeTube 被做出來是因為 FreeTube is made possible by: FreeTube 誕生都要感謝這些人
Translate: 翻譯 Translate: 翻譯
room rules: 聊天室規則 room rules: 聊天室規則
Please read the: 請閱讀 Please read the: 請閱讀
Chat on Matrix: 在 Matrix 上聊天 Chat on Matrix: 在 Matrix 上聊天
Mastodon: Mastodon Mastodon: Mastodon
Please check for duplicates before posting: 張貼前請檢查有無重複 Please check for duplicates before posting: 提交前請檢查有無重複的問題
GitHub issues: GitHub 議題 GitHub issues: GitHub 問題追蹤器
Report a problem: 回報問題 Report a problem: 回報問題
FreeTube Wiki: FreeTube Wiki FreeTube Wiki: FreeTube 維基百科
GitHub releases: GitHub 版本 GitHub releases: GitHub 版本
Downloads / Changelog: 下載 / 變更紀錄 Downloads / Changelog: 下載 / 變更紀錄
View License: 檢視授權條款 View License: 檢視授權條款
@ -342,23 +343,23 @@ Channel:
Subscribers: '訂閱者' Subscribers: '訂閱者'
Subscribe: '訂閱' Subscribe: '訂閱'
Unsubscribe: '取消訂閱' Unsubscribe: '取消訂閱'
Search Channel: '搜頻道' Search Channel: '搜頻道'
Your search results have returned 0 results: '您的搜索結果是0結果' Your search results have returned 0 results: '搜尋結果為零'
Sort By: '排序方式' Sort By: '排序方式'
Videos: Videos:
Videos: '影片' Videos: '影片'
This channel does not currently have any videos: '這個頻道目前沒有任何影片' This channel does not currently have any videos: '這個頻道目前沒有任何影片'
Sort Types: Sort Types:
Newest: '最新' Newest: '最新'
Oldest: '最' Oldest: '最'
Most Popular: '最流行' Most Popular: '最熱門'
Playlists: Playlists:
Playlists: '播放清單' Playlists: '播放清單'
This channel does not currently have any playlists: '這個頻道目前沒有任何播放清單' This channel does not currently have any playlists: '這個頻道目前沒有任何播放清單'
Sort Types: Sort Types:
Last Video Added: '最新添加的影片' Last Video Added: '最新上傳的影片'
Newest: '最新' Newest: '最新'
Oldest: '最' Oldest: '最'
About: About:
About: '關於' About: '關於'
Channel Description: '頻道說明' Channel Description: '頻道說明'
@ -368,11 +369,11 @@ Channel:
Channel has been removed from your subscriptions: 頻道已從您的訂閱中移除 Channel has been removed from your subscriptions: 頻道已從您的訂閱中移除
Video: Video:
Open in YouTube: '在YouTube中開啟' Open in YouTube: '在YouTube中開啟'
Copy YouTube Link: '複製YouTube結' Copy YouTube Link: '複製YouTube結'
Open YouTube Embedded Player: '開啟YouTube內嵌播放器' Open YouTube Embedded Player: '開啟YouTube內嵌播放器'
Copy YouTube Embedded Player Link: '複製YouTube內嵌播放器結' Copy YouTube Embedded Player Link: '複製YouTube內嵌播放器結'
Open in Invidious: '在Invidious中開啟' Open in Invidious: '在Invidious中開啟'
Copy Invidious Link: '複製Invidious結' Copy Invidious Link: '複製Invidious結'
View: '觀看' View: '觀看'
Views: '觀看' Views: '觀看'
# Context is "X People Watching" # Context is "X People Watching"
@ -381,12 +382,12 @@ Video:
# As in a Live Video # As in a Live Video
Live: '直播' Live: '直播'
Live Now: '現在直播' Live Now: '現在直播'
Live Chat: '在線聊天' Live Chat: '直播聊天室'
Enable Live Chat: '允許在線聊天' Enable Live Chat: '啟用直播聊天室'
Live Chat is currently not supported in this build.: '在線聊天在此版本中目前不被支援。' Live Chat is currently not supported in this build.: '直播聊天室在此版本中目前不被支援。'
'Chat is disabled or the Live Stream has ended.': '聊天被禁用或者在線直播已結束。' 'Chat is disabled or the Live Stream has ended.': '直播聊天室功能被禁用或者直播已結束。'
Live chat is enabled. Chat messages will appear here once sent.: '在線聊天結束。 聊天資訊一旦傳送將出現在這裡。' Live chat is enabled. Chat messages will appear here once sent.: '直播聊天結束。 聊天訊息一旦傳送將出現在這裡。'
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': '在線聊天目前不被Invidious 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': '直播聊天室目前不被Invidious
API支援。 需要直接連線YouTube。' API支援。 需要直接連線YouTube。'
Published: Published:
Jan: '一月' Jan: '一月'
@ -414,24 +415,24 @@ Video:
Year: '年' Year: '年'
Years: '年' Years: '年'
Ago: '前' Ago: '前'
Upcoming: '首於' Upcoming: '首於'
Minutes: 分鐘 Minutes: 分鐘
Minute: 分鐘 Minute: 分鐘
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: '$ %前'
#& Videos #& Videos
Video has been removed from your history: 影片已從您的史紀錄中移除 Video has been removed from your history: 影片已從您的史紀錄中移除
Video has been marked as watched: 影片已記號為已觀看 Video has been marked as watched: 影片標記為已觀看
Remove From History: 史紀錄中移除 Remove From History: 史紀錄中移除
Mark As Watched: 為已觀看 Mark As Watched: 記為已觀看
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:
Best: 最佳 Best: 最佳
High: High:
@ -444,16 +445,16 @@ Video:
Open Channel in Invidious: 在Invidious開啟頻道 Open Channel in Invidious: 在Invidious開啟頻道
Copy YouTube Channel Link: 複製YouTube頻道連結 Copy YouTube Channel Link: 複製YouTube頻道連結
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 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:
Newest: '最新' Newest: '最新'
Oldest: '最' Oldest: '最'
#& Most Popular #& Most Popular
#& Playlists #& Playlists
Playlist: Playlist:
@ -462,20 +463,20 @@ Playlist:
Videos: '影片' Videos: '影片'
View: '觀看' View: '觀看'
Views: '觀看' Views: '觀看'
Last Updated On: '最更新於' Last Updated On: '最更新於'
Share Playlist: Share Playlist:
Share Playlist: '分享播放清單' Share Playlist: '分享播放清單'
Copy YouTube Link: '複製YouTube結' Copy YouTube Link: '複製YouTube結'
Open in YouTube: '在YouTube中開啟' Open in YouTube: '在YouTube中開啟'
Copy Invidious Link: '複製Invidious結' Copy Invidious Link: '複製Invidious結'
Open in Invidious: '在Invidious中開啟' Open in Invidious: '在Invidious中開啟'
# On Video Watch Page # On Video Watch Page
#* Published #* Published
#& Views #& Views
Toggle Theatre Mode: '切換劇場型態' Toggle Theatre Mode: '切換為劇院模式'
Change Format: Change Format:
Change Video Formats: '影片格式' Change Video Formats: '更影片格式'
Use Dash Formats: '使用Dash格式' Use Dash Formats: '使用Dash格式'
Use Legacy Formats: '使用傳統格式' Use Legacy Formats: '使用傳統格式'
Use Audio Formats: '使用音訊格式' Use Audio Formats: '使用音訊格式'
@ -483,8 +484,8 @@ Change Format:
Dash formats are not available for this video: 這個影片沒有Dash格式 Dash formats are not available for this video: 這個影片沒有Dash格式
Share: Share:
Share Video: '分享影片' Share Video: '分享影片'
Copy Link: '複製結' Copy Link: '複製結'
Open Link: '開啟結' Open Link: '開啟結'
Copy Embed: '複製內嵌' Copy Embed: '複製內嵌'
Open Embed: '開啟內嵌' Open Embed: '開啟內嵌'
# On Click # On Click
@ -497,24 +498,24 @@ Share:
Invidious Channel URL copied to clipboard: Invidious頻道URL已複製到剪貼簿 Invidious Channel URL copied to clipboard: Invidious頻道URL已複製到剪貼簿
Mini Player: '迷你播放器' Mini Player: '迷你播放器'
Comments: Comments:
Comments: '評論' Comments: '留言'
Click to View Comments: '點擊觀看評論' Click to View Comments: '點擊查看留言'
Getting comment replies, please wait: '抓取評論中,請稍候' Getting comment replies, please wait: '獲取留言中,請稍候...'
Show Comments: '察看評論' Show Comments: '查看留言'
Hide Comments: '隱藏評論' Hide Comments: '隱藏留言'
# Context: View 10 Replies, View 1 Reply # Context: View 10 Replies, View 1 Reply
View: '觀看' View: '觀看'
Hide: '隱藏' Hide: '隱藏'
Replies: '回覆' Replies: '回覆'
Reply: '回覆' Reply: '回覆'
There are no comments available for this video: '這個影片沒有評論' There are no comments available for this video: '這個影片沒有留言'
Load More Comments: '加載更多評論' Load More Comments: '載入更多留言'
There are no more comments for this video: 此影片無更多評論 There are no more comments for this video: 此影片無更多留言
Newest first: 最新優先 Newest first: 最新優先
Top comments: 最熱評論 Top comments: 最熱門留言
Sort by: 排序方式 Sort by: 排序方式
No more comments available: 沒有更多評論 No more comments available: 沒有更多留言
Up Next: 'Up Next' Up Next: '觀看其他類似影片'
# Toast Messages # Toast Messages
Local API Error (Click to copy): '區域API錯誤點擊複製' Local API Error (Click to copy): '區域API錯誤點擊複製'
@ -523,18 +524,18 @@ 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: '將播放下一影片'
Playing Previous Video: '將播放上一影片' Playing Previous Video: '將播放上一影片'
Playing next video in 5 seconds. Click to cancel: '下一影片將在5秒后播放。點擊取消。' Playing next video in 5 seconds. Click to cancel: '下一部影片將在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: '否'
Locale Name: 正體中文 Locale Name: 繁體(正體)中文
Profile: Profile:
$ is now the active profile: $現在是作用中的設定檔 $ is now the active profile: $現在是作用中的設定檔
Your default profile has been changed to your primary profile: 您的預設設定檔已變更為您的主要設定檔 Your default profile has been changed to your primary profile: 您的預設設定檔已變更為您的主要設定檔
@ -562,7 +563,7 @@ Profile:
這不會從其他設定檔中移除頻道。 這不會從其他設定檔中移除頻道。
? This is your primary profile. Are you sure you want to delete the selected channels? The ? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in. same channels will be deleted in any profile they are found in.
: 這是您的主設定檔。 您確定您想移除選取的頻道? 相同的頻道中任何找到的設定檔會被移除。 : 這是您的主要設定檔。 您確定要移除選取的頻道? 相同的頻道中任何找到的設定檔會被移除。
No channel(s) have been selected: 無頻道已選取 No channel(s) have been selected: 無頻道已選取
Add Selected To Profile: 添加選取的到設定檔 Add Selected To Profile: 添加選取的到設定檔
Delete Selected: 移除選取的 Delete Selected: 移除選取的
@ -574,7 +575,7 @@ Profile:
The playlist has been reversed: 播放清單已反轉 The playlist has been reversed: 播放清單已反轉
A new blog is now available, $. Click to view more: 已有新的部落格文章,$。點擊以檢視更多 A new blog is now available, $. Click to view more: 已有新的部落格文章,$。點擊以檢視更多
Download From Site: 從網站下載 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:
Subscription Settings: Subscription Settings:
@ -582,13 +583,13 @@ Tooltips:
Player Settings: Player Settings:
Default Video Format: 設定要用於影片播放的格式。Dash格式有更高的品質。傳統格式會限制在 720p但頻寬需求更低。音訊格式為僅有音訊的串流 Default Video Format: 設定要用於影片播放的格式。Dash格式有更高的品質。傳統格式會限制在 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回傳的影片時有幫助
General Settings: General Settings:
Invidious Instance: FreeTube將連線為 API呼叫的Invidious實例。清除目前的實例以檢視可供選擇的公用實例清單 Invidious Instance: FreeTube將連線為 API呼叫的Invidious實例。清除目前的實例以檢視可供選擇的公用實例清單
Thumbnail Preference: FreeTube中所有缩略图都會被替換為影片畫面而非預設缩略图 Thumbnail Preference: FreeTube中所有縮圖都會被替換為影片畫面而非預設縮圖
Fallback to Non-Preferred Backend on Failure: 當您的偏好API 有問題時FreeTube將自動嘗試使用您的非偏好API Fallback to Non-Preferred Backend on Failure: 當您的偏好API 有問題時FreeTube將自動嘗試使用您的非偏好API
作為汰退方案 作為汰退方案
Preferred API Backend: 選擇 FreeTube 要用於取得資料的後端。本地 API 是內建擷取器。Invidious API 需要 Invidious Preferred API Backend: 選擇 FreeTube 要用於取得YouTube資料的伺服器。本地 API 是內建擷取器。Invidious
伺服器才能連線。 API 需要 Invidious 伺服器才能連線。
Region for Trending: 熱門區域讓您挑選您想要顯示哪個國家的熱門影片。並非所有顯示的國家都被YouTube支援 Region for Trending: 發燒影片區域可以讓您選擇想要顯示哪個國家的發燒影片。 注意:並非所有國家都被YouTube支援