mirror of https://github.com/FreeTubeApp/FreeTube
Merge branch 'development' into piped-support
This commit is contained in:
commit
ca588c77e2
4
.babelrc
4
.babelrc
|
@ -4,8 +4,8 @@
|
||||||
"@babel/env",
|
"@babel/env",
|
||||||
{
|
{
|
||||||
"targets": {
|
"targets": {
|
||||||
"chrome": "106",
|
"chrome": "122",
|
||||||
"node": "16.16.0"
|
"node": "20.9.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
46
.eslintrc.js
46
.eslintrc.js
|
@ -1,3 +1,8 @@
|
||||||
|
const path = require('path')
|
||||||
|
const { readFileSync } = require('fs')
|
||||||
|
|
||||||
|
const activeLocales = JSON.parse(readFileSync(path.join(__dirname, './static/locales/activeLocales.json')))
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
// https://eslint.org/docs/user-guide/configuring#using-configuration-files-1
|
// https://eslint.org/docs/user-guide/configuring#using-configuration-files-1
|
||||||
root: true,
|
root: true,
|
||||||
|
@ -47,11 +52,12 @@ module.exports = {
|
||||||
'plugin:vue/recommended',
|
'plugin:vue/recommended',
|
||||||
'standard',
|
'standard',
|
||||||
'plugin:jsonc/recommended-with-json',
|
'plugin:jsonc/recommended-with-json',
|
||||||
'plugin:vuejs-accessibility/recommended'
|
'plugin:vuejs-accessibility/recommended',
|
||||||
|
'plugin:@intlify/vue-i18n/recommended'
|
||||||
],
|
],
|
||||||
|
|
||||||
// https://eslint.org/docs/user-guide/configuring#configuring-plugins
|
// https://eslint.org/docs/user-guide/configuring#configuring-plugins
|
||||||
plugins: ['vue', 'vuejs-accessibility', 'n', 'unicorn'],
|
plugins: ['vue', 'vuejs-accessibility', 'n', 'unicorn', '@intlify/vue-i18n'],
|
||||||
|
|
||||||
rules: {
|
rules: {
|
||||||
'space-before-function-paren': 'off',
|
'space-before-function-paren': 'off',
|
||||||
|
@ -77,6 +83,40 @@ module.exports = {
|
||||||
'unicorn/no-array-push-push': 'error',
|
'unicorn/no-array-push-push': 'error',
|
||||||
'unicorn/prefer-keyboard-event-key': 'error',
|
'unicorn/prefer-keyboard-event-key': 'error',
|
||||||
'unicorn/prefer-regexp-test': 'error',
|
'unicorn/prefer-regexp-test': 'error',
|
||||||
'unicorn/prefer-string-replace-all': 'error'
|
'unicorn/prefer-string-replace-all': 'error',
|
||||||
|
'@intlify/vue-i18n/no-dynamic-keys': 'error',
|
||||||
|
// TODO: enable at a later date. currently disabled to prevent massive conflicts for initial PR
|
||||||
|
// '@intlify/vue-i18n/no-unused-keys': [
|
||||||
|
// 'error',
|
||||||
|
// {
|
||||||
|
// extensions: ['.js', '.vue', 'yaml']
|
||||||
|
// }
|
||||||
|
// ],
|
||||||
|
'@intlify/vue-i18n/no-duplicate-keys-in-locale': 'error',
|
||||||
|
'@intlify/vue-i18n/no-raw-text': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
attributes: {
|
||||||
|
'/.+/': [
|
||||||
|
'title',
|
||||||
|
'aria-label',
|
||||||
|
'aria-placeholder',
|
||||||
|
'aria-roledescription',
|
||||||
|
'aria-valuetext',
|
||||||
|
'tooltip',
|
||||||
|
'message'
|
||||||
|
],
|
||||||
|
input: ['placeholder', 'value'],
|
||||||
|
img: ['alt']
|
||||||
|
},
|
||||||
|
ignoreText: ['-', '•', '/', 'YouTube', 'Invidious', 'FreeTube']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
settings: {
|
||||||
|
'vue-i18n': {
|
||||||
|
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
|
||||||
|
messageSyntaxVersion: '^8.0.0'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ body:
|
||||||
- Portable
|
- Portable
|
||||||
- .rpm
|
- .rpm
|
||||||
- .zip
|
- .zip
|
||||||
- .apk (Android, FreeTubeCordova Unofficial)
|
- .apk (FreeTubeAndroid Unofficial)
|
||||||
- AUR (Unofficial)
|
- AUR (Unofficial)
|
||||||
- Chocolatey (Unofficial)
|
- Chocolatey (Unofficial)
|
||||||
- Homebrew (Unofficial)
|
- Homebrew (Unofficial)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
- '(visual bug)'
|
- '(visual bug)'
|
||||||
|
|
||||||
'B: Unofficial Download':
|
'B: Unofficial Download':
|
||||||
- '(AUR \(Unofficial\)|Chocolatey \(Unofficial\)|\.apk \(Android, FreeTubeCordova Unofficial\)|Homebrew \(Unofficial\)|PortableApps \(Unofficial\)|WAPT \(Unofficial\)|winget \(Unofficial\)|Scoop \(Unofficial\)|Snapcraft \(Unofficial\)|MPR \(Unofficial\)|Nix \(Unofficial\))'
|
- '(AUR \(Unofficial\)|Chocolatey \(Unofficial\)|\.apk \(FreeTubeAndroid Unofficial\)|Homebrew \(Unofficial\)|PortableApps \(Unofficial\)|WAPT \(Unofficial\)|winget \(Unofficial\)|Scoop \(Unofficial\)|Snapcraft \(Unofficial\)|MPR \(Unofficial\)|Nix \(Unofficial\))'
|
||||||
|
|
||||||
'B: keyboard control':
|
'B: keyboard control':
|
||||||
- '(keyboard control not working)'
|
- '(keyboard control not working)'
|
||||||
|
|
|
@ -12,7 +12,7 @@ jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [18.x]
|
node-version: [20.x]
|
||||||
runtime:
|
runtime:
|
||||||
- linux-x64
|
- linux-x64
|
||||||
- linux-armv7l
|
- linux-armv7l
|
||||||
|
|
|
@ -18,10 +18,12 @@ jobs:
|
||||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Use Node.js 18.x
|
- name: Use Node.js 20.x
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18.x
|
node-version: 20.x
|
||||||
cache: "yarn"
|
cache: "yarn"
|
||||||
- run: yarn run ci
|
- run: yarn run ci
|
||||||
- run: yarn run lint
|
- run: yarn run lint
|
||||||
|
# let's verify that webpack is able to package the project
|
||||||
|
- run: yarn run pack
|
||||||
|
|
|
@ -12,7 +12,7 @@ jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [18.x]
|
node-version: [20.x]
|
||||||
runtime:
|
runtime:
|
||||||
- linux-x64
|
- linux-x64
|
||||||
- linux-armv7l
|
- linux-armv7l
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
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.
|
||||||
Use YouTube without advertisements and prevent Google from tracking you with their cookies and JavaScript.
|
Use YouTube without advertisements and prevent Google from tracking you with their cookies and JavaScript.
|
||||||
Available for Windows, Mac & Linux thanks to Electron.
|
Available for Windows (10 and later), Mac (macOS 10.15 and later) & Linux thanks to Electron.
|
||||||
|
|
||||||
<p align="center"><a href="https://github.com/FreeTubeApp/FreeTube/releases">Download FreeTube</a></p>
|
<p align="center"><a href="https://github.com/FreeTubeApp/FreeTube/releases">Download FreeTube</a></p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
@ -78,6 +78,10 @@ FreeTube is supported by the [Privacy Redirect](https://github.com/SimonBrazell/
|
||||||
|
|
||||||
## Download Links
|
## Download Links
|
||||||
### Official Downloads
|
### Official Downloads
|
||||||
|
|
||||||
|
> [!CAUTION]
|
||||||
|
> FreeTube is only supported on Windows 10 and later, macOS 10.15 and above, and various Linux distributions. Installing it on unsupported systems may result in unexpected issues.
|
||||||
|
|
||||||
* [GitHub Releases](https://github.com/FreeTubeApp/FreeTube/releases)
|
* [GitHub Releases](https://github.com/FreeTubeApp/FreeTube/releases)
|
||||||
|
|
||||||
* [FreeTube Website](https://freetubeapp.io/#download)
|
* [FreeTube Website](https://freetubeapp.io/#download)
|
||||||
|
@ -103,7 +107,7 @@ The first build with a green check mark is the latest build.
|
||||||
|
|
||||||
* Chocolatey: [Download](https://chocolatey.org/packages/freetube/)
|
* Chocolatey: [Download](https://chocolatey.org/packages/freetube/)
|
||||||
|
|
||||||
* FreeTubeCordova (FreeTube port for Android and PWA): [Download](https://github.com/MarmadileManteater/FreeTubeCordova/releases) and [Source Code](https://github.com/MarmadileManteater/FreeTubeCordova)
|
* FreeTubeAndroid (FreeTube port for Android and PWA): [Download](https://github.com/MarmadileManteater/FreeTubeAndroid/releases) and [Source Code](https://github.com/MarmadileManteater/FreeTubeAndroid)
|
||||||
|
|
||||||
* Homebrew Formulae (Mac only): [Download](https://formulae.brew.sh/cask/freetube)
|
* Homebrew Formulae (Mac only): [Download](https://formulae.brew.sh/cask/freetube)
|
||||||
|
|
||||||
|
|
21
package.json
21
package.json
|
@ -25,7 +25,7 @@
|
||||||
"build-release": "node _scripts/build.js",
|
"build-release": "node _scripts/build.js",
|
||||||
"build-release:arm64": "node _scripts/build.js arm64",
|
"build-release:arm64": "node _scripts/build.js arm64",
|
||||||
"build-release:arm32": "node _scripts/build.js arm32",
|
"build-release:arm32": "node _scripts/build.js arm32",
|
||||||
"clean": "rimraf build/ static/dashFiles/ dist/ static/storyboards/",
|
"clean": "rimraf build/ dist/",
|
||||||
"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",
|
||||||
|
@ -53,9 +53,9 @@
|
||||||
"ci": "yarn install --silent --frozen-lockfile"
|
"ci": "yarn install --silent --frozen-lockfile"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-svg-core": "^6.5.1",
|
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
||||||
"@fortawesome/free-brands-svg-icons": "^6.5.1",
|
"@fortawesome/free-brands-svg-icons": "^6.5.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
||||||
"@fortawesome/vue-fontawesome": "^2.0.10",
|
"@fortawesome/vue-fontawesome": "^2.0.10",
|
||||||
"@seald-io/nedb": "^4.0.4",
|
"@seald-io/nedb": "^4.0.4",
|
||||||
"@silvermine/videojs-quality-selector": "^1.3.1",
|
"@silvermine/videojs-quality-selector": "^1.3.1",
|
||||||
|
@ -80,16 +80,17 @@
|
||||||
"youtubei.js": "^9.2.0"
|
"youtubei.js": "^9.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.24.3",
|
"@babel/core": "^7.24.4",
|
||||||
"@babel/eslint-parser": "^7.24.1",
|
"@babel/eslint-parser": "^7.24.1",
|
||||||
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
||||||
"@babel/preset-env": "^7.24.3",
|
"@babel/preset-env": "^7.24.4",
|
||||||
"@double-great/stylelint-a11y": "^3.0.2",
|
"@double-great/stylelint-a11y": "^3.0.2",
|
||||||
|
"@intlify/eslint-plugin-vue-i18n": "^2.0.0",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"copy-webpack-plugin": "^12.0.2",
|
"copy-webpack-plugin": "^12.0.2",
|
||||||
"css-loader": "^6.10.0",
|
"css-loader": "^7.0.0",
|
||||||
"css-minimizer-webpack-plugin": "^6.0.0",
|
"css-minimizer-webpack-plugin": "^6.0.0",
|
||||||
"electron": "^29.1.6",
|
"electron": "^29.2.0",
|
||||||
"electron-builder": "^24.13.3",
|
"electron-builder": "^24.13.3",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-config-prettier": "^9.1.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
|
@ -106,14 +107,14 @@
|
||||||
"html-webpack-plugin": "^5.6.0",
|
"html-webpack-plugin": "^5.6.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"json-minimizer-webpack-plugin": "^5.0.0",
|
"json-minimizer-webpack-plugin": "^5.0.0",
|
||||||
"lefthook": "^1.6.7",
|
"lefthook": "^1.6.8",
|
||||||
"mini-css-extract-plugin": "^2.8.1",
|
"mini-css-extract-plugin": "^2.8.1",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"postcss": "^8.4.38",
|
"postcss": "^8.4.38",
|
||||||
"postcss-scss": "^4.0.9",
|
"postcss-scss": "^4.0.9",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
"rimraf": "^5.0.5",
|
"rimraf": "^5.0.5",
|
||||||
"sass": "^1.72.0",
|
"sass": "^1.74.1",
|
||||||
"sass-loader": "^14.1.1",
|
"sass-loader": "^14.1.1",
|
||||||
"stylelint": "^16.3.1",
|
"stylelint": "^16.3.1",
|
||||||
"stylelint-config-sass-guidelines": "^11.1.0",
|
"stylelint-config-sass-guidelines": "^11.1.0",
|
||||||
|
|
|
@ -23,7 +23,10 @@ const IpcChannels = {
|
||||||
SYNC_SETTINGS: 'sync-settings',
|
SYNC_SETTINGS: 'sync-settings',
|
||||||
SYNC_HISTORY: 'sync-history',
|
SYNC_HISTORY: 'sync-history',
|
||||||
SYNC_PROFILES: 'sync-profiles',
|
SYNC_PROFILES: 'sync-profiles',
|
||||||
SYNC_PLAYLISTS: 'sync-playlists'
|
SYNC_PLAYLISTS: 'sync-playlists',
|
||||||
|
|
||||||
|
GET_REPLACE_HTTP_CACHE: 'get-replace-http-cache',
|
||||||
|
TOGGLE_REPLACE_HTTP_CACHE: 'toggle-replace-http-cache'
|
||||||
}
|
}
|
||||||
|
|
||||||
const DBActions = {
|
const DBActions = {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import { IpcChannels, DBActions, SyncEvents } from '../constants'
|
||||||
import baseHandlers from '../datastores/handlers/base'
|
import baseHandlers from '../datastores/handlers/base'
|
||||||
import { extractExpiryTimestamp, ImageCache } from './ImageCache'
|
import { extractExpiryTimestamp, ImageCache } from './ImageCache'
|
||||||
import { existsSync } from 'fs'
|
import { existsSync } from 'fs'
|
||||||
|
import asyncFs from 'fs/promises'
|
||||||
|
|
||||||
import packageDetails from '../../package.json'
|
import packageDetails from '../../package.json'
|
||||||
|
|
||||||
|
@ -177,7 +178,8 @@ function runApp() {
|
||||||
// command line switches need to be added before the app ready event first
|
// command line switches need to be added before the app ready event first
|
||||||
// that means we can't use the normal settings system as that is asynchronous,
|
// that means we can't use the normal settings system as that is asynchronous,
|
||||||
// doing it synchronously ensures that we add it before the event fires
|
// doing it synchronously ensures that we add it before the event fires
|
||||||
const replaceHttpCache = existsSync(`${app.getPath('userData')}/experiment-replace-http-cache`)
|
const REPLACE_HTTP_CACHE_PATH = `${app.getPath('userData')}/experiment-replace-http-cache`
|
||||||
|
const replaceHttpCache = existsSync(REPLACE_HTTP_CACHE_PATH)
|
||||||
if (replaceHttpCache) {
|
if (replaceHttpCache) {
|
||||||
// the http cache causes excessive disk usage during video playback
|
// the http cache causes excessive disk usage during video playback
|
||||||
// we've got a custom image cache to make up for disabling the http cache
|
// we've got a custom image cache to make up for disabling the http cache
|
||||||
|
@ -662,7 +664,7 @@ function runApp() {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.once('relaunchRequest', () => {
|
function relaunch() {
|
||||||
if (process.env.NODE_ENV === 'development') {
|
if (process.env.NODE_ENV === 'development') {
|
||||||
app.exit(parseInt(process.env.FREETUBE_RELAUNCH_EXIT_CODE))
|
app.exit(parseInt(process.env.FREETUBE_RELAUNCH_EXIT_CODE))
|
||||||
return
|
return
|
||||||
|
@ -693,6 +695,10 @@ function runApp() {
|
||||||
}
|
}
|
||||||
|
|
||||||
app.quit()
|
app.quit()
|
||||||
|
}
|
||||||
|
|
||||||
|
ipcMain.once('relaunchRequest', () => {
|
||||||
|
relaunch()
|
||||||
})
|
})
|
||||||
|
|
||||||
nativeTheme.on('updated', () => {
|
nativeTheme.on('updated', () => {
|
||||||
|
@ -780,6 +786,22 @@ function runApp() {
|
||||||
child.unref()
|
child.unref()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ipcMain.handle(IpcChannels.GET_REPLACE_HTTP_CACHE, () => {
|
||||||
|
return replaceHttpCache
|
||||||
|
})
|
||||||
|
|
||||||
|
ipcMain.once(IpcChannels.TOGGLE_REPLACE_HTTP_CACHE, async () => {
|
||||||
|
if (replaceHttpCache) {
|
||||||
|
await asyncFs.rm(REPLACE_HTTP_CACHE_PATH)
|
||||||
|
} else {
|
||||||
|
// create an empty file
|
||||||
|
const handle = await asyncFs.open(REPLACE_HTTP_CACHE_PATH, 'w')
|
||||||
|
await handle.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
relaunch()
|
||||||
|
})
|
||||||
|
|
||||||
// ************************************************* //
|
// ************************************************* //
|
||||||
// DB related IPC calls
|
// DB related IPC calls
|
||||||
// *********** //
|
// *********** //
|
||||||
|
|
|
@ -15,6 +15,7 @@ import { marked } from 'marked'
|
||||||
import { IpcChannels } from '../constants'
|
import { IpcChannels } from '../constants'
|
||||||
import packageDetails from '../../package.json'
|
import packageDetails from '../../package.json'
|
||||||
import { openExternalLink, openInternalPath, showToast } from './helpers/utils'
|
import { openExternalLink, openInternalPath, showToast } from './helpers/utils'
|
||||||
|
import { translateWindowTitle } from './helpers/strings'
|
||||||
|
|
||||||
let ipcRenderer = null
|
let ipcRenderer = null
|
||||||
|
|
||||||
|
@ -77,14 +78,13 @@ export default defineComponent({
|
||||||
return this.$store.getters.getShowCreatePlaylistPrompt
|
return this.$store.getters.getShowCreatePlaylistPrompt
|
||||||
},
|
},
|
||||||
windowTitle: function () {
|
windowTitle: function () {
|
||||||
const routeTitle = this.$route.meta.title
|
const routePath = this.$route.path
|
||||||
if (routeTitle !== 'Channel' && routeTitle !== 'Watch' && routeTitle !== 'Hashtag') {
|
if (!routePath.startsWith('/channel/') && !routePath.startsWith('/watch/') && !routePath.startsWith('/hashtag/')) {
|
||||||
let title =
|
let title = translateWindowTitle(this.$route.meta.title, this.$i18n)
|
||||||
this.$route.meta.path === '/home'
|
|
||||||
? packageDetails.productName
|
|
||||||
: `${this.$t(this.$route.meta.title)} - ${packageDetails.productName}`
|
|
||||||
if (!title) {
|
if (!title) {
|
||||||
title = packageDetails.productName
|
title = packageDetails.productName
|
||||||
|
} else {
|
||||||
|
title = `${title} - ${packageDetails.productName}`
|
||||||
}
|
}
|
||||||
return title
|
return title
|
||||||
} else {
|
} else {
|
||||||
|
@ -477,12 +477,7 @@ export default defineComponent({
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
// Unknown URL type
|
// Unknown URL type
|
||||||
let message = 'Unknown YouTube url type, cannot be opened in app'
|
showToast(this.$t('Unknown YouTube url type, cannot be opened in app'))
|
||||||
if (this.$te(message) && this.$t(message) !== '') {
|
|
||||||
message = this.$t(message)
|
|
||||||
}
|
|
||||||
|
|
||||||
showToast(message)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -524,7 +524,7 @@ export default defineComponent({
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, subscriptionsDb, 'Subscriptions have been successfully exported')
|
await this.promptAndWriteToFile(options, subscriptionsDb, this.$t('Settings.Data Settings.Subscriptions have been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
exportYouTubeSubscriptions: async function () {
|
exportYouTubeSubscriptions: async function () {
|
||||||
|
@ -577,7 +577,7 @@ export default defineComponent({
|
||||||
return object
|
return object
|
||||||
})
|
})
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, JSON.stringify(subscriptionsObject), 'Subscriptions have been successfully exported')
|
await this.promptAndWriteToFile(options, JSON.stringify(subscriptionsObject), this.$t('Settings.Data Settings.Subscriptions have been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
exportOpmlYouTubeSubscriptions: async function () {
|
exportOpmlYouTubeSubscriptions: async function () {
|
||||||
|
@ -605,7 +605,7 @@ export default defineComponent({
|
||||||
|
|
||||||
opmlData += '</outline></body></opml>'
|
opmlData += '</outline></body></opml>'
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, opmlData, 'Subscriptions have been successfully exported')
|
await this.promptAndWriteToFile(options, opmlData, this.$t('Settings.Data Settings.Subscriptions have been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
exportCsvYouTubeSubscriptions: async function () {
|
exportCsvYouTubeSubscriptions: async function () {
|
||||||
|
@ -632,7 +632,7 @@ export default defineComponent({
|
||||||
})
|
})
|
||||||
exportText += '\n'
|
exportText += '\n'
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, exportText, 'Subscriptions have been successfully exported')
|
await this.promptAndWriteToFile(options, exportText, this.$t('Settings.Data Settings.Subscriptions have been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
exportNewPipeSubscriptions: async function () {
|
exportNewPipeSubscriptions: async function () {
|
||||||
|
@ -666,7 +666,7 @@ export default defineComponent({
|
||||||
newPipeObject.subscriptions.push(subscription)
|
newPipeObject.subscriptions.push(subscription)
|
||||||
})
|
})
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, JSON.stringify(newPipeObject), 'Subscriptions have been successfully exported')
|
await this.promptAndWriteToFile(options, JSON.stringify(newPipeObject), this.$t('Settings.Data Settings.Subscriptions have been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
importHistory: async function () {
|
importHistory: async function () {
|
||||||
|
@ -860,7 +860,7 @@ export default defineComponent({
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, historyDb, 'All watched history has been successfully exported')
|
await this.promptAndWriteToFile(options, historyDb, this.$t('Settings.Data Settings.All watched history has been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
importPlaylists: async function () {
|
importPlaylists: async function () {
|
||||||
|
@ -1039,7 +1039,7 @@ export default defineComponent({
|
||||||
return JSON.stringify(playlist)
|
return JSON.stringify(playlist)
|
||||||
}).join('\n') + '\n'// a trailing line is expected
|
}).join('\n') + '\n'// a trailing line is expected
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, playlistsDb, 'All playlists has been successfully exported')
|
await this.promptAndWriteToFile(options, playlistsDb, this.$t('Settings.Data Settings.All playlists has been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
exportPlaylistsForOlderVersionsSometimes: function () {
|
exportPlaylistsForOlderVersionsSometimes: function () {
|
||||||
|
@ -1088,7 +1088,7 @@ export default defineComponent({
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
await this.promptAndWriteToFile(options, JSON.stringify([favoritesPlaylistData]), 'All playlists has been successfully exported')
|
await this.promptAndWriteToFile(options, JSON.stringify([favoritesPlaylistData]), this.$t('Settings.Data Settings.All playlists has been successfully exported'))
|
||||||
},
|
},
|
||||||
|
|
||||||
convertOldFreeTubeFormatToNew(oldData) {
|
convertOldFreeTubeFormatToNew(oldData) {
|
||||||
|
@ -1098,7 +1098,7 @@ export default defineComponent({
|
||||||
for (const profile of channel.profile) {
|
for (const profile of channel.profile) {
|
||||||
let index = convertedData.findIndex(p => p.name === profile.value)
|
let index = convertedData.findIndex(p => p.name === profile.value)
|
||||||
if (index === -1) { // profile doesn't exist yet
|
if (index === -1) { // profile doesn't exist yet
|
||||||
const randomBgColor = getRandomColor()
|
const randomBgColor = getRandomColor().value
|
||||||
const contrastyTextColor = calculateColorLuminance(randomBgColor)
|
const contrastyTextColor = calculateColorLuminance(randomBgColor)
|
||||||
convertedData.push({
|
convertedData.push({
|
||||||
name: profile.value,
|
name: profile.value,
|
||||||
|
@ -1122,7 +1122,7 @@ export default defineComponent({
|
||||||
return convertedData
|
return convertedData
|
||||||
},
|
},
|
||||||
|
|
||||||
promptAndWriteToFile: async function (saveOptions, content, successMessageKeySuffix) {
|
promptAndWriteToFile: async function (saveOptions, content, successMessage) {
|
||||||
const response = await showSaveDialog(saveOptions)
|
const response = await showSaveDialog(saveOptions)
|
||||||
if (response.canceled || response.filePath === '') {
|
if (response.canceled || response.filePath === '') {
|
||||||
// User canceled the save dialog
|
// User canceled the save dialog
|
||||||
|
@ -1137,7 +1137,7 @@ export default defineComponent({
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
showToast(this.$t(`Settings.Data Settings.${successMessageKeySuffix}`))
|
showToast(successMessage)
|
||||||
},
|
},
|
||||||
|
|
||||||
getChannelInfoInvidious: function (channelId) {
|
getChannelInfoInvidious: function (channelId) {
|
||||||
|
@ -1186,7 +1186,7 @@ export default defineComponent({
|
||||||
})
|
})
|
||||||
|
|
||||||
if (this.backendFallback && this.backendPreference === 'local') {
|
if (this.backendFallback && this.backendPreference === 'local') {
|
||||||
showToast(this.$t('Falling back to the Invidious API'))
|
showToast(this.$t('Falling back to Invidious API'))
|
||||||
return await this.getChannelInfoInvidious(channelId)
|
return await this.getChannelInfoInvidious(channelId)
|
||||||
} else {
|
} else {
|
||||||
return []
|
return []
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import fs from 'fs/promises'
|
|
||||||
import { defineComponent } from 'vue'
|
import { defineComponent } from 'vue'
|
||||||
import FtSettingsSection from '../ft-settings-section/ft-settings-section.vue'
|
import FtSettingsSection from '../ft-settings-section/ft-settings-section.vue'
|
||||||
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
|
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
|
||||||
import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
|
import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
|
||||||
import FtPrompt from '../ft-prompt/ft-prompt.vue'
|
import FtPrompt from '../ft-prompt/ft-prompt.vue'
|
||||||
import { pathExists } from '../../helpers/filesystem'
|
import { IpcChannels } from '../../../constants'
|
||||||
import { getUserDataPath } from '../../helpers/utils'
|
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'ExperimentalSettings',
|
name: 'ExperimentalSettings',
|
||||||
|
@ -19,19 +17,16 @@ export default defineComponent({
|
||||||
return {
|
return {
|
||||||
replaceHttpCacheLoading: true,
|
replaceHttpCacheLoading: true,
|
||||||
replaceHttpCache: false,
|
replaceHttpCache: false,
|
||||||
replaceHttpCachePath: '',
|
|
||||||
showRestartPrompt: false
|
showRestartPrompt: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted: function () {
|
mounted: async function () {
|
||||||
getUserDataPath().then((userData) => {
|
if (process.env.IS_ELECTRON) {
|
||||||
this.replaceHttpCachePath = `${userData}/experiment-replace-http-cache`
|
const { ipcRenderer } = require('electron')
|
||||||
|
this.replaceHttpCache = await ipcRenderer.invoke(IpcChannels.GET_REPLACE_HTTP_CACHE)
|
||||||
|
}
|
||||||
|
|
||||||
pathExists(this.replaceHttpCachePath).then((exists) => {
|
this.replaceHttpCacheLoading = false
|
||||||
this.replaceHttpCache = exists
|
|
||||||
this.replaceHttpCacheLoading = false
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleRestartPrompt: function (value) {
|
handleRestartPrompt: function (value) {
|
||||||
|
@ -39,7 +34,7 @@ export default defineComponent({
|
||||||
this.showRestartPrompt = true
|
this.showRestartPrompt = true
|
||||||
},
|
},
|
||||||
|
|
||||||
handleReplaceHttpCache: async function (value) {
|
handleReplaceHttpCache: function (value) {
|
||||||
this.showRestartPrompt = false
|
this.showRestartPrompt = false
|
||||||
|
|
||||||
if (value === null || value === 'no') {
|
if (value === null || value === 'no') {
|
||||||
|
@ -47,16 +42,10 @@ export default defineComponent({
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.replaceHttpCache) {
|
if (process.env.IS_ELECTRON) {
|
||||||
// create an empty file
|
const { ipcRenderer } = require('electron')
|
||||||
const handle = await fs.open(this.replaceHttpCachePath, 'w')
|
ipcRenderer.send(IpcChannels.TOGGLE_REPLACE_HTTP_CACHE)
|
||||||
await handle.close()
|
|
||||||
} else {
|
|
||||||
await fs.rm(this.replaceHttpCachePath)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const { ipcRenderer } = require('electron')
|
|
||||||
ipcRenderer.send('relaunchRequest')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -21,9 +21,15 @@ export default defineComponent({
|
||||||
computed: {
|
computed: {
|
||||||
externalPlayerNames: function () {
|
externalPlayerNames: function () {
|
||||||
const fallbackNames = this.$store.getters.getExternalPlayerNames
|
const fallbackNames = this.$store.getters.getExternalPlayerNames
|
||||||
const nameTranslationKeys = this.$store.getters.getExternalPlayerNameTranslationKeys
|
const translations = [{
|
||||||
|
name: 'None',
|
||||||
|
translatedValue: this.$t('Settings.External Player Settings.Players.None.Name')
|
||||||
|
}]
|
||||||
|
|
||||||
return nameTranslationKeys.map((translationKey, idx) => this.$te(translationKey) ? this.$t(translationKey) : fallbackNames[idx])
|
return fallbackNames.map((name) => {
|
||||||
|
const translation = translations.find(e => e.name === name)
|
||||||
|
return translation ? translation.translatedValue : name
|
||||||
|
})
|
||||||
},
|
},
|
||||||
externalPlayerValues: function () {
|
externalPlayerValues: function () {
|
||||||
return this.$store.getters.getExternalPlayerValues
|
return this.$store.getters.getExternalPlayerValues
|
||||||
|
|
|
@ -23,7 +23,7 @@ export default defineComponent({
|
||||||
return this.$t('Age Restricted.This channel is age restricted')
|
return this.$t('Age Restricted.This channel is age restricted')
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.$t('Age Restricted.This video is age restricted:')
|
return this.$t('Age Restricted.This video is age restricted')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,5 +1,44 @@
|
||||||
@use '../../scss-partials/_ft-list-item';
|
@use '../../scss-partials/_ft-list-item';
|
||||||
|
|
||||||
|
.ft-list-channel {
|
||||||
|
&.grid {
|
||||||
|
align-items: center;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.infoAndSubscribe {
|
||||||
|
flex-flow: column wrap;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.info {
|
||||||
|
margin-block-end: 12px;
|
||||||
|
|
||||||
|
.infoLine {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.list {
|
||||||
|
.infoAndSubscribe {
|
||||||
|
flex-flow: row wrap;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.channelSubscribeButton {
|
||||||
|
margin-block: auto;
|
||||||
|
margin-inline: 7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.infoAndSubscribe {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row wrap;
|
||||||
|
justify-content: center;
|
||||||
|
inline-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.handle {
|
.handle {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="isQuickBookmarkEnabled && quickBookmarkButtonEnabled"
|
v-if="isQuickBookmarkEnabled && quickBookmarkButtonEnabled"
|
||||||
:title="quickBookmarkIconText"
|
:title="quickBookmarkIconText"
|
||||||
:icon="isInQuickBookmarkPlaylist ? ['fas', 'check'] : ['fas', 'clock']"
|
:icon="isInQuickBookmarkPlaylist ? ['fas', 'check'] : ['fas', 'bookmark']"
|
||||||
class="quickBookmarkVideoIcon"
|
class="quickBookmarkVideoIcon"
|
||||||
:class="{
|
:class="{
|
||||||
bookmarked: isInQuickBookmarkPlaylist,
|
bookmarked: isInQuickBookmarkPlaylist,
|
||||||
|
|
|
@ -119,7 +119,7 @@ export default defineComponent({
|
||||||
if (typeof (playlist.playlistName) !== 'string') { return false }
|
if (typeof (playlist.playlistName) !== 'string') { return false }
|
||||||
|
|
||||||
if (this.doSearchPlaylistsWithMatchingVideos) {
|
if (this.doSearchPlaylistsWithMatchingVideos) {
|
||||||
if (playlist.videos.some((v) => v.title.toLowerCase().includes(this.processedQuery))) {
|
if (playlist.videos.some((v) => v.author.toLowerCase().includes(this.processedQuery) || v.title.toLowerCase().includes(this.processedQuery))) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,13 +240,20 @@ export default defineComponent({
|
||||||
this.updatePlaylist({ _id: playlist._id })
|
this.updatePlaylist({ _id: playlist._id })
|
||||||
})
|
})
|
||||||
|
|
||||||
const translationEntryKey = addedPlaylistIds.size === 1
|
let message
|
||||||
? 'User Playlists.AddVideoPrompt.Toast.{videoCount} video(s) added to 1 playlist'
|
if (addedPlaylistIds.size === 1) {
|
||||||
: 'User Playlists.AddVideoPrompt.Toast.{videoCount} video(s) added to {playlistCount} playlists'
|
message = this.$tc('User Playlists.AddVideoPrompt.Toast.{videoCount} video(s) added to 1 playlist', this.toBeAddedToPlaylistVideoCount, {
|
||||||
showToast(this.$tc(translationEntryKey, this.toBeAddedToPlaylistVideoCount, {
|
videoCount: this.toBeAddedToPlaylistVideoCount,
|
||||||
videoCount: this.toBeAddedToPlaylistVideoCount,
|
playlistCount: addedPlaylistIds.size,
|
||||||
playlistCount: addedPlaylistIds.size,
|
})
|
||||||
}))
|
} else {
|
||||||
|
message = this.$tc('User Playlists.AddVideoPrompt.Toast.{videoCount} video(s) added to {playlistCount} playlists', this.toBeAddedToPlaylistVideoCount, {
|
||||||
|
videoCount: this.toBeAddedToPlaylistVideoCount,
|
||||||
|
playlistCount: addedPlaylistIds.size,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
showToast(message)
|
||||||
this.hide()
|
this.hide()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,16 @@ export default defineComponent({
|
||||||
return this.shareTargetType === 'Video'
|
return this.shareTargetType === 'Video'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
shareTitle: function() {
|
||||||
|
if (this.isChannel) {
|
||||||
|
return this.$t('Share.Share Channel')
|
||||||
|
}
|
||||||
|
if (this.isPlaylist) {
|
||||||
|
return this.$t('Share.Share Playlist')
|
||||||
|
}
|
||||||
|
return this.$t('Share.Share Video')
|
||||||
|
},
|
||||||
|
|
||||||
currentInvidiousInstance: function () {
|
currentInvidiousInstance: function () {
|
||||||
return this.$store.getters.getCurrentInvidiousInstance
|
return this.$store.getters.getCurrentInvidiousInstance
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
ref="iconButton"
|
ref="iconButton"
|
||||||
:title="$t(`Share.Share ${shareTargetType}`)"
|
:title="shareTitle"
|
||||||
theme="secondary"
|
theme="secondary"
|
||||||
:icon="['fas', 'share-alt']"
|
:icon="['fas', 'share-alt']"
|
||||||
:dropdown-modal-on-mobile="true"
|
:dropdown-modal-on-mobile="true"
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
id="invidiousShare"
|
id="invidiousShare"
|
||||||
class="header invidious"
|
class="header invidious"
|
||||||
>
|
>
|
||||||
<span class="invidiousLogo" />Invidious
|
<span class="invidiousLogo" /> Invidious
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
|
|
|
@ -13,10 +13,7 @@
|
||||||
@change="$emit('change', currentValue)"
|
@change="$emit('change', currentValue)"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
{{ label }}:
|
{{ $t('Display Label', {label: label, value: displayLabel}) }}
|
||||||
<span>
|
|
||||||
{{ displayLabel }}
|
|
||||||
</span>
|
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { defineComponent } from 'vue'
|
import { defineComponent } from 'vue'
|
||||||
import { mapActions } from 'vuex'
|
import { mapActions } from 'vuex'
|
||||||
import { colors } from '../../helpers/colors'
|
import { colors, getColorTranslations } from '../../helpers/colors'
|
||||||
import FtSelect from '../ft-select/ft-select.vue'
|
import FtSelect from '../ft-select/ft-select.vue'
|
||||||
import { sanitizeForHtmlId } from '../../helpers/accessibility'
|
import { sanitizeForHtmlId } from '../../helpers/accessibility'
|
||||||
|
|
||||||
|
@ -31,11 +31,7 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
|
|
||||||
colorNames: function () {
|
colorNames: function () {
|
||||||
return this.colorValues.map(colorVal => {
|
return getColorTranslations()
|
||||||
// add spaces before capital letters
|
|
||||||
const colorName = colorVal.replaceAll(/([A-Z])/g, ' $1').trim()
|
|
||||||
return this.$t(`Settings.Theme Settings.Main Color Theme.${colorName}`)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
sponsorBlockValues: function() {
|
sponsorBlockValues: function() {
|
||||||
|
@ -80,6 +76,29 @@ export default defineComponent({
|
||||||
this.$t('Settings.SponsorBlock Settings.Skip Options.Show In Seek Bar'),
|
this.$t('Settings.SponsorBlock Settings.Skip Options.Show In Seek Bar'),
|
||||||
this.$t('Settings.SponsorBlock Settings.Skip Options.Do Nothing')
|
this.$t('Settings.SponsorBlock Settings.Skip Options.Do Nothing')
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
translatedCategoryName: function() {
|
||||||
|
switch (this.categoryName.toLowerCase()) {
|
||||||
|
case 'sponsor':
|
||||||
|
return this.$t('Video.Sponsor Block category.sponsor')
|
||||||
|
case 'self-promotion':
|
||||||
|
return this.$t('Video.Sponsor Block category.self-promotion')
|
||||||
|
case 'interaction':
|
||||||
|
return this.$t('Video.Sponsor Block category.interaction')
|
||||||
|
case 'intro':
|
||||||
|
return this.$t('Video.Sponsor Block category.intro')
|
||||||
|
case 'outro':
|
||||||
|
return this.$t('Video.Sponsor Block category.outro')
|
||||||
|
case 'recap':
|
||||||
|
return this.$t('Video.Sponsor Block category.recap')
|
||||||
|
case 'music offtopic':
|
||||||
|
return this.$t('Video.Sponsor Block category.music offtopic')
|
||||||
|
case 'filler':
|
||||||
|
return this.$t('Video.Sponsor Block category.filler')
|
||||||
|
default:
|
||||||
|
return ''
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
:id="sanitizedId"
|
:id="sanitizedId"
|
||||||
class="sponsorTitle"
|
class="sponsorTitle"
|
||||||
>
|
>
|
||||||
{{ $t("Video.Sponsor Block category." + categoryName) }}
|
{{ translatedCategoryName }}
|
||||||
</div>
|
</div>
|
||||||
<ft-select
|
<ft-select
|
||||||
:sanitized-id="sanitizedId + 'categoryColor'"
|
:sanitized-id="sanitizedId + 'categoryColor'"
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
<div
|
<div
|
||||||
class="initial"
|
class="initial"
|
||||||
>
|
>
|
||||||
{{ isProfileSubscribed(profile) ? '✓' : profileInitials[index] }}
|
{{ isProfileSubscribed(profile) ? $t('checkmark') : profileInitials[index] }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p
|
<p
|
||||||
|
|
|
@ -2111,6 +2111,8 @@ export default defineComponent({
|
||||||
|
|
||||||
// Unexpected errors should be reported
|
// Unexpected errors should be reported
|
||||||
console.error(err)
|
console.error(err)
|
||||||
|
// ignore as this will most likely be removed by shaka player changes
|
||||||
|
// eslint-disable-next-line @intlify/vue-i18n/no-missing-keys
|
||||||
const errorMessage = this.$t('play() request Error (Click to copy)')
|
const errorMessage = this.$t('play() request Error (Click to copy)')
|
||||||
showToast(`${errorMessage}: ${err}`, 10000, () => {
|
showToast(`${errorMessage}: ${err}`, 10000, () => {
|
||||||
copyToClipboard(err)
|
copyToClipboard(err)
|
||||||
|
|
|
@ -8,6 +8,7 @@ import FtInstanceSelector from '../ft-instance-selector/ft-instance-selector.vue
|
||||||
import debounce from 'lodash.debounce'
|
import debounce from 'lodash.debounce'
|
||||||
import allLocales from '../../../../static/locales/activeLocales.json'
|
import allLocales from '../../../../static/locales/activeLocales.json'
|
||||||
import { showToast } from '../../helpers/utils'
|
import { showToast } from '../../helpers/utils'
|
||||||
|
import { translateWindowTitle } from '../../helpers/strings'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'GeneralSettings',
|
name: 'GeneralSettings',
|
||||||
|
@ -94,7 +95,7 @@ export default defineComponent({
|
||||||
return this.$router.getRoutes().filter((route) => includedPageNames.includes(route.name))
|
return this.$router.getRoutes().filter((route) => includedPageNames.includes(route.name))
|
||||||
},
|
},
|
||||||
defaultPageNames: function () {
|
defaultPageNames: function () {
|
||||||
return this.defaultPages.map((route) => this.$t(route.meta.title))
|
return this.defaultPages.map((route) => translateWindowTitle(route.meta.title, this.$i18n))
|
||||||
},
|
},
|
||||||
defaultPageValues: function () {
|
defaultPageValues: function () {
|
||||||
// avoid Vue parsing issues by excluding '/' from path values
|
// avoid Vue parsing issues by excluding '/' from path values
|
||||||
|
|
|
@ -287,7 +287,7 @@ export default defineComponent({
|
||||||
this.screenshotFilenameExample = `${res}.${this.screenshotFormat}`
|
this.screenshotFilenameExample = `${res}.${this.screenshotFormat}`
|
||||||
return true
|
return true
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
this.screenshotFilenameExample = `❗ ${this.$t(`Settings.Player Settings.Screenshot.Error.${err.message}`)}`
|
this.screenshotFilenameExample = `❗ ${err.message}`
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
|
@ -39,9 +39,6 @@ export default defineComponent({
|
||||||
saveVideoHistoryWithLastViewedPlaylist: function () {
|
saveVideoHistoryWithLastViewedPlaylist: function () {
|
||||||
return this.$store.getters.getSaveVideoHistoryWithLastViewedPlaylist
|
return this.$store.getters.getSaveVideoHistoryWithLastViewedPlaylist
|
||||||
},
|
},
|
||||||
removeVideoMetaFiles: function () {
|
|
||||||
return this.$store.getters.getRemoveVideoMetaFiles
|
|
||||||
},
|
|
||||||
|
|
||||||
profileList: function () {
|
profileList: function () {
|
||||||
return this.$store.getters.getProfileList
|
return this.$store.getters.getProfileList
|
||||||
|
@ -74,13 +71,6 @@ export default defineComponent({
|
||||||
this.updateRememberHistory(value)
|
this.updateRememberHistory(value)
|
||||||
},
|
},
|
||||||
|
|
||||||
handleVideoMetaFiles: function (value) {
|
|
||||||
if (!value) {
|
|
||||||
this.updateRemoveVideoMetaFiles(false)
|
|
||||||
}
|
|
||||||
this.updateRemoveVideoMetaFiles(value)
|
|
||||||
},
|
|
||||||
|
|
||||||
handleRemoveHistory: function (option) {
|
handleRemoveHistory: function (option) {
|
||||||
this.showRemoveHistoryPrompt = false
|
this.showRemoveHistoryPrompt = false
|
||||||
|
|
||||||
|
@ -126,7 +116,6 @@ export default defineComponent({
|
||||||
|
|
||||||
...mapActions([
|
...mapActions([
|
||||||
'updateRememberHistory',
|
'updateRememberHistory',
|
||||||
'updateRemoveVideoMetaFiles',
|
|
||||||
'removeAllHistory',
|
'removeAllHistory',
|
||||||
'updateSaveWatchedProgress',
|
'updateSaveWatchedProgress',
|
||||||
'updateSaveVideoHistoryWithLastViewedPlaylist',
|
'updateSaveVideoHistoryWithLastViewedPlaylist',
|
||||||
|
|
|
@ -29,15 +29,6 @@
|
||||||
@change="updateSaveVideoHistoryWithLastViewedPlaylist"
|
@change="updateSaveVideoHistoryWithLastViewedPlaylist"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="switchColumn">
|
|
||||||
<ft-toggle-switch
|
|
||||||
:label="$t('Settings.Privacy Settings.Automatically Remove Video Meta Files')"
|
|
||||||
:compact="true"
|
|
||||||
:default-value="removeVideoMetaFiles"
|
|
||||||
:tooltip="$t('Tooltips.Privacy Settings.Remove Video Meta Files')"
|
|
||||||
@change="handleVideoMetaFiles"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
<ft-flex-box>
|
<ft-flex-box>
|
||||||
|
|
|
@ -61,16 +61,16 @@
|
||||||
{{ $t('Settings.Proxy Settings.Your Info') }}
|
{{ $t('Settings.Proxy Settings.Your Info') }}
|
||||||
</h3>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
{{ $t('Settings.Proxy Settings.Ip') }}: {{ proxyIp }}
|
{{ $t('Display Label', { label: $t('Settings.Proxy Settings.Ip'), value: proxyIp }) }}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
{{ $t('Settings.Proxy Settings.Country') }}: {{ proxyCountry }}
|
{{ $t('Display Label', { label: $t('Settings.Proxy Settings.Country'), value: proxyCountry }) }}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
{{ $t('Settings.Proxy Settings.Region') }}: {{ proxyRegion }}
|
{{ $t('Display Label', { label: $t('Settings.Proxy Settings.Region'), value: proxyRegion }) }}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
{{ $t('Settings.Proxy Settings.City') }}: {{ proxyCity }}
|
{{ $t('Display Label', { label: $t('Settings.Proxy Settings.City'), value: proxyCity }) }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -6,7 +6,7 @@ import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
|
||||||
import FtSlider from '../ft-slider/ft-slider.vue'
|
import FtSlider from '../ft-slider/ft-slider.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 { colors } from '../../helpers/colors'
|
import { colors, getColorTranslations } from '../../helpers/colors'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'ThemeSettings',
|
name: 'ThemeSettings',
|
||||||
|
@ -114,11 +114,7 @@ export default defineComponent({
|
||||||
},
|
},
|
||||||
|
|
||||||
colorNames: function () {
|
colorNames: function () {
|
||||||
return this.colorValues.map(colorVal => {
|
return getColorTranslations()
|
||||||
// add spaces before capital letters
|
|
||||||
const colorName = colorVal.replaceAll(/([A-Z])/g, ' $1').trim()
|
|
||||||
return this.$t(`Settings.Theme Settings.Main Color Theme.${colorName}`)
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
areColorThemesEnabled: function() {
|
areColorThemesEnabled: function() {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import debounce from 'lodash.debounce'
|
||||||
|
|
||||||
import { IpcChannels } from '../../../constants'
|
import { IpcChannels } from '../../../constants'
|
||||||
import { openInternalPath } from '../../helpers/utils'
|
import { openInternalPath } from '../../helpers/utils'
|
||||||
|
import { translateWindowTitle } from '../../helpers/strings'
|
||||||
import { clearLocalSearchSuggestionsSession, getLocalSearchSuggestions } from '../../helpers/api/local'
|
import { clearLocalSearchSuggestionsSession, getLocalSearchSuggestions } from '../../helpers/api/local'
|
||||||
import { invidiousAPICall } from '../../helpers/api/invidious'
|
import { invidiousAPICall } from '../../helpers/api/invidious'
|
||||||
|
|
||||||
|
@ -47,9 +48,10 @@ export default defineComponent({
|
||||||
headerLogoTitle: function () {
|
headerLogoTitle: function () {
|
||||||
return this.$t('Go to page',
|
return this.$t('Go to page',
|
||||||
{
|
{
|
||||||
page: this.$t(this.$router.getRoutes()
|
page: translateWindowTitle(this.$router.getRoutes()
|
||||||
.find((route) => route.path === '/' + this.landingPage)
|
.find((route) => route.path === '/' + this.landingPage)
|
||||||
.meta.title
|
.meta.title,
|
||||||
|
this.$i18n
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="isQuickBookmarkEnabled"
|
v-if="isQuickBookmarkEnabled"
|
||||||
:title="quickBookmarkIconText"
|
:title="quickBookmarkIconText"
|
||||||
:icon="isInQuickBookmarkPlaylist ? ['fas', 'check'] : ['fas', 'clock']"
|
:icon="isInQuickBookmarkPlaylist ? ['fas', 'check'] : ['fas', 'bookmark']"
|
||||||
class="quickBookmarkVideoIcon"
|
class="quickBookmarkVideoIcon"
|
||||||
:class="{
|
:class="{
|
||||||
bookmarked: isInQuickBookmarkPlaylist,
|
bookmarked: isInQuickBookmarkPlaylist,
|
||||||
|
|
|
@ -331,7 +331,7 @@ export async function getLocalChannelLiveStreams(id) {
|
||||||
// it has some empty fields in the protobuf but it doesn't work if you remove them)
|
// it has some empty fields in the protobuf but it doesn't work if you remove them)
|
||||||
}))
|
}))
|
||||||
|
|
||||||
const liveStreamsTab = new YT.Channel(null, response)
|
let liveStreamsTab = new YT.Channel(innertube.actions, response)
|
||||||
const { id: channelId = id, name, thumbnailUrl } = parseLocalChannelHeader(liveStreamsTab)
|
const { id: channelId = id, name, thumbnailUrl } = parseLocalChannelHeader(liveStreamsTab)
|
||||||
|
|
||||||
let videos
|
let videos
|
||||||
|
@ -339,7 +339,16 @@ export async function getLocalChannelLiveStreams(id) {
|
||||||
// if the channel doesn't have a live tab, YouTube returns the home tab instead
|
// if the channel doesn't have a live tab, YouTube returns the home tab instead
|
||||||
// so we need to check that we got the right tab
|
// so we need to check that we got the right tab
|
||||||
if (liveStreamsTab.current_tab?.endpoint.metadata.url?.endsWith('/streams')) {
|
if (liveStreamsTab.current_tab?.endpoint.metadata.url?.endsWith('/streams')) {
|
||||||
videos = parseLocalChannelVideos(liveStreamsTab.videos, channelId, name)
|
// work around YouTube bug where it will return a bunch of responses with only continuations in them
|
||||||
|
// e.g. https://www.youtube.com/@TWLIVES/streams
|
||||||
|
|
||||||
|
let tempVideos = liveStreamsTab.videos
|
||||||
|
while (tempVideos.length === 0 && liveStreamsTab.has_continuation) {
|
||||||
|
liveStreamsTab = await liveStreamsTab.getContinuation()
|
||||||
|
tempVideos = liveStreamsTab.videos
|
||||||
|
}
|
||||||
|
|
||||||
|
videos = parseLocalChannelVideos(tempVideos, channelId, name)
|
||||||
} else {
|
} else {
|
||||||
videos = []
|
videos = []
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import i18n from '../i18n/index'
|
||||||
|
|
||||||
export const colors = [
|
export const colors = [
|
||||||
{ name: 'Red', value: '#d50000' },
|
{ name: 'Red', value: '#d50000' },
|
||||||
{ name: 'Pink', value: '#C51162' },
|
{ name: 'Pink', value: '#C51162' },
|
||||||
|
@ -38,14 +40,55 @@ export const colors = [
|
||||||
{ name: 'CatppuccinMochaLavender', value: '#B4BEFE' }
|
{ name: 'CatppuccinMochaLavender', value: '#B4BEFE' }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
export function getColorTranslations() {
|
||||||
|
return [
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Red'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Pink'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Purple'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Deep Purple'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Indigo'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Blue'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Light Blue'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Cyan'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Teal'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Green'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Light Green'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Lime'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Yellow'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Amber'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Orange'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Deep Orange'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Dracula Cyan'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Dracula Green'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Dracula Orange'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Dracula Pink'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Dracula Purple'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Dracula Red'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Dracula Yellow'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Rosewater'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Flamingo'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Pink'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Mauve'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Red'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Maroon'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Peach'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Yellow'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Green'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Teal'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Sky'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Sapphire'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Blue'),
|
||||||
|
i18n.t('Settings.Theme Settings.Main Color Theme.Catppuccin Mocha Lavender')
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
export function getRandomColorClass() {
|
export function getRandomColorClass() {
|
||||||
const randomInt = Math.floor(Math.random() * colors.length)
|
return 'main' + getRandomColor().name
|
||||||
return 'main' + colors[randomInt].name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getRandomColor() {
|
export function getRandomColor() {
|
||||||
const randomInt = Math.floor(Math.random() * colors.length)
|
const randomInt = Math.floor(Math.random() * colors.length)
|
||||||
return colors[randomInt].value
|
return colors[randomInt]
|
||||||
}
|
}
|
||||||
|
|
||||||
export function calculateColorLuminance(colorValue) {
|
export function calculateColorLuminance(colorValue) {
|
||||||
|
|
|
@ -23,3 +23,32 @@ export function isKeyboardEventKeyPrintableChar(eventKey) {
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function translateWindowTitle(title, i18n) {
|
||||||
|
switch (title) {
|
||||||
|
case 'Subscriptions':
|
||||||
|
return i18n.t('Subscriptions.Subscriptions')
|
||||||
|
case 'Channels':
|
||||||
|
return i18n.t('Channels.Title')
|
||||||
|
case 'Trending':
|
||||||
|
return i18n.t('Trending.Trending')
|
||||||
|
case 'Most Popular':
|
||||||
|
return i18n.t('Most Popular')
|
||||||
|
case 'Your Playlists':
|
||||||
|
return i18n.t('User Playlists.Your Playlists')
|
||||||
|
case 'History':
|
||||||
|
return i18n.t('History.History')
|
||||||
|
case 'Settings':
|
||||||
|
return i18n.t('Settings.Settings')
|
||||||
|
case 'About':
|
||||||
|
return i18n.t('About.About')
|
||||||
|
case 'Profile Settings':
|
||||||
|
return i18n.t('Profile.Profile Settings')
|
||||||
|
case 'Search Results':
|
||||||
|
return i18n.t('Search Filters.Search Results')
|
||||||
|
case 'Playlist':
|
||||||
|
return i18n.t('Playlist.Playlist')
|
||||||
|
default:
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -92,43 +92,67 @@ export function toLocalePublicationString ({ publishText, isLive = false, isUpco
|
||||||
|
|
||||||
const match = publishText.match(PUBLISHED_TEXT_REGEX)
|
const match = publishText.match(PUBLISHED_TEXT_REGEX)
|
||||||
const singular = (match[1] === '1')
|
const singular = (match[1] === '1')
|
||||||
let translationKey = ''
|
let unit = ''
|
||||||
switch (match[2].substring(0, 2)) {
|
switch (match[2].substring(0, 2)) {
|
||||||
case 'se':
|
case 'se':
|
||||||
case 's':
|
case 's':
|
||||||
translationKey = 'Video.Published.Second'
|
if (singular) {
|
||||||
|
unit = i18n.t('Video.Published.Second')
|
||||||
|
} else {
|
||||||
|
unit = i18n.t('Video.Published.Seconds')
|
||||||
|
}
|
||||||
break
|
break
|
||||||
case 'mi':
|
case 'mi':
|
||||||
case 'm':
|
case 'm':
|
||||||
translationKey = 'Video.Published.Minute'
|
if (singular) {
|
||||||
|
unit = i18n.t('Video.Published.Minute')
|
||||||
|
} else {
|
||||||
|
unit = i18n.t('Video.Published.Minutes')
|
||||||
|
}
|
||||||
break
|
break
|
||||||
case 'ho':
|
case 'ho':
|
||||||
case 'h':
|
case 'h':
|
||||||
translationKey = 'Video.Published.Hour'
|
if (singular) {
|
||||||
|
unit = i18n.t('Video.Published.Hour')
|
||||||
|
} else {
|
||||||
|
unit = i18n.t('Video.Published.Hours')
|
||||||
|
}
|
||||||
break
|
break
|
||||||
case 'da':
|
case 'da':
|
||||||
case 'd':
|
case 'd':
|
||||||
translationKey = 'Video.Published.Day'
|
if (singular) {
|
||||||
|
unit = i18n.t('Video.Published.Day')
|
||||||
|
} else {
|
||||||
|
unit = i18n.t('Video.Published.Days')
|
||||||
|
}
|
||||||
break
|
break
|
||||||
case 'we':
|
case 'we':
|
||||||
case 'w':
|
case 'w':
|
||||||
translationKey = 'Video.Published.Week'
|
if (singular) {
|
||||||
|
unit = i18n.t('Video.Published.Week')
|
||||||
|
} else {
|
||||||
|
unit = i18n.t('Video.Published.Weeks')
|
||||||
|
}
|
||||||
break
|
break
|
||||||
case 'mo':
|
case 'mo':
|
||||||
translationKey = 'Video.Published.Month'
|
if (singular) {
|
||||||
|
unit = i18n.t('Video.Published.Month')
|
||||||
|
} else {
|
||||||
|
unit = i18n.t('Video.Published.Months')
|
||||||
|
}
|
||||||
break
|
break
|
||||||
case 'ye':
|
case 'ye':
|
||||||
case 'y':
|
case 'y':
|
||||||
translationKey = 'Video.Published.Year'
|
if (singular) {
|
||||||
|
unit = i18n.t('Video.Published.Year')
|
||||||
|
} else {
|
||||||
|
unit = i18n.t('Video.Published.Years')
|
||||||
|
}
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
return publishText
|
return publishText
|
||||||
}
|
}
|
||||||
if (!singular) {
|
|
||||||
translationKey += 's'
|
|
||||||
}
|
|
||||||
|
|
||||||
const unit = i18n.t(translationKey)
|
|
||||||
return i18n.t('Video.Publicationtemplate', { number: match[1], unit })
|
return i18n.t('Video.Publicationtemplate', { number: match[1], unit })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -574,8 +598,7 @@ export function extractNumberFromString(str) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function showExternalPlayerUnsupportedActionToast(externalPlayer, actionName) {
|
export function showExternalPlayerUnsupportedActionToast(externalPlayer, action) {
|
||||||
const action = i18n.t(`Video.External Player.Unsupported Actions.${actionName}`)
|
|
||||||
const message = i18n.t('Video.External Player.UnsupportedActionTemplate', { externalPlayer, action })
|
const message = i18n.t('Video.External Player.UnsupportedActionTemplate', { externalPlayer, action })
|
||||||
showToast(message)
|
showToast(message)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,20 @@ Vue.use(VueI18n)
|
||||||
|
|
||||||
const i18n = new VueI18n({
|
const i18n = new VueI18n({
|
||||||
locale: 'en-US',
|
locale: 'en-US',
|
||||||
fallbackLocale: { default: 'en-US' }
|
fallbackLocale: {
|
||||||
|
// https://kazupon.github.io/vue-i18n/guide/fallback.html#explicit-fallback-with-decision-maps
|
||||||
|
|
||||||
|
// es_AR -> es -> en-US
|
||||||
|
es_AR: ['es'],
|
||||||
|
// es-MX -> es -> en-US
|
||||||
|
'es-MX': ['es'],
|
||||||
|
// pt-BR -> pt -> en-US
|
||||||
|
'pt-BR': ['pt'],
|
||||||
|
// pt-PT -> pt -> en-US
|
||||||
|
'pt-PT': ['pt'],
|
||||||
|
// any -> en-US
|
||||||
|
default: ['en-US'],
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export async function loadLocale(locale) {
|
export async function loadLocale(locale) {
|
||||||
|
@ -18,6 +31,7 @@ export async function loadLocale(locale) {
|
||||||
}
|
}
|
||||||
if (!activeLocales.includes(locale)) {
|
if (!activeLocales.includes(locale)) {
|
||||||
console.error(`Unable to load unknown locale: "${locale}"`)
|
console.error(`Unable to load unknown locale: "${locale}"`)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// locales are only compressed in our production Electron builds
|
// locales are only compressed in our production Electron builds
|
||||||
|
@ -45,6 +59,4 @@ export async function loadLocale(locale) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loadLocale('en-US')
|
|
||||||
|
|
||||||
export default i18n
|
export default i18n
|
||||||
|
|
|
@ -22,7 +22,6 @@ import {
|
||||||
faCheck,
|
faCheck,
|
||||||
faChevronRight,
|
faChevronRight,
|
||||||
faCircleUser,
|
faCircleUser,
|
||||||
faClock,
|
|
||||||
faClone,
|
faClone,
|
||||||
faComment,
|
faComment,
|
||||||
faCommentDots,
|
faCommentDots,
|
||||||
|
@ -102,7 +101,6 @@ library.add(
|
||||||
faCheck,
|
faCheck,
|
||||||
faChevronRight,
|
faChevronRight,
|
||||||
faCircleUser,
|
faCircleUser,
|
||||||
faClock,
|
|
||||||
faClone,
|
faClone,
|
||||||
faComment,
|
faComment,
|
||||||
faCommentDots,
|
faCommentDots,
|
||||||
|
|
|
@ -23,7 +23,7 @@ const router = new Router({
|
||||||
path: '/',
|
path: '/',
|
||||||
name: 'default',
|
name: 'default',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Subscriptions.Subscriptions'
|
title: 'Subscriptions'
|
||||||
},
|
},
|
||||||
component: Subscriptions
|
component: Subscriptions
|
||||||
},
|
},
|
||||||
|
@ -31,7 +31,7 @@ const router = new Router({
|
||||||
path: '/subscriptions',
|
path: '/subscriptions',
|
||||||
name: 'subscriptions',
|
name: 'subscriptions',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Subscriptions.Subscriptions'
|
title: 'Subscriptions'
|
||||||
},
|
},
|
||||||
component: Subscriptions
|
component: Subscriptions
|
||||||
},
|
},
|
||||||
|
@ -39,7 +39,7 @@ const router = new Router({
|
||||||
path: '/subscribedchannels',
|
path: '/subscribedchannels',
|
||||||
name: 'subscribedChannels',
|
name: 'subscribedChannels',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Channels.Title'
|
title: 'Channels'
|
||||||
},
|
},
|
||||||
component: SubscribedChannels
|
component: SubscribedChannels
|
||||||
},
|
},
|
||||||
|
@ -47,7 +47,7 @@ const router = new Router({
|
||||||
path: '/trending',
|
path: '/trending',
|
||||||
name: 'trending',
|
name: 'trending',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Trending.Trending'
|
title: 'Trending'
|
||||||
},
|
},
|
||||||
component: Trending
|
component: Trending
|
||||||
},
|
},
|
||||||
|
@ -63,7 +63,7 @@ const router = new Router({
|
||||||
path: '/userplaylists',
|
path: '/userplaylists',
|
||||||
name: 'userPlaylists',
|
name: 'userPlaylists',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'User Playlists.Your Playlists'
|
title: 'Your Playlists'
|
||||||
},
|
},
|
||||||
component: UserPlaylists
|
component: UserPlaylists
|
||||||
},
|
},
|
||||||
|
@ -71,7 +71,7 @@ const router = new Router({
|
||||||
path: '/history',
|
path: '/history',
|
||||||
name: 'history',
|
name: 'history',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'History.History'
|
title: 'History'
|
||||||
},
|
},
|
||||||
component: History
|
component: History
|
||||||
},
|
},
|
||||||
|
@ -79,7 +79,7 @@ const router = new Router({
|
||||||
path: '/settings',
|
path: '/settings',
|
||||||
name: 'settings',
|
name: 'settings',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Settings.Settings'
|
title: 'Settings'
|
||||||
},
|
},
|
||||||
component: Settings
|
component: Settings
|
||||||
},
|
},
|
||||||
|
@ -87,7 +87,7 @@ const router = new Router({
|
||||||
path: '/about',
|
path: '/about',
|
||||||
name: 'about',
|
name: 'about',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'About.About'
|
title: 'About'
|
||||||
},
|
},
|
||||||
component: About
|
component: About
|
||||||
},
|
},
|
||||||
|
@ -95,21 +95,21 @@ const router = new Router({
|
||||||
path: '/settings/profile',
|
path: '/settings/profile',
|
||||||
name: 'profileSettings',
|
name: 'profileSettings',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Profile.Profile Settings'
|
title: 'Profile Settings'
|
||||||
},
|
},
|
||||||
component: ProfileSettings
|
component: ProfileSettings
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/search/:query',
|
path: '/search/:query',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Search Filters.Search Results'
|
title: 'Search Results'
|
||||||
},
|
},
|
||||||
component: Search
|
component: Search
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/playlist/:id',
|
path: '/playlist/:id',
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Playlist.Playlist'
|
title: 'Playlist'
|
||||||
},
|
},
|
||||||
component: Playlist
|
component: Playlist
|
||||||
},
|
},
|
||||||
|
|
|
@ -366,7 +366,7 @@ $watched-transition-duration: 0.5s;
|
||||||
&:has(:focus-visible) .addToPlaylistIcon:not(.alwaysVisible),
|
&:has(:focus-visible) .addToPlaylistIcon:not(.alwaysVisible),
|
||||||
&:has(:focus-visible) .quickBookmarkVideoIcon:not(.alwaysVisible),
|
&:has(:focus-visible) .quickBookmarkVideoIcon:not(.alwaysVisible),
|
||||||
&:has(:focus-visible) .externalPlayerIcon {
|
&:has(:focus-visible) .externalPlayerIcon {
|
||||||
opacity: $thumbnail-overlay-opacity;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover .optionsButton,
|
&:hover .optionsButton,
|
||||||
|
@ -386,45 +386,6 @@ $watched-transition-duration: 0.5s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ft-list-channel {
|
|
||||||
.infoAndSubscribe {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row wrap;
|
|
||||||
justify-content: center;
|
|
||||||
inline-size: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.grid {
|
|
||||||
align-items: center;
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
.infoAndSubscribe {
|
|
||||||
flex-flow: column wrap;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.info {
|
|
||||||
margin-block-end: 12px;
|
|
||||||
|
|
||||||
.infoLine {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.list {
|
|
||||||
.infoAndSubscribe {
|
|
||||||
flex-flow: row wrap;
|
|
||||||
justify-content: center;
|
|
||||||
|
|
||||||
.channelSubscribeButton {
|
|
||||||
margin-block: auto;
|
|
||||||
margin-inline: 7px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.videoWatched,
|
.videoWatched,
|
||||||
.live,
|
.live,
|
||||||
.upcoming {
|
.upcoming {
|
||||||
|
|
|
@ -54,7 +54,7 @@ const actions = {
|
||||||
|
|
||||||
if (profiles.length === 0) {
|
if (profiles.length === 0) {
|
||||||
// Create a default profile and persist it
|
// Create a default profile and persist it
|
||||||
const randomColor = getRandomColor()
|
const randomColor = getRandomColor().value
|
||||||
const textColor = calculateColorLuminance(randomColor)
|
const textColor = calculateColorLuminance(randomColor)
|
||||||
const defaultProfile = {
|
const defaultProfile = {
|
||||||
_id: MAIN_PROFILE_ID,
|
_id: MAIN_PROFILE_ID,
|
||||||
|
|
|
@ -241,7 +241,6 @@ const state = {
|
||||||
proxyVideos: !process.env.IS_ELECTRON,
|
proxyVideos: !process.env.IS_ELECTRON,
|
||||||
region: 'US',
|
region: 'US',
|
||||||
rememberHistory: true,
|
rememberHistory: true,
|
||||||
removeVideoMetaFiles: true,
|
|
||||||
saveWatchedProgress: true,
|
saveWatchedProgress: true,
|
||||||
saveVideoHistoryWithLastViewedPlaylist: true,
|
saveVideoHistoryWithLastViewedPlaylist: true,
|
||||||
showFamilyFriendlyOnly: false,
|
showFamilyFriendlyOnly: false,
|
||||||
|
@ -354,7 +353,34 @@ const stateWithSideEffects = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await loadLocale(targetLocale)
|
const loadPromises = []
|
||||||
|
|
||||||
|
if (targetLocale !== defaultLocale) {
|
||||||
|
// "en-US" is used as a fallback for missing strings in other locales
|
||||||
|
loadPromises.push(
|
||||||
|
loadLocale(defaultLocale)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// "es" is used as a fallback for "es_AR" and "es-MX"
|
||||||
|
if (targetLocale === 'es_AR' || targetLocale === 'es-MX') {
|
||||||
|
loadPromises.push(
|
||||||
|
loadLocale('es')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// "pt" is used as a fallback for "pt-PT" and "pt-BR"
|
||||||
|
if (targetLocale === 'pt-PT' || targetLocale === 'pt-BR') {
|
||||||
|
loadPromises.push(
|
||||||
|
loadLocale('pt')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
loadPromises.push(
|
||||||
|
loadLocale(targetLocale)
|
||||||
|
)
|
||||||
|
|
||||||
|
await Promise.allSettled(loadPromises)
|
||||||
|
|
||||||
i18n.locale = targetLocale
|
i18n.locale = targetLocale
|
||||||
await dispatch('getRegionData', {
|
await dispatch('getRegionData', {
|
||||||
|
|
|
@ -47,7 +47,6 @@ const state = {
|
||||||
duration: ''
|
duration: ''
|
||||||
},
|
},
|
||||||
externalPlayerNames: [],
|
externalPlayerNames: [],
|
||||||
externalPlayerNameTranslationKeys: [],
|
|
||||||
externalPlayerValues: [],
|
externalPlayerValues: [],
|
||||||
externalPlayerCmdArguments: {}
|
externalPlayerCmdArguments: {}
|
||||||
}
|
}
|
||||||
|
@ -133,10 +132,6 @@ const getters = {
|
||||||
return state.externalPlayerNames
|
return state.externalPlayerNames
|
||||||
},
|
},
|
||||||
|
|
||||||
getExternalPlayerNameTranslationKeys () {
|
|
||||||
return state.externalPlayerNameTranslationKeys
|
|
||||||
},
|
|
||||||
|
|
||||||
getExternalPlayerValues () {
|
getExternalPlayerValues () {
|
||||||
return state.externalPlayerValues
|
return state.externalPlayerValues
|
||||||
},
|
},
|
||||||
|
@ -262,7 +257,7 @@ const actions = {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parsedString !== replaceFilenameForbiddenChars(parsedString)) {
|
if (parsedString !== replaceFilenameForbiddenChars(parsedString)) {
|
||||||
reject(new Error('Forbidden Characters')) // use message as translation key
|
reject(new Error(i18n.t('Settings.Player Settings.Screenshot.Error.Forbidden Characters')))
|
||||||
}
|
}
|
||||||
|
|
||||||
let filename
|
let filename
|
||||||
|
@ -274,7 +269,7 @@ const actions = {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!filename) {
|
if (!filename) {
|
||||||
reject(new Error('Empty File Name'))
|
reject(new Error(i18n.t('Settings.Player Settings.Screenshot.Error.Empty File Name')))
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve(parsedString)
|
resolve(parsedString)
|
||||||
|
@ -603,7 +598,7 @@ const actions = {
|
||||||
const fileData = await fs.readFile(`${fileLocation}${fileName}`)
|
const fileData = await fs.readFile(`${fileLocation}${fileName}`)
|
||||||
|
|
||||||
const externalPlayerMap = JSON.parse(fileData).map((entry) => {
|
const externalPlayerMap = JSON.parse(fileData).map((entry) => {
|
||||||
return { name: entry.name, nameTranslationKey: entry.nameTranslationKey, value: entry.value, cmdArguments: entry.cmdArguments }
|
return { name: entry.name, value: entry.value, cmdArguments: entry.cmdArguments }
|
||||||
})
|
})
|
||||||
// Sort external players alphabetically & case-insensitive, keep default entry at the top
|
// Sort external players alphabetically & case-insensitive, keep default entry at the top
|
||||||
const playerNone = externalPlayerMap.shift()
|
const playerNone = externalPlayerMap.shift()
|
||||||
|
@ -611,7 +606,6 @@ const actions = {
|
||||||
externalPlayerMap.unshift(playerNone)
|
externalPlayerMap.unshift(playerNone)
|
||||||
|
|
||||||
const externalPlayerNames = externalPlayerMap.map((entry) => { return entry.name })
|
const externalPlayerNames = externalPlayerMap.map((entry) => { return entry.name })
|
||||||
const externalPlayerNameTranslationKeys = externalPlayerMap.map((entry) => { return entry.nameTranslationKey })
|
|
||||||
const externalPlayerValues = externalPlayerMap.map((entry) => { return entry.value })
|
const externalPlayerValues = externalPlayerMap.map((entry) => { return entry.value })
|
||||||
const externalPlayerCmdArguments = externalPlayerMap.reduce((result, item) => {
|
const externalPlayerCmdArguments = externalPlayerMap.reduce((result, item) => {
|
||||||
result[item.value] = item.cmdArguments
|
result[item.value] = item.cmdArguments
|
||||||
|
@ -619,7 +613,6 @@ const actions = {
|
||||||
}, {})
|
}, {})
|
||||||
|
|
||||||
commit('setExternalPlayerNames', externalPlayerNames)
|
commit('setExternalPlayerNames', externalPlayerNames)
|
||||||
commit('setExternalPlayerNameTranslationKeys', externalPlayerNameTranslationKeys)
|
|
||||||
commit('setExternalPlayerValues', externalPlayerValues)
|
commit('setExternalPlayerValues', externalPlayerValues)
|
||||||
commit('setExternalPlayerCmdArguments', externalPlayerCmdArguments)
|
commit('setExternalPlayerCmdArguments', externalPlayerCmdArguments)
|
||||||
},
|
},
|
||||||
|
@ -667,7 +660,7 @@ const actions = {
|
||||||
args.push(cmdArgs.startOffset, Math.trunc(payload.watchProgress))
|
args.push(cmdArgs.startOffset, Math.trunc(payload.watchProgress))
|
||||||
}
|
}
|
||||||
} else if (!ignoreWarnings) {
|
} else if (!ignoreWarnings) {
|
||||||
showExternalPlayerUnsupportedActionToast(externalPlayer, 'starting video at offset')
|
showExternalPlayerUnsupportedActionToast(externalPlayer, i18n.t('Video.External Player.Unsupported Actions.starting video at offset'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,7 +668,7 @@ const actions = {
|
||||||
if (typeof cmdArgs.playbackRate === 'string') {
|
if (typeof cmdArgs.playbackRate === 'string') {
|
||||||
args.push(`${cmdArgs.playbackRate}${payload.playbackRate}`)
|
args.push(`${cmdArgs.playbackRate}${payload.playbackRate}`)
|
||||||
} else if (!ignoreWarnings) {
|
} else if (!ignoreWarnings) {
|
||||||
showExternalPlayerUnsupportedActionToast(externalPlayer, 'setting a playback rate')
|
showExternalPlayerUnsupportedActionToast(externalPlayer, i18n.t('Video.External Player.Unsupported Actions.setting a playback rate'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -685,7 +678,7 @@ const actions = {
|
||||||
if (typeof cmdArgs.playlistIndex === 'string') {
|
if (typeof cmdArgs.playlistIndex === 'string') {
|
||||||
args.push(`${cmdArgs.playlistIndex}${payload.playlistIndex}`)
|
args.push(`${cmdArgs.playlistIndex}${payload.playlistIndex}`)
|
||||||
} else if (!ignoreWarnings) {
|
} else if (!ignoreWarnings) {
|
||||||
showExternalPlayerUnsupportedActionToast(externalPlayer, 'opening specific video in a playlist (falling back to opening the video)')
|
showExternalPlayerUnsupportedActionToast(externalPlayer, i18n.t('Video.External Player.Unsupported Actions.opening specific video in a playlist (falling back to opening the video)'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -693,7 +686,7 @@ const actions = {
|
||||||
if (typeof cmdArgs.playlistReverse === 'string') {
|
if (typeof cmdArgs.playlistReverse === 'string') {
|
||||||
args.push(cmdArgs.playlistReverse)
|
args.push(cmdArgs.playlistReverse)
|
||||||
} else if (!ignoreWarnings) {
|
} else if (!ignoreWarnings) {
|
||||||
showExternalPlayerUnsupportedActionToast(externalPlayer, 'reversing playlists')
|
showExternalPlayerUnsupportedActionToast(externalPlayer, i18n.t('Video.External Player.Unsupported Actions.reversing playlists'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -701,7 +694,7 @@ const actions = {
|
||||||
if (typeof cmdArgs.playlistShuffle === 'string') {
|
if (typeof cmdArgs.playlistShuffle === 'string') {
|
||||||
args.push(cmdArgs.playlistShuffle)
|
args.push(cmdArgs.playlistShuffle)
|
||||||
} else if (!ignoreWarnings) {
|
} else if (!ignoreWarnings) {
|
||||||
showExternalPlayerUnsupportedActionToast(externalPlayer, 'shuffling playlists')
|
showExternalPlayerUnsupportedActionToast(externalPlayer, i18n.t('Video.External Player.Unsupported Actions.shuffling playlists'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -709,7 +702,7 @@ const actions = {
|
||||||
if (typeof cmdArgs.playlistLoop === 'string') {
|
if (typeof cmdArgs.playlistLoop === 'string') {
|
||||||
args.push(cmdArgs.playlistLoop)
|
args.push(cmdArgs.playlistLoop)
|
||||||
} else if (!ignoreWarnings) {
|
} else if (!ignoreWarnings) {
|
||||||
showExternalPlayerUnsupportedActionToast(externalPlayer, 'looping playlists')
|
showExternalPlayerUnsupportedActionToast(externalPlayer, i18n.t('Video.External Player.Unsupported Actions.looping playlists'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -721,7 +714,7 @@ const actions = {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (payload.playlistId != null && payload.playlistId !== '' && !ignoreWarnings) {
|
if (payload.playlistId != null && payload.playlistId !== '' && !ignoreWarnings) {
|
||||||
showExternalPlayerUnsupportedActionToast(externalPlayer, 'opening playlists')
|
showExternalPlayerUnsupportedActionToast(externalPlayer, i18n.t('Video.External Player.Unsupported Actions.opening playlists'))
|
||||||
}
|
}
|
||||||
if (payload.videoId != null) {
|
if (payload.videoId != null) {
|
||||||
args.push(`${cmdArgs.videoUrl}https://www.youtube.com/watch?v=${payload.videoId}`)
|
args.push(`${cmdArgs.videoUrl}https://www.youtube.com/watch?v=${payload.videoId}`)
|
||||||
|
@ -874,10 +867,6 @@ const mutations = {
|
||||||
state.externalPlayerNames = value
|
state.externalPlayerNames = value
|
||||||
},
|
},
|
||||||
|
|
||||||
setExternalPlayerNameTranslationKeys (state, value) {
|
|
||||||
state.externalPlayerNameTranslationKeys = value
|
|
||||||
},
|
|
||||||
|
|
||||||
setExternalPlayerValues (state, value) {
|
setExternalPlayerValues (state, value) {
|
||||||
state.externalPlayerValues = value
|
state.externalPlayerValues = value
|
||||||
},
|
},
|
||||||
|
|
|
@ -906,7 +906,16 @@ export default defineComponent({
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
this.latestLive = parseLocalChannelVideos(liveTab.videos, this.id, this.channelName)
|
// work around YouTube bug where it will return a bunch of responses with only continuations in them
|
||||||
|
// e.g. https://www.youtube.com/@TWLIVES/streams
|
||||||
|
|
||||||
|
let videos = liveTab.videos
|
||||||
|
while (videos.length === 0 && liveTab.has_continuation) {
|
||||||
|
liveTab = await liveTab.getContinuation()
|
||||||
|
videos = liveTab.videos
|
||||||
|
}
|
||||||
|
|
||||||
|
this.latestLive = parseLocalChannelVideos(videos, this.id, this.channelName)
|
||||||
this.liveContinuationData = liveTab.has_continuation ? liveTab : null
|
this.liveContinuationData = liveTab.has_continuation ? liveTab : null
|
||||||
this.isElementListLoading = false
|
this.isElementListLoading = false
|
||||||
|
|
||||||
|
@ -1920,6 +1929,7 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
|
|
||||||
invidiousAPICall(payload).then((response) => {
|
invidiousAPICall(payload).then((response) => {
|
||||||
|
setPublishedTimestampsInvidious(response.filter(item => item.type === 'video'))
|
||||||
if (this.hideChannelPlaylists) {
|
if (this.hideChannelPlaylists) {
|
||||||
this.searchResults = this.searchResults.concat(response.filter(item => item.type !== 'playlist'))
|
this.searchResults = this.searchResults.concat(response.filter(item => item.type !== 'playlist'))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -93,11 +93,13 @@ export default defineComponent({
|
||||||
} else {
|
} else {
|
||||||
const lowerCaseQuery = this.query.toLowerCase()
|
const lowerCaseQuery = this.query.toLowerCase()
|
||||||
const filteredQuery = this.historyCacheSorted.filter((video) => {
|
const filteredQuery = this.historyCacheSorted.filter((video) => {
|
||||||
if (typeof (video.title) !== 'string' || typeof (video.author) !== 'string') {
|
if (typeof (video.title) === 'string' && video.title.toLowerCase().includes(lowerCaseQuery)) {
|
||||||
return false
|
return true
|
||||||
} else {
|
} else if (typeof (video.author) === 'string' && video.author.toLowerCase().includes(lowerCaseQuery)) {
|
||||||
return video.title.toLowerCase().includes(lowerCaseQuery) || video.author.toLowerCase().includes(lowerCaseQuery)
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}).sort((a, b) => {
|
}).sort((a, b) => {
|
||||||
return b.timeWatched - a.timeWatched
|
return b.timeWatched - a.timeWatched
|
||||||
})
|
})
|
||||||
|
|
|
@ -145,7 +145,13 @@ export default defineComponent({
|
||||||
if (this.processedVideoSearchQuery === '') { return this.playlistItems }
|
if (this.processedVideoSearchQuery === '') { return this.playlistItems }
|
||||||
|
|
||||||
return this.playlistItems.filter((v) => {
|
return this.playlistItems.filter((v) => {
|
||||||
return v.title.toLowerCase().includes(this.processedVideoSearchQuery)
|
if (typeof (v.title) === 'string' && v.title.toLowerCase().includes(this.processedVideoSearchQuery)) {
|
||||||
|
return true
|
||||||
|
} else if (typeof (v.author) === 'string' && v.author.toLowerCase().includes(this.processedVideoSearchQuery)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
visiblePlaylistItems: function () {
|
visiblePlaylistItems: function () {
|
||||||
|
|
|
@ -52,7 +52,7 @@ export default defineComponent({
|
||||||
methods: {
|
methods: {
|
||||||
openSettingsForNewProfile: function () {
|
openSettingsForNewProfile: function () {
|
||||||
this.isNewProfileOpen = true
|
this.isNewProfileOpen = true
|
||||||
const bgColor = getRandomColor()
|
const bgColor = getRandomColor().value
|
||||||
const textColor = calculateColorLuminance(bgColor)
|
const textColor = calculateColorLuminance(bgColor)
|
||||||
this.openSettingsProfile = {
|
this.openSettingsProfile = {
|
||||||
name: '',
|
name: '',
|
||||||
|
|
|
@ -223,7 +223,7 @@ export default defineComponent({
|
||||||
if (typeof (playlist.playlistName) !== 'string') { return false }
|
if (typeof (playlist.playlistName) !== 'string') { return false }
|
||||||
|
|
||||||
if (this.doSearchPlaylistsWithMatchingVideos) {
|
if (this.doSearchPlaylistsWithMatchingVideos) {
|
||||||
if (playlist.videos.some((v) => v.title.toLowerCase().includes(this.lowerCaseQuery))) {
|
if (playlist.videos.some((v) => v.author.toLowerCase().includes(this.lowerCaseQuery) || v.title.toLowerCase().includes(this.lowerCaseQuery))) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { defineComponent } from 'vue'
|
import { defineComponent } from 'vue'
|
||||||
import { mapActions } from 'vuex'
|
import { mapActions } from 'vuex'
|
||||||
import fs from 'fs/promises'
|
|
||||||
import FtLoader from '../../components/ft-loader/ft-loader.vue'
|
import FtLoader from '../../components/ft-loader/ft-loader.vue'
|
||||||
import FtVideoPlayer from '../../components/ft-video-player/ft-video-player.vue'
|
import FtVideoPlayer from '../../components/ft-video-player/ft-video-player.vue'
|
||||||
import WatchVideoInfo from '../../components/watch-video-info/watch-video-info.vue'
|
import WatchVideoInfo from '../../components/watch-video-info/watch-video-info.vue'
|
||||||
|
@ -12,14 +11,12 @@ import WatchVideoPlaylist from '../../components/watch-video-playlist/watch-vide
|
||||||
import WatchVideoRecommendations from '../../components/watch-video-recommendations/watch-video-recommendations.vue'
|
import WatchVideoRecommendations from '../../components/watch-video-recommendations/watch-video-recommendations.vue'
|
||||||
import FtAgeRestricted from '../../components/ft-age-restricted/ft-age-restricted.vue'
|
import FtAgeRestricted from '../../components/ft-age-restricted/ft-age-restricted.vue'
|
||||||
import packageDetails from '../../../../package.json'
|
import packageDetails from '../../../../package.json'
|
||||||
import { pathExists } from '../../helpers/filesystem'
|
|
||||||
import {
|
import {
|
||||||
buildVTTFileLocally,
|
buildVTTFileLocally,
|
||||||
copyToClipboard,
|
copyToClipboard,
|
||||||
formatDurationAsTimestamp,
|
formatDurationAsTimestamp,
|
||||||
formatNumber,
|
formatNumber,
|
||||||
getFormatsFromHLSManifest,
|
getFormatsFromHLSManifest,
|
||||||
getUserDataPath,
|
|
||||||
showToast
|
showToast
|
||||||
} from '../../helpers/utils'
|
} from '../../helpers/utils'
|
||||||
import {
|
import {
|
||||||
|
@ -141,9 +138,6 @@ export default defineComponent({
|
||||||
rememberHistory: function () {
|
rememberHistory: function () {
|
||||||
return this.$store.getters.getRememberHistory
|
return this.$store.getters.getRememberHistory
|
||||||
},
|
},
|
||||||
removeVideoMetaFiles: function () {
|
|
||||||
return this.$store.getters.getRemoveVideoMetaFiles
|
|
||||||
},
|
|
||||||
saveWatchedProgress: function () {
|
saveWatchedProgress: function () {
|
||||||
return this.$store.getters.getSaveWatchedProgress
|
return this.$store.getters.getSaveWatchedProgress
|
||||||
},
|
},
|
||||||
|
@ -707,7 +701,7 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.storyboards?.type === 'PlayerStoryboardSpec') {
|
if (result.storyboards?.type === 'PlayerStoryboardSpec') {
|
||||||
await this.createLocalStoryboardUrls(result.storyboards.boards.at(-1))
|
this.createLocalStoryboardUrls(result.storyboards.boards.at(-1))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1404,9 +1398,7 @@ export default defineComponent({
|
||||||
this.playNextCountDownIntervalId = setInterval(showCountDownMessage, 1000)
|
this.playNextCountDownIntervalId = setInterval(showCountDownMessage, 1000)
|
||||||
},
|
},
|
||||||
|
|
||||||
handleRouteChange: async function (videoId) {
|
handleRouteChange: function (videoId) {
|
||||||
// if the user navigates to another video, the ipc call for the userdata path
|
|
||||||
// takes long enough for the video id to have already changed to the new one
|
|
||||||
// receiving it as an arg instead of accessing it ourselves means we always have the right one
|
// receiving it as an arg instead of accessing it ourselves means we always have the right one
|
||||||
|
|
||||||
clearTimeout(this.playNextTimeout)
|
clearTimeout(this.playNextTimeout)
|
||||||
|
@ -1437,21 +1429,9 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.env.IS_ELECTRON && this.removeVideoMetaFiles) {
|
if (this.videoStoryboardSrc.startsWith('blob:')) {
|
||||||
if (process.env.NODE_ENV === 'development') {
|
URL.revokeObjectURL(this.videoStoryboardSrc)
|
||||||
const vttFileLocation = `static/storyboards/${videoId}.vtt`
|
this.videoStoryboardSrc = ''
|
||||||
// only delete the file it actually exists
|
|
||||||
if (await pathExists(vttFileLocation)) {
|
|
||||||
await fs.rm(vttFileLocation)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const userData = await getUserDataPath()
|
|
||||||
const vttFileLocation = `${userData}/storyboards/${videoId}.vtt`
|
|
||||||
|
|
||||||
if (await pathExists(vttFileLocation)) {
|
|
||||||
await fs.rm(vttFileLocation)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1616,36 +1596,14 @@ export default defineComponent({
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
createLocalStoryboardUrls: async function (storyboardInfo) {
|
createLocalStoryboardUrls: function (storyboardInfo) {
|
||||||
const results = buildVTTFileLocally(storyboardInfo, this.videoLengthSeconds)
|
const results = buildVTTFileLocally(storyboardInfo, this.videoLengthSeconds)
|
||||||
const userData = await getUserDataPath()
|
|
||||||
let fileLocation
|
|
||||||
let uriSchema
|
|
||||||
|
|
||||||
// Dev mode doesn't have access to the file:// schema, so we access
|
// after the player migration, switch to using a data URI, as those don't need to be revoked
|
||||||
// storyboards differently when run in dev
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
|
||||||
fileLocation = `static/storyboards/${this.videoId}.vtt`
|
|
||||||
uriSchema = `storyboards/${this.videoId}.vtt`
|
|
||||||
// if the location does not exist, writeFile will not create the directory, so we have to do that manually
|
|
||||||
if (!(await pathExists('static/storyboards/'))) {
|
|
||||||
fs.mkdir('static/storyboards/')
|
|
||||||
} else if (await pathExists(fileLocation)) {
|
|
||||||
await fs.rm(fileLocation)
|
|
||||||
}
|
|
||||||
|
|
||||||
await fs.writeFile(fileLocation, results)
|
const blob = new Blob([results], { type: 'text/vtt;charset=UTF-8' })
|
||||||
} else {
|
|
||||||
if (!(await pathExists(`${userData}/storyboards/`))) {
|
|
||||||
await fs.mkdir(`${userData}/storyboards/`)
|
|
||||||
}
|
|
||||||
fileLocation = `${userData}/storyboards/${this.videoId}.vtt`
|
|
||||||
uriSchema = `file://${fileLocation}`
|
|
||||||
|
|
||||||
await fs.writeFile(fileLocation, results)
|
this.videoStoryboardSrc = URL.createObjectURL(blob)
|
||||||
}
|
|
||||||
|
|
||||||
this.videoStoryboardSrc = uriSchema
|
|
||||||
},
|
},
|
||||||
|
|
||||||
tryAddingTranslatedLocaleCaption: function (captionTracks, locale, baseUrl) {
|
tryAddingTranslatedLocaleCaption: function (captionTracks, locale, baseUrl) {
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "None",
|
"name": "None",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.None.Name",
|
|
||||||
"value": "",
|
"value": "",
|
||||||
"cmdArguments": null
|
"cmdArguments": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mpv",
|
"name": "mpv",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.mpv.Name",
|
|
||||||
"value": "mpv",
|
"value": "mpv",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "mpv",
|
"defaultExecutable": "mpv",
|
||||||
|
@ -25,7 +23,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "VLC",
|
"name": "VLC",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.VLC.Name",
|
|
||||||
"value": "vlc",
|
"value": "vlc",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "vlc",
|
"defaultExecutable": "vlc",
|
||||||
|
@ -43,7 +40,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "iina",
|
"name": "iina",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.iina.Name",
|
|
||||||
"value": "iina",
|
"value": "iina",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "iina",
|
"defaultExecutable": "iina",
|
||||||
|
@ -61,7 +57,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "SMPlayer",
|
"name": "SMPlayer",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.SMPlayer.Name",
|
|
||||||
"value": "smplayer",
|
"value": "smplayer",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "smplayer",
|
"defaultExecutable": "smplayer",
|
||||||
|
@ -79,7 +74,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "MPC-BE",
|
"name": "MPC-BE",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.MPC-BE.Name",
|
|
||||||
"value": "mpc-be",
|
"value": "mpc-be",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "mpc-be64",
|
"defaultExecutable": "mpc-be64",
|
||||||
|
@ -97,7 +91,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "MPC-HC",
|
"name": "MPC-HC",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.MPC-HC.Name",
|
|
||||||
"value": "mpc-hc",
|
"value": "mpc-hc",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "mpc-hc64",
|
"defaultExecutable": "mpc-hc64",
|
||||||
|
@ -115,7 +108,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "PotPlayer",
|
"name": "PotPlayer",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.PotPlayer.Name",
|
|
||||||
"value": "potplayer",
|
"value": "potplayer",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "potplayermini64",
|
"defaultExecutable": "potplayermini64",
|
||||||
|
@ -133,7 +125,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Clapper",
|
"name": "Clapper",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.Clapper.Name",
|
|
||||||
"value": "clapper",
|
"value": "clapper",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "clapper",
|
"defaultExecutable": "clapper",
|
||||||
|
@ -151,7 +142,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Celluloid",
|
"name": "Celluloid",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.Celluloid.Name",
|
|
||||||
"value": "celluloid",
|
"value": "celluloid",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "celluloid",
|
"defaultExecutable": "celluloid",
|
||||||
|
@ -169,7 +159,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Haruna",
|
"name": "Haruna",
|
||||||
"nameTranslationKey": "Settings.External Player Settings.Players.Haruna.Name",
|
|
||||||
"value": "haruna",
|
"value": "haruna",
|
||||||
"cmdArguments": {
|
"cmdArguments": {
|
||||||
"defaultExecutable": "haruna",
|
"defaultExecutable": "haruna",
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'العربية'
|
Locale Name: 'العربية'
|
||||||
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.': >-
|
||||||
هذا الجزء من التطبيق ليس جاهزاً بعد. عُد لاحقاً عندما يتم إحراز تقدم.
|
هذا الجزء من التطبيق ليس جاهزاً بعد. عُد لاحقاً عندما يتم إحراز تقدم.
|
||||||
|
@ -399,7 +398,6 @@ Settings:
|
||||||
أنت متأكد أنك تريد إزالة جميع الاشتراكات والملفات الشخصية؟ لا يمكن التراجع عن
|
أنت متأكد أنك تريد إزالة جميع الاشتراكات والملفات الشخصية؟ لا يمكن التراجع عن
|
||||||
هذا.
|
هذا.
|
||||||
Remove All Subscriptions / Profiles: إزالة جميع الاشتراكات \ الملفات الشخصية
|
Remove All Subscriptions / Profiles: إزالة جميع الاشتراكات \ الملفات الشخصية
|
||||||
Automatically Remove Video Meta Files: إزالة ملفات تعريف الفيديو تلقائيًا
|
|
||||||
Save Watched Videos With Last Viewed Playlist: حفظ مقاطع الفيديو التي تمت مشاهدتها
|
Save Watched Videos With Last Viewed Playlist: حفظ مقاطع الفيديو التي تمت مشاهدتها
|
||||||
مع آخر قائمة تشغيل تم عرضها
|
مع آخر قائمة تشغيل تم عرضها
|
||||||
All playlists have been removed: تمت إزالة جميع قوائم التشغيل
|
All playlists have been removed: تمت إزالة جميع قوائم التشغيل
|
||||||
|
@ -1068,9 +1066,6 @@ Tooltips:
|
||||||
Allow DASH AV1 formats: قد تبدو تنسيقات DASH AV1 أفضل من تنسيقات DASH H.264. تتطلب
|
Allow DASH AV1 formats: قد تبدو تنسيقات DASH AV1 أفضل من تنسيقات DASH H.264. تتطلب
|
||||||
تنسيقات DASH AV1 مزيدا من الطاقة للتشغيل! وهي غير متوفرة في جميع مقاطع الفيديو
|
تنسيقات DASH AV1 مزيدا من الطاقة للتشغيل! وهي غير متوفرة في جميع مقاطع الفيديو
|
||||||
، وفي هذه الحالات سيستخدم المشغل تنسيقات DASH H.264 بدلا من ذلك.
|
، وفي هذه الحالات سيستخدم المشغل تنسيقات DASH H.264 بدلا من ذلك.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: عندما يمكن، يحذف Freetube تلقائيًا ملفات التعريف التي
|
|
||||||
تم إنشاؤها أثناء تشغيل الفيديو ، عندما تكون صفحة المشاهدة مغلقة.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: عند تفعيلها، سوف يستخدم فريتيوب طريقة RSS بدلًا من طريقته
|
Fetch Feeds from RSS: عند تفعيلها، سوف يستخدم فريتيوب طريقة RSS بدلًا من طريقته
|
||||||
المعتادة لجلب صفحة اشتراكاتك. طريقة RSS أسرع وتتخطى حجب الآي بي IP، لكنها لا
|
المعتادة لجلب صفحة اشتراكاتك. طريقة RSS أسرع وتتخطى حجب الآي بي IP، لكنها لا
|
||||||
|
@ -1175,3 +1170,5 @@ Age Restricted:
|
||||||
This channel is age restricted: هذه القناة مقيدة بالعمر
|
This channel is age restricted: هذه القناة مقيدة بالعمر
|
||||||
This video is age restricted: هذا الفيديو مقيد بالفئة العمرية
|
This video is age restricted: هذا الفيديو مقيد بالفئة العمرية
|
||||||
Close Banner: إغلاق الشعار
|
Close Banner: إغلاق الشعار
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
FreeTube: 'ফ্ৰীটিউব'
|
|
||||||
# Currently on Subscriptions, Playlists, and History
|
# Currently on Subscriptions, Playlists, and History
|
||||||
File: 'ফাইল'
|
File: 'ফাইল'
|
||||||
Quit: 'অন্ত কৰক'
|
Quit: 'অন্ত কৰক'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Беларуская'
|
Locale Name: 'Беларуская'
|
||||||
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.': >-
|
||||||
Гэтая частка праграмы яшчэ не гатова. Прыходзьце пазней.
|
Гэтая частка праграмы яшчэ не гатова. Прыходзьце пазней.
|
||||||
|
@ -307,7 +306,6 @@ Settings:
|
||||||
Remember History: ''
|
Remember History: ''
|
||||||
Save Watched Progress: ''
|
Save Watched Progress: ''
|
||||||
Save Watched Videos With Last Viewed Playlist: ''
|
Save Watched Videos With Last Viewed Playlist: ''
|
||||||
Automatically Remove Video Meta Files: ''
|
|
||||||
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: ''
|
||||||
|
@ -802,8 +800,6 @@ Tooltips:
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: ''
|
Fetch Feeds from RSS: ''
|
||||||
Fetch Automatically: ''
|
Fetch Automatically: ''
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: ''
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: ''
|
Replace HTTP Cache: ''
|
||||||
SponsorBlock Settings:
|
SponsorBlock Settings:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Български'
|
Locale Name: 'Български'
|
||||||
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.': >-
|
||||||
Тази част от приложението все още не е готова. Върнете се по-късно, когато може
|
Тази част от приложението все още не е готова. Върнете се по-късно, когато може
|
||||||
|
@ -415,7 +414,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Сигурни
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Сигурни
|
||||||
ли сте, че искате да премахнете всички абонаменти и профили? Това не може да
|
ли сте, че искате да премахнете всички абонаменти и профили? Това не може да
|
||||||
бъде възстановено.'
|
бъде възстановено.'
|
||||||
Automatically Remove Video Meta Files: Автоматично премахване на видео метафайловете
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Запазване на гледани видеа с последно
|
Save Watched Videos With Last Viewed Playlist: Запазване на гледани видеа с последно
|
||||||
гледан плейлист
|
гледан плейлист
|
||||||
Remove All Playlists: Премахване на всички плейлисти
|
Remove All Playlists: Премахване на всички плейлисти
|
||||||
|
@ -1099,10 +1097,6 @@ Tooltips:
|
||||||
External Link Handling: "Избор на поведението по подразбиране, когато щракнете
|
External Link Handling: "Избор на поведението по подразбиране, когато щракнете
|
||||||
върху връзка, която не може да бъде отворена във FreeTube.\nПо подразбиране
|
върху връзка, която не може да бъде отворена във FreeTube.\nПо подразбиране
|
||||||
FreeTube ще отвори връзката в браузъра по подразбиране.\n"
|
FreeTube ще отвори връзката в браузъра по подразбиране.\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Когато страницата за гледане бъде затворена, FreeTube
|
|
||||||
автоматично ще изтрива метафайловете, създадени по време на възпроизвеждане
|
|
||||||
на видеото.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Всички персонализирани аргументи от командния
|
Custom External Player Arguments: Всички персонализирани аргументи от командния
|
||||||
ред, разделени с точка и запетая (";"), които искате да бъдат предадени на външния
|
ред, разделени с точка и запетая (";"), които искате да бъдат предадени на външния
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'বাংলা'
|
Locale Name: 'বাংলা'
|
||||||
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.': >-
|
||||||
অ্যাপের এই অংশটি এখনও প্রস্তুত নয়। পরে ফিরে এসো যখন অগ্রগতি হয়েছে।
|
অ্যাপের এই অংশটি এখনও প্রস্তুত নয়। পরে ফিরে এসো যখন অগ্রগতি হয়েছে।
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Bosanski'
|
Locale Name: 'Bosanski'
|
||||||
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.': >-
|
||||||
Ovaj dio aplikacije još nije spreman. Vratite se kasnije kad se postigne napredak.
|
Ovaj dio aplikacije još nije spreman. Vratite se kasnije kad se postigne napredak.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'català'
|
Locale Name: 'català'
|
||||||
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.': >-
|
||||||
Aquesta secció de l'aplicació encara no està llesta. Torna més endavant quan s'hagin
|
Aquesta secció de l'aplicació encara no està llesta. Torna més endavant quan s'hagin
|
||||||
|
@ -266,8 +265,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Esteu
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Esteu
|
||||||
segur que voleu esborrar totes les subscripcions i perfils? Aquesta acció no
|
segur que voleu esborrar totes les subscripcions i perfils? Aquesta acció no
|
||||||
es pot desfer.'
|
es pot desfer.'
|
||||||
Automatically Remove Video Meta Files: Suprimeix automàticament les metadades
|
|
||||||
dels vídeos
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Configuració de les subscripcions'
|
Subscription Settings: 'Configuració de les subscripcions'
|
||||||
Hide Videos on Watch: 'Oculta els vídeos visualitzats'
|
Hide Videos on Watch: 'Oculta els vídeos visualitzats'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'ئیگلیزی (وڵاتە یەکگرتووەکانی ئەمریکا)'
|
Locale Name: 'ئیگلیزی (وڵاتە یەکگرتووەکانی ئەمریکا)'
|
||||||
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.': >-
|
||||||
بەشێک لە نەرمەواڵەکە هێشتا ئامادە نییە. کە ڕەوتەکە درووست کرا دووبارە وەرەوە.
|
بەشێک لە نەرمەواڵەکە هێشتا ئامادە نییە. کە ڕەوتەکە درووست کرا دووبارە وەرەوە.
|
||||||
|
@ -311,7 +310,6 @@ Settings:
|
||||||
Remember History: ''
|
Remember History: ''
|
||||||
Save Watched Progress: ''
|
Save Watched Progress: ''
|
||||||
Save Watched Videos With Last Viewed Playlist: ''
|
Save Watched Videos With Last Viewed Playlist: ''
|
||||||
Automatically Remove Video Meta Files: ''
|
|
||||||
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: ''
|
||||||
|
@ -818,8 +816,6 @@ Tooltips:
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: ''
|
Fetch Feeds from RSS: ''
|
||||||
Fetch Automatically: ''
|
Fetch Automatically: ''
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: ''
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: ''
|
Replace HTTP Cache: ''
|
||||||
SponsorBlock Settings:
|
SponsorBlock Settings:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Čeština'
|
Locale Name: 'Čeština'
|
||||||
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.': >-
|
||||||
Tato část aplikace ještě není hotova. Vraťte se později.
|
Tato část aplikace ještě není hotova. Vraťte se později.
|
||||||
|
@ -411,7 +410,6 @@ Settings:
|
||||||
Remove All Subscriptions / Profiles: 'Odstranit všechny odběry / profily'
|
Remove All Subscriptions / Profiles: 'Odstranit všechny odběry / profily'
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Opravdu
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Opravdu
|
||||||
chcete odstranit všechny odběry a profily? Tato akce je nevratná.'
|
chcete odstranit všechny odběry a profily? Tato akce je nevratná.'
|
||||||
Automatically Remove Video Meta Files: Automaticky odstranit meta soubory videa
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Uložit zhlédnutá videa s naposledy
|
Save Watched Videos With Last Viewed Playlist: Uložit zhlédnutá videa s naposledy
|
||||||
zobrazeným playlistem
|
zobrazeným playlistem
|
||||||
All playlists have been removed: Všechny playlisty byly odstraněny
|
All playlists have been removed: Všechny playlisty byly odstraněny
|
||||||
|
@ -1057,9 +1055,6 @@ Tooltips:
|
||||||
# Toast Messages
|
# Toast Messages
|
||||||
Fetch Automatically: Při povolení tohoto nastavení bude FreeTube automaticky načítat
|
Fetch Automatically: Při povolení tohoto nastavení bude FreeTube automaticky načítat
|
||||||
vaše odběry při otevření nového okna a při přepínání profilů.
|
vaše odběry při otevření nového okna a při přepínání profilů.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Pokud je povoleno, FreeTube automaticky odstraní meta
|
|
||||||
soubory vytvořené během přehrávání videa, když se stránka sledování zavře.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Ignore Warnings: Potlačuje varování, kdy současný externí přehrávač nepodporuje
|
Ignore Warnings: Potlačuje varování, kdy současný externí přehrávač nepodporuje
|
||||||
aktuální akci (např. obrácení seznamů skladeb apod.).
|
aktuální akci (např. obrácení seznamů skladeb apod.).
|
||||||
|
@ -1173,3 +1168,5 @@ Close Banner: Zavřít panel
|
||||||
Age Restricted:
|
Age Restricted:
|
||||||
This channel is age restricted: Tento kanál je omezen věkem
|
This channel is age restricted: Tento kanál je omezen věkem
|
||||||
This video is age restricted: Toto video je omezeno věkem
|
This video is age restricted: Toto video je omezeno věkem
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Cymraeg'
|
Locale Name: 'Cymraeg'
|
||||||
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.': >
|
||||||
|
|
||||||
|
@ -314,7 +313,6 @@ Settings:
|
||||||
Remember History: 'Cadw Hanes'
|
Remember History: 'Cadw Hanes'
|
||||||
Save Watched Progress: ''
|
Save Watched Progress: ''
|
||||||
Save Watched Videos With Last Viewed Playlist: ''
|
Save Watched Videos With Last Viewed Playlist: ''
|
||||||
Automatically Remove Video Meta Files: ''
|
|
||||||
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: ''
|
||||||
|
@ -820,8 +818,6 @@ Tooltips:
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: ''
|
Fetch Feeds from RSS: ''
|
||||||
Fetch Automatically: ''
|
Fetch Automatically: ''
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: ''
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: ''
|
Replace HTTP Cache: ''
|
||||||
SponsorBlock Settings:
|
SponsorBlock Settings:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'dansk'
|
Locale Name: 'dansk'
|
||||||
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.': >-
|
||||||
Denne del af app'en er ikke klar endnu. Kom tilbage senere, når der er gjort fremskridt.
|
Denne del af app'en er ikke klar endnu. Kom tilbage senere, når der er gjort fremskridt.
|
||||||
|
@ -383,7 +382,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Er
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Er
|
||||||
du sikker på, at du vil fjerne alle abonnementer og profiler? Dette kan ikke
|
du sikker på, at du vil fjerne alle abonnementer og profiler? Dette kan ikke
|
||||||
fortrydes.'
|
fortrydes.'
|
||||||
Automatically Remove Video Meta Files: Fjern Automatisk Video Metafiler
|
|
||||||
All playlists have been removed: Alle playlister blev fjernet
|
All playlists have been removed: Alle playlister blev fjernet
|
||||||
Are you sure you want to remove all your playlists?: Er du sikker på, at du vil
|
Are you sure you want to remove all your playlists?: Er du sikker på, at du vil
|
||||||
fjerne alle dine playlister?
|
fjerne alle dine playlister?
|
||||||
|
@ -1010,9 +1008,6 @@ Tooltips:
|
||||||
Advarsel: Invidious-indstillinger har ingen effekt på eksterne afspillere.'
|
Advarsel: Invidious-indstillinger har ingen effekt på eksterne afspillere.'
|
||||||
Ignore Warnings: Undertryk advarsler for når den eksterne afspiller ikke understøtter
|
Ignore Warnings: Undertryk advarsler for når den eksterne afspiller ikke understøtter
|
||||||
den gældende handling (fx vende playlister om, etc.).
|
den gældende handling (fx vende playlister om, etc.).
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Når det er aktiveret, sletter FreeTube automatisk metafiler
|
|
||||||
oprettet under videoafspilning, når siden lukkes.
|
|
||||||
Distraction Free Settings:
|
Distraction Free Settings:
|
||||||
Hide Channels: Indtast et kanal-ID for at skjule alle videoer, playlister og selve
|
Hide Channels: Indtast et kanal-ID for at skjule alle videoer, playlister og selve
|
||||||
kanalen fra at blive vist i søgning, trending, mest populære og anbefalet. Det
|
kanalen fra at blive vist i søgning, trending, mest populære og anbefalet. Det
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
FreeTube: FreeTube
|
|
||||||
# Currently on Subscriptions, Playlists, and History
|
# Currently on Subscriptions, Playlists, and History
|
||||||
'This part of the app is not ready yet. Come back later when progress has been made.': >-
|
'This part of the app is not ready yet. Come back later when progress has been made.': >-
|
||||||
Dieser Teil der App ist noch nicht bereit. Komme später wieder, wenn Fortschritte
|
Dieser Teil der App ist noch nicht bereit. Komme später wieder, wenn Fortschritte
|
||||||
|
@ -461,7 +460,6 @@ Settings:
|
||||||
du sicher, dass du alle Abos und Profile löschen möchtest? Diese Aktion kann
|
du sicher, dass du alle Abos und Profile löschen möchtest? Diese Aktion kann
|
||||||
nicht rückgängig gemacht werden.
|
nicht rückgängig gemacht werden.
|
||||||
Remove All Subscriptions / Profiles: Alle Abos / Profile entfernen
|
Remove All Subscriptions / Profiles: Alle Abos / Profile entfernen
|
||||||
Automatically Remove Video Meta Files: Video-Metadateien automatisch entfernen
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Angesehene Videos mit der zuletzt
|
Save Watched Videos With Last Viewed Playlist: Angesehene Videos mit der zuletzt
|
||||||
angesehenen Wiedergabeliste speichern
|
angesehenen Wiedergabeliste speichern
|
||||||
Remove All Playlists: Alle Wiedergabelisten entfernen
|
Remove All Playlists: Alle Wiedergabelisten entfernen
|
||||||
|
@ -1140,10 +1138,6 @@ Tooltips:
|
||||||
Die DASH AV1-Formate benötigen mehr Leistung für die Wiedergabe! Sie sind nicht
|
Die DASH AV1-Formate benötigen mehr Leistung für die Wiedergabe! Sie sind nicht
|
||||||
bei allen Videos verfügbar. In diesen Fällen verwendet der Abspieler stattdessen
|
bei allen Videos verfügbar. In diesen Fällen verwendet der Abspieler stattdessen
|
||||||
die DASH H.264-Formate.
|
die DASH H.264-Formate.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Wenn aktiviert, löscht FreeTube automatisch die während
|
|
||||||
der Videowiedergabe erstellten Metadateien, wenn die Abspielseite geschlossen
|
|
||||||
wird.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Alle benutzerdefinierten Befehlszeilenargumente,
|
Custom External Player Arguments: Alle benutzerdefinierten Befehlszeilenargumente,
|
||||||
getrennt durch Semikolon (';'), die an den externen Abspieler übergeben werden
|
getrennt durch Semikolon (';'), die an den externen Abspieler übergeben werden
|
||||||
|
@ -1249,3 +1243,5 @@ Close Banner: Banner schließen
|
||||||
Age Restricted:
|
Age Restricted:
|
||||||
This channel is age restricted: Dieser Kanal ist altersbeschränkt
|
This channel is age restricted: Dieser Kanal ist altersbeschränkt
|
||||||
This video is age restricted: Dieses Video ist altersbeschränkt
|
This video is age restricted: Dieses Video ist altersbeschränkt
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
checkmark: ✓
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Ελληνικά (EL)'
|
Locale Name: 'Ελληνικά (EL)'
|
||||||
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.': >-
|
||||||
Αυτό το μέρος της εφαρμογής δεν είναι ακόμη έτοιμο. Επιστρέψτε αργότερα όταν έχει
|
Αυτό το μέρος της εφαρμογής δεν είναι ακόμη έτοιμο. Επιστρέψτε αργότερα όταν έχει
|
||||||
|
@ -323,7 +322,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Είστε
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Είστε
|
||||||
βέβαιοι ότι θέλετε να καταργήσετε όλες τις συνδρομές και τα προφίλ; Αυτό δεν
|
βέβαιοι ότι θέλετε να καταργήσετε όλες τις συνδρομές και τα προφίλ; Αυτό δεν
|
||||||
μπορεί να αναιρεθεί.'
|
μπορεί να αναιρεθεί.'
|
||||||
Automatically Remove Video Meta Files: Αυτόματη αφαίρεση μετα-αρχείων βίντεο
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Αποθήκευση Βίντεο που Παρακολουθήσατε
|
Save Watched Videos With Last Viewed Playlist: Αποθήκευση Βίντεο που Παρακολουθήσατε
|
||||||
Με τη Λίστα Αναπαραγωγής Τελευταίας Προβολής
|
Με τη Λίστα Αναπαραγωγής Τελευταίας Προβολής
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
|
@ -1019,10 +1017,6 @@ Tooltips:
|
||||||
σε έναν σύνδεσμο, ο οποίος δεν μπορεί να ανοίξει στο FreeTube.\nΑπό προεπιλογή,
|
σε έναν σύνδεσμο, ο οποίος δεν μπορεί να ανοίξει στο FreeTube.\nΑπό προεπιλογή,
|
||||||
το FreeTube θα ανοίξει τον σύνδεσμο που έχει πατηθεί στο προεπιλεγμένο πρόγραμμα
|
το FreeTube θα ανοίξει τον σύνδεσμο που έχει πατηθεί στο προεπιλεγμένο πρόγραμμα
|
||||||
περιήγησης.\n"
|
περιήγησης.\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Όταν είναι ενεργοποιημένο, το FreeTube διαγράφει αυτόματα
|
|
||||||
τα μετα-αρχεία που δημιουργήθηκαν κατά την αναπαραγωγή βίντεο, όταν η σελίδα
|
|
||||||
παρακολούθησης είναι κλειστή.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Executable: Από προεπιλογή, το FreeTube θα υποθέσει ότι
|
Custom External Player Executable: Από προεπιλογή, το FreeTube θα υποθέσει ότι
|
||||||
το επιλεγμένο εξωτερικό πρόγραμμα αναπαραγωγής μπορεί να βρεθεί μέσω της μεταβλητής
|
το επιλεγμένο εξωτερικό πρόγραμμα αναπαραγωγής μπορεί να βρεθεί μέσω της μεταβλητής
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: English (US)
|
Locale Name: English (US)
|
||||||
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.': >-
|
||||||
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.
|
||||||
|
@ -417,7 +416,6 @@ Settings:
|
||||||
Remember History: Remember History
|
Remember History: Remember History
|
||||||
Save Watched Progress: Save Watched Progress
|
Save Watched Progress: Save Watched Progress
|
||||||
Save Watched Videos With Last Viewed Playlist: Save Watched Videos With Last Viewed Playlist
|
Save Watched Videos With Last Viewed Playlist: Save Watched Videos With Last Viewed Playlist
|
||||||
Automatically Remove Video Meta Files: Automatically Remove Video Meta Files
|
|
||||||
Clear Search Cache: Clear Search Cache
|
Clear Search Cache: Clear Search Cache
|
||||||
Are you sure you want to clear out your search cache?: Are you sure you want to
|
Are you sure you want to clear out your search cache?: Are you sure you want to
|
||||||
clear out your search cache?
|
clear out your search cache?
|
||||||
|
@ -1010,9 +1008,6 @@ Tooltips:
|
||||||
but doesn't provide certain information like video duration or live status
|
but doesn't provide certain information like video duration or live status
|
||||||
Fetch Automatically: When enabled, FreeTube will automatically fetch
|
Fetch Automatically: When enabled, FreeTube will automatically fetch
|
||||||
your subscription feed when a new window is opened and when switching profile.
|
your subscription feed when a new window is opened and when switching profile.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: When enabled, FreeTube automatically deletes meta files created during video playback,
|
|
||||||
when the watch page is closed.
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: Disables Electron's disk based HTTP cache and enables a custom in-memory image cache. Will lead to increased RAM usage.
|
Replace HTTP Cache: Disables Electron's disk based HTTP cache and enables a custom in-memory image cache. Will lead to increased RAM usage.
|
||||||
SponsorBlock Settings:
|
SponsorBlock Settings:
|
||||||
|
@ -1070,3 +1065,7 @@ Hashtag:
|
||||||
Yes: Yes
|
Yes: Yes
|
||||||
No: No
|
No: No
|
||||||
Ok: Ok
|
Ok: Ok
|
||||||
|
# symbol used to indicate that an item is correct
|
||||||
|
checkmark: ✓
|
||||||
|
# French is the only language that should change this (they have a space before the colon)
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'English (UK)'
|
Locale Name: 'English (UK)'
|
||||||
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.': >-
|
||||||
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.
|
||||||
|
@ -417,7 +416,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Are
|
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
|
you sure you want to remove all subscriptions and profiles? This cannot be
|
||||||
undone.'
|
undone.'
|
||||||
Automatically Remove Video Meta Files: Automatically Remove Video Meta Files
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Save Watched Videos With Last Viewed
|
Save Watched Videos With Last Viewed Playlist: Save Watched Videos With Last Viewed
|
||||||
Playlist
|
Playlist
|
||||||
Remove All Playlists: Remove all playlists
|
Remove All Playlists: Remove all playlists
|
||||||
|
@ -1084,9 +1082,6 @@ Tooltips:
|
||||||
Custom External Player Arguments: Any custom command line arguments, separated
|
Custom External Player Arguments: Any custom command line arguments, separated
|
||||||
by semicolons (';'), you want to be passed to the external player.
|
by semicolons (';'), you want to be passed to the external player.
|
||||||
DefaultCustomArgumentsTemplate: '(Default: ‘{defaultCustomArguments}’)'
|
DefaultCustomArgumentsTemplate: '(Default: ‘{defaultCustomArguments}’)'
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: When enabled, FreeTube automatically deletes meta files
|
|
||||||
created during video playback, when the watch page is closed.
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: Disables Electron's disk-based HTTP cache and enables a custom
|
Replace HTTP Cache: Disables Electron's disk-based HTTP cache and enables a custom
|
||||||
in-memory image cache. Will lead to increased RAM usage.
|
in-memory image cache. Will lead to increased RAM usage.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Esperanto'
|
Locale Name: 'Esperanto'
|
||||||
FreeTube: 'FreeTube'
|
|
||||||
# Currently on Subscriptions, Playlists, and History
|
# Currently on Subscriptions, Playlists, and History
|
||||||
File: 'Dosiero'
|
File: 'Dosiero'
|
||||||
Quit: 'Eliri'
|
Quit: 'Eliri'
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
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.': >-
|
||||||
Esta parte de la aplicación aún no está lista. Vuelva más tarde cuando se haya avanzado.
|
Esta parte de la aplicación aún no está lista. Vuelva más tarde cuando se haya avanzado.
|
||||||
|
@ -290,7 +289,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: ¿Estás
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: ¿Estás
|
||||||
seguro de que deseas eliminar todos los suscripciones y perfiles? Esto no puede
|
seguro de que deseas eliminar todos los suscripciones y perfiles? Esto no puede
|
||||||
ser deshecho.
|
ser deshecho.
|
||||||
Automatically Remove Video Meta Files: Borrar automáticamente metadatos del video
|
|
||||||
Data Settings:
|
Data Settings:
|
||||||
How do I import my subscriptions?: ¿Cómo puedo importar mis suscripciones?
|
How do I import my subscriptions?: ¿Cómo puedo importar mis suscripciones?
|
||||||
Export History: Exportar Historia
|
Export History: Exportar Historia
|
||||||
|
@ -796,9 +794,6 @@ Tooltips:
|
||||||
presionada la tecla Ctrl (tecla Comando en Mac) y haga clic izquierdo para reestablecer
|
presionada la tecla Ctrl (tecla Comando en Mac) y haga clic izquierdo para reestablecer
|
||||||
la velocidad de reproducción predeterminada (que es de 1x, a menos que la haya
|
la velocidad de reproducción predeterminada (que es de 1x, a menos que la haya
|
||||||
cambiado en configuración).
|
cambiado en configuración).
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Si se habilita, FreeTube borrará automáticamente los
|
|
||||||
metadatos creados al abrir el video, una vez que la ventana se cierre.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: Si se habilita, FreeTube usará RSS en lugar del método predeterminado
|
Fetch Feeds from RSS: Si se habilita, FreeTube usará RSS en lugar del método predeterminado
|
||||||
para recibir videos de sus suscripciones. RSS es más rápido y previene que bloqueen
|
para recibir videos de sus suscripciones. RSS es más rápido y previene que bloqueen
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'español (España)'
|
Locale Name: 'español (España)'
|
||||||
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.': >-
|
||||||
Esta parte de la aplicación aún no está lista. Vuelve más tarde cuando se hayan
|
Esta parte de la aplicación aún no está lista. Vuelve más tarde cuando se hayan
|
||||||
|
@ -413,8 +412,6 @@ Settings:
|
||||||
Remove All Subscriptions / Profiles: 'Borrar todas las suscripciones/perfiles'
|
Remove All Subscriptions / Profiles: 'Borrar todas las suscripciones/perfiles'
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: '¿Confirma
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: '¿Confirma
|
||||||
que quieres borrar todas las suscripciones y perfiles? Esta operación es irreversible.'
|
que quieres borrar todas las suscripciones y perfiles? Esta operación es irreversible.'
|
||||||
Automatically Remove Video Meta Files: Eliminar automáticamente los metadatos
|
|
||||||
de vídeos
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Guardar vídeos vistos con la última
|
Save Watched Videos With Last Viewed Playlist: Guardar vídeos vistos con la última
|
||||||
lista de reproducción vista
|
lista de reproducción vista
|
||||||
All playlists have been removed: Se han eliminado todas las listas de reproducción
|
All playlists have been removed: Se han eliminado todas las listas de reproducción
|
||||||
|
@ -1113,10 +1110,6 @@ Tooltips:
|
||||||
External Link Handling: "Elija el comportamiento por defecto cuando se hace clic
|
External Link Handling: "Elija el comportamiento por defecto cuando se hace clic
|
||||||
en un enlace que no se pueda abrirse en FreeTube. \nPor defecto, FreeTube abrirá
|
en un enlace que no se pueda abrirse en FreeTube. \nPor defecto, FreeTube abrirá
|
||||||
el enlace en el que se hizo clic en su navegador predeterminado.\n"
|
el enlace en el que se hizo clic en su navegador predeterminado.\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Cuando se active, FreeTube eliminará automáticamente
|
|
||||||
meta-archivos creados durante la reproducción del vídeo una vez se cierre la
|
|
||||||
página de visualizado.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Executable: Por defecto, FreeTube buscará el reproductor
|
Custom External Player Executable: Por defecto, FreeTube buscará el reproductor
|
||||||
externo seleccionado mediante la variable de entorno PATH, de no encontrarlo,
|
externo seleccionado mediante la variable de entorno PATH, de no encontrarlo,
|
||||||
|
@ -1219,3 +1212,5 @@ Close Banner: Cerrar el banner
|
||||||
Age Restricted:
|
Age Restricted:
|
||||||
This channel is age restricted: Este canal está restringido por edad
|
This channel is age restricted: Este canal está restringido por edad
|
||||||
This video is age restricted: Este vídeo está restringido por edad
|
This video is age restricted: Este vídeo está restringido por edad
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'español (Argentina)'
|
Locale Name: 'español (Argentina)'
|
||||||
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.': >-
|
||||||
Esta parte de la aplicación no esta lista por el momento. Vuelve después cuando
|
Esta parte de la aplicación no esta lista por el momento. Vuelve después cuando
|
||||||
|
@ -111,6 +110,11 @@ User Playlists:
|
||||||
Search bar placeholder: Buscar en la Lista de Reproducción
|
Search bar placeholder: Buscar en la Lista de Reproducción
|
||||||
Empty Search Message: No hay videos en esta lista de reproducción que coincidan
|
Empty Search Message: No hay videos en esta lista de reproducción que coincidan
|
||||||
con tu búsqueda
|
con tu búsqueda
|
||||||
|
This playlist currently has no videos.: Esta lista de reproducción no tiene videos.
|
||||||
|
Playlists with Matching Videos: Listas de reproducción con videos repetidos
|
||||||
|
Create New Playlist: Crear nueva lista de reproducción
|
||||||
|
Add to Favorites: Añadir a {playlistName}
|
||||||
|
Add to Playlist: Añadir a la lista de reproducción
|
||||||
History:
|
History:
|
||||||
# On History Page
|
# On History Page
|
||||||
History: 'Historial'
|
History: 'Historial'
|
||||||
|
@ -296,7 +300,6 @@ Settings:
|
||||||
Remove All Subscriptions / Profiles: 'Remover todas las suscripciones / perfiles'
|
Remove All Subscriptions / Profiles: 'Remover todas las suscripciones / perfiles'
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: '¿Realmente
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: '¿Realmente
|
||||||
querés remover todas las suscripciones y perfiles? Esta acción no puede deshacerse.'
|
querés remover todas las suscripciones y perfiles? Esta acción no puede deshacerse.'
|
||||||
Automatically Remove Video Meta Files: Borrar automáticamente metadatos del video
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Guardar videos vistos con la última
|
Save Watched Videos With Last Viewed Playlist: Guardar videos vistos con la última
|
||||||
lista de reproducción vista
|
lista de reproducción vista
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
|
@ -489,3 +492,5 @@ Tooltips:
|
||||||
Distraction Free Settings:
|
Distraction Free Settings:
|
||||||
Hide Subscriptions Live: Esta configuración se reemplaza por la configuración
|
Hide Subscriptions Live: Esta configuración se reemplaza por la configuración
|
||||||
«{appWideSetting}» de toda la aplicación, en la sección «{subsection}» de «{settingsSection}»
|
«{appWideSetting}» de toda la aplicación, en la sección «{subsection}» de «{settingsSection}»
|
||||||
|
Go to page: Ir a {page}
|
||||||
|
Close Banner: Cerrar banner
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'eesti keel'
|
Locale Name: 'eesti keel'
|
||||||
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.': >-
|
||||||
Rakenduse see osa pole veel valmis. Tule hiljem tagasi, kui arendustööd on valmis.
|
Rakenduse see osa pole veel valmis. Tule hiljem tagasi, kui arendustööd on valmis.
|
||||||
|
@ -409,7 +408,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Kas
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Kas
|
||||||
sa oled kindel, et soovid kustutada kõik tellimused/profiilid? Seda tegevust
|
sa oled kindel, et soovid kustutada kõik tellimused/profiilid? Seda tegevust
|
||||||
ei saa tagasi pöörata.'
|
ei saa tagasi pöörata.'
|
||||||
Automatically Remove Video Meta Files: Kustuta videote metateave automaatselt
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Salvesta vaadatud videod viimati
|
Save Watched Videos With Last Viewed Playlist: Salvesta vaadatud videod viimati
|
||||||
vaadatud videote esitusloendisse
|
vaadatud videote esitusloendisse
|
||||||
All playlists have been removed: Kõik esitusloendid on eemaldatud
|
All playlists have been removed: Kõik esitusloendid on eemaldatud
|
||||||
|
@ -1014,9 +1012,6 @@ Tooltips:
|
||||||
IP-aadressi blokeerimise, kuid ei sisalda video kestust ja otseesituse olekut
|
IP-aadressi blokeerimise, kuid ei sisalda video kestust ja otseesituse olekut
|
||||||
Fetch Automatically: Kui see valik on kasutusel, siis FreeTube automaatselt laadib
|
Fetch Automatically: Kui see valik on kasutusel, siis FreeTube automaatselt laadib
|
||||||
uue akna avamisel ja profiili vahetamisel sinu tellimuste loendi.
|
uue akna avamisel ja profiili vahetamisel sinu tellimuste loendi.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Selle valiku kasutamisel FreeTube automaatselt kustutab
|
|
||||||
peale video esitamist kogu metateabe.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Region for Trending: Piirkond, mille alusel kuvame hetkel menukad ehk populaarsust
|
Region for Trending: Piirkond, mille alusel kuvame hetkel menukad ehk populaarsust
|
||||||
koguvad videod.
|
koguvad videod.
|
||||||
|
@ -1128,3 +1123,5 @@ Age Restricted:
|
||||||
This channel is age restricted: Kanali vaatamisel on vanusepiirang
|
This channel is age restricted: Kanali vaatamisel on vanusepiirang
|
||||||
This video is age restricted: Video vaatamisel on vanusepiirang
|
This video is age restricted: Video vaatamisel on vanusepiirang
|
||||||
Close Banner: Sulge rekaampilt
|
Close Banner: Sulge rekaampilt
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Euskera'
|
Locale Name: 'Euskera'
|
||||||
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.': >-
|
||||||
Zati hau ez dago prest oraindik. Itzuli aurrerago aurrerapenak egin direnean.
|
Zati hau ez dago prest oraindik. Itzuli aurrerago aurrerapenak egin direnean.
|
||||||
|
@ -400,7 +399,6 @@ Settings:
|
||||||
Privacy Settings: 'Pribatutasunari buruzko ezarpenak'
|
Privacy Settings: 'Pribatutasunari buruzko ezarpenak'
|
||||||
Remember History: 'Historikoa oroitu'
|
Remember History: 'Historikoa oroitu'
|
||||||
Save Watched Progress: 'Ikusitakoaren progresioa gorde'
|
Save Watched Progress: 'Ikusitakoaren progresioa gorde'
|
||||||
Automatically Remove Video Meta Files: 'Bideo metafitxategiak ezabatu automatikoki'
|
|
||||||
Clear Search Cache: 'Bilaketen cachea ezabatu'
|
Clear Search Cache: 'Bilaketen cachea ezabatu'
|
||||||
Are you sure you want to clear out your search cache?: 'Ziur al zaude bilaketa-cachea
|
Are you sure you want to clear out your search cache?: 'Ziur al zaude bilaketa-cachea
|
||||||
garbitu nahi duzula?'
|
garbitu nahi duzula?'
|
||||||
|
@ -1019,10 +1017,6 @@ Tooltips:
|
||||||
bideoaren iraupenaren informaziorik ez du ematen, besteak beste'
|
bideoaren iraupenaren informaziorik ez du ematen, besteak beste'
|
||||||
Fetch Automatically: Gaituta dagoenean, FreeTubek automatikoki eskuratuko du zure
|
Fetch Automatically: Gaituta dagoenean, FreeTubek automatikoki eskuratuko du zure
|
||||||
harpidetza-jarioa leiho berri bat irekitzen denean eta profila aldatzean.
|
harpidetza-jarioa leiho berri bat irekitzen denean eta profila aldatzean.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: 'Gaituta dagoenean, FreeTube-k automatikoki ezabatzen
|
|
||||||
ditu bideoen erreprodukzioan sortutako metafitxategiak, bistaratze orria ixten
|
|
||||||
denean.'
|
|
||||||
|
|
||||||
# Toast Messages
|
# Toast Messages
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'فارسی (ایرانی)'
|
Locale Name: 'فارسی (ایرانی)'
|
||||||
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.': >-
|
||||||
این بخش از نرم افزار هنوز آماده نیست.زمانی که پیشرفتی صورت گرفت به اینجا باز گردید.
|
این بخش از نرم افزار هنوز آماده نیست.زمانی که پیشرفتی صورت گرفت به اینجا باز گردید.
|
||||||
|
@ -290,8 +289,6 @@ Settings:
|
||||||
Privacy Settings: 'تنظیمات امنیتی'
|
Privacy Settings: 'تنظیمات امنیتی'
|
||||||
Remember History: 'حفظ تاریخچه'
|
Remember History: 'حفظ تاریخچه'
|
||||||
Save Watched Progress: 'ذخیره ویدیو های دیده شده'
|
Save Watched Progress: 'ذخیره ویدیو های دیده شده'
|
||||||
Automatically Remove Video Meta Files: 'به صورت خودکار متا فایل های ویدیو را حذف
|
|
||||||
کردن'
|
|
||||||
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?: 'آیا مطمئن هستید که میخواهید
|
||||||
کش جستجویتان را پاک کنید؟'
|
کش جستجویتان را پاک کنید؟'
|
||||||
|
@ -702,9 +699,6 @@ Tooltips:
|
||||||
نمی دهد
|
نمی دهد
|
||||||
Fetch Automatically: هنگامی که فعال باشد، FreeTube به طور خودکار فید اشتراک شما
|
Fetch Automatically: هنگامی که فعال باشد، FreeTube به طور خودکار فید اشتراک شما
|
||||||
را هنگام باز شدن یک پنجره جدید و هنگام تغییر نمایه دریافت می کند.
|
را هنگام باز شدن یک پنجره جدید و هنگام تغییر نمایه دریافت می کند.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: هنگامی که FreeTube فعال باشد، به طور خودکار فایل های
|
|
||||||
متا ایجاد شده در حین پخش ویدیو را حذف می کند، زمانی که صفحه تماشا بسته می شود.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Executable: به طور پیش فرض، FreeTube فرض می کند که پخش
|
Custom External Player Executable: به طور پیش فرض، FreeTube فرض می کند که پخش
|
||||||
کننده خارجی انتخاب شده را می توان از طریق متغیر محیطی PATH پیدا کرد. در صورت
|
کننده خارجی انتخاب شده را می توان از طریق متغیر محیطی PATH پیدا کرد. در صورت
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
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.': >-
|
||||||
Tämä sovelluksen osa ei ole vielä valmis. Tule takaisin myöhemmin kun olemme edistyneet.
|
Tämä sovelluksen osa ei ole vielä valmis. Tule takaisin myöhemmin kun olemme edistyneet.
|
||||||
|
@ -144,6 +143,8 @@ User Playlists:
|
||||||
ja sitä ei voi poistaa.
|
ja sitä ei voi poistaa.
|
||||||
Playlist {playlistName} has been deleted.: Soittolista {playlistName} on poistettu.
|
Playlist {playlistName} has been deleted.: Soittolista {playlistName} on poistettu.
|
||||||
This playlist does not exist: Soittolistaa ei ole olemassa
|
This playlist does not exist: Soittolistaa ei ole olemassa
|
||||||
|
There was an issue with updating this playlist.: Tätä soittolistaa päivittäessä
|
||||||
|
ilmeni ongelma.
|
||||||
Search for Videos: Etsi videot
|
Search for Videos: Etsi videot
|
||||||
Move Video Down: Siirrä video alas
|
Move Video Down: Siirrä video alas
|
||||||
Remove from Playlist: Poista soittolistalta
|
Remove from Playlist: Poista soittolistalta
|
||||||
|
@ -174,6 +175,8 @@ User Playlists:
|
||||||
nimellä on jo olemassa soittolista. Valitse eri nimi.
|
nimellä on jo olemassa soittolista. Valitse eri nimi.
|
||||||
Playlist {playlistName} has been successfully created.: Soittolista {playlistName}
|
Playlist {playlistName} has been successfully created.: Soittolista {playlistName}
|
||||||
on luotu.
|
on luotu.
|
||||||
|
There was an issue with creating the playlist.: Soittolistaa luotaessa ilmeni
|
||||||
|
ongelma.
|
||||||
Add to Favorites: Lisää soittolistaan {playlistName}
|
Add to Favorites: Lisää soittolistaan {playlistName}
|
||||||
Remove from Favorites: Poista soittolistalta {playlistName}
|
Remove from Favorites: Poista soittolistalta {playlistName}
|
||||||
Remove Watched Videos: Poista katsotut videot
|
Remove Watched Videos: Poista katsotut videot
|
||||||
|
@ -363,6 +366,7 @@ Settings:
|
||||||
How do I import my subscriptions?: 'Miten voin tuoda tilaukseni?'
|
How do I import my subscriptions?: 'Miten voin tuoda tilaukseni?'
|
||||||
Fetch Feeds from RSS: Nouda RSS-syöte
|
Fetch Feeds from RSS: Nouda RSS-syöte
|
||||||
Fetch Automatically: Nouda syöte automaattisesti
|
Fetch Automatically: Nouda syöte automaattisesti
|
||||||
|
Only Show Latest Video for Each Channel: Näytä vain jokaisen kanavan uusin video
|
||||||
Advanced Settings:
|
Advanced Settings:
|
||||||
Advanced Settings: 'Lisäasetukset'
|
Advanced Settings: 'Lisäasetukset'
|
||||||
Enable Debug Mode (Prints data to the console): 'Ota virheenkorjaustila käyttöön
|
Enable Debug Mode (Prints data to the console): 'Ota virheenkorjaustila käyttöön
|
||||||
|
@ -404,7 +408,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Haluatko
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Haluatko
|
||||||
cvarmasti poistaa kaikki tilaukset ja profiilit. Tätä toimintoa ei voi perua.
|
cvarmasti poistaa kaikki tilaukset ja profiilit. Tätä toimintoa ei voi perua.
|
||||||
Remove All Subscriptions / Profiles: Poista kaikki tilaukset / profiilit
|
Remove All Subscriptions / Profiles: Poista kaikki tilaukset / profiilit
|
||||||
Automatically Remove Video Meta Files: Poista videoiden metadata automaattisesti
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Tallenna katsotut videot viimeksi
|
Save Watched Videos With Last Viewed Playlist: Tallenna katsotut videot viimeksi
|
||||||
katsotulla soittolistalla
|
katsotulla soittolistalla
|
||||||
Remove All Playlists: Poista kaikki soittolistat
|
Remove All Playlists: Poista kaikki soittolistat
|
||||||
|
@ -458,6 +461,8 @@ Settings:
|
||||||
Playlist File: Soittolistatiedosto
|
Playlist File: Soittolistatiedosto
|
||||||
History File: Historia-tiedosto
|
History File: Historia-tiedosto
|
||||||
Subscription File: Tilaustiedosto
|
Subscription File: Tilaustiedosto
|
||||||
|
Export Playlists For Older FreeTube Versions:
|
||||||
|
Label: Vie soittolistat FreeTuben vanhempiin versioihin
|
||||||
Distraction Free Settings:
|
Distraction Free Settings:
|
||||||
Hide Live Chat: Piilota Live-keskustelu
|
Hide Live Chat: Piilota Live-keskustelu
|
||||||
Hide Popular Videos: Piilota suositut videot
|
Hide Popular Videos: Piilota suositut videot
|
||||||
|
@ -570,6 +575,7 @@ Settings:
|
||||||
Password Settings: Salasana-asetukset
|
Password Settings: Salasana-asetukset
|
||||||
Set Password: Aseta salasana
|
Set Password: Aseta salasana
|
||||||
Remove Password: Poista salasana
|
Remove Password: Poista salasana
|
||||||
|
Expand All Settings Sections: Laajenna asetusten kaikki osiot
|
||||||
About:
|
About:
|
||||||
#On About page
|
#On About page
|
||||||
About: 'Tietoja'
|
About: 'Tietoja'
|
||||||
|
@ -1013,9 +1019,6 @@ Tooltips:
|
||||||
H.264 formaatit. DASH AV1 formaatit vaativat enemmän tehoa toistamiseen! Ne
|
H.264 formaatit. DASH AV1 formaatit vaativat enemmän tehoa toistamiseen! Ne
|
||||||
eivät ole käytettävissä kaikissa videoissa ja näissä tapauksissa soitin käyttää
|
eivät ole käytettävissä kaikissa videoissa ja näissä tapauksissa soitin käyttää
|
||||||
sen sijaan DASH H.264 formaatteja.
|
sen sijaan DASH H.264 formaatteja.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Kun tämä on kytkettynä päälle, FreeTube poistaa automaattisesti
|
|
||||||
meta-tiedostot jotka luotiin videon toiston aikana, katselusivu suljettaessa.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Kaikki ne omavalintaiset komentorivin määreet,
|
Custom External Player Arguments: Kaikki ne omavalintaiset komentorivin määreet,
|
||||||
puolipisteillä eroteltuina (';'), jotka haluat siirtää eteenpäin ulkoiselle
|
puolipisteillä eroteltuina (';'), jotka haluat siirtää eteenpäin ulkoiselle
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Filipino'
|
Locale Name: 'Filipino'
|
||||||
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.': >-
|
||||||
Ang bahagi ito ng aplikasyon ay hindi pa handa. Bumalik po kayo mamaya kapag nag-unsad
|
Ang bahagi ito ng aplikasyon ay hindi pa handa. Bumalik po kayo mamaya kapag nag-unsad
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
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.': >-
|
||||||
Cette partie de l'application n'est pas encore prête. Revenez plus tard lorsque
|
Cette partie de l'application n'est pas encore prête. Revenez plus tard lorsque
|
||||||
|
@ -471,8 +470,6 @@ Settings:
|
||||||
sûr(e) de vouloir supprimer tous les abonnements et les profils ? Cette action
|
sûr(e) de vouloir supprimer tous les abonnements et les profils ? Cette action
|
||||||
est définitive.
|
est définitive.
|
||||||
Remove All Subscriptions / Profiles: Supprimer tous les Abonnements / Profils
|
Remove All Subscriptions / Profiles: Supprimer tous les Abonnements / Profils
|
||||||
Automatically Remove Video Meta Files: Supprimer automatiquement les métafichiers
|
|
||||||
vidéo
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Sauvegarder les vidéos regardées
|
Save Watched Videos With Last Viewed Playlist: Sauvegarder les vidéos regardées
|
||||||
avec la dernière liste de lecture vue
|
avec la dernière liste de lecture vue
|
||||||
All playlists have been removed: Toutes les listes de lecture ont été supprimées
|
All playlists have been removed: Toutes les listes de lecture ont été supprimées
|
||||||
|
@ -1159,10 +1156,6 @@ Tooltips:
|
||||||
External Link Handling: "Choisissez le comportement par défaut quand on clique
|
External Link Handling: "Choisissez le comportement par défaut quand on clique
|
||||||
sur un lien qui ne peut être ouvert dans FreeTube.\nPar défaut, FreeTube ouvrira
|
sur un lien qui ne peut être ouvert dans FreeTube.\nPar défaut, FreeTube ouvrira
|
||||||
le lien dans votre navigateur par défaut.\n"
|
le lien dans votre navigateur par défaut.\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Lorsqu'il est activé, FreeTube supprime automatiquement
|
|
||||||
les MétaFichiers créés pendant la lecture de la vidéo, dès que la page de la
|
|
||||||
vidéo est quittée.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Tous les arguments de ligne de commande personnalisés,
|
Custom External Player Arguments: Tous les arguments de ligne de commande personnalisés,
|
||||||
séparés par des points-virgules (';'), que vous souhaitez transmettre au lecteur
|
séparés par des points-virgules (';'), que vous souhaitez transmettre au lecteur
|
||||||
|
@ -1269,3 +1262,6 @@ Age Restricted:
|
||||||
This channel is age restricted: Cette chaîne est soumise à des restrictions d'âge
|
This channel is age restricted: Cette chaîne est soumise à des restrictions d'âge
|
||||||
This video is age restricted: Cette vidéo est soumise à des restrictions d'âge
|
This video is age restricted: Cette vidéo est soumise à des restrictions d'âge
|
||||||
Close Banner: Fermer la bannière
|
Close Banner: Fermer la bannière
|
||||||
|
# French is the only language that should change this (they have a space before the colon)
|
||||||
|
Display Label: '{label} : {value}'
|
||||||
|
checkmark: ✓
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'galego'
|
Locale Name: 'galego'
|
||||||
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.': >-
|
||||||
Esta parte da aplicación non está lista aínda. Volve máis adiante, cando se avance
|
Esta parte da aplicación non está lista aínda. Volve máis adiante, cando se avance
|
||||||
|
@ -305,8 +304,6 @@ Settings:
|
||||||
Remove All Subscriptions / Profiles: 'Limpar tódalas subscricións / perfís'
|
Remove All Subscriptions / Profiles: 'Limpar tódalas subscricións / perfís'
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Estás
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Estás
|
||||||
seguro de querer limpar tódalas subscricións e perfís? Esta acción é irreversible.'
|
seguro de querer limpar tódalas subscricións e perfís? Esta acción é irreversible.'
|
||||||
Automatically Remove Video Meta Files: Elimina automaticamente os ficheiros meta
|
|
||||||
de vídeo
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Gardalos vídeos vistos coa última
|
Save Watched Videos With Last Viewed Playlist: Gardalos vídeos vistos coa última
|
||||||
lista de reprodución vista
|
lista de reprodución vista
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
|
@ -883,10 +880,6 @@ Tooltips:
|
||||||
# Toast Messages
|
# Toast Messages
|
||||||
Fetch Automatically: Cando estea activado, FreeTube buscará automaticamente o
|
Fetch Automatically: Cando estea activado, FreeTube buscará automaticamente o
|
||||||
teu feed da subscrición, cando se abra unha nova ventá e cando cambies de perfil.
|
teu feed da subscrición, cando se abra unha nova ventá e cando cambies de perfil.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Cando está activado, FreeTube elimina automaticamente
|
|
||||||
os ficheiros meta creados durante a reprodución de vídeo cando a páxina de visualización
|
|
||||||
está pechada.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Calquera argumento de liña de comandos personalizado,
|
Custom External Player Arguments: Calquera argumento de liña de comandos personalizado,
|
||||||
separado por puntos e coma (';'), que desexa que se pase ao reprodutor externo.
|
separado por puntos e coma (';'), que desexa que se pase ao reprodutor externo.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Schwiizerdütsch'
|
Locale Name: 'Schwiizerdütsch'
|
||||||
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.': >-
|
||||||
De Teil vom Programm isch nonig fertig. Bitte chum zumene spötere Ziitpunkt wider
|
De Teil vom Programm isch nonig fertig. Bitte chum zumene spötere Ziitpunkt wider
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'עברית'
|
Locale Name: 'עברית'
|
||||||
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.': >-
|
||||||
החלק הזה ביישומון עדיין לא מוכן. מזמינים אותך לשוב ולבדוק בהמשך כשנתקדם.
|
החלק הזה ביישומון עדיין לא מוכן. מזמינים אותך לשוב ולבדוק בהמשך כשנתקדם.
|
||||||
|
@ -307,7 +306,6 @@ Settings:
|
||||||
Remove All Subscriptions / Profiles: 'למחק את כל המינויים / פרופילים'
|
Remove All Subscriptions / Profiles: 'למחק את כל המינויים / פרופילים'
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'למחוק
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'למחוק
|
||||||
כל את המינויים והפרופילים? זופעולה בלתי הפיכה.'
|
כל את המינויים והפרופילים? זופעולה בלתי הפיכה.'
|
||||||
Automatically Remove Video Meta Files: להסיר אוטומטית קובצי נתוני על של הסרטון
|
|
||||||
Save Watched Videos With Last Viewed Playlist: לשמור את הסרטונים שנצפו עם רשימת
|
Save Watched Videos With Last Viewed Playlist: לשמור את הסרטונים שנצפו עם רשימת
|
||||||
הנגינה לאחרונים שנצפו
|
הנגינה לאחרונים שנצפו
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
|
@ -943,9 +941,6 @@ Tooltips:
|
||||||
נגיש דרך משתנה הסביבה PATH. במקרה הצורך, ניתן להגדיר כאן נתיב משלך.
|
נגיש דרך משתנה הסביבה PATH. במקרה הצורך, ניתן להגדיר כאן נתיב משלך.
|
||||||
Custom External Player Arguments: הארגומנטים משלך לשורת הפקודה שיועברו לנגן החיצוני,
|
Custom External Player Arguments: הארגומנטים משלך לשורת הפקודה שיועברו לנגן החיצוני,
|
||||||
מופרדים בפסיקים (‚;’).
|
מופרדים בפסיקים (‚;’).
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: כאשר אפשרות זו מופעלת, FreeTube מוחק באופן אוטומטי קובצי
|
|
||||||
על שנוצרים במהלך ניגון סרטון, לאחר סגירת עמוד הצפייה.
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: משבית את מטמון ה־HTTP מבוסס הכונן ומפעיל מטמון תמונות מותאם
|
Replace HTTP Cache: משבית את מטמון ה־HTTP מבוסס הכונן ומפעיל מטמון תמונות מותאם
|
||||||
אישית בזיכרון. יגדיל את צריכת הזיכרון (RAM).
|
אישית בזיכרון. יגדיל את צריכת הזיכרון (RAM).
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'English (US)'
|
Locale Name: 'English (US)'
|
||||||
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.': >-
|
||||||
ऐप का यह हिस्सा अभी तैयार नहीं है। बाद में वापस आएँ जब प्रगति हुई हो
|
ऐप का यह हिस्सा अभी तैयार नहीं है। बाद में वापस आएँ जब प्रगति हुई हो
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Hrvatski'
|
Locale Name: 'Hrvatski'
|
||||||
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.': >-
|
||||||
Ovaj dio programa još nije gotov. Navrati kasnije.
|
Ovaj dio programa još nije gotov. Navrati kasnije.
|
||||||
|
@ -401,8 +400,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Stvarno
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Stvarno
|
||||||
želiš ukloniti sve pretplate i profile? Ovo je nepovratna radnja.
|
želiš ukloniti sve pretplate i profile? Ovo je nepovratna radnja.
|
||||||
Remove All Subscriptions / Profiles: Ukloni sve pretplate/profile
|
Remove All Subscriptions / Profiles: Ukloni sve pretplate/profile
|
||||||
Automatically Remove Video Meta Files: Automatski ukloni datoteke metapodataka
|
|
||||||
videa
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Spremi gledana videa sa zadnjim
|
Save Watched Videos With Last Viewed Playlist: Spremi gledana videa sa zadnjim
|
||||||
gledanom zbirkom
|
gledanom zbirkom
|
||||||
Remove All Playlists: Ukloni sve zbirke
|
Remove All Playlists: Ukloni sve zbirke
|
||||||
|
@ -1095,10 +1092,6 @@ Tooltips:
|
||||||
ili stanja „uživo”
|
ili stanja „uživo”
|
||||||
Fetch Automatically: Kada je aktivirano, FreeTube će automatski dohvatiti feed
|
Fetch Automatically: Kada je aktivirano, FreeTube će automatski dohvatiti feed
|
||||||
tvoje pretplate kada se otvori novi prozor i prilikom mijenjanja profila.
|
tvoje pretplate kada se otvori novi prozor i prilikom mijenjanja profila.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Kada je aktivirano, FreeTube automatski uklanja datoteke
|
|
||||||
metapodataka koji su stvoreni tijekom reprodukcije videa, kad se zatvori stranica
|
|
||||||
gledanja.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
External Player: Biranjem vanjskog playera prikazat će se ikona, za otvaranje
|
External Player: Biranjem vanjskog playera prikazat će se ikona, za otvaranje
|
||||||
videa (zbirka, ako je podržana) u vanjskom playeru, na minijaturi. Upozorenje,
|
videa (zbirka, ako je podržana) u vanjskom playeru, na minijaturi. Upozorenje,
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Magyar'
|
Locale Name: 'Magyar'
|
||||||
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.': >-
|
||||||
Az alkalmazás ezen része még nem áll készen. Térjen vissza később amikor előrelépés
|
Az alkalmazás ezen része még nem áll készen. Térjen vissza később amikor előrelépés
|
||||||
|
@ -422,7 +421,6 @@ Settings:
|
||||||
Remove All Subscriptions / Profiles: 'Összes feliratkozás és profil eltávolítása'
|
Remove All Subscriptions / Profiles: 'Összes feliratkozás és profil eltávolítása'
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Biztosan
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Biztosan
|
||||||
törli az összes feliratkozást és profilt? A művelet nem vonható vissza.'
|
törli az összes feliratkozást és profilt? A művelet nem vonható vissza.'
|
||||||
Automatically Remove Video Meta Files: Videó-metafájlok automatikus eltávolítása
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Megtekintett videók mentése az
|
Save Watched Videos With Last Viewed Playlist: Megtekintett videók mentése az
|
||||||
utoljára megtekintett lejátszási listával
|
utoljára megtekintett lejátszási listával
|
||||||
All playlists have been removed: Minden lejátszási lista eltávolításra került
|
All playlists have been removed: Minden lejátszási lista eltávolításra került
|
||||||
|
@ -1109,9 +1107,6 @@ Tooltips:
|
||||||
H.264 formátumok. A DASH AV1 formátumok több energiát igényelnek a lejátszáshoz!
|
H.264 formátumok. A DASH AV1 formátumok több energiát igényelnek a lejátszáshoz!
|
||||||
Nem minden videónál érhetők el, ilyenkor a lejátszó a DASH H.264 formátumot
|
Nem minden videónál érhetők el, ilyenkor a lejátszó a DASH H.264 formátumot
|
||||||
használja helyette.
|
használja helyette.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Ha engedélyezve van, a FreeTube automatikusan törli a
|
|
||||||
videolejátszás során létrehozott metafájlokat, amikor a nézőlapot bezárják.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Executable: Alapértelmezés szerint a FreeTube feltételezi,
|
Custom External Player Executable: Alapértelmezés szerint a FreeTube feltételezi,
|
||||||
hogy a kiválasztott külső lejátszó megtalálható a PATH (ÚTVONAL) környezeti
|
hogy a kiválasztott külső lejátszó megtalálható a PATH (ÚTVONAL) környezeti
|
||||||
|
@ -1211,3 +1206,5 @@ Close Banner: Banner bezárása
|
||||||
Age Restricted:
|
Age Restricted:
|
||||||
This channel is age restricted: Ez a csatorna korhatáros
|
This channel is age restricted: Ez a csatorna korhatáros
|
||||||
This video is age restricted: Ez a videó korhatáros
|
This video is age restricted: Ez a videó korhatáros
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
checkmark: ✓
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Bahasa Indonesia'
|
Locale Name: 'Bahasa Indonesia'
|
||||||
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 dari aplikasi ini belum disiapkan. Kembali lagi nanti saat kemajuan telah
|
Bagian dari aplikasi ini belum disiapkan. Kembali lagi nanti saat kemajuan telah
|
||||||
|
@ -280,7 +279,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Apakah
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Apakah
|
||||||
Anda yakin ingin menghapus semua langganan dan profil? Tindakan ini tidak bisa
|
Anda yakin ingin menghapus semua langganan dan profil? Tindakan ini tidak bisa
|
||||||
diurungkan.'
|
diurungkan.'
|
||||||
Automatically Remove Video Meta Files: Secara Otomatis Hapus File Meta Video
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Pengaturan Langganan'
|
Subscription Settings: 'Pengaturan Langganan'
|
||||||
Hide Videos on Watch: 'Sembunyikan Video saat Menonton'
|
Hide Videos on Watch: 'Sembunyikan Video saat Menonton'
|
||||||
|
@ -809,9 +807,6 @@ Tooltips:
|
||||||
External Link Handling: "Pilih perilaku default ketika tautan, yang tidak dapat
|
External Link Handling: "Pilih perilaku default ketika tautan, yang tidak dapat
|
||||||
dibuka di FreeTube, diklik.\nSecara default FreeTube akan membuka tautan yang
|
dibuka di FreeTube, diklik.\nSecara default FreeTube akan membuka tautan yang
|
||||||
diklik dengan browser default Anda.\n"
|
diklik dengan browser default Anda.\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Saat diaktifkan, FreeTube secara otomatis menghapus file
|
|
||||||
meta yang dibuat selama pemutaran video, saat halaman tonton ditutup.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Semua argumen perintah khusus, dipisahkan dengan
|
Custom External Player Arguments: Semua argumen perintah khusus, dipisahkan dengan
|
||||||
titik koma (';'), yang Anda ingin gunakan dengan pemutar eksternal.
|
titik koma (';'), yang Anda ingin gunakan dengan pemutar eksternal.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Íslenska'
|
Locale Name: 'Íslenska'
|
||||||
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.': >-
|
||||||
Þessi hluti forritsins er ekki tilbúinn. Skoðaðu þetta seinna þegar meira hefur
|
Þessi hluti forritsins er ekki tilbúinn. Skoðaðu þetta seinna þegar meira hefur
|
||||||
|
@ -416,7 +415,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Ertu
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Ertu
|
||||||
viss um að þú viljir fjarlægja allar áskriftir og notkunarsnið? Ekki er hægt
|
viss um að þú viljir fjarlægja allar áskriftir og notkunarsnið? Ekki er hægt
|
||||||
að afturkalla þetta.'
|
að afturkalla þetta.'
|
||||||
Automatically Remove Video Meta Files: Sjálfvirkt fjarlægja lýsigögn úr myndskeiðaskrám
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Vista myndskeið sem horft var á
|
Save Watched Videos With Last Viewed Playlist: Vista myndskeið sem horft var á
|
||||||
með síðast notaða spilunarlista
|
með síðast notaða spilunarlista
|
||||||
Remove All Playlists: Fjarlægja alla spilunarlista
|
Remove All Playlists: Fjarlægja alla spilunarlista
|
||||||
|
@ -1027,9 +1025,6 @@ Tooltips:
|
||||||
# Toast Messages
|
# Toast Messages
|
||||||
Fetch Automatically: Þegar þetta er virkt, mun FreeTube sækja sjálfkrafa áskriftarstreymin
|
Fetch Automatically: Þegar þetta er virkt, mun FreeTube sækja sjálfkrafa áskriftarstreymin
|
||||||
þín þegar nýr gluggi er opnaður og þegar skipt er um notkunarsnið.
|
þín þegar nýr gluggi er opnaður og þegar skipt er um notkunarsnið.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Þegar þetta er virkt, eyðir FreeTube sjálfkrafa lýsigagnaskrám
|
|
||||||
sem útbúnar eru við afspilun, þegar skoðunarsíðunni er lokað.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Öll sérsniðin skipanaviðföng og rofar, aðskilin
|
Custom External Player Arguments: Öll sérsniðin skipanaviðföng og rofar, aðskilin
|
||||||
með semíkommum (';'), sem beina á til utanaðkomandi spilarans.
|
með semíkommum (';'), sem beina á til utanaðkomandi spilarans.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Italiano'
|
Locale Name: 'Italiano'
|
||||||
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.': >-
|
||||||
Questa parte dell'app non è ancora pronta. Torna più tardi quando saranno stati
|
Questa parte dell'app non è ancora pronta. Torna più tardi quando saranno stati
|
||||||
|
@ -412,8 +411,6 @@ Settings:
|
||||||
sicuro di volere eliminare tutte le iscrizioni e i profili? L'operazione non
|
sicuro di volere eliminare tutte le iscrizioni e i profili? L'operazione non
|
||||||
può essere annullata.
|
può essere annullata.
|
||||||
Remove All Subscriptions / Profiles: Elimina tutte le iscrizioni e i profili
|
Remove All Subscriptions / Profiles: Elimina tutte le iscrizioni e i profili
|
||||||
Automatically Remove Video Meta Files: Rimuovi automaticamente i metafile dai
|
|
||||||
video
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Salva i video guardati con l'ultima
|
Save Watched Videos With Last Viewed Playlist: Salva i video guardati con l'ultima
|
||||||
playlist vista
|
playlist vista
|
||||||
All playlists have been removed: Tutte le playlist sono state rimosse
|
All playlists have been removed: Tutte le playlist sono state rimosse
|
||||||
|
@ -1135,10 +1132,6 @@ Tooltips:
|
||||||
Ignore Default Arguments: Non inviare argomenti predefiniti al lettore esterno
|
Ignore Default Arguments: Non inviare argomenti predefiniti al lettore esterno
|
||||||
oltre all'URL del video (ad esempio velocità di riproduzione, URL della playlist,
|
oltre all'URL del video (ad esempio velocità di riproduzione, URL della playlist,
|
||||||
ecc.). Gli argomenti personalizzati verranno comunque trasmessi.
|
ecc.). Gli argomenti personalizzati verranno comunque trasmessi.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Se abilitato, quando chiuderai la pagina di riproduzione
|
|
||||||
, FreeTube eliminerà automaticamente i metafile creati durante la visione del
|
|
||||||
video .
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: Disabilita la cache HTTP basata su disco Electron e abilita
|
Replace HTTP Cache: Disabilita la cache HTTP basata su disco Electron e abilita
|
||||||
una cache di immagini in memoria personalizzata. Comporta un aumento dell'uso
|
una cache di immagini in memoria personalizzata. Comporta un aumento dell'uso
|
||||||
|
@ -1222,3 +1215,5 @@ Age Restricted:
|
||||||
This video is age restricted: Questo video è soggetto a limiti di età
|
This video is age restricted: Questo video è soggetto a limiti di età
|
||||||
This channel is age restricted: Questo canale è soggetto a limiti di età
|
This channel is age restricted: Questo canale è soggetto a limiti di età
|
||||||
Close Banner: Chiudi banner
|
Close Banner: Chiudi banner
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
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.': >-
|
||||||
アプリのこの部分は未完成です。完成後に実行してください。
|
アプリのこの部分は未完成です。完成後に実行してください。
|
||||||
|
@ -110,7 +109,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:
|
||||||
このページは、完全に動作する動画リストではありません。保存またはお気に入りと設定した動画のみが表示されます。操作が完了すると、現在ここにあるすべての動画は「お気に入り」の動画リストに移動します。
|
このページは、完全に動作する動画リストではありません。保存またはお気に入りと設定した動画のみが表示されます。操作が完了すると、現在ここにあるすべての動画は「お気に入り」の動画リストに移動します。
|
||||||
Search bar placeholder: 動画リスト内の検索
|
Search bar placeholder: 動画リスト内の検索
|
||||||
Empty Search Message: この再生リストに、検索に一致する動画はありません
|
Empty Search Message: この再生リストに、検索に一致する動画はありません
|
||||||
|
@ -332,7 +331,6 @@ Settings:
|
||||||
Privacy Settings: 個人情報の設定
|
Privacy Settings: 個人情報の設定
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: すべての登録チャンネルとプロファイルを削除しますか?元に戻せません。
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: すべての登録チャンネルとプロファイルを削除しますか?元に戻せません。
|
||||||
Remove All Subscriptions / Profiles: 登録とプロファイルをすべて削除
|
Remove All Subscriptions / Profiles: 登録とプロファイルをすべて削除
|
||||||
Automatically Remove Video Meta Files: 動画のメタファイルの自動削除
|
|
||||||
Save Watched Videos With Last Viewed Playlist: 「最後に再生した」リストで視聴済み動画を保存
|
Save Watched Videos With Last Viewed Playlist: 「最後に再生した」リストで視聴済み動画を保存
|
||||||
Data Settings:
|
Data Settings:
|
||||||
How do I import my subscriptions?: 私の登録情報を取り込むにはどうしたらいいですか?
|
How do I import my subscriptions?: 私の登録情報を取り込むにはどうしたらいいですか?
|
||||||
|
@ -469,7 +467,7 @@ Settings:
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: HTTP キャッシュの置換
|
Replace HTTP Cache: HTTP キャッシュの置換
|
||||||
Experimental Settings: 実験中の設定
|
Experimental Settings: 実験中の設定
|
||||||
Warning:
|
Warning:
|
||||||
これらの設定は実験的なものであり、有効にするとアプリのクラッシュを引き起こす恐れがあります。バックアップをとっておくことを強くお勧めします。自己責任で使用してください!
|
これらの設定は実験的なものであり、有効にするとアプリのクラッシュを引き起こす恐れがあります。バックアップをとっておくことを強くお勧めします。自己責任で使用してください!
|
||||||
Password Settings:
|
Password Settings:
|
||||||
Password Settings: パスワード設定
|
Password Settings: パスワード設定
|
||||||
|
@ -882,8 +880,6 @@ Tooltips:
|
||||||
Region for Trending: 急上昇の地域設定では、急上昇動画を表示する国を選択できます。
|
Region for Trending: 急上昇の地域設定では、急上昇動画を表示する国を選択できます。
|
||||||
External Link Handling: "FreeTube で開けないリンクをクリックしたときのデフォルトの動作を選択します。\nデフォルトでは、FreeTube
|
External Link Handling: "FreeTube で開けないリンクをクリックしたときのデフォルトの動作を選択します。\nデフォルトでは、FreeTube
|
||||||
はクリックしたリンクをデフォルトのブラウザで開きます。\n"
|
はクリックしたリンクをデフォルトのブラウザで開きます。\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: 有効にすると、FreeTube は動画再生中に作成したメタファイルを、再生ページを閉じるときに自動的に削除します。
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: '";"、セミコロンで区切られたカスタム コマンド ライン引数を外部プレーヤーに渡します。'
|
Custom External Player Arguments: '";"、セミコロンで区切られたカスタム コマンド ライン引数を外部プレーヤーに渡します。'
|
||||||
Ignore Warnings: 現在の外部プレーヤーが、現在のアクションに未対応の場合(動画リストの反転など)に警告を抑制します。
|
Ignore Warnings: 現在の外部プレーヤーが、現在のアクションに未対応の場合(動画リストの反転など)に警告を抑制します。
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'ქართული ენა'
|
Locale Name: 'ქართული ენა'
|
||||||
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.': >-
|
||||||
აპლიკაციის ეს ნაწილი ჯერ არ არის მზად. გთხოვთ, შეამოწმოთ მოგვიანებით, როდესაც იქნება
|
აპლიკაციის ეს ნაწილი ჯერ არ არის მზად. გთხოვთ, შეამოწმოთ მოგვიანებით, როდესაც იქნება
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'ភាសាខ្មែរ'
|
Locale Name: 'ភាសាខ្មែរ'
|
||||||
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.': >-
|
||||||
ផ្នែកនេះនៃកម្មវិធីមិនទាន់រួចរាល់នៅឡើយទេ។ ត្រលប់មកវិញនៅពេលក្រោយ ពេលដែលវឌ្ឍនភាពត្រូវបានបង្កើតឡើង។
|
ផ្នែកនេះនៃកម្មវិធីមិនទាន់រួចរាល់នៅឡើយទេ។ ត្រលប់មកវិញនៅពេលក្រោយ ពេលដែលវឌ្ឍនភាពត្រូវបានបង្កើតឡើង។
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: '한국어'
|
Locale Name: '한국어'
|
||||||
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.': >-
|
||||||
아직 구현 되지 않은 기능입니다. 개발이 완료된 후 다시 시도해주세요.
|
아직 구현 되지 않은 기능입니다. 개발이 완료된 후 다시 시도해주세요.
|
||||||
|
@ -286,7 +285,6 @@ Settings:
|
||||||
Remove All Subscriptions / Profiles: '모든 구독채널과 프로필 삭제'
|
Remove All Subscriptions / Profiles: '모든 구독채널과 프로필 삭제'
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: '정말로
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: '정말로
|
||||||
모든 구독채널과 프로필을 삭제하시겠습니까? 삭제하면 복구가되지않습니다.'
|
모든 구독채널과 프로필을 삭제하시겠습니까? 삭제하면 복구가되지않습니다.'
|
||||||
Automatically Remove Video Meta Files: 비디오 메타 파일 자동 제거
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: '구독 설정'
|
Subscription Settings: '구독 설정'
|
||||||
Hide Videos on Watch: '시청한 동영상 숨기기'
|
Hide Videos on Watch: '시청한 동영상 숨기기'
|
||||||
|
@ -752,9 +750,6 @@ Tooltips:
|
||||||
Ignore Warnings: '현재 외부 플레이어가 현재 작업을 지원하지 않는 경우(예: 재생 목록 반전 등) 경고를 표시하지 않습니다.'
|
Ignore Warnings: '현재 외부 플레이어가 현재 작업을 지원하지 않는 경우(예: 재생 목록 반전 등) 경고를 표시하지 않습니다.'
|
||||||
Custom External Player Arguments: 외부 플레이어로 전달되기를 원하는사용자 지정 명령줄 인수는 세미콜론(';')으로
|
Custom External Player Arguments: 외부 플레이어로 전달되기를 원하는사용자 지정 명령줄 인수는 세미콜론(';')으로
|
||||||
구분됩니다.
|
구분됩니다.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: 활성화되면 FreeTube는 보기 페이지가 닫힐 때 비디오 재생 중에 생성된 메타 파일을 자동으로
|
|
||||||
삭제합니다.
|
|
||||||
Distraction Free Settings:
|
Distraction Free Settings:
|
||||||
Hide Channels: 채널 이름이나 채널 ID를 입력해 해당 채널의 영상이나 재생목록, 채널 자체가 검색이나 인기 영상에 나타나지 않도록
|
Hide Channels: 채널 이름이나 채널 ID를 입력해 해당 채널의 영상이나 재생목록, 채널 자체가 검색이나 인기 영상에 나타나지 않도록
|
||||||
합니다. 입력되는 채널 이름은 완전히 일치해야하며, 대소문자를 구별합니다.
|
합니다. 입력되는 채널 이름은 완전히 일치해야하며, 대소문자를 구별합니다.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'کوردی ناوەڕاست'
|
Locale Name: 'کوردی ناوەڕاست'
|
||||||
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.': >-
|
||||||
ئە بەشە لە ئەپلیکەیشنەکە هێشتا بەردەست نییە. لە کاتێکی دواتردا وەرەوە کە پێشکەوتنێک
|
ئە بەشە لە ئەپلیکەیشنەکە هێشتا بەردەست نییە. لە کاتێکی دواتردا وەرەوە کە پێشکەوتنێک
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Latina'
|
Locale Name: 'Latina'
|
||||||
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.': >-
|
||||||
Haec programmatis pars perfecta non est. Remea cum in hac profectum sit.
|
Haec programmatis pars perfecta non est. Remea cum in hac profectum sit.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'lietuvių'
|
Locale Name: 'lietuvių'
|
||||||
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.': >-
|
||||||
Ši programėlės dalis dar neparengta. Grįžkite vėliau, kai bus padaryta pažanga.
|
Ši programėlės dalis dar neparengta. Grįžkite vėliau, kai bus padaryta pažanga.
|
||||||
|
@ -311,8 +310,6 @@ Settings:
|
||||||
Privacy Settings: 'Privatumo nustatymai'
|
Privacy Settings: 'Privatumo nustatymai'
|
||||||
Remember History: 'Įsiminti istoriją'
|
Remember History: 'Įsiminti istoriją'
|
||||||
Save Watched Progress: 'Išsaugoti peržiūros progresą'
|
Save Watched Progress: 'Išsaugoti peržiūros progresą'
|
||||||
Automatically Remove Video Meta Files: 'Automatiškai pašalinti vaizdo įrašų meta
|
|
||||||
failus'
|
|
||||||
Clear Search Cache: 'Išvalyti paieškos talpyklą'
|
Clear Search Cache: 'Išvalyti paieškos talpyklą'
|
||||||
Are you sure you want to clear out your search cache?: 'Ar tikrai norite išvalyti
|
Are you sure you want to clear out your search cache?: 'Ar tikrai norite išvalyti
|
||||||
paieškos talpyklą?'
|
paieškos talpyklą?'
|
||||||
|
@ -832,9 +829,6 @@ Tooltips:
|
||||||
trukmės ar tiesioginės transliacijos būsenos'
|
trukmės ar tiesioginės transliacijos būsenos'
|
||||||
Fetch Automatically: Kai ši funkcija įjungta, FreeTube automatiškai įkels naują
|
Fetch Automatically: Kai ši funkcija įjungta, FreeTube automatiškai įkels naują
|
||||||
turinį iš prenumeratų, kai atidaromas naujas langas ir perjungiamas profilis.
|
turinį iš prenumeratų, kai atidaromas naujas langas ir perjungiamas profilis.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: 'Įjungus FreeTube, uždarius žiūrėjimo puslapį, automatiškai
|
|
||||||
ištrinami meta failai, sukurti vaizdo atkūrimo metu.'
|
|
||||||
|
|
||||||
# Toast Messages
|
# Toast Messages
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Latviešu'
|
Locale Name: 'Latviešu'
|
||||||
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.': >
|
||||||
|
|
||||||
|
@ -309,7 +308,6 @@ Settings:
|
||||||
Remember History: 'Atcerēties vēsturi'
|
Remember History: 'Atcerēties vēsturi'
|
||||||
Save Watched Progress: 'Saglabāt skatīto attīstību'
|
Save Watched Progress: 'Saglabāt skatīto attīstību'
|
||||||
Save Watched Videos With Last Viewed Playlist: ''
|
Save Watched Videos With Last Viewed Playlist: ''
|
||||||
Automatically Remove Video Meta Files: 'Automātiski noņemt video metadatus'
|
|
||||||
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: ''
|
||||||
|
@ -817,8 +815,6 @@ Tooltips:
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: ''
|
Fetch Feeds from RSS: ''
|
||||||
Fetch Automatically: ''
|
Fetch Automatically: ''
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: ''
|
|
||||||
Experimental Settings:
|
Experimental Settings:
|
||||||
Replace HTTP Cache: ''
|
Replace HTTP Cache: ''
|
||||||
SponsorBlock Settings:
|
SponsorBlock Settings:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Norsk bokmål'
|
Locale Name: 'Norsk bokmål'
|
||||||
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.': >-
|
||||||
Denne delen av programmet er ikke klart enda. Kom tilbake senere når ting er i orden.
|
Denne delen av programmet er ikke klart enda. Kom tilbake senere når ting er i orden.
|
||||||
|
@ -295,7 +294,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Er
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Er
|
||||||
du sikker på at du vil fjerne alle abonnementer og profiler? Dette kan ikke
|
du sikker på at du vil fjerne alle abonnementer og profiler? Dette kan ikke
|
||||||
angres.
|
angres.
|
||||||
Automatically Remove Video Meta Files: Fjern metadata automatisk fra videoer
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Lagre sette videoer med sist sette
|
Save Watched Videos With Last Viewed Playlist: Lagre sette videoer med sist sette
|
||||||
spilleliste
|
spilleliste
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
|
@ -888,9 +886,6 @@ Tooltips:
|
||||||
Allow DASH AV1 formats: DASH AV1-formater kan ha bedre kvalitet enn DASH H.264
|
Allow DASH AV1 formats: DASH AV1-formater kan ha bedre kvalitet enn DASH H.264
|
||||||
-formater. DASH AV1-formater krever dog mer regnekraft for avspilling. Ikke
|
-formater. DASH AV1-formater krever dog mer regnekraft for avspilling. Ikke
|
||||||
tilgjengelig for alle videoer, og i sådant fall bruker avspilleren DASH H.264-formater.
|
tilgjengelig for alle videoer, og i sådant fall bruker avspilleren DASH H.264-formater.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Hvis denne instillingen er på, vil FreeTube automatisk
|
|
||||||
slette metadata generert under videoavspilling når du lukker avspillingsiden.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Alle egendefinerte kommandolinjeargumenter,
|
Custom External Player Arguments: Alle egendefinerte kommandolinjeargumenter,
|
||||||
semikoloninndelt («;») du ønsker å sende til den eksterne avspilleren.
|
semikoloninndelt («;») du ønsker å sende til den eksterne avspilleren.
|
||||||
|
@ -968,3 +963,4 @@ Hashtag:
|
||||||
Hashtag: Emneknagg
|
Hashtag: Emneknagg
|
||||||
This hashtag does not currently have any videos: Denne emneknaggen har ingen videoer
|
This hashtag does not currently have any videos: Denne emneknaggen har ingen videoer
|
||||||
enda
|
enda
|
||||||
|
checkmark: ✓
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'नेपाली'
|
Locale Name: 'नेपाली'
|
||||||
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.': >-
|
||||||
एपको यो भाग अझै तयार भएको छैन। केहि प्रगति भएपछि आउनु होला।
|
एपको यो भाग अझै तयार भएको छैन। केहि प्रगति भएपछि आउनु होला।
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Nederlands'
|
Locale Name: 'Nederlands'
|
||||||
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.': >-
|
||||||
Dit gedeelte van de app is nog niet klaar. Kom later terug als er vooruitgang is
|
Dit gedeelte van de app is nog niet klaar. Kom later terug als er vooruitgang is
|
||||||
|
@ -409,8 +408,6 @@ Settings:
|
||||||
u zeker dat u alle abonnementen en profielen wil verwijderen? Dit kan niet ongedaan
|
u zeker dat u alle abonnementen en profielen wil verwijderen? Dit kan niet ongedaan
|
||||||
worden gemaakt.
|
worden gemaakt.
|
||||||
Remove All Subscriptions / Profiles: Verwijder alle abonnementen / profielen
|
Remove All Subscriptions / Profiles: Verwijder alle abonnementen / profielen
|
||||||
Automatically Remove Video Meta Files: Bestanden met metadata van video's automatisch
|
|
||||||
verwijderen
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Houd bekeken video's bij met de
|
Save Watched Videos With Last Viewed Playlist: Houd bekeken video's bij met de
|
||||||
afspeellijst ‘Laatst bekeken’
|
afspeellijst ‘Laatst bekeken’
|
||||||
Remove All Playlists: Alle afspeellijsten verwijderen
|
Remove All Playlists: Alle afspeellijsten verwijderen
|
||||||
|
@ -1108,10 +1105,6 @@ Tooltips:
|
||||||
External Link Handling: "Kies het standaard gedrag voor wanneer een link dat niet
|
External Link Handling: "Kies het standaard gedrag voor wanneer een link dat niet
|
||||||
kan worden geopend in FreeTube is aangeklikt.\nStandaard zal FreeTube de aangeklikte
|
kan worden geopend in FreeTube is aangeklikt.\nStandaard zal FreeTube de aangeklikte
|
||||||
link openen in je standaardbrowser.\n"
|
link openen in je standaardbrowser.\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Wanneer ingeschakeld zal FreeTube automatisch meta bestanden
|
|
||||||
die worden gecreëerd tijdens het afspelen van video's verwijderen zodra de pagina
|
|
||||||
wordt gesloten.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Aangepaste opdrachtregelargumenten, gescheiden
|
Custom External Player Arguments: Aangepaste opdrachtregelargumenten, gescheiden
|
||||||
door puntkomma's (';'), die je wil doorgeven aan de externe videospeler.
|
door puntkomma's (';'), die je wil doorgeven aan de externe videospeler.
|
||||||
|
@ -1211,3 +1204,5 @@ Age Restricted:
|
||||||
This video is age restricted: Deze video heeft een leeftijdsbeperking
|
This video is age restricted: Deze video heeft een leeftijdsbeperking
|
||||||
Trimmed input must be at least N characters long: Bijgesneden invoer moet minimaal
|
Trimmed input must be at least N characters long: Bijgesneden invoer moet minimaal
|
||||||
1 teken lang zijn | Bijgesneden invoer moet minimaal {length} tekens lang zijn
|
1 teken lang zijn | Bijgesneden invoer moet minimaal {length} tekens lang zijn
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Put the name of your locale in the same language
|
# Put the name of your locale in the same language
|
||||||
Locale Name: 'Norsk nynorsk'
|
Locale Name: 'Norsk nynorsk'
|
||||||
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.': >-
|
||||||
Denne delen av programmet er ikkje klar enda. Ver venleg og kom tilbake på eit seinare
|
Denne delen av programmet er ikkje klar enda. Ver venleg og kom tilbake på eit seinare
|
||||||
|
@ -298,7 +297,6 @@ Settings:
|
||||||
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Er
|
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Er
|
||||||
du sikker på at du vil fjerne alle abonnentar og profil? Dette kan ikkje bli
|
du sikker på at du vil fjerne alle abonnentar og profil? Dette kan ikkje bli
|
||||||
ugjort.'
|
ugjort.'
|
||||||
Automatically Remove Video Meta Files: Fjern metadata automatisk frå videoar
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Abonnementinnstillingar'
|
Subscription Settings: 'Abonnementinnstillingar'
|
||||||
Hide Videos on Watch: 'Skjul sette videoar'
|
Hide Videos on Watch: 'Skjul sette videoar'
|
||||||
|
@ -798,9 +796,6 @@ Tooltips:
|
||||||
# Toast Messages
|
# Toast Messages
|
||||||
Fetch Automatically: Om dette alternativet er aktivert, vil FreeTube automatisk
|
Fetch Automatically: Om dette alternativet er aktivert, vil FreeTube automatisk
|
||||||
hente abonnementfeeden din når eit nytt vindauge opnast og når du bytter profil.
|
hente abonnementfeeden din når eit nytt vindauge opnast og når du bytter profil.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Viss denne innstillinga er på, vil FreeTube automatisk
|
|
||||||
slette metadata generert under videoavspeling når du lukker avspelingsida.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
DefaultCustomArgumentsTemplate: "(Standard: '{defaultCustomArguments}')"
|
DefaultCustomArgumentsTemplate: "(Standard: '{defaultCustomArguments}')"
|
||||||
Custom External Player Executable: Som standard vil FreeTube anta at den valte
|
Custom External Player Executable: Som standard vil FreeTube anta at den valte
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
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.': >-
|
||||||
Ta część aplikacji nie jest jeszcze gotowa. Wróć później, gdy zostaną poczynione
|
Ta część aplikacji nie jest jeszcze gotowa. Wróć później, gdy zostaną poczynione
|
||||||
|
@ -454,7 +453,6 @@ Settings:
|
||||||
jesteś pewny/a, że chcesz usunąć wszystkie subskrypcje i profile? Nie będzie
|
jesteś pewny/a, że chcesz usunąć wszystkie subskrypcje i profile? Nie będzie
|
||||||
można tego cofnąć.
|
można tego cofnąć.
|
||||||
Remove All Subscriptions / Profiles: Usuń wszystkie subskrypcje / profile
|
Remove All Subscriptions / Profiles: Usuń wszystkie subskrypcje / profile
|
||||||
Automatically Remove Video Meta Files: Automatycznie usuwaj pliki metadanych filmu
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Zapisuj do historii film wraz z
|
Save Watched Videos With Last Viewed Playlist: Zapisuj do historii film wraz z
|
||||||
ostatnią odtwarzaną playlistą, która go zawierała
|
ostatnią odtwarzaną playlistą, która go zawierała
|
||||||
All playlists have been removed: Wszystkie playlisty zostały usunięte
|
All playlists have been removed: Wszystkie playlisty zostały usunięte
|
||||||
|
@ -1121,9 +1119,6 @@ Tooltips:
|
||||||
H.264 DASH. Dekodowanie formatu AV1 DASH wymaga większej mocy obliczeniowej.
|
H.264 DASH. Dekodowanie formatu AV1 DASH wymaga większej mocy obliczeniowej.
|
||||||
W filmach, dla których ten format nie jest dostępny, zostanie użyty format H.264
|
W filmach, dla których ten format nie jest dostępny, zostanie użyty format H.264
|
||||||
DASH.
|
DASH.
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Po włączeniu FreeTube automatycznie usunie pliki metadanych
|
|
||||||
utworzone podczas odtwarzania filmu, gdy strona odtwarzacza zostanie zamknięta.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Ignore Warnings: Nie pokazuj ostrzeżeń o nieobsługiwanych akcjach przez zewnętrzny
|
Ignore Warnings: Nie pokazuj ostrzeżeń o nieobsługiwanych akcjach przez zewnętrzny
|
||||||
odtwarzacz (n.p. odwracanie playlist, itp.).
|
odtwarzacz (n.p. odwracanie playlist, itp.).
|
||||||
|
@ -1225,3 +1220,5 @@ Age Restricted:
|
||||||
This video is age restricted: Ten film ma ograniczenie wiekowe
|
This video is age restricted: Ten film ma ograniczenie wiekowe
|
||||||
This channel is age restricted: Ten kanał ma ograniczenie wiekowe
|
This channel is age restricted: Ten kanał ma ograniczenie wiekowe
|
||||||
Close Banner: Zamknij Baner
|
Close Banner: Zamknij Baner
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
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.': >-
|
||||||
Esta parte do aplicativo ainda não está pronta. Volte mais tarde quando o progresso
|
Esta parte do aplicativo ainda não está pronta. Volte mais tarde quando o progresso
|
||||||
|
@ -451,8 +450,6 @@ Settings:
|
||||||
certeza de que deseja remover todas as inscrições e perfis? Isto não pode ser
|
certeza de que deseja remover todas as inscrições e perfis? Isto não pode ser
|
||||||
desfeito.
|
desfeito.
|
||||||
Remove All Subscriptions / Profiles: Remover todas as inscrições ou perfis
|
Remove All Subscriptions / Profiles: Remover todas as inscrições ou perfis
|
||||||
Automatically Remove Video Meta Files: Remover automaticamente os metarquivos
|
|
||||||
de vídeo
|
|
||||||
Save Watched Videos With Last Viewed Playlist: Salvar vídeos assistidos com a
|
Save Watched Videos With Last Viewed Playlist: Salvar vídeos assistidos com a
|
||||||
última playlist visualizada
|
última playlist visualizada
|
||||||
All playlists have been removed: Todas as playlists foram removidas
|
All playlists have been removed: Todas as playlists foram removidas
|
||||||
|
@ -1115,10 +1112,6 @@ Tooltips:
|
||||||
External Link Handling: "Escolha o comportamento padrão quando um link que não
|
External Link Handling: "Escolha o comportamento padrão quando um link que não
|
||||||
pode ser aberto no FreeTube for clicado.\nPor padrão, o FreeTube abrirá o link
|
pode ser aberto no FreeTube for clicado.\nPor padrão, o FreeTube abrirá o link
|
||||||
clicado em seu navegador padrão.\n"
|
clicado em seu navegador padrão.\n"
|
||||||
Privacy Settings:
|
|
||||||
Remove Video Meta Files: Quando ativado, o FreeTube exclui automaticamente os
|
|
||||||
metarquivos criados durante a reprodução do vídeo quando a página de exibição
|
|
||||||
é fechada.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Quaisquer argumentos de linha de comando personalizados,
|
Custom External Player Arguments: Quaisquer argumentos de linha de comando personalizados,
|
||||||
separados por ponto e vírgula (';'), você deseja que seja passado para o player
|
separados por ponto e vírgula (';'), você deseja que seja passado para o player
|
||||||
|
@ -1216,3 +1209,5 @@ Close Banner: Fechar Banner
|
||||||
Age Restricted:
|
Age Restricted:
|
||||||
This channel is age restricted: Este canal tem restrição de idade
|
This channel is age restricted: Este canal tem restrição de idade
|
||||||
This video is age restricted: Este vídeo tem restrição de idade
|
This video is age restricted: Este vídeo tem restrição de idade
|
||||||
|
checkmark: ✓
|
||||||
|
Display Label: '{label}: {value}'
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue